Запуск Python + OpenCV + dlib в Функциях Azure

Я создал скрипт обработки изображений в Pythondlib и OpenCV) — мне было интересно, как я могу перенести эту функциональность в Функции Azure, чтобы скрипт можно было вызывать через API. Так как Python все еще находится в стадии предварительной версии для Azure Functions, я хотел узнать, есть ли у кого-нибудь здесь опыт переноса модулей в Azure Functions и можно ли установить туда OpenCV?


person nor0x    schedule 30.10.2016    source источник


Ответы (2)


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

Однако в контексте OpenCV в настоящее время это не поддерживается. Версия Python по умолчанию, используемая в среде функций Azure, — Python 2.7. Если вы попытаетесь выполнить код функции с помощью OpenCV для Python 2.7, сообщение об ошибке, которое вы получите, будет похоже на следующее:

2016-11-07T20:47:33.151 Function completed (Failure, Id=42fa9d38-05f1-46d4-a8ce-9fbaa24a870d)
2016-11-07T20:47:33.166 Exception while executing function: Functions.ImageProcessor. Microsoft.Azure.WebJobs.Script: ImportError: numpy.core.multiarray failed to import
Traceback (most recent call last):
  File "D:\home\site\wwwroot\ImageProcessor\run.py", line 17, in <module>
    import cv2
ImportError: numpy.core.multiarray failed to import

Исправление для этого состоит в том, чтобы обновить версию numpy, используемую Python 2.7, но вы не сможете запустить обновление самостоятельно.

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

person Ling Toh    schedule 07.11.2016
comment
Это по-прежнему верно, даже для функций V2. Но есть дорожная карта, которую нужно решить. - person Jerry Nixon; 17.10.2019
comment
Джерри, к сожалению, пока нет, так как исправление платформы, вероятно, нетривиально. Пожалуйста, ознакомьтесь с недавними разговорами по этой проблеме, чтобы узнать, применимы ли некоторые обходные пути клиентов к вашему варианту использования, например. попробуйте использовать importlib.import_module(...), см. github.com/ Azure/azure-functions-python-worker/issues/497 - person Ling Toh; 17.10.2019

поэтому я подумал, что это грязный хак, он установит пакет при первом запуске и выдаст ошибку, поэтому функция перезапустится. Следуй этим шагам:

  1. Загрузите пакет в каталог функций (я только что добавил пакет в проект git, с которым функция синхронизируется).
  2. Сделайте что-то вроде (возможно, есть лучший способ, но я действительно новичок в python):

    try:
     import pyodbc
    except:
     package = 'pyodbc-3.0.10-cp27-none-win32.whl'
     pip.main(['install', '--user', package])
     raise ImportError('Restarting')
    

Таким образом, причина --user заключается в том, что он не позволит мне установить его с правами администратора... Также, если вы включите файл requirements.txt в свой репозиторий git, пакеты будут установлены в WebApp, но похоже, что функция есть собственная среда Python, поэтому вам нужно устанавливать пакеты вручную.

Таким образом, единственная реальная хитрость — это найти соответствующий пакет колес (я твердо верю, что Function использует Python 2.7, я не смог заставить его работать с пакетами для Python 3.4).

person 4c74356b41    schedule 30.10.2016