Nota
Ciao, benvenuto nella Community di SunFounder per gli appassionati di Raspberry Pi, Arduino ed ESP32 su Facebook! Approfondisci le tue conoscenze su Raspberry Pi, Arduino ed ESP32 insieme a noi e ad altri appassionati.
Perché Unirsi a Noi?
Supporto Esperto: Risolvi problemi post-vendita e affronta sfide tecniche con l’aiuto della nostra community e del nostro team.
Impara e Condividi: Scambia consigli e tutorial per migliorare le tue competenze.
Anteprime Esclusive: Ottieni accesso anticipato ai nuovi annunci di prodotti e alle anteprime.
Sconti Esclusivi: Approfitta di sconti esclusivi sui nostri prodotti più recenti.
Promozioni e Concorsi Speciali: Partecipa a giveaway e promozioni durante le festività.
👉 Sei pronto a esplorare e creare con noi? Clicca su [here] e unisciti oggi stesso!
7. Tracciamento del Volto
PiDog si siederà tranquillamente sul posto. Se lo applaudi, girerà la testa verso di te e, se ti vede, ti saluterà.
Esegui il Codice
cd ~/pidog/examples
sudo python3 7_face_track.py
Dopo aver avviato questo codice, PiDog attiverà la videocamera e la funzione di rilevamento facciale.
Puoi visitare http://+ PiDog's IP +/mjpg (ad esempio http://192.168.18.138:9000/mjpg) nel tuo browser per visualizzare le immagini della fotocamera.
Successivamente, PiDog si siederà e attiverà il Modulo Sensore di Direzione Sonora per rilevare la direzione degli applausi. Quando PiDog sentirà degli applausi (o altri rumori), girerà la testa verso la fonte del suono cercando di trovarti.
Se riesce a vederti (il rilevamento facciale trova un volto), scodinzolerà e abbaierà per salutarti.
Codice
Nota
Puoi Modificare/Resettare/Copiare/Eseguire/Interrompere il codice riportato qui sotto. Ma prima, devi accedere al percorso del codice sorgente come pidog\examples. Dopo aver modificato il codice, puoi eseguirlo direttamente per vedere l’effetto.
#!/usr/bin/env python3
from pidog import Pidog
from time import sleep
from vilib import Vilib
from preset_actions import bark
my_dog = Pidog()
sleep(0.1)
def face_track():
Vilib.camera_start(vflip=False, hflip=False)
Vilib.display(local=True, web=True)
Vilib.human_detect_switch(True)
sleep(0.2)
print('start')
yaw = 0
roll = 0
pitch = 0
flag = False
direction = 0
my_dog.do_action('sit', speed=50)
my_dog.head_move([[yaw, 0, pitch]], pitch_comp=-40, immediately=True, speed=80)
my_dog.wait_all_done()
sleep(0.5)
# Pulizia del rilevamento sonoro dai movimenti dei servomotori
if my_dog.ears.isdetected():
direction = my_dog.ears.read()
while True:
if flag == False:
my_dog.rgb_strip.set_mode('breath', 'pink', bps=1)
# Se sente qualcosa, gira la testa in quella direzione
if my_dog.ears.isdetected():
flag = False
direction = my_dog.ears.read()
pitch = 0
if direction > 0 and direction < 160:
yaw = -direction
if yaw < -80:
yaw = -80
elif direction > 200 and direction < 360:
yaw = 360 - direction
if yaw > 80:
yaw = 80
my_dog.head_move([[yaw, 0, pitch]], pitch_comp=-40, immediately=True, speed=80)
my_dog.wait_head_done()
sleep(0.05)
ex = Vilib.detect_obj_parameter['human_x'] - 320
ey = Vilib.detect_obj_parameter['human_y'] - 240
people = Vilib.detect_obj_parameter['human_n']
# Se vede qualcuno, abbaia
if people > 0 and flag == False:
flag = True
my_dog.do_action('wag_tail', step_count=2, speed=100)
bark(my_dog, [yaw, 0, 0], pitch_comp=-40, volume=80)
if my_dog.ears.isdetected():
direction = my_dog.ears.read()
if ex > 15 and yaw > -80:
yaw -= 0.5 * int(ex/30.0+0.5)
elif ex < -15 and yaw < 80:
yaw += 0.5 * int(-ex/30.0+0.5)
if ey > 25:
pitch -= 1*int(ey/50+0.5)
if pitch < - 30:
pitch = -30
elif ey < -25:
pitch += 1*int(-ey/50+0.5)
if pitch > 30:
pitch = 30
print('direction: %s |number: %s | ex, ey: %s, %s | yrp: %s, %s, %s '
% (direction, people, ex, ey, round(yaw, 2), round(roll, 2), round(pitch, 2)),
end='\r',
flush=True,
)
my_dog.head_move([[yaw, 0, pitch]], pitch_comp=-40, immediately=True, speed=100)
sleep(0.05)
if __name__ == "__main__":
try:
face_track()
except KeyboardInterrupt:
pass
except Exception as e:
print(f"\033[31mERROR: {e}\033[m")
finally:
Vilib.camera_close()
my_dog.close()