새로운 알림이 있습니다.
모두 지우기

레진 타이머

활성화

최근 조회한 문서
  • 방문 기록이 없습니다.
  • 방문 기록이 없습니다.
  • 방문 기록이 없습니다.
최근 방문 게시판
  • 방문 기록이 없습니다.
  • 방문 기록이 없습니다.
  • 방문 기록이 없습니다.
OCR로 게임 위키 작성용 텍스트 따기
http://genshin.gamedot.org/?mid=board&target=view&board=tip&page=11&post=46

위키 작성시 게임내 텍스트를 베껴쓰는 일에 OCR를 쓰면 편리하므로 사용할 OCR 프로그램과 이미지 전처리 등을 소개한다.

 

목차
1. OCR 프로그램
2. 공유 파일 다운로드
3. 이미지 전처리
4. OCR 처리
5. 비고


◆ 1. OCR 프로그램

한글 인식률은 ABBYY인가 하는 유료프로그램이 우수하다는데, 개인용만 20만원이 넘는 고가의 소프트웨어이므로 거른다.
무료 소프트웨어를 찾으며 여러가지를 써보다가 Tesseract(테서랙트)라는 OCR 프로그램을 최종적으로 사용하기로 했다.

 

아래 블로거가 설치방법을 잘 정리해놨으니 방문해주자.

 

Tesseract 5 버전 설치하고 사용하면 된다.
기본으로 주어지는 kor.traineddata파일을 사용해서 스샷을 보정하고 OCR를 해보니 그다지 인식률이 좋지 않아서 원신 UI폰트에 맞춰서 머신러닝을 해줬다.

 

◆ 2. 공유 파일 다운로드

아래 genshinkor.traineddata가 원신 폰트에 맞춰서 훈련시킨 데이터다. 한글과 영어 알파벳을 학습시켰다.
.traineddata 파일들을 넣으라는 곳에 같이 넣고 쓰면 된다.(다른 .traineddata를 놔두는 같은 tessdata폴더에 두면 된다)

 

↓ 훈련파일과 cmd파일, XnViewMP 설정파일 다운로드

 

.cmd 윈도우 배치파일을 만들어서 아래 내용을 넣어두고 쓰면 편하다.
배치파일과 같은 폴더에 있는 png파일을 통째로 OCR로 처리해서 txt파일을 만드는 스크립트다. 실행파일 전체경로는 PATH환경변수에 경로를 넣어놨으면 생략해도 된다.

for %%x in (*.png) do "C:\Program Files\Tesseract-OCR\tesseract.exe" "%%x" "%%~nx" -l genshinkor --psm 6 --oem 1 -c textord_old_baselines=0 -c textord_straight_baselines=1 -c textord_tabfind_find_tables=0 -c wordrec_max_join_chunks=10 -c tessedit_parallelize=1 -c textord_tabfind_vertical_text=0

 

◆ 3. 이미지 전처리

이미지는 저손실 영상캡쳐 등을 한 이후에 영상 재생프로그램으로 보면서 글자가 나오는 장면의 스냅샷을 따면 게임 진행에 방해받지 않고 필요한 화면 정보들을 놓치지 않고 취득할 수 있다.


내가 쓰는 카카오 팟플레이어 같은 경우를 예로 들면, 단축키 Ctrl+E를 누르면 스샷으로 저장된다. 설정 메뉴 잘 찾아보면 저장된 폴더열기도 있음.

 

전처리에는 무료 이미지 뷰어 XnView MP를 사용하는 걸로 소개한다. 개인용/교육용으로 무료이며 원한다면 기부를 고려할 수 있다.
https://www.xnview.com/

 

▼OCR 인식률을 올리려면 글자와 배경간의 색대비 차이를 벌리고 배경의 노이즈를 제거해야 유리하다. 그래서 사진 보정 프로그램을 쓰면 좋다.
이 프로그램에는 이미지를 여러개 선택해서 일괄 변환할 수 있는 기능이 있는데, 아래처럼 프리셋을 저장해두고 사용할 수 있어서 유용하다.

 

▼레벨 조정을 하는 부분이 있는데, 저걸로 배경을 단순화 시키는 거다.
개별 이미지로 들어가면 레벨 조정을 하는 메뉴가 있는데 거기서 보면 아래와 같다.
배경색으로 점유된 색영역을 레벨 하한을 올리거나 상한을 내려서 날려버리는 작업이다.

 

▼강조색이 있는 텍스트도 잘 처리하면 흰색 글자와 함께 남겨서 글자 형태만 빼낼 수도 있다.

 

▼자르는 작업을 일괄로 하려면 일괄 작업 목록에 적어넣을 좌표를 따야한다. 뷰어에서 영역을 선택한 후, 상태표시줄에서 좌상단 위치와 크기를 메모장에 받아적은 뒤, XnViewMP 일괄설정에 옮겨적어 .xbs (Xnview Batch Setting) 파일을 처리할 스크린샷의 해상도에 맞게 변경하자.

 

◆ 4. OCR 처리

자르거나 색조변경 등 전처리를 한 이미지를 ocr cmd파일과 같은 폴더에 넣고 cmd파일을 실행시키면 txt파일이 나온다.

 

이미지 파일 하나에 txt파일 하나씩 나오므로 txt파일을 하나하나 열어보기는 힘들다. 그러니 txt파일을 하나로 합쳐주는 cmd 배치 스크립트를 만들었다.

chcp 65001
@echo off
del @.ini
for %%x in (*.txt) do echo "start"%%~nx >> @.ini & type "%%x" | find "" /v >> @.ini & echo "end" >> @.ini

오인식된 문자나 간격 등을 손봐준 다음에 위키에 복붙해 넣으면 된다.


◆ 5. 비고

  • 게임에서 보이는 가운뎃점 문자는 ·(한자2페이지8번, U+00B7, ·) 문자이다. 공백이 커서 좌우로 띄워진 것으로 착각할 수 있으나 게임 폰트에서는 정사각형의 단일 문자이다. 폰트에 따라 여백이 없기도 있기도 하다.
    - 실제 문자열 예시: ··닭!(O) ≠ ·· 닭!(X)
  • 게임에서 보이는 가운데 점 3개 연속해서 있는 문자는 (한자3페이지1번, U+2026, …) 말줄임표 문자이며 이 문자를 표시하는 폰트에 따라서 중간에 있을 수도, 바닥에 깔려있을 수도 있다. 특히 바닥에 깔린걸로 표시되는 폰트로 보면 마침표. 하고 구분이 안간다. (U+22EF, ⋯)가 대안으로 있는데, 이 문자는 수학기호이다. 대표 명칭에는 사용된 사례가 없으므로 수학기호로 바꿔서 적어도 될 것 같기도 하다.
  • 길게 연결되어 보이는 수평선 문자도 자주 볼 수 있는데, (U+2014, —) em dash 문자이다.
  • 공유중인 훈련파일에는 모든 특수문자가 학습되어 있지는 않다. 주로 대사나 설명문에 많이 나오는 위와 같은 것들만 훈련되어 있다.
  • 훈련은 리눅스의 Tesseract 4.1.1에서 했다. 윈도우의 5.0 버전에서 훈련파일을 가져다 사용해도 문제없다.
  • 훈련상태가 완벽한건 아니다. 애초에 훈련시작을 기존에 여러 폰트들이 미리 학습되어 있던 기본 kor.traineddata으로부터 시작했기 때문에 과거의 학습상태가 미미하게 영향을 준다. 단일 폰트로 맨땅부터 훈련시키면 인식률이 더 좋아질 것 같긴한데, 그러려면 해당 폰트로 렌더링된 40만줄의 무작위 텍스트를 완벽히 인식할 때까지 학습해야 한다는 식으로 적혀있더라... 그것도 라틴계 문자 기준이라더라. 한글은 조합문자이므로 40만줄의 몇배를 학습해야 한다. 맨땅부터 직접해보니 수십만줄 분량을 훈련용 이미지로 뽑는것부터 기약이 없이 오래걸려서 그냥 훈련용 이미지를 한 줄에 약 60자 정도로 3~4만줄 분량만 조금만 준비해서 기존 것부터 시작했다. 학습해야할 문자만 자모받침 조합으로 1만 가지가 넘어가므로 단어 조합도 아주 많다. 문자 좌우를 살펴서 인식하기 때문에 단어기반으로 인식하기 때문에 단어와 문장의 형태로 훈련용 이미지를 준비해야한다. 훈련은 문자인식 오답율 0.02% 정도에서 중지했다. 권장 오답율은 0.01% 이하. 0.0x%부터는 몇만줄 상대로 오답율 찔끔 낮추는데 한세월씩 걸린다. 영어 알파벳 문자를 추가했는데 이건 맨땅부터 훈련되어 있어서 다른 영어 폰트를 갖다주면 인식못할 듯.
  • 위에 구구절절 어떻게 훈련을 시켰는가를 적어놨는데, 단순히 OCR에 사용할 사람은 몰라도 상관없다.

 

좋아요! (2)
싫어요; (0)
작성자 프로필
일상생활이 어려운
안전거리, 확보!
돈이 없는
LV.6

안전거리, 확보!서버에커피올려두고감6

◆자음: ㄱㄲㄴㄷㄸㄹㅁㅂㅃㅅㅆㅇㅈㅉㅊㅋㅌㅍㅎ ◆모음: ㅏㅐㅑㅒㅓㅔㅕㅖㅗㅘㅙㅚㅛㅜㅝㅞㅟㅠㅡㅢㅣ ◆받침: ㄱㄲㄳㄴㄵㄶㄷㄹㄺㄻㄼㄽㄾㄿㅀㅁㅂㅄㅅㅆㅇㅈㅊㅋㅌㅍㅎ

댓글 목록 1개
최신순 정렬

댓글 작성 비로그인

댓글 작성

답글 작성 비로그인

답글 작성
제목작성자작성일조회추천
공지사항 유출/데이터 마이닝 관련 게시글은 등록이 불가능합니다. GAMEDOTA 2020.11.26 23015 14/1
68 [해등절 이벤트] 월드퀘 - [철괘아와 자미가 만나...] (비하인드 스토리-1) chun75 2021.02.13 911 0/0
67 [해등절 이벤트] 월드퀘 - [철괘아와 자미가 만나...] (3) chun75 2021.02.13 730 0/0
66 [해등절 이벤트] 월드퀘 - [철괘아와 자미가 만나...] (2) chun75 2021.02.13 1418 0/0
65 [해등절 이벤트] 월드퀘 - [철괘아와 자미가 만나...] (1) chun75 2021.02.13 866 0/0
64 리월 월드퀘 - 완벽한 기념 사진 (2) chun75 2021.02.13 1178 0/0
63 리월 월드퀘 - 완벽한 기념 사진 (1) chun75 2021.02.13 1465 0/0
62 몬드 일퀘 - 한번 한 말은 반드시 지킨다! 5 chun75 2021.02.12 9419 7/2
61 [해등절 이벤트] 월드퀘 - <스패너와 망치>(비하인드 스토리-2) chun75 2021.02.10 751 0/0
60 [해등절 이벤트] 월드퀘 - <스패너와 망치>(비하인드 스토리-1) chun75 2021.02.10 708 0/0
59 [해등절 이벤트] 월드퀘 - <스패너와 망치>(4) chun75 2021.02.10 706 0/0
58 [해등절 이벤트] 월드퀘 - <스패너와 망치>(3) chun75 2021.02.10 632 0/0
57 [해등절 이벤트] 월드퀘 - <스패너와 망치>(2) chun75 2021.02.10 622 0/0
56 [해등절 이벤트] 월드퀘 - <스패너와 망치>(1) chun75 2021.02.10 2088 0/0
55 [해등절 이벤트] 월드퀘 - <영롱한 소등도1> chun75 2021.02.10 3731 0/0
53 《복을 부르는 오색》 남는 사진 나눔해드려요 3 나그네자리의여행자25 2021.02.07 1023 3/0
52 설산 일퀘 - 추위 지수-중 (2) chun75 2021.02.06 4542 2/0
51 설산 일퀘 - 추위 지수-중 (1) 2 chun75 2021.02.06 10237 2/1
50 1.3업뎃에 추가된 히든 업적들 참고하세요 나그네자리의여행자25 2021.02.05 3893 9/3
49 '파울'(츄츄족 화염 슬라임 못 파내기) 업적 공략 3 chun75 2021.02.04 2517 6/1
48 매개 변수 변환기 얻는 월드퀘 - 천주의 보물 chun75 2021.02.03 14926 14/0