import cv2 import numpy as np from config import NUM_CLASSES, CRNN_WEIGHTS_PATH, YOLO_WEIGHTS_PATH from license_plate_recognizer import LicensePlateRecognizer # ------------------------------------------------------------ # Запуск в режиме реального времени (веб-камера) # ------------------------------------------------------------ if __name__ == "__main__": lpr = LicensePlateRecognizer( yolo_model_path=YOLO_WEIGHTS_PATH, crnn_model_path=CRNN_WEIGHTS_PATH, num_classes=NUM_CLASSES, device="cpu" ) cap = cv2.VideoCapture(0) # cap.set(cv2.CAP_PROP_FRAME_WIDTH, 640) # cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 480) while True: ret, frame = cap.read() if not ret: print("Не удалось считать кадр с веб-камеры.") break detections = lpr.detect_and_recognize_frame(frame, padding=5) for det in detections: x1, y1, x2, y2 = det["bbox"] text = det["text"] cv2.rectangle(frame, (x1, y1), (x2, y2), (0, 255, 0), 2) cv2.putText( frame, text, (x1, y1 - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.7, (0, 255, 0), 2 ) height, width, _ = frame.shape black_bar_width = 300 black_bar = np.zeros((height, black_bar_width, 3), dtype=np.uint8) y_start = 40 for i, det in enumerate(detections): txt = det["text"] cv2.putText( black_bar, f"Plate #{i+1}: {txt}", (10, y_start), cv2.FONT_HERSHEY_SIMPLEX, 0.7, (255, 255, 255), 2 ) y_start += 40 display_frame = np.hstack((frame, black_bar)) cv2.imshow("License Plate Recognition", display_frame) key = cv2.waitKey(1) & 0xFF if key == 27 or key == ord('q'): break cap.release() cv2.destroyAllWindows()