Python自定义视觉预测器失败

时间:2019-03-19 04:19:36

标签: python azure microsoft-custom-vision

我正在使用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)

2 个答案:

答案 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门户的错误端点造成的,如下图所示。

enter image description here

如上图所示,版本1的端点为implementation 'com.google.android.gms:play-services-location:16.0.0',但azure-cognitiveservices-vision-customvision PyPI页指出了相应的端点,如下图所示。 >

enter image description here

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

enter image description here

同时,根据用于自定义视觉的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的重要更新的公告,这可能会使您当前的代码很快生效。

enter image description here