プログラミング・動画編集 備忘録

プログラミングや動画編集についての備忘録です

The Elder Scrolls: Arena の日本語化 - 6(類似度から引く)

前回

NPCの仕組みについて少し調べた。
ともかくもNPCの名前などや会話のパターンが複数あるため、辞書化するのは無理そうなのと、PCOTで十分な認識で翻訳できるので、この辺はPCOTを利用してしのごうかと思う。
rrryutaro.hatenablog.com

今回

ゲームデータからテキストが抜き取れるものなどや、マニュアルに記載のあるものなどを登録しておいて、検索して翻訳結果を確認する簡単なサポートツールをこちらの回で作成している。
rrryutaro.hatenablog.com

翻訳情報はゲームをプレイしつつ貯めていく予定だが、仕組みが把握できれば全部まとめてプログラムで翻訳情報を作る事も出来るかと思う。
ただ、やはり英語部分を検索するのはちょっと手間がかかる。
そこで、元の英語の文字列とOCRした結果の文字列との類似性を調べて、類似性の高い翻訳結果を出す仕組みを用意することにした。
というのも、ちょっと調べたら見事欲しい情報そのものの素晴らしい記事を見つけた。
kagasu.hatenablog.com

NuGetにてパッケージ追加して数行のコードで実装できてしまうのだから、パッケージの制作者にも感謝し、この情報を記事にせて下さっているkagasuさんにも感謝します。

類似度をチェックして翻訳結果を表示する

PCOTの存在を知って、以前作って放置していた最初のツールを利用する。
rrryutaro.hatenablog.com

クリップボードに画像がコピーされたら画像として保存して、TesseractにてOCRして、翻訳するというもの。
ただ、今回はとりあえず翻訳する部分はいらないのでOCRした結果の文字列と、翻訳情報の文字列との類似性を取得する部分を追加する。
翻訳情報といっているのは次のようなもの。

    {
      "no": 1,
      "question": {
        "eng": "On a clear day you chance upon a strange animal, its leg  trapped in a hunter's clawsnare. Judging from the bleeding it will not survive long. Do you:\n\na) Draw your dagger, mercifully ending it's life with a single thrust?\nb) Do not interfere in the natural evolution of events, but rather take the opportunity to learn more about a strange animal that you have never seen before?\nc) Use herbs from your pack to put it to sleep, then free it from the clawsnare and take it somewhere where it can be safe, knowing that in doing so you will probably deprive a hunter and his family of sustenance?",
        "jpn": "ある晴れた日、あなたは猟師の爪に足を挟まれた奇妙な動物に遭遇した。出血から判断すると、長くは生きられないだろう。あなたはどうしますか?\n\na) 短剣を抜き、一突きでその命を憐れみながら絶つ?\nb) 自然の成り行きに干渉せず、むしろ今まで見たことのない奇妙な動物について学ぶ機会を得るか?\nc) 荷物の中の薬草を使って眠らせた後、爪とぎから解放して安全な場所に連れて行く。そうすることで、おそらく猟師とその家族の糧を奪うことになるとわかっているか?"
      }
    },
    {
      "no": 2,
      "question": {
        "eng": "One summer afternoon your father, Talin, gives you a choice of chores. Would you rather:\n\na) Work in the forge with him casting iron for a new plow?\nb) Gather herbs for your mother who is preparing dinner?\nc) Go catch fish at the stream using a net and line?",
        "jpn": "ある夏の日の午後、あなたの父、タリンはあなたに家事の選択肢を与えました。あなたはどちらを選びますか。\n\na) お父さんと一緒に鍛冶屋で新しい鋤のための鉄を鋳造する仕事をしますか?\nb) 夕食の準備をしているお母さんのために薬草を集める?\nc) 小川で網と糸を使って魚を捕りに行く?"
      }
    },

こちらはキャラクター作成時の質問内容。
例えば次の画面にて画面のキャプチャをクリップボードにコピーする(Alt+ PrintScreenを押す)と、ツールにて画像を保存して、OCRを行い、上記の翻訳情報の英語と類似する結果を表示する。(キャプチャしてから、2~3秒程かかる)


f:id:rrryutaro:20220310235246p:plain

f:id:rrryutaro:20220310235254p:plain

ちなみに、キャプチャしたものは「キャプチャ」タブに表示される。(あらかじめ指定した保存先にファイルとしても保存されている)
画面上では2値化して表示しているが、保存されているファイルはキャプチャした時点での状態。
f:id:rrryutaro:20220310235430p:plain

今の所補正は固定値で2値化しているだけだが、認識が悪い様なら改善していこかと思う。
またついでの機能として、ゲームのセーブデータ(マップ情報など含めて全て)を保存&復元する機能を用意した。(ファイルコピーするだけなので)
セーブデータは10個までな上、ログ情報など古いものは消されてしまうので、色々とデータを取っておきたい場合に便利だと思う。
なので、このツールは翻訳+ゲームを遊びやすくするものにしていければと考えている。
f:id:rrryutaro:20220311000025p:plain

動画にするとこんな感じ。
youtu.be