Skip to content
ModelListedExternal
Download

Petri Dish Yolo

YOLO object detection model for detecting round Petri dishes in camera images.

KindOtherBase modelUltralytics/YOLOv8VersionRevision 1c3643d

Model source

Kind
Other
File size
27.5 MB
Base model
Ultralytics/YOLOv8
Version
vRevision 1c3643d
Updated
Sep 22, 2026
Downloads
9
Source
Hugging Face

Source description

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

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:

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.

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:

[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:

CONF_THRES = 0.75
IOU_THRES = 0.45

Example postprocessing:

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:

  • x1, y1 are the top-left bounding-box coordinates
  • x2, y2 are the bottom-right bounding-box coordinates
  • confidence is the model confidence score

Example Inference

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)

Example detection output:

[
    [124.6, 88.3, 412.9, 376.4, 0.93],
    [530.1, 91.5, 816.2, 379.8, 0.89]
]

Output Meaning

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:

  • Top-left corner: (124.6, 88.3)
  • Bottom-right corner: (412.9, 376.4)
  • Confidence: 0.93

Intended Use

This model is intended for detecting Petri dishes in camera images and returning their bounding-box locations.

Limitations

  • The model only detects Petri dishes.
  • Detection quality depends on image quality, camera angle, lighting, occlusion, and similarity to the training data.
  • Postprocessing thresholds may need adjustment for different camera setups.
  • The model output should be validated in the target imaging environment before production use.

Citation

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 @ Rohan R, 2026

Sources

1 source
Hugging FacePrimaryVersion 1c3643d459d0a0f36aad85d97129852c4e9c0dbf
huggingface.co/rotsl/petri_dish_yolo/tree/1c3643d459d0a0f36aad85d97129852c4e9c0dbf

Verified Sep 9

Model artifacts

1 artifact

bestnew.onnx

onnx · 27.5 MB · SHA-256 b8eaa58a86a2…a5d2 · Hugging Face

Download

Source excerpts

2 excerpts

--- 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