다음으로, AI파트 설명드리겠습니다 . 저희 AI 파트는 영수증의 재료와 수량을 인식하여 사용자가 재료를 관리할 수 있도록 OCR을 맡아 진행했습니다. 먼저, 한국어 영수증 데이터셋의 부재로 AI HUB에서 한국어 글자체를 주요 데이터셋으로 채택했습니다.

그 중, 간판, 책 등 일상 생활에서 확인할 수 있는 물체에 적힌 한국어들이 모인 TEXT IN THE WILD를 데이터셋으로 측정했습니다. 가공 전, 제가 다운 받은 Goods 데이터셋의 개수는 28000개였으나, 실제 확인시, 26340개였음을 확인했습니다. 이는 확인해보니 태깅이 잘못되어 있거나, 누락된 부분이 있었어서 이를 해결하기 위해 수차례의 데이터 가공을 진행했습니다.

먼저, 태깅 데이터의 용량이 너무 크기 때문에, 파일이름을 기준으로 상품 요소들을 list화 시켰습니다. 데이터셋을 train, validation, test 7:2:1의 비율로 순서대로 나눈 후, 이미지에 해당하는 annotation 정보를 함께 저장했습니다. 결과적으로, 이 세가지의 annotation이 담긴 json 파일이 새롭게 가공됐습니다.

이후, 각 이미지 파일이름에 해당하는 annotation 값을 이용해 bbox 위치 정보로 단어 영역을 잘라 train, validation, test 셋의 데이터를 deep-text-recognition모델의 데이터셋과 같은형태로 가공하고자 2차 가공을 진행했습니다. bbox의 값은 좌상단 좌표 x, y, 와 너비와 높이 w, h로 구성되어 있기에 이를 이용하여 이미지를 조금씩 이동하며 단어 영역을 자르고 text값을 저장했습니다. 글자와 단어로 구성되어있으나, 단어를 기준으로 잘라 datagt_train,test,validation 파일로 가공했습니다. 데이터 2차 가공을 할때 opencv를 활용하여 진행했으나, 기존 데이터셋의 경로 문제가 발생하여 지속적으로 2차 가공에 문제가 발생했습니다. 약 18000개정도의 데이터셋 중 이를 확인하기 위해, 데이터셋을 끊어가며 문제가 되는 데이터를 확인하고자 진행했고 결과적으로 추가 가공을 3차례 더 진행하여 총 5번의 데이터셋을 가공했습니다.

이제 이를 학습하기 위해 EasyOCR을 선택했습니다. EasyOCR을 적용시킨 결과,

이미지의 좌표값을 함께 읽고 있어서 이미지 박스를 그려 결과를 쉽게 대조할 수 있었고 기존에 비교했던 tesseract OCR(테사렉트)에 비해 한국어 정확도가 높음을 확인했습니다.

OCR인식의 정확도를 높이기 위해 gray,blurred, edged, outline 4가지로 contour인식을 진행했습니다. 결과적으로, 사진(데이터)마다 정확도가 너무 다름을 확인했습니다. 즉, 색상 대비가 명확하다고 판단 될 때만 정확도가 올라가고, transform 자체에 이상이 생길 수도 있다고 판단했습니다.

장승우

정확도를 높이기 위한 학삽을 지속하면서 OCR 기술 적용을 위한 모델의 요구사항을 고려해봤습니다. 이미지에서 텍스트를 추출하고 난뒤 상품명과 수량을 구분해내는 처리과정이 필요했습니다.

영수증은 길이가 변하고 회사마다 정형화되지 않은 템플릿이기 때문에 정해진 사이즈의 bbox 영역을 지정할 수 없고, 텍스트를 기점으로 추출하게 될 경우 다른 텍스트에 의한 노이즈가 빈번하게 발생했습니다.