当前位置: 首页 > 知识库问答 >
问题:

浏览器演示中的Google Cloud Vision OCR与通过python实现的OCR之间的差异

洪宇定
2023-03-14

我对谷歌云视觉应用编程接口相当陌生,所以如果有一个明显的答案,我很抱歉。我注意到,对于一些图像,我在谷歌云视觉应用编程接口拖放(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个答案

靳举
2023-03-14

这里的问题是您正在使用TEXT_DETECTION而不是DOCUMENT_TEXT_DETECTION,这是您共享的拖放示例页中使用的功能。

通过更改方法(改为document\u text\u detection()),您应该可以获得所需的结果(我已经用您的代码对其进行了测试,它确实有效):

# Using TEXT_DETECTION
response = client.text_detection(image=image)

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

尽管这两种方法都可以用于OCR,如文档中所示,文档_文本_检测针对密集文本和文档进行了优化。您共享的图像质量不高,文本也不清晰,因此对于这种类型的图像,DOCUMENT\u text\u DETECTIONtext\u DETECTION提供了更好的性能。

请参阅其他一些示例,其中DOCUMENT_TEXT_DETECTIONTEXT_DETECTION工作得更好。无论如何,请注意,它可能并不总是这种情况,并且TEXT_DETECTION在某些条件下可能仍然具有更好的结果:

  • 在使用演示和实际API时获得不同的数据
  • Google Vision API文本检测奇怪行为
 类似资料:
  • 本文向大家介绍如何实现浏览器内多个标签页之间的通信?相关面试题,主要包含被问及如何实现浏览器内多个标签页之间的通信?时的应答技巧和注意事项,需要的朋友参考一下 通过WebSocket或SharedWorker把客户端和服务器端建立socket连接,从而实现通信;也可以调用localstorge、cookies等本地存储方法  

  • 问题内容: JVM实现在哪些方面有所不同(许可除外)?每个JVM是否都为通用处理实现类型清除? 之间的区别在哪里: JRockit IBM JVM SUN JVM Open JDK power failure Kaffi .....处理其中之一的尾部呼叫优化吗? 问题答案: JVM实现在实现JIT编译,优化,垃圾回收,支持的平台,支持的Java版本等方面可以有所不同。它们都必须满足一组功能和行为,

  • 在swift中似乎有两个相等运算符:双相等()和三相等(),这两者有什么区别?

  • 问题内容: 在同一浏览器的选项卡/窗口之间进行JavaScript通信的最可靠方法是什么?例如,当选项卡2开始播放音频时,选项卡1以某种方式知道这一点并可以暂停其播放器。 我正在建立一个带有音乐播放器的网站…因此,如果您现在打开该网站的两个标签,则可以同时在两者上播放音乐。这显然是不好的,所以我正在尝试寻找解决方案。 有任何想法吗?谢谢 问题答案: 这是一个旧的答案,我建议使用此处描述的现代版本:

  • 在进行Hyperledger fabric设置时,我们为组织创建加密材料并提及用户,相应地生成用户加密材料,用于在通过CLI进行日志记录时调用链码。另外,当我们尝试通过SDK连接网络时,我们也需要注册和注册用户来连接网络。那么,这两种用户的区别是什么呢?