【问题标题】:Python custom vision predictor failsPython 自定义视觉预测器失败
【发布时间】:2019-03-19 17:33:17
【问题描述】:

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

【问题讨论】:

    标签: python azure microsoft-custom-vision


    【解决方案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 作为端点。

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

    希望对你有帮助。


    【讨论】:

      【解决方案2】:

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

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

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

      同时,根据Azure Cognitive Service SDK for Custom Vision的源代码custom_vision_prediction_client.py,您可以看到代码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 的重要更新通知你需要知道,它可能会在不久之后对你当前的代码生效。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2022-08-14
        • 1970-01-01
        • 2015-03-11
        • 2019-10-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多