70 lines
2.0 KiB
Python
70 lines
2.0 KiB
Python
|
|
|||
|
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()
|