이 예제는 보관되고 지원되지 않습니다. C# 및 Visual Studio를 사용하여 Form Recognizer 사용자 지정 기술을 만드는 방법을 설명했습니다.
필수 구성 요소
- Visual Studio(모든 버전).
- 동일한 형식의 5개 이상. 이 가이드와 함께 제공되는 샘플 데이터를 사용할 수 있습니다.
Form Recognizer 리소스 만들기
당신의 모델을 학습시키세요
이 기술을 사용하기 전에 입력 양식을 사용하여 Form Recognizer 모델을 학습시켜야 합니다. Form Recognizer 모델 사용하기 모델을 학습하는 방법 설명 샘플 데이터를 사용하거나 직접 제공할 수 있습니다.
모델이 학습되면 해당 ID 값을 안전한 위치에 복사합니다.
사용자 지정 기술 설정
이 자습서에서는 Azure Search Power Skills GitHub 리포지토리의 AnalyzeForm 프로젝트를 사용합니다. 이 리포지토리를 로컬 컴퓨터에 복제하고 Vision/AnalyzeForm/ 이동하여 프로젝트에 액세스합니다. 그런 다음, Visual Studio에서 analyzeForm.csproj 엽니다. 이 프로젝트는 사용자 지정 기술 인터페이스를 충족하고 Azure Cognitive Search 보강에 사용할 수 있는 Azure Function 리소스를 만듭니다. 양식 문서를 입력으로 사용하고 지정한 키/값 쌍을 텍스트로 출력합니다.
먼저 프로젝트 수준 환경 변수를 추가합니다. 왼쪽 창에서 AnalyzeForm 프로젝트를 찾아 마우스 오른쪽 단추로 클릭하고 속성선택합니다. 속성 창에서 디버그 탭을 선택한 다음 환경 변수 필드를 찾습니다. 추가하여 다음 변수를 추가합니다.
-
FORMS_RECOGNIZER_ENDPOINT_URL는 엔드포인트 URL로 설정된 값을 가집니다. -
FORMS_RECOGNIZER_API_KEY에 구독 키가 설정된 값을 사용하세요. -
FORMS_RECOGNIZER_MODEL_ID를 학습한 모델의 ID로 설정합니다. - 값이 1000으로 설정된
FORMS_RECOGNIZER_RETRY_DELAY. 이 값은 프로그램에서 쿼리를 다시 시도하기 전에 대기하는 시간(밀리초)입니다. - 값이 100으로 설정된
FORMS_RECOGNIZER_MAX_ATTEMPTS. 이 값은 프로그램이 성공적인 응답을 가져오는 동안 서비스를 쿼리하는 횟수입니다.
그런 다음 AnalyzeForm.cs 열고 fieldMappings 파일을 참조하는 변수를 찾습니다. 이 파일(및 이를 참조하는 변수)은 폼에서 추출할 키 목록과 각 키에 대한 사용자 지정 레이블을 정의합니다. 예를 들어 { "Address:", "address" }, { "Invoice For:", "recipient" } 값은 스크립트가 검색된 Address: 및 Invoice For: 필드의 값만 저장하고 해당 값에 각각 "address" 및 "recipient"레이블을 지정한다는 것을 의미합니다.
마지막으로 contentType 변수를 확인합니다. 이 스크립트는 URL에서 참조하는 원격 문서에서 지정된 Form Recognizer 모델을 실행하므로 콘텐츠 형식이 application/json. HTTP 요청에 바이트 스트림을 포함하여 로컬 파일을 분석하려면 contentType을(를) 해당 파일의 적절한 MIME 타입로 변경해야 합니다.
Visual Studio에서 함수 테스트
프로젝트를 편집한 후 프로젝트를 저장하고 AnalyzeForm 프로젝트를 Visual Studio의 시작 프로젝트로 설정합니다(아직 설정되지 않은 경우). 그런 다음 F5 눌러 로컬 환경에서 함수를 실행합니다. Postman 같은 REST 서비스를 사용하여 함수를 호출합니다.
HTTP 요청
함수를 호출하기 위해 다음 요청을 수행합니다.
POST http://localhost:7071/api/analyze-form
요청 본문
요청 본문 템플릿을 시작하십시오.
{
"values": [
{
"recordId": "record1",
"data": {
"formUrl": "<your-form-url>",
"formSasToken": "<your-sas-token>"
}
}
]
}
여기서는 학습한 양식과 형식이 동일한 양식의 URL을 제공해야 합니다. 테스트를 위해 학습 양식 중 하나를 사용할 수 있습니다. cURL 빠른 시작을 따른 경우 양식은 Azure Blob Storage 계정에 있습니다. Azure Storage Explorer를 열고 양식 파일을 찾아 마우스 오른쪽 단추로 클릭한 후 공유 액세스 서명 가져오기을 선택하십시오. 다음 대화 상자 창은 URL 및 SAS 토큰을 제공합니다. 요청 본문의 "formUrl" 및 "formSasToken" 필드에 각각 이러한 문자열을 입력합니다.
Azure Blob Storage에 없는 원격 문서를 분석하려면 해당 URL을 "formUrl" 필드에 붙여넣고 "formSasToken" 필드를 비워 둡니다.
메모
기술이 기술 세트에 통합되면 Cognitive Search에서 URL 및 토큰을 제공합니다.
응답
다음 예제와 유사한 응답이 표시됩니다.
{
"values": [
{
"recordId": "record1",
"data": {
"address": "1111 8th st. Bellevue, WA 99501 ",
"recipient": "Southridge Video 1060 Main St. Atlanta, GA 65024 "
},
"errors": null,
"warnings": null
}
]
}
Azure에 함수 게시
함수 동작에 만족하면 게시할 수 있습니다.
- Visual Studio의 솔루션 탐색기에서 프로젝트를 오른쪽 클릭하여 게시를 선택합니다. 새로 만들기>게시를 선택합니다.
- Visual Studio를 Azure 계정에 아직 연결하지 않은 경우 계정 추가를 선택합니다....
- 화면의 프롬프트를 따릅니다. 앱 서비스, Azure 구독, 리소스 그룹, 호스팅 계획 및 사용하려는 스토리지 계정의 고유한 이름을 지정합니다. 아직 없는 경우 새 리소스 그룹, 새 호스팅 계획 및 새 스토리지 계정을 만들 수 있습니다. 완료되면 만들기선택합니다.
- 배포가 완료되면 사이트 URL을 확인합니다. 이 URL은 Azure에서 함수 앱의 주소입니다. 임시 위치에 저장합니다.
-
Azure 포털에서 리소스 그룹으로 이동한 후 게시한
AnalyzeForm함수를 찾습니다. 관리 섹션 아래에 호스트 키가 표시됩니다. 기본 호스트 키를 복사하여 임시 위치에 저장합니다.
파이프라인에 연결
Cognitive Search 파이프라인에서 이 기술을 사용하려면 기술 세트에 기술 정의를 추가해야 합니다. 다음 JSON 블록은 샘플 기술 정의입니다(특정 시나리오 및 기술 세트 환경을 반영하도록 입력 및 출력을 업데이트해야 합니다).
AzureFunctionEndpointUrl 함수 URL로 바꾸고 AzureFunctionDefaultHostKey 호스트 키로 대체합니다.
{
"description":"Skillset that invokes the Form Recognizer custom skill",
"skills":[
"[... your existing skills go here]",
{
"@odata.type":"#Microsoft.Skills.Custom.WebApiSkill",
"name":"formrecognizer",
"description":"Extracts fields from a form using a pre-trained form recognition model",
"uri":"[AzureFunctionEndpointUrl]/api/analyze-form?code=[AzureFunctionDefaultHostKey]",
"httpMethod":"POST",
"timeout":"PT30S",
"context":"/document",
"batchSize":1,
"inputs":[
{
"name":"formUrl",
"source":"/document/metadata_storage_path"
},
{
"name":"formSasToken",
"source":"/document/metadata_storage_sas_token"
}
],
"outputs":[
{
"name":"address",
"targetName":"address"
},
{
"name":"recipient",
"targetName":"recipient"
}
]
}
]
}