COVID-19 Project 第1回

はじめまして。株式会社モルフォのソフトウェアエンジニア、平井駿と申します。

まずはこちらをご覧ください。

ゲームのプレイ画面

画面中央に出てきている数値が残り秒数で、数値がゼロになるまで手で顔を触らなければクリアとなります。 以下のページでプレイすることができます。是非アクセスしてみてください!

morphoinc.github.io

今回のブログエントリでは、このゲームを開発するに至ったきっかけ、目的、そして試行錯誤の過程を紹介します。

新型コロナウイルスに対して、我々ができることはないか?

当社は画像処理のソフトウェア開発を専門としています。そこで培った技術を使って新型コロナウイルス感染拡大防止のための社会貢献したいという思いがありました。そこで、アイデアを社内で募集したところ、多くの社員から賛同を得られて全部で22件の開発案が集まりました。

一例として、「密集を避けるための混雑度合い判定」という開発案が出ました。こちらについてはプレスリリースにあるように、実際に新宿住友ビルでの稼働に向けて動き始めています。

混雑状況判別ソフトウェアの画面例

開発案の中から短期間で実現できるものを絞り込んだ結果、以下2件の開発に着手することになりました。

  1. 手で顔を触ったことを判定し、教えてくれる機能
  2. オンライン会議中に、しゃべっていないときは自動でマイクをミュートする機能

今回のブログエントリでは、1つ目について紹介します。なお、2つ目についても近日公開予定ですので、楽しみにお待ちください。

顔を触ってはいけない!

ウイルスが付着した手で顔を触ってしまうと、ウイルスが目、鼻、口を通して体内に侵入するリスクがあります。 ある研究によると、人は1時間に23回も顔を触れているとのことで、ウイルスが体内に侵入するリスクは高いと言えます。

www.statnews.com

顔を触るという行為は無意識に行ってしまうため、直すのは容易ではありません。まずは「自分が顔を触っている」ということに気づくことが最初のステップです。そこで、顔を触ったことを自動で判定し、教えてくれるツールの開発をすることにしました。

このツールを多くの方に使ってもらうことで、少しずつ顔を触る頻度を減らし、感染拡大の防止に貢献することが開発の目的となります。

自社技術を使う?

顔を触ったことを判定をするのは、例えば、当社ソフトウェア製品SoftNeuro®(組み込み機器向けAI高速推論エンジン)を組み合わせることで実現できそうです。

しかしながら、本プロジェクトでは、社会貢献という観点からソースコードを公開したいと考えました。そうなると、当社の資産であるソースコードを公開することが難しくなってしまいます。そこで、本プロジェクトでは、オープンソースのアルゴリズムを活用することにしました。

開発したソースコードは下記のリンクからアクセスすることができます。

github.com

どのように手で顔を触る行為を判定するか?

最初に考えた手法は、顔検出と手検出を同時に動かし、検出されたそれぞれの矩形の重なりを判定するというものでした。そのために、handtrack.jsを用いて手を検出、face-api.jsを用いて顔を検出することとしました。

顔検出と手検出を組み合わせた様子(開発中の画面)

この手法で、ひとまず手で顔を触ったことを判定することはできそうです。

精度向上

しかし、この手法では手検出に失敗することも多く、精度の低さに悩まされました。そこで2つの検出アルゴリズムを組み合わせる代わりに、BodyPixという単一のセグメンテーションアルゴリズムを使うことにしました。その結果、大幅な精度向上を実現できました。

セグメンテーションを用いて判定している様子

もっと面白くしたい

この時点で想定していた使い方は、オンライン会議中など*1にこのツールを起動させておいて、会議終了時点でユーザーが何回手で顔を触ったかを見返す、というものでした。

当初の想定ユースケース

しかし、しばらく自分で使っている中で

  • 最初は面白いが、しばらく使うと飽きてしまう
  • 会議中にバックグラウンドで余計な処理をすることで、PCのパフォーマンスに影響がある

といった課題がありました。打開策を探していたところ、偶然にもこちらの記事に出会いました。

note.com

その結果、余計な機能を削り

  • 一度でも顔を触ったらアウト
  • 制限時間内に顔を触らなければクリア
  • 最初は短い時間で、徐々に増やしていく
  • クリアするごとに賞品がもらえる

というシステムを実装し*2、出来上がったものが冒頭で紹介したゲームとなります。

課題

現状では2次元情報しか使っていないため、顔と手が実際には触れていなくても、顔の前に手を置くだけで判定されてしまうという課題があります。また、飲み物を飲む、食事をするといったタイミングで判定されてしまいます。これらの課題は、

  • 3次元情報を組み合わせる
  • 物体検出を組み合わせる

などの方法で改善の余地があると考えております。

最後に

当社には画像処理と機械学習を専門としたソフトウェアエンジニアが数多く在籍しています。「画像処理を用いて課題を解決したい!」「AIで社会貢献したい!」こういった要望がありましたらお気軽にお問い合わせください。

*1:カメラを起動させ、自分の顔を解析するという行為は心理的な抵抗が高いと考えました。そこで、会議中であればカメラを起動していることが多いので、同時に解析することで抵抗が下がると考えたためです。

*2:実際は、モバイルレイアウト対応、精度調整、複数ブラウザ対応などの苦労がありましたが、ここでは割愛します。