API로 머신 러닝과 컴퓨터 비전 활용하기

마이크로소프트 애저(Azure)를 활용하면 API로 정말 많은 서비스들을 액세스 할 수 있습니다.

200개 이상의 다양한 제품들을 제공하는 마이크로소프트의 애저(Azure)는 클라우드 호스팅과 컴퓨팅 플랫폼입니다. 여기에는 머신 러닝 서비스를 구현할 수 있는 제품들도 있습니다. 클라이언트 액세스 라이브러리나 REST 클라이언트로 서비스를 구현할 수 있는 API들도 있죠. 델파이에서는 TAzureConnectionInfo를 사용하면 이 모든 서비스들을 구현할 수 있습니다. 정말 최소한의 코드만으로 말이죠. 델파이가 제공하는 REST 클라이언트로 서비스에 액세스 할 수 있습니다.

Azure Read Client 는 무료인가요?

아니요, Azure Read Client는 유상 제품입니다. 하지만 좋은 점은 구입 후 제품 등록 시 12개월 간 앱 개발, 테스트, 출시까지 필요한 모든 서비스들을 무료로 사용할 수 있다는 점입니다. 일부 애저 서비스는 ‘항상 무료’로 제공됩니다. 문서인식(OCR) 프로그램에서 사용하는 서비스인 “인지 검색”은 무료 서비스 중 하나입니다. 10,000여개의 문서들이 함께 제공되는데, 테스트 목적으로 사용하기에는 충분합니다.

“컴퓨터 비전” 서비스 리소스들을 활용할 수 있는 API는 어떻게 받을 수 있나요?

문자인식(OCR) 프로그램을 만들어볼까요. “인지 서비스 -> 컴퓨터 비전” 리소스를 사용해보겠습니다. 그럼 먼저 “애저 구독(Azure subscription)”이 필요합니다. 아래 링크로 접속해서 “애저 구독”을 하나 생성하세요. 무료로 시작할 수 있습니다!

https://azure.microsoft.com/en-us/free/cognitive-services/

가입을 하고 나면 필요한 서비스 링크를 생성할 수 있습니다. “컴퓨터 비전” 리소스를 생성하려면 아래 링크를 클릭하세요.

https://portal.azure.com/#create/Microsoft.CognitiveServicesComputerVision

다시 돌아가서 변경할 수 없으므로, 올바른 영역을 선택하세요! 생성한 리소스로 이동한 후 왼쪽 메뉴에서 “Keys and Endpoint”를 선택합니다. 여러 키들(keys) 중 하나와 위치(location)를 복사하세요. 프로그램 구현에 필요한 정보들입니다.

인지 서비스(Cognitive Services)와 REST API를 어떻게 연동할 수 있나요?

TRESTClient, TRESTRequest, TRESTResponse 컴포넌트를 사용하면 REST API와 인지 서비스를 연결할 수 있습니다. TRESTClient를 드래그앤드랍(drag and drop)하여 포럼에 끌어다 놓고 기본 속성을 몇 가지 변경합니다. “Accept” 속성에 “application/json” 타입이 있는지 확인하세요. 항목 타입을 “application/json“으로 설정해야 합니다.

그런 다음 TRESTRequest 컴포넌트를 포럼에 올려놓고 앞서 만들었던 클라이언트에서 클라이언트 속성을 설정합니다. 메소드를 “rmPOST“로 설정하면 됩니다.

TRESTResponse 컴포넌트를 끌어다놓고, 응답 오브젝트에 요청 컴포넌트를 응답 속성으로 설정합니다.

에디트 상자들(edit box), 버튼들(buttons), 메모 상자(memo box)를 폼 위에 올려놓으면 인터페이스는 완성입니다.

이미지 처리를 해서 활용하고 싶은데, API를 어떤 방법으로 사용해야 하나요?

이미지는 한 번 호출만으로 결과값을 얻거나 인지 서비스에 게시할 수는 없습니다. 이미지 처리에는 시간이 필요한데, 보통은 5초가 안 걸리기는 합니다. 때문에 먼저 인지 서비스에 이미지를 보내고, “Operation-Location” 값을 확인한 후 “성공”할 때까지 상태를 계속 확인해야 합니다. 서버가 이미지 처리중일 때는 “실행중(running)”으로 표시됩니다.

인지 서비스 API를 호출할 때마다, HTTP Header를 통해 구독 키(subscription key)를 제공해야 합니다. 앞서 생성했던 리소스에서 복사한 바로 그 키 값입니다. 방법은 TRESTRequest 컴포넌트에 새 매개변수를 추가합니다. “pkHTTPHEADER“를 ‘kind’로 설정하고, 이름을 “Ocp-Apim-Subscription-Key“로 지정한 후 여러분이 가지고 있는 그 키 값을 넣으면 됩니다.

처리할 이미지 URL은 JSON 형식으로 제공해야 합니다. 방법은 새로운 매개변수를 추가하고 이름을 “data”로 지정합니다. 타입은 “ctAPPLICATION_JSON“으로 설정하고, 종류는 “pkGETorPOST“로 합니다. 그리고 아래와 같이 값을 설정하면 됩니다:

REST 클라이언트의 기본 URL 설정이 필요합니다. 기본 URL을 설정하려면 이전에 복사한 리소스의 위치를 알아야 합니다. “LOCATION” 값을 리소스 위치로 지정합니다.

이제 게시할 준비가 되었습니다. 요청 메소드가 “rmpost”인지 확인한 후 실행합니다. 오류없이 성공적으로 진행되었다면, 응답을 확인할 수 있을 것입니다. 헤더를 통해서 오는데요. 다음 요청에 필요한 헤더는 “Operation-Location”입니다. 이 값은 요청이 완료되면, 그 결과를 확인할 수 있습니다. 앞서 언급했 듯 요청을 처리하는데 다소 시간은 걸릴 수 있습니다 (보통 1~3초). 예측하기는 어렵습니다. 작업이 종료됐는지 여부를 늘 확인해야 합니다.

Operation-Location에서 OCR 결과를 어떻게 확인할 수 있나요?

OCR 판독 결과는 “Operation-Location” URL로 GET 요청을 보내야 합니다.이전처럼 헤더에 있는 “Subscription key”를 전달해야 합니다. 매개 변수를 만들고 앞서 했던 방식처럼 Subscription key를 추가하세요. GET 요청을 전송하면, JSON에 대한 응답을 받을 수 있습니다. “상태” 값은 계속 실행중인 “running”으로 표시될 것입니다. 이 작업이 잘 된다면 JSON 형식의 OCR 판독값을 얻을 수 있습니다. 이제 JSON 구문 분석만 하면 됩니다!

아래 깃허브 링크를 통해서 전체 데모 애플리케이션의 소스 코드를 다운로드 받을 수 있습니다.

https://github.com/checkdigits/OCRReadClient_example

게시 버튼(post button)에 대한 소스코드는 다음과 같습니다:

이제, 여러분의 프로젝트에 컴퓨터 비전을 적용할 준비가 되셨나요?

api C++ c++builder c++빌더 code database Delphi fmx IDE ideas interbase ios migration modernization news python radstudio RAD스튜디오 tips UI UIUX vcl windows 개발 개발사례 개발팁 교육 기술레터 기술백서 데이터 데이터베이스 델파이 마이그레이션 모바일 윈도우 윈도우11 인터베이스 출시 코드 파이썬 파이어몽키 프로그래밍 프로젝트 현대화