我正在开发一个名为“名片扫描仪”的项目。我使用pytesseract从图像中提取文本,然后通过正则表达式和其他技术对提取的文本进行分类。
每当图像中出现logo时,tesseract会将其视为文本并尝试读取。这会导致产生无意义的文本。请看下面的图像示例:
这是我尝试提取文本的方法:
# Google colab# read required librariesimg = cv2.imread("img2.jpg")gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)blur = cv2.GaussianBlur(gray, (5,5),0)ret3, thresh = cv2.threshold(blur,0,255,cv2.THRESH_BINARY+cv2.THRESH_OTSU)cv2_imshow(thresh)text = pytesseract.image_to_string(thresh, lang = 'eng'); print(text)
运行上述代码时,得到的输出如下:
: eM , NOEs Efe: Mb fes fe y Ky TEP ON PILLS caggy: Ye Ws My Wii WL, FLY T by,i igs Mg ER te EB iy MY, Gee.: WO Ee as _ he i. "4 ‘; y sen “iy ye age i ‘ el HY tiber My, ee ered fi! ", ty MfMm Gujarat TE og: , fp bet(x = Technological ( Wy, ey,sae ae e . Tf) :wage University ~~ ese e é etikhil Suthar leesfy Lg. Z - “fe " ‘Sa. ve 7, ofRegional Coordinator - OSD MWe) DhyeMob. <hidden>Email : <hidden>Govt. Technical High School Campus, Near AurobindoAshram Dandia Bazar,Vadodara - 390001, Gujarat, Indiawww.gtu.ac.in | www-gtuinnovationcouncil.2¢.ini Ae; ew, ODt eS ft me ' @ateary yaj myee |a
有没有办法可以去除这些由logo(我认为是logo导致的)产生的不需要的文本?如果我的问题需要其他信息,请告诉我。
回答:
图像的背景是问题所在。你可以通过选择高度范围来忽略它
例如:如果你选择高度范围为:h/4 - (3*h)/4
,结果将是:(由于超过2MiB,图像已调整大小。)
当你读取时:
Nikhil SutharRegional Coordinator - OSDEmail | Mob. |Govt. Technical High School Campus, Near AurobindoAshram Dandia Bazar, Vadodara - 390001, Gujarat, Indiawww.gtu.ac.in | www.gtuinnovationcouncil.ac.in
代码:
import cv2from pytesseract import image_to_stringimg = cv2.imread("Oa9svHu.jpeg")gry = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)(h, w) = gry.shape[:2]gry = gry[int(h/4):int((3*h)/4), 0:w]txt = image_to_string(gry)print(txt.strip())cv2.imshow("gry", gry)cv2.waitKey(0)