문제점 인식

최근 잘못된 번역의 외국어 메뉴판 제공으로 음식 이해도가 낮아지고 있다. 현재 식당마다 일관되지 않은 방법으로 한식 메뉴를 표기하고 있다. 곰탕을 "Bear Soup", 육회를 "Six times"으로 표기한 잘못된 한식 메뉴의 영문 표기 사례도 최근 논란이 되고 있다. 이렇게 잘못된 번역의 한식 메뉴판 때문에 외국인들은 부정확한 정보를 얻게 된다. 외국인들은 한국 음식을 기억하지 못할 뿐더러 음식의 재료와 맛을 파악하지 못한다는 문제점을 야기한다. 따라서 이러한 문제점에서 착안하여 우리는 캡스톤 디자인 프로젝트 주제로, AI 기반 메뉴판/간판 텍스트 검출 기술을 이용한 음식 검색 어플리케이션 개발을 진행하기로 했다.

Paper Review

- What Is Wrong With Scene Text Recognition Model Comparisons? Dataset and Model Analysis [paper link]

텍스트 인식 모델 (Scene Text Recognition)에 대해서 평가 데이터셋이 일관되지 않아, 해당 모델들의 정확한 성능 비교가 어렵다는 점을 문제로 삼아 나온 논문이다. 해당 논문은 아래의 세 가지 내용들을 통해 모델의 성능 비교 어려움을 해소하는 점에 기여했다.

<aside> 💡 1) 일관성 없는 학습과 평가 데이터셋을 검사한다. 모델 성능 차이는 학습과 평가 데이터셋의 모순에서 비롯된다.

  1. 기존에 있는 STR 모델과 적합한 통일된 4단계 모듈(Trans, Feat, Seq, Pred)의 STR Framework를 소개한다.

3) 일관성 있는 학습 및 평가 데이터셋을 통해 정확도, 속도 및 메모리 소비량 측면에서 성능에 대한 모듈의 기여도를 분석한다.

</aside>

즉, 논문에서는 최종적으로 일관적인 데이터셋, 즉 7개의 벤치마크 평가 데이터셋과 2개의 교육 데이터셋(MJ와 ST)이라는 일관된 데이터셋뿐만 아니라 주요 STR 방법들 간의 공통 프레임워크(변환(Trans.), 형상 추출(Feat.), Sequence 모델링(Seq.) 및 예측(Pred.))를 도입했다. 비교한 주요 STR 방법들 중에서 공정한 비교를 제공했고, 어떤 모듈이 가장 정확하고, 속도, 그리고 크기 향상을 가져오는지 분석하였다.


Experiments

1. Tesseract-OCR

OCR 기능을 가진 tesseract-ocr 라이브러리를 사용하기 위해서 우선 설치가 필요하다. 아래의 명령어를 이용해서 colab 환경에서 tesseract-ocr 라이브러리를 설치한다.

!sudo apt install tesseract-ocr
!pip install pytesseract

설치가 완료되었다!

pytesseract를 사용하기 위해 작성해준 코드는 아래와 같다. os로 이미지를 불러와 gray 스케일로 변환해 준다. (참고로, pytesseract에서는 numpy array를 읽지 못하고 file을 읽기 때문에 os로 파일을 불러들여야 한다. )그리고 image to string 기능을 사용하여 텍스트 검출을 진행한다.

import pytesseract
import cv2
import os
from PIL import Image
from google.colab.patches import cv2_imshow

image = cv2.imread('/content/drive/MyDrive/OCRtest/sign.PNG')
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

filename = "{}.png".format(os.getpid())
cv2.imwrite(filename, gray)
 
#숫자일 때는 lang = 'None'으로, 한국어일 때는 lang = 'kor'으로 설정해준다.

text = pytesseract.image_to_string(Image.open(filename), lang = "kor")
os.remove(filename)

#결과를 보면,
print(text)
cv2_imshow(image)