有時玩遊戲的時候總會遇上沒有本地化的遊戲. 總會碰到你不認識的單詞, 這時候可能會記下來上Google Translate 或者是用手機 Google Translate 利用 Camera 去翻譯. 所以就想到自製一個工具來遊戲內做翻譯工作.
構想要做的工作
- 擷取遊戲畫面
- 提取畫面中的文字
- 將文字作翻譯
- 翻譯好的文字顯示到遊戲畫面上層
工序
這專案是用 Windows Form Application (.Net Freamwork 4.5) 作開發.
所以都算很輕易找到想要的東西.
擷取遊戲畫面部份
擷取畫面參考了
https://stackoverflow.com/questions/1163761/capture-screenshot-of-active-window
為了做到在遊戲內叫我們程式接受 hotkey 背景工作, 參考了 Hook keyboard 的作法
https://stackoverflow.com/questions/604410/global-keyboard-capture-in-c-sharp-application
令程式可以透明工作加無邊框在程式上層工作都是很易找到我想要的
https://stackoverflow.com/questions/4314215/c-sharp-transparent-form
以上基本就完成了在遊戲內擷取畫面和用hotkey呼叫程式工作
接下來就是要提取畫面中的文字.
提取畫面中的文字部分
用到 OCR 技術,
當然一定會想到可以用 Google 的 Vision API 或是 Microsoft 的 Azure Computer Vision 去使用. 還有 OpenCV 和 Tesseract 的 OCR 之類的應用 API.
Google 和 Microsoft 都是要收費. 而後者 OpenCV 和 Tesseract 用的 dataset 好像識別得不太好. 最後再找找免費的 OCR.SPACE .
所以使用免費的 Free OCR API 來使用, 不過都有限制. 但相對 OpenCV 和 Tesseract 沒有訓練 dataset 來說識別算好. 人家訓練好吧. 當然可以之後有空試玩一下 OpenCV 和 Tesseract 針對遊戲/軟件做一些字型訓練應該會更加精準.
將文字作翻譯部份
這又會想到 Google 和 Microsoft 的 Translate 服務, 但這些都是收費服務. 當然你可以支付來使用相比免費有一定質素, 尤其是一整段句子的時間表演得很好.
最後都是找了免費的 API 去使用. 這次用 Yandex 的 Translate API . 不過他們中文只支援簡體中文.
成品
^ Night in the Woods 作試範
^ Bird Of Passage 作試範
不妨下載來試試!!