Abhishek Gola
Added samples
4a3fb3c
import cv2 as cv
import numpy as np
import gradio as gr
from lpd_yunet import LPD_YuNet
from huggingface_hub import hf_hub_download
# Download ONNX model from Hugging Face
model_path = hf_hub_download(
repo_id="opencv/license_plate_detection_yunet",
filename="license_plate_detection_lpd_yunet_2023mar.onnx"
)
# Initialize LPD-YuNet model
model = LPD_YuNet(
modelPath=model_path,
confThreshold=0.9,
nmsThreshold=0.3,
topK=5000,
keepTopK=750,
backendId=cv.dnn.DNN_BACKEND_OPENCV,
targetId=cv.dnn.DNN_TARGET_CPU
)
def visualize(image, dets, line_color=(0, 255, 0), text_color=(0, 0, 255)):
output = image.copy()
for det in dets:
bbox = det[:-1].astype(np.int32)
x1, y1, x2, y2, x3, y3, x4, y4 = bbox
cv.line(output, (x1, y1), (x2, y2), line_color, 2)
cv.line(output, (x2, y2), (x3, y3), line_color, 2)
cv.line(output, (x3, y3), (x4, y4), line_color, 2)
cv.line(output, (x4, y4), (x1, y1), line_color, 2)
return output
def detect_license_plates(input_image):
input_image = cv.cvtColor(input_image, cv.COLOR_RGB2BGR)
h, w, _ = input_image.shape
model.setInputSize([w, h])
results = model.infer(input_image)
if results is None or len(results) == 0:
return cv.cvtColor(input_image, cv.COLOR_BGR2RGB)
output = visualize(input_image, results)
output = cv.cvtColor(output, cv.COLOR_BGR2RGB)
return output
# Gradio Interface
with gr.Blocks(css='''.example * {
font-style: italic;
font-size: 18px !important;
color: #0ea5e9 !important;
}''') as demo:
gr.Markdown("### License Plate Detection (LPD-YuNet)")
gr.Markdown("Upload a vehicle image to detect license plates using OpenCV's ONNX-based LPD-YuNet model.")
with gr.Row():
input_image = gr.Image(type="numpy", label="Upload Vehicle Image")
output_image = gr.Image(type="numpy", label="Detected License Plates")
# Clear output when new image is uploaded
input_image.change(fn=lambda: (None), outputs=output_image)
with gr.Row():
submit_btn = gr.Button("Submit", variant="primary")
clear_btn = gr.Button("Clear")
submit_btn.click(fn=detect_license_plates, inputs=input_image, outputs=output_image)
clear_btn.click(fn=lambda:(None, None), outputs=[input_image, output_image])
gr.Markdown("Click on any example to try it.", elem_classes=["example"])
gr.Examples(
examples=[
["examples/licenseplate1.jpg"],
["examples/licenseplate2.jpg"]
],
inputs=input_image
)
gr.Markdown("Example images credit: https://unsplash.com/")
if __name__ == "__main__":
demo.launch()