AIの機械学習で顔検出によるモザイクや画像認識をやってみた【OpenCV】

  • 2021年3月15日

はじめまして。
セカンドセレクションの野崎です。

本ブログでは、AI・機械学習のプログラムを作成して実例紹介していく予定です。
今回はAIを使ったプログラムを紹介します。

顔検出

まず顔写真を用意します。
今回使用する写真は、男女それぞれの写真です。

次に顔検出するプログラムをPythonとOpenCVで作成します。

実際に検出した結果がこちら。

しっかりと検出出来ていることが確認出来ました。
よかったです!

モザイク処理を加える

次に顔にモザイクをかけていきます。
OpenCVにはモザイク処理をする機能がないので、自らプログラムを作成します。

そこで、実際にモザイク処理をしたのがこちら。

しっかりとモザイクがかかりました。
厳密には顔の領域を検出→その領域にモザイクを作成し被せるといったプロセスで行っています。

いかがでしたでしょうか?
AIを使用し、顔検出をしてモザイクをかけるプログラムの紹介でした。
今後もAIを使った実例をブログで紹介していきたいと思っています。

ちなみにこの画像。。。

皆さんお気づきですか?
今回使用した2つの画像には共通点があります。

それは。。。

2人ともこの世に実在しない人物だということです。

https://thispersondoesnotexist.com/

こちらのウェブサイトをクリックすると顔写真が次々と現れます。
表示されている人物は実在しない人物です。本物の人間にしか見えませんね。

 

サイトを製作したのは、Phillip Wang氏。NVIDIAの研究チームが発表し、オープンソースで実装を公開した敵対的生成ネットワーク(GAN)という技術をベースに顔写真を生成しているそうです。AI技術すごい!

続いて、

AIを使って手書き数字の判定

まずは学習させるデータの準備です。
今回は、sckit-learnに標準で付属している「Optical Recognition of Handwritten Digits Data Set(手書き数字の光学認識データセット」を使用していきます。
https://archive.ics.uci.edu/ml/datasets/optical+recognition+of+handwritten+digits

このデータセットには8×8ピクセルの手書き数字データが5620個ほど用意されています。
多くのデータを自分で集めることなく、学習用のデータが手に入るのですごく便利です!

■手書き数字の判定

では実際、画像を学習させて自分で書いた手書き数字を判定させてみましょう!
今回は、SVM(サポートベクトルマシン)と言われる機械学習モデルの手法で行います。SVMは、パターン識別用の教師あり機械学習方法の1つです。

判別する画像は実際に自分でペイントを使って書いてみました。
まずは下の3つのデータを読み込ませてみます。

プログラムを動かした判定結果は。。。

2の手書き数字は = "2"と判別されました3の手書き数字は = "3"と判別されました4の手書き数字は = "4"と判別されました

文字が判定されていることを確認出来ました!
一方で、課題があることも発見しました。

■文字判定の精度の課題

多くの手書き文字を実際判定しているうちに、1つの課題に気が付きました。
それは、モデル構築時のテストデータでの精度は97%程度と悪くはないものの、実際の判定の精度が思ったよりも良くないということです

例として、次の手書きデータでもう一度判別してみます。

 

プログラムを動かした判定結果は。。。

5の手書き数字は = "1"と判別されました7の手書き数字は = "9"と判別されました9の手書き数字は = "1"と判別されました

上手く判別出来ていないことが確認出来ます。
色々な画像で試してみましたが、文字が左右に寄っていたり、ペンが細すぎたりしても正しく認識出来ていないことがあります。

改良の方法としては、より良質なデータを多くして、高い精度を出すということが挙げられます。
今回はUCIの5620個ほどのデータでしたが、よりデータ数を多くすると精度が上がるということになります。
手書き数字のデータセットとしては、MNISTという役約7万点ほどあるデータセットが有名です。次回機会があれば、活用していきたいと考えています。

もしよろしければこちらの記事もご覧ください。

プログラミング未経験の新人がラズパイを使って非接触体温計を作ってみた!

最新情報をチェックしよう!