File size: 2,542 Bytes
8f4165b 71320a3 8f4165b 71320a3 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 |
---
license: agpl-3.0
pipeline_tag: object-detection
tags:
- ultralytics
- tracking
- instance-segmentation
- image-classification
- pose-estimation
- obb
- object-detection
- yolo
- yolov8
- license_plate
- Iran
- veichle_lisence_plate
- onnx
---
## Model Overview
This model is an ONNX version of a [YOLOv8 medium fine tuned](https://huggingface.co/shalchianmh/Iran_license_plate_detection_YOLOv8m) on Iran veichle plate dataset. YOLOv8 is designed to efficiently detect objects in images by generating bounding boxes around objects of interest and predicting their associated class probabilities.
## How to Use
### Inference Using ONNX Runtime
```python
import onnxruntime as rt
sess = rt.InferenceSession("path_to_model.onnx")
# View model input and output details
input_name = sess.get_inputs()[0].name
print("Input name:", input_name)
input_shape = sess.get_inputs()[0].shape
print("Input shape:", input_shape)
input_type = sess.get_inputs()[0].type
print("Input type:", input_type)
output_name = sess.get_outputs()[0].name
print("Output name:", output_name)
output_shape = sess.get_outputs()[0].shape
print("Output shape:", output_shape)
output_type = sess.get_outputs()[0].type
print("Output type:", output_type)
```
### Pre-processing
1. **Load Image**: Load the image using `cv2.imread()`.
2. **Resize**: Resize the input image to a 224x224 resolution.
3. **Normalize**: Scale pixel values to the range [0, 1] by dividing by 255.
4. **Transpose**: Change the image array to channel-first format `(C, H, W)`.
5. **Convert**: Convert the image to a float32 NumPy array and add a batch dimension.
```python
import cv2
import numpy as np
# Pre-process the input image
image_path = "/path_to_image.png"
input_image = cv2.imread(image_path)
resized_image = cv2.resize(input_image, (224, 224))
scaled_image = resized_image / 255.0
transposed_image = scaled_image.transpose((2, 0, 1))
prep_image = np.array(transposed_image, dtype='float32')[None, :]
```
### Inference
After pre-processing, run the model on the prepared image.
```python
# Run inference
output_probabilities = sess.run([output_name], {input_name: prep_image})
```
### Post-processing
To extract bounding box details:
- **Identify** the most probable bounding box.
- **Extract** the coordinates (x, y, width, height) and the associated probability.
```python
# Extract bounding box information
most_prob_idx = output_probabilities[0][0][4].argmax()
x, y, width, height, prob = output_probabilities[0][0][:, most_prob_idx]
print(x, y, width, height, prob)
```
|