最高のおうち時間を
外出自粛で有り余るおうち時間を、私はソース二度づけ絶対許さないマシンを作ってすごした。何の役にも立たないが、何もしないよりはマシだと思う。次は何を作ろうか。串カツのシルエットだけで中の具材を当てるプログラムはどうだろう。中の具材が分からなくなった時にちょっと役立つなぁ。
ソニ禁判定のソースコードはここに公開しました。ソースだけに。
大阪の串カツといえば、ソースの二度づけ禁止である。これはお客さんひとりひとりがルールを守ることで成り立つ文化だ。しかし、なかにはルール違反をしてしまう人がいるかもしれない。そこで、今回はソースの二度づけを物理的にできないようにするマシンを作った。
串カツ屋では、「ソース二度づけ禁止」と大々的に書かれている。いちおう説明すると、これは、衛生面の配慮からである。ソースはお客さん同士の共用物であり、一度口をつけた串をもういちどソースにつけてしまうとソースに自分の唾液が付着してしまう。
大阪では串カツの看板よりも「ソース二度づけ禁止」の看板の方が大きく書かれていることがあり、規律の厳しさがうかがえる。
ただし、ときにルールを違反してしまう人がいるかもしれない。そうするとお店としてはソースをまるごと取り換える必要が出てきてしまい、多少なりとも損害となる。そこで提案したいのが、「ソース二度づけ絶対させないマシン」である。
カメラでソース二度づけを察知し、すばやくソースにフタをかぶせる。これは、物理的にソース二度づけ禁止を実現するマシンだ。長きにわたり人々の規律遵守と啓蒙活動によって育まれてきた「ソース二度づけ禁止」文化を、技術で物理的に強制してしまうのは野暮な話ではあるが、けっこう頑張ったのでもっと見てください。
私がソース二度づけ絶対させないマシンを考えついたのは、半年以上も前のことである。ちょうど私が串カツ田中にどハマりしていたころであり、週1で(多い時は週3で)串カツ田中に通っていた。
串カツ田中ももちろんソース二度づけ禁止である。ただし、串カツ田中ではお客さんごとにソースを取り換えているため、ソース二度づけをしても他のお客さんに衛生面で迷惑がかかることはない。じゃあなぜ?と言われると、「大阪の食文化を体験していただきたい」とのこと。串カツ田中のWebサイトの「よくあるご質問」のところに書いてあった。
二度づけ禁止。二度づけ禁止。外の看板にも店内の壁にもトイレにも「二度づけ禁止」と書かれている。そんなに言うなら物理的に二度づけできないようにすればいいのではないか。こうして着想した「ソース二度づけ絶対させないマシン」が、半年経ってこのたび実現した。時間がかかった理由は、なんか大変そうで手をつけられなかったからだ。気合を入れたら2日で完成した。外出自粛の中、ちょうどいい趣味になった。
串カツ田中への想いが強くて前置きが長くなったが、ここからはソース二度づけ絶対させないマシンができるまでの様子を記していく。
まず、作る前に紙に概要を書いて整理しておく。
ソース二度づけ絶対させないマシンの開発ネームは「ソニキン初号機」である。私が初めて「ソニキン」(正確には「ソニ禁」)という言葉を見つけたのは、なぜか大阪ではなく、函館のお店である。
「ソニ禁」と検索してもこのお店しか出てこないので、店主が勝手に言っているのだと思う。すばらしいセンス。
さて、ソニキン初号機の動作をあらためて図で説明する。
実は、似たようなことを以前やったことがある。「坐禅で動いたら棒で叩かれるやつを全自動化する」だ。
今回も、判定まではノートPCで行い、サーボモーター動作はRaspberry Pi と呼ばれる小さいコンピュータで行う。判定もRaspberry Pi上でできたらRaspberry Piだけでシステムが完結するのだが、今回は処理性能を重視しこのような形をとった。
さて、全自動坐禅棒叩きマシンとの最大の違いは、「二度づけをしようとしているかどうか」の判定、すなわち、ソニ禁判定だ。これは今回最も苦労すると思われたポイントである。カメラから取得した画像からどう判定するか。これにはニューラルネットワークと呼ばれるものを使うことにした。機械学習で用いられるモデルの一つで、めちゃくちゃ省略して言うと、画像分類と相性がいい。
画像を分類するプログラムは探せばいくらでも見つかるが、今回はやりたいことにドンピシャな「りんごとオレンジの画像判定プログラム」を参考にすることにした。実用するのは初めてなので、勉強しながらの実用である。
これを今回のソニ禁判定に応用するならば、こういうことになる。
しかし、現実は甘くなく、100%正しく判定してくれるわけではない。少しでも精度を上げるには工夫が必要である。二度づけをしようとしている場合とそうでない場合で、最も差が出るのはどこか?答えは、串先である。二度づけをしようとしている場合は串先が見えるが、そうでない場合は串先が見えない。そこで、入力画像を加工して、串先だけに着目するようにしている。
串先に着目するには、動きのあった領域の右上を抜き出せば良い。
今回は「教師あり学習」のため、コンピュータに覚えさせるための学習データを事前に用意する必要がある。すなわち、できるだけたくさんの画像を用意し、「二度づけをしようとしている画像」とそうでない画像に手動で分類しておく必要がある。
この動画から抽出した画像を一個一個手動で分類し、学習データとする。
分類対象の画像は887枚あった。手動分類支援プログラムをもってしても、これらの画像を手動で分類するのに1時間かかった。過去の自分が串カツを食べている映像を凝視しながらポチポチと「y」と「n」を押すだけの1時間。想像以上に過酷なものだ。ひたすらに食欲が湧き出るし、私は何をやっているんだろうという気持ちになる。今日中に絶対に完成させて串カツ食べてやるからな。
分類が終わったので、いよいよソニ禁判定プログラムを動かす。と言っても、先ほどの「りんごとオレンジの画像判定プログラム」の画像を差し替えるだけだ。とりあえずパラメータは変更せずそのままにしておく。詳細は省略するが、887枚の画像を学習用とテスト用に分け、学習用画像で学習してテスト用画像で検証したところ、精度は82%だった。思ったよりいいぞ。
ソニ禁判定を動画でも試す。過去に録画していた別の動画を利用し、ソニ禁判定が出たらその旨を画面に表示するようにした。ただし、二度づけじゃないのに二度づけと判定してしまうミスを減らすため、直近20フレームで7回以上ソニ禁判定が出た時のみ、画面に表示するようにした。
ここまで来たら、あとはフタを作るだけ。簡単な工作である。
さっそく試してみる。さきほどの動画の場合、こんな感じ。
やった~。自然と笑みがこみ上げる。念願の夢が叶った瞬間だ。
せっかくなので、過去の動画じゃなくPC付属のカメラをもとに、その場でソニ禁判定をしたい。そこで、串カツ田中でテイクアウトした串をソニキン初号機の前で食べ、その場で二度づけを禁止してもらう。
そもそも自宅で串カツを食べるのであれば、誰からも怒られないのではないか。好きなだけ二度づけすればよいではないか。そんな悪魔のささやきが聞こえてくる。しかし、食文化を守るためにも、二度づけは絶対に許されない。そのためのソニキン初号機なのである。
こうしてできたのが冒頭にご覧いただいた動画である。
少しでも判定精度を上げるため、学習時の映像と同じジャケットを着ています。どうだ、ずるいだろう。
ここまでうまくいったシーンばかり載せているが、ときどき、うまくいかないときもある。
ちゃんとした数値はとってないが、ソニ禁判定の精度は体感で7割ぐらい。学習データを増やしたりパラメータを調整したりすれば多少は精度があがるかもしれない。
外出自粛で有り余るおうち時間を、私はソース二度づけ絶対許さないマシンを作ってすごした。何の役にも立たないが、何もしないよりはマシだと思う。次は何を作ろうか。串カツのシルエットだけで中の具材を当てるプログラムはどうだろう。中の具材が分からなくなった時にちょっと役立つなぁ。
ソニ禁判定のソースコードはここに公開しました。ソースだけに。
▽デイリーポータルZトップへ | ||
▲デイリーポータルZトップへ | バックナンバーいちらんへ |