잘못된 정보가 있다면, 꼭 댓글로 알려주세요(비로그인 익명도 가능).

여러분의 피드백이 저와 방문자 모두를 올바른 정보로 인도할 수 있습니다.

감사합니다. -현록

후원해주실 분은 여기로→

현록의 기록저장소

화면 번역 프로그램 TransNOCR v.1.8.0 본문

Programs/release

화면 번역 프로그램 TransNOCR v.1.8.0

현록 2019. 4. 19. 15:07

PC에서 영역을 선택하여 그 부분의 이미지를 글자로 추출, 번역해주는 프로그램입니다.

 

문자를 복사할 수 없는 상태의, 게임상에 띄워진 외국어 등을 판독하고 번역 받으려고 만들었습니다.

 

 

사용 예1: 영역지정-추출-번역 (그림이 안 움직이면 클릭해서 보세요.)
사용 예2: 영역지정-플로팅번역 (그림이 안 움직이면 클릭해서 보세요.)

구동환경: Windows Vista,7,8,8.1,10

     또는 Java가 설치 가능한(JVM이 구동될 수 있는, JRE 1.8 이상) 모든 운영체제

개발언어: Java 1.8

개발환경: Spring Boot, gradle, sts for eclipse

사용 API:

     OCR - Google Cloud Vision, Google Drive

     번역 - NAVER Papago NMT, SMT, Google Sheets, Kakao Translation

 

사용법은 다운로드 링크 아래의 접힌글 참고.

 

 

각각 API 키를 발급받아 사용하며,

OCR키(문자 추출에는 필수),

네이버번역키, 구글번역키, 카카오번역키(중 택일 혹은 그 이상)

총 4개가 있습니다.

(번역에는 키가 필요없는 도구도 있습니다.)

 

키 발급과정은 맨 아래에 포스트로 다루겠습니다.

 

 


 

Windows용(.exe), 기타 OS용(.jar) 다운로드

https://github.com/BlackdeerY/Download_TransNOCR/releases

 

BlackdeerY/Download_TransNOCR

release for TransNOCR. Contribute to BlackdeerY/Download_TransNOCR development by creating an account on GitHub.

github.com

https://www.azul.com/downloads/?version=java-17-lts&os=windows&architecture=x86-64-bit&package=jre
(1.8.0 버전부터는 jre 버전을 올렸으니, 위의 링크에서 받아주세요. 인식 폴더명을 jre로 수정했습니다.)
(업데이트를 적용하실 분들은, exe나 jar만 덮어씌우고

jre 폴더는 그대로 두면 됩니다.)

(v.1.5.2부터 ini파일 대신, 프로그램 내에서 설정 창에서 입력해둡니다.)

 


사용법

더보기

Ctrl+Alt를 누른채로 마우스를 움직이고,

키보드에서 손을 떼면 영역지정 및 캡처가 됩니다.

 

Ctrl+Shift+F12 : 현재 마우스 위치로 본 창 이동.(최소화 했어도 복귀하면서 이동)

Ctrl+Shift+F11 : 본 창 최소화.

Ctrl+Shift+U : 선택했던 영역부분 재캡처,

Ctrl+Shift+I : 캡처본 다시 문자추출,

Ctrl+Shift+O : 추출문자 다시 번역.

Ctrl+Shift+Numpad* : 플로팅 번역.

Ctrl+Shift+Numpad- : 플로팅 결과 숨기기/보이기.

(프로그램 내부 설정에서 바꿀 수 있음)

 

[키 필요 항목]

Google Cloud Vision OCR: 하루 1000장 무료

네이버 파파고 신경망: 하루 1만자 제한. 한 번에 5000자까지 요청 가능.

구글 기계번역: 제한없음. 한 번에 5000자까지 요청 가능.

카카오 기계번역: 하루 5000자 제한. 한 번에 5000자까지 요청 가능.

웹기반 - 구글 OCR: 제한없음. 대신 Cloud Vision보다 품질 떨어지고 느림.

(키 발급은 아래에 링크 및 설명 참고)

 

[아래부터는 키 필요하지 않은 항목]

웹기반 - 구글: 제한없음. 한 번에 5000자까지 요청 가능.

웹기반 - 네이버 파파고: 제한없음. 한 번에 5000자까지 요청 가능.

웹기반 - 카카오: 제한없음. 한 번에 5000자까지 요청 가능.

웹기반 - Bing: 제한없음. 한 번에 5000자까지 요청 가능.

웹기반 - Systran: 제한없음. 한 번에 2000자까지 요청 가능.

 

웹기반 번역은 컴퓨터에 Chrome 웹 브라우저가 설치되어 있어야 하며,

Chrome 웹 드라이버를 받아 옆에 두어야 함.

(아래에 링크 및 설명 참고)

 

 

모든 키를 발급받은 후에는,

 

①신용카드 정보 등록 후 받은 Google Cloud Vision API 인증키 파일인 json 파일명을 googlevision.json으로 변경하고

exe파일 옆에 둡니다.

 

②환경변수 등록을 합니다.

GOOGLE_APPLICATION_CREDENTIALS 란 이름의 환경변수로,

googlevision.json을 가리키도록 합니다.

각 운영체제에 해당하는 방법으로 등록해주면 됩니다.

(Windows는 jar가 아닌 exe버전을 실행하면 자체적으로 등록된 상태처럼 동작합니다.)

 

③네이버 키는 프로그램 내부 설정 창에 적습니다. 

 

④내려받은 Google Sheets API 인증키 직접 생성시 받았던 json 파일명을 googledrive.json로 변경하고 exe 옆에 둡니다.

 

⑤카카오 키는 프로그램 내부 설정 창에 적습니다. 

 


제한 사항

더보기

Google Cloud Vision OCR의 경우,

프로그램을 실행해서 첫 요청시 시간이 조금 더 걸립니다.

통신 연결 중에 서버측에 어떤 일이 있는 것 같습니다.

두 번째 요청부터는 꽤 빠르게 진행됩니다.

 

 

웹기반 기능은, 사용자의 웹 언어 환경이 한글인 경우로 구현했습니다.

원래 멀티 랭귀지를 커버할 수 있는 도구도 있고, 아닌 도구도 있습니다.

 

번역 중,

웹기반 - Systran의 경우, 사용자의 웹 언어 환경이 한글이 아닐경우, 동작하지 않습니다.

같은 이유로 웹기반 전체 번역도 마지막 Systran에서 동작이 멈춘채로 있습니다.

(Systran 웹페이지의 구현이 표준이 아니라, 언어별로 상황을 만들어야 하는데, 세계 각국의 언어 이름을 다시 각국의 문자로 일일이 고려하는건 좀;;)

 

OCR 중,

웹기반 - 구글의 경우, 사용자의 웹 언어 환경이 한글, English가 아닐경우, 동작하지 않습니다.

구글 드라이브도 각국의 문자로 처리해야하는데, 한글과 영어만 구현했고, 나머지까지는 하지 않았습니다.

 

 

플로팅 번역은, Google Cloud Vision OCR이 사용가능해야만 사용할 수 있는 기능입니다.

 

플로팅 번역에서 카카오 API 번역이나, 웹기반 - 카카오 모두

번역 도구 자체에서 모든 줄바꿈을 지우고 처리한 결과를 주기 때문에,

플로팅 번역 결과들이 제 위치에 자리잡지 못합니다.

플로팅 번역에는 접합하지 않은 도구.

 

플로팅 번역에서 세로쓰기로 쓰여진 문구는 결과가 제 위치를 찾지 않습니다.

세로쓰기는 다른 처리를 해줘야할텐데, 아직은 계획에 없습니다.

일반 추출-번역 기능을 사용하시길.

(애초에 플로팅 번역 기능 자체를 추천하진 않습니다.)

 


업데이트 내역

더보기

(v.-.-.-.n 은 안내문 줄바꿈 등 사소한 fix로 기재하지 않습니다.)

v.1.8.0 - 2023.03.02

 

ㆍ사용 라이브러리의 버전을 모두 올려두었습니다.

ㆍ구글 기계번역 관련 Credential이 refresh가 불가능하게 만료되었을 때,

 Credential 파일을 지우지 않아도 새로 인증하도록 합니다.

ㆍ플로팅 번역에서 그동안은 문단의 가로와 세로 길이 중 긴 것으로 가로/세로로 출렸했으나,

 실제 문단의 각도를 삼각함수로 계산하여 원본과 같은 각도로 출력합니다.

 대신 단어별로 위치 정보를 끊어주는 Google Vision OCR 특성상 문단이 눕혀진 것인지 실제 세로 쓰기인지는 판별이 어려우니,

 모두 눕혀서 출력하도록 했습니다.(일본어 세로쓰기도 긴 영어를 만나면 그냥 눕혀 쓰기를 혼용하더군요...)

 Google Vision OCR에서 특히 직각의 경우에 4점의 순서를 뒤엉켜 주기도 해서, 가로/세로 중 긴 것을 토대로 그냥 0˚와 -90˚로 통일한 상태입니다.

플로팅 번역의 글자 색상, 굵게 처리, 외곽선 사용 여부, 색상, 원문 가림 블록 사용 여부를 설정에서 지정 가능합니다.

 이미 출력한 플로팅 결과도 설정에서 변경하는 즉시 수정되어 반영됩니다.

ㆍ플로팅 번역의 출력에 antialiasing을 적용하였습니다. 글자의 외곽선 부분이 좀 더 부드럽게 출력됩니다.

ㆍ웹기반 OCR은 구글 보안에 따라 로그인을 거부하므로 기능을 사용하지 않게 했습니다. 사용하시는 분이 있다면 말씀해주세요.

ㆍ웹기반 Systran과 Bing은 웹페이지가 수정되어 기능을 사용하지 않게 했습니다. 사용하시는 분이 있다면 말씀해주세요.

ㆍ카카오는 번역 API를 중단한 것으로 보입니다. 웹기반에서는 작동하나 여전히 성능은 좋지 않습니다. 언제 다시 열릴 수도 있으니 기능은 유지합니다.

 

 

v.1.7.6 - 2020.12.20

 

ㆍ웹기반 - Google 번역에서, 해당 웹 페이지의 속성이 변경되어 동작하지 않던 것을 다시 동작하도록 수정

 

 

v.1.7.5 - 2020.05.19

 

ㆍ플로팅 번역 기능에서도 OCR 추출의 "클립보드로 전송"도 허용

 

 

v.1.7.4 - 2020.05.08

 

ㆍMac을 VNC를 통한 원격 키가 아닌, 물리 키로도 LCtrl+LCommand가 제대로 작동하도록 수정

 (서버로 사용하는 Mac이 본가에 설치되어 있어서 서울에 있는 동안 물리 키를 시험해볼 수 없었음..ㅎ;;)

 

 

v.1.7.3 - 2020.04.07

 

ㆍ추출시 클립보드에도 전송 기능이 제대로 동작하지 않던 문제 수정

 

 

v.1.7.2 - 2020.03.14

 

ㆍ플로팅 번역에 세로쓰기를 어느 정도 반영은 했습니다.

 근데, 세로쓰기를 하는 언어가 얼마 없는데, 보통 세로쓰기의 결과는 원문보다 길어집니다.

 한자들이 그렇죠. 풀어쓰면 길이가 늘어나죠.

 결국 세로 원래 위치보다 오버해서 아예 모니터 밖까지 진행돼서 내용을 다 못 읽는 경우가 많습니다.

 거기다가, 원래는 ()[]{}<> 같은건 눕혀서 처리해야하고,

 , . ? ! 는 !!!!처럼 이어지는 것 중 글자크기까지만 끊어서 연속 처리되게 한다거나,

 따옴표 등도 있는데, 그런 것까지 신경쓰진 않았습니다. 지금은 그냥 한 문자씩 띄워집니다.

 역시 플로팅 번역은 독이야..!!

(이제 추가하거나 고칠건 다 고친 것 같습니다. 제보가 들어오기 전까진..ㅎ)

 

 

v.1.7.1 - 2020.03.14

 

ㆍ마우스 위치로 본 창 이동본 창 숨기기 단축키를 추가했습니다.

ㆍ'['나 ']' 등 단축키로 지정해도 동작하지 않는 키들이 있어,

 단축키 프로세스를 조금 바꿨습니다. 이제 동작하지 않던 키들도 동작할겁니다.

 기존 키에는 문제가 없으나... 옵션 창을 들어가보면 버튼의 키 설명 부분이 깨져서 보입니다.

 성능에는 문제가 없지만, 다시 지정해두면 글자가 복귀되니, 다시 지정해주시면 되겠습니다.

 

 

v.1.7.0 - 2020.03.13

 

플로팅 번역(캡처영역 번역 결과를 위에 띄워주기) 기능을 추가했습니다.

 OCR 결과를 줄바꿈이나 공백을 수정하지 않고 바로 번역을 해야하기 때문에,

 번역 품질이 썩 만족스럽진 않습니다.

 (영상 맨 마지막에 우리 로취가 바퀴벌레가 되어있더군요. 영 틀린 말은 아니지만..;;)

 유효단위를 줄바꿈으로 계산했는데,

 저 멀리 떨어진 단어와, 실제 문단 안에서 문장의 줄바꿈 형태를 구분할 수 없겠더군요.

 가능하면 문단은 문장들을 모두 합쳐서 요청하고, 다시 받아와서 쪼갤 수 있으면 좋겠지만,

 언어 사이에 단어 수와 길이가 변하니, 합쳤다가 원본 대비 어떤 기준으로 자를 수 없습니다.

 보이지 않는 문자를 삽입한다고 해도, 어차피 번역에도 영향을 줄테니 의미없구요.

 (맨 아래 향후 업데이트 방향 예시 참고)

 이건 그냥 가능하니까 구현만 해두고, 실제로 쓸지는 잘 모르겠는 기능이라고 생각할 것 같습니다.

 글자도 좀 신경쓰긴 했는데, 단색이면 배경에 가려져서 테두리까지 쓰긴 한건데, 그래도 영 깔끔하진 않네요.

ㆍ단축키 사용/끔을 단축키마다 사용여부를 정할 수 있습니다.

 

 

v.1.6.1 - 2020.03.11

 

ㆍ웹기반 - 구글 OCR에서 임시 이미지 경로가 홈 경로가 아닌 exe경로로 계속되던 문제 수정

 

 

 

v.1.6.0 - 2020.03.10

 

ㆍOCR도 웹기반 - 구글 OCR이 추가되었습니다.

 (Google Cloud Vision의 키는 필요없지만, 무료키인 Google Drive 본인 앱 키는 필요합니다.)

 보이는 크롬창을 띄워서, 로그인 입력을 받고, 구글 드라이브를 경유하여 문자 추출을 합니다.

 보이는 창인 이유는, 제 멋대로 계정 정보를 받아와서 입력하면 안된다고 생각하기 때문에,

 직접 입력하는 방식으로 진행했습니다.

 대신, 추출 중에는 최소화해둔 창도 깜빡이거나 팝업하면서 방해할겁니다..;;

 아무래도 구글 문서의 부가기능 정도이기 때문에,

 품질은 Cloud Vision보다 약간 떨어집니다. 과정상 더 귀찮거나 속도도 느리구요.

 Cloud Vision을 사용하지 못하는 유저들을 위해서 구현했습니다.

 (그래도 구글 드라이브 본인 앱까진 만들어야하니, 참...)

ㆍ설정파일(option_TransNOCR)과 구글드라이브 인증정보파일(credential_GDrive)의 위치를

 exe옆이 아닌, 사용자 홈 경로\TransNOCR로 변경했습니다.

 예를 들면, C:\Users\Blackdeer\TransNOCR 이런 곳입니다.

 그동안은 굳이 파일 작성 권한이 없으면 저장 못하고 쓰는거지 뭐. 사용자 자유지. 라고 넘겼지만,

 웹기반 OCR에서는 프로그램의 이미지를 바로 구글 드라이브로 넘겨주지 못하고

 임시로 저장했다가 넘기고 삭제하기 때문에,

 어차피 작성권한이 보장되는 임시공간이 필요하다면, 그냥 다 몰아두기로 해서 옮겼습니다.

 (json파일과 크롬드라이버는 여전히 exe 옆입니다.)

ㆍ본 창의 어디든 마우스 드래그로 끌어서 창을 이동시킬 수 있습니다.

 

 

v.1.5.4 - 2020.03.10

 

ㆍ구글 기계 번역의 인증을 가능한 최대로 연장했습니다.

 그동안은 refresh 기능을 활용하지 못하고, 1시간의 인증 시간만으로 사용했으나,

 refresh가 가능하다면 자동으로 연장할 수 있도록 했습니다.

 (구글 자체의 refresh 최장 기한이 얼마인지는 모르겠으나, 제 선에서 할 수 있는건 다 한 것 같습니다.)

ㆍ단축키가 먹히지 않는 현상을 고쳤습니다.

 (단축키 설정은 rawcode로 받고, 동작은 다른 code형식이었더군요;; 이제 제대로 돌아갈 것입니다.)

ㆍ각 API의 문서를 보고 국가 언어 코드들을 최신화했습니다.

 

 

v.1.5.3 - 2020.03.09

 

ㆍ웹기반 - 구글, 웹기반 - 파파고, 웹기반 - Bing에서 번역 요청도 되지 않던 문제 수정

ㆍ웹기반 번역 도구들의 모든 속도를 가능한 최상으로 올려둠.

ㆍ해당 번역 도구의 최대 글자 길이를 넘으면 프리징 되는 도구들이 있기 때문에,

 해당 길이를 넘어서 요청하더라도 잘라서 넘겨주도록 함.

 

 

v.1.5.2 - 2020.03.08

 

ㆍini파일에 키 값을 입력하지 않고, 프로그램 내부 설정 창에서 입력해둡니다.

 (단축키 정보와 함께 option_TransNOCR 로컬 파일로 저장됩니다.)

ㆍ다운로드를 분할 압축 대신 외부 링크로 옮겼습니다.

 

 

v.1.5.1 - 2020.03.08

 

ㆍ몇몇 웹기반 번역도구의 버그를 잡았습니다.

 

 

v.1.5.0 - 2020.03.08

 

ㆍ웹기반 - 카카오, 웹기반 - Bing, 웹기반 - Systran, 웹기반 전체 번역 도구가 추가됨.

ㆍ현재 어떤 작업이 수행되고 있는지(키파일 분석, 통신, 인증, ...) 간략하게 한 줄로 표시됩니다.

ㆍ좀 더 오류내용을 세분화하여 보여줍니다.

ㆍ최근 10개까지 번역과 문자추출 내역을 기억합니다. 기록 버튼을 누르면 열람 가능합니다.

ㆍ단축키 변경이 가능합니다. 설정 버튼을 눌러서 변경합니다.

 변경되면 자동으로 option_TransNOCR 파일을 만들고, 다음번 실행시에도 그대로 불러옵니다.

ㆍ쓰레드를 좀 더 손봤습니다.

ㆍgooglesheet.json 의 파일명 대신 googledrive.json 의 파일명을 사용합니다.

 (기존파일 이름만 바꾸면 됩니다.)

 

웹 기반 전체 번역은, 모든 웹기반 번역도구에 차례로 요청을 보내어 한꺼번에 결과를 받습니다.

당연히 시간은 웹기반 번역도구들의 시간 총합이 됩니다.

 

웹기반 번역도구를 쓰다가 버그가 발생하면 제보해주세요.

(프리징이 일어나면, 작업관리자에서 javaw.exe와 chromedriver.exe를 강제 프로세스 종료하면 되긴합니다.)

 

 

v.1.4.0 - 2020.03.03

 

번역 방법이 2가지 추가되었습니다.

웹기반 - 구글, 웹기반 - 네이버 파파고.

이 방식은 인증키가 필요없고, 하루 제한량이 없습니다.

단, 컴퓨터에 크롬 웹 브라우저를 설치해야 하며,

크롬에서 제공하는 웹 드라이버를 내려받아 exe옆에 둬야합니다.

보이지 않는 크롬 웹 브라우저를 실행하여,

번역 사이트에 값을 주고, 결과를 받아서 사용합니다.

(이 브라우저는 쿠키와 세션이 별도로 동작하므로 안전합니다.)

(작동방식은 맨 위 동영상 참고. 실제 배포본은 크롬 브라우저가 보이지 않음.)

 

동영상을 보시면 아시겠지만,

실행시 크롬 브라우저가 준비되는데 몇 초의 시간이 필요합니다.

그리고 프로그램 종료시 각 크롬 브라우저를 종료하느라 몇 초가 걸립니다.

 

해당 페이지의 UI가 변하면 제대로 동작하지 않을 수 있으므로,

거기에 맞춰서 업데이트를 해야하는 단점이 있음...

웹기반 번역이 동작하지 않는다면 댓글로 제보 부탁드립니다.

 

 

v.1.3.2 - 2020.02.24

 

credential 인증 최대 유효 시간(1시간)이 지나면,

credential_GDrive가 있어도, 유효하지 않은 인증이므로,

직접 파일을 지우지 않아도, 새로 인증 절차를 진행할 수 있도록 함.

 

 

v.1.3.1 - 2020.02.24

 

구글 기계번역을 위한 Google Sheets 계정 인증을

프로그램 실행시마다 받았어야 했던 점을 개선하여,

인증 정보를 credential_GDrive 파일로 저장해두고,

다음부터는 추가 절차 없이 바로 사용할 수 있도록 합니다.

 

 

v.1.3.0 - 2020.02.18

 

문자 추출 결과의 텍스트를 직접 수정할 수 있도록 변경했습니다.

처음에 고안할 당시에는 필요성을 느끼지 않았기도 했고,

괜히 커서가 올라가 있어 단축키가 제대로 먹지 않거나,

원문 정보를 손실해서 다시 캡처하거나 문자 추출 요청을 해야하는

(라이트 유저라면 괜찮지만, 어쨌든 하루 제한량이 있는 API이기 때문에)

사태를 걱정해서 아예 막아놨지만,

이미지가 깔끔하지 못할 수록

추출 결과 원문 그대로보다는,

결과를 복사해서 수정 후에

구글번역이나 파파고번역에 다시 붙여넣는 일도 있었습니다.

그래서 아예 문자 추출 결과는 직접 수정할 수 있도록 했습니다.

(대신 타이핑을 고려하여, 단축키를 일반 U,I,O,P에서, Ctrl+U,I,O,P로 Ctrl 조합키로 수정했습니다.)

 

 

v.1.2.0 - 2019.06.17

 

캡처영역 미리표시(녹색)만 수정.

디스플레이 설정에서 배율을 100%보다 높게 확대하여 사용하면,

시스템에서는 확대된 만큼 해상도가 줄어들었다고 인식하여

영역보다 배율을 나눈만큼 표시되었는데,(150%라면, 시작위치와 종료위치 모두 /1.5)

해상도를 다른 방식으로 각각 구한 후, 배율을 구해 적용.

캡처 이미지 영역 자체는 원래 이상없었음.

(Windows가 아닌 OS에서는 GUI 처리방식이 달라 녹색 영역이 표시되지 않으므로 변화점 없음.)

 

 

v.1.1.0 - 2019.05.30

 

Google Vision OCR API 쪽 문제로,

문자 추출을 하지 못한 채 대기상태로

교착상태에 빠지는 경우가 있습니다.

특정 이미지는 다시 시도해도 문자 인식을 못하더군요.

원래는 껐다켰는데,

좀 더 쓰레드를 나눠서 재실행 없이도 진행할 수 있게 했습니다.

프로그램은 계속 사용할 수 있지만,

문제가 발생하는 이미지는 여전히 문자 추출은 불가능.

(Google Vision OCR API 쪽 문제라..)

 

사용법이나 경고 등 추가 윈도우가 띄워진 상태에서

영역 지정(캡처)을 시도할 수 있던 문제 해결.

(녹색 구간만 움직일 뿐 제대로 되진 않았지만.)

 

 


 

문자 인식 및 추출은 Google이, 번역은 Google, NAVER, Kakao가 해주기 때문에,

 

제가 한건 영역이미지캡처, 단축키설정, GUI 구현, API 간 통로 설정 정도밖에 없습니다만,

 

기능을 묶은 것으로도 유의미하다고 생각합니다.

 

 

핵심 기능은 Google Cloud Vision의 OCR 기술이라고 하겠습니다.

 

자동 언어 감지에 문자 인식률이 상당합니다. 개발 목적도 모바일에서는 구글 번역에서 기본으로 제공되는 기능인데, PC 버전은 없기 때문에 만든거라.. 모바일에서는 구글 번역 앱을 무료로 내려받으면 됩니다.

 

 

번역의 경우는 좀 귀찮더라도 번역기에 일일이 붙여넣을 수도 있고..

 

일본어→한국어의 경우에는 꿀도르님의 물건들을 찾아보면 성능이 좋은 번역이 많기 때문에 굳이..

(그래도 네이버 파파고 기계번역과 신경망 번역을 차례로 해보니 확실히 신경망이 기계번역보다 매끄럽네요. 대단..)

 

번역 API는 이용하지 않더라도, 추출시 클립보드에 쓰는 기능을 통해 클립보드 감지 번역 프로그램에 함께 활용이 가능합니다.(OCR만 쓰겠다 이거죠)

혼용 예 (OCR로 문자만 추출하고 클립보드 전송, 번역은 다른 프로그램이 클립보드 감지)

 

 


간단한 후기는 접은글에 적겠습니다.

더보기

Google Cloud Vision과 네이버의 번역, 카카오의 번역 API 모두 REST API이기 때문에,

원문과 언어정보만 날려주면 쉽게 결과를 받을 수 있었습니다.

 

네이버와 카카오 API는 키만 입력받아도 인증이 통과되었기에 딱히 다른 플러그인이 필요하지 않았습니다.

 

Google Cloud Vision API의 경우에는 json 파일로 인증을 하는데,

그래도 상용화 및 연구 중인 API라서 구글 공식 홈페이지에서 배포되는 플러그인과 샘플 설명만으로도 어렵지 않게 구현 가능합니다.

 

 

문제는 Sheets API 였는데..

 

애초에 REST API 목적이 아니었으니 전달만으로 결과를 받을 애는 아니고,

 

공식 홈페이지는 스프레드시트용으로 사용하려는 예제가 나오는데, 초기 설정부터 길이 다르다고 해야하나..

 

여러가지 예제를 찾아봐도 제각각이고, 구글 API다보니 필요 플러그인도 버전이 엄청 많고, 버전간 충돌도 많다고 해서..

 

수동으로 넣다가 포기하고 spring에서 자동으로 맡기니 충돌을 피해서 버전을 설정해주더군요.. 이래서 자동자동 하는구나..

 

화나는 점이 코딩에서 막힌 것도 아니고, 겨우 API에 닿기 위한 과정에서 헤메니까;;

 

하긴 굳이 이 API를 번역에만 쓰려고 조금만 떼오고 싶은 사람이 이 API 사용인구 전체에 비해서는 소수일테니..;;

 

API 자체 기능이었으면 덜 화났을텐데, 인증 초기에서 버전충돌로 import가 안되서 헛돌고 있어서..ㅋㅋ

 

그동안 인증 방식을 조금씩 바꿔서 그렇다곤 하던데.. 완전 같은 플러그인에 완전 같은 import와 코드를 적어놔도 빨간줄 그이면 열이 난다..ㅋㅋ

 

 

이미 제가 필요한 화면 인식 번역 작업은 끝낸 상태이긴 했지만,

 

배포용으로 키를 외부에서 읽게 하고 좀 다듬고했습니다. 언젠가 또 쓸지도 모르고.


 

 

 

Google Cloud Vision API는 상용기술이고, 몇몇 영역은 유료이고, 우리가 쓸 OCR은 한 달 1천장 무료입니다.

(1년간 이용가능한 코인을 지급해줘서 넘겨도 코인이 대신 소진됨.)

(코인을 모두 사용한 상태라도 자동 과금이 되지는 않음.)

(1년 후에는 유료 이용 동의를 진행해야 하고, 유료 이용 상태에서도 한 달 1천장 무료는 계속됨.)

(정책 변화가 있을 수 있음.)

 

Google Cloud Vision API 는 이용신청시 신용카드 정보도 요구하는데, 우선 유료 기술들이 있기 때문이기도 하고,

 

구글 계정 증식과 무제한 가입 방지를 목적으로 한다고 합니다.

 

그래서 카드 정보를 적어도 과금이 동의없이 진행되진 않는다고 합니다.

 

구글 ID와 신용카드정보가 필요합니다.

 

[Programs/help] - Google Cloud Vision API 키 발급

 

https://console.developers.google.com/

https://cloud.google.com/vision/?hl=ko

 

 

 

Google Sheets API(구글 기계번역에 사용)는 무료. 직접 자신이 만든 API 계정에 자신이 접근.

 

제한량은 초당 요청량. 자신 계정마다 매겨지므로 초당 요구 속도에서 제한량을 넘을 일 없을 것임.

 

구글 ID가 필요합니다. 구글 ID에 구글드라이브(구글문서)가 사용 가능 상태여야합니다.

 

[Programs/help] - Google Sheets API 키 발급

 

https://console.developers.google.com/

https://developers.google.com/sheets/guides/concepts?hl=ko

 

 

 

NAVER Papago API도 무료. 대신 하루에 1만자 씩만 이용가능.

 

네이버 ID가 필요합니다.

 

[Programs/help] - 네이버, 카카오 API 키 발급

 

https://developers.naver.com/apps/#/register

 

 

 

Kakao API도 무료. 대신 번역 품질은 꽤 떨어지는 편. 문자가 띄어쓰여지지 않고 개행되어 아랫줄로 이어지면 번역을 이상하게 함.

 

제한량은 명시되어있지 않음. 한번에 5천자 이하를 번역. 이 문자 길이는 위의 번역 API들도 비슷할 것임.

 

카카오 개발자 사이트에서 회원가입을 합니다.

 

[Programs/help] - 네이버, 카카오 API 키 발급

 

https://developers.kakao.com/apps

 

 

 

웹기반 번역에 필요한 크롬 웹브라우저는 여기서 받습니다.

https://www.google.com/intl/ko/chrome/

 

웹기반 번역에 필요한 크롬 웹드라이버는 여기서 받습니다.

(크롬 웹브라우저와 동일한 버전 혹은 그 이하. 동일한 버전이 호환성이 좋음)

https://sites.google.com/a/chromium.org/chromedriver/downloads

(무작정 최신이 아닙니다. 내 크롬 브라우저 버전 이하입니다.

드라이버는 정식 빌드버전 위의 버전도 공개되어있습니다.

맨 위라고 최신이 아닙니다. 맨 위는 미래의 버전입니다.

내 브라우저보다 상위버전이라면 브라우저가 손도 못대고 포기하겠죠?)

 

(크롬으로 이 페이지를 보고 계신다면,

주소창에 chrome://version/를 붙여넣어 버전 확인 가능

(링크를 우클릭 후, E키를 누르면 바로 링크 복사))

 

 


 

모든 파일이 갖춰진 상태. (이용하고자 하는 기능에 따라 필요에 맞춰서.)

ㆍTransNOCR.exe: 실행파일.

ㆍjre: JVM 폴더. 본인 컴퓨터에 Java가 설치되어 있다면 필요 없을 수도 있음. 필요하다는 문구가 뜨면 이 링크에서 받아, 옆에 두면 됨.

ㆍgooglevision.json: [OCR]Google Cloud Vision을 이용하려면, 발급받아서 위치.

ㆍgoogledrive.json: [번역]구글 기계 번역, [OCR]웹기반-구글을 이용하려면, 발급받아서 위치.

ㆍchromedriver.exe: 모든 "웹기반" 기능을 이용하려면, 다운받아서 위치.

유저 홈 경로의 이용 상태. (설정 창에서 저장소 버튼을 누르면 바로 이동 가능)

ㆍcredential_GDrive: Google 본인 앱 인증 토큰을 저장하고 있음. 이것도 만료되거나, 지우면 다시 인증을 받게 됨.

ㆍoption_TransNOCR: 단축키, 이용하던 구글 드라이브 문서 및 폴더 정보, 번역 API 인증키 정보를 저장함.

ㆍ이미지(.png) 파일: [OCR]웹기반-구글 이용시, 잠깐 로컬 이미지 파일을 여기에 두었다가, 구글 드라이브에 올리고 즉시 영구 삭제.

jre 폴더 내부 예시.

 

 


 

Qt로 새로 만들기 전에, Java로 만든건 Java의 장점(OS 유연성)을 따라,

Jar도 올렸습니다.

OSX 환경에서 테스트해보았는데, GUI 방식이 다르므로 녹색 미리보기가 안되는 것..은 큰 문제도 아니므로 생략.

최근 High Sierra 기준으로 실행해보니, 약간 애로사항이 있어서

Mac을 위한 추가 설정을 적용시켜 뒀습니다.(Windows에서도 적용되지만)

chromedriver와 googledriver.json은 TransNOCR.jar 옆이 아니라도,

유저홈/TransNOCR에 두면 여기를 먼저 인식합니다.(설정에서 저장소를 누르면 열리는 디렉터리)

환경변수는 환경변수를 설정했던 shell 기준으로만 적용되는 것 같아서,

더블클릭하는 Jar Launcher.app 방식이 아닌, 터미널에서 쉘명령어로 java -jar [JAR경로]로 실행해야 환경변수가 먹는 것 같습니다.

Jar Launcher.app은 Jar 옆의 파일들을 제대로 경로로 인식하는데,

쉘명령어는 그렇지 않아서 저장소에 두어도 인식되도록 추가설정을 둔 것입니다.

(Jar Launcher.app은 뭔 shell로 돌아가는진 몰라도 환경변수를 인식 못 함. 미쳐버려.)

(결국 환경변수도 다른파일들도 같이 쓰려면 저장소에 기타 파일을 두고 shell 명령어로 실행해야 함;;)

 

제 Mac이 2012-late라 아주 오래된 녀석이기 때문에 속도가 많이 느린 관계로,

웹기반 번역의 실행이 잘 되지 않는데, 속도 문제인지 headless모드 문제인지는 모르겠습니다.

(웹 OCR은 잘 되더군요)

Mac에서 이미지에서 문자 추출(Google Cloud Vision, 웹기반),

번역(Papago, 구글 기계, Kakao) 모두 잘 되는 것으로 확인했습니다.

Windows와 달리 그래픽 방식이 다르기 때문에, 구간 녹색 미리보기나 플로팅 번역은 되지 않습니다.

(플로팅 번역은 투명한 배경에 글자만 뜨는 그래픽 형태가 Mac에서 돌아갈 것이라고 기대조차 하지 않았습니다..)

 

웹기반 도구와 플로팅 번역은 나중에 추가된 기능들인데,

Windows가 아닌 OS에서 제대로 돌아가지 않을 것을 예상했으나 그대로 추가한 것이라..;;

 


여담

더보기

Google의 Cloud Vision OCR API는,

문자 인식 뿐만이 아니라,

이미지에서 해당 문자가 이미지의 상대 위치로서 x, y만큼 떨어진 곳에 있는지도 알려줍니다.

(저는 그냥 전체 문자만 가져와서 사용했을 뿐)

 

즉, 이론적으로는

몇 초당 혹은 버튼 한 번으로

화면에 있는 전체 외국어를 실시간으로 번역하여 자막처럼 그 위에 덧씌어 보여줄 수도 있습니다.

게이머들이나 스트리머들에게 유용하겠죠?

이렇게 만들지 않은 것에는 이유가 있습니다.

 

하루 무료 제한량이 있는 API에서 요청횟수가 금방 동나버릴 것이란 점...

라이트 유저라면 하루에 1천장을 다 쓸 일이 거의 없지만,

이렇게 초당 무한정 요청을 보내면 금방 다 써버리겠죠.

돈이 굉장히 많은 분이라면 상관없겠지만..ㅎ

(그것도 아니라 문자추출이나 번역이 개인 고유 기술이라면 상관없지만,

Google, NAVER, Kakao의 빅데이터, 머신러닝에 비할 수 없을듯..ㅎ)

 

그래서 타협점으로,

영역 지정을 하면,

그 위치와 크기는 계속 기억하고 있고

(새로 지정할 수도 있지만),

단축키로 연달아 찍고 번역요청은 편하게 할 수 있도록 했습니다.

이러면 게임이라도 대화가 표현되는 곳이 변하지 않는다면,

연달아서 편하게 사용할 수 있습니다.

 

 

그렇다면 캡처한 영역 근처나 원문 위에 번역내용을 자동으로 쏘아줄 수는 있는가?

그건 딱히 요청량과는 상관이 없으니 큰 문제없이 가능은 합니다.

다만, 이 경우는 추출결과 원본대로 위치를 계산해야하기 때문에,

임의로 추출결과를 수정해도 반영하긴 힘들 수 있겠네요.

This

cat is yellow. 라면,

줄바꿈을 수정해서 This cat is yellow.로 번역 요청을 보내도,

화면에 띄워줄 때는 추출 결과 원본의 글자와 위치대로

이것

고양이는 노랗다.

정도로밖에 안 띄워질 듯...

(기대하는 "이 고양이는 노랗다."가 안된다는 소리.)

즉, 띄울 수는 있지만, 띄워지는 내용이

만족하는 퀄리티는 아닐 수 있다는 것.

 

(Windows로는 반투명창이나, 배경만 투명이고 글자는 또렷한 창 정도가 충분히 가능한데,

OSX나 Linux의 GUI로는 또 모르겠네요. 동시에 호환이되는 Style 적용방법이 있으려나..)

 

 

그리고

캡처영역이 좁을 수록(문자만 제대로 영역지정을 했을 수록) 문자 인식률이 좋습니다.

전체 화면일 수록 문자 추출 API가 오류를 일으킬 이미지를 포함할 확률이 높아지니까요.

괜히 속도도 느려지겠네요.

 

 

결국 이러한 이유로, 잡은 방향은 이렇습니다.

 

1. 영역 지정을 할 수 있도록

2. 그렇지만 연달아서 사용할 수 있도록 지정된 영역 위치와 크기는 새로 지정하기 전까지 계속 기억

3. 매 초당 반복하지 않고 단축키나 버튼으로 요청할 때만 (단축키는 프로그램 밖의 키도 인식)

4. 굳이 낮은 퀄리티를 무조건 믿고 화면에 띄우기보다는, 임의로 수정하여 번역요청할 수도 있도록

(+ 그럼에도 불구하고 플로팅 번역 기능을 추가하긴 했네요.)

 

 

API 요청량은 모두 개인에게 부과되니,

실시간 번역 버전이나 자막 버전을 만들 수도 있지 않은가?에 대해서는

 

맞습니다.

근데, 우선 가장 핵심목적인 "이미지를 번역한다."를 충족시키고 있고,

잘 쓰고 있기 때문에...ㅎ


향후 업데이트 방향

더보기

반영됨(다음 패치에 적용되어 있음):

 

 

진행중: 계속해서 코드를 다듬을 예정. 로딩 상태 표시 등의 문구들이 너무 난잡하진 않는지 두고 볼 예정.

웹기반 번역 도구에서 혹시 버그가 나진 않는지 계속 주시 중.

 

이제 굵직한? 떠오르는? 급한? 업데이트는 다 한 것 같음.

버그 제보나 피드백이나 아이디어가 떠오르면 또 진행할 듯.

 

 

생각만:

 

1. 플로팅 번역의 문제점은, 문장간 관계성을 알 수 없다는 것입니다.

예를 들면,

성능:

+10% 화염 속성 공격

+25% 빙속성 저항

인 경우와,

"랏슈, 물어와!" 나는 높이 원반을 던졌다. 그러자, 랏슈는 귀를 쫑긋

세우더니 이내 잽싸게 뛰어올랐다.

인 경우를 생각해봅시다.

 

첫 번째 경우는, 분명 한 문단 내에 속한 문장들이지만, 각 문장은 별개로 인식되어야 합니다.

두 번째 경우는, 문장을 합쳐서 번역하는 것이 품질면에서 좋습니다.

 

언어간 변환이 이루어지고 나면, 원문과는 문자 수, 단어 수, 띄어쓰기 형태, 조사 형태 등이 바뀝니다.

이어붙인 문장을 어떤 기준으로 다시 뗄 수 있을까요.

 

구두점으로 띄우기엔 그렇지 않은 경우가 많습니다.

게임에서 NPC의 대화라면, 표시창의 크기 문제로 3~4줄이 한 문장인 경우가 있습니다.

그러면 첫 째 줄에 다 표시되니, 원래의 형태와는 꽤 달라져 보이겠죠.

(첫 번째 경우처럼 구두점이 없는 경우도 있구요.)

 

이어 붙여진 문장의 문자 수 / 원래 문장 줄 수 로 비슷한 형태로 나누겠다고 생각해보면,

연관된 문장이었다면(두 번째 경우), 이상하게 줄이 끊겨도 대충 비슷한 위치로 띄워줄 수 있겠지만,

"랏슈, 물어와!" 나는 높이 원반을 던졌다. 그러자, 랏

슈는 귀를 쫑긋 세우더니 이내 잽싸게 뛰어올랐다.

첫 번째 경우라면,

성능: +10% 화염

속성 공격 +25%

빙속성 저항

같이 결과가 처참해집니다. 그래서 무작정 모든 문장을 상관없이 붙이긴 애매합니다.

 

결국 원형태를 위해 번역의 품질을 버리게 되는거죠. 플로팅 번역의 개성은 띄워주는 것이니까요.

번역 품질을 원한다면, 결국 일반 추출과 수정 후 번역이 현재는 답일 것 같습니다.

 

 

2.

Systran 웹페이지의 로딩 속도는 정말 느림.

초반 웹 크롤러의 로딩 시간 80%를 차지함.

번역 프로세스도 꽤 문제가 있음(아마 웹기반에서 프리징이 일어난다면 열에 아홉은 얘일 듯).

한국이 아닌 다른 지역에서 이 페이지를 로딩한다면 번역기가 제대로 동작 못할 확률이 아주 높음.

그럼에도 불구하고 품질이 좋다면 즐거웠겠지만,

품질도 제일 떨어짐ㅋㅋㅋㅋㅋ

그리고 hi 같은 짧은 단어는 자동 언어 인식을 못 함.

글자 수도 2000자로 제일 짧음.

그래도 다양성 때문에 두고는 있는 중...


플로팅 번역이 세로쓰기를 만나면

더보기

어지간하면 원래 위치를 비집고 튀어나갑니다.

튀어나갈 확률 95%.

거기다 '(', ')', '.', '!' 등 기호를 그대로 적을 뿐.

눕히는 것도 고려해봤는데, 생각할 것이 많아져서 중단.

예를들면, 이리와!!!!! 같은 경우, !를 계속 세어야 하나, !??!?!! 처럼 섞이면 어쩌나,

:) 같은 이모티콘은 어쩌나 등등...

 

사실, 가로쓰기도 튀어나가는데, PC는 가로가 더 긴 화면을 사용하는 경우가 많으니까 좀 더 커버할 수 있을 뿐.

번역은 알기 쉽게 풀어쓰는 경우가 더 많기 때문에 글자 수가 더 늘어나기 때문.

 

당장 "현록" 두 글자가 "검은 사슴" 네 글자로 늘어남.

특히 중국어, 일본어는 한자가 많으니까 튀어나갈 확률을 더 끌어올림ㅎ

 

 

Comments

잘못된 정보가 있다면, 꼭 댓글로 알려주세요(비로그인 익명도 가능).

여러분의 피드백이 저와 방문자 모두를 올바른 정보로 인도할 수 있습니다.

감사합니다. -현록

후원해주실 분은 여기로→