読者です 読者をやめる 読者になる 読者になる

ゆゆ式を無限に楽しみたかった話 〜 ゆゆ式 Advent Calendar 2014 20日目 〜

ある日のこと、後輩たちがこんなことを言いました。

ゆゆ式のコマをランダムに並びかえたら無限にゆゆ式が楽しめるのでは?」

真面目に計算してみると、10の15乗くらいの組み合わせができることがわかりました。
この記事ゆゆ式アドベントカレンダー20日目は、そんな無限にゆゆ式をたのしむためのシステムを真面目に作ってみた話をします。

コマの切り出し

漫画のコマを並び替えるためには、コマがバラバラな画像として存在していなければなりません。
なので、まずは自炊で電子化された書籍をコマの線にそって切り出していく処理を自動化することにしました。

f:id:non_117:20141220172013p:plain

上の図がふつうの4コマの1ページですね。これの枠線を識別して、1ページから8枚のコマを取り出してくる方法を考えます。

ハフ変換で直線検出

OpenCVという画像処理のライブラリに直線を検出するツールがあったので、まずこれを試してみました。

f:id:non_117:20141220172041p:plain

が、結果はこのとおり。

漫画には直線がたくさん含まれており、ノイズだらけでなかなか上手くいきませんでした。確かに枠の直線も検知されていますが、複数の線が検出されたりして微妙ですね。パラメータ調整をがんばったらそのうち上手くいきそうですが、あまりに面倒です。
よって、この方法はボツ。

ヒューリスティック導入

さて困ってしまい手も足も出ず放置することn日、天啓がひらめきました。

f:id:non_117:20141220173536p:plain

f:id:non_117:20141220173552g:plain

4コマの枠というのは、ページに対して水平に引かれています*1。なので、2次元の画像を縦(あるいは横)から眺めると、4コマの枠線は必ず同じ直線上に並びます。
そして、この直線上に並ぶ枠線は濃い黒色で、コマの内側は灰色、コマの外側は白色になります。つまり、行列の縦ベクトルのように画像を一方向から見て画素値を足しあわせていき、画素値の平均値が255付近から急激に変化する箇所がコマの枠線になります。

 

抽象的な話でわけがわからないかもしれないので、実際にグラフを見てみましょう。

まずは縦方向から画素を足しあわせて平均値を求めます。

f:id:non_117:20141220172257p:plain

このグラフは横軸が画像の横方向のピクセル(座標)で、縦軸が画素値です。ちゃんと枠線の数だけ4つのピークが見つかるのがわかりますね?

同様に横方向も見てみます。

f:id:non_117:20141220172313p:plain

枠線の数、8つのピークがちゃんとありますね。

このように、画素を足し合わせるだけの簡単な処理で枠線の位置を見つけられることがわかりました。実際には、ピーク値をもっと急峻にするために微分や画像のフィルタ処理をしています。
そして、このピークの値で切り出すべき線を引いてみたのが次の画像です。

f:id:non_117:20141220172409p:plain

以上のように、画像を縦横から見て画素値が急激に変化する座標を見つければコマの枠線を見つけ、全てのコマを切り出せるようになりました。
実際には、ゆゆ式の凶悪なフォントによってノイズが発生したこともありましたが、数が少なかったので閾値の調整でなんとかなりました。

ゆゆ式ガチャの完成

さて、これでゆゆ式全6巻すべてのコマをひとつの画像として切り出してくることに成功しました。あとはそれらを並び替えるだけです。この処理は単純にゆゆ式DBからランダムに4つのコマを取り出してくるだけでした。@tyage, @pastakくんが実装してくれたのが次のようなシステムになります。

 

f:id:non_117:20141220174522g:plain

ページを開くと、ランダムなゆゆ式画像が4つ表示されます。また、リロードするたびに4コマ?を生成するため、同じコマと出会うことはできません。一期一会です。

また、コマをクリックするとランダムでそこだけ入れ替わります。頑張ってガチャを回しまくればそれっぽいものもできます。

f:id:non_117:20141220172835p:plain f:id:non_117:20141220172843p:plain

 

これを作ってみた当初は皆頻繁にガチャを回していたのですが、なかなかおもしろい組み合わせは出てこなくてブームも下火になってしまいました。やっぱり原作が一番という結論でしょうかね。

 

以上がゆゆ式を無限に楽しもうとしたシステムの紹介です。

おまけ

話は脱線するのですが、このゆゆ式DBを作るさいに副産物的にゆゆ式の全台詞を書き起こしてIRC botにする計画が立ち上がりました。こちらの計画は、次のようなアノテーションツールを作るところからスタートしました。

f:id:non_117:20141220173024p:plain

1ページに切り抜かれた1コマが表示され、テキストボックスにその台詞や擬音語・擬態語を入力します。ショートカットキーを押すと次のコマに移動するものです。
また、キャラのタグ付けもすることになり、これもアノテーションツールになりました。

f:id:non_117:20141220173041p:plain

各キャラにショートカットキーが対応しており、キーを押すと選択されます。

このアノテーションを引き受けてくれたpossumさんですが、この作業に大いにハマってしまい、
ゆゆ式アノテーション無限に時間をつぶせる。レポート出すまで封印しないと……」

「短時間に過剰なゆゆ式を摂取すると体調を崩す恐れが」

「この前今日はここまでにしておこうって思ったけど結局その後も入力してたし吸引力強い」

などと言いながら3週間で全巻のコマの書き起こしとタグ付けをしてくれました。
このデータは今ゆゆ式のコマを文字列検索するシステムとして運用されています。

 

以上、ゆゆ式をきっかけに作ってみたシステムの紹介でした。当然の事ながらここで紹介したデータ・システムはインターネットで共有することはできません。もし作りたいという方がいらっしゃるなら協力しますので、そのさいはご連絡下さい。

 

*1:理想的には. 実際には傾いてしまうため、eTilTranを使って修正しました