Я новичок в обработке изображений и, как часть моего последнего года проекта, я должен создать систему распознавания номерных знаков. Пока что мне удалось: 1. Разделить видео на соответствующие кадры. 2. Используйте ImageAI с моделью Retin aNet для обнаружения и изоляции транспортных средств. 3. Извлечение транспортных средств путем итерации каждого кадра с заданными параметрами (минимальная вероятность = 75, режим загрузки = быстрее). В настоящее время мое требование состоит в том, чтобы изолировать номерной знак от извлеченные транспортные средства части 3, упомянутые выше, и преобразовать их в текст.
Я нашел следующий код на https://cppsecrets.com/users/1001989710897107975054485364103109971051084699111109/Automatic-Vehicle-Number-Plate-Recognition-using-OpenCV-and-Tesseract-OCR-A-Real-World-Python-project.php
, когда я запустил код для следующего изображения Тестовое изображение
def main():
import numpy as np
import cv2
import imutils
import sys
import pytesseract
import pandas as pd
import time
pytesseract.pytesseract.tesseract_cmd = r"C:\Program Files\Tesseract-OCR\tesseract.exe"
img = cv2.imread('C:\\Users\\priyan\\Desktop\\Number plate Identification\\Test
Detection\\imagenew.jpg-objects\\car-6.jpg')
img = imutils.resize(img, width=500)
cv2.imshow("Original Image", img) #Show the original image
cv2.waitKey(0)
gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
cv2.imshow("Preprocess 1 - Grayscale Conversion", gray_img)
cv2.waitKey(0)
gray_img = cv2.bilateralFilter(gray_img, 11, 17, 17)
cv2.imshow("Preprocess 2 - Bilateral Filter", gray_img)
cv2.waitKey(0)
c_edge = cv2.Canny(gray_img, 120, 200)
cv2.imshow("Preprocess 3 - Canny Edges", c_edge)
cv2.waitKey(0)
cnt, new = cv2.findContours(c_edge, cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE)
cnt = sorted(cnt, key = cv2.contourArea, reverse = True)[:30]
NumberPlateCount = None
im2 = img.copy()
cv2.drawContours(im2, cnt, -1, (0,255,0), 2)
cv2.imshow("Top 30 Contours", im2)
cv2.waitKey(0)
count = 0
for c in cnt:
perimeter = cv2.arcLength(c, True)
approx = cv2.approxPolyDP(c, 0.02 * perimeter, True)
if len(approx) == 4:
NumberPlateCount = approx
break
masked = np.zeros(gray_img.shape,np.uint8)
new_image1 = cv2.drawContours(masked,[NumberPlateCount],0,255,-1)
new_image = cv2.bitwise_and(img,img,mask=masked)
cv2.imshow("4 - Final_Image",new_image) #The final image showing only the number plate.
cv2.waitKey(0)
#Configuration for tesseract
configr = ('-l eng --oem 1 --psm 3')
#Running Tesseract-OCR on final image.
text_no = pytesseract.image_to_string(new_image, config=configr)
#The extracted data is stored in a data file.
data = {'Date': [time.asctime(time.localtime(time.time()))],'Vehicle_number': [text_no]}
df = pd.DataFrame(data, columns = ['Date', 'Vehicle_number'])
df.to_csv('Dataset_VehicleNo.csv')
#Printing the recognized text as output.
print(text_no)
cv2.waitKey(0)
if __name__ == '__main__':
main()
В качестве конечного результата я получаю набор изображений только из «Исходное изображение в 4-конечное изображение» с сообщением об ошибке
new_image1 = cv2.drawContours (в маске, [NumberPlateCount], 0,255, -1) cv2.error: OpenCV (4.1.2) C: \ projects \ opencv-python \ opencv \ modules \ imgproc \ src \ drawing. cpp: 2606: ошибка: (-215: подтверждение не выполнено) reader.ptr! = NULL в функции 'cvDrawContours'
Может кто-нибудь, пожалуйста, помогите мне в получении надлежащего ROI номерного знака и Требуемый выход o f CAU 2112 т xt номерного знака.