J'ai une image et je souhaite y détecter les zones de texte.
J'ai essayé le projet TiRG_RAW_20110219 mais les résultats ne sont pas satisfaisants. Si l'image d'entrée est http://imgur.com/yCxOvQS,Gd38rCa elle produit http://imgur.com/yCxOvQS,Gd38rCa#1 en sortie.
Quelqu'un peut-il suggérer une alternative. Je voulais que cela améliore la sortie de tesseract en lui envoyant uniquement la zone de texte en entrée.
import cv2
def captch_ex(file_name):
img = cv2.imread(file_name)
img_final = cv2.imread(file_name)
img2gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
ret, mask = cv2.threshold(img2gray, 180, 255, cv2.THRESH_BINARY)
image_final = cv2.bitwise_and(img2gray, img2gray, mask=mask)
ret, new_img = cv2.threshold(image_final, 180, 255, cv2.THRESH_BINARY) # for black text , cv.THRESH_BINARY_INV
'''
line 8 to 12 : Remove noisy portion
'''
kernel = cv2.getStructuringElement(cv2.MORPH_CROSS, (3,
3)) # to manipulate the orientation of dilution , large x means horizonatally dilating more, large y means vertically dilating more
dilated = cv2.dilate(new_img, kernel, iterations=9) # dilate , more the iteration more the dilation
# for cv2.x.x
_, contours, hierarchy = cv2.findContours(dilated, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE) # findContours returns 3 variables for getting contours
# for cv3.x.x comment above line and uncomment line below
#image, contours, hierarchy = cv2.findContours(dilated,cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_NONE)
for contour in contours:
# get rectangle bounding contour
[x, y, w, h] = cv2.boundingRect(contour)
# Don't plot small false positives that aren't text
if w < 35 and h < 35:
continue
# draw rectangle around contour on original image
cv2.rectangle(img, (x, y), (x + w, y + h), (255, 0, 255), 2)
'''
#you can crop image and send to OCR , false detected will return no text :)
cropped = img_final[y :y + h , x : x + w]
s = file_name + '/crop_' + str(index) + '.jpg'
cv2.imwrite(s , cropped)
index = index + 1
'''
# write original image with added contours to disk
cv2.imshow('captcha_result', img)
cv2.waitKey()
file_name = 'your_image.jpg'
captch_ex(file_name)
Si cela ne vous dérange pas de vous salir les mains, vous pouvez essayer de développer ces régions de texte en une plus grande région rectangulaire, que vous alimentez pour tesseract à la fois.
Je suggère également d'essayer de seuiller l'image plusieurs fois et de nourrir chacun d'entre eux pour tesseract séparément pour voir si cela aide du tout. Vous pouvez comparer la sortie aux mots du dictionnaire pour déterminer automatiquement si un résultat OCR particulier est bon ou non.