gpt4 book ai didi

python-3.x - Azure 计算机视觉 API 中从本地存储的图像文件进行手写识别

转载 作者:行者123 更新时间:2023-12-03 02:34:25 25 4
gpt4 key购买 nike

我正在尝试通过探索 Azure 来提高我的编码和云计算技能。我想自动化一些管理任务,其中涉及破译大量手写文档并以电子方式存储文本。

下面的 Python 代码是两个代码源的合并。

  1. Taygan Rifat 的博客 https://www.taygan.co/blog/2018/4/28/image-processing-with-cognitive-services

  2. 微软自己的演示代码位于 https://learn.microsoft.com/en-us/azure/cognitive-services/computer-vision/quickstarts/python-hand-text

import json
import os
import sys
import requests
import time
import matplotlib.pyplot as plt
from matplotlib.patches import Polygon
from PIL import Image
from io import BytesIO

subscription_key = 'XX79fdc005d542XXXb5f29ce04ab1cXXX'
endpoint = 'https://handwritng.cognitiveservices.azure.com/'
analyze_url = endpoint + "vision/v3.0/analyze"
text_recognition_url = endpoint + "/vision/v3.0/read/analyze"

image_url = "https://3j2w6t1pktei3iwq0u47sym8-wpengine.netdna-ssl.com/wp-content/uploads/2014/08/Handwriting-sample-Katie.png"

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

# Extracting text requires two API calls: One call to submit the
# image for processing, the other to retrieve the text found in the image.

# Holds the URI used to retrieve the recognized text.
operation_url = response.headers["Operation-Location"]

# The recognized text isn't immediately available, so poll to wait for completion.
analysis = {}
poll = True
while (poll):
response_final = requests.get(
response.headers["Operation-Location"], headers=headers)
analysis = response_final.json()

print(json.dumps(analysis, indent=4))

time.sleep(1)
if ("analyzeResult" in analysis):
poll = False
if ("status" in analysis and analysis['status'] == 'failed'):
poll = False

polygons = []
if ("analyzeResult" in analysis):
# Extract the recognized text, with bounding boxes.
polygons = [(line["boundingBox"], line["text"])
for line in analysis["analyzeResult"]["readResults"][0]["lines"]]

# Display the image and overlay it with the extracted text.
image = Image.open(BytesIO(requests.get(image_url).content))
ax = plt.imshow(image)
for polygon in polygons:
vertices = [(polygon[0][i], polygon[0][i + 1])
for i in range(0, len(polygon[0]), 2)]
text = polygon[1]
print(text)
patch = Polygon(vertices, closed=True, fill=False, linewidth=2, color='y')
ax.axes.add_patch(patch)
plt.text(vertices[0][0], vertices[0][1], text, fontsize=20, va="top")


plt.show()

我想做的是在修改脚本方面获得一些帮助,以便它可以使用本地存储的图像文件(而不是使用 URL)。

目前,我正在通过在 Azure 虚拟机上启动 IIS 服务器并通过 HTML 访问我想要分析的图像的 URL 来解决此问题。它有点笨拙(并且对于我的目的来说有点不安全)。

谢谢,WL

最佳答案

给你,

...
# You could also read the image file name from command line
# as the first argument passed to your script:

# try:
# input_image = sys.argv[1]
# except:
# sys.exit('No input. Pass input image file name as first argument.')

input_image = "your_input_image.jpg"
with open(input_image, 'rb') as f:
data = f.read()
headers = {
'Ocp-Apim-Subscription-Key': subscription_key,
'Content-type': 'application/octet-stream'
}
response = requests.post(
text_recognition_url, headers=headers, data=data)
response.raise_for_status()
...

然后,

# Display the image and overlay it with the extracted text.
image = Image.open(input_image)
...

大多数接受图像 URL 的 Azure 认知服务也接受原始字节作为 Content-type: application/octet-stream 和二进制图像数据作为 POST 负载。

参见Analyze image .

Supported input methods:

raw image binary or image URL.

Content-type:

url

octet-stream

Input requirements:

Supported image formats: JPEG, PNG, GIF, BMP.
Image file size must be less than 4MB.
Image dimensions must be at least 50 x 50.

顺便说一句,如果您需要一个快速的 Web 服务器来完成 future 的任务,Python 可以为您提供支持:

# usage:
# python3 -m http.server [-h] [--cgi] [--bind ADDRESS]
# [--directory DIRECTORY] [port]

$ python3 -m http.server
Serving HTTP on :: port 8000 (http://[::]:8000/) ...

关于python-3.x - Azure 计算机视觉 API 中从本地存储的图像文件进行手写识别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63746605/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com