Realice el reconocimiento de gestos con Python en 10 minutos

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. Inserte la descripción de la imagen aquí
Después de hacer clic, verifique la API requerida
Inserte la descripción de la imagen aquí

②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()

Video de efectosInserte la descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/m0_43456002/article/details/105566742
Recomendado
Clasificación