
ラズベリーパイ – 顔認識
最初です! 今週は、バルセロナのVMworldで、ブロガーやクラックの小さなグループと一緒に参加します, 楽しい時間を共有したい人は、私にメールを送って、そこで会いましょう! まぁ, ヌガー付き, このドキュメントには、USBカメラが接続されたRaspberry Piを取得するための手順が記載されています, 顔を認識する!
OpenCVをインストールする必要があり、スクリプトを使用して、興味のある顔を学習します, 彼に私のものと私のチャバラのものを見せます. 別のスクリプトを使用して認識機能を開始し、私の顔を検出すると1つのスクリプトを実行し、txabalを認識すると別のスクリプトを実行します.
最初に、OpenCVの前提条件またはその他の必要なものをインストールします:
[ソースコード language=”平地”]sudo apt-get install build-essential cmake pkg-config python-dev libgtk2.0-dev libgtk2.0 zlib1g-dev libpng-dev libjpeg-dev libtiff-dev libjasper-dev libavcodec-dev swig vim
sudo apt-get python-numpy python-opencvをインストールする
sudo apt-get python-pipをインストールする
sudo apt-get python-devをインストールする
sudo pip picameraをインストールする
sudo pipインストールRPIO
sudo apt-get v4l2ucp v4l-utils libv4l-dev をインストールする[/ソースコード]
Nos descargamos OpenCV, Lo compilamos y lo instalamos:
[ソースコード language=”平地”]WGET HTTP://downloads.sourceforge.net/project/opencvlibrary/opencv-unix/2.4.9/opencv-2.4.9.zip
opencv-2.4.9.zip解凍
CDのopencv-2.4.9
cmake -DCMAKE_BUILD_TYPE=リリース -DCMAKE_INSTALL_PREFIX=usr/local -DBUILD_PERF_TESTS=オフ -DBUILD_opencv_gpu=オフ -DBUILD_opencv_ocl=オフ
作る
sudo make install[/ソースコード]
悪くありません, para el reconocimiento facial, nos descargaremos primeramente una pequeña BD de caras, それがより良い精度を持ち、私たちの顔または私たちに事後的に興味のあるものを追加するように. AT Database of Faces のサンプル DB をダウンロードします&Tラボラトリーズケンブリッジ, 以前は、すべてのコンテンツを配置して解凍するフォルダーを作成しました:
[ソースコード language=”平地”]mkdir /home/pi/recoFacial
cd /home/pi/recoフェイシャル
WGET HTTP://www.cl.cam.ac.uk/Research/DTG/attarchive/pub/data/att_faces.zip
att_faces.zipを解凍します[/ソースコード]
このXMLをダウンロードして、/home/pi/recoFacial/に解凍します。:
[ソースコード language=”平地”]WGET HTTP://www.bujarra.com/wp-content/uploads/2016/08/haarcascade_frontalface_alt.zip
haarcascade_frontalface_alt.zipを解凍します[/ソースコード]
ドキュメントの最後に, 私はあなたにいくつかのPythonファイルを残します, 1つは顔を学ぶことです (capture.py) そしてもう一つはそれらを認識するために (reconocimiento.py), それらを実行可能にする必要があります:
[ソースコード language=”平地”]chmod +x reconocimiento.py capture.py[/ソースコード]
そして、推奨事項, それは、それが学習したときに私たちの顔を認識するためにキャプチャする画像の数を増やすことです, そんなときに, capture.py の, 代わりに 20 デフォルト画像, 例えば、 100.
顔を学ぶために、私たちは走ります:
[ソースコード language=”平地”]python capture.py 名Person[/ソースコード]
顔の検出と認識を開始するには:
[ソースコード language=”平地”]Pythonの reconocimiento.py[/ソースコード]
capture.py
[ソースコード language=”平地”]
CV2のインポート, SYSの, ナムピー, あなたが
サイズ = 4
fn_haar = 'haarcascade_frontalface_alt.xml’
fn_dir = 'att_faces/orl_faces’
fn_name = sys.argv[1]
パス = os.path.join(fn_dir, fn_name)
そうでない場合は os.path.isdir(パス):
os.mkdir(パス)
(im_width, im_height) = (112, 92)
haar_cascade = cv2 です。カスケード分類器(fn_haar)
ウェブカメラ = cv2。ビデオキャプチャ(0)
カウント = 0
while カウント > 100:
(rvalの, イム) = webcam.read (英語)()
im = cv2.flip です。(イム, 1, 0)
グレー = cv2.cvtColor(イム, CV2です。COLOR_BGR2GRAY)
ミニ= cv2.resize(灰色, (グレー.形状[1] / 大きさ, グレー.形状[0] / 大きさ))
faces = haar_cascade.detectMultiScale(ミニ)
顔 = ソート済み(顔, キー=ラムダX: x[3])
ifフェイス:
face_i = 面[0]
(x, そして, w, h) = [v * face_i の V のサイズ]
顔 = グレー[そして:そして + h, x:x + w]
face_resize = cv2.resize(顔, (im_width, im_height))
ピン=ソート済み([整数(n[:n.検索(‘.’)]) os.listdirのnの場合(パス)
n[0]!=’.’ ]+[0])[-1] + 1
cv2.imwrite('%s/%s.png’ % (パス, ピン), face_resize)
cv2.rectangle です。(イム, (x, そして), (x + w, そして + h), (0, 255, 0), 3)
cv2.putテキスト(イム, fn_name, (x – 10, そして – 10), CV2です。FONT_HERSHEY_PLAIN,
1,(0, 255, 0))
カウント += 1
cv2.imshowの(「オープンCV」, イム)
キー = cv2.waitKey(10)
キー== 27:
壊す
[/ソースコード]
reconocimiento.py
[ソースコード language=”平地”]
CV2のインポート, SYSの, ナムピー, あなたが
サイズ = 4
fn_haar = 'haarcascade_frontalface_alt.xml’
fn_dir = 'att_faces/orl_faces’
# 部分 1: Creando fisherレコグナイザー
プリント('フォルマンド…’)
# Crear una lista de imagenes y una lista de nombres correspondientes
(画像, ラブルズ, 名, 身分証明書) = ([], [], {}, 0)
対して (サブディレクトリ, ディレクトリ, ファイル) OS.Walkで(fn_dir):
dirs の subdir の場合:
名[身分証明書] = サブディレクトリ
subjectpath = os.path.join(fn_dir, サブディレクトリ)
os.listdir のファイル名(サブジェクトパス):
path = subjectpath + ‘/’ + ファイル名
lable = id
images.append です。(cv2.imreadの(パス, 0))
lables.append(整数(ラベル))
ID+= 1
(im_width, im_height) = (112, 92)
# Crear una matriz Numpy de las dos listas anteriores
(画像, ラブルズ) = [numpy.配列(LISの) lisの場合 [画像, ラブルズ]]
# OpenCV entrena un modelo a partir de las imagenes
モデル = cv2.createFisherFaceRecognizer()
モデル.トレイン(画像, ラブルズ)
# 部分 2: ランニングカメラでのfisherRecognizerの使用
haar_cascade = cv2 です。カスケード分類器(fn_haar)
ウェブカメラ = cv2。ビデオキャプチャ(0)
トゥルー:
(rvalの, フレーム) = webcam.read (英語)()
frame=cv2.flip です。(フレーム,1,0)
グレー = cv2.cvtColor(フレーム, CV2です。COLOR_BGR2GRAY)
ミニ= cv2.resize(灰色, (グレー.形状[1] / 大きさ, グレー.形状[0] / 大きさ))
faces = haar_cascade.detectMultiScale(ミニ)
範囲内の私にとって(レン(顔)):
face_i = 面[私]
(x, そして, w, h) = [v * face_i の V のサイズ]
顔 = グレー[そして:そして + h, x:x + w]
face_resize = cv2.resize(顔, (im_width, im_height))
# 顔を認識しようとする
予測 = model.predict(face_resize)
cv2.rectangle です。(フレーム, (x, そして), (x + w, そして + h), (0, 255, 0), 3)
# 認識された顔の名前を入力する
# [1]
IF予測[1]>500:
cv2.putテキスト(フレーム,
'%s – %.0f’ % (名[予測[0]],予測[1]),
(エックス10, Y-10), CV2です。FONT_HERSHEY_PLAIN,1,(0, 255, 0))
#face 変数には、認識された人の名前が含まれます
ヘッド = '%s’ % (名[予測[0]])
#顔がヘクターの顔の場合
if face == "ヘクター":
os.システム(「/home/pi/hector.sh」)
#顔がセイラの顔の場合
elif cara == "セイラ":
os.システム("/home/pi/seila.sh")
#顔に馴染みがない方, 不明に
然も無くば:
cv2.putテキスト(フレーム,
「不明」,
(エックス10, Y-10), CV2です。FONT_HERSHEY_PLAIN,1,(0, 255, 0))
#誰もいない
S.システム("/home/pi/nadie.sh")
cv2.imshowの(「オープンCV」, フレーム)
キー = cv2.waitKey(10)
キー== 27:
壊す
[/ソースコード]