1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Scratch Lab の Face Sensing のお試し(公式の顔認識の仕組み)+追記

Last updated at Posted at 2021-02-03

この記事は、以下のツイートで知った Scratch Lab で新しく提供されはじめた新ブロック、その 2種類あるうちの「Face Sensing Blocks」のほうを試してみた話について書いています。

2種類の新ブロックについて

冒頭のツイートで、引用ツイートされていた文章の中に、以下の URL が含まれていました。

●Scratch Lab: Extending Creative Possibilities and Play | by The Scratch Team | Feb, 2021 | Medium
 https://medium.com/@scratchfndn/scratch-lab-extending-creative-possibilities-and-play-5b131cc4d9de

そしてページを開くと、いろいろと画像や説明などが掲載されていました。
Scratch Lab.jpg

中を見ていくと、テキストアニメーション用の「Animated Text Blocks」と、顔認識を使う仕組みになっている「Face Sensing Blocks」を試すためのエディタへの導線もありました。

●Animated Text - Scratch Lab
 https://lab.scratch.mit.edu/text/

●Face Sensing - Scratch Lab
 https://lab.scratch.mit.edu/face/

今回は、Face Sensing のほうを試しています。

Animated Text

今回の記事には出てこないほう、テキストのアニメーションを実現するためのものです。

https://lab.scratch.mit.edu/text/
Animated_Text_-_Scratch_Lab.jpg

Face Sensing

今回の記事でとりあげる、顔認識を使った仕組みのページは以下になります。

https://lab.scratch.mit.edu/face/
Face_Sensing_-_Scratch_Lab.jpg

「Try it out」と書かれたボタンを押すと、エディタへと移動できます。
エディタを開くと、以下のようなブロックが用意されているのを確認できました。
Face Sensing のブロック.jpg

内容を見てみると、以下のような仕組みを利用できるようです。

  • スプライトを顔の特定の部分(鼻、頭の上、など)へ移動させる
  • スプライトの向きを顔の傾きに合わせる
  • 顔の大きさ(※顔がカメラに大きくうつっているか、小さくうつっているかに影響を受ける)にあわせてサイズを変える
  • 顔が左右のどちらかに傾いた時を検知
  • スプライトが顔の特定の部分に触れたことを検知
  • 顔が検出されたことを検知
  • 顔が検出されているかどうかのフラグ
  • 顔の傾きの数値
  • 顔のうつっている大きさの数値

作成したプログラム

今回のお試しでは、以下の機能のものを使ってみました。

  • スプライトを顔の特定の部分(鼻、頭の上、など)へ移動させる
  • スプライトの向きを顔の傾きに合わせる
  • 顔が左右のどちらかに傾いた時を検知
  • スプライトが顔の特定の部分に触れたことを検知

組んだブロックのプログラムは以下のとおりです。
ブロックのプログラム.jpeg

実行結果

上記のブロックのプログラムを実行した結果は以下のとおりで、次のような挙動を確認できると思います。

  • ネコのスプライトが口に触れた時、画面のどこかに移動する
  • 顔が右に傾いた時に、ネコのスプライトが頭の上に移動する
  • 緑の旗を押した後は、ネコのスプライトの傾きが、顔の傾きに合わせて変わる

追記

Face Sensing の別パターン

さらに別パターンとして、頭の上の部分を広く当たり判定にするような仕組みを作ってみました。

Face Sensing で常に頭の部分(「top of head」と指定する部分)に移動するようにしているボールのスプライトがあり、そのスプライトに手描きで線を描き足してます。
また、その線を含むスプライトの向きや大きさが、頭の傾きや、顔とカメラの距離(顔がうつる大きさ)に合わせて変わるようにしてます。

頭の部分に移動しているスプライトの、ブロックのプログラムはこんな感じです。

Face_Sensing_-_Scratch_Lab.jpg

大きさを計算する部分は、以下のようなことをやって決めました。

  1. 顔とカメラの距離を、近づけたり遠ざけたりする
  2. 特定の距離にした状態で、スプライトの大きさの値を手動で変えて、ちょうど頭の上のサイズと同じになりそうな値を記録する
  3. 上記2 の状態で、変数 face size の値を合わせて記録する
  4. 上記2 と上記3 の値のペアを 2つか 3つとってみて、その値におおよそ当てはまりそう計算式を見つける(とりあえず、一次方程式にあてはめてみて、ざっくりな値を決めました)

顔の傾きは、変数の face tilt をそのままスプライトの傾きにすればちょうど良い感じでした。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?