| import cv2 as cv | |
| import numpy as np | |
| import gradio as gr | |
| from mobilenet import MobileNet | |
| from huggingface_hub import hf_hub_download | |
| # Download ONNX model from Hugging Face | |
| model_path = hf_hub_download(repo_id="opencv/image_classification_mobilenet", filename="image_classification_mobilenetv1_2022apr.onnx") | |
| top_k = 1 | |
| backend_id = cv.dnn.DNN_BACKEND_OPENCV | |
| target_id = cv.dnn.DNN_TARGET_CPU | |
| # Load MobileNet model | |
| model = MobileNet(modelPath=model_path, topK=top_k, backendId=backend_id, targetId=target_id) | |
| def classify_image(input_image): | |
| image = cv.resize(input_image, (256, 256)) | |
| image = image[16:240, 16:240, :] | |
| result = model.infer(image) | |
| result_str = "\n".join(f"{label}" for label in result) | |
| return result_str | |
| # Gradio Interface | |
| demo = gr.Interface( | |
| fn=classify_image, | |
| inputs=gr.Image(type="numpy", label="Upload Image"), | |
| outputs=gr.Textbox(label="Top Prediction(s)"), | |
| title="Image Classification with MobileNet (OpenCV DNN)", | |
| allow_flagging="never", | |
| description="Upload an image to classify using a MobileNet model loaded with OpenCV DNN." | |
| ) | |
| if __name__ == "__main__": | |
| demo.launch() | |