Обнаружение текста меток с помощью PyTesseract - PullRequest
0 голосов
/ 27 апреля 2020

Средство обнаружения меток, которое автоматически идентифицирует и сортирует изображения в алфавитном порядке по номеру оборудования (19-V1083AI). Я использовал библиотеку pytesseract для преобразования изображения в строку после того, как контуры этикетки оборудования были определены. Хотя код работает правильно, он никогда не выводит номер оборудования. Я впервые использую библиотеку pytesseract и функцию goodFeaturesToTrack. Любая помощь будет принята с благодарностью!

Исходное изображение

import numpy as np
import cv2
import imutils #resizeimage
import pytesseract # convert img to string
from matplotlib import pyplot as plt
pytesseract.pytesseract.tesseract_cmd = r"C:\Program Files\Tesseract-OCR\tesseract.exe"

# Read the image file
image = cv2.imread('Car Images/s3.JPG')

# Resize the image - change width to 500
image = imutils.resize(image, width=500)


# Display the original image
cv2.imshow("Original Image", image)
cv2.waitKey(0)

# RGB to Gray scale conversion
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
cv2.imshow("1 - Grayscale Conversion", gray)
cv2.waitKey(0)

# Noise removal with iterative bilateral filter(removes noise while preserving edges)
gray = cv2.bilateralFilter(gray, 11, 17, 17)
cv2.imshow("2 - Bilateral Filter", gray)
cv2.waitKey(0)


corners = cv2.goodFeaturesToTrack(gray,60,0.001,10)

corners = np.int0(corners)

for i in corners:
    x,y = i.ravel()
    cv2.circle(image,(x,y),0,255,-1)
    coord = np.where(np.all(image == (255, 0, 0),axis=-1))
plt.imshow(image)

# Use tesseract to covert image into string
text = pytesseract.image_to_string(image, lang='eng')
print("Equipment Number is:", text)


plt.show()

Выходное изображение 2

Примечание. одно из изображений, но не для других Выходное изображение2

1 Ответ

0 голосов
/ 27 апреля 2020

Я обнаружил, что использование определенной опции конфигурации для PyTesseract найдет ваш текст - и немного шума. Ниже описаны параметры конфигурации: { ссылка }

Для этой задачи я выбрал: «Разреженный текст. Найти как можно больше текста в произвольном порядке».

Поскольку PyTesseract возвращает больше «текста», вы можете использовать регулярное выражение для фильтрации шума.

Это конкретное регулярное выражение ищет две цифры, дефис, пять цифр или символов, пробел, а затем два цифры или символы. При необходимости его можно настроить в соответствии с форматом номера вашего оборудования, но я уверен, что это хорошее решение, потому что в возвращенном тексте нет ничего подобного номеру оборудования.

import re
import cv2
import pytesseract

image = cv2.imread('Fv0oe.jpg') 
text = pytesseract.image_to_string(image, lang='eng', config='--psm 11') 

for line in text.split('\n'): 
     if re.match(r'^\d{2}-\w{5} \w{2}$',line): 
         print(line) 

Результат (без изображения обработка необходима):

19-V1083 AI
...