| import gradio as gr |
| import torch |
| import numpy as np |
| import cv2 |
| import sqlite3 |
| from PIL import Image, ImageDraw |
| from transformers import YolosImageProcessor, YolosForObjectDetection |
| from datetime import datetime |
|
|
| |
| |
| |
| processor = YolosImageProcessor.from_pretrained( |
| "nickmuchi/yolos-small-finetuned-license-plate-detection" |
| ) |
| model = YolosForObjectDetection.from_pretrained( |
| "nickmuchi/yolos-small-finetuned-license-plate-detection" |
| ) |
| model.eval() |
|
|
| |
| |
| |
| conn = sqlite3.connect("vehicles.db", check_same_thread=False) |
| cursor = conn.cursor() |
| cursor.execute(""" |
| CREATE TABLE IF NOT EXISTS vehicles ( |
| id INTEGER PRIMARY KEY AUTOINCREMENT, |
| time TEXT, |
| plate_id TEXT, |
| vehicle_type TEXT |
| ) |
| """) |
| conn.commit() |
|
|
| |
| |
| |
| def classify_plate_color(plate_img): |
| img = np.array(plate_img) |
| hsv = cv2.cvtColor(img, cv2.COLOR_RGB2HSV) |
|
|
| green = cv2.inRange(hsv, (35,40,40), (85,255,255)) |
| yellow = cv2.inRange(hsv, (15,50,50), (35,255,255)) |
|
|
| if np.sum(green) > np.sum(yellow): |
| return "EV" |
| elif np.sum(yellow) > 0: |
| return "Commercial" |
| return "Personal" |
|
|
| |
| |
| |
| def generate_bar_chart(): |
| cursor.execute(""" |
| SELECT vehicle_type, COUNT(*) FROM vehicles |
| GROUP BY vehicle_type |
| """) |
| data = cursor.fetchall() |
|
|
| chart = np.ones((300, 400, 3), dtype=np.uint8) * 255 |
| cv2.putText(chart, "Vehicle Count Report", (60,30), |
| cv2.FONT_HERSHEY_SIMPLEX, 0.7, (0,0,0), 2) |
|
|
| max_count = max([c for _, c in data], default=1) |
| x = 70 |
|
|
| for vtype, count in data: |
| bar_height = int((count / max_count) * 180) |
| cv2.rectangle(chart, (x,2 |
|
|