VR空間にインスタレーションを再現する試み

7月から足掛け4か月ほどかけて、とあるインスタレーション作品をVR空間に再現するという制作を行っていたのだが、先ごろやっと公開することができた。どうにかなるだろうとは思っていたけれど、なかなか大変で、そして楽しかったのでその記録を残す。

f:id:r_kurain:20201018092057p:plain
cluster 上の記憶のミライ

なにを作ったのか

札幌のミニシアターの代表であり、映像作家、美術家である、中島洋さんの作品 "記憶のミライ" のVR版を cluster というサービス上に構築した。

cluster.mu

こちらから鑑賞できるので、よかったら見てもらえると嬉しい。PC, Mac, スマートフォンで見ることができるし、Steam VR が使える環境なら VRゴーグルでも見られる。

"記憶のミライ"の詳しい説明は、こちらにあるのだけれど古い8ミリフィルムから作成された映像作品を、4面のスクリーンに囲まれながら鑑賞する。というインスタレーションである。札幌のイベントスペースで開催されていた展示で、COVID-19流行の中では家族で見に行くことはかなわず、僕一人で見にいったのが7月のことだ。その場でVR作品にさせてもらえないかという交渉をしたのが制作のきっかけだった。 cluster の方は、PC, スマートフォン, VR ゴーグルで 3D空間の中をアバターで動き回って、ほかのユーザーとインタラクションもとれるというサービスである。

f:id:r_kurain:20201018094256p:plain
現実の"記憶のミライ"

なぜ cluster で作ったのか

そもそも、VR 空間でインスタレーションの再現を申し出たのは、自分の家族のようにCOVID-19の為にインスタレーションを見に行けない人にも、会場のように4面に囲まれたスクリーンで映像を鑑賞するという体験をさせて見たかったというのが大きい。VR空間を作成して共有するというツールは、

  • Amazon Sumerian
  • VRChat
  • cluster

などがあるのだけれど、

というようなツールはなかなか無くて、cluster を選択することはかなり最初に決めていた。友人が働いている会社というのも大きい。結果的にこれは大正解で、Unity で作った3D空間が特別な設定なしに、3つの環境で簡単に動くのはかなり良い体験だった。とくにVRゴーグルで体験するのは最高で、VR空間を自作するつもりでゴーグルを買ったのに結局いくつかゲームをして機材が眠っているという人にこそ試してもらいたいツールだと思う。

制作記録

この先は、cluster のVR空間、cluster ではワールドと呼ばれる物をつくるのに、どんな回り道をしつつ進めて行ったかを書きたい。

まず作り始める方法は、かなりよく解説されているので、cluster 社のブログ

creator.cluster.mu creator.cluster.mu

を読んで、書いてある手順通りに進めれば、とりあえず動くワールドが作れる。この時点で、スマートフォンや、ゴーグルなどで起動してみると、自分が作った3D空間が実機で動くワクワクが味わえると思う。

空間の制作

さて、チュートリアルができたら、自分の思い描く空間を作らねばならない。今回の目標はイベントスペースで開催されたインスタレーションの再現である。当初はイベントスペースの図面をとってきて、完全な再現を試みたのだが、わりとすぐに破綻することが分かった。一つには現実にあるものの再現は、とても労力がかかるという事実による。株式会社積木製作さんによる Unity Japan 社屋のVR空間再現がものすごく気合が入っていて作品として、また制作録としてとても面白い。

aec.unity3d.jp

tsumikiseisaku.com

しかし個人でこれをやるのは時間的、技術的に無理と悟って別の方法を考えることにした。もう一つの理由として、VR空間にはVR空間に向いた文字の大きさ、会場のサイズというのがあるという事が制作を進めるにつれてわかって来て、当初より大幅に大きな空間を作成することになった。という事もある。現実世界には、イベントスペースの広さという制限があるが、仮想世界に物理的制限はないのだ。

f:id:r_kurain:20201018092813p:plain
真面目に現実を模倣していたころのblender

空間制作には、blender を使って、blender から Unity へのインポートを行う形で行った。ここで気を付けるべきことは2つ

スケールをちゃんとしておく

ポリゴンの裏表が意図した方向になっているか確かめてからエクスポートする

  • blender はポリゴンをどちらの面から見ても描画してくれるシェーダーが標準なのだが、Unityは表面から見ないとポリゴンが描画されない。(3Dは専門外なので変な言葉を使っているかもしれない。指摘してくれると嬉しい。) なので、ポリゴンの表裏を意図している方向に揃えておかないと、Unityに移動したときに、天井や床が消える惨事が起きる。

dskjal.com

blender でのポリゴンの表裏についてはこちらのサイトの解説が良かった

blenderに標準でついている archmesh は壁を作っていくと、床も天井も作ってくれたり、窓やドアを壁と接触させるとちゃんと穴をあけてくれたりして、建築物をつくるにはとても良いツールだった。しかし、今回の案件ではそもそも現実の空間を模倣する必要がないと途中で気づいたので、はなから Unity 付属の ProBuilder とかのほうが良かったかもしれない。

動画を流す

大まかに空間ができたところで、今回の制作のメインである、動画の表示を確認した。最初にも書いたけれど、この作品は8mmフィルムから編集された動画が4面の布スクリーンに投影されている。これを Unity内の空間で再現する必要がある。幸い Unity には Video Player というめっちゃ便利なコンポーネントがあり、これを Quad オブジェクトにくっつけるだけで、平面上で動画を再生することができる。

docs.unity3d.com

注意点

Video Playerによる動画は自分で発光しているわけではない。つまり外からの光が当たらないと動画は見えない。現実の作品では、プロジェクターによる投影だったので、Unity上でもスポットライトをスクリーンに投影することでスクリーンに光を当てている。全くの3D制作初心者だったので、地面に垂直なポリゴンに、光が全くあたらず真っ黒になって焦るみたいなことがあったのだ...

blender のところにも書いたが、Unity上では、ポリゴンの表側しか描画がされない。板ポリゴンである quad オブジェクトに動画を流すと、表側でしか動画が見られず反対側から見ると何もない空間になってしまう。なので、今回は両面を描画するシェーダーを使って描画している。

tutorials.shade3d.jp

うまい具合に動画が両面で再生されており、かつ裏と表では鏡像になるという、布スクリーンを再現したような状態が作れている。

ライティング

3D空間の肝はライティングにある。ということが今回の制作でよくわかった気がする。ショボショボだった空間もライティングに凝っていくことで、それなりに見られるものになっていく。3D空間上のスクリーンにスポットライトを当てるというのも、そのような工夫がある。スクリーン以外の範囲に光が当たらないように、不可視オブジェクトを使って光の当たる範囲を制限したりと、実際のプロジェクターの構造を再現している。

f:id:r_kurain:20201018102057p:plain
スクリーンに投影してる感じを目指して頑張った

注意点

cluster の Creator Kit では、ライティングの自動ベイクが最初から切られている。これはよくお勧めされる設定なのだが、初心者は、どうやってライティングをベイクするのかわからずハマるかもしれない。なんども手動でベイクすればよい。というのが正解で、GPU利用の計算手法でベイクしよう。解説はこちら。 パネルライトはベイクしないと結果がわからないし、ほかのライトもベイクしないダイナミックライトは空間内に2つまでしか置けないのでベイクについて理解しないと、空間の制作はおぼつかない。

Unity のライティングについてはこちらなどが参考になる

qiita.com

装飾と導線

動画しか流れない空間というのも、ありかもしれないが作品の解説も必要だし、現実のイベントの写真などにも興味を持ってほしかったので、そういった文章や写真の展示も行った。cluster の解像度を考えると、現実に比べてそうとう大きな文字サイズ、写真サイズにする必要がある。実際の大きさは作品で見てもらうとうれしい。写真については、横3メートル縦2メートルの想定でオブジェクトを作成していて、これ現実にプリントしたらいくらなんだろうという気分が味わえた。写真や文章の掲示は、ちゃんと厚みのあるパネルを作ったほうがよい。というのも発見だった。べつに板ポリゴン置いておくだけでも見えるが、3cm くらいの厚みのある板に乗せると周囲に影が落ちてそれらしくなる。(この影の落ち方があまりきれいではなくて、どうにかしたいのだが僕の Unity 力が足りていないようだ。)

f:id:r_kurain:20201018093913p:plain
パネルには厚みがある方がよい

文章や写真を置いておくだけでは、おそらく読んでもらえないので、美術展のレイアウトを記憶から掘り起こし配置を考える。結局直線的な廊下に置いているだけではあるので、もっと工夫する余地はあると思う。ある種のハックとして廊下の幅を狭くすることで、3人称視点の時のカメラが文章のパネルに近づくようにしている。カメラが近づくと、文字が大きくなってすこし読みやすくなる。なぜ廊下の幅がこれに関係するかというと、カメラが壁にめり込まないように動くため、アバターと壁が近づくほどカメラがアバターに寄っていくのだ。

レビューとフィードバック

制作を始めた段階から、もとの映像作品の編集を担当した中野均さんに、レビューをお願いしていた。結果としてディレクションのような立場で制作に付き合ってもらうことができとても助かった。映像作品の意図などは製作者にしかわからないし、どういう空間にしたいのかというのも含めたインスタレーションであると思っていたので、自分ひとりではどうにもならなかったと思う。また、作ってはアドバイスをもらって、というイテレーションを回せたのもとても良かった。仕事ではない個人製作だとこれができなくて、進捗が停滞しがちなのだ。誰かと一緒にやるというのは私にとってはとても必要なことだと痛感した次第。

おわりに

勢いに任せて随分書いてしまったけれど、作品を見てもらえたら、とにかくうれしい。3Dの空間表現などは枝葉の話で、やはり本編である映像を見てもらいたい。30年以上前の札幌に住んでいた人たちが、いったいフィルムで何を撮影していたのか。見るときっと発見があると思う。

3D空間の構築作業はとても楽しく、無限に時間の奪われる困った趣味だということも分かった。良いアセットがUnity ストアだけでなく、Booth などにもあって、見ているだけでも大量の時間が消えていく。それでもなお楽しいのと、やってみたいことがあるので、細々と続けていきたいと思う。もし、こういったインスタレーションとか写真展とかを3D空間で表現したいというような人があれば相談に乗るので連絡してほしい。

cluster のワールドへの入り方

記憶のミライ をVR空間に再現した 記憶のミライ ワールドを見に来た方向けの、cluster の説明です。

PCからご覧になる方へ

スマートフォンから見る場合はこちら

記憶のミライ ワールドを開くとこのような画面になります。

f:id:r_kurain:20201010105535p:plain
cluster のワールドを開いた画面

  • "遊びに行く" と書いてある青いリンクをクリックします。

f:id:r_kurain:20201010110003p:plain
"遊びに行く"をクリックしたあとの画面

  • "cluster for Windows をダウンロード" か "cluster for Mac をダンロード" をクリックして、お使いの環境のアプリをダウンロードします。
  • ダウンロードしたあとは、ダウンロードしたファイルをダブルクリックして、インストールを完了させてください。
  • インストールが完了したら、ブラウザの先程の画面に戻って、ログインをクリックします。

f:id:r_kurain:20201010110428p:plain
ログイン方法を選ぶ

  • ログインをクリックすると、このようなログイン方法を選ぶ画面になります。
  • アカウントをお持ちのサービスを選択してください。

  • ログインが完了すると、"cluster を起動"するというボタンが現れます。このボタンをクリックすると、cluster アプリが起動して、記憶のミライの世界に入る事ができます。

スマートフォンからご覧になる方へ

記憶のミライ ワールドを開くとこのような画面になります。

f:id:r_kurain:20201010110813p:plain
ワールドを開いた様子

  • 画面一番下にある、"遊びに行く" と書いてある青いリンクをタップします。

f:id:r_kurain:20201010110935p:plain
遊びに行くをクリックした様子

  • iOSAndroid それぞれ、自分のスマートフォンにあったアプリをインストールします
  • インストールしたら、ブラウザに戻り、"ログイン"をクリックします。
  • アカウントを持っているサービスを選択します

f:id:r_kurain:20201010111513p:plain
ログインを選ぶ

  • ログインが完了すると、起動する画面に移ります。
    f:id:r_kurain:20201010111259p:plain
    起動する画面
  • "clusterを起動"をクリックすると、記憶のミライの世界に入る事ができます。

MacBook Pro の外部ディスプレイの色味がおかしいときの対策

タイトルが長い。

2020/02/08 追記

  • DisplayPort を諦めて HDMI 出力にしたら正常な出力になった。しかし、これケーブルにもよる印象がある。
  • うまくいっているケーブルは Anker の USB-C to HDMI
    • これ

  • HDMI でうまくいく場合は、下に書いた XML の設定と組み合わせると不調の原因になる。XML による設定の上書きを解除してから試すと良い。

まとめ

  • MacBook Pro の外部ディスプレイ出力は DisplayPortで HDMI I問わず (DPだけかも) 色味がおかしくなることがある。
  • 直すには xml を作って特定の場所に置く必要がある
  • /System 以下の場所なので、Catalina (正確には El Capitan 以降すべて)ではリカバリーモードのターミナルを起動して設置するのがよい。
  • ただしリカバリーモードのターミナルは強力な権限をもっているので、注意して作業を行うこと。この対処方法でなんらかの不利益がおきたとしても補償できません。

状況

MacBook Pro 13inch 2017 から Philips の 328P6VJEB/11 という 32インチ 4k 対応のディスプレイに、usb-c → displayport 変換ケーブルで接続している。4k 解像度を 60Hz で表示できているが、色味がおかしい。色味がおかしいといいうのは全体に白っぽく、階調がやたら狭い。どういういことが起きるかと言うと薄い水色のような明るい色がほぼ白に見えてしまう。輝度が高すぎるような感じにも見えるがディスプレイ側で輝度を最低にしても暗くなるだけで改善しない。

対応方法

RGB で出力すべきところが、YCbCr で出力されているのが問題らしく、これを訂正する。他サイトの解説では System Integrity Protection (SIP) の解除が必要と書いてある場合もあるが、リカバリーモードを使うことで SIP の解除は不要。

    $ cd #/Useres/<YOUR_ID> で作業する前提
    $ curl -O https://gist.githubusercontent.com/ejdyksen/8302862/raw/5a1b27ff53ef738d5a977d2a06bb6575935b5914/patch-edid.rb
    $ ruby patch-edid.rb # DisplayVendorID-XXXX みたいなディレクトリができる
  • MacBook を再起動してすぐに Ctrl-R を押しっぱなしにして、リンゴマークが出たら指をはなす。この手順でリカバリーモードに入る。
  • リカバリーモードは画面上部のメニューからターミナルを開けるのでターミナルを開く。このターミナルは強い権限をもつので操作には十分注意すること。
  • 開いたターミナルで、先程作成した xmlディレクトリごと移動する
    $ cp -r  /Volumes/Macintosh\ HD/System/Library/Displays/Contents/Resources/Overrides/DisplayProductID-XXXX /Volumes/Macintosh\ HD/Users/<YOUR_ID>/DisplayProductID-XXXX.back # すでに存在する場合のバックアップ。存在しないなら不要
    $ cp -r /Volumes/Macintosh\ HD/Users/<YOUR_ID>/DisplayProductID-XXXX /Volumes/Macintosh\ HD/System/Library/Displays/Contents/Resources/Overrides/
    $ exit

参考文献

ここにいたる物語

もともとこの Philips のディスプレイ 328P6VJEB/11 を買ったのは数年前で、当時も MacBook Pro 2013 あたりをつなごうとして挫折したのであった。当時は 4k@60Hz を出す方法が微妙で、うまく行っても不安定だったりして結局 Windows マシンにつないで利用していた。そんな折にふと手元にある MacBook 2018 で接続してみたところ動作は安定しているが色味がとんでもないということに気づいた。価格コムの当該ディスプレイの口コミにもこの問題が話されており、概ねそのスレッドを読めば問題が把握できる。ケーブルのせいにミスリードされている気もしてちょっともったいない。とはいえ、本当にケーブルの問題で、DP接続をあきらめHDMIにすれば解決する場合もあるのかもしれず一概に間違いということはできないだろう。その後出力を RGB に直すべく関連情報を漁っていると、ファイルの移動に SIP の解除が必要とか不要とか最近の OSX の仕様変更に関係する問題が出てきて、最終的にはSIPを解除しない上のような手順がみつかった。しかしこれが2013年から解決していない問題というのはなかなかつらい。OS Updateで直るという報告もないわけではないのだが。

そして解決しても今度はアンチエイリアスの効かない世界が待っており、4k ならバラ色だぜとは行かないのがまた悲しい。かつて OS Xwindows とちがってフォントにアンチエイリアスが効くのが売りだったのに。最近の AppleRetina 前提でアンチエイリアスを切るように変更をしてきているように見え、これに従うならば最新の Pro Display XDR (税込み 582,780円)を買うしか外部ディスプレイの道はない。と思ったけどLG UltraFine 5K Display (税込み159,280円) みたいな 27インチ5kという手もあるか。24インチ4kでは200ppi に届かないから iMac は21.5 インチ4kなんだね。そして MacBook のディスプレイは ppi が高いだけじゃなくて色域も広くて結構良いディスプレイなんで、これに遜色ない外部ディスプレイを手に入れようとするとなかなか存在しないということもよくわかった。MacBook 高いよと思いつつ、ディスプレイのために買っているんだと思えば少しは許せるかもしれない。

などと無駄にディスプレイに詳しくなる週末であった。

GCP AutoML Vision で鍵かけ忘れを防ぐ仕組みを作る

f:id:r_kurain:20191016200356g:plain
slack にカギの開閉が通知される様子
玄関ドアのカギが開いた時、閉じたときに slack に通知が来る仕組みを作りました。今のところうまく運用できていて、外出後にカギが不安になって玄関まで戻ってくることがなくなりQoLがあがった感があります。

この仕組はドアの画像から閉じたサムターンを検出することで実現しています。Raspbeery Pi 3 で毎秒1画像くらいの処理ができるので、カギの通知としては問題ないレイテンシーです。

f:id:r_kurain:20191016200658g:plain
物体識別を可視化してみる

肝となる画像認識部分は GCP の AutoML Vision で学習させています。画像10枚で実用的な精度が出るDNNモデルが取得できる手軽さはなかなかすごいものがあります。 もちろんこんな簡単な画像認識なら、OpenCV を使ってテンプレートマッチングでも良いのでは? と思う向きもあるでしょう。実際その手法も試していて、頑張ってチューニングすればできそうな感触はありました。しかし AutoML Vision なら画像 10 枚を渡して、アノテーションするだけでチューニング不要で十分精度が出てしまうし、モデル作成から推論まで全部 WebUI でポチポチするだけでおわってしまうのです。学習には2時間くらいかかっているようですが、無料で計算できる範囲には収まっています。

コンピュータ資源を富豪的に使って、機械学習アプリケーションの PoC が簡単にできる。そのまま実運用まで持っていけるというのは、なかなか衝撃的な体験でした。 というわけで、以下は解説です。UIの遷移を説明するのがだるかったので AutoML Vision の使い方の説明はほとんどしていません。こちらの QuickStart どおりに動かすだけでモデルの取得ができます。

必要なもの

  • Raspberry Pi 3 (2とか zero でできるかは未検証です)
  • Raspberry Pi に接続できる赤外線カメラ
    • 僕がつかったのはこちら

しくみ

  • Raspberry Pi 3 に接続している赤外線カメラでサムターン(玄関鍵の手で回す部分)を含む写真を撮影
  • GCP AutoML Vision で'閉じてるサムターン' か '開いてるサムターン'を検出するモデルを作成
  • 作成したモデルを使って画像から'閉じてるサムターン'検出
  • '閉じてるサムターン'のスコアが閾値以上なら鍵が閉まっていると認識する
  • 前回の画像認識から状態が変化していれば slack に通知する

しくみの解説と構築手順

赤外線カメラによる撮影

なぜ普通のカメラではなく、赤外線カメラを使うのかというと玄関の照明を落としているときに帰宅したり、でかけたりという ことはよくあるので、玄関が暗い時でも画像認識が正しく動作してほしいからです。赤外線カメラとざっくり表現していますが、 赤外線LEDの照射機能がついていて、センサーに赤外線域を落とすフィルターが入っていないカメラを指しています。 今回は Raspberry Pi にフラットケーブルで接続するタイプのカメラを使っています。このカメラ、外光の明るさに応じて 照射する赤外線の光量を調整する機能がついています。外光に対して反応する量を可変抵抗で調整できるのですが、マニュアルが なく調整の仕方がよくわからないので現場合わせで適当に調整しました。外光が暗い時でも明るい時でも似たような明るさの写真が 撮影できればOKです。初期設定では外光が明るい日中にだいぶ白飛びしていたので、赤外線投射量が減る方向に調整しました。

カメラについてはUSB接続のものでも、あるいは wifi接続の監視カメラでも赤外線域で撮影できれば動作する可能性は高いと考えています。

GCP AutoML Vision で作るモデル

ここが今回のキモです。赤外線域で撮影した写真からサムターンを検出する機械学習モデルを作ります。 モデルを全部自前で設計する手もありますが、ここは手抜きしたいので、AutoML Vision に頼ります。 AutoML VisionGoogle が提供する機械学習のためのサービスで、画像識別と物体検出のモデルを簡単に作ることができます。今回は物体検出のモデルを利用します。

AutoML Vision の入力に必要な画像は、検出したい物体が写っている写真が最低10枚です。 今回は'閉まっているサムターン'と'開いているサムターン'を検出したいので、それぞれ10枚の計20枚を用意しました。

f:id:r_kurain:20191017202906p:plain
明るさが微妙に違うし、画角も微妙にずらしてある

明るさが異なる写真や、多少カメラの向きが変わった写真を用意しておくことで、汎化性能が高まることを多少期待しています。 '開いているサムターン'の検出はあとのフェーズでも実は使わないのですが、開いているサムターンを間違って閉じているサムターンと認識しないように、 違うものだと認識されることを期待して検出対象にいれています。不要なような気もしますが試していないのでわかりません。

教師データとなる写真のとり方ですが、cron で 10 分おきに写真を撮影するようにして 24 時間分写真をためます。 途中サムターンを開けておく時間を作ったりカメラの向きを少し動かしたりして、必要な写真が貯まるように仕込みます。 写真が溜まったところで、20枚の写真を選ぶと良いでしょう。

画像を用意したら、サムターンの場所を矩形で指定して、開いているのか閉まっているのかのラベルも付けます。 WebのUIでできますが、動作が緩慢で、あまり賢くもないので違うツールでラベル付けをして csv を upload するほうが楽かもしれません。

f:id:r_kurain:20191017203158p:plain
WebUI でアノテーションする様子

ここでのハマリポイントは、20枚画像をupすると、そのうち16枚を学習データ、2枚をハイパパラメータ検証データ, 2枚をテストデータに 分けてくれるのですが、アノテーションする前にその振り分けが行われるという点です。つまり、振り分けの運がわるいと、2枚のテストデータが 両方"閉じたサムターン"の方に入っていて、"開いたサムターン"データにテストデータが存在しないと怒られることがあります。 このようなときは、アノテーションが終わったあとに、一旦データセットアノテーションデータをCSVでダウンロードします。 ダウンロードしたCSVには矩形のラベルと、データの使いみちがTRAINING, VALIDATION, TESTの3つで示されているので、 それぞれのラベルにTRAININGが8つ, VALIDATIONが1つ, TESTが1つ有るように編集してあげます。 編集したファイルを upload してトレーニングデータとして AutoML Vision に認識させれば準備完了です。

レーニングを開始すれば2時間程度で学習が終わるはずです。

作成したモデルを使って raspberry pi 上で物体検出

AutoML Vision で作ったモデルはそのまま GCPクラウド上で運用することもできます。 しかし運用コストが安くはないので raspberry pi 上で物体検出まで行います。 作成したモデルは、Tensorflow の saved_model 形式か, tflite 形式でダウンロードできます。 tflite 形式のほうが軽量なモデルになっており、 raspberry pi での運用には向いているはずなのですが、 サンプル通りに動かしても正しく動作しないので、saved_model 形式を利用します。 概ね 1fps で検出できるので今回の用途には十分です。

動かしているコードと同等のサンプルを gist に置いておきます。

detecting thumbturn status · GitHub

Tensorflow(TF) の Raspberry Pi へのインストールについてはこちらを参考にしてください。 まだ TF v2.0 ではなく v1.4 です。サンプルコードもv1系を前提にしているので deprecation の warning が出ます。 (消したかったのですがとりあえず、問題なく動くので放置しています。)

識別ルール

カメラとサムターンの間に人が入って、検出がそもそもできない状況もあります。なので、閉まっているサムターンが 認識できるときは、カギが閉まっている、それ以外のときはカギが開いていると認識することにします。 このルールで状態が変化したときに、識別している状態(カギが掛かっている/開いている)を通知します。 通知するときに写真も添付しているので、誤検知があっても安心です。

また、家庭用 slack bot から signal (SIGHUP) を送ると、状態の変化に関係なくその時のドアの写真と状態を 通知してくれるので、出先でカギが不安になってもすぐに確認できます。

運用など

玄関に Raspberry Pi 3 とカメラを接続した状態で置いています。見た目がロボットぽいと子どもたちに好評なので ボディもつけてあげたいところです。

f:id:r_kurain:20191017210035j:plain

認識に使っている python スクリプトは gist にあげたものから多少変更していますがほぼ同じものです。supervisor でデーモン化しています。

検討したけど却下したもの

完成までには、M5 Stack と接近センサーや距離センサーを使った仕組みも試していて、正常に動作するところまでは確認できました。 そちらを採用しなかったのは、ドアの周りにセンサー類の配線がついてしまうのが微妙だったためです。 M5 Stack と 各種センサーの組み合わせのほうが省エネだし、よりレイテンシーも下がるのだけれど、Raspberry PiWebカメラの組み合わせのほうがお手軽感は格段に上です。

実際のところ最もお手軽なのは各種スマートロックをドアに付けてしまうことなのですが、インキーが怖いし、オートロック機能を使わないとしても家のカギを 第三者に預けるサービスは個人的な信条からちょっと利用したくないので今回は避けました。

おわりに

こういったものを作ろうと決めてからだとだいぶ時間がかかりましたが、機械学習モデルの作成部分だけなら特に悩むところがなくさすが Google のサービスだなーという感じでした。 一方でモデルを Raspberry Pi で動かすにあたっては tflite 形式だとうまく動かないとかハマリポイントもいくつかあり、こういったアプリケーションを簡単に動かせるようになるにはまだ少しハードルがあります。もうちょっと簡単にこういった仕組みが作れるアプリケーションがあっても良い気がするので気が向いたらつくろうかなあ。

2019年にやりたいことを100個書き出す

むらさきさん(id:interestor)が毎年書いている今年やりたいことリスト100が面白いよねという話で妻と盛り上がったので、二人でやってみた。 長女がインフルエンザにかかり、長女と次女を隔離しつつ、看病しつつ、保育するというタスクの合間にこれぐらいしかできることがなかったというのもある。

やってみたリストは下の方に貼るとして、先に感想を書く。

まず自分は、本当に自分のことしか考えてなくてスマン。妻は愛情に溢れたリストになっているのだが、僕のリストは完全に欲にまみれている。いや、書いてなくても例年プレゼントはしているし...すいませんでした。

やりたいことを100個書くということ以外はなんの制約もつけなかったので、二人の性格の違いが思い切り現れている。100個すべて書くまでお互いに見せず、ちゃんと分類までしてから共有したところ、方向性があまりに違って二人で笑ってしまった。100個書き出すのはなかなか大変で、自分が本当にしたいことって何だっけと考えられるのも良い体験だった。

自分のリストに少し補足を書くと、昨年ピアノを再開してとてもハマっているというのがリストにも現れていて、1割くらいがピアノ関係になった。このまま継続したい。仕事に関係することは、ここにはなるべく書かなかったので技術的な項目は少なめ。あと例年できてることは書いてない。

僕のリスト100

  1. (ここから趣味)小説を5冊以上読む
  2. LLVMを使えるようになる
  3. ガジェットを買う数を6個以下におさえる
  4. 一眼レフをもっと持ち出す
  5. 新しいプログラミング言語を1つ使えるようにする
  6. 一人旅する
  7. 温泉施設にいく
  8. アイススケートしてみる
  9. ポッドキャストを収録してみる(1回でもよい)
  10. 定期的に長めの文章を書く
  11. 子供のつきそい以外で映画を10本以上見る(映画館に限らない)
  12. 博士課程にケリをつける
  13. 航空部のOB会に出てみる
  14. 北海道でドライブする
  15. 車で実家に帰る
  16. 電子工作をからめてなにか一つ動くものをつくる
  17. 映画DBを作る
  18. 演劇を生でみる
  19. スポーツを生で観戦する
  20. PCを持ち歩かないで済むようにする
  21. 建築めぐりする
  22. 船で淀川を旅する
  23. 金沢周りで東京往復する
  24. 寝台列車にのる
  25. 一人で飲みにいく
  26. カートに乗る
  27. スキーのレッスンをうける
  28. ドローンを操縦する
  29. ゲームをつくる
  30. 軽い登山かハイキングする
  31. 高校の友人と飲む
  32. 大学の友人と飲む
  33. 50mmのレンズで練習する
  34. 海外に行く(仕事でも可)
  35. 押井守映画の未見のやつを全部見る
  36. 役に立たないものを作る
  37. テレビゲームを5本程度クリアする
  38. 文楽をみる
  39. 落語の定席にいく
  40. 写真を大きなサイズで印刷する
  41. 副収入を得る
  42. 3DCAD使えるようになる
  43. 3Dプリンタでなにか出力してみる
  44. アトラクション施設のVR体験に行く
  45. 楽器を作る
  46. (ここから健康関係)5%減量する
  47. 筋トレを始めて継続する
  48. スポーツジムに行く
  49. 親知らずを抜く
  50. (ここからピアノと音楽)ピアノの練習を継続する
  51. アコースティックピアノを買う
  52. 娘とピアノの連弾で発表会にでる
  53. 妻と合奏曲をちゃんと弾けるようにする
  54. ピアノサロン(練習室的なところ)に行ってみる
  55. シンセサイザーを買う
  56. 作曲してみる
  57. クラシックコンサートに娘を連れて行く
  58. 子供の伴奏ではなく人前でピアノを演奏する
  59. オフィスの電子ピアノを新調する
  60. (ここから買い物)スーツに合う靴を買う
  61. 靴下を買い揃える
  62. シャツを買い揃える
  63. (ここから家族のこと)PTA活動に参加する
  64. 妻と二人で夜飲みに行く
  65. 娘と泊りがけで二人旅する
  66. 家族でキャンプする(機材のレンタルやバンガローもOKとする)
  67. ディズニーランドにいく
  68. 自分の実家に家族で行く
  69. 妻の実家に家族で行く
  70. バーベキューする
  71. 子育てに貢献できるツールをつくる
  72. 実家にある写真をちゃんとバックアップさせる
  73. 花見をする
  74. 家族でプールに行く
  75. フォトブックを作る
  76. 写真館で写真を取る
  77. 貸し別荘で避暑する
  78. 子供と自転車で長距離を走る
  79. 管理釣り場的なところでマス類をつって食べる
  80. (ここから家のこと)エアコンをGoogleHomeで操作する
  81. プロジェクターをGoogleHomeで操作する
  82. 家の鍵を電子キーにする
  83. 家の管理用サーバーとして raspberry pi を運用する
  84. フライトマイルを真面目に貯めてみる
  85. ちゃんとお金の管理する
  86. AV機器をキレイにまとめる棚をつくる
  87. 記念日以外にも花を買う
  88. 家庭slackに機能を1つ以上追加する
  89. 壊れた椅子を直す
  90. サブスクリプションしているサービスを整理する
  91. (ここから食べ物のこと)大阪で美味い寿司屋をみつける
  92. おいしい緑茶を定期的に買う
  93. 妻とアフタヌーンティー(セット)かスイーツビュッフェを食べににいく
  94. 低温調理器で料理する
  95. おいしい肉料理のレシピを1つマスターする
  96. 新しい飲食店を5件以上開拓する
  97. おいしい紅茶をみつける
  98. 製パンのレパートリーを増やす
  99. おいしい洋菓子屋さんをみつける
  100. 豆を挽いてコーヒーを淹れるのを習慣にする

妻のリスト100

  1. (ここから家のこと)ソファーを処分する。
  2. 居間に本棚を置く。
  3. ビーズクッションを2つ置く。
  4. 良いカーペットを敷く。
  5. 花を育てる。
  6. 子供達だけの寝室を作る。
  7. 親だけの寝室を作る。
  8. 低床ベッドを買う。
  9. 子供達で管理できるものを増やす。
  10. 子供達の部屋のクローゼットの中身がなんなのかわかりやすくする。
  11. 廊下にある不要なものを処分する。
  12. コード、ケーブル類を整理する。
  13. 食事の前の準備を夫や子供達にさせるようにする。
  14. ランチマット常備する。
  15. プロジェクターを掃除する。
  16. エアコンを掃除する。
  17. 洗濯乾燥機の奥の埃を取る。
  18. 玄関に傘立てと靴以外置かないようにする。
  19. 裁縫道具の収納をきちんとする。
  20. 勉強道具の収納をきちんとする。
  21. アイロンビーズの収納をきちんとする。
  22. ファンルームの収納をきちんとする。
  23. 窓ガラスを拭く。
  24. 写真の整理をする。
  25. 今までの写真を元にアルバムを一年ごと作る。
  26. さっさと年賀状を書く。
  27. (自分のこと、勉強)手帳をちゃんと付ける。
  28. 手帳を見返すようにする。
  29. 消費税法を最後までちゃんとやりきる。
  30. 毎日少しでも消費税法を勉強する。(毎日が大事。)
  31. 本を12冊読む。
  32. その他に塩野七生ローマ人の物語を読破する。
  33. その他に塩野七生ギリシャ人の物語を読破する。
  34. 早寝早起きをする。
  35. 朝と夜寝る前にストレッチをする。
  36. 歯を磨いているときに腰の筋トレをする。
  37. 謙虚に人の話を聞く。
  38. 先に結論を伝え、順序立てて話をする。
  39. きちんと主語を伝える。
  40. 株価評価が一通りできるようになる。
  41. 組織再編について勉強する。
  42. 宅建士について一通り勉強する。
  43. 仕事の共有カレンダーを使いやすくする。
  44. 知らないことは知らないという。
  45. 知らないことを真摯に人から教わる。
  46. 毎日日経を読む。
  47. (ここから趣味)夫のパジャマを作る。
  48. 私のパジャマを作る。
  49. 子供達のお揃いの服を2着作る。
  50. 自分の服を2着作る。
  51. 夫のワイシャツを作る。
  52. 子供達にお揃いのブランケット(白い刺繍入)を作る。
  53. 使えるランチマットを作る。
  54. 公文の将棋ワークを3まで終わらす。
  55. 将棋ができるようになる。
  56. もうちょっといい将棋盤を買う。
  57. 西国三十三所巡りを始める。
  58. 札幌のスタバカップを手に入れる。
  59. クロール50m泳げるようになる。
  60. 平泳ぎが25m泳げるようになる。
  61. 夫のピアノ伴奏でクラリネットを人前で吹く。
  62. リッツカールトンのアフタヌーンティーに行く。
  63. 大人数でマリオパーティする。
  64. シフォンケーキが上手に作れるようになる。
  65. 家計簿をつける。
  66. ロクシタンのクリームを使う。
  67. ハーブを育てる。
  68. チューリップを育てる。
  69. アイロンビーズでマザー2のキャラクターを一通り作る。
  70. アイロンビーズピカチュウを作って長女とその友達にあげる。
  71. ファンルームでモンスターボール柄の腕輪を作って長女とその友達にあげる。
  72. 真田丸全部見る。
  73. サイコパス完全版全部見る。
  74. 大阪城を一人でがっつり見に行く。
  75. 大阪城以外のお城を一人でがっつり見に行く。
  76. クラリネットを週2回練習する。
  77. 月に1,2度プールに行って泳ぐ練習する。
  78. 花の図鑑を作る。
  79. 国旗を覚える。
  80. 漢検を受ける。
  81. 何も見ないでミッキーが書けるようになる。
  82. 何も見ないでミニーが書けるようになる。
  83. 扇町公園に生えている木の名前を調べる。
  84. (家族とのこと)長女に手品の舞台を見せる。
  85. 長女の宿題を見る時間を作る。
  86. 夫の話を静かに聞く。
  87. 家族でキャンプする。
  88. 家族でピクニックに行く。
  89. 夫に毎日ありがとうと感謝を伝える。
  90. 夫に毎日大好きと言う。
  91. 子供達にいっぱい読み聞かせをする。
  92. 子供達に毎日大好きと言う。
  93. 子供達が寝る前は抱き締める。
  94. 年末年始に家族で旅行に行く。
  95. 婚約指輪を綺麗にメンテする。
  96. 結婚記念日の該当する日(毎月22日)には、お花を飾る。
  97. お花と共にロウソクに火を灯す。
  98. お花と共に同様婚約指輪をする。
  99. 長女に数検を受けさせてみる。
  100. 家族でうどんを作る。

福島の日本酒をもらった

先日書いた日本酒の会ですが、おみやげもあって大七の雪しぼりを頂きました。

f:id:r_kurain:20160413173107j:plain 大七なのでこれも生酛作りで、ちょっと癖のあるというか、複雑な味わい。 味がしっかりしてるので、合わせるのもちょっと強めのブルーチーズでもいけるかなと思って試してみたところ。バッチリでした。

f:id:r_kurain:20160413173143j:plain このブルーチーズ、キャステロブルーっていうわりと定番な奴なのですが、スライスしてあって食べやすくて便利です。味もブルーチーズのわりに おとなしいので僕はすきです。

和食じゃなくても、日本酒けっこういけるという話を前に読んだので試して見たわけですが、うまくいってよかったです。 機会をみつけてまた日本酒いろいろ飲みたいけれど、子育て中はなかなか難しいですね。