raspberrypi4 乗り越えた壁の先
今回は
前々回突然動かなくなったプログラムの原因解明と
なんの鳴き声かわからないという問題解決を行った。
まず、前者のプログラムが動かなくなった原因は
カメラの接続不良にあることがわかった。
これは、初期のカメラを動かすプログラムを動かしたときに
全く同じエラーが出たことで判明した。
しかし、一度電源を落としてもう一度開いたり、
何回もやっているうちに突然できたりと
気まぐれに起動することから
おそらく、カメラの接続不良にあるのではないかという結論に至った。
後者については、houti関数以外ランダム関数は使わず、
固定された鳴き声をそれぞれ割り当てることによって解決した。
笑っているとき、
怒っているとき、
普通のとき
それぞれ鳴き声が割り当てられたことによって
感情が区別しやすくなったため個人的にはとても満足だ。
また、放置された時だけ
ランダム関数を使用することによって
より、本物の猫っぽく近づけたと
個人的に感じることができるので
こちらも満足である。
✳︎プログラム
- import cognitive_face as CF
- import json
- import picamera
- import time
- import cv2 as cv
- import pygame
- import time
- import random
- def voice(file):
- pygame.mixer.init(frequency=44100)
- pygame.mixer.music.load(file)
- pygame.mixer.music.play(1)
- time.sleep(2)
- pygame.mixer.music.stop()
-
-
- voice("/home/pi/mypython/camera/audio/12.mp3")
- KEY = ''
- ENDPOINT = ''
- CF.Key.set(KEY)
- CF.BaseUrl.set(ENDPOINT)
- voice("/home/pi/mypython/camera/audio/12.mp3")
- time.sleep(10)
- voice("/home/pi/mypython/camera/audio/8.mp3")
- h_cnt=0
- happiness_val=0
- a_cnt=0
- anger_val=0
- n_cnt=0
- neutral_val=0
- houchi_cnt=0
- while True:
- with picamera.PiCamera() as camera:
- camera.resolution = (512,384)
- camera.capture('test.jpg')
- print('capture')
- img = cv.imread('test.jpg')
- grayimg = cv.cvtColor(img,cv.COLOR_BGR2GRAY)
- img = "test.jpg"
- faces = CF.face.detect(img, attributes='emotion')
- f=json.dumps(faces)
- j=json.loads(f)
- print("len"+str(len(j)))
- #-------------------------------------------------------------------------------------
- #len(j)は認識した顔の数
- if len(j)==0:
- #顔の数が0だったら放置と判定
- houchi_cnt=houchi_cnt+1
- else:
- #顔が認識されれば感情をカウント
- for i in range(0,len(j)):
- print(j[i]['faceAttributes']['emotion']['happiness'])
- happiness_val = j[i]['faceAttributes']['emotion']['happiness']
- if happiness_val > 0.5 :
- h_cnt=h_cnt+1
- print("h_cnt"+str(h_cnt))
-
- for i in range(0,len(j)):
- print(j[i]['faceAttributes']['emotion']['anger'])
- happiness_val = j[i]['faceAttributes']['emotion']['anger']
- if anger_val > 0.5 :
- a_cnt=a_cnt+1
- print("a_cnt"+str(a_cnt))
-
- for i in range(0,len(j)):
- print(j[i]['faceAttributes']['emotion']['neutral'])
- happiness_val = j[i]['faceAttributes']['emotion']['neutral']
- if neutral_val > 0.5 :
- n_cnt=n_cnt+1
- print("n_cnt"+str(n_cnt))
-
-
-
- #-------------------------------------------------------------------------------------
- if houchi_cnt==100:
- v=random.randint(1,11)
- voice("/home/pi/mypython/camera/audio/"+str(v)+".mp3")
- houchi_cnt=0
- print("houchi_cnt"+str(houchi_cnt))
-
- if h_cnt==1:
- voice("/home/pi/mypython/camera/audio/18.mp3")
- h_cnt=0
- print("h_cnt"+str(h_cnt))
-
- if a_cnt==2:
- voice("/home/pi/mypython/camera/audio/16.mp3")
- a_cnt=0
- print("a_cnt"+str(a_cnt))
-
- if n_cnt==10:
- voice("/home/pi/mypython/camera/audio/17.mp3")
- n_cnt=0
- print("cnt"+str(n_cnt))
- #-------------------------------------------------------------------------------------