python - 如何调用 Azure 认知服务 API?
问题描述
我使用 Azure 自定义视觉(认知服务)创建并训练了一个图像分类模型,并使用 API 发布了该模型。现在,我用 Python 编写了一个简单的代码,它从给定的 URL 获取图像并调用 API。但是,即使图像确实存在,我仍然会收到此错误:
使用 open(URL, "rb") as image_contents: FileNotFoundError: [Errno 2] No such file or directory: ' https://upload.wikimedia.org/wikipedia/commons/5/55/Dalailama1_20121014_4639.jpg '
代码如下:
from azure.cognitiveservices.vision.customvision.prediction import CustomVisionPredictionClient
ENDPOINT = "https://westeurope.api.cognitive.microsoft.com/"
PROJECT_ID = "bbed3f99-4199-4a17-81f2-df83f0659be3"
# Replace with a valid key
prediction_key = "<my prediction key>"
prediction_resource_id = "/subscriptions/97c4e143-9c0c-4f1e-b880-15492e327dd1/resourceGroups/WestEurope/providers/Microsoft.CognitiveServices/accounts/HappyAI"
publish_iteration_name = "Iteration5"
# Classify image
URL = "https://upload.wikimedia.org/wikipedia/commons/5/55/Dalailama1_20121014_4639.jpg"
# Now there is a trained endpoint that can be used to make a prediction
predictor = CustomVisionPredictionClient(prediction_key, endpoint=ENDPOINT)
with open(URL, "rb") as image_contents:
results = predictor.classify_image(
PROJECT_ID, publish_iteration_name, image_contents.read())
# Display the results.
for prediction in results.predictions:
print("\t" + prediction.tag_name +
": {0:.2f}%".format(prediction.probability * 100))
帮助将不胜感激!
提前致谢!
解决方案
有两种方法可以将图像提供给认知服务。你正在混合两者;)
1) 提供可通过 Internet 访问的图像的 URL。您可以通过向服务发送 JSON 来执行此操作:
{"url":"https://sample.com/myimage.png"}
2) 在 POST 请求中将图像作为二进制文件上传。
您的问题是您正在尝试使用open()
方法 2。但是,这不适用于 Python 中的远程文件。如果您想这样做(而不是方法 1),请使用 urllib2.urlopen 之类的示例。
推荐阅读
- python - Python:如何删除字符串左侧第二个逗号后的所有文本
- node.js - 在 Sequelize 中的连接表上添加属性
- package - 如何展平 Nuget 包内容文件?
- javascript - 试图让 Bootstrap Carousal 显示 4 个已修复的项目
- python - 如何优化三对角矩阵的特征值/向量计算
- javascript - 用JS发送GET请求并显示结果
- rust - 即使 main.rs 存在,也找不到 Cargo.toml 中指定的本地 crate
- html - 用 HTML 填充 GAS 模态对话框 - 没有白色?选择?
- string - 交换字符串的第一个和最后一个字符会导致段错误
- r - 在 R 中使用 map() 将列表应用于网络抓取功能