从计算机视觉调用 oct api 时,我没有得到预期的结果

I Don't get the expected result when calling ocr api from computer visio

我正在尝试使用计算机 visio 中的 ocr 方法从特定图像中提取所有文本。尽管如此,它并没有 return 我知道的信息,因为当我直接在此页面 https://azure.microsoft.com/es-es/services/cognitive-services/computer-vision/ 的可用选项中分析图像时,它会 return 数据。

这是我要从中获取数据的图像 https://bitbucket.org/miguel_acevedo_ve/python-stream/raw/086279ad6885a490e521785ba288914ed98cfd1d/test.jpg

我已遵循 Azure 文档站点中提供的所有 python 教程。

import matplotlib.pyplot as plt
from matplotlib.patches import Rectangle
from PIL import Image
from io import BytesIO

subscription_key = "<Subscription Key>"

assert subscription_key

vision_base_url = "https://westcentralus.api.cognitive.microsoft.com/vision/v2.0/"

ocr_url = vision_base_url + "ocr"

image_url = "https://bitbucket.org/miguel_acevedo_ve/python-stream/raw/086279ad6885a490e521785ba288914ed98cfd1d/test.jpg"

'''image_url = "https://upload.wikimedia.org/wikipedia/commons/thumb/a/af/" + \
    "Atomist_quote_from_Democritus.png/338px-Atomist_quote_from_Democritus.png"
'''

headers = {'Ocp-Apim-Subscription-Key': subscription_key}
params  = {'mode' : 'Printed'}
data    = {'url': image_url}
response = requests.post(ocr_url, headers=headers, params=params, json=data)
response.raise_for_status()

analysis = response.json()
print(analysis)

这是我当前的输出:

{u'regions': [], u'textAngle': 0.0, u'orientation': u'NotDetected', u'language': u'unk'}

更新:解决方案是使用 recognizeText 而不是计算机 visio 中的 ocr 功能。

我看到你的代码中有两张图片。

你评论区里的就是下面这个。这是一个很好的样本,类似于著名的手写数据集 MNIST。这个class数据集的特点是没有任何强噪声像素。

然而,下面的另一张,整个图像都有强烈的噪点像素,甚至我认为超过99%。

所以这是两种情况。 Azure 认知服务的 OCR 性能取决于训练模型中的示例数据集。所以实际上计算机视觉中的OCR只是可以用训练好的样本检测出这些相似的图像。

第二张图片的正确做法是先检测出足够小的像素区域包括文字内容,然后裁剪出来做ocr调用。比如从一张车头图片中ocr一个车牌号,只需要车牌的图片部分。

解决方案是使用 recognizeText 方法,而不是计算机视觉中的 ocr 方法。

首先你需要发送一个post然后用operationid发出一个get请求来获取de结果。

vision_base_url = "https://westeurope.api.cognitive.microsoft.com/vision/v2.0/"

ocr_url = vision_base_url + "recognizeText"

response = requests.post(
    ocr_url, headers=headers,params=params, data=imgByteArr)
operationLocation = response.headers['Operation-Location']
response = requests.request('GET', operationLocation, json=None, data=None, headers=headers, params=None)