마이크로소프트 애저(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)에 대한 소스코드는 다음과 같습니다:

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

번호 제목 글쓴이 날짜 조회 수
공지 [DelphiCon 요약] 코드사이트 로깅 실전 활용 기법 (Real-world CodeSite Logging Techniques) 관리자 2021.01.19 17888
공지 [UX Summit 요약] 오른쪽 클릭은 옳다 (Right Click is Right) 관리자 2020.11.16 16244
공지 [10.4 시드니] What's NEW! 신기능 자세히 보기 관리자 2020.05.27 18885
공지 RAD스튜디오(델파이,C++빌더) - 고객 사례 목록 관리자 2018.10.23 24481
공지 [데브기어 컨설팅] 모바일 앱 & 업그레이드 마이그레이션 [1] 관리자 2017.02.06 25855
공지 [전체 목록] 이 달의 기술자료 & 기술레터 관리자 2017.02.06 21228
공지 RAD스튜디오(델파이, C++빌더) - 시작하기 [1] 관리자 2015.06.30 41809
공지 RAD스튜디오(델파이,C++빌더) - 모바일 앱 개발 사례 (2020년 11월 업데이트 됨) 험프리 2014.01.16 177109
38 [10.2 도쿄] 델파이로 리눅스 기반 웹서비스 제작하기(WebBroker 이용) [1] file 험프리 2017.03.30 3884
37 [10.2 도쿄] 리눅스 지원을 제공합니다. file 김원경 2017.03.23 1065
36 이 달의 기술자료 - 2017년 02월 file 험프리 2017.01.31 716
35 CodeRage XI 온라인 컨퍼런스 안내 file 험프리 2016.11.15 329
34 [RAD서버] [웨비나-딥다이브] 매장 관리 솔루션 개발하기(개발 시나리오와 데모) file 험프리 2016.11.02 1353
33 델파이/C++빌더 개발자를 위한 최고의 미들웨어 서버 - RAD 서버 file 험프리 2016.11.02 1808
32 이 달의 기술자료 - 2016년 11월 험프리 2016.10.28 457
31 이 달의 기술자료 - 2015년 10월 file 험프리 2015.09.25 551
30 [시애틀] FireDAC NoSQL 드라이버로 몽고DB를 완벽 지원합니다. Humphery 2015.09.04 983
29 [앵콜세미나] 사물인터넷 실제 구현하기, DeepDive!: 비콘, 스마트조명, 블루투스 체중계 관리자 2015.08.19 533
28 이 달의 기술자료 - 2015년 08월 험프리 2015.07.28 658
27 데이터스냅에서 제공하는 JSON 포맷 데이터 사용(분석)하기 [1] file Humphery 2015.07.20 3816
26 이 달의 기술자료 - 2015년 07월 file 험프리 2015.06.26 1227
25 RAD Studio 사물인터넷 참고자료와 샘플 모음 file Humphery 2015.06.23 2217
24 [FireDAC Skill Sprints] 8. TFDMemTable: 메모리 기반 데이터셋 사용하기 Humphery 2015.04.06 2607
23 [FireDAC Skill Sprints] 9. LocalSQL: DB에서 가져온 데이터(데이터셋)를 대상으로 다시 SQL쿼리 실행하기 Humphery 2015.04.01 1935
22 [FireDAC Skill Sprints] 1. FireDAC 소개 험프리 2015.04.01 1604
21 VCL앱을 모바일앱으로 쉽게 확장할 수 있는 앱테더링 자세히 살펴보기! [3] Humphery 2014.11.11 3413
20 8단계로 완성하는 "2014년 출시 앨범" 앱 개발 따라하기 [1] file Humphery 2014.10.07 3671
19 "Could not load SSL library." 오류 대응(XE7: BaaS, RESTClient, DataSnap) [1] Humphery 2014.09.12 16005