🌊

サボるならPythonを使って本気でさぼろう!

2021/05/07に公開

私はどんな人??

理系の学生です。
機械工学専門なのですが、最近画像処理に興味を持って勉強始めた完全初学者です。(普段プログラミングはweb系でphp,jsは使える)

今回やること

サボるために作ったコードを共有します。
文字通りサボるとは、作業中にyoutubeなどをみる!!違うことをして無駄に時間を過ごすことですwwww
だけど、ばれたら意味がない!!

サボる->自分
ばれたくない->python様にお願い

さぼりと感知

人検出から画面切り替え

準備

  1. PC(pythonが動けばおっけい)
  2. コードがかけるエディタ
  3. Iriun 4K Webcam for PC and Mac(Android版)
  4. Iriun Webcam for PC and Mac(iPhone版)
  5. webcam(PC版)
    ※監視カメラとして携帯を使用するので3~5は携帯(お持ちのOSに従って)とPCどちらもダウンロードしてください
  6. 顔認証に使うデータ

Phase1: エディタを開く

  1. インストールしたエディタを開いてください。
  2. ターミナルを開きます。
  3. 以下のコマンドを実行してください.
opencvインストール
pip3 install opencv_python
pyautoguiインストール
pip3 install pyautogui

Phase2: エディタでコードを書く

準備6のデータをダウンロードして、以下のようにファイルを作成してください

  1. ディレクトリ
read_face.py
xml
└── haarcascade_frontalface_alt2.xml
  1. read_face.pyに以下のようにコードを書いていきます。
python
import cv2          ## opencv
import pyautogui    ## 画面操作用

if __name__ == '__main__':
    # 定数定義
    ESC_KEY = 27     # Escキー
    INTERVAL= 33     # 待ち時間
    FRAME_RATE = 30  # fps

    ORG_WINDOW_NAME = "org"
    GAUSSIAN_WINDOW_NAME = "gaussian"

    DEVICE_ID = 0

    # 分類器の指定
    cascade_file = "./xml/haarcascade_frontalface_alt2.xml"
    cascade = cv2.CascadeClassifier(cascade_file)

    # カメラ映像取得
    cap = cv2.VideoCapture(DEVICE_ID)

    # 初期フレームの読込
    end_flag, c_frame = cap.read()
    height, width, channels = c_frame.shape

    # ウィンドウの準備
    cv2.namedWindow(ORG_WINDOW_NAME)
    cv2.namedWindow(GAUSSIAN_WINDOW_NAME)

    # 変換処理ループ
    while end_flag == True:
        # 画像の取得と顔の検出
        img = c_frame
        img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
        face_list = cascade.detectMultiScale(img_gray, minSize=(100, 100))

        # 顔を検出
        for n in face_list:
	    # 画面を切り替える
            pyautogui.keyDown('command')
            pyautogui.press('tab')
            pyautogui.keyUp('command')
	    # プログラム終了
            cv2.destroyAllWindows()
            cap.release()
        # フレーム表示
        cv2.imshow(ORG_WINDOW_NAME, c_frame)

        cv2.imshow(GAUSSIAN_WINDOW_NAME, img_gray)

        # Escキーで終了
        key = cv2.waitKey(INTERVAL)
        if key == ESC_KEY:
            break

        # 次のフレーム読み込み
        end_flag, c_frame = cap.read()

    # 終了処理
    cv2.destroyAllWindows()
    cap.release()

Phase3:カメラの起動

  1. スマホとPC両方ダウンロードしたソフト・アプリを起動していてください。

実行

  1. カメラを顔を検出したい位置に置いてください。
  2. ターミナルで以下のコマンドを実行してください。
python3 read_face.py

カメラが起動します。
3. 顔を認識すると、画面が切り替わります。

今後

  1. 今回、顔の認識に使っているモデルは、誰にでも反応してしまうので、今後は人物指定で画面切り替えができるようにモデルの作成にはげむ、。
  2. 画面切り替えは、command+tabで切り替えをしているだけなので、作業画面に戻る!!という切り替えとは言えないので、そこを考える

参考

Discussion