| from ultralytics import YOLO |
| import cv2 |
|
|
| import util |
| from subdirectory.sort import * |
| from util import get_car, read_license_plate, write_csv |
|
|
|
|
| results = {} |
|
|
| mot_tracker = Sort() |
|
|
| |
| coco_model = YOLO('yolov8n.pt') |
| license_plate_detector = YOLO('./models/license_plate_detector.pt') |
|
|
| |
| cap = cv2.VideoCapture('./sample.mp4') |
|
|
| vehicles = [2, 3, 5, 7] |
|
|
| |
| frame_nmr = -1 |
| ret = True |
| while ret: |
| frame_nmr += 1 |
| ret, frame = cap.read() |
| if ret: |
| results[frame_nmr] = {} |
| |
| detections = coco_model(frame)[0] |
| detections_ = [] |
| for detection in detections.boxes.data.tolist(): |
| x1, y1, x2, y2, score, class_id = detection |
| if int(class_id) in vehicles: |
| detections_.append([x1, y1, x2, y2, score]) |
|
|
| |
| track_ids = mot_tracker.update(np.asarray(detections_)) |
|
|
| |
| license_plates = license_plate_detector(frame)[0] |
| for license_plate in license_plates.boxes.data.tolist(): |
| x1, y1, x2, y2, score, class_id = license_plate |
|
|
| |
| xcar1, ycar1, xcar2, ycar2, car_id = get_car(license_plate, track_ids) |
|
|
| if car_id != -1: |
|
|
| |
| license_plate_crop = frame[int(y1):int(y2), int(x1): int(x2), :] |
|
|
| |
| license_plate_crop_gray = cv2.cvtColor(license_plate_crop, cv2.COLOR_BGR2GRAY) |
| _, license_plate_crop_thresh = cv2.threshold(license_plate_crop_gray, 64, 255, cv2.THRESH_BINARY_INV) |
|
|
| |
| license_plate_text, license_plate_text_score = read_license_plate(license_plate_crop_thresh) |
|
|
| if license_plate_text is not None: |
| results[frame_nmr][car_id] = {'car': {'bbox': [xcar1, ycar1, xcar2, ycar2]}, |
| 'license_plate': {'bbox': [x1, y1, x2, y2], |
| 'text': license_plate_text, |
| 'bbox_score': score, |
| 'text_score': license_plate_text_score}} |
|
|
| |
| write_csv(results, './test.csv') |