ちょっと科学勝利してくる
2015年4月24日 / 未分類
「OCRでULのRストとかテキスト化出来ねぇかな!」
↓
「出来ねぇ!クソァ!!」
と某氏がなってらしたのでちょっと挑んできた。
勝利したけど微妙に敗北してるので顛末を記録。後続の参考になれば。
実験はルディアR1で行いましたが、全体絵やストーリーの分かる画像は載せていません。
「画像変換とかどんなもんよ」ってことで一文だけ使っていますが、
その画像や変換後テキストを見られる画像はリンクを辿って見られるようにワンクッション置いてます。
ネタバレ回避班も安心の構え!
■使うもの
・スクショソフト
・画像編集ソフト
・googleアカウント
■大雑把な流れ
1.文字入りと文字無し、両方の画像を用意
2.減算合成して文字だけの画像を作成
3.google driveに移動、
「アップロードしたファイルをGoogleドキュメントエディタ形式に変換します」にチェックし、
2の画像をアップロード
4.google docsで開くと画像の下にテキスト変換されたものが出てる
■スクショ詳細
僕が使ってるのは窓フォト。
スクショの位置とサイズを登録しておけるのが、Rスト撮影において非常に便利。
ただ、シャッタースピードがやや遅い(気がする)ので、これだと文字無し画像の撮影が追いつかない。
文字無し画像は文章切り替えの際の一瞬を狙わねばならないので。
ということで、文字無し画像だけwindows7付属のSnipping Toolを使用。
綺麗に720*544ですぱっとは切れないけど、後でトリミングしてサイズを合わせる。
トリミングにはBTJ32を使ってるけどまぁ説明は割愛でいいよね!
そもスクショ撮影方法は明らかに今回メインじゃねぇ。
■画像編集詳細
手元にあったAzPainter2を使用。
まぁレイヤーモードに「減算」があればアズペじゃなくてもいける。多分。
1.アズペを2窓起動
2.片方で[文字無し.png]、もう片方で[文字入り.png]を開く
3.どっちかを全画面選択、右クリックして[他へ出力→クリップボードなんちゃら]。
クリップボードなんちゃらは2つあるけど違いが僕には分からぬ どっちでも出来たよ
4.もうどっちかで新規レイヤ作成、右クリックして[他から貼り付け→クリップボードなんちゃら]。
これで文字入りと文字無し、2枚の画像が重なった状態になった筈。
5.文字無し画像のレイヤが上にある状態で、文字無し画像のレイヤモードを「減算」にする。
これで黒地に(ほぼ)白文字の状態になった筈。
6.レイヤ統合し、上部メニューバーから[フィルタ→カラー→ネガポジ反転]。
白地に黒文字になる。ついでに文字送りの十字架も白で塗りつぶして消す。
こいつをOCRに突っ込むので保存。
どんなもんかということで画像も載せておくと、こうなる(一応ルディアR1バレ)。
すっきり!
■OCR詳細
というかOCRやったこと無かったんですが。
ぐぐったら「google driveとgoogle docsで出来るよ」とのことだったのでそれで。
1.google driveへ移動
2.画面右の歯車アイコンから[設定]ウィンドウを開く
3.「アップロードしたファイルをGoogleドキュメントエディタ形式に変換します」にチェック、[完了]で閉じる
4.画面左の赤い[新規]から[ファイルをアップロード]。
これもしかしなくても変換全部済ませてればフォルダごとアップロード出来るのかね。楽だな。
5.アップロードされたファイル名の上で右クリック、[アプリで開く→Googleドキュメント]。
Google docsが新窓で開かれるので、移動すると画像の下にテキスト変換されたものが出てる。
変換例として、ルディアR1の1ページ目全文。全力でネタバレだから回避班はリンク踏まないようにね。
こんなん。
この通り、改行も対応されてる。
ただし文中で改行された場合は半角スペースが入る、が、まぁ使用には十分堪えるでしょう。
認識精度は不明だけど、使い方調べつつ見た限りでは割と高いっぽい?
■難点
というか白地に黒文字まで変換すりゃ大体のOCR機能は読み取ってくれんじゃねって思う。
いや今回初めてやったから、google driveのしか知らんのだが。
スクショは既に撮ったものがあるとして、それをひたすら減算合成するのが、実に手間である。
これを一挙に解決する手段があれば全ストーリーテキスト化もいけるんだが。
手入力に比べりゃ早いかっつーと現状は…どうだろう…
スクショの規格が統一されてなければまずそこからだから、しち面倒臭いことになるな!
ということで僕からは以上です。
テキスト化ね…考えるよねやっぱり…
OCRからの科学勝利を目指す方の助けになれば幸いですはい
減算合成のあたり:imagemagickでbat処理できる。
windowsでimagemagickを入れるにはどうするのみたいなのは色々あると思うので略。
compositeで -composeを使って文字無しとの差分を吐かせる。
mogrifyで -negatesすると反転も自動。
私は反転前にconvert -threshold 10で二値化してて、ついでに最後にconvert -appendで一枚のマッチ棒に合成してた(ページ送りめんどいから)
しかしOCRするにもgoogle driveもevernoteも精度微妙すぎたし、私は「スクショを精密に撮って文末カーソル処理する」部分があまりにもめんどくさいと思って諦めたよ
(※テストにはエヴァR1を使っていた)
>十七夜
ImageMagickの使用スキルを習得しようと色々ググったり試行錯誤しましたが投げました(しろめ)
減算/色反転/垂直結合 をした画像が出来れば良いんだけど、
ImageMagickで出来るみたいなんだけどぼくにはできない 理解が たらない
OCRにあたり精度微妙なのは、機械的に処理する以上しゃーねぇしなぁ…と思ってる。
原文にすらミスがあるのだしそれは見つけ次第修正入れてバージョンアップするしか無くね?
あとカーソルについて、カーソル処理しないでOCRに突っ込んでみたけど、
文字として認識できなかったらしく何も吐かなかった。
何も吐かないなら問題無いし、誤字を吐いたとして適宜修正すれば良いのではと思う。
精密なスクショ、そんなに面倒かなぁ…
全画面スクショ撮ってトリミングしてるならそら面倒だろうけど、
最初からサイズと位置指定して撮れる窓フォト便利よ…
[…] ■前もやんなかったっけ 前回は、テキスト出力可能な段階にもっていく道筋は見えましたが、その道筋が効率悪すぎるという結果でした。 が、友人の知恵を借りて、ImageMagickによる画像の「減算→色反転→垂直結合」処理に成功し、 その「画像処理めんどすぎる」が割と解決。 ということでちまちま記事を分けて、「どうやるの」を書き連ねていこうかと思います。 あくまで「僕はこうやってる」なので、もっと良いやり方は色々あるんじゃないかね。 各々改善していってね!改善はエンジニアリングの基本って誰かが言ってた。 読みつつ実際にやってみれば分かるよう書いてくつもりだけど、 もし「なるほどわからんkwsk」ということであれば適宜詳細を書き足すかと思います。 ■お品書き #0……概要(←今ココ!) #1……窓フォト & SnippingToolによるスクショ + BTJ32によるトリミング編集 #2……ImageMagick & GoogleDriveによるOCR変換 ■大体の流れ 1.Rストーリーのスクショを用意します 2.画像を処理して文字のみの画像を作り、OCRに突っ込んでテキスト出力させます 1において。 サイズと保存形式が統一されたスクショを用意します。 ストーリーを撮影したものの他、文字の無い画像も必要となります。 2において。 文字入り画像を文字無し画像で減算処理をし、文字のみの画像を作ります。 黒背景に白文字の画像となるので、これに色反転処理をし、白背景に黒文字の画像を出力します。 更に各ページを垂直に結合し、OCR機能を使うにあたり画像1枚で済むようにします。 そしてOCR機能を持つ何らかのsomethingに、処理を終えた画像を突っ込んでテキストを出力させます。 ■現状ある問題 GoogleDriveのOCR機能を使いましたが、テキストの精度が微妙です。 何故かタイトルを読み取ってくれなかったり、あとかぎ括弧の”」”を読み取らないことが多いような。 出力後、さっと読み返して適宜手入力で修正を加える必要があります。 まぁOCR機能に手を加えられるような知識はマジで無いので…これ以上の改善は望めないかな… 考察はなるべく最新の原文(ゲーム内のRストーリーそのもの)をあたること、 スクショやテキストはあくまで検索用などの補助として、と割り切るしか無かろうかね。 […]