Nengcipe는 2030 자취를 하는 사용자들이 냉장고를 효율적으로 관리할 수 있게 OCR기능을 도입했습니다. 먼저, OCR이란 Optical Character Recoginition, 광학 문자 인식으로 수동으로 텍스트를 입력할 필요없이 컴퓨터가 읽을 수 있는 타이핑으로 만드는 AI 기술입니다. 사용자가 영수증을 찍으면, 영수증에 있는 식료품 이름과 수량이 자동적으로 인식되어 저장됩니다. 이를 통해 사용자는 이후 냉장고 페이지에서 재료가 저장되어 있는 모습을 확인할 수 있으며 유통기한도 같이 저장하여 냉장고 내부의 음식들을 효율적으로 관리할 수 있습니다.
AI 개발 초기에는 시중에 공개된 여러 OCR 모델들 중 Tesseract OCR을 선택했습니다. 하지만, 테스트를 진행하며 영어와 한국어 두가지 언어를 같이 학습시키고 인식하는 것에 한계가 있다고 판단하여 EasyOCR을 이용하기로 결정했습니다.
EasyOCR은 영어와 한국어를 동시에 인식할 수 있는 무료 OCR 개발 서비스로 GPU 사용이 필수적인 모델입니다. OpenCV와 OCR을 통해 영수증의 식료품 이름과 수량을 읽어오는 과정의 정확도를 높이기 위해 Fine-tuning을 진행해야합니다. 이를 위해 CLOVA AI에서 제공하는 오픈소스 프로젝트 deep-text-recognition-benchmark를 신경망 모델 학습단계에서 사용했습니다.
하지만, 모델을 학습시키는 과정에서 이미지 하나하나 labeling해야했습니다. 이를 학습데이터로 변환하는 과정에서 거듭된 오류와 deep-text-recognition-benchmark 프로젝트에는 pre-trained 모델이 제공되지 않았기 때문에 AI Hub에서 korean_g2를 모델로 또 학습을 시켜야한다는 점에서 시간적으로 정확도가 높은 OCR 구현이 어려울 것 같다는 판단하에 2개의 모델 학습이 아닌, AI Hub의 ‘한국어 글자체 이미지’ 1개의 모델만 학습시키로 결정했습니다. 이는 이미지와 라벨링이 같이되어있다는 점에서 시간적으로 효율적이라 판단했기 때문입니다.
‘한국어 글자체 이미지’ 중 TEXT IN THE WILD를 선택하여 분석한 뒤, 데이터 가공을 진행했다. 데이터 가공은 데이터를 annotation 단위로 분할하고 bbox 위치 정보로 단어 영역을 자르는 2번으로 진행됐습니다. 다만, 2차 가공 중 train dataset에서 지속적인 인식 에러가 나왔고, 결국 이를 해결하기 위해 총 3번의 오류 재가공을 진행하여 총 5번의 데이터셋 가공을 진행했습니다. AI Hub에서 제공하는 데이터셋이지만, 이미지와 labeling에 깨진 데이터값이 존재했고, 랜덤으로 학습을 하다보니 해당 문제를 발견하는데 시간이 걸렸지만 결과적으로 데이터를 끊어가며 문제가 되는 이미지를 삭제한 완전한 데이터셋을 구축할 수 있었습니다.
이와 같이 모델의 전처리 과정까지 마무리했지만, 결과적으로 한국어 정확도는 아직까지 영어 정확도보다 매우 낮고 시간적 제약으로 인해 멘토님의 조언을 따라 타 OCR API에 비해 한국어 정확도가 높은Naver CLOVA API로 진행하기로 결정했습니다.
Naver OCR API 중 영수증 특화모델을 선택하여 도메인을 설정했습니다. 이후, 사용자의 애플리케이션에서 CLOVA OCR을 호출하여 사용할 수 있도록 외부 연동을 위한 invokeURL 을 연결하여 API Gateway연동을 마무리했습니다. 이후, API 명세서를 참고하여 Nengcipe에 맞추어 OCR POST API를 마무리했습니다.
결과적으로, Naver OCR 영수증 특화 모델을 사용하면서 이전 모델 구축에서 겪었던 결과 정확도 문제를 프로젝트 기간 내에 해결할 수 있었고 사용자는 이제 직접 텍스트로 작성하지 않고 영수증만으로도 냉장고를 쉽게 관리할 수 있게 됐습니다.