【Python】最新OpenCV调用摄像头,通过百度API实现手势识别

前文【python】树莓派相机实现手势识别,调百度API 是通过树莓派拍摄照片上传百度识别,现有需求通过电脑的摄像头进行实验,因此重新编写,如果需要树莓派拍摄,可以参考下文:
原文链接:https://blog.csdn.net/xuehu96/article/details/99222297

1. 介绍

OpenCV拍照更加通用,除了调用本机摄像头,还可以调用网络视频流(如海康摄像头rtsp)或者本地视频文件,相比之前树莓派方案更好

2. 注册和拿到API Key

从网址进入注册:https://console.bce.baidu.com/ai/#/ai/body/overview/index
【Python】最新OpenCV调用摄像头,通过百度API实现手势识别_第1张图片
选择免费领取
【Python】最新OpenCV调用摄像头,通过百度API实现手势识别_第2张图片
以前还是1天50000次,现在变成1年10000次了,不过做个实验还是可以的,如果真有需求,付费也不是特别贵
【Python】最新OpenCV调用摄像头,通过百度API实现手势识别_第3张图片
【Python】最新OpenCV调用摄像头,通过百度API实现手势识别_第4张图片
【Python】最新OpenCV调用摄像头,通过百度API实现手势识别_第5张图片
【Python】最新OpenCV调用摄像头,通过百度API实现手势识别_第6张图片
拿到APPID 和 两个Key,复制下来

3. 完整代码

首先安装所需的pip模块

pip install opencv-python
pip install chardet
pip install baidu-aip

完整Python代码:

import time
import cv2
from aip import AipBodyAnalysis
from threading import Thread

# 以下 APP_ID API_KEY SECRET_KEY需要换成自己的
APP_ID = '3267XXXXX'
API_KEY = 'cwdGvBSqxNtc4hXXXXXXXX'
SECRET_KEY = 'vAEIwcYDD2qDxdzBgXXXXXXXXXXXXX'

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': '脸'}

gesture_client = AipBodyAnalysis(APP_ID, API_KEY, SECRET_KEY)
capture = cv2.VideoCapture(0)  # 0为默认摄像头
exit_flag = False

def camera():
    global exit_flag
    while True:
        ret, frame = capture.read()  # 调用OpenCV拍照
        cv2.imshow('frame', frame) # OpenCV显示图片
        if cv2.waitKey(1) == ord('q'):
            exit_flag = True
            break


Thread(target=camera).start()

while not exit_flag:
    try:
        ret, frame = capture.read()
        image = cv2.imencode('.jpg', frame)[1]

        gesture = gesture_client.gesture(image) #调用百度手势识别
        words = gesture['result'][0]['classname']

        print(hand[words])

    except:
        print('什么都没有识别到')

    time.sleep(1)

4. 测试

【Python】最新OpenCV调用摄像头,通过百度API实现手势识别_第7张图片

你可能感兴趣的:(Python,嵌入式,树莓派,python,opencv,开发语言,人工智能,图像处理)