1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

東京テクニカルカレッジAdvent Calendar 2022

Day 10

いびきを予防する作品作ってみた

Last updated at Posted at 2022-12-09

目次

  • 作品の目的
  • 準備するもの
  • こぐまのトンピーの準備・回路作成
  • 赤外線カメラの動作確認
  • Opencvのインストール
  • コードの作成
  • スマホアームを取り付ける
  • 参考にしたサイト

作品の目的

家族のいびきがうるさくて眠れない日々。いびきは仰向けで寝ると舌が喉の奥に下がり気道が圧迫され、かきやすくなります。そのため、就寝中の頭上に赤外線カメラを設置し、顔認識した際に音を鳴らすことで、いびきをかくのを予防する作品を作成しました。なお、音を鳴らす機能にはこぐまのトンピーを使用します。

準備するもの

・ Raspberry Pi4 ModeB
・ こぐまのトンピー
・MOSFET
・ ブレッドボード
・ワニ口クリップ
・ 抵抗(220Ω)
・ 電池ボックス(単3電池2本)
・ジャンパー線
・赤外線カメラ
・フレキシブルスマホアーム(ダイソー)

こぐまのトンピーの準備・回路作成

①こぐまのトンピーの端子を取り出す
トンピーが座っている切り株の底面にある2つのネジを外して、プラスとマイナスの端子を取り外します。

②回路を作成する
下記リンクを参考に回路を作成します。なお、今回は21番ポートを使用しました。
参照ページ

赤外線カメラの動作確認

Raspberry Piにカメラモジュールをセットした後、Raspberry Pi側の設定画面を開き、インターフェースのカメラを有効にして再起動します。次にターミナルに下記のコマンドを入力し、テストとして静止画を撮影します。なお、就寝時に使用するため、暗闇下でも撮影します。

// カメラが認識されているか確認する
$ vcgencmd get_camera

// 下記のように表示されればOK
$ supported=1 detected=1

// 静止画を撮影する
$ raspistill -o sample.jpg

Opencvのインストール

①顔認識の際に使用するOpencvをインストールします。

// パッケージを最新にする
$ sudo apt-get update
$ sudo apt-get upgrade

// Opencvをインストール
$ pip3 install opencv-python

// 実行時に必要となるライブラリをインストール
$ sudo apt-get install libatlas-base-dev
$ sudo apt-get install libjasper-dev

②次に顔認識するカスケードファイルをダウンロードします
下記リンクからダウンロードします。
参照ページ

コードの作成

3秒以上仰向けで寝るとトンピーが鳴るようコードを作成します。

import cv2
import time
import RPi.GPIO as GPIO
from time import sleep

// トンピーを鳴らすための関数
def tonpy_sound():
    
    GPIO.setmode(GPIO.BCM)
    GPIO.setup(21, GPIO.OUT)
  
    GPIO.output(21, GPIO.HIGH)
    GPIO.cleanup()

def function():

    // 赤外線カメラを起動
    cap = cv2.VideoCapture(0)

    // 開始時間を設定
    start_time = time.time()

    while True:
        
        // 顔のカスケードファイルを使用
        cascade_file = "haarcascade_frontalface_default.xml"
        
        // カメラを起動
        cascade = cv2.CascadeClassifier(cascade_file)

        // 1フレームずつ取得する
        ret, frame = cap.read()

        // 左右を反転する
        frame = cv2.flip(frame, 1)

        if not ret:
            break

        // 画像の大きさを変更
        frame = cv2.resize(frame, (500, 500))

        // モノクロにする
        gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

        // 顔認識を実行
        face_list = cascade.detectMultiScale(gray, minNeighbors=10)

        // 顔の部分を四角で囲む
        for (x,y,w,h) in face_list:

            red = (0,0,255)

            // 赤色の枠で囲む
            cv2.rectangle(frame, (x,y), (x+w,y+h),red, 1)

        // 顔を検出した時
        if len(face_list) > 0:

            // 経過時間を指定する
            end_time = time.time()

            // 経過時間を画面に表示する
            print(end_time-start_time)

            // 3秒経過したら
            if end_time - start_time >= 3:

                // トンピーの再生
                tonpy_sound()

            elif len(face_list) == 0:

                // 時間を元に戻す
                start_time = end_time

        // 結果を出力
        cv2.imshow("human_body_detect", frame)

        key = cv2.waitKey(1)
        if key == 13:
            break

    cap.release()

    cv2.destroyAllWindows()

if __name__ == "__main__":

    function()

スマホアームを取り付ける

ラズパイにスマホアームを取り付ければ完成!!

参考にしたサイト

https://dotstud.io/blog/arduino-nodejs-twitter-connect/
https://fabcross.jp/category/make/mobility/20220609_bunkai_tonpy.html
https://tora-k.com/2020/11/15/raspberrypi4-cammoj/
https://qiita.com/tnoce/items/c819c85a85c16d246be8

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?