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

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

The Elder Scrolls: Arena の日本語化 - 2

前回

それなりに文字の読み取りはできるが、まともに遊べる程ではないことがわかった。
rrryutaro.hatenablog.com

今回

フォント更新Modの導入

フォントを見やすくするModがあるためこれを導入する。
TES Arena ReFonted at The Elder Scrolls: Arena Nexus - Mods and community

ファイルをダウンロードして、Arenaのインストール先にフォント用のファイルを上書するだけ。
こんな感じに変わる。

f:id:rrryutaro:20200814225425p:plain
Arenaのフォント変更前
f:id:rrryutaro:20200814225517p:plain
Arenaのフォント変更後

フォント画像を学習させる

3年ほど前にこんな記事を書いているので、今回も同じツールを使ってみる。
qiita.com

ダウンロードは次の場所から、ダウンロードページに飛んで[Files]タブのjTessBoxEditorをクリックする。
vietocr.sourceforge.net

直リンクだとこちら。
VietOCR - Browse /jTessBoxEditor at SourceForge.net

この記事作成時点では次のファイルをダウンロード。

jTessBoxEditorFX-2.3.1.zip	2020-07-05	86.0 MB

適当に解凍して、jTessBoxEditorFX.jarダブルクリックで起動できる。

レーニング画像の作成

以前の記事ではフォントデータからトレーニングデータを作成したが、今回は画像から作成する。
レーニングに使用する画像はTiffで作る必要があるようなので、Gimpにてスクリーンショットとして保存したpngファイルを変換する。
例えば次のような画像がある。

f:id:rrryutaro:20200814230625p:plain
レーニング画像1

ここから必要な部分を切り取る。

f:id:rrryutaro:20200814230717p:plain
レーニング画像2

さらに、メニューの[色]-[しきい値]にて2値化して、Tiffファイルとして保存する。(ここではC:\tesseract\trainingとする)

f:id:rrryutaro:20200814230847p:plain
レーニング画像3

jTessBoxEditorFXの使い方

まず、[Trainer]タブ内の[Training Data]のフォルダにトレーニング画像を配置したフォルダを指定する。(赤枠部分)
[Language]にトレーニングデータの名称を付ける。英語のトレーニングデータがengなので、ここでは後ろに枝番を付けてeng01とした。(青枠部分)
緑枠部分のコンボボックスから[Train from Scratch]を選択して[Run]ボタンをクリックする。

f:id:rrryutaro:20200814231919p:plain
jTessBoxEditorFX - Trainer

これで、[Training Data]に配置した画像からトレーニングデータが作成される。
この際、1文字分の画像の座標とサイズそしてそれに対応する文字コードが定義されたボックスと呼ばれる情報も作成される。
[Box Editor]タブをクリックして、[Open]ボタンからトレーニング画像を選択すると次のように表示される。

f:id:rrryutaro:20200814232414p:plain
Box Editor

ほとんどの文字の座標とサイズと対応する文字コードは正しく認識されているが、一部座標やサイズ、文字コードが合わないものもあるので、エディターを操作して修正する。
この辺は実際に操作してみれば大体わかると思うので今回は詳細は省略。

この後、[Trainer]タブにて先の度の緑枠のコンボボックスから[Train with Existing Box]で[Run]すれば、修正したボックスの内容から再度トレーニングデータが作成されると思われるが、更新されない場合もあり、その辺がまだよくわかっていない。

既存のデータと学習させたデータで認識結果を比較

最初のスクリーンショットの画像で確認する。(上記のトレーニング画像1)
なお、これらの結果は前回作成したツール上から認識させた結果から、前後の行の余計な認識を省いたもの。
純粋にトレーニングデータを確認するなら、jTessBoxEditorFXから[Trainer]タブの[Validate]ボタンから画像を選択して確認する方が早いと思う。

正解例はこちら。

One summer afternoon your father, Talin, gives you a choice
of chores. Would you rather:
a) Work in the forge with him casting iron for a new plow?
b) Gather herbs for your mother who is preparing dinner?
c) Go catch fish at the stream using a net and line?

ある夏の午後、あなたの父、タリンはあなたに選択肢を与えます
家事の。 むしろあなたは:
a)新しいプラウのために鉄を鋳造している彼と一緒にフォージで働いていますか?
b)夕食を準備しているあなたの母親のためにハーブを集めますか?
c)ネットとラインを使って小川で魚を捕まえに行きますか?

既存のデータでの認識結果

flne summer afternoon uour father. Tnlin. giues uou a choice
of chgres. Mould quu_rn1t|er= _ _
' a) blur}: In the forge with him cnshng Iran for _n new plow?
b) Gather herbs for our mother Lyho Is preparing dinner?
' :1 [So catch fISh n? f a stream usmg a net and line?

夏の午後、父親。 Tnlin。 giues uou a choice
chgresの。 金型quu_rn1t | er = _ _
'a)blur}:彼との偽造で_n新しいプラウのためにイランをcnshng?
b)母のためにハーブを集めるリホは夕食を準備していますか?
':1 [だからfISh nをキャッチしますか? fストリームはネットとラインを使用していますか?

学習データでの認識結果

One summer afternoon gour father, Talln, glues gou a cholce
of chigres. Would igou, rather: , ,
, a) Work in the forge with him casting iron for A new plow?
h) Gather herhs for our mother who is preparing dinner? 
, c) Go catch fish at t e stream using a net and line?

ある夏の午後、グルの父、トールンが接着剤を塗る
チグレの。 むしろigou:、、
、a)新しいプラウのために鉄を鋳造している彼と一緒にフォージで働いていますか?
h)夕食を準備している私たちの母親のためにハーブを集めますか?
、c)ネットとラインを使用してストリームで魚を捕まえに行きますか?

個別のアルファベットでのトレーニングデータ

実は当初、一通りスクリーンショットを撮って、そこから1文字ずつアルファベットをピックアップして次のような画像を作成した。

f:id:rrryutaro:20200814234058p:plain
各アルファベットのトレーニング画像

こちらでの結果は次の通り。

Dne summer afternoon your father, Talin, gives you a choice
of chpres. Would you. ratbem , ,
e a) Work ln the forge wlth hlm castlng lron for .a new plow?
b) Gather herbs for our mother who ls preparlng dlnner?
e c) Go catch flsh at t e stream uslng a net and llne?

夏の午後、父親のタリンがあなたに選択肢を与える
chpresの。 お願いします。 ラトベム、、
e a)新しいプラウのforge wlth hlm castlng lronで作業しますか?
b)準備をする母のためにハーブを集めますか?
e c)ネットとllneを使用してストリームでflshをキャッチしますか?

結果について

それなりに言わんとすることはわかるのだが、正直まだまだ使い物にならないレベルで困る。
認識させる画像を2値化しても大差が無かったので補正しても効果が薄そう。
ただ、まだ jTessBoxEditorFX を十分に使いこなせていないだけかもしれないので、その辺を調べてみる価値がありそう。

今後について

  • もう少し jTessBoxEditorFX を使い込んでみる
  • 誤変換しやすい単語は単語辞書を作って変換するなどの仕組みを考えてみる