PyTesseract image_to_data函数无法识别我的图像

时间:2019-03-23 19:37:14

标签: python-3.x ocr tesseract python-tesseract

我正在使用pytesseract返回图像中对象的坐标。

通过使用这段代码:

import pytesseract
from pytesseract import Output
import cv2
img = cv2.imread('wine.jpg')

d = pytesseract.image_to_data(img, output_type=Output.DICT)
    print(d)

for i in range(n_boxes):
    (x, y, w, h) = (d['left'][i], d['top'][i], d['width'][i], d['height'][i])
    cv2.rectangle(img, (x, y), (x + w, y + h), (0, 255, 0), 2)

cv2.imshow('img', img)
cv2.waitKey(0)

我明白了

{'level': [1, 2, 3, 4, 5, 5, 2, 3, 4, 5, 4, 5, 2, 3, 4, 5], 'page_num': [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], 'block_num': [0, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3], 'par_num': [0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1], 'line_num': [0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 2, 2, 0, 0, 1, 1], 'word_num': [0, 0, 0, 0, 1, 2, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1], 'left': [0, 485, 485, 485, 485, 612, 537, 537, 555, 555, 537, 537, 454, 454, 454, 454], 'top': [0, 323, 323, 323, 323, 324, 400, 400, 400, 400, 426, 426, 0, 0, 0, 0], 'width': [1200, 229, 229, 229, 115, 102, 123, 123, 89, 89, 123, 123, 296, 296, 296, 296], 'height': [900, 29, 29, 29, 28, 28, 40, 40, 15, 15, 14, 14, 892, 892, 892, 892], 'conf': ['-1', '-1', '-1', '-1', 58, 96, '-1', '-1', '-1', 95, '-1', 95, '-1', '-1', '-1', 95], 'text': ['', '', '', '', "JACOB'S", 'CREEK', '', '', '', 'SHIRAZ', '', 'CABERNET', '', '', '', '']} 

[使用的图片] [enter image description here] 1

但是,当我使用此图像时: enter image description here

我明白了

{'level': [1, 2, 3, 4, 5], 'page_num': [1, 1, 1, 1, 1], 'block_num': [0, 1, 1, 1, 1], 'par_num': [0, 0, 1, 1, 1], 'line_num': [0, 0, 0, 1, 1], 'word_num': [0, 0, 0, 0, 1], 'left': [0, 0, 0, 0, 0], 'top': [0, 162, 162, 162, 162], 'width': [1200, 0, 0, 0, 0], 'height': [900, 276, 276, 276, 276], 'conf': ['-1', '-1', '-1', '-1', 95], 'text': ['', '', '', '', '']}

有人知道为什么有些图像有效而有些图像无效吗?

1 个答案:

答案 0 :(得分:1)

这主要是由于质量和对比度不同所致。对于OCR引擎来说,检测所需图像中的文本要容易得多。 您可以添加一些预处理例程,包括阈值处理,模糊处理,直方图均衡化以及许多其他技术。它主要是主观的,因此我无法为您提供有效的代码,而更像是反复试验,寻找适合您范围的最佳技术

更新: 这是一个可以帮助您的代码

def preprocessing_typing_detection(inputImage):
    inputImage= cv2.cvtColor(inputImage, cv2.COLOR_BGR2GRAY)
    inputImage= cv2.Laplacian(inputImage, cv2.CV_8U)
    return inputImage