AWS Rekognition API 사용하기 - 이미지인식하기






◼️ 코드


client = boto3.client('rekognition', aws_access_key_id=ACCESS_KEY, aws_secret_access_key=SECRET_KEY, region_name='ap-northeast-2')

def analyze_image(image_path):
    # 1. 파일 존재 여부 및 맥 상대경로 안전 확인
    if not os.path.exists(image_path):
        print(f"파일을 찾을 수 없다: {image_path}")
        return

    # 2. 파일 크기 확인 (API 제한: Bytes 직접 전송 시 5MB 이하 필수)
    file_size_mb = os.path.getsize(image_path) / (1024 * 1024)
    if file_size_mb > 5:
        print(f"이미지 용량 초과 ({file_size_mb:.2f}MB). 5MB 이하로 줄여야 한다.")
        return

    with open(image_path, 'rb') as img_file:
        image_bytes = img_file.read()

    try:
        response = client.detect_text(
            Image={'Bytes': image_bytes}
        )

        detections = response.get('TextDetections', [])
        if not detections:
            print("인식된 텍스트가 없다. (글자가 너무 작거나 세로쓰기 문서일 가능성 확인)")
            return

        for item in detections:
            if item.get('Type') == 'LINE':
                print(item.get('DetectedText', ''))

    except ClientError as e:
        error_code = e.response['Error']['Code']
        error_msg = e.response['Error']['Message']
        print(f"AWS 에러 [{error_code}]: {error_msg}")
    except Exception as e:
        print(f"기타 실행 에러: {e}")

if __name__ == "__main__":
    image_path = '001.PNG'
    analyze_image(image_path)

◼️ 분석

1. 클라이언트 초기화

  • boto3.client를 사용하여 서울 리전(ap-northeast-2)의 Rekognition 서비스 클라이언트를 생성한다.

  • 인증을 위해 aws_access_key_idaws_secret_access_key를 직접 전달하여 AWS API 호출 권한을 확보한다.

2. 이미지 유효성 사전 검증

  • os.path.exists를 호출하여 전달된 경로에 파일이 실제로 존재하는지 확인한다. 파일이 없으면 에러 메시지를 출력하고 실행을 중단한다.

  • os.path.getsize로 파일 용량을 바이트 단위로 측정하여 MB 단위로 변환한다. Rekognition API에 바이트 배열(Bytes) 형태로 직접 이미지를 전달할 때 적용되는 제한 규격인 5MB 이하인지 사전에 점검한다.

3. 파일 로드 및 텍스트 감지 API 호출

  • 이미지를 바이너리 읽기 모드(rb)로 열어 메모리에 바이트 데이터(image_bytes)로 적재한다.

  • client.detect_text 메서드를 호출하며 파라미터로 해당 이미지 바이트를 전송한다.

  • 반환된 응답 딕셔너리에서 TextDetections 키를 추출하여 감지된 텍스트 목록을 확보한다. 결과가 비어 있을 경우 처리할 텍스트가 없음을 알리고 종료한다.


4. 텍스트 필터링 및 출력

  • TextDetections 결과는 LINE(줄 단위)과 WORD(단어 단위)로 세분화되어 반환된다.

  • 코드에서는 item.get('Type') == 'LINE' 조건을 적용하여 단어 단위의 중복 출력을 방지하고 문장/줄 단위 텍스트만 선별하여 화면에 출력한다.


5. 예외 처리

  • botocore.exceptions.ClientError를 통해 자격 증명 오류, 리전 오류, 권한 부족 등 AWS 측에서 발생한 오류 코드(Code)와 메시지(Message)를 포착하여 출력한다.

  • 그 외에 발생 가능한 입출력 오류나 일반 파이썬 런타임 예외는 범용 Exception 블록으로 처리한다.

6. 진입점 실행

스크립트가 직접 실행될 때 현재 작업 디렉터리의 001.PNG 파일을 대상으로 analyze_image 함수를 호출한다.






* 이 게시물은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.