Document AI를 사용하여 필기 입력 양식(Python)을 지능적으로 처리

c65b9ae04aa1853.png

Document AI란 무엇인가요?

Document AI API는 문서, 이메일 등과 같이 구조화되지 않은 데이터를 가져와서 데이터를 더 쉽게 이해하고 분석하고 사용할 수 있도록 해주는 문서 이해 솔루션입니다. 이 API는 콘텐츠 분류, 항목 추출, 고급검색 등을 통해 구조를 제공합니다.

이 가이드에서는 Document AI API를 Python과 함께 사용하는 데 중점을 둡니다. 이 가이드에서는 간단한 의료 문의 양식을 파싱하는 방법을 보여줍니다.

학습 내용

  • Document AI API 사용 설정 방법
  • API 요청 인증 방법
  • Python용 클라이언트 라이브러리 설치 방법
  • 스캔된 양식의 데이터를 파싱하는 방법

필요한 사항

  • Google Cloud 프로젝트
  • 브라우저(Chrome, Firefox 등)
  • Python 3에 대한 지식

설문조사

본 가이드를 어떻게 사용하실 계획인가요?

읽기만 할 계획입니다. 읽은 다음 연습 활동을 완료할 계획입니다.

귀하의 Python 사용 경험이 어떤지 평가해 주세요.

초급 중급 고급

귀하의 Google Cloud 서비스 사용 경험을 평가해 주세요.

초급 중급 고급

자습형 환경 설정

  1. Cloud Console에 로그인하고 새 프로젝트를 만들거나 기존 프로젝트를 다시 사용합니다. (Gmail 또는 G Suite 계정이 없으면 만들어야 합니다.)

모든 Google Cloud 프로젝트에서 고유한 이름인 프로젝트 ID를 기억하세요. (위의 이름은 이미 사용 중이므로 사용할 수 없습니다.) 나중에 이 ID를 PROJECT_ID로 입력해야 합니다.

  1. 그런 다음 Google Cloud 리소스를 사용하려면 Cloud Console에서 결제를 사용 설정해야 합니다.

'삭제' 섹션의 안내를 따르세요. 이 섹션에서는 이 가이드를 마친 후 비용이 결제되지 않도록 리소스를 종료하는 방법을 알려줍니다 Google Cloud 새 사용자에게는 $300USD 상당의 무료 평가판 프로그램 참여 자격이 부여됩니다.

Cloud Shell 시작

Google Cloud는 노트북에서 원격으로 Google Cloud를 사용할 수 있지만 이 Codelab은 Cloud에서 실행되는 명령줄 환경인 Google Cloud Shell을 사용합니다.

Cloud Shell 활성화

  1. Cloud Console에서 Cloud Shell 활성화H7JlbhKGHITmsxhQIcLwoe5HXZMhDlYue4K-SPszMxUxDjIeWfOHBfxDHYpmLQTzUmQ7Xx8o6OJUlANnQF0iBuUyfp1RzVad_4nCa0Zz5LtwBlUZFXFCWFrmrWZLqg1MkZz2LdgUDQ를 클릭합니다.

zlNW0HehB_AFW1qZ4AyebSQUdWm95n7TbnOr7UVm3j9dFcg6oWApJRlC0jnU1Mvb-IQp-trP1Px8xKNwt6o3pP6fyih947sEhOFI4IRF0W7WZk6hFqZDUGXQQXrw21GuMm2ecHrbzQ

이전에 Cloud Shell을 시작하지 않았으면 설명이 포함된 중간 화면(스크롤해야 볼 수 있는 부분)이 제공됩니다. 이 경우 계속을 클릭합니다(이후 다시 표시되지 않음). 이 일회성 화면은 다음과 같습니다.

kEPbNAo_w5C_pi9QvhFwWwky1cX8hr_xEMGWySNIoMCdi-Djx9AQRqWn-__DmEpC7vKgUtl-feTcv-wBxJ8NwzzAp7mY65-fi2LJo4twUoewT1SUjd6Y3h81RG3rKIkqhoVlFR-G7w

Cloud Shell을 프로비저닝하고 연결하는 데 몇 분 정도만 걸립니다.

pTv5mEKzWMWp5VBrg2eGcuRPv9dLInPToS-mohlrqDASyYGWnZ_SwE-MzOWHe76ZdCSmw0kgWogSJv27lrQE8pvA5OD6P1I47nz8vrAdK7yR1NseZKJvcxAZrPb8wRxoqyTpD-gbhA

Cloud Shell을 사용하면 클라우드에서 호스팅되는 가상 머신에 터미널로 액세스할 수 있습니다. 가상 머신에는 필요한 모든 개발 도구가 포함되어 있습니다. 영구적인 5GB 홈 디렉터리를 제공하고 Google Cloud에서 실행되므로 네트워크 성능과 인증이 크게 개선됩니다. 이 Codelab에서 대부분의 작업은 브라우저나 Chromebook만 사용하여 수행할 수 있습니다.

Cloud Shell에 연결되면 인증이 완료되었고 프로젝트가 해당 프로젝트 ID로 이미 설정된 것을 볼 수 있습니다.

  1. 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을 엽니다.

  1. 탐색 메뉴 > API 및 서비스 > 라이브러리 Search API를 클릭합니다.
  2. 'Document AI API'를 검색한 후 사용 설정을 클릭하여 Google Cloud 프로젝트에서 API를 사용합니다.

먼저 이 가이드에서 Document AI Platform에 사용할 양식 파서 프로세서 인스턴스를 만들어야 합니다.

  1. 콘솔에서 Document AI Platform 개요로 이동합니다.
  2. 프로세서 만들기를 클릭하고 양식 파서프로세서를 선택합니다.
  3. 프로세서 이름을 지정하고 목록에서 리전을 선택합니다.
  4. 만들기를 클릭하여 프로세서를 만듭니다.
  5. 프로세서 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를 입력한 다음 종료를 클릭하여 프로젝트를 삭제합니다.

자세히 알아보기

라이선스

이 작업물은 Creative Commons Attribution 2.0 일반 라이선스에 따라 사용이 허가되었습니다.