こんにちは!
キッズプログラミング教室「イフキッズアカデミー」の
池ちゃん先生です。
スマホとは便利なもので、写真撮影すると
スマホが判断してその人物ごとのフォルダに分けて
写真を保存してくれる機能がありますが、
皆さん、お使いですか?
先日、そんな便利な機能を巡り、ちょっとした事件がありました。
家族で鎌倉に遊びに行ったときのこと。
とある仏像を撮影したのですが・・・。
なぜか仏像の写真が私の写真のフォルダに入っている!!!
スマホには、仏像と私の顔が同じと認識されたんですね^^;
娘たちからは、
「あ~、なんかわかる~」と、いじられる始末。
まあ、仏さまと間違われるなんてありがたい話ですね(笑)
デジカメやスマホにおいて、人間の顔を自動的に検出できる顔認識。
機種によって精度が変わるので、
これ、すごっ!と思うこともあれば、
今回の例のようになんでやねん!となる場合もあります。
(※ちなみに池上、大阪出身です)
昨年発売されたiPhoneXだと、スマホのロック解除を顔でできるようになり、正式ユーザー以外を誤認する確率は百万分の一だとか!
これはこれまでの顔認証の中でトップクラスと言えます。
でも、双子だと誤認識するとか、お母さんのiPhoneXを息子の顔で開けられたとかいろいろとあるみたいですが・・・
しかしそれにしても、
スマホやデジカメはどうやって人の顔を判断できるのでしょうか?
手順としては二つの段階を踏んで、顔の認識は行われています。
一段階目は
「それが人の顔かどうか」
二段階目は
「誰の顔か」
ではまず一段階目。
「人の顔かどうか」をどう判断しているかというと、人の顔がそもそもどんなパターンでできているのかをプログラム上に記録するところから始まります。
一人一人、顔の特徴は違っても、目が二つ、鼻が一つ、口が一つ、のような大枠は変わりませんよね。なので、そんな人間ならではの共通点をまずはインプットするわけです。
とはいえ「鼻が一つある」などと大まかに登録し過ぎると、写真の状態によっては顔として検出される確度が低くなってしまうので、精度を上げるため「顔における明暗」を登録します。
たとえば、
・鼻の頭 → 明るい
・鼻の両脇 → 暗い
・唇の下 → 暗い
・黒目 → 暗い
のように。
これらの明暗を数値化して登録し、写真を撮った際、
そのパターンに当てはまるかどうかで人の顔かどうかを判断しているわけです!
ぬいぐるみだと反応しないのは、そういう理由なのです。
次は「誰の顔か」を判断する段階に入ります。
人の顔はそれぞれに異なりますよね。
目の離れ具合や鼻の大きさ、唇の厚さやほくろの位置などなどの違いが積み重なって形作られています。
では、その違いをどう見分けさせるかと言うと、まずは人の顔の特徴が如実に表れるだろうところに、複数の「特徴点」と言われる観測ポイントを配します。
そのうえで、それぞれの観測ポイント同士の距離や、
位置関係を個人別にデータ化し、プログラムに記憶させます。
この辺りは人間と同じかもしれません。
「〇〇さんは目と眉毛の間が狭く、鼻が大きい」などというように、
目立った顔の特徴を見て、人間も人の顔を記憶しますからね。
あとは、撮った写真とデータ上の特徴点を照合することで、
それが誰なのかを判断しています。
たとえば、特徴点1と特徴点2があるとします。
特徴点1が鼻の頭に、特徴点2が上唇にあたっていた場合、特徴点1と特徴点2の距離が同じなのはAさんである。
つまり、写真の人物はAさんだ、というように!
顔全体で認識するのではなく、点に置き換えて判別
しているわけですね。
各社それぞれにノウハウがあるので、顔認識の方法は今お話しした限りではないのですが、そんな顔認識のプログラムを個人で作ろうと思えば作れるものがあります。
「OpenCV(オープンシーブイ)」という画像解析ツールです!
これは様々なプログラミング言語で使うことができるのでとっても便利!
使える言語の代表的なところでいうと、C♯とかC++かな~。
おや?
C#といえば!
イフキッズのプロフェッショナルコースでC♯、学べちゃうじゃん!
C#といえばイフキッズ、イフキッズと言えばC#。
覚えておいてね♪
まあ、そういうことで、
OpenCV使ってみた~い!という方はぜひ、イフキッズへ!
自分で作ったプログラムで顔認識できるとかなり!面白いですよ♪
無料体験授業実施中!
LINE@にお友だち登録すると、特典いっぱい!!