YOLO object detection model for detecting round Petri dishes in camera images.
Fuente del modelo
Descripción de la fuente
YOLO object detection model for detecting round Petri dishes in camera images.
Fuentes
1 fuenteVerificado 9 sept
Artefactos del modelo
1 artefactoExtractos de fuentes
2 extractosThe model takes an image as input and returns bounding-box detections for Petri dishes.
It performs Petri dish detection only.
The model expects one image frame.
Input tensor
Shape: [1, 3, H, W]
Type: float32
Range: 0.0 to 1.0
Layout: NCHW
Where:
The input size should be read from the ONNX model:
input_size = session.get_inputs()[0].shape[2]
The image should be resized with aspect-ratio preservation and padded to a square input canvas.
import cv2
import numpy as np
def preprocess(img: np.ndarray, input_size: int):
h, w = img.shape[:2]
scale = input_size / max(h, w)
nh, nw = int(h * scale), int(w * scale)
canvas = np.full((input_size, input_size, 3), 114, dtype=np.uint8)
top = (input_size - nh) // 2
left = (input_size - nw) // 2
resized = cv2.resize(img, (nw, nh))
canvas[top:top + nh, left:left + nw] = resized
blob = canvas.astype(np.float32) / 255.0
blob = np.transpose(blob, (2, 0, 1))[None]
return blob, scale, left, top, w, h
The model outputs YOLO-style detections.
Each raw detection has the format:
[x_center, y_center, width, height, confidence]
Where:
After inference, detections should be:
CONF_THRES = 0.75
IOU_THRES = 0.45
import cv2
def postprocess(pred, scale, dx, dy, orig_w, orig_h):
boxes = []
scores = []
for det in pred[0][0]:
conf = float(det[4])
if conf < CONF_THRES:
continue
x, y, w, h = det[:4]
x1 = (x - w / 2 - dx) / scale
y1 = (y - h / 2 - dy) / scale
x2 = (x + w / 2 - dx) / scale
y2 = (y + h / 2 - dy) / scale
boxes.append([x1, y1, x2, y2])
scores.append(conf)
if not boxes:
return []
rects = [
[int(x1), int(y1), int(x2 - x1), int(y2 - y1)]
for x1, y1, x2, y2 in boxes
]
idx = cv2.dnn.NMSBoxes(
rects,
scores,
CONF_THRES,
IOU_THRES
)
if idx is None or len(idx) == 0:
return []
return [
(
boxes[i][0],
boxes[i][1],
boxes[i][2],
boxes[i][3],
scores[i]
)
for i in idx.flatten()
]
Final detections are returned as:
[x1, y1, x2, y2, confidence]
Where:
import cv2
import numpy as np
import onnxruntime as ort
CONF_THRES = 0.75
IOU_THRES = 0.45
model_path = "bestnew.onnx"
image_path = "example.jpg"
session = ort.InferenceSession(
model_path,
providers=["CPUExecutionProvider"]
)
input_name = session.get_inputs()[0].name
input_size = session.get_inputs()[0].shape[2]
image = cv2.imread(image_path)
blob, scale, dx, dy, orig_w, orig_h = preprocess(image, input_size)
predictions = session.run(
None,
{input_name: blob}
)
detections = postprocess(
predictions,
scale,
dx,
dy,
orig_w,
orig_h
)
print(detections)
[
[124.6, 88.3, 412.9, 376.4, 0.93],
[530.1, 91.5, 816.2, 379.8, 0.89]
]
Each detection represents one detected Petri dish in the input image.
[x1, y1, x2, y2, confidence]
Example:
[124.6, 88.3, 412.9, 376.4, 0.93]
This means:
This model is intended for detecting Petri dishes in camera images and returning their bounding-box locations.
If you use this model, please cite this Hugging Face repository.
@misc{rohan_r_2026,
author = { Rohan R },
title = { petri_dish_yolo (Revision 0ab5b88) },
year = 2026,
url = { https://huggingface.co/rotsl/petri_dish_yolo },
doi = { 10.57967/hf/9098 },
publisher = { Hugging Face }
}
--- license: mit language: - en metrics: - precision - recall - mAP50 - mAP50-95 base_model: - Ultralytics/YOLOv8 pipeline_tag: object-detection tags: - yolov8 - onnx - petri_dish - bioinformatics - automator - computer-vision - biology - lab-automation --- ### Petri Dish YOLO ONNX YOLO object detection model for detecting round Petri dishes in camera images. #### Model Details * Model file: bestnew.onnx * Format: ONNX * Task: Object detection * Object class: Petri dish * Inference runtime: ONNX Runtime * Recommended provider: CPUExecutionProvider #### What the Model Does The model takes an image as input and returns bounding-box detections for Petri dishes. It performs Petri dish detection only. #### Input The model expects one image frame. Input tensor ```bash Shape: [1, 3, H, W] Type: float32 Range: 0.0 to 1.0 Layout: NCHW ``` Where: * 1 is the batch size * 3 is the number of image channels * H and W are the model input height and width The input size should be read from the ONNX model: ```python input_size = session.get_inputs()[0].shape[2] ``` #### Preprocessing The image should be resized with aspect-ratio preservation and padded to a square input canvas. ```python import cv2 import numpy as np def preprocess(img: np.ndarray, input_size: int): h, w = img.shape[:2] scale = input_size / max(h, w) nh, nw = int(h * scale), int(w * scale) canvas = np.full((input_size, input_size, 3), 114, dtype=np.uint8) top = (input_size - nh) // 2 left = (input_size - nw) // 2 resized = cv2.resize(img, (nw, nh)) canvas[top:top + nh, left:left + nw] = resized blob = canvas.astype(np.float32) / 255.0 blob = np.transpose(blob, (2, 0, 1))[None] return blob, scale, left, top, w, h ``` #### Output The model outputs YOLO-style detections. Each raw detection has the format: ```bash [x_center, y_center, width, height, confidence] ``` Where: * x_center is the bounding-box centre X coordinate * y_center is the bounding-box centre Y coordinate * width is the bounding-box width * height is the bounding-box height * confidence is the detection confidence score #### Postprocessing After inference, detections should be: 1. Filtered by confidence 2. Converted from centre-format boxes to corner-format boxes 3. Mapped back to the original image coordinate space 4. Filtered with Non-Maximum Suppression #### Recommended thresholds: ```bash CONF_THRES =...
Source context: 9 downloads · 0 likes · Pipeline object-detection · Repo rotsl/petri_dish_yolo