Я не знаю ваши реальные намерения, вам хотелось только читать текст, или вы любите также извлекать части? В любом случае, я собираюсь показать вам прямое и общее решение. Возьмите части, которые вам нужны, в конце вы найдете код дырки.
Для отверстия связки вам нужно модулей:
cv2 (openCV)
для обработки изображений
numpy
для обработки специальных операций на изображениях
pytesseract
для распознавания текста (OCR)
pillow (pil)
подготовить изображение для pytesseract
Загрузка и фильтр
Ваше исходное изображение:
Сначала мы уменьшаем все цвета, кроме красного. lower
и upper
описывает значения из BGR (RGB = красный, зеленый, синий), которые мы хотели бы фильтровать.
image = cv.imread("AR87t.jpg")
lower = np.array([0, 0, 200])
upper = np.array([100, 100, 255])
shapeMask = cv.inRange(image, lower, upper)
cv.imshow("obj shapeMask", shapeMask)
cv.waitKey(0)
Это показывает:
находя контуры
Далее мы находим контуры и перебор. Если мы находим 4 угла, мы сделаем следующий материал ...
cnts = cv.findContours(shapeMask.copy(), cv.RETR_EXTERNAL,
cv.CHAIN_APPROX_SIMPLE)[0]
for c in cnts:
peri = cv.arcLength(c, True)
approx = cv.approxPolyDP(c, 0.04 * peri, True)
if len(approx) == 4:
....
маскировать оригинальный
С boundingRect, мы извлекаем x
, y
, w
, h
(x, y, w, h) = cv.boundingRect(approx)
cv.rectangle(image, (x, y), (x + w, y + h), (0, 255, 0), thickness=5)
ОСR на маске
И здесь приходит волшебство! Сначала мы извлекаем части маски и экспортируем изображение openCV в изображение PIL. Затем мы можем запустить tesseract.
el = shapeMask.copy()[y:y + h, x:x + w]
pil_im = Image.fromarray(el)
cv.imshow("obj", el)
cv.waitKey(0)
print(pytesseract.image_to_string(pil_im))
это показывает каждый прямоугольник, как небольшое изображение. Вы утешать напечатаете:
L2 = 33,33
L3 = 44,44
L1 = 12,22
код
import cv2 as cv
import numpy as np
import pytesseract
from PIL import Image
image = cv.imread("AR87t.jpg")
lower = np.array([0, 0, 200])
upper = np.array([100, 100, 255])
shapeMask = cv.inRange(image, lower, upper)
cv.imshow("obj shapeMask", shapeMask)
cv.waitKey(0)
cnts = cv.findContours(shapeMask.copy(), cv.RETR_EXTERNAL,
cv.CHAIN_APPROX_SIMPLE)[0]
for c in cnts:
peri = cv.arcLength(c, True)
approx = cv.approxPolyDP(c, 0.04 * peri, True)
if len(approx) == 4:
(x, y, w, h) = cv.boundingRect(approx)
cv.rectangle(image, (x, y), (x + w, y + h), (0, 255, 0), thickness=5)
print("w:%s, y:%s, w:%s, h:%s" % (x, y, w, h))
el = shapeMask.copy()[y:y + h, x:x + w]
pil_im = Image.fromarray(el)
cv.imshow("obj", el)
cv.waitKey(0)
print(pytesseract.image_to_string(pil_im))
cv.imshow("obj rectangle", image)
cv.waitKey(0)
Там есть пакет под названием ** OpenCV ** (CV = Computer Vision), которая имеет привязки Python, что возможно, сделает то, что вы хотите, чтобы выбрать объекты. – martineau
Конвертировать изображение в цветовое пространство HSV -> Извлечь контурные области с красным цветом -> выполнить MSER для области внутри выделенных красных цветных контуров -> Tesseract сможет их прочитать –