Source code for appliedchemlabwork_tayra.D3._finder

# SPDX-FileCopyrightText: 2026-present Tayra Sakurai <tayra_sakurai@icloud.com>
#
# SPDX-License-Identifier: AGPL-3.0-or-later
import cv2
from pathlib import Path
from ultralytics import YOLO
from ultralytics.engine.results import Results
import numpy as np
import polars as pl


[docs] def find_boxes( filepath: str, save_to: str, fsave: str = './runs/detect/predict', ): """Find bands as bounding boxes. Parameters ---------- filepath : str The path to the image file containing the DNA electrophoresis bands. save_to : str The directory to save the data. fsave : str, optional The directory to save the result. Returns ------- data : List of Results The list of the results. Raises ------ FileNotFoundError The image file was not found. """ model = YOLO("./trained-model/weights/best.pt") img = cv2.imread(filepath) if img is None: raise FileNotFoundError('The requested file was not found.') results: list[Results] = model(img, save=True, save_dir=fsave, conf=0.1) for i, result in enumerate(results): df = result.to_df() print(df) print(df[:, 'box'][0]) df = df.with_columns( pl.col('box').struct.with_fields( x=pl.mean_horizontal( pl.field('x1'), pl.field('x2') ), y=pl.mean_horizontal( pl.field('y1'), pl.field('y2') ) ) ) print(df.unnest("box")) df.unnest('box').write_csv(f'{save_to}/result-{i}.csv', include_bom=True) return results