💡 팁: 감열지 영수증(카드전표, 주유소 영수증 등)은 시간이 지나면 열로 인쇄된 글자가 점점 사라집니다. 중요한 영수증은 되도록 빨리 찍어 두세요.
핵심은 세 가지입니다. 이 셋이 나오면 인식에 성공한 것으로 봅니다.
거래가 이루어진 날짜. YYYY-MM-DD 형식입니다.
상호(가맹점명). 카페, 음식점, 편의점 등 가게 이름입니다.
총 결제액. 원화 정수로 표기됩니다.
영수증에 찍혀 있으면 아래 항목도 함께 뽑습니다. 찾은 것만 표시하고, 없거나 확실하지 않으면 그 줄을 아예 만들지 않습니다.
일부러 읽지 않는 것도 있습니다. 대표자 이름, 전화번호, 주소는 뽑지 않습니다. 특히 전화번호는, 소득공제용 현금영수증에 구매자 본인의 휴대폰번호가 찍히기 때문입니다. 전표를 만드는 데 필요하지도 않은 값을 읽으려다 그것까지 집게 됩니다.
카드번호도 뒤 4자리만 표시합니다. 영수증에 전체 번호가 찍혀 있더라도 그 값은 아예 만들지 않고 버립니다.
사진을 올리면 인식과 함께 스캔본이 만들어집니다. 종이 테두리를 찾아 원근과 휨을 펴고, 배경을 잘라내고, 필요하면 흑백으로 정리한 이미지입니다. 결과 화면에서 원본 / 스캔본을 오갈 수 있고 저장할 수 있습니다.
스캔본은 결과물이면서 동시에 인식의 재료이기도 합니다. 여백이 잘리고 글줄이 펴지면 같은 해상도에서 글자에 배정되는 화소가 늘어납니다. 다만 스캔본이 원본보다 얼마나 더 잘 읽히는지는 아직 측정하지 않았습니다. 그래서 원본으로도 한 번 더 읽어 보고 더 많이 채운 쪽을 씁니다.
테두리를 못 찾으면 자르지 않습니다. 잘못 찾은 사각형으로 잘라 영수증 일부를 날리는 것보다 낫기 때문입니다. 이때는 색만 보정하고 화면에도 그렇게 적습니다.
스캔본은 서버 메모리에서 만들어 바로 내려보냅니다. 저장하지 않습니다. 창을 닫으면 사라지므로, 필요하면 그 자리에서 저장하세요.
스캔본만 필요하고 글자는 읽을 필요가 없다면 스캔 변환 페이지를 쓰세요. 여러 장을 한꺼번에 올려 한 장씩 펴고, 낱장으로 저장하거나 전체를 ZIP 파일 하나로 받을 수 있습니다. 인식을 하지 않으므로 인식 서버를 거치지 않고, 변환만 수행합니다.
이 도구의 가장 중요한 원칙은 확신이 없으면 추측해서 채우지 않는 것입니다.
잘못 채워진 값은 아무도 눈치채지 못하고 조용히 남습니다. 특히 회계 증빙용으로는 틀린 데이터가 훨씬 위험합니다. 한 번 손으로 입력하는 것이 훨씬 싸다는 뜻입니다.
특히 상호(가맹점명)는 형식 검증 방법이 없어서 신뢰도 기준을 매우 높게(0.85 이상) 잡습니다. 정확도가 떨어질 것 같으면 차라리 빈칸으로 두고, 사용자가 손으로 입력하도록 하는 편입니다.
한국 영수증은 국제적 표준과 달리 여러 특수성이 있어서 인식이 까다롭습니다.
한국 영수증에는 보통 두 개 이상의 큰 금액이 인쇄됩니다. "총액" 다음에 "받은금액"(손님이 건넨 현금)이 있고, 현금영수증의 경우 "공급가액"도 있습니다. 가장 큰 숫자를 선택하면 틀릴 가능성이 높습니다.
주유소나 대형마트, 카드사 직영점 같은 곳에서는 선승인 후 취소·재승인하는 과정이 있습니다. 그러면 영수증에"취소금액"이 실제 결제액보다 크게 찍히고, 이것이 정답인지 아닌지 판단하기 어렵습니다.
영수증에는 사업자등록번호, 카드번호 뒷자리, 매장 전화번호, 승인번호 등이 있고 이것들이 모두 길이 8~13자리의 연속된 숫자입니다. 컴퓨터는 어느 것이 금액이고 어느 것이 전화번호인지 구분하기 위해 주변 문맥과 배치를 봐야 합니다.
한국 영수증은 한 글자씩 띄어쓰기를 하는 것이 기본입니다. "합 계", "부 가 세", "받 은 금 액" 같은 식입니다. OCR이 띄어쓰기를 제대로 인식하지 못하면 단어 경계를 찾기 어렵습니다.
부가세가 10%이므로 "공급가액"은 "합계 ÷ 1.1"입니다. 패턴 인식으로 금액을 판단하는 모델은 이것도 정답으로 착각하기 쉽습니다.
카드전표 하단에는 보통 "가맹점주소가 실제와 다른 경우 신고안내…" 같은 한 줄짜리 공지가 있습니다. 이 줄에"가맹점명" 레이블과 실제 상호가 작은 글씨로 함께 들어 있어서, 일부 파서는 여기서 상호를 뽑곤 합니다.
아니오. 업로드한 사진은 서버 디스크나 데이터베이스에 저장하지 않습니다. 메모리에서 처리하고 응답을 보낸 후 즉시 폐기됩니다. 개인정보처리방침을 참조해 주세요.
하루 장수 제한은 없습니다. 인식도 스캔 변환도 원하는 만큼 쓰실 수 있습니다.
다만 인식 서버가 한 번에 한 장씩만 처리합니다. 그래서 동시에 몰리면 "지금 처리 중인 요청이 많습니다"가 나올 수 있습니다. 잠시 후 다시 시도하면 됩니다.
업무용으로 쓰고 싶으시면 소스 라이선스를 문의해 주세요.
네. 파일을 고를 때 여러 장을 한꺼번에 선택하거나, 여러 장을 한 번에 끌어다 놓으면 됩니다. 두 장 이상이면 진행 표가 나오고, 고른 순서대로 한 장씩 차례로 인식합니다.
한꺼번에 보내지 않는 이유는 서버가 한 번에 한 장만 처리하기 때문입니다. 동시에 밀어 넣으면 뒤엣것들이 자리를 못 잡고 실패로 돌아옵니다.
한 장이 실패해도 나머지는 계속 진행합니다.
네. 결과 화면의 엑셀 저장 버튼을 누르면 receipts.xlsx 파일을 받습니다. 한 장만 올렸을 때는 한 줄짜리, 여러 장을 올렸을 때는 성공한 줄만 모은 표입니다. 날짜·사용처·금액에 사업자등록번호·공급가액·부가세·승인번호 같은 확장 필드가 함께 들어갑니다.
이 엑셀 파일은 여러분의 브라우저 안에서 만듭니다. 인식 결과를 서버로 다시 보내지 않고, 서버에도 남기지 않습니다. 파일 이름은 언제나 receipts.xlsx 입니다 — 상호나 금액을 파일 이름에 넣으면 인식 결과가 여러분 디스크에 그대로 남기 때문입니다.
인식은 CPU 기반이고 서버가 요청을 하나씩 직렬로 처리합니다. 보통 10~20초가 걸리고, 첫 번째 시도로 세 값이 다 나오지 않으면 더 큰 배율로 한 번 더 읽기 때문에 1분 가까이걸릴 수 있습니다. 스캔본을 만드는 데 1~2초가 더 붙습니다. 다른 분이 먼저 올렸다면 그 뒤에서 기다립니다.
아이폰이 HEIC 형식으로만 저장하도록 설정되어 있으면 웹에서 인식 안 할 수 있습니다. 두 가지 방법이 있습니다:
빈칸은 의도된 것입니다. 값이 틀렸다면:
세무·기장·지출관리 소프트웨어를 만드는 개발사를 위해 이 도구의 소스 코드 라이선스를 제공합니다.
관심 있으시면 haseungchoi19@gmail.com으로 문의해 주세요.