#machine-learning #computer-vision #ocr
#машинное обучение #компьютерное зрение #распознавание
Вопрос:
Я работаю над обнаружением рукописных символов с использованием компьютерного зрения в Python. Я обучал cnn на наборе данных отдельных символов, но теперь я хочу иметь возможность извлекать символы из изображения, чтобы делать прогнозы по отдельным символам. Каков наилучший способ сделать это? Рукописный текст, с которым я буду работать, не будет написан курсивом, и между символами будет очевидное разделение.
Ответ №1:
В приведенном ниже фрагменте переменная boxes имеет размеры для каждого символа на изображении.
import cv2
import pytesseract
file = '/content/Captchas/image22.jpg'
img = cv2.imread(file)
h, w, _ = img.shape
boxes = pytesseract.image_to_boxes(img)
for b in boxes.splitlines():
b = b.split(' ')
img = cv2.rectangle(img, (int(b[1]), h - int(b[2])), (int(b[3]), h - int(b[4])), (0, 255, 0), 2)
cv2_imshow(img)
print(boxes)
Ответ №2:
вы можете использовать поиск контуров и связать их рамкой.
image = cv2.imread("filename")
image = cv2.fastNlMeansDenoisingColored(image,None,10,10,7,21)
gray = cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)
res,thresh = cv2.threshold(gray,150,255,cv2.THRESH_BINARY_INV) #threshold
kernel = cv2.getStructuringElement(cv2.MORPH_CROSS,(3,3))
dilated = cv2.dilate(thresh,kernel,iterations = 5)
val,contours, hierarchy =
cv2.findContours(dilated,cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_NONE)
coord = []
for contour in contours:
[x,y,w,h] = cv2.boundingRect(contour)
if h>300 and w>300:
continue
if h<40 or w<40:
continue
coord.append((x,y,w,h))
coord.sort(key=lambda tup:tup[0]) # if the image has only one sentence sort in one axis
count = 0
for cor in coord:
[x,y,w,h] = cor
t = image[y:y h,x:x w,:]
cv2.imwrite(str(count) ".png",t)
print("number of char in image:", count)