「鏡よ鏡、世界で一番美しいのはだあれ?」をRaspberry Piで実現してみた

この記事はGeek Women Japan Advent Calendar 2017 14日目の投稿になります。

白雪姫で同じみの魔法の鏡。
「鏡よ鏡、世界で一番美しいのはだあれ?」
「それは女王様です」

ある日のこと、白雪姫を読んでいた娘(小3)が「それはママです!」っていってくれる魔法の鏡を作ったらいいんじゃない!といいだしたので、それは素敵だ!!と、作ってみました。

とはいえ、毎回「鏡よ鏡、世界で一番美しいのはだあれ?」と鏡に向かって話しかけるのも怖すぎるので(本当に魔女になるかもしれない)、

  • 私が鏡を覗き込んだら、「ママは今日も世界で一番美しいです!」
  • 娘が鏡を覗き込んだら、「娘ちゃん、今日も世界一かわいいですね!」

といってくれるようにしよう。

使った技術

システム構成図

f:id:electricSheep:20171209174713p:plain

動作の流れ

  1. 鏡を覗きこむと鏡につけたWebカメラ+OpenCVで顔認識
  2. 人の顔だと認識したら、画像を保存。
  3. Custom Vision Service APIに画像をPOSTし私か娘かを判定
  4. 判定された人物によって喋らせる内容を分ける

やったこと

  • 娘にそれぞれの技術の概要を提示してどう動かすかシステム構成図をかかせる
  • 娘に魔法っぽい鏡を作らせる
  • ラズパイにOpen CVのインストール
$ sudo apt-get install libopencv-dev
$ sudo apt-get install python-opencv

こちらの方法でインストールすると、OpenCVのバージョンが2になりますが、ver2でもまだまだ現役とのことなので、ラズパイにお手軽にインストールしたい方にオススメです!

  • OpenCVを使って顔を認識した際に画像を保存するコードをPythonで書く

  • あらかじめ、Custom Vision Service に娘と自分の写真をアップロードしてタグ付け、学習させておく。

  • Python からCustom Vision Service API経由で判別するコードをPythonで書く

結果をjsonで取得できますが、ちょっとはまったのが、結果の見方。 自分(mamaでタグづけ)の画像をAPIにPOSTした結果の数字の前の部分だけみると、yuiの方が数字が高いので、あれ?となったのですが、

  • mama:0.9998683
  • yui:1.96644261e-18

よくみるとyuiの方の数字は後ろに「e-18」とあった・・。限りなく0に近いってことですね。
で、この結果では画像が「mama」確率99% といってますね!

{
  "Id": "c5ead1d1-a446-40a1-995a-xxxxxxxxxxxx",
  "Predictions": [
    {
      "Tag": "mama",
      "Probability": 0.9998683,
      "TagId": "c282ba64-80d2-4550-a268-xxxxxxxxxx"
    },
    {
      "Tag": "yui",
      "Probability": 1.96644261e-18,
      "TagId": "b6f4e165-bd63-4112-b09e-xxxxxxxxxx"
    }
  ],
 }
  • Open Jtalkのインストール & 顔判定によってJtalkに喋らせるコードをPythonで書く
  • これらを全てを組み合わせる

完成!

f:id:electricSheep:20171210191427j:plain:w400

魔法の鏡というよりはラブリーな鏡になりましたが、娘がうまく花で隠してくれたのでwebカメラの存在もそんなにきになりません(本当か!?)

f:id:electricSheep:20171210191452j:plain:w400

早速娘が鏡を覗き込むと、
「むすめちゃん、今日も世界で一番かわいいですね!」
と鏡(の横にあるスピーカー)がしゃべったーー!

私が鏡を覗き込むと、 「ままさん、今日も世界で一番美しいですね!」 ╭( ・ㅂ・)و ̑̑ グッ !!

次の日、娘が鏡を覗きこむと

「むすめちゃんは、世界一のくいしんぼうですね」
と鏡はいいました(いたずらしてみた。)娘、大うけ。

そしてまた次の日、私が会社から帰ってきて鏡を覗き込むと、

「ママさん、いつもお仕事お疲れ様。ありがとう。」と鏡がいうではないですか。

むすめよ!とひしと抱き合っている時に、

「むすめちゃんにスイッチを買ってあげるといいことがありますよ」 と鏡から聞こえてきたのでした。

sleep使うとか、やるではないか・・・。
めでたし。めでたし。

感想など

  • 美しいとか、毎日言われ続けると本当に美しくなる説あるので、検証したい。が検証方法が難しい。
  • 鏡でも「美しいです」といわれるとなんとなく嬉しい。
  • Jtalkの声がおじさんなので、これを山田孝之の声にするとテンションもあがるかもしれない

Special Thanks!

今回実現するにあたり、PyLadies Tokyoの合宿でアイデアやCustom Vision Serviceをハンズオンで教えてくれた@まーや さん!
OpenCVソースコードをビルドする方法で何回か試し失敗したと話したら、圧倒的に簡単な方法を教えてくれた@Yabuくん!

ありがとうございました!!

明日は、一緒にRaspberry piもくもく会を運営している@yuzuafroさんです。お楽しみに!

raspberry-pi-moku.connpass.com