Как извлечь номерной знак как отдельное изображение и использовать OCR на извлеченном номерном знаке - PullRequest
0 голосов
/ 13 февраля 2020

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...