夏コミ及びPyCon Jp 2017に参加してきました

私です。どっこい生きてます。今更ですが、夏コミ及びPyCon Jp 2017に参加してきましたのでご報告エントリです。

夏コミはサークル参加で「Google Cloud Vision APIOCR結果を『日本語』にする技術」という件で新刊を発行しつつ、ゆゆ式合同誌の『ゆゆすき 4期』には「『OVA の絵柄は原作の何巻に似てるのか?』を深層学習で確かめる」というタイトルで4ページ寄稿させていただきました。

また、PythonのカンファレンスであるPyCon Jp 2017ではPythonで実現する4コマ漫画の分析・評論 2017というタイトルで30分のトークセッションをさせていただきました。

これらの資料を作る際に使用したJupyter notebookを公開しつつ簡単に説明をしていきます。

夏コミ:「Google Cloud Vision APIOCR結果を『日本語』にする技術」

4コマ漫画のデータ化をしていくにあたって、セリフの抜き出しをGoogle Cloud Vision APIOCRで行っています。縦書きの日本語に対して良い結果が得られますが、そのままで「日本語」として扱えるかというと微妙なので様々なクリーニングを行います。その手法について説明した本になります。

ただ、結果をそのまま使うと以下の点で問題があります。
- 文字ではない絵の部分が余計な文字として認識される
- 言語を指定しなくても日本語縦書きを認識するが、逆に横書きとして認識される場合もあって煩わしい
- 吹き出し外の手書き文字がの精度が悪い
- 上下で2つの吹き出しに分かれている場合、右上から下に向かって走査されるため、順番がおかしくなる
- 特殊なフォントでは文字列の誤検出になる確率が高い
- 傍線やリーダー点のような記号の区別精度が悪い

下2つはOCRそのものの性能ということで諦めますが、それ以外はプログラムでなんとかなりそうなので頑張ったというものです。方針は以下の様なものです

- ルールベースでとにかく余分なものを排除していく
  - 無効な文字の設定(例:英数記号のみ)
  - 横長の検出部を排除
  - 細すぎる検出部は除外文字(例:1, へ, ー等)以外なら排除
  - 吹き出し外の文字を判定して除外
- 吹き出しの結合
  - 吹き出し判定を行い、真ならそのエリア内の文字列を結合
  - 縦に吹き出しが分かれている場合も頑張る

以下が一般的な画像とOCR結果です

'野々原家\n独特の\n(ヘ\nなんか?\nあつやだ\n恥ずかしい!) e®\nし!\n家の事\n恥ずかしい\nし!\n'

これが上の処理を行うことで

1: 野々原家独特のヘなんか?
2: あつやだ恥ずかしい!家の事恥ずかしい!

のようなまあまあマシな日本語になりました。よかったですね。

コードはこちらのgistを参照してください。

ゆゆすき 4期:「『OVA の絵柄は原作の何巻に似てるのか?』を深層学習で確かめる」

毎年恒例になりつつあるサークルLavenderBlue様主催のゆゆ式合同誌である『ゆゆすき』に参加させていただきました。他の方がイラストや漫画を描かれている中、ドーンと文章が出てくるのはご愛嬌。

自分のサークルでは漫画に絞って4コマ×プログラミングをやっているので、こちらではフリースタイルということでアニメにも手を伸ばしてみました。執筆時期的に私が簡単なCNNを扱えるようになっていたのとOVAの発売があったことからこのネタを思いつきました。 f:id:esuji5:20170919153831p:plain
1巻から7巻まで、このように原作の絵柄が変化していくので、 f:id:esuji5:20170919153838p:plain
アニメのTVシリーズ(1,7,12話)及びOVAの絵柄がどこに近いのかを原作1~7巻までに分類しようという試みです。詳しくは同人誌の中身を参照してください。 コミックZINさんの店舗及び通販で委託されています。

コードはこちらのgistを参照してください。

PyCon Jp 2017: Pythonで実現する4コマ漫画の分析・評論 2017

昨年に引き続き、PyCon Jpでのトークセッションを行いました。Pythonのカンファレンスなのに4コマ漫画の話がたくさんでてくる変わり種トーク部門になります。4コマ漫画の分析・評論をプログラムで行うためには画像処理、機械学習、深層学習、自然言語処理(まだたいして使ってない)、分析等が扱えると良いのですが、Pythonならライブラリが揃っているので一気通貫にできるよ!というロジックでプロポーザル(こんな内容でトークするよという提案)を通していただけました。今年は100個以上のプロポーザルがあった中で、最初の選考である40個に選ばれたので、いい具合に需要を喚起できたのかなと思いました。 内容は、上記の「Google Cloud Vision APIOCR結果を『日本語』にする技術」に加えて、人物検出をdlibでやったけどうまくいったかよくわからんねという話、人物分類をCNNでやってみたけどデータが少なすぎてどうにもならなかった話、それにかこつけてゆゆ式を布教してきたという感じです。

コードはこちらのgistを参照してください。