Я создал скрипт обработки изображений в Python
(с dlib
и OpenCV
) — мне было интересно, как я могу перенести эту функциональность в Функции Azure, чтобы скрипт можно было вызывать через API. Так как Python
все еще находится в стадии предварительной версии для Azure Functions
, я хотел узнать, есть ли у кого-нибудь здесь опыт переноса модулей в Azure Functions
и можно ли установить туда OpenCV
?
Запуск Python + OpenCV + dlib в Функциях Azure
Ответы (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 будет полностью интегрирован в качестве первоклассного языка.
поэтому я подумал, что это грязный хак, он установит пакет при первом запуске и выдаст ошибку, поэтому функция перезапустится. Следуй этим шагам:
- Загрузите пакет в каталог функций (я только что добавил пакет в проект git, с которым функция синхронизируется).
Сделайте что-то вроде (возможно, есть лучший способ, но я действительно новичок в 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).