不在時にはひまじんでなければ、Lineに通知するを実装　ホップ

# 現在の不在時に本人以外の場合にLine通知する機能を追加してみる。　9:30-11:30　ジム休みの日など、不在じゃないときあるので、実装していく。　
# Ｏｐｅｎｃｖ インストール
１．pipを最新Verにする。
```
sudo python -m pip install --upgrade pip
```
２．OpenCvインストール　拡張モジュール付き
```
pip install opencv-contrib-python
```
３．パッケージを最新にする。
```
sudo apt update
sudo apt upgrade
```
# 顔認識関連ライブラリ(face-recognition)インストール
Amazon Rekognitionは有償なので参考サイトの手順で導入
参考サイト
https://blog.grasys.io/post/uema/python-face-recognition/
１．必要なパッケージをインストール
```
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
```

２. スワップサイズ変更 これが無いとインストール失敗しました。
dlib インストールする際に、メモリ不足により dlib コンパイルが失敗しないようにするため、スワップサイズを変更する
```
sudo vim /etc/dphys-swapfile
# CONF_SWAPSIZEを100から2048に変更
sudo systemctl stop dphys-swapfile
sudo systemctl start dphys-swapfile
```
３．メモリ確保の為、/boot/cmdline.txtを編集
 ```
sudo vim /boot/cmdline.txt
```
cma=400M を末尾に追加。

３. pip でライブラリをインストール
顔検出も行うのでmatplotlibもいれます。
dlibのインストールは数時間かかる。これで準備ＯＫ。
```
pip install dlib
pip install face_recognition
pip install matplotlib
```
以下がでる。
WARNING: Error parsing dependencies of gpg: Invalid version: '1.14.0-unknown'
仮想環境で実施するとうまくいくらしい。　無視してもいい。
仮想環境を作成して再インストール
１）仮想環境を起動するためのファイル群を生成
```
python3 -m venv ~/vpy
```
２）仮想環境にライブラリをインストール。これで警告が消えて、入った。
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”)
```

４．サンプルダウンロード
```
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/

５．顔認識テスト
そぞらさんのサイトのサンプルを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()
```
以下で四角が緑で顔が認識されている。
![Camera_screenshot_04.01.2025.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/433305/2f242ce6-4362-a181-d47e-39c11c92e887.png)

次はステップで顔認証。これで６５歳は若く見える。（でへ）
そんなことより、ＣＰＵ温度が４６度に上昇。結構負荷がかかるのね。