Пользовательский прогноз Python не работает - PullRequest
0 голосов
/ 19 марта 2019

Я использую Python для получения изображения Blob из хранилища Azure, а затем отправляю его в 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 ]

1 голос
/ 19 марта 2019

Я попытался воспроизвести вашу проблему и получил аналогичную проблему, которая была вызвана использованием неверной конечной точки на портале Azure при создании Cognitive Service в регионе Восточная Джанпа, как показано на рисунке ниже.

enter image description here

Как показано на рисунке выше, конечная точка для версии 1 равна https://japaneast.api.cognitive.microsoft.com/customvision/training/v1.0, но страница PyPI azure-cognitiveservices-vision-customvision указывает на конечную точку, котораядолжно быть https://{AzureRegion}.api.cognitive.microsoft.com, как показано на рисунке ниже.

enter image description here

Таким образом, у меня возникла аналогичная проблема с вашей, если вы используете неисправную конечную точку, как показано ниже.Используемый код такой же, как и у вас, единственное отличие состоит в том, что ваша рабочая среда используется в функциях Azure, но у меня есть консольный сценарий.

enter image description here

Между тем, согласно исходному коду custom_vision_prediction_client.py пакета Azure Cognitive Service SDK для 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 вам нужно знать, это может повлиять на ваш текущий код, работающий вскоре после.

enter image description here

1 голос
/ 19 марта 2019

Здесь, ниже, я приведу аналогичный пример с использованием пользовательского прогнозирования зрения, используя 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 для конечной точки.

Это должно сработать, и вы сможете увидеть вероятность предсказания.

Надеюсь, это поможет.


Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...