ultimatemasashiのアイコン画像
ultimatemasashi 2021年01月03日作成 (2021年02月28日更新)
製作品 製作品 閲覧数 1000
ultimatemasashi 2021年01月03日作成 (2021年02月28日更新) 製作品 製作品 閲覧数 1000

顔で動かすマウス

顔で動かすマウス

•概要
 顔の位置を動かすとマウスポインタがその方向に合わせて移動します!!

キャプションを入力できます
画像認識アプリケーションであるOpenCVで顔を読み取りサーボモーターを動かしてマウスポインタを動かします。
キャプションを入力できます
3Dプリンタで作成したケースにはピンポン玉が入っており縦横にサーボモーターを動かすことにより上下左右にポインタを動かす事ができます。
キャプションを入力できます
ピンポン玉の上にうまく光学マウスを乗せてコントロールします。

pythonコード

#! /usr/bin/env python
import cv2
import time
import Adafruit_PCA9685

pwm = Adafruit_PCA9685.PCA9685()


face_cascade_path = 'haarcascade_frontalface_default.xml'
eye_cascade_path = 'haarcascade_eye.xml'

face_cascade = cv2.CascadeClassifier(face_cascade_path)
eye_cascade = cv2.CascadeClassifier(eye_cascade_path)

cap = cv2.VideoCapture(0)

while True:
    pwm.set_pwm_freq(60)
    ret, img = cap.read()
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    faces = face_cascade.detectMultiScale(gray, scaleFactor=1.3, minNeighbors=5)
    for x, y, w, h in faces:
        cv2.rectangle(img, (x, y), (x + w, y + h), (255, 0, 0), 2)
        face = img[y: y + h, x: x + w]
        face_gray = gray[y: y + h, x: x + w]
        eyes = eye_cascade.detectMultiScale(face_gray)
        for (ex, ey, ew, eh) in eyes:
            cv2.rectangle(face, (ex, ey), (ex + ew, ey + eh), (0, 255, 0), 2)
            print(x ,"x")
            print(y ,"Y")
            if x > 200 :
              pwm.set_pwm(15, 0,200)
              time.sleep(0.05)pwm.set_pwm(15, 0, 0)
              print("右")
            if x < 100 :
              pwm.set_pwm(15, 0,700)
              time.sleep(0.05)
              pwm.set_pwm(15, 0, 0)
              print("左")
            if y > 200 :
              pwm.set_pwm(14, 0, 700)
              time.sleep(0.05)
              pwm.set_pwm(14, 0, 0)
              print("上")
            if y < 100 :
              pwm.set_pwm(14, 0, 200)
              time.sleep(0.05)
              pwm.set_pwm(14, 0, 0)
              print("下")
    cv2.imshow('video image', img)
    key = cv2.waitKey(10)
    if key == 27:  
        break
cap.release()
cv2.destroyAllWindows()

・材料
raspberry pi 4
pca9685
360°サーボモーター(AS3103)
ピンポン玉
ウェブカメラ
光学マウス
架台(3Dプリンタで作成)
モバイルバッテリー

•やり方
①OpenCVをインストールし、ウェブカメラの動作確認をする。
②サーボモーター制御を行うpca9685モジュール をラズパイ 及びサーボモーターと接続。
③pca9685ライブラリのインストール

sudo pip install adafruit-pca9685

④3Dプリンタで架台を作りサーボモーター、ピンポン玉、光学マウスを取り付ける

⑤pythonコードを書いて微調整。
※マウスポインタの速度を遅くするのがコツです。
回路図

キャプションを入力できます

これで腕を動かさなくてもマウスポインタが動かせます!!

ultimatemasashiのアイコン画像
設備のまにあどっとこむ管理人:アルティメット雅史 ラズパイ 歴3〜4年 ラズパイ コンテスト2020年 優良賞受賞
ログインしてコメントを投稿する