0

我正在使用 Python 从 Azure 存储中检索 Blob 图像,然后将其发送到自定义视觉进行预测。这是代码:

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)
4

2 回答 2

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作为端点。

它应该可以工作,并且您应该能够看到预测概率。

希望能帮助到你。


于 2019-03-19T06:08:14.270 回答
1

我尝试重现您的问题并遇到了类似的问题,这是由于我在 Janpa East 区域创建认知服务时使用 Azure 门户中的错误端点引起的,如下图所示。

在此处输入图像描述

如上图所示,端点是https://japaneast.api.cognitive.microsoft.com/customvision/training/v1.0版本 1,但azure-cognitiveservices-vision-customvisionPyPI 页面指出了正确的端点,应该https://{AzureRegion}.api.cognitive.microsoft.com如下图所示。

在此处输入图像描述

因此,如果使用不正确的端点,我会遇到与您类似的问题,如下所示。我使用的代码和你的一样,唯一的区别是你在 Azure Functions 上的运行环境,但我的是控制台脚本。

在此处输入图像描述

同时,根据custom_vision_prediction_client.pyAzure Cognitive Service SDK for Custom Vision 的源代码,您可以看到代码base_url = '{Endpoint}/customvision/v2.0/Prediction'将您传递的端点连接起来,/customvision/v2.0/Prediction以生成调用预测 API 的真实端点。

因此,正如@MohitVerma-MSFT 所说,https://<your cognitive service region>.api.cognitive.microsoft.com用于当前版本的 Python 包。

附加说明如下,有一个重要更新的公告供customvision.ai您了解,它可能会在不久之后使您当前的代码生效。

在此处输入图像描述

于 2019-03-19T09:33:17.267 回答