raspberrypi4 opencvの設定📸







ちなみに、opencvとは

画像処理・画像解析および機械学習等の機能を持つ

オープンソースのライブラリのこと!



カメラが人の顔か、そうでないかを 判断するには

人の顔が含まれる画像の特徴をまとめたデータが必要である。

ちなみに、ラズパイのカメラを動かすプログラムは

"カスケード分類器”という。


この”カスケード分類器”が

opencvには予め用意されているのだ。




さて、前置きはここまでにして

ラズパイ&opencvで顔検知を参照に

raspberry piのopencvの設定を行う。



しかし、いつ顔検知がされたのか

はたまた、きちんと顔検知ができているのかがわからなかったので、

Raspberry PiとOpenCVによる画像認識で人の顔を判別する を参照に

顔検知は行った。



◆顔と目に枠を描画するプログラム


次のコマンドをターミナル上に入力すると

カメラが起動して映像が出力され

一定時間経過すると、

カメラが撮影を開始して画像を保存する。



①「camface0.py」をvimで作成する画面を開く。

$ sudo vi camface0.py





viエディタが開いたら

「i」キーを押して「編集モードに」に移行し、

下記のソースコードをコピー&ペーストする。



# -*- coding: utf-8 -*-

import time

import picamera

import cv2 as cv

fn = 'my_pic.jpg'


# カメラ初期化

with picamera.PiCamera() as camera:


# 解像度の設定

camera.resolution = (512, 384)


# 撮影の準備

camera.start_preview()


# 準備している間、少し待機する

time.sleep(2)


# 撮影して指定したファイル名で保存する

camera.capture(fn)


# 撮影した写真を読み込む

img = cv.imread(fn)


# 顔検出の処理効率化のために、写真の情報量を落とす(モノクロにする)

grayimg = cv.cvtColor(img, cv.COLOR_BGR2GRAY)


# 顔検出のための学習元データを読み込む

face_cascade = cv.CascadeClassifier('haarcascades/haarcascade_frontalface_default.xml')


# 目検出のための学習元データを読み込む

eye_cascade = cv.CascadeClassifier('haarcascades/haarcascade_eye.xml')


# 顔検出を行う

facerect = face_cascade.detectMultiScale(grayimg, scaleFactor=1.2, minNeighbors=2, minSize=(1, 1))


# 目検出を行う

eyerect = eye_cascade.detectMultiScale(grayimg)


print(facerect)

print(eyerect)


# 顔を検出した場合

if len(facerect) > 0:


# 検出した場所すべてに赤色で枠を描画する

for rect in facerect: cv.rectangle(img, tuple(rect[0:2]), tuple(rect[0:2]+rect[2:4]), (0, 0, 255), thickness=3)


# 目を検出した場合

if len(eyerect) > 0:


# 検出した場所すべてに緑色で枠を描画する

for rect in eyerect: cv.rectangle(img, tuple(rect[0:2]), tuple(rect[0:2]+rect[2:4]), (0, 255, 0), thickness=3)


# 結果の画像を表示する

cv.imshow('camera', img)


# 結果を書き出す

cv.imwrite(fn, img)


# 何かキーが押されるまで待機する

cv.waitKey(0)


# 表示したウィンドウを閉じる

cv.destroyAllWindows()





②プログラム実行


コピー&ペーストができたら、

「編集モード」から「Esc」キーを押して「コマンドモード」に切り替え、

「Shift」キーを押しながら「z」キーボードを2回押してvimエディタを閉じる。

viエディタを閉じたら、

いよいよプログラムを実行してみます!!

下記コマンドを入力してプログラムを実行する。

$ sudo python camface0.py





上手くいくと

きちんと顔は赤枠、目は緑枠と認証するのですが

あまり上手くいかず、

はしごやTシャツも認識されるという事態が起きました笑










ここでわかったのは、

いかに "正確に画像認識を行うことが難しいか”

実感しました。。



次回は、この画像認識とAIを使って

感情判定を行っていきます!