「笑ったら寝ろwww」を作りたいなと思いました。
「笑ったら寝ろwww」ってありますよね。あれ、絶対寝てないので嫌いです。寝なさい。
ということで今回は笑ったら寝てもらうためのプログラムを書きました。
必要な技術は3つ
- 笑っていることの判断(表情検出)
- 部屋の電気を消してあげる
- シャットダウンしてあげる
ってなわけで技術調査からどうぞ。
表情検出
表情検出をする基本的なコード。岡田の笑顔が映ってますね。
これはcolabとかで動きます。
https://gist.github.com/okdshinya/f5c7aba961195804d85c35bf23fdb404
部屋の電気を消す
自分の書いたプログラムで家電が操作できたらめっちゃ面白くないですか?
出来ます。
NatureRemoの宣伝
Nature Remo、小さいデバイスをUSB-Bにつないだ状態で部屋に放置すると、そいつがリモコンになってくれるってやつです。赤外線の操作を覚えてくれます。正直電池で動いてくれると嬉しいです。
欲しいなら安いやつとか、安売りしてるタイミングで買うのがおすすめです。
https://shop.nature.global/collections/nature-remo
APIあるやで
Nature RemoはAPIあります。これは買いです。
https://developer.nature.global/
シャットダウン
パソコンも落としたいですね。
なんか普通にシステムコールできるっぽいです。以下のコードを実行したらシャットダウンするってばよ。
import os
os.system('shutdown -s')
完成したものがこちら
完成してません。飽きました。
岡田が実装してないものリスト
- シャットダウンとNature Remo API
みんな要らないと思うのでやめました。 - 表情検出を非同期にすることで表示を滑らかにすること。
これ上手く書ける人いますか?僕はプログラミングわかんないので出来ませんでした。
つくったもの
えー、表情検出のコードとほぼ一緒です。ローカルで動かしたんですけど環境は書くのめんどくさいので書きません。
import cv2
from feat import Detector
import concurrent.futures
#カメラ
cap = cv2.VideoCapture(0)
#使うやつ
detector = Detector(
face_model="retinaface",
landmark_model="mobilefacenet",
au_model='svm', # ['svm', 'logistic', 'jaanet']
emotion_model="resmasknet",
)
while True:
# カメラからの画像取得
ret, frame = cap.read()
frame_flipped = cv2.flip(frame, 1) # 1は左右反転を示す
# 画像保存
cv2.imwrite('../img/pic.jpg', frame_flipped)
#すごいことする
single_face_prediction = detector.detect_image('../img/pic.jpg', outputFname="output.csv")
#数値を出す。
happiness_level = int(single_face_prediction.emotions["happiness"][0] * 100)
if happiness_level>0:
result = "Happiness Level="+str(happiness_level)+ "%"
print(result)
#表示する
cv2.putText(frame_flipped, result, (10, 30), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 0), 2, cv2.LINE_AA)
cv2.imshow('camera', frame_flipped)
#ここで笑ってるときの処理ができる。
#シャットダウンとか、僕はNature remoのAPI使って部屋の電気とかいじる。
if happiness_level > 90:
pass
#Escキー押したら止まる
key = cv2.waitKey(10)
if key == 27:
break
まとめ
岡田はプログラミングが出来ない。ちゃんちゃん♪