我是计算机视觉领域的新手。
我正在尝试使用Tesseract来检测卡车侧面的数字。
因此,对于此示例,我希望将CMA CGM视为输出。
我通过命令行将此图像输入Tesseract
tesseract image.JPG out -psm 6
但它产生了一个空白文件。
然后我阅读了Tesserocr的文档(Tesseract的python包装器),并尝试了以下代码
with PyTessBaseAPI() as api:
api.SetImage(image)
boxes = api.GetComponentImages(RIL.TEXTLINE, True)
print 'Found {} textline image components.'.format(len(boxes))
for i, (im, box, _, _) in enumerate(boxes):
# im is a PIL image object
# box is a dict with x, y, w and h keys
api.SetRectangle(box['x'], box['y'], box['w'], box['h'])
ocrResult = api.GetUTF8Text()
conf = api.MeanTextConf()
print (u"Box[{0}]: x={x}, y={y}, w={w}, h={h}, "
"confidence: {1}, text: {2}").format(i, conf, ocrResult, **box)
再次无法读取图像中的任何字符。
我的问题是我该如何解决这个问题? (我不是在寻找一个现成的代码,但是如何解决这个问题的方法)。
我是否需要使用示例图像训练tesseract,或者我是否可以使用现有库编写代码以某种方式检测卡车的坐标并尝试仅在卡车的边界内进行OCR?
答案 0 :(得分:0)
Tesseract期望纯文档图像,但图像中包含非文档对象。在将其提供给Tesseract-OCR之前,您需要一个复杂的分割(然后可能是一些图像处理)过程。
答案 1 :(得分:0)
我有一个三步解决方案
您可以使用范围来获取图像的一部分。
(int(h/4) + 40
到int(h/2)-20)
int(w/2)
到 int((w*3)/4)
代码:
import cv2
import pytesseract
img = cv2.imread('YizU3.jpg')
gry = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
(h, w) = gry.shape[:2]
gry = gry[int(h/4) + 40:int(h/2)-20, int(w/2):int((w*3)/4)]
blr = cv2.GaussianBlur(gry, (3, 3), 0)
thr = cv2.threshold(gry, 128, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)[1]
txt = pytesseract.image_to_string(thr)
print(txt)
cv2.imshow("thr", thr)
cv2.waitKey(0)