Leap Motionで手話はできるか?

Leap Motionで空中スワイプを作っていましたが、このセンサーを買った当初の目的は、手話Vチューバーを作ることでした。

手話で挨拶すらできない

バーチャルアバターを作れるソフトfecerigを使って、手話Vチューバーを作れるか試しました。

まずは挨拶をやろうと思います。

右手人差し指と、左手人差し指で、お辞儀をするように曲げて・・・

う・・・う〜ん。曲がらん。

左手(アバターの右手)の親指は立つし、右手の人差し指は曲がらないし。

ダメだ!断念しました。

手話Vチューバーを作りたかったのは

イベントや仕事で、稀にろう者と会うことがあるのですが・・・私は全然手話をできません。挨拶とかお礼とか、わずかな単語しか分かりません。

そんな感じなので、遠隔で手話通訳をしてくれるサービスがあったらいいなと思い、調査していました。

その時流行りだったVチューバーにたどり着き、アバターが手話をできないか知りたくなり、手軽で安価に実現できそうなfecerigとLeap Motionを購入して検証していました。

福祉としての手話通訳サービスだと、利用する場面が限定されそうなので、エンタメ寄りな手話サービス、手話Vtuverがいると良い気がします。

私から見ると、手話の使い手は、手の動きのパフォーマーに見えます。

Webカメラ+Leap Motionで上半身キャプチャ

技術の話でです。

fecerigはWebカメラを使い、表情を3Dアバターに反映させることが出来ます。

さらにオプションでLeap Motionを接続すると、手も動かせるようになります。

体に何も付けないで、モーションキャプチャができる手軽さは素晴らしいと思います。

反面、精度の高いキャプチャは望んではいけないでしょう。

手話は難しいという結論になりました。

透明スクリーンに映そう

最後に余談ですが、透明スクリーン(ポリッドスクリーン)に映して遊んでみました。投影が中途半端で美しくはありません。

大雑把な動きだったらキャプチャできるので、身振り手振りで雰囲気を伝えることなら、Leap Motion+fecerigで問題なさそうです。

文字上で動画再生 mix-blend-modeの応用

CSSで動画を合成できる、mix-blend-modeを前回使ってみました。

何か応用できないかな・・・。

思い付きですが、文字上で動画を再生してみようと思います。

文字と動画のブレンド

さくら舞う動画と文字を、mix-blend-mode: screen;でブレンドしました。

テキストとして操作できるように

そのままだと、テキストとして扱えないので、動画には合わせてpointer-events: none;をかけます。

UI操作上は動画がない扱いになり、テキストとして操作可能になります。

動画が文字の形にトリムされるわけではありません。

そのためブレンドモードscreenを使う場合、背景が白という制約はあります。

他のブレンドモードも、配色の制限はでてくると思います。

非対応ブラウザへの対応

IE、Edgeは2019年9月現在mix-blend-modeが効かないので、動画を消してしまいます。

ITHatさんの記事で、CSSのブラウザ対応を賢く調べる方法が紹介されていたので参考にさせて頂きました。

今回のコード

overflow: hidden;で、文字の高さからはみ出す動画はカットしています。

文字上で動画再生の実用性は?

GIFアニメで似たようなことが実現できそうですが、今回はプレーンテキストを使っているので、ページ翻訳が効いたり、テキストをコピー出来たり、アクセシビリティは確保しやすいかと思います。

ただ、チラチラ動いている文字を読むと気が散るので、本当にアクセシビリティを気にするなら、そもそも動画をブレンドはしない方がよいのでは・・・と、考えてしまいます。

・・・とは言え、アクセシビリティだけじゃ話が進まない場面は多々あるので、何か新しい(?)デザインを要求されたときの、ネタになればと幸いです。

CSSで動画合成 mix-blend-mode

CSSで動画を合成できました。

カメラ映像とスクリーン映像のブレンドが、簡単にできることに驚きです。

CSS「mix-blend-mode」を使う

PhotoShopで使われる乗算やスクリーンなどのレイヤーブレンド効果を、CSSで実現することができます。

CSSの「mix-blend-mode」で、指定の画像にブレンド効果を適用できます。

ただ、IE、Edgeが未対応(2019年9月現在)のため、Webページに投入するのは難しいです。

現状ではユーザーが限定されるWebアプリなどで、使用場面があるかもしれません。

mix-blend-modeはVideo要素にも使える

Chromeだけで良いので、Webカメラの映像と動画素材を合成したい。そんな場面がありました。

試しにVideo要素にmix-blend-modeをかけてみたら、あっさりブレンドを実現できるではありませんか!

↓Webカメラの映像

↓合成したいスクリーン映像’(動画素材はこちらから拝借)

この2つをブレンドすると・・・

合成、ブレンドがブラウザで出来ちゃいます!

今回のコード

画面いっぱいのVideo要素を2つ重ねて、前面に「mix-blend-mode: screen;」をかけています。

黒背景の素材を合成するときは「screen」を指定すると良いでしょう。

mix-blend-mode合成動画の使いどころ

私はWebでARコンテンツを作るときに使いましたが、他にもWebRTCと組み合わせ、動画チャットをリアルタイムで映像素材と合成して配信しする・・・など、使えるかもしれません。

使う場面は限定的だと思いますが、不意に役立ちそうな技術です。

Leap Motionで空中スワイプ その3

一昨日からLeap Motionの空中スワイプで遊んで来ました。

そして、春夏秋冬を楽しむコンテンツを作り、壁に投影してみました。

今度は、スマートグラスに映して見てみましょう。

※GIFアニメが重くなったので、かなり減色しています。

Leap Motion × MOVERIO

スマートグラスは、EPSONの「MOVERIO BT-30E」を使います。

Leap Motionと組み合わせれば、AR(拡張現実)を空中スワイプで操作できるようになります。

無駄に近未来的です。

スマートグラスで現実拡張

スマートグラスBT-30Eは、USB Type-C接続(HDMIも可)でPCの画面を目の前に表示できます。

PCのブラウザをフルスクリーンにして、前に作ったスライドショーWebアプリを開きます。

これをスマートグラスに映すと、黒い背景が透明になり、目の前にコンテンツが浮かんでいるような状態になります。

MOVEIO(BT-30E)は視野角がそこまで広くないので、「部屋に桜が舞ってる!」とはいかず、「目の前の透明ディスプレイに桜が舞ってる」という体感かと思います。

ただ、発色はとてもきれいです。

今回はMRのように現実とCGを融合するようなものではありませんが、それでもMOVEIOとLeap Motionの組み合わせは、やはり、無駄に近未来的です。

Leap Motionで空中スワイプ その2

前回、Leap Motionで空中スワイプ操作のスライドショーを作りました。

ブラウザで動くWebアプリです。

ブラウザをフルスクリーンにして、プロジェクターで壁に投影すれば、ちょっとした不思議体験ができます。

春夏秋冬を感じよう

壁に花火が打ちあがりました。

夏の風物詩の花火。

床に置いたLeap Motionで、季節を変えられます。

春・・・さくら舞い散る

夏・・・打ち上げ花火

秋・・・色づく紅葉

冬・・・しんしんと降る雪

春夏秋冬を視覚的に感じる体験?です。

本格的にやるなら、温度連動とか匂いとかを組み合わせた方が良いかも・・・。

直感的で楽しい空中スワイプ

空中スワイプは、子供でも簡単に使いこなします。

最初にセンサーの位置を教えてあげる必要がありますが、一度見れば覚えられる簡単な操作です。

空中スワイプは直感的で楽しいUIかと思います。

Leap Motionで空中スワイプ

Leap MotionのセンサーデータはJavaScriptで取得できることを、前回確認しました。

手の座標を取得できるので、手を払うスワイプ操作UIを作ってみます。

なんだか心地よい空中スワイプ

スライドショーをスワイプするアプリケーションを作ってみました。

自分の手が画面上に入り込み、さらにスワイプするときに、ちょっと重さを感じるような錯覚を受けます。

思ったより、おもしろい体験です。

Web基本構成で開発

leapjsのサンプル、css-visualizer.htmlをベースとして使いました。

HTML+CSS+JavaScriptというWebの基本構成で開発できるのが、うれしいところです。

手のひらのX座標は、

で、値を取れます。

今のフレームのhand.palmPosition[0]と、前のフレームのhand.palmPosition[0]を引き算すると、X方向の移動距離を求められます。

例:
今のフレーム X座標:280
前のフレーム X座標:300

X方向の移動 -20

もし移動距離が -10より小さかったら、スワイプと判断し、スライドイベントを発生させるようにしました。

値が小さくなる(マイナスになる)場合、右から左へスワイプしたことになります。

スライドも右から左へ動かします。

一方通行のスワイプ操作が良い

昔、反射式光電スイッチでジェスチャー操作を作ったとき、空中スワイプ操作の問題に直面しました。

手をスワイプして戻るときに、意図しない逆方向の入力が入ってしまいます。

手の速さ、手を戻すタイミング、戻す速さは人それぞれで、誰もが使いやすいUIとして成立させることは難しかったです。

それならもう、一方通行のスワイプにして、スライドショーを操作したほうが快適だろうという結論になりました。

しかし、他に方法があるかもしれません。

今後もより操作性の高いUIを追求してみます。

Leap MotionをJavaScriptで

モーションキャプチャー系のアプリケーションを作るとき、周りの人はUnityを使っています。

私はWeb系なので、ブラウザ上でなんとかしたいところです。

JavaScriptが使える!

幸運なことに、Leap MotionはJavaScriptで開発可能です。

WebSocketで手のデータを送信しており、しかも、leapjsというライブラリまで用意されています。

leap-0.6.4.js

更新、5年前。

更新が止まっているけど動くかな・・・?

GitHubからダウンロードして、examplesフォルダの中のhtmlをブラウザで開けば、サンプルが実行します。

トラブル続出

サンプルを実行しても、センサーデータを受信できません。

Leap Motionコントロールパネルで、「Webアプリケーションを許可」にチェックをいれてないことが原因のようです。

私はこれでもうまくいかず、ブラウザのエラーログを見るとWebSocketを受信できていないトラブルが発生していました。

これはPC再起動で解決しました。

ジェスチャー入力はもうできない!?

認識するようになったので、一番必要なジェスチャー入力サンプル、gestures.htmlを起動します。

手を振りかざしたり、両手をバタバタさせてみたりしますが、何も反応ありません。

また、エラーが!

Legacy Application Detected
An application is requesting legacy APIs that are no longer available in this version of the Leap Motion software.

このバージョンのLeap Motionソフトウェアで使用できなくなった過去のAPIを要求しています。

ダメだ。5年の歳月は長すぎた。

2019年現在、JavaScriptで何ができる?

手や指の座標は取得できるようです。

なので、手をブラウザに描画したり、自分でジェスチャーを判定するコードを書けば、JavaScriptでWebアプリケーションを作れるかと思います。

以下、leapjsのサンプルで起動したものを、いくつか掲載します。

値だけのものは分かりにくいので、ビジュアライザーを合わせて掲載しています。

回転を取得 loop.html

rollで手のひらの角度を取得できます。

ちなみにHandは手のIDで、124回手を認識したということです。

3軸回転 roll-pitch-yaw.html

ロール、ピッチ、ヨーという言葉を知らなかったのですが、飛行機とかに使われる3軸の回転のことみたいです。

ラジコン飛行機や、ドローンを飛ばすときに使えるかもしれません。

three.jsで3D描画 threejs-bones.html

three.jsを使うことで、Unityみたいなことができるようになります。

three.jsを使えれば・・・。

CSSで3D描画 css-visualizer.html

手の描画だけなら、CSSだけで3D表現をした方が、カスタマイズしやすいかと思います。

Webデザイナー寄りの人ほど、このサンプルを重宝するでしょう。

JSONデータでジェスチャーを判定する

手や指の位置はJSONで取得されています。

「右から左に手を払った」といったジェスチャーであれば、比較的簡単に実装できるでしょう。

実際にジェスチャー操作を実装したので、また記事を投稿します。

Leap Motionの精度確認

ジェスチャー操作センサー「Leap Motion」が、どれくらいの精度か確認したいと思います。

デフォルトのソフト、診断ビジュアライザーを使ってテストします。

何も先入観のない子供にテストをしてもらいました。

グー・チョキ・パーの動きは前回の確認済みなので、ちょっと難易度が高そうな動きも見ていきたいと思います。

指で円を描く

人差し指でくるくる円を描きます。

これは安定して認識しています。

人差し指の認識は、特に安定しているような気がします。

手と手を握る

次は、絶望的に難しいと思われる、手と手を握った状態にしてみます。

なんとすごい!最後に右手の認識が外れましたが、十分機能しています。

重なった手を、どうやって手と認識しているんだろう?

前フレームとの差異を比較して、間接の位置を予測し続けているのか?・・・もはや私にはわかりません。

たまに手がどこかへ行く

精度は良いとはいえ、たまに自分の手が、どこかへ行っちゃいます。

あれー、戻ってこーい!

こうなると、意図しないジェスチャーが入力される可能性はあります。

実用化に必要な精度は?

家や街中でジェスチャー入力をする機会は、いまだにありません。

タッチーセンサーのように実用化し、普及するのは、ほぼ100%の精度になってからかもしれません。

ジェスチャーがタッチより優れているのは、衛生面(触らなくていい)と、操作機器から少し離れた距離でも入力できるところでしょうか。

まだ先の印象ですが、キッチンとかで使われるようになるかもしれません。

Leap Motionは未来のUIか?

手を動きを認識するLeap Motionを、半年前くらいに購入しました。

モーションキャプチャー精度が高く驚きます。しかし、日常的に利用するまでには至りませんでした。

Leap Motionとは?

手のジェスチャーでPC操作ができるようになる、近未来インターフェースです。

2012年に発売されているので、むしろ過去のインターフェースかもしれません。

外見はおしゃれ。

サイズも小型で、横8cm×縦3cm×高さ1cmくらいです。

診断ビジュアライザーで驚く

Leap MotionをPCにUSB接続し、診断ビジュアライザーを起動すると、すぐに動作確認ができます。

自分の手の3Dボーンが映し出されました。

なんだこの近未来的な体験は!?(今さらですが)

じゃんけんだってできます。

目の前の3Dボーンに自分の手の感覚が移る錯覚・・・ラバーハンド錯覚のようです。

それくらい、モーションキャプチャー精度が非常に高く、素晴らしい製品に感じました。

モーションキャプチャーの進化

ジェスチャー操作には昔から興味がありました。

子供でも直感的に操作できますし、ユニバーサルなUIを実現できる可能性を感じていました。

しかし、かなり前に日本科学未来館で、操作性の悪いジェスチャーUIを体験してから、実用的ではないのかな・・・と思い、遠のいていました。

まさかここまで進化していたとは!

しかし、使いどころは難しい

Leap Motionでより精度の高いキャプチャーができるようになったものの、日常的にジェスチャー操作は使っていない状態です。

音声操作の方が楽で、Alexaの方が使われています。

・・・Leap Motionで何が出来るか?

いくつか試したので、引き続き記事を投稿します。

Grove イヤー心拍センサーの中身

以前、Grove – イヤークリップ型 心拍センサー(Grove – Ear-clip Heart Rate Sensor)を使い、obnizで心拍数を取得する実験をしていました。

心拍数を測りながら、サンドバッグをたたいて・・・

この後、誤って+-を間違えて心拍センサーをつないでしまい、見事にセンサーが壊れました。

一瞬の油断で、1,800円のセンサーが使えなくなるのはショックです。

捨てる前に分解しよう

もう使えないセンサー。

せめて捨てる前に、気になったことを調べようと思います。

白いボックスが大きすぎない?

運動しながらセンサーを装着するつもりだったので、この心拍センサーが、もう少しコンパクトになるとうれしいです。

大きめの白いボックスが、邪魔になります。

それでは白いボックスをこじ開けてみましょう。

小さな基盤が出てきました。

ボンドで固定されているので、ニッパーで切って外します。

ケースに比べ、基盤は半分以下のサイズ。

これくらいなら、自作のプロダクトにも組み込みやすいかもしれません。

 

そして・・・

1,800円で勉強になったと自分を納得させ、心拍センサーをゴミ箱に捨てました。