안녕하세요. 오토소장입니다.

오늘은 게임 화면에서 흰색 문장을 전통적인 방법으로 탐색하는 부분을 한번 진행해 보았습니다. AI 모델 없이 탐색하려니 정말 힘드네요.
장면마다 잘 동작할 때가 있고 동작하지 않을 때가 있는데요. 잘 동작하는 장면을 위주로 정리해 보겠습니다.

HSV로 흰색 글자만 추출

세가 새턴 랑그릿사 2의 시나리오 설명 장면에서 HSV 색 공간을 이용하여 흰색만 추출해 보았습니다. HSV는 RGB와는 조금 다른 색 공간을 말합니다. RGB는 빨강, 초록, 파란색으로 구성된 색 공간이라면 HSV는 색상, 채도, 명도로 구성된 색 공간이라고 생각하면 됩니다. RGB보다는 HSV가 사람이 인식하는 색이랑 비슷하다는 말이 있습니다. 다행히 노이즈 없이 글자 부분만 잘 추출이 되었네요.

HSV로 흰색 글자만 추출
HSV로 흰색 글자만 추출

모폴로지(Morphology) 팽창(Dilation) 연산

문장은 글자들의 집합이라고 할 수 있죠. 하나의 글자에 인접한 글자들을 그룹화해서 하나의 문장이라는 것을 알기 위해 모폴로지 팽창 연산을 해줍니다. 아래 그림처럼 인접하게 이어져 있는 글자들을 모아서 한 문장이라는 것을 알 수 있게 처리해 주었습니다.

모폴로지(Morphology) 팽창(Dilation) 연산
모폴로지(Morphology) 팽창(Dilation) 연산

컨투어(contour) 연산

이제 컨투어 연산을 통해 문장의 외곽 경계선 좌표들을 생성합니다. 이렇게 해야 한 문장의 경계 박스를 계산할 수 있기 때문입니다.

컨투어(contour) 생성
컨투어(contour) 생성

컨투어(contour)와 경계 박스

아래 그림은 문장의 컨투어 외곽 경계선을 이용해 경계 박스를 생성한 결과입니다. 아름답게 한 문장을 잘 인식해 줬네요.

컨투어(contour)와 경계 박스
컨투어(contour)와 경계 박스

경계 박스

이제 컨투어 정보는 필요 없으니 초록색인 경계 박스만 남겨두고 문장의 붉은색 외곽선은 깔끔하게 삭제합니다.

경계 박스
경계 박스

OCR(Optical Character Recognition)

위에서 추출한 문장들을 하나씩 OCR 엔진으로 보내주고 결과 데이터를 받습니다. 즉, 이미지를 보내주면 아래 그림처럼 텍스트를 얻을 수 있습니다. 완벽하진 않지만 90% 이상은 정확하게 나온 것 같습니다.

OCR
OCR

적용 결과

마지막으로 OCR로 인식한 일본어 문장과 번역한 한글 문장을 같이 표시해 주었습니다. 게임을 진행하는 데에 이 정도만 인식 및 번역이 되어도 스토리를 이해하는데 매우 수월할 것 같습니다.

OCR(Optical Character Recognition)과 번역 1
OCR(Optical Character Recognition)과 번역
OCR(Optical Character Recognition)과 번역 2
OCR(Optical Character Recognition)과 번역

향후 과제

HSV를 이용해서 흰색 글자 추출이 잘 될 때는 정말 잘 되지만 아래 그림처럼 노이즈가 생기는 경우가 더 많습니다. 그래서 AI 모델을 이용하는 것이 아닌가 싶네요. 노이즈가 있는 환경에서도 글자만 잘 추출할 수 있도록 알고리즘을 조금 더 다듬어 보아야겠습니다.

앞으로의 과제
앞으로의 과제