AWS Textract로 텍스트 추출(Python3.6)

소개



AWS Textract에서 이미지에서 텍스트 추출을 시도했습니다.

개발 환경


  • Windows 10
  • Anaconda
  • Python 3.6
  • OpenCV 4.4.0
  • awscli v2

  • 소개



    1. awscli 설치
    Windows에서 AWS CLI 버전 2 설치, 업데이트 및 제거를 참조하여 AWSCLIV2.msi를 설치합니다.

    2. AWS 콘솔에서 IAM에서 액세스 키 생성


    3. 명령 프롬프트에서 awscli를 설정합니다.

    액세스 키 생성 시 획득한 Access Key와 Secret Access Key를 입력합니다.
    기본 지역 이름은 Textract를 사용할 수 있는 ap-south-1(아시아 태평양 뭄바이)을 지정합니다.
    출력 형식은 json입니다.
    $ aws configure 
    AWS Access Key ID [None]: XXXX
    AWS Secret Access Key [None]: XXXX
    Default region name [None]: ap-south-1
    Default output format [None]: json
    
  • 지역과 구역
  • 설정 파일 및 자격 증명 파일 설정

  • 3. IAM 액세스 권한 추가에서 정책 AmazonTextractFullAccess를 추가합니다.


    4. anaconda prompt를 열고 Python 3.6 환경을 만듭니다.
    $ conda create -n py36 python=3.6
    $ conda activate py36
    

    5. 라이브러리 설치
    $ pip install boto3
    $ pip install opencv-python
    

    6. 아래 코드를 실행해 봅시다.
    import boto3
    import cv2
    import os.path
    
    def process_text_analysis(image):
        client = boto3.client('textract')
        image_data = cv2.imencode(".png", image)[1].tostring()
        response = client.analyze_document(Document={'Bytes': image_data}, FeatureTypes=["TABLES", "FORMS"])
        blocks = response['Blocks']
        return blocks
    
    def draw_blocks(image, blocks):
        height, width = image.shape[:2]
        draw = image.copy()
        for block in blocks:
            if block['BlockType'] == "WORD":
                vertices = [(int(width * block['Geometry']['Polygon'][i]['X']), int(height * block['Geometry']['Polygon'][i]['Y'])) for i in range(len(block['Geometry']['Polygon']))]
                cv2.putText(draw, block['Text'], vertices[0], cv2.FONT_HERSHEY_PLAIN, 1, (255, 255, 255), 1, cv2.LINE_AA)
                cv2.rectangle(draw, vertices[0], vertices[2], (0, 255, 0))
        return draw
    
    filename = "338px-Atomist_quote_from_Democritus.png"
    image = cv2.imread(filename, cv2.IMREAD_COLOR)
    
    blocks = process_text_analysis(image)
    print("Blocks detected: " + str(len(blocks)))
    
    draw = draw_blocks(image, blocks)
    cv2.imshow("draw", draw)
    cv2.waitKey(0)
    


    입력
    output






    수고하셨습니다.

    좋은 웹페이지 즐겨찾기