USBカメラを使って簡単にできる顔検出、バーコード検出

顔検出やバーコード検出は、難しい処理が必要そうだし、自分でやるにはそれなりに勉強しないと難しいのではと感じられるかたは多いのではないでしょうか。
この記事では、そんな初心者の方でもパソコンとUSBカメラさえ用意すれば、1時間ほどで顔検出やバーコード検出が簡単に無料でできるという内容を紹介したいと思います。
1.本当に簡単?なぜ簡単?
冒頭の紹介と矛盾するように聞こえるかもしれませんが、顔検出やバーコード検出のプログラムは非常に複雑です。
例えば顔認証は「画像の一部分を切り出して、顔かどうかの判断を少しずつ細かくして判別していく方法」や「写真から特徴点を抜き出してその特徴点が顔の特徴と合致するかで判別する方法」など様々ですが、それらの方法を理解して、抽出のためのアルゴリズムを作成するとなるとそれは初心者にはとてもできるものではありません。
では、なぜ顔検出を簡単に実現できるのか?
そこで登場するのがライブラリです。ライブラリは、プロフェッショナルが作成した複雑なプログラムをパッキングしたもので、だれでも簡単なコマンドでそのパッキングしたプログラムを使えるようになります。
顔認証のプログラムが入ったライブラリを使えば、“顔認証のプログラムを読みだしてください”とプログラムに書くだけで、複雑なことはライブラリ内に書かれているプログラムがやってくれます。
2.顔検出には何が必要?
必要になるのは、以下の4つです。
- パソコン
- カメラ
- プログラム言語
- ライブラリ
この中で、初めての方が難しいと感じるのは、”プログラム言語”と”ライブラリ”だと思います。
今回は、あまり難しい話はせずに、書いてある通りに実行したら意外と簡単にできたという体験をしていただければと思います。
世の中には、色々なプログラムやライブラリがありますが、本記事では無料でできる代表的なものとして、プログラムに“Python”、ライブラリに“OPENCV”を使った方法をご紹介していきます。
Pythonは、ビッグデータ解析、機械学習などの分野で人気の高い言語で、シンプルなコード記述とライブラリの豊富さが特徴なので、今回の内容にぴったりです。
そして、OPENCVは、Intelで開発された画像処理関連のライブラリで、今回実施する顔検出をはじめとして様々なことができます。OPENCVは、C言語、C++、Java、Pythonに対応しているため、こちらも今回のPythonを用いた顔検出にはぴったりです。
OpenCVでどんなことができるか興味がある方は、こちらを参照ください。
→Open CV(画像処理ライブラリ)初めてガイド
3.実際に顔検出をしてみる。
ここからは、Windowsパソコン、USBカメラを準備したところから、PythonとOPENCVを用いて顔検出を行うところまでを解説します。
まずは、準備として、必要なツールのインストールを行い、その後プログラムを実行します。
作業① プログラム言語Pythonのインストール
Pythonは以下からダウンロードが可能です。
https://www.python.org/downloads/
Downloads のタブを押して、 Windows を選択して、お使いのPCのOSに合わせたバージョンを選択してください。
Winodwsの64bitOSの場合は、“windows x86-64 executable installer”、
Windowsの32bitOSの場合は、“windows x86 executable installer”です。
インストーラーへのリンクをクリックすると以下のようにインストーラーが開きます。
“Add Python3.7 to PATH”にチェックをつけて、 “Install Now”を選択してください。
作業② ライブラリOpenCVのインストール
Pythonでは、pipというコマンドを利用して、簡単にライブラリのインストールをすることができます。
OpenCVのインストールをする場合、まずpipのプログラム自体を最新のものに変更して、その後OpenCVをインストールします。
Windowsに標準で搭載されているコマンドプロンプトを管理者権限で起動してください。
いくつか方法がありますが、ここではWindowsメニューから開く例を示します。
WindowsタブのWindowsシステムツールの中に、”コマンドプロンプト”を右クリックで選択し、”その他”の”管理者として実行”を選択します。
このアプリがデバイスに変更を加えることを許可するか確認されるので、”許可”をクリックします。

以下2つのコマンドを入力してください。
①pipプログラムのインストールコマンド
pip install --upgrade pip
以下は、インストールしたPythonのパッケージに入っていたpipが最新バージョンだった場合の例です。
新しいバージョンがある場合は、インストールが成功したという内容のメッセージ[Successfully installed pip-xx.xx.xx]が表示されます。

はまりやすいポイント
コマンドプロンプトを権利者権限で実行していないと、「アクセスが拒否されました。」というErrorが出力されます。[Successfully installed pip-xx.xx.xx]が表示されない場合は、コマンドプロンプトを権利者権限で実行しているかをご確認ください。
②OpenCVのインストールコマンド
pip install opencv-python
以下は、実行結果の例です。

ここまでで、プログラムを実行するのに必要な環境が整いました。
作業③ PCとUSBカメラの接続
ここで、PCとUSBカメラを接続してください。

作業④ プログラムの準備
いよいよ、実際にプログラムを実行して顔検出を行います。
ここでは、すでに用意したサンプルプログラムに対して必要な変更を加えて、実行する部分を説明したいと思います。
①プログラムを用意する
以下のファイルをダウンロードするか、以下のプログラムの記述内容をコピーしてtextファイルに張り付けて保存してください。
ファイル:
demo_face_detect.zip
プログラム記述:
import cv2
face_cascade = cv2.CascadeClassifier(r'$directory\haarcascade_frontalface_default.xml')
cap = cv2.VideoCapture(0)
while True:
ret, img = cap.read()
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
faces = face_cascade.detectMultiScale(gray, scaleFactor=1.3, minNeighbors=5)
for x, y, w, h in faces:
cv2.rectangle(img, (x, y), (x + w, y + h), (255, 0, 0), 2)
face = img[y: y + h, x: x + w]
face_gray = gray[y: y + h, x: x + w]
cv2.putText(img, 'Face Detect', (20,50), cv2.FONT_HERSHEY_SIMPLEX, 1.2, (0,0,200), 2, cv2.LINE_AA)
cv2.imshow('video image', img)
key = cv2.waitKey(10)
if key == 27:
break
cap.release()
cv2.destroyAllWindows()
上記のプログラムの処理内容を簡単に紹介します。
①カメラで取得した画像を取り込む
②取り込んだ画像から顔を検出
③検出した顔の部分に□を追加
④□を追加した画像を出力
顔検出のサンプルプログラムの詳細
⇒顔検出プログラムの内容説明動画
記述の内容を理解することで「問題が起きた場合の対応」や「さらにこんなことをしたいという時にどこをどこ変えればいいか」などがわかります。
②環境に依存する部分の書き換え
プログラムの赤字になっている箇所は環境に応じて書き換える必要があります。
[1]ライブラリの読み込み
face_cascade = cv2.CascadeClassifier(r'$directory\haarcascade_frontalface_default.xml')
使用する顔検出用のライブラリ"haarcascade_frontalface_default.xml"は、Pythonのインストールディレクトリ内に格納されます。ライブラリの格納ディレクトリを$directoryの部分に設定します。
例えば、Pythonのインストールディレクトリが"C:\Users\user\AppData\Local\Programs\Python"の場合は、以下のように設定してください。
face_cascade = cv2.CascadeClassifier(r'C:\Users\user\AppData\Local\Programs\Python\Python37\Lib\site-packages\cv2\data\haarcascade_frontalface_default.xml')
[2]カメラの設定
cap = cv2.VideoCapture(0)
数字の部分は、認識されているカメラの番号になります。
例えば、PCにカメラがすでについている(内蔵されている)場合、そのカメラの番号が"0"となり、USBで接続したカメラは、番号が"1"になりますので、プログラムでUSBのカメラを使用する場合は、番号に"1"を設定してください。
作業⑤ プログラムの実行
プログラムの実行方法には2通りあります。どちらかわかりやすいほうを選択してください。
[実行方法1]プログラムファイルをダブルクリックして実行
①で作成したプログラムファイルの拡張子を".py"にしておき、ファイルをダブルクリックしてください。
この時、".py"を実行するプログラムがPythonに設定されている必要がありますが、本記事に記載のある手順でPythonのインストールを行った場合、自動的にそのような設定になります。
[実行方法2]コマンドプロンプトからPythonのプログラムを実行
コマンドプロンプトを開いて、cdコマンドで、プログラムファイルがあるディレクトリに移動します。
その後、以下のコマンドを実行します(ファイル名が、demo_face_detect.pyの場合)
python demo_face_detect.py
以下の図のように、顔が検出されたら成功です。

プログラムを停止する際には、“Esc”キーを押してください。
4.最後に
いかがだったでしょうか
最後は作業のようになってしまったかと思いますが、ライブラリを使用すればわずか数行のプログラムで顔検出など複雑な処理ができると思っていただけましたでしょうか。
ライブラリは他にもいろいろありますので、USBカメラ×プログラムの組み合わせでバーコードの読み取りや不良の検出などいろいろなことが可能になります。
ケイエルブイの産業用USBカメララインナップ
産業から医療に至るまで、Optikronの超小型カメラモジュールは、精密な映像取得を求められる分野で活躍しています。
サイズ別に、S、M、Lと取り揃えており、こちらをご活用いただくことで、幅広い用途・シーンに対応できます。
また、これらはLED光源の追加など、目的に合わせて、カスタマイズ可能です。

Sシリーズ
極小サイズのカメラが必要な用途には、こちらのSシリーズがおすすめです。 カメラモジュール本体の長さは、ほぼ10円玉の直径レベル。 狭いエリアに入り込むことができるため、取り回しも容易です。
製品詳細
Mシリーズ
Mシリーズは、HD解像度での動画が撮影できる、最小サイズのCMOSカメラです。 工業用・医療用内視鏡カメラやマシンビジョン、ファクトリーオートメーション(FA)など幅広い用途でご活用いただけます。
製品詳細
Lシリーズ
小型サイズでありながら、画質はフルハイビジョンに対応しているため、高い画質が要求される用途におすすめです。
Lシリーズは解像度が高いだけでなく、光度が高いことも特徴。
機械やロボット、又は自動システムに統合するだけでなく、単一の装置としても使用可能です。
また、より低価格で短納期の製品が欲しいというお客様にはこちらの「スマートシリーズ」をご紹介しています。

スマートシリーズ
スマートシリーズには、お客様が使いやすいよう標準化された仕様の3つのカメラモジュールをご用意。
- スマートS:最も小さい
- スマートM:小型かつ高画質でLED照明を標準採用
- スマートL:小型かつ高性能
このカテゴリのコンテンツ
関連コンテンツ
用語集
マシンビジョンコース
カメラ基礎知識
特殊カメラ基礎知識
画像処理プログラミング
USBカメラ設定パラメータ
カメラの選び方
マシンビジョンアプリケーション
- ばら積みピッキングとロボットビジョン