Computer Vision

Python, Computer Vision, AI, Transhumanism 関連

マスクしてない人を検出してみた

「マスクせずにせき」乗客が非常通報 福岡・地下鉄車内でトラブルに

などという今日この頃。

 

そんなに怖かったら外に出なければよいのに。と思いつつ、今回は写真からマスクをしていない人を検出してみようと思う。

 

用意するするもの
・どこのご家庭にもあるOpenCVをインストール済みのPythonが実行できる環境
・マスクをした人物が写っている画像、マスクをしてない人物が写っている画像
・カスケードファイル(顔、目、口)
・下記プログラム

 

プログラム

https://qiita.com/hitomatagi/items/04b1b26c1bc2e8081427

 

カスケードファイル「口」

https://github.com/opencv/opencv_contrib/blob/master/modules/face/data/cascades/haarcascade_mcs_mouth.xml

 

カスケードファイル「顔」

https://github.com/opencv/opencv/blob/master/data/haarcascades/haarcascade_frontalface_default.xml

 

プログラムは上記のものに、口の要素を追加した。顔はあるけど、口が検出されていない場合は、マスクをしているとみなす、お手軽仕様での実装だ。

逆に言えば口が検出されたらマスクしてないという想定。

もし、マスクのカスケードファイルがあれ、それでもよいということになるが、まあ多分ないだろうと考え、そもそも探していない。

 

f:id:tsubute:20200221011046j:plainf:id:tsubute:20200221011139j:plain

acworksさんによる写真ACからの写真

とりあえずは、Googleの写真検索でマスクをしている人の画像を拾って試してみる。
テストしてみたところ、マスクしている顔と、マスクしていない顔、それぞれあっさり検出。
口についても検出できた。

続いて掲載用に画像を探してみる。しかし今度は、マスクと一緒にメガネもしている画像が多く、それだとうまく検出できない。などなど、素材選びには少々苦戦。
さらに、写真が小さかったり、横を向いている画像は検出がうまくいかなかったりする。

 

そんなこんなで、結局、今回の掲載用素材は、上記女子学生の写真となってしまったが、特に深い意味はない。

1枚目の画像右側の目のようにバウンディングボックスが2重にできることはよくある事だ。


このように、カスケード分類による検出は、Deep Learningによる検出に比べると、やや精度は落ちるのかもしれないが、 手軽に試してみるのにはなかなか良い手法かと思う。

 

3分間クッキングのつもりが、そうこうしているうちに、インスタントラーメンの麺が伸びてしまったので、今回はこの辺で。それではまた!