
AI Vision을 활용한 브라질 은행 영수증 추출
요약
브라질 은행 영수증의 다양한 레이아웃 문제를 해결하기 위해 전통적인 OCR 대신 LLM 기반의 컴퓨터 비전 기술을 활용한 데이터 추출 솔루션을 소개합니다. Agno, Groq, Pydantic 등을 사용하여 가볍고 보안이 강화된 모듈형 파이프라인을 구축하는 방법을 다룹니다.
핵심 포인트
- 전통적 OCR의 레이아웃 한계를 LLM 기반 컴퓨터 비전으로 극복
- Agno와 Groq를 활용한 가볍고 빠른 추론 환경 구축
- 매직 바이트 검증을 통한 파일 보안 및 스푸핑 공격 방지
- Pydantic v2를 이용한 견고한 데이터 검증 프로세스 구현
Python을 이용한 AI Vision 기반 PIX/TED/DOC 추출기
최근 저는 결제 인터페이스에서 고객이 은행 영수증에서 추출한 데이터로 여러 필드를 직접 채워야 하는 애플리케이션의 문제에 직면했습니다. 이로 인해 결제 포기, 불만 사항, 잘못된 정보 입력이 발생하고 있었습니다. 주요 원인은 은행마다 은행 영수증의 레이아웃이 매우 다양하여 필드를 정확하게 식별하기 어렵기 때문입니다. 또한, 기술 사용에 어려움을 겪는 사람들도 있기 때문에, 이러한 상호작용을 용이하게 하기 위해 할 수 있는 모든 노력은 환영받을 일이며, 우리는 이를 간과해서는 안 됩니다. 따라서 프로세스를 자동화하는 것이 필수가 되었습니다. 과제는 명확했습니다. 시스템이 브라질 은행의 레이아웃을 해석하는 데 자주 실패하는 전통적인 OCR 도구에 의존하지 않고, 영수증에서 데이터를 자동으로 식별하고 추출해야 한다는 것이었습니다.
템플릿과 전통적 OCR이 없는 컴퓨터 비전 (Computer Vision)
우리는 전통적인 OCR 방식 대신 LLM (Large Language Models) 기반의 컴퓨터 비전 (Computer Vision)을 사용하기로 결정했습니다. 이러한 모델은 각 은행의 특정 레이아웃에 따른 미세한 차이를 더 잘 이해하며, 구성 가능한 템플릿의 필요성을 제거합니다.
우리는 무거운 프레임워크를 사용하지 않는 스택을 유지하면서, 몇 줄의 코드만으로 견고한 솔루션을 개발했습니다. 모든 선택은 의도적이었습니다:
- Agno: Groq에 대한 네이티브 지원 덕분에 LangChain에 비해 더 가볍다는 점을 고려하여 선택했습니다.
- Groq (Qwen 3.6-27B): 빠르고 저렴한 추론 (Inference)을 제공하기 때문에 Groq를 선호했습니다.
- pdf2image: 더 제한적인 라이선스를 가진 라이브러리와 관련된 법적 리스크를 피할 수 있는 MIT 라이선스가 결정적인 요인이었습니다.
- Pillow: 가벼운 의존성 (Dependency)이라는 점 때문에 선택되었습니다.
- Pydantic v2 및 Hatchling: 전자는 견고한 데이터 검증 (Validation)을 보장하며, 후자는 패키징 (Packaging)과 배포를 담당합니다. 이 모든 과정은 불필요한 의존성을 추가하지 않고 이루어졌습니다.
모듈형 파이프라인 (Modular Pipeline) 및 보안 우선
모든 프로세싱에 앞서, 파일은 매직 바이트 (magic bytes) 검증을 포함한 엄격한 검증 과정을 거칩니다. 이는 스푸핑 (Spoofing) 공격을 방지하기 위한 필수적인 기술입니다. 사용자가 파일을 전송하면, 서버는 파일의 서명이 예상된 유형과 일치하는지 확인하기 위해 처음 몇 바이트만을 읽습니다. 예를 들어, 사용자가 .pdf 파일을 전송하면 시스템은 처음 몇 바이트를 확인하여 실제로 PDF가 맞는지 확인하며, 그렇지 않을 경우 파일은 거부됩니다.
또한, 메모리에서 데이터를 삭제하기 위한 del의 명시적 사용 및 세심한 예외 처리 (Exception handling)와 같은 관행은 보안에 대한 우리의 의지를 강화합니다.
완전한 테스트 커버리지 및 오프라인 환경
아무리 작은 애플리케이션이라도 견고한 애플리케이션이 되려면 좋은 테스트 커버리지 (Test coverage)가 필요합니다. 모든 테스트는 Groq 에이전트의 모킹 (Mocking) 덕분에 오프라인에서 실행되도록 개발되었으며, 이를 통해 브라질 은행들의 다양한 서식 패턴부터 손상된 PDF 및 복잡한 이미지 처리까지 다양한 조건 하에서 시스템이 작동함을 보장합니다.
포르투갈어 프롬프트 엔지니어링 (Prompt Engineering)
프롬프트 엔지니어링 (Prompt Engineering)은 포르투갈어와 브라질 은행 영수증 도메인에 맞게 조정되었으며, 이를 통해 모델이 해당 문서의 구조와 의미론 (Semantics)을 더욱 정확하게 이해할 수 있도록 했습니다. 금융 문맥의 특정 용어를 통합함으로써 해석의 모호성을 줄였고, 모델의 환각 (Hallucinations) 위험을 크게 낮추었습니다.
완성된 제품을 만들기 위한 3일
이 프로젝트는 여유 시간을 활용하여 차근차근 진행되었습니다. 컨셉 단계부터 PyPI 게시까지 총 3일이 소요되었습니다. SDD (Spec Driven Development, 명세 주도 개발)와의 정렬을 통해 재작업을 제거하였고, Hatchling을 통한 게시로 효율적이고 복잡하지 않은 배포를 보장했습니다.
이번 구현을 통한 몇 가지 학습 내용은 향후 프로젝트의 가이드가 될 수 있습니다:
- SDD는 효과적이다: 재작업을 최소화하고 핵심 요소에 집중할 수 있게 합니다.
- Mock을 활용한 테스트는 필수적이다: 추가적인 API 비용 없이 LLM의 동작을 검증할 수 있게 해줍니다.
- 보안은 모두를 위한 것이다: 간단한 보안 구현만으로도 이미 견고한 기반을 제공할 수 있습니다.
- 언어를 도메인에 맞게 조정하라: 분석 대상 문서와 동일한 언어로 프롬프트를 작성하면 LLM의 정확도가 크게 향상됩니다.
제안된 솔루션은 양식 작성 시 발생하는 마찰 문제를 해결할 뿐만 아니라, 잘 계획되고 실행된 접근 방식이 어떻게 유의미한 결과로 이어질 수 있는지를 보여줍니다. 양식 자동화는 효율적이고 안전하면서도 사용자 경험을 개선할 수 있는 방법이 될 수 있습니다.
이 프로젝트를 확인해보고 싶으신가요?
git clone https://github.com/anomalyco/receipt-extractor
cd receipt-extractor
pip install -e .
또는 PyPI에서 직접 설치하세요:
pip install bank-receipt-extractor
from bank_receipt_extractor import extract_receipt
resultado = extract_receipt("meu_comprovante.pdf")
...
저장소(Repository): https://github.com/jady-sm-godoi/Agente_extrator_dados_comprovantes_bancarios
PyPI: pypi.org/project/bank-receipt-extractor
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기