Python implementa el reconocimiento de gestos
Preparación ambiental
①Baidu obtiene SDK
Busque Baidu Cloud en su navegador. Si no se ha registrado, regístrese primero, luego inicie sesión y haga clic en la consola de administración. Haga clic en Servicios de productos → Inteligencia artificial → Análisis del cuerpo humano a la izquierda. Haga clic en Crear aplicación, ingrese el nombre de la aplicación como "Baidu_OCR", seleccione el propósito como "Oficina de aprendizaje", y finalmente haga una descripción simple de la aplicación, luego haga clic en "Crear ahora". Aparecerá una lista de aplicaciones, incluida AppID, API Key, Secret Key y otra información, que se utilizará más adelante.
Después de hacer clic, verifique la API requerida
②La biblioteca requerida
Todo el programa está implementado por python, y las bibliotecas de terceros incluidas en el entorno incluyen cv2, threading, time, playsound y baidu-aip. Los estudiantes que no tienen estas bibliotecas pueden ingresar cmd en win + R para ingresar el nombre de la biblioteca de instalación de pip de la terminal de línea de comando.
Los pasos del proceso
①Encienda la función de cámara
Aquí usamos cv2 para encender la cámara.
capture = cv2.VideoCapture(0)#0为默认摄像头
def camera():
while True:
#获得图片
#第一个参数ret 为True 或者False,代表有没有读取到图片
#第二个参数frame表示截取到一帧的图片
ret, frame = capture.read()
# cv2.imshow(窗口名称, 窗口显示的图像)
#显示图片
cv2.imshow('frame', frame)
if cv2.waitKey(1) == ord('q'):
break
②Reconocimiento de gestos
El reconocimiento de gestos se implementa llamando a la API de Baidu. En primer lugar, obtenemos un cuadro de imagen a través de la cámara, después de la conversión de formato, se pasa a la función de gestos de Baidu como parámetro .
def gesture_recognition():
#第一个参数ret 为True 或者False,代表有没有读取到图片
#第二个参数frame表示截取到一帧的图片
while True:
try:
ret, frame = capture.read()
#图片格式转换
image = cv2.imencode('.jpg',frame)[1]
gesture = gesture_client.gesture(image) #AipBodyAnalysis内部函数
#获得手势名称
words = gesture['result'][0]['classname']
#语音播报
voice(hand[words])
print(hand[words])
except:
voice('识别失败')
if cv2.waitKey(1) == ord('q'):
break
③ Transmisión de voz
Después del reconocimiento de gestos, simplemente mostramos el resultado del reconocimiento en la ventana. El efecto no es tan hermoso. ¿Podemos transmitir el resultado del reconocimiento en voz? La respuesta es sí. La biblioteca de sonidos puede hacer esto fácilmente. Pero hay un problema con el sonido de reproducción, es decir, no se puede liberar, lo que significa que un audio solo se puede reproducir una vez. Si desea volver a reproducirlo, la modificación le pedirá que denegue el acceso.
Solución: haga clic aquí
def voice(words):
#语音函数
result = client.synthesis(words, 'zh', 1, {
'vol': 5,
})
if not isinstance(result, dict):
#写入文件
with open('./res.mp3', 'wb') as f:
f.write(result)
f.close()
#播放音频
playsound('./res.mp3')
Pantalla de logros
Código fuente
import os
import cv2
from aip import AipBodyAnalysis
from aip import AipSpeech
from threading import Thread
import time
from playsound import playsound
""" 你的 APPID AK SK """
APP_ID = '********'
API_KEY = '********'
SECRET_KEY = '********'
''' 调用'''
hand={
'One':'数字1','Five':'数字5','Fist':'拳头','Ok':'OK',
'Prayer':'祈祷','Congratulation':'作揖','Honour':'作别',
'Heart_single':'比心心','Thumb_up':'点赞','Thumb_down':'Diss',
'ILY':'我爱你','Palm_up':'掌心向上','Heart_1':'双手比心1',
'Heart_2':'双手比心2','Heart_3':'双手比心3','Two':'数字2',
'Three':'数字3','Four':'数字4','Six':'数字6','Seven':'数字7',
'Eight':'数字8','Nine':'数字9','Rock':'Rock','Insult':'竖中指','Face':'脸'}
#语音合成
client = AipSpeech(APP_ID, API_KEY, SECRET_KEY)
#手势识别
gesture_client = AipBodyAnalysis(APP_ID, API_KEY, SECRET_KEY)
capture = cv2.VideoCapture(0)#0为默认摄像头
def camera():
while True:
#获得图片
ret, frame = capture.read()
# cv2.imshow(窗口名称, 窗口显示的图像)
#显示图片
cv2.imshow('frame', frame)
if cv2.waitKey(1) == ord('q'):
break
Thread(target=camera).start()#引入线程防止在识别的时候卡死
def gesture_recognition():
#第一个参数ret 为True 或者False,代表有没有读取到图片
#第二个参数frame表示截取到一帧的图片
while True:
try:
ret, frame = capture.read()
#图片格式转换
image = cv2.imencode('.jpg',frame)[1]
gesture = gesture_client.gesture(image) #AipBodyAnalysis内部函数
words = gesture['result'][0]['classname']
voice(hand[words])
print(hand[words])
except:
voice('识别失败')
if cv2.waitKey(1) == ord('q'):
break
def voice(words):
#语音函数
result = client.synthesis(words, 'zh', 1, {
'vol': 5,
})
if not isinstance(result, dict):
with open('./res.mp3', 'wb') as f:
f.write(result)
f.close()
playsound('./res.mp3')
gesture_recognition()