現在の不在時に本人以外の場合にLine通知する機能を追加してみる。 9:30-11:30 ジム休みの日など、不在じゃないときあるので、実装していく。
Opencv インストール
1.pipを最新Verにする。
sudo python -m pip install --upgrade pip
2.OpenCvインストール 拡張モジュール付き
pip install opencv-contrib-python
3.パッケージを最新にする。
sudo apt update
sudo apt upgrade
顔認識関連ライブラリ(face-recognition)インストール
Amazon Rekognitionは有償なので参考サイトの手順で導入
参考サイト
https://blog.grasys.io/post/uema/python-face-recognition/
1.必要なパッケージをインストール
sudo apt-get install build-essential \
cmake \
gfortran \
git \
wget \
curl \
graphicsmagick \
libgraphicsmagick1-dev \
libatlas-base-dev \
libavcodec-dev \
libavformat-dev \
libboost-all-dev \
libgtk-3-dev \
libjpeg-dev \
liblapack-dev \
libswscale-dev \
pkg-config \
python3-dev \
python3-numpy \
python3-pip \
python3-picamera2 \
zip
opencv、numpyのVerは以下にダウングレードする。picamera2との相性がわるいようだ。
sudo pip3 install opencv-python==4.5.1.48
sudo pip3 install numpy==1.23.1
2. スワップサイズ変更 これが無いとインストール失敗しました。
dlib インストールする際に、メモリ不足により dlib コンパイルが失敗しないようにするため、スワップサイズを変更する
sudo vim /etc/dphys-swapfile
# CONF_SWAPSIZEを100から2048に変更
sudo systemctl stop dphys-swapfile
sudo systemctl start dphys-swapfile
3.メモリ確保の為、/boot/cmdline.txtを編集
sudo vim /boot/cmdline.txt
cma=400M を末尾に追加。
3. pip でライブラリをインストール
顔検出も行うのでmatplotlibもいれます。
dlibのインストールは数時間かかる。これで準備OK。
pip install dlib
pip install face_recognition
pip install matplotlib
以下がでる。
WARNING: Error parsing dependencies of gpg: Invalid version: '1.14.0-unknown'
仮想環境で実施するとうまくいくらしい。 無視してもいい。
仮想環境を作成して再インストール
1)仮想環境を起動するためのファイル群を生成
python3 -m venv ~/vpy
2)仮想環境にライブラリをインストール。これで警告が消えて、入った。
pythonは今後は仮想環境からの実行=プライベートな環境で実行になっていくのであろう。
source ~/vpy/bin/activate
pip install opencv-contrib-python
pip install opencv-python
pip install dlib
pip install face_recognition
pip install matplotlib
pip install opencv-python==4.5.1.48
pip install numpy==1.23.1
deactivate
但し picamera2のインストールができなかった。PyQtの依存関連で。
そぞらさんより、以下のコメントを頂いていた。
であれば コードを書き換えて、警告はでているが、仮想環境はやめて、実施することとする。
そぞらさんコメント 以下に書き換える必要がある。
cv2.VideoCaptureを使用したOpenCVのコードでは正常に動作しません。いかに変更する必要ありだと。
from picamera2 import Picamera2
# Picamera2のインスタンスを作成
picam2 = Picamera2()
# カメラ画像を保存
picam2.start_and_capture_file(“test.jpg”)
4.サンプルダウンロード
git clone https://github.com/tech-life-hacking/face_recognition.git
git clone https://github.com/Mjrovai/OpenCV-Face-Recognition.git
但し、カメラモジュールV3だと cv2.VideoCaptureを使用したOpenCVのコードでは正常に動作しません。
picameraを使用する。で上記サンプルは書き換える必要あり。
参考サイト そぞらさんのサイト
https://sozorablog.com/camera-module-v3/
5.顔認識テスト
そぞらさんのサイトのサンプルをkao_kenchi.pyで保存&実行
import cv2
from picamera2 import Picamera2
from libcamera import controls
face_detector = cv2.CascadeClassifier("/usr/local/lib/python3.9/dist-packages/cv2/data/haarcascade_frontalface_default.xml")
cv2.startWindowThread()
picam2 = Picamera2()
picam2.configure(picam2.create_preview_configuration(main={"format": 'XRGB8888', "size": (640, 480)}))
picam2.start()
#カメラを連続オートフォーカスモードにする
picam2.set_controls({"AfMode": controls.AfModeEnum.Continuous})
while True:
im = picam2.capture_array()
grey = cv2.cvtColor(im, cv2.COLOR_BGR2GRAY)
faces = face_detector.detectMultiScale(grey, 1.1, 5)
for (x, y, w, h) in faces:
cv2.rectangle(im, (x, y), (x + w, y + h), (0, 255, 0))
cv2.imshow("Camera", im)
key = cv2.waitKey(1)
# Escキーを入力されたら画面を閉じる
if key == 27:
break
picam2.stop()
cv2.destroyAllWindows()
次はステップで顔認証。これで65歳は若く見える。(でへ)
そんなことより、CPU温度が46度に上昇。結構負荷がかかるのね。