건설현장 영수증 인식, OCR로 어떻게 해결했을까?
다양한 형태의 꼬깃꼬깃한 영수증들. 윈비바 개발팀이 Tesseract와 머신러닝으로 인식률을 98%까지 끌어올린 과정을 소개합니다.
현장의 고질적인 문제: 종이 영수증 지옥
건설 현장에서는 매일같이 수십 장의 영수증이 발생합니다. 철물점 식대, 자재비, 유류비 등 영수증의 양식도, 크기도 제각각입니다. 현장 관리자가 이를 일일이 엑셀에 타이핑하여 본사에 보고하는 과정은 잦은 휴먼 에러를 유발하고 불필요한 야근을 만들어냈습니다. 우리는 이 문제를 해결하기 위해 스마트폰 카메라로 영수증을 찍기만 하면 자동으로 금액과 품목, 날짜를 추출하는 AI 모듈 개발에 착수했습니다.
Tesseract OCR의 한계와 전처리(Pre-processing)의 중요성
처음에는 오픈소스인 Tesseract OCR 엔진을 그대로 도입해 보았습니다. 하지만 결과는 실망스러웠습니다. 건설 현장 특성상 영수증이 구겨져 있거나 흙먼지가 묻어있는 경우가 많았고, 야외에서 촬영하여 그림자가 짙게 드리워진 사진이 대다수였습니다.
💡 핵심 전처리 파이프라인 도입
- 그레이스케일 및 이진화 (Binarization): OpenCV를 활용하여 그림자와 배경 노이즈를 제거했습니다.
- Perspective Transform (투시 변환): 비스듬하게 찍힌 각도를 반듯한 평면으로 펴주었습니다.
- 샤프닝 (Sharpening): 흐릿한 잉크 자국을 선명하게 보정했습니다.
규칙 기반 파싱에서 LLM 활용으로의 진화
이미지에서 텍스트를 추출하는 데는 성공했지만, "어떤 텍스트가 총 청구 금액인지", "어떤 텍스트가 식당 이름인지" 분류하는 것은 또 다른 문제였습니다. 초기에는 정규표현식(Regex)을 이용한 규칙 기반 파싱을 시도했으나, 전국 수만 개의 영수증 양식을 전부 대응하기란 불가능에 가까웠습니다.
결과적으로 우리는 경량화된 언어 모델(LLM) 프롬프트 엔지니어링을 결합하여, 추출된 raw text 던져주면 일정한 JSON 형식(상호명, 사업자번호, 결제일자, 총액)으로 포맷팅하여 반환하도록 아키텍처를 수정했습니다. 그 결과, 양식이 처음 보는 영수증이더라도 98% 이상의 정확도로 데이터를 파싱해낼 수 있었습니다.
결론 및 향후 과제
현재 이 영수증 인식 모듈은 윈비바의 건설 ERP 시스템에 성공적으로 탑재되어, 수많은 현장 소장님들의 퇴근 시간을 앞당기고 있습니다. 앞으로는 글씨가 심하게 지워진 영수증의 맥락을 추론하여 복원하는 기술을 추가적으로 연구할 계획입니다.