Я написал этот код, чтобы обнаружить номерной знак внутри красного прямоугольника как созданный. Он предназначен для системы Live LPR. Теперь я хотел бы сохранить обнаруженный LPR только один раз в базе данных, как только он будет обнаружен с наиболее точными данными. Можно ли настроить pytessract для настройки для большей точности в определенном формате, а также как сохранить обнаруженную пластину из этого непрерывно генерируемого живого потока, то есть непрерывно обнаруживаемой пластины lucense, чтобы сохранить ее в файле только один раз.
import cv2
import numpy as np
import pytesseract
import time
import threading
import queue
que=queue.Queue()
cap=cv2.VideoCapture(0)
upper_left=(0,250)
bottom_right=(700,500)
pytesseract.pytesseract.tesseract_cmd=r'C:\\Program Files\\Tesseract-OCR\\tesseract.exe'
def detect_plate(img,fullimg):
cascade=cv2.CascadeClassifier("./cascades/indian_license_plate.xml")
roi=cascade.detectMultiScale(img,1.2,7)
for(x,y,w,h) in roi:
plate=img[y:y+h,x:x+w]
plate_rec=cv2.rectangle(fullimg,(x,y+250),(x+w+0,y+h+250),(0,1,100),2)
return plate,plate_rec
return None,None
def extract_text(img):
text=pytesseract.image_to_string(img)
return text
while True:
ret,frame=cap.read()
gray_frame=cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)
rec_frame=cv2.rectangle(frame,upper_left,bottom_right,(0,100,20),2)
chopped_img=frame[upper_left[1]:bottom_right[1],upper_left[0]:bottom_right[0]]
chopped_img_gray=cv2.cvtColor(chopped_img,cv2.COLOR_BGR2GRAY)
#cv2.imshow("R",chopped_img)
plate,drawn_img=detect_plate(chopped_img_gray,frame)
if np.all(plate) is not None:
cv2.imshow("LPR",drawn_img)
extract_thread=threading.Thread(target=lambda q, arg1: q.put(extract_text(arg1)), args=(que,plate))
extract_thread.start()
platetext=que.get()
print(platetext)
else:
cv2.imshow("LPR",rec_frame)
key=cv2.waitKey(1)
if(key==ord('q')):
break
cap.release()
cv2.destroyAllWindows()