Сохранение обнаруженной пластины LPR один раз в Python OpenCv - PullRequest
0 голосов
/ 22 марта 2020

Я написал этот код, чтобы обнаружить номерной знак внутри красного прямоугольника как созданный. Он предназначен для системы 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()
...