안녕하세요. 오토소장입니다.
오늘은 게임 화면에서 흰색 문장을 전통적인 방법으로 탐색하는 부분을 한번 진행해 보았습니다. AI 모델 없이 탐색하려니 정말 힘드네요.
장면마다 잘 동작할 때가 있고 동작하지 않을 때가 있는데요. 잘 동작하는 장면을 위주로 정리해 보겠습니다.
목 차
HSV로 흰색 글자만 추출
세가 새턴 랑그릿사 2의 시나리오 설명 장면에서 HSV 색 공간을 이용하여 흰색만 추출해 보았습니다. HSV는 RGB와는 조금 다른 색 공간을 말합니다. RGB는 빨강, 초록, 파란색으로 구성된 색 공간이라면 HSV는 색상, 채도, 명도로 구성된 색 공간이라고 생각하면 됩니다. RGB보다는 HSV가 사람이 인식하는 색이랑 비슷하다는 말이 있습니다. 다행히 노이즈 없이 글자 부분만 잘 추출이 되었네요.
![]() |
모폴로지(Morphology) 팽창(Dilation) 연산
문장은 글자들의 집합이라고 할 수 있죠. 하나의 글자에 인접한 글자들을 그룹화해서 하나의 문장이라는 것을 알기 위해 모폴로지 팽창 연산을 해줍니다. 아래 그림처럼 인접하게 이어져 있는 글자들을 모아서 한 문장이라는 것을 알 수 있게 처리해 주었습니다.
![]() |
컨투어(contour) 연산
이제 컨투어 연산을 통해 문장의 외곽 경계선 좌표들을 생성합니다. 이렇게 해야 한 문장의 경계 박스를 계산할 수 있기 때문입니다.
![]() |
컨투어(contour)와 경계 박스
아래 그림은 문장의 컨투어 외곽 경계선을 이용해 경계 박스를 생성한 결과입니다. 아름답게 한 문장을 잘 인식해 줬네요.
![]() |
경계 박스
이제 컨투어 정보는 필요 없으니 초록색인 경계 박스만 남겨두고 문장의 붉은색 외곽선은 깔끔하게 삭제합니다.
![]() |
OCR(Optical Character Recognition)
위에서 추출한 문장들을 하나씩 OCR 엔진으로 보내주고 결과 데이터를 받습니다. 즉, 이미지를 보내주면 아래 그림처럼 텍스트를 얻을 수 있습니다. 완벽하진 않지만 90% 이상은 정확하게 나온 것 같습니다.
![]() |
적용 결과
마지막으로 OCR로 인식한 일본어 문장과 번역한 한글 문장을 같이 표시해 주었습니다. 게임을 진행하는 데에 이 정도만 인식 및 번역이 되어도 스토리를 이해하는데 매우 수월할 것 같습니다.
![]() |
![]() |
향후 과제
HSV를 이용해서 흰색 글자 추출이 잘 될 때는 정말 잘 되지만 아래 그림처럼 노이즈가 생기는 경우가 더 많습니다. 그래서 AI 모델을 이용하는 것이 아닌가 싶네요. 노이즈가 있는 환경에서도 글자만 잘 추출할 수 있도록 알고리즘을 조금 더 다듬어 보아야겠습니다.
![]() |