从计算机 visio 调用 ocr api 时,我没有得到预期的结果
Posted
技术标签:
【中文标题】从计算机 visio 调用 ocr api 时,我没有得到预期的结果【英文标题】:I Don't get the expected result when calling ocr api from computer visio 【发布时间】:2019-08-25 17:49:11 【问题描述】:我正在尝试使用计算机 visio 中的 ocr 方法从特定图像中提取所有文本。尽管如此,它并没有返回我知道的信息,因为当我直接在此页面https://azure.microsoft.com/es-es/services/cognitive-services/computer-vision/ 的可用选项中分析图像时,它确实返回了数据。
这是要从中获取数据的图像 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'
更新:解决方案是使用识别文本而不是计算机 visio 中的 ocr 函数。
【问题讨论】:
【参考方案1】:我看到你的代码中有两张图片。
你的评论区是下面这个。这是一个很好的样本,类似于著名的手写数据集MNIST
。该类数据集的特点是没有任何强噪声像素。
但是,下面的另一个,图像上到处都是强烈的噪点,甚至我认为超过了 99%。
所以它们是两种情况。 Azure 认知服务的 OCR 性能取决于训练模型中的示例数据集。所以实际上计算机视觉中的 OCR 只是可以用经过训练的样本检测这些相似的图像。
第二张图片的正确做法是先检测出足够小的像素区域包含文本内容,然后将其裁剪出来进行ocr调用。例如,如果从车头图像中提取车牌号,则只需要车牌的图像部分。
【讨论】:
【参考方案2】:解决方案是使用识别文本方法,而不是计算机视觉中的 ocr 方法。
首先你需要发一个帖子,然后用 operationid 发出 get 请求来获取结果。
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)
【讨论】:
以上是关于从计算机 visio 调用 ocr api 时,我没有得到预期的结果的主要内容,如果未能解决你的问题,请参考以下文章
google vision api 可以从图像中识别代码文本(例如 javascript)吗?