Google Cloud Vision OCR在浏览器演示和通过Python的区别

3
我对Google Cloud Vision API还比较新,如果有明显的答案,请见谅。我注意到在某些图片上,使用Google Cloud Vision API拖放功能(https://cloud.google.com/vision/docs/drag-and-drop)和Python本地图像检测之间会得到不同的OCR结果。
我的代码如下:
import io
# Imports the Google Cloud client library
from google.cloud import vision
from google.cloud.vision import types

# Instantiates a client
client = vision.ImageAnnotatorClient()

# The name of the image file to annotate
file_name = "./test0004a.jpg"

# Loads the image into memory
with io.open(file_name, 'rb') as image_file:
    content = image_file.read()

image = types.Image(content=content)

response = client.text_detection(image=image)
texts = response.text_annotations

print('Texts:')
for text in texts:
#    print('\n"{}"'.format(text.description.encode('utf-8')))
    print('\n"{}"'.format(text.description.encode('ascii','ignore')))

    vertices = (['({},{})'.format(vertex.x, vertex.y)
                for vertex in text.bounding_poly.vertices])

    print('bounds: {}'.format(','.join(vertices)))

附有突出显示的示例图像 示例图像

上面的Python代码不返回任何内容,但在浏览器中使用拖放功能时,它可以正确识别“2340”作为文本。Python和浏览器不应该返回相同的结果吗?如果不是,为什么?我需要在代码中包含其他参数吗?

1个回答

5
这里的问题是您使用了TEXT_DETECTION而不是DOCUMENT_TEXT_DETECTION,后者是您分享的拖放示例页面中使用的功能。
通过更改方法(使用document_text_detection()),您应该可以获得所需的结果(我已经测试过您的代码,它确实有效)。
# Using TEXT_DETECTION
response = client.text_detection(image=image)

# Using DOCUMENT_TEXT_DETECTION
response = client.document_text_detection(image=image)

虽然两种方法都可以用于OCR,就像文档中所提到的,DOCUMENT_TEXT_DETECTION 方法是针对密集文本和文件进行优化的。您分享的图像不是非常高质量的,文本也不清晰,因此对于这种类型的图像,DOCUMENT_TEXT_DETECTION 方法可能比TEXT_DETECTION 方法表现更好。
以下还有一些其他例子,在这些例子中DOCUMENT_TEXT_DETECTION 方法的效果比TEXT_DETECTION 方法要好。但请注意,并不总是这样,TEXT_DETECTION 在某些情况下仍然可能具有更好的结果:

谢谢。现在使用DOCUMENT_TEXT_DETECTION匹配拖放响应,因此这是一致的。然而,我注意到虽然DOCUMENT_TEXT_DETECTION提供更多带有数据的响应(即较少的无结果情况),但它现在似乎会出现一些错误(而TEXT_DETECTION则得到正确的结果)。 - Skoptimist
正如我在回答你的帖子中所解释的那样,这两种方法使用不同的方法,因此根据您的用例和图像,您应该使用其中之一。 DOCUMENT_TEXT_DETECTION 更适合处理密集文本和文档,但实际上没有其他指标可以让您决定使用哪种方法。 - dsesto

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接