'OCR'에 해당되는 글 1건

실시간 게임번역기란 물건이 있습니다. Monkey head's OCR Realtime Translator - 이하 Mort (http://www.steambb.com/bbs/board.php?bo_table=gamebb&wr_id=479632) 라는 물건입니다. 기존의 텍스트 후커는 API후킹방식을 주로 이용하여 이루어졌는데요. 이 방법은 그냥 화면에 나오는 문장을 OCR로 읽어서 텍스트를 읽어들입니다. 사실 이는 이전에 VNR(Visual Novel Reader)란 프로그램에서도 지원되는 기능이었지만 이 물건은 워낙 묵직했던데다가 API후킹도 지원되던 탓에 OCR방식은 잘 쓰이지 않았습니다. (모르는 사람도 있습니다.) 그에 비해 Mort는 성능도 괜찮고 그럭저럭 쓸만합니다. 단점이라면 Tesseract의 학습 기능을 어느 정도 쓰지 않았다면 인식률이 개판입니다. Mort는 학습 기능과 함께 이미지 전처리 기능을 넣어서 어느정도 인식률을 올린 듯 합니다. 그럼에도 여전히 엉망이라 Spell Checker 기능까지 우겨넣어서 인식률을 끌어 올려야 하더군요. 


그래도 상당히 좋은 물건인 듯 해서 리눅스에서 돌릴 수 있는지 봤는데...


닷넷 프레임워크를 필요로 합니다. mono로는 실행이 안 됩니다. 그래서 약간의 폭발 이후 비슷한 클론을 하나 만들어 냈습니다.

...물론 대충 만들어서 모양은 별로이며 동일한 Tesseract 엔진이라 인식률은 꽝입니다. 심지어 이미지 전 처리 기능도 없습니다.....(PIL이나 OpenCV를 써서 넣으면 되기는 합니다만...)

적당히 만들어서 Gitjub 정도에 올리면 되지 않을까 생각하고 있습니다. 자신 있게 올리기엔 코드가 더러운게 흠이지만요.(저는 프로그래밍 전공이 아닙니다. 그래서 알고리즘이 최적화 되어있지 않습니다.)


제작 언어는 제작 속도가 더럽게 빠르기로 유명한 Python 2.7입니다.(3.x는 일부 라이브러리 때문에 사용 불가) 그리고 Tkinter와 기타 플랫폼 독립적 라이브러리를 이용했기 때문에 (OSX, Windows, Linux만 되기는 하지만)크로스 플랫폼(!) 입니다. Tesseeract-OCR를 라이브러리 형태가 아니기에 따로 추가 설치 해주셔야 합니다. (하지만 Tesseract-OCR도 각 플랫폼 별 바이너리를 제공하기에 큰 문제는 없습니다.)


Mort에 비하면 UI가 공대 감성입니다. 미리 말씀드리자면 완성된 프로그램도 아니고 그냥 비슷한 기능을 구현한 것입니다. 작동 되면 좋고 아님 마는 겁니다.


구성은 창 2개입니다. 왼쪽 터미널 위에 있는 컨트롤 창과 오른쪽 Scan Area 창 두 개입니다.


우선 캡쳐 하고자 하는 부분을 Scan Area 창으로 가려 버립니다(!) 저 Scan Area 창은 X버튼의 기능을 삭제 했습니다. 때문에 그냥 구역 설정 기능만 갖춘다고 생각하시면 됩니다.


...그리고 Start를 누르면...Scan Area창이 최소화되면서 해당 Area 부분을 캡쳐한 뒤 신나게 OCR로 읽어들입니다. 인식률은????.........아직은 포기하면 편해요. 이미지 전처리 기능을 만들지 않는 이상 인식률을 효과적으로 끌어올리기는 힘들 듯 합니다.


그리고 한국어 번역을 쓰는데 구글 웹 번역기(?)를 씁니다. goslate란 모듈이 이를 지원합니다. (영어 → 한국어) 보다는 (영어 → 일어 →한국어)가 더 번역율이 높다고 들어서 한번 해봤는데 구어체는 별 차이가 없습니다. 그래서 그냥 (영어 → 한국어) 로 처리 중입니다.


그냥 한번 어떻게 되는지 구경이나 해봅시다.



번역을 하고 싶은 부분을 찾아서 Scan Area 창을 신나게 가지고 놀자


일단 게임을 실행하고 작성한 파이썬 스크립트를 실행합니다. 항상 위 옵션으로 걸려있으므로 Scan Area 창은 절대로 게임 창 뒤로 가지 않습니다.


번역을 하고자 하는 구역을 Scan Area 창으로 가려버리자! 추후 여기에 번역문을 띄울까 하는 생각도 해봤지만...그건 별로


번역을 하고자 하는 부분 위에 창을 올려놓고 조절합니다. 그냥 가리면 됩니다. 참 쉽죠?


그리고 Start를 하면??? Scan Area 창이 자동으로 최소화 됩니다. 그리고 터미널에 보면!!!


왼쪽에 터미널을 주목하자 아직 출력 창을 안 만들었기에 터미널에 번역문을 대신 띄우고 있다. 참으로 공대감성이 아닐 수 없다.

....번역기의 성능은 기대 안 하는 것이 좋습니다. 어차피 구글 번역기이니까요. 심지어 잘 못 인식된 글자도 있네요. 저것은 이미지 전 처리 기능과 Spell Checker를 추가로 붙여서 보완해야 합니다. 하지만 이를 리눅스로 구현했다는 데에 의의가 있습니다. (그런데 테스트에 쓴 게임은 Windows용 Wine 구동 게임...)


이걸 조금만 더 다듬으면 훌륭한 크로스 플랫폼 실시간 번역기가 될 수 있을 듯한데 모양도 별로고 조금 공대 감성을 탈피해야 합니다. (범인은 Tkinter) 하지만 3일만에 만든 것 치고는 그럭저럭 괜찮네요. 이제 OCR된 문자열 및 번역문 츨력창을 따로 만들고 이미지 전 처리 기능을 넣고 Hunspell- Spell Checker (http://hunspell.sourceforge.net/)을 적용하면 인식률을 엄청 끌어 올릴 수 있을 것 같은데 뭐....언젠가는 하겠지요 뭐...

,