我正在使用Python从Azure存储中检索Blob图像,然后将其发送到Custom Vision进行预测。 这是代码:
import io
from azure.storage.blob import BlockBlobService
from azure.cognitiveservices.vision.customvision.prediction import CustomVisionPredictionClient
block_blob_service = BlockBlobService(
account_name=account_name,
account_key=account_key
)
fp = io.BytesIO()
block_blob_service.get_blob_to_stream(
container_name,
blob_name,
fp,
max_connections=2
)
predictor = CustomVisionPredictionClient(
cv_prediction_key,
endpoint=cv_endpoint
)
# This call breaks with the below error message
results = predictor.predict_image(
cv_project_id,
image_data.getvalue(),
iteration_id=cv_iteration_id
)
但是,执行predict_image
函数会导致以下错误:
System.Private.CoreLib: Exception while executing function: Functions.ReloadPostgres. System.Private.CoreLib: Result: Failure
Exception: HttpOperationError: Operation returned an invalid status code 'Resource Not Found'
Stack: File "~/.local/share/virtualenvs/py_func_app-GVYYSfCn/lib/python3.6/site-packages/azure/functions_worker/dispatcher.py", line 288, in _handle__invocation_request
self.__run_sync_func, invocation_id, fi.func, args)
File "~/.pyenv/versions/3.6.8/lib/python3.6/concurrent/futures/thread.py", line 56, in run
result = self.fn(*self.args, **self.kwargs)
File "~/.local/share/virtualenvs/py_func_app-GVYYSfCn/lib/python3.6/site-packages/azure/functions_worker/dispatcher.py", line 347, in __run_sync_func
return func(**params)
File "~/py_func_app/ReloadPostgres/__init__.py", line 14, in main
data_handler.fetch_prediction_data()
File "~/py_func_app/Shared_Code/data_handler.py", line 127, in fetch_prediction_data
cv_handler.predict_image(image_data.getvalue(), cv_model)
File "~/py_func_app/Shared_Code/custom_vision.py", line 30, in predict_image
raise e
File "~/py_func_app/Shared_Code/custom_vision.py", line 26, in predict_image
iteration_id=cv_model.cv_iteration_id
File "~/.local/share/virtualenvs/py_func_app-GVYYSfCn/lib/python3.6/site-packages/azure/cognitiveservices/vision/customvision/prediction/custom_vision_prediction_client.py", line 215, in predict_image
raise HttpOperationError(self._deserialize, response)
答案 0 :(得分:1)
在下面,我通过图像URL提供了使用自定义视觉预测的类似示例,您可以将其更改为图像文件:
# -*- coding: utf-8 -*-
"""
Created on Tue Mar 19 11:04:54 2019
@author: moverm
"""
#from azure.storage.blob import BlockBlobService
from azure.cognitiveservices.vision.customvision.prediction import CustomVisionPredictionClient
#block_blob_service = BlockBlobService(
# account_name=account_name,
# account_key=account_key
#)
#
#fp = io.BytesIO()
#block_blob_service.get_blob_to_stream(
# container_name,
# blob_name,
# fp,
# max_connections=2
#)
predictor = CustomVisionPredictionClient(
"prediction-key",
endpoint="https://southcentralus.api.cognitive.microsoft.com"
)
# This call breaks with the below error message
#results = predictor.predict_image(
# 'prediction-key',
# image_data.getvalue(),
# iteration_id=cv_iteration_id
#)
test_img_url = "https://pointsprizes-blog.s3-accelerate.amazonaws.com/316.jpg"
results = predictor.predict_image_url("project-Id", "Iteration-Id", url=test_img_url)
# Display the results.
for prediction in results.predictions:
print ("\t" + prediction.tag_name + ": {0:.2f}%".format(prediction.probability * 100))
基本上问题与端点有关。将https://southcentralus.api.cognitive.microsoft.com用作端点。
它应该起作用,并且您应该能够看到预测概率。
希望有帮助。
答案 1 :(得分:1)
我试图重现您的问题,并遇到了类似的问题,这是由于我在Janpa East地区创建认知服务时使用Azure门户的错误端点造成的,如下图所示。
如上图所示,版本1的端点为implementation 'com.google.android.gms:play-services-location:16.0.0'
,但azure-cognitiveservices-vision-customvision
PyPI页指出了相应的端点,如下图所示。 >
因此,如果使用不适当的端点,我也会遇到类似的问题,如下所示。我使用的代码与您的代码相同,唯一的区别是您在Azure Functions上运行的环境,但我的是控制台脚本。
同时,根据用于自定义视觉的Azure认知服务SDK的源代码https://japaneast.api.cognitive.microsoft.com/customvision/training/v1.0
,您可以看到代码base_url = '{Endpoint}/customvision/v2.0/Prediction'
将传递的端点与https://{AzureRegion}.api.cognitive.microsoft.com
结合起来以生成真实的端点用于调用预测API。
因此,正如@ MohitVerma-MSFT所说,对当前版本的Python软件包使用custom_vision_prediction_client.py
。
以下补充说明,您需要知道一个有关/customvision/v2.0/Prediction
的重要更新的公告,这可能会使您当前的代码很快生效。