◼️ 코드
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_id와aws_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 함수를 호출한다.
* 이 게시물은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.