Azure Functions의 Blob Input Binding을 사용한 Cognitive Service와의 연계 샘플

※본 기사는 2019년 11월 시점에서의 정보입니다.

소개



이 기사에서는 Azure Functions (v2, C#)의 Blob Input Binding의 사용법을 Cognitive Service의 이용을 예로 들어 소개합니다. Blob Input Binding을 설정하는 방법에 대한 기사가 전혀 발견되지 않았기 때문에 문서로 남겨두기로 결정했습니다. 이번에는 Azure 포털에서 설정하는 방법을 소개합니다.

사전 준비



· 모든 Cognitive Service 배포
Cognitive Service를 배포하고 엔드포인트와 키를 복사합니다. 이번 샘플에서는 Face API의 Emotion을 이용합니다.

· 스토리지 계정 배포
스토리지 계정을 배포합니다. Functions에서 호출하려면 "범용"SKU를 선택해야합니다. 생성 후 Blob Storage에 임의의 이름의 컨테이너를 만들고 인물의 얼굴이 있는 사진을 여러 장 업로드합니다.

· Functions 배포
Azure Functions를 배포합니다. 이 샘플에서는 .NET CORE(C#)를 사용합니다.

Functions 설정 방법



이 기사에서는 Azure 포털을 사용할 때 설정하는 방법을 소개합니다.

1.Blob Input Binding 설정
Azure Functions를 배포한 후 HTTP Trigger에서 임의의 함수를 만듭니다. 생성 후 통합 탭을 클릭하면 트리거 및 바인딩을 관리하기 위한 화면으로 전환됩니다. 여기에서는 처음에, 「입력」의 설정을 합니다. 모듈 설치 등이 완료되면 방금 이미지를 업로드한 스토리지 계정에 연결합니다. 연결이 완료되면 경로를 설정합니다. 경로는 컨테이너 이름/{name}이어야 합니다.



2.Suffix 설정
Blob Storage의 이미지 파일 이름을 매개 변수로 받기 위해 API의 Suffix를 설정합니다. 통합 탭에서 "트리거"설정 화면으로 이동하여 "루트 템플릿"을 설정합니다. 이 샘플에서는 FaceEmotion/picture={name} 형식으로 설정했습니다. {name}은 쿼리 매개변수로 전달된 이미지 파일 이름을 포함합니다.



3.function.json 확인
함수 이름을 클릭하고 파일 목록에서 function.json을 엽니다. 이 파일에는 트리거 및 바인딩 구성 정보가 들어 있습니다. Azure 포털의 설정은 이전에 설정 내용이 function.json에 반영되지 않는 경우가 드물기 때문에 원하는 설정이 제대로 작성되었는지 확인해야합니다.



4. 소스 코드 작성
Blob Input Binding을 사용하여 가져온 이미지 파일을 Face API에 던지는 샘플을 만들었습니다. Cognitive Service에서는 Blob의 Path를 Body로 등록해야 합니다. Path를 얻기 위해 이번에는 CloudBlockBlob 클래스의 Uri 속성을 사용했습니다.

참조 1 : htps : // / cs. 미 c 로소 ft. 코 m / 자 - jp / 아즈레 / 아즈레 - 푼 c 치온 s / 훗 c 치 온 s - 병 gs -s 토라 게 b b? bs = c sha rpsc pt # amp t- 우사게
참조 2 : htps : // / cs. 미 c 로소 ft. 코 m / 엔 - s / t t t / 아피 / 미 c 로소 ft. 오즈레. s 가시. bb. c ぉ db ぉ ckb ぉ b?ゔ ぃ w = 아즈레 - t-t- ぇ cy

run.csx
#r "Newtonsoft.Json"
#r "Microsoft.WindowsAzure.Storage"

using System;
using System.Net;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Web;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Primitives;
using Newtonsoft.Json;
using Microsoft.WindowsAzure.Storage.Blob;

public static async Task<IActionResult> Run(HttpRequest req, CloudBlockBlob inputBlob, ILogger log)
{
    var client = new HttpClient();
    var queryString = HttpUtility.ParseQueryString(string.Empty);

    // Request headers
    client.DefaultRequestHeaders.Add("Ocp-Apim-Subscription-Key", "<YOUR_SUBSCRIPTION_KEY>");
    queryString["returnFaceAttributes"] = "emotion";

    var uri = "https://<YOUR_FACE_API_SERVICE_NAME>.cognitiveservices.azure.com/face/v1.0/detect?" + queryString;

    HttpResponseMessage response;

    // Request body
    string body = "{\"url\": " + $"\" {inputBlob.Uri} \"" + "}";

    log.LogInformation($"C# Blob trigger function Processed blob\nURI:{body}");

    byte[] byteData = Encoding.UTF8.GetBytes(body);

    using (var content = new ByteArrayContent(byteData))
    {
        content.Headers.ContentType = new MediaTypeHeaderValue("application/json");
        response = await client.PostAsync(uri, content);
    }

    string contentString = await response.Content.ReadAsStringAsync();

    return (ActionResult)new OkObjectResult($"{contentString}");
}

5. 테스트
쿼리 매개변수로 Blob Storage에 업로드한 이미지 파일 이름을 지정하여 실험해 봅시다. Face API가 얼굴을 감지하면 얼굴 위치 및 감정 점수가 JSON 형식으로 표시됩니다.
※200OK로 JSON 배열이 하늘의 경우에는, 얼굴을 검출할 수 없다고 하는 것이 됩니다. 옆모습 등은 검출되지 않으므로 조심해 주십시오.



사이고에게



소스 코드는 GitHub에도 두었습니다. 풀릭 등이 있으면 꼭 부탁드립니다.

좋은 웹페이지 즐겨찾기