마이크로소프트 애저(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 15441
공지 [UX Summit 요약] 오른쪽 클릭은 옳다 (Right Click is Right) 관리자 2020.11.16 13962
공지 [10.4 시드니] What's NEW! 신기능 자세히 보기 관리자 2020.05.27 16499
공지 RAD스튜디오(델파이,C++빌더) - 고객 사례 목록 관리자 2018.10.23 22055
공지 [데브기어 컨설팅] 모바일 앱 & 업그레이드 마이그레이션 [1] 관리자 2017.02.06 23268
공지 [전체 목록] 이 달의 기술자료 & 기술레터 관리자 2017.02.06 18923
공지 RAD스튜디오(델파이, C++빌더) - 시작하기 [1] 관리자 2015.06.30 39257
공지 RAD스튜디오(델파이,C++빌더) - 모바일 앱 개발 사례 (2020년 11월 업데이트 됨) 험프리 2014.01.16 174713
714 [발표자료] 20190214 델파이 24주년 기념 세미나: 델파이 앱 현대화 방안 - 다양한 데이터 서비스 연동하기 관리자 2023.04.20 1442
713 [10.4 시드니][업데이트 2] TNUMBERBOX – 새로운 VCL 컨트롤 관리자 2023.03.09 488
712 [10.4 시드니][업데이트 2] TCONTROLLIST – 새로운 VCL 컨트롤 관리자 2023.03.09 385
711 이 달의 기술자료 - 2021년 09월 file 험프리 2021.08.26 1507
710 데스크탑, 무엇과도 비교할 수 없는 강력한 생산성의 동력 관리자 2021.08.18 1299
709 RAD스튜디오 11, 미리보기! 관리자 2021.08.17 1153
708 RAD스튜디오 11을 준비하는 방법 관리자 2021.08.17 1078
707 이 달의 기술자료 - 2021년 08월 file 험프리 2021.07.29 1172
706 [TCoffeeAndCode] – 대규모 프로젝트 관리와 IDE 성능 향상 방안 관리자 2021.07.22 1084
705 [LEARN TO CODE] 코드 썸머 캠프 2021 관리자 2021.07.16 1081
704 RAD스튜디오 11, 곧 만나볼 수 있습니다: 새 버전 안내 & 베타 테스터 초대장 관리자 2021.07.15 1178
703 웹사이트 메트릭스, 앱에 바로 적용하는 방법 관리자 2021.07.09 1147
702 새로운 무료 개발 도구들 관리자 2021.07.07 1278
701 윈도우 11: 공룡들을 전멸 시킬 유성이 곧 쏟아집니다. 관리자 2021.07.02 1251
700 이 달의 기술자료 - 2021년 07월 험프리 2021.06.24 1296
699 모바일 장비의 엔터프라이즈 데이터: 가장 많은 실수 TOP 5와 방지 요령 관리자 2021.06.24 1201
698 네이티브 IOS & 안드로이드 앱 만들기 첫 걸음 관리자 2021.06.09 1559
697 BDE/파라독스를 인터베이스(INTERBASE)로 마이그레이션 하기 관리자 2021.05.31 537
696 이 달의 기술자료 - 2021년 06월 file 험프리 2021.05.27 548
695 코드 서명 – 여러분이 개발한 프로그램, 컴퓨터 바이러스처럼 보이지는 않나요? 관리자 2021.05.12 637