Azure Blob에 이미지를 업로드한 후 Azure Functions에서 Python과 OpenCV를 사용하여 어떻게 해야 합니까? (Azure Functions v1, Python3.6.1, OpenCV4.0.0)

Azure Blob에 이미지를 업로드한 후 Azure Functions에서 Python과 OpenCV를 사용하여 어떻게 해 보았습니다.

Blob을 트리거하는 Function App (Python) 만들기



1. 리소스 만들기에서 Function App을 찾아서 새로 만듭니다. (Linux(미리 보기)를 선택하면 런타임 스택에서 Python을 선택할 수 있지만 이번에는 하지 않습니다.)


2. 가능한 리소스로 이동하여 Function App 설정에서 런타임 버전을 ~1로 변경합니다.




3. 새롭게 커스텀 함수를 작성합니다. 런타임 버전이 ~2 일 때 보이는 방법이 다르며 이전 버전으로 돌아가는 것을 볼 수 있습니다.


4. 실험 지원을 사용하면 언어로 파이썬을 선택할 수 있습니다. Blob Storage를 트리거하고 싶지만 샘플이 없으므로 먼저 Queue Trigger를 선택하여 작성합시다. 스토리지 계정 연결 新規에서 연결할 스토리지 계정을 선택할 수 있습니다. 스토리지에 컨테이너를 작성하십시오. (참고까지: "1")



5. 함수를 만든 후 統合 트리거에서 Queue Trigger를 제거하고 Azure BLOB ストレージ Trigger로 변경합니다. 경로에 testcontainer/{name}.jpg가 있지만 연결된 저장소의 컨테이너 (testcontainer)에 이미지 (.jpg)가 업로드되면이 함수가 실행됩니다.


6. 함수를 아래와 같이 保存および実行 합니다. 테스트는 실제로 존재하는 컨테이너 이름/Blob 이름(예: testcontainer/lena.jpg)이어야 합니다.
import os
print(os.environ['inputBlob'])

이미지 파일의 임시 경로가 보이면 성공입니다.
2019-01-10T08:32:08.519 [Info] Function started (Id=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx)
2019-01-10T08:32:10.129 [Info] D:\local\Temp\Functions\Binding\xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\inputBlob
2019-01-10T08:32:10.129 [Info] Function completed (Success, Id=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx, Duration=1605ms)

Azure Functions에서 Python3 사용



1. 파이썬 버전은 2.7이지만 python3과 opencv를 사용하고 싶으므로 「2」, 「4」을 참조하여 환경을 구축하십시오. 먼저 브라우저에서 Kudu 디버그 콘솔을 엽니다. {your-app-name}에 Function App의 이름을 넣습니다.
https://{your-app-name}.scm.azurewebsites.net/DebugConsole

2. Python3을 설치합니다. 콘솔에서 다음 명령을 입력하십시오.
> cd D:\home\site\tools
> nuget.exe install -Source https://www.siteextensions.net/api/v2/ -OutputDirectory D:\home\site\tools python361x64
> mv /d/home/site/tools/python361x64.3.6.1.3/content/python361x64/* /d/home/site/tools/

3. Functions로 돌아가서 파이썬 버전 확인은 다음과 같이 함수를 실행합니다.
import sys
print(sys.version)

Python3.6.1이되면 성공입니다.
2019-01-10T08:44:43.901 [Info] Function started (Id=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx)
2019-01-10T08:44:45.903 [Info] 3.6.1 (v3.6.1:69c0db5, Mar 21 2017, 18:41:36) [MSC v.1900 64 bit (AMD64)]
2019-01-10T08:44:45.903 [Info] Function completed (Success, Id=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx, Duration=2001ms)

4. Kudu로 돌아가서 pip로 opencv를 설치하십시오. 아래 명령을 두드리고 설치합니다. contrib도 들어갑니다.
> D:\home\site\tools\python.exe -m pip install opencv-python
> D:\home\site\tools\python.exe -m pip install opencv-contrib-python

5. Functions로 돌아가서 OpenCV 버전 확인은 다음과 같이 함수를 실행합니다. dir(cv2.aruco) 는 contrib인 aruco가 들어 있는지 확인하기 위해서입니다.
import cv2
print(cv2.__version__)
print(dir(cv2.aruco))
2019-01-10T08:48:24.299 [Info] Function started (Id=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx)
2019-01-10T08:48:32.566 [Info] 4.0.0
2019-01-10T08:48:32.566 [Info] ['Board_create', 'CORNER_REFINE_APRILTAG', 'CORNER_REFINE_CONTOUR', 'CORNER_REFINE_NONE', 'CORNER_REFINE_SUBPIX', 'CharucoBoard_create', 'DICT_4X4_100', 'DICT_4X4_1000', 'DICT_4X4_250', 'DICT_4X4_50', 'DICT_5X5_100', 'DICT_5X5_1000', 'DICT_5X5_250', 'DICT_5X5_50', 'DICT_6X6_100', 'DICT_6X6_1000', 'DICT_6X6_250', 'DICT_6X6_50', 'DICT_7X7_100', 'DICT_7X7_1000', 'DICT_7X7_250', 'DICT_7X7_50', 'DICT_APRILTAG_16H5', 'DICT_APRILTAG_16h5', 'DICT_APRILTAG_25H9', 'DICT_APRILTAG_25h9', 'DICT_APRILTAG_36H10', 'DICT_APRILTAG_36H11', 'DICT_APRILTAG_36h10', 'DICT_APRILTAG_36h11', 'DICT_ARUCO_ORIGINAL', 'DetectorParameters_create', 'Dictionary_create', 'Dictionary_create_from', 'Dictionary_get', 'Dictionary_getBitsFromByteList', 'Dictionary_getByteListFromBits', 'GridBoard_create', '__doc__', '__loader__', '__name__', '__package__', '__spec__', 'calibrateCameraAruco', 'calibrateCameraArucoExtended', 'calibrateCameraCharuco', 'calibrateCameraCharucoExtended', 'custom_dictionary', 'custom_dictionary_from', 'detectCharucoDiamond', 'detectMarkers', 'drawAxis', 'drawDetectedCornersCharuco', 'drawDetectedDiamonds', 'drawDetectedMarkers', 'drawMarker', 'drawPlanarBoard', 'estimatePoseBoard', 'estimatePoseCharucoBoard', 'estimatePoseSingleMarkers', 'getBoardObjectAndImagePoints', 'getPredefinedDictionary', 'interpolateCornersCharuco', 'refineDetectedMarkers']
2019-01-10T08:48:32.738 [Info] Function completed (Success, Id=3c09b959-a09c-4aa3-9626-f51330b9f4a7, Duration=8432ms)

OpenCV4.0.0이 설치되었습니다. 버전을 지정하여 설치하려면 「3」을 확인하십시오.

Blob에 이미지가 업로드되면 이미지 크기 확인



1. 함수를 아래와 같이 실행합니다.
import os
import cv2
img = cv2.imread(os.environ['inputBlob'], -1)
print(img.shape)

이미지 크기가 표시되면 성공입니다.
2019-01-10T08:58:41.010 [Info] Function started (Id=66057cdb-6a7c-4057-a0b2-e2feedf8b531)
2019-01-10T08:58:48.015 [Info] (512, 512, 3)
2019-01-10T08:58:48.120 [Info] Function completed (Success, Id=66057cdb-6a7c-4057-a0b2-e2feedf8b531, Duration=7104ms)

2. 실제로 Azure 포털이나 Azure Storage Explorer에서 컨테이너(testcontainer)에 이미지(.jpg)를 업로드하여 로그를 확인해 보세요.

3. 이제 Blob에 이미지가 업로드되면 Functions에서 Python과 OpenCV를 사용하여 어떻게 할 수 있습니다.

요약


  • Blob을 트리거하여 뭔가하는 Azure Functions (Python)을 만들었습니다
  • Azure Functions를 Python3 및 OpenCV와 호환
  • Azure Functions v2에서 Python을 선택할 수있는 날이 올 것인지 궁금합니다

  • 참고문헌



    [1] Azure Functions: Blob 컨테이너를 트리거로 하는 Python 함수 만들기
    [2] Azure Functions에서 Python3 및 pip 사용
    [3] opencv-python
    [4] Azure Functions: FaceAPI와 OpenCV에서 얼굴 검출을 해 보았다. ① -Python3과 외부 라이브러리의 도입-

    좋은 웹페이지 즐겨찾기