Nota
Ciao, benvenuto nella community di SunFounder Raspberry Pi & Arduino & ESP32 su Facebook! Approfondisci Raspberry Pi, Arduino ed ESP32 insieme ad altri appassionati.
Perché unirsi?
Supporto Esperti: Risolvi problemi post-vendita e sfide tecniche con l’aiuto della nostra community e del nostro team.
Impara & Condividi: Scambia suggerimenti e tutorial per migliorare le tue competenze.
Anteprime Esclusive: Ottieni accesso anticipato a nuovi annunci di prodotti e anteprime.
Sconti Speciali: Approfitta di sconti esclusivi sui nostri prodotti più recenti.
Promozioni Festive e Giveaway: Partecipa a concorsi e promozioni durante le festività.
👉 Pronto per esplorare e creare con noi? Clicca [here] e unisciti oggi stesso!
8. Ti Fissa
Questo progetto è basato sul progetto 7. Visione artificiale, con l’aggiunta di algoritmi di rilevamento facciale.
Quando ti presenti davanti alla telecamera, essa riconoscerà il tuo volto e regolerà il suo giunto cardanico per mantenere il viso al centro dell’inquadratura.
Puoi visualizzare lo schermo su http://<your IP>:9000/mjpg
.
Esegui il Codice
cd ~/picar-x/example
sudo python3 8.stare_at_you.py
Quando il codice viene eseguito, la telecamera del veicolo fisserà sempre il tuo volto.
Codice
from picarx import Picarx
from time import sleep
from vilib import Vilib
px = Picarx()
def clamp_number(num,a,b):
return max(min(num, max(a, b)), min(a, b))
def main():
Vilib.camera_start()
Vilib.display()
Vilib.face_detect_switch(True)
x_angle =0
y_angle =0
while True:
if Vilib.detect_obj_parameter['human_n']!=0:
coordinate_x = Vilib.detect_obj_parameter['human_x']
coordinate_y = Vilib.detect_obj_parameter['human_y']
# cambia l'angolo del pan-tilt per seguire l'oggetto
x_angle +=(coordinate_x*10/640)-5
x_angle = clamp_number(x_angle,-35,35)
px.set_cam_pan_angle(x_angle)
y_angle -=(coordinate_y*10/480)-5
y_angle = clamp_number(y_angle,-35,35)
px.set_cam_tilt_angle(y_angle)
sleep(0.05)
else :
pass
sleep(0.05)
if __name__ == "__main__":
try:
main()
finally:
px.stop()
print("stop and exit")
sleep(0.1)
Come funziona?
Queste righe di codice nel ciclo while True
fanno sì che la telecamera segua il volto.
while True:
if Vilib.detect_obj_parameter['human_n']!=0:
coordinate_x = Vilib.detect_obj_parameter['human_x']
coordinate_y = Vilib.detect_obj_parameter['human_y']
# cambia l'angolo del pan-tilt per seguire l'oggetto
x_angle +=(coordinate_x*10/640)-5
x_angle = clamp_number(x_angle,-35,35)
px.set_cam_pan_angle(x_angle)
y_angle -=(coordinate_y*10/480)-5
y_angle = clamp_number(y_angle,-35,35)
px.set_cam_tilt_angle(y_angle)
Verifica se viene rilevato un volto umano
Vilib.detect_obj_parameter['human_n'] != 0
Se viene rilevato un volto, ottieni le coordinate (
coordinate_x
ecoordinate_y
) del volto rilevato.Calcola nuovi angoli di pan e tilt (
x_angle
ey_angle
) in base alla posizione del volto e regolali per seguirlo.Limita gli angoli di pan e tilt entro l’intervallo specificato utilizzando la funzione
clamp_number
.Imposta gli angoli di pan e tilt della telecamera utilizzando
px.set_cam_pan_angle()
epx.set_cam_tilt_angle()
.