Invoice OCR
우리 조의 주제는 ERPNext와 OCR을 이용하여 실물 송장에서 정보를 추출해 저장하는 프로그램을 만드는 것이었다.
프로젝트에서 제시하는 문제 상황은 송장을 수동으로 관리하는 것은 시간과 정확도 측면에서 효율이 좋지 않다는 것이었다. 그래서 송장에서 중요한 정보를 추출하는 과정을 자동화시켜 이 문제를 해결하고자 했다.
본격적인 개발에 앞서 프로젝트의 전체적인 Design Docs를 작성하였다.
우리의 문제와 목표는 무엇인지, 시스템은 어떻게 구성되는지, 데이터는 어떻게 구성되는지, 테스트는 어떻게 진행할 것인지 등에 대해 세부적으로 작성하여 프로젝트 진행을 도울 수 있도록 하였다.
프로그램 개발을 위해 해야할 작업은 크게 4가지로 나뉘었다.
- OCR 기술을 이용한 글자 인식
- NLP 기술을 활용한 정보 추출
- 사용자가 사용할 웹 사이트 개발 (Frontend)
- 웹과 ERPNext를 연결하여 정보 저장 (Backend)
OCR
OCR 기술을 적용하기 전에 이미지 전처리 과정을 거쳤다.
이미지를 흑백으로 만들고 픽셀을 밝기값을 threshold를 기준으로 나눠 0과 255로 설정해주었다.
이미지에서 불필요한 부분은 죽이고 필요한 부분은 뚜렷하게 만들기 위함이었다,.
OCR 기술로 Pytesseract와 Google Cloud Vision API를 사용했다.
Pytesseract는 파이썬에서 제공하는 라이브러리이다. 쉽게 사용할 수 있지만 정확도가 떨어졌다.
Google Cloud Vision API는 Google에서 제공하는 API로 Pytesseract에 비해 정확도가 높아 최종적으로 이것을 사용했다.
NLP
OCR 결과로 인식된 글자에서 정보를 추출하기 위해 OpenAI API를 사용했다.
OpenAI API를 사용하여 Google Cloud Vision API가 인식한 결과에서 필요한 정보만을 추출하여 Dictionary 형태로 저장한다.
Frontend
프론트엔드에서는 로그인 기능과 파일 업로드 기능, 인식 결과 수정 기능, 인식 재시도 기능이 있다.
로그인에는 ERPNext의 계정을 사용하며 계정의 이메일과 비밀번호를 입력하면 로그인할 수 있다.
정보를 추출할 송장 파일은 이미지 파일이나 pdf 파일이 가능하며 한 번에 하나의 파일만 업로드할 수 있다.
파일이 업로드 되면 정보 추출이 시작되고 정보 추출이 완료되면 바로 다음 화면으로 넘어간다.
인식된 송장 정보를 확인하고 맞지 않는 부분이 있다면 사용자가 직접 수정하거나 정보 추출을 재시도하여 수정할 수 있다.
저장 버튼을 누르면 수정된 최종 정보가 ERPNext의 database에 저장된다.
Backend
백엔드에서는 로그인 기능을 제공하고 OCR Module을 사용한다.
ERPNext의 API를 이용하여 로그인 기능을 제공한다.
사용자가 ID/PW를 입력하면 해당 사용자가 존재하는지 확인하고 access를 부여한다.
프론트엔드에서 보낸 송장 이미지를 받고 OCR Module을 로드하여 인자로 보내 추출된 송장 정보를 받는다. 이때 송장 정보는 JSON 형식으로 이루어져 있다.
받은 송장 정보를 프론트엔드로 다시 전달한다.
Overview
- Photo Capture : 사용자가 송장을 사진으로 촬영
- OCR Text Extraction : Google Cloud Vision API가 이미지에서 텍스트 추출
- OpenAI API Query : 특정 정보를 추출하라는 메시지와 함께 OpenAI API 호출
- Data Extraction : API 응답에서 필요한 정보 검색
- JSON Mapping : 추출된 데이터를 사전 정의된 JSON 구조에 매핑
- User Verification : 사용자가 매핑된 데이터를 검토
- Data Save : 사용자가 'Save'를 클릭하면 정보가 ERPNext 시스템에 저장
- Feedback : Github를 통한 지속적인 피드백 및 업데이트
Github Link : https://github.com/PeopleSpace-Invoice-OCR
'8기 글로벌 SW*AI 인재 프로그램' 카테고리의 다른 글
Business Project 기록 (0) | 2024.03.04 |
---|---|
7주차 기록 (24.02.07 ~ 24.02.15) (0) | 2024.02.22 |
6주차 기록 (24.01.31 ~ 24.02.06) (0) | 2024.02.22 |
5주차 기록 (24.01.24 ~ 24.01.30) (0) | 2024.02.22 |
4주차 기록 (24.01.17 ~ 24.01.23) (0) | 2024.01.19 |