Document AI란 무엇인가요?
Document AI API는 문서, 이메일 등과 같이 구조화되지 않은 데이터를 가져와서 데이터를 더 쉽게 이해하고 분석하고 사용할 수 있도록 해주는 문서 이해 솔루션입니다. 이 API는 콘텐츠 분류, 항목 추출, 고급검색 등을 통해 구조를 제공합니다.
이 가이드에서는 Document AI API를 Python과 함께 사용하는 데 중점을 둡니다. 이 가이드에서는 간단한 의료 문의 양식을 파싱하는 방법을 보여줍니다.
학습 내용
- Document AI API 사용 설정 방법
- API 요청 인증 방법
- Python용 클라이언트 라이브러리 설치 방법
- 스캔된 양식의 데이터를 파싱하는 방법
필요한 사항
설문조사
본 가이드를 어떻게 사용하실 계획인가요?
귀하의 Python 사용 경험이 어떤지 평가해 주세요.
귀하의 Google Cloud 서비스 사용 경험을 평가해 주세요.
자습형 환경 설정
- Cloud Console에 로그인하고 새 프로젝트를 만들거나 기존 프로젝트를 다시 사용합니다. (Gmail 또는 G Suite 계정이 없으면 만들어야 합니다.)
모든 Google Cloud 프로젝트에서 고유한 이름인 프로젝트 ID를 기억하세요. (위의 이름은 이미 사용 중이므로 사용할 수 없습니다.) 나중에 이 ID를 PROJECT_ID
로 입력해야 합니다.
- 그런 다음 Google Cloud 리소스를 사용하려면 Cloud Console에서 결제를 사용 설정해야 합니다.
'삭제' 섹션의 안내를 따르세요. 이 섹션에서는 이 가이드를 마친 후 비용이 결제되지 않도록 리소스를 종료하는 방법을 알려줍니다 Google Cloud 새 사용자에게는 $300USD 상당의 무료 평가판 프로그램 참여 자격이 부여됩니다.
Cloud Shell 시작
Google Cloud는 노트북에서 원격으로 Google Cloud를 사용할 수 있지만 이 Codelab은 Cloud에서 실행되는 명령줄 환경인 Google Cloud Shell을 사용합니다.
Cloud Shell 활성화
- Cloud Console에서 Cloud Shell 활성화를 클릭합니다.
이전에 Cloud Shell을 시작하지 않았으면 설명이 포함된 중간 화면(스크롤해야 볼 수 있는 부분)이 제공됩니다. 이 경우 계속을 클릭합니다(이후 다시 표시되지 않음). 이 일회성 화면은 다음과 같습니다.
Cloud Shell을 프로비저닝하고 연결하는 데 몇 분 정도만 걸립니다.
Cloud Shell을 사용하면 클라우드에서 호스팅되는 가상 머신에 터미널로 액세스할 수 있습니다. 가상 머신에는 필요한 모든 개발 도구가 포함되어 있습니다. 영구적인 5GB 홈 디렉터리를 제공하고 Google Cloud에서 실행되므로 네트워크 성능과 인증이 크게 개선됩니다. 이 Codelab에서 대부분의 작업은 브라우저나 Chromebook만 사용하여 수행할 수 있습니다.
Cloud Shell에 연결되면 인증이 완료되었고 프로젝트가 해당 프로젝트 ID로 이미 설정된 것을 볼 수 있습니다.
- Cloud Shell에서 다음 명령어를 실행하여 인증되었는지 확인합니다.
gcloud auth list
명령어 결과
Credentialed Accounts ACTIVE ACCOUNT * <my_account>@<my_domain.com> To set the active account, run: $ gcloud config set account `ACCOUNT`
gcloud config list project
명령어 결과
[core] project = <PROJECT_ID>
또는 다음 명령어로 설정할 수 있습니다.
gcloud config set project <PROJECT_ID>
명령어 결과
Updated property [core/project].
Document AI를 사용하려면 먼저 API를 사용 설정해야 합니다. 브라우저에서 Cloud Console을 엽니다.
- 탐색 메뉴 > API 및 서비스 > 라이브러리 를 클릭합니다.
- 'Document AI API'를 검색한 후 사용 설정을 클릭하여 Google Cloud 프로젝트에서 API를 사용합니다.
먼저 이 가이드에서 Document AI Platform에 사용할 양식 파서 프로세서 인스턴스를 만들어야 합니다.
- 콘솔에서 Document AI Platform 개요로 이동합니다.
- 프로세서 만들기를 클릭하고 양식 파서를 선택합니다.
- 프로세서 이름을 지정하고 목록에서 리전을 선택합니다.
- 만들기를 클릭하여 프로세서를 만듭니다.
- 프로세서 ID를 복사합니다. 나중에 코드에서 사용해야 합니다.
(선택사항) 문서를 업로드하여 콘솔에서 프로세서를 테스트할 수 있습니다. 문서 업로드를 클릭하고 파싱할 양식을 선택합니다. 사용할 수 있는 샘플 양식이 없는 경우 이 샘플 양식을 다운로드하여 사용할 수 있습니다.
출력 결과는 다음과 같습니다.
Document AI API에 요청하려면 서비스 계정을 사용해야 합니다. 서비스 계정은 프로젝트에 속하며 Google 클라이언트 Python 라이브러리에서 API 요청을 하는 데 사용됩니다. 다른 사용자 계정과 마찬가지로 서비스 계정은 이메일 주소로 표시됩니다. 이 섹션에서는 Cloud SDK를 사용하여 서비스 계정을 만든 다음 서비스 계정으로 인증해야 하는 사용자 인증 정보를 만듭니다.
먼저 이 Codelab 전체에서 사용할 PROJECT_ID
로 환경 변수를 설정합니다.
export GOOGLE_CLOUD_PROJECT=$(gcloud config get-value core/project)
그런 후, 다음을 사용하여 Document AI API에 액세스할 새 서비스 계정을 만듭니다.
gcloud iam service-accounts create my-docai-sa \
--display-name "my-docai-service-account"
다음으로, Python 코드가 새 서비스 계정으로 로그인할 때 사용하는 사용자 인증 정보를 만듭니다. 이러한 사용자 인증 정보를 만들고, 다음 명령어를 사용하여 JSON 파일 '~/key.json'으로 저장합니다.
gcloud iam service-accounts keys create ~/key.json \
--iam-account my-docai-sa@${GOOGLE_CLOUD_PROJECT}.iam.gserviceaccount.com
마지막으로 라이브러리에서 사용자 인증 정보를 찾는 데 사용하는 GOOGLE_APPLICATION_CREDENTIALS 환경 변수를 설정합니다. 이 양식 인증에 대한 자세한 내용은 가이드를 참조하세요. 환경 변수는 다음을 사용하여 만든 사용자 인증 정보 JSON 파일의 전체 경로로 설정해야 합니다.
export GOOGLE_APPLICATION_CREDENTIALS="/path/to/key.json"
Google Cloud Storage에 저장되는 샘플 양식이 있습니다. 다음 명령어를 사용하여 작업 디렉터리에 다운로드합니다.
gsutil cp gs://cloud-samples-data/documentai/form.pdf .
아래 명령어를 사용하여 파일이 cloudshell에 다운로드되었는지 확인합니다.
ls -ltr form.pdf
클라이언트 라이브러리 설치
pip3 install --upgrade google-cloud-documentai pip3 install --upgrade google-cloud-storage
다음과 같은 결과를 확인할 수 있습니다.
... Installing collected packages: google-cloud-documentai Successfully installed google-cloud-documentai-0.3.0 . . Installing collected packages: google-cloud-storage Successfully installed google-cloud-storage-1.35.0
이제 Document AI API를 사용할 준비가 되었습니다.
대화형 Python 시작
이 가이드에서는 IPython이라는 대화형 Python 인터프리터를 사용합니다. Cloud Shell에서 ipython
을 실행하여 세션을 시작합니다. 이 명령어는 대화형 세션에서 Python 인터프리터를 실행합니다.
ipython
다음과 같은 결과를 확인할 수 있습니다.
Python 3.7.3 (default, Jul 25 2020, 13:03:44) Type 'copyright', 'credits' or 'license' for more information IPython 7.13.0 -- An enhanced Interactive Python. Type '?' for help. In [1]:
이 단계에서는 동기 엔드포인트를 사용하여 프로세스 문서를 호출합니다. 또한 대용량 문서를 한 번에 처리하는 데 비동기 API를 사용할 수도 있습니다. 양식 파서 API 사용에 대해 자세히 알아보려면 여기 가이드를 참조하세요.
다음 코드를 iPython 세션에 복사합니다.
project_id= 'YOUR_PROJECT_ID'
location = 'YOUR_PROJECT_LOCATION' # Format is 'us' or 'eu'
processor_id = 'YOUR_PROCESSOR_ID' # Create processor in Cloud Console
file_path = 'form.pdf' # The local file in your current working directory
from google.cloud import documentai_v1beta3 as documentai
from google.cloud import storage
def process_document(
project_id=project_id, location=location, processor_id=processor_id, file_path=file_path
):
# Instantiates a client
client = documentai.DocumentProcessorServiceClient()
# The full resource name of the processor, e.g.:
# projects/project-id/locations/location/processor/processor-id
# You must create new processors in the Cloud Console first
name = f"projects/{project_id}/locations/{location}/processors/{processor_id}"
with open(file_path, "rb") as image:
image_content = image.read()
# Read the file into memory
document = {"content": image_content, "mime_type": "application/pdf"}
# Configure the process request
request = {"name": name, "document": document}
# Use the Document AI client to process the sample form
result = client.process_document(request=request)
document = result.document
document_text = document.text
print("Document processing complete.")
print("Text: {}".format(document_text))
지금 코드를 실행하면 콘솔에서 추출된 텍스트가 무엇인지 확인할 수 있습니다. 다음 단계에서는 데이터베이스에 쉽게 저장하거나 다른 애플리케이션에서 사용할 수 있는 구조화된 데이터를 추출합니다.
함수 호출
process_document()
이제 양식과 해당 신뢰도 점수에서 키-값 쌍을 추출할 수 있습니다. Document 응답 객체에는 입력 문서의 페이지 목록이 포함됩니다. 각 page
객체에는 텍스트 형식의 양식 필드 및 위치 목록이 포함됩니다.
다음 코드는 각 페이지를 반복하고 각 키, 값, 신뢰도 점수를 추출하여 인쇄합니다.
processDocument() 함수 하단에 다음 코드를 붙여넣으세요.
document_pages = document.pages
for page in document_pages:
print("Page Number:{}".format(page.page_number))
for form_field in page.form_fields:
fieldName=get_text(form_field.field_name,document)
nameConfidence = round(form_field.field_name.confidence,4)
fieldValue = get_text(form_field.field_value,document)
valueConfidence = round(form_field.field_value.confidence,4)
print(fieldName+fieldValue +" (Confidence Scores: "+str(nameConfidence)+", "+str(valueConfidence)+")")
def get_text(doc_element: dict, document: dict):
"""
Document AI identifies form fields by their offsets
in document text. This function converts offsets
to text snippets.
"""
response = ""
# If a text segment spans several lines, it will
# be stored in different text segments.
for segment in doc_element.text_anchor.text_segments:
start_index = (
int(segment.start_index)
if segment in doc_element.text_anchor.text_segments
else 0
)
end_index = int(segment.end_index)
response += document.text[start_index:end_index]
return response
이제 코드를 실행하고 다음과 같이 함수를 호출합니다.
process_document()
샘플 문서를 사용하는 경우 다음 출력이 표시됩니다.
Document processing complete.
Page Number:1
Marital Status: Single (Confidence Scores: 1.0000, 1.0000)
DOB: 09/04/1986 (Confidence Scores: 0.9999, 0.9999)
City: Towalo (Confidence Scores: 0.9996, 0.9996)
Address: 24 Barney Lane (Confidence Scores: 0.9994, 0.9994)
Referred By: None (Confidence Scores: 0.9968, 0.9968)
Phone #: (906) 917-3486 (Confidence Scores: 0.9961, 0.9961)
State: NJ (Confidence Scores: 0.9960, 0.9960)
Emergency Contact Phone: (906) 334-8926 (Confidence Scores: 0.9924, 0.9924)
Name: Sally Walker (Confidence Scores: 0.9922, 0.9922)
수고하셨습니다. Document AI API를 사용하여 필기 입력 양식에서 데이터를 추출했습니다. 다른 형태의 이미지를 실험해 보세요.
삭제
이 가이드에서 사용한 리소스 비용이 Google Cloud 계정에 청구되지 않도록 하려면 다음 안내를 따르세요.
- Cloud Console에서 리소스 관리 페이지로 이동합니다.
- 프로젝트 목록에서 프로젝트를 선택한 다음 삭제를 클릭합니다.
- 대화상자에서 프로젝트 ID를 입력한 다음 종료를 클릭하여 프로젝트를 삭제합니다.