智能产品综合开发 - 手势识别

news2025/1/12 18:52:27

1 实训选题目的

        本次实训选择的题目是“基于树莓派的手势识别系统”,旨在为人们提供一种便捷的交互方式,使用户能够通过手势控制智能设备,摆脱传统的物理按键操作。通过本项目,我们希望能实现快速、灵活的手势识别,提升用户体验和居住环境的智能化水平,我们将能够将所学的人工智能专业知识进行综合应用,包括但不限于Linux操作系统、Python程序设计、人工智能数据处理、机器学习技术及应用、计算机视觉技术、响应式网页设计、创新创业教育、数据库基础、软件工程和人工智能产品开发等。本项目要求小组成员能够灵活运用这些知识,开发出具有一定创新性和实用价值的人工智能产品。

2 实训任务目的

        通过本次“手势识别”的实训任务,目的是使团队成员掌握树莓派硬件的基本组成,并能够完成树莓派硬件的搭建、新版64位桌面版系统的烧录安装以及SSH、VNC、用户密码等基础配置。这些步骤将为团队成员提供远程控制树莓派的能力,为后续的温湿度检测系统开发打下坚实的基础。此外,本任务还将帮助团队成员熟悉树莓派的操作系统环境,确保在后续的开发过程中能够有效地进行编程和调试,实现智能家居的各项功能,包括数据采集、处理、存储和可视化展示。通过本实训,学生将学会如何将理论知识应用于实际问题,提高解决实际问题的能力,并增强团队合作和项目管理的技能。

3 实训介绍

(一)必备功能说明:

1.手势识别功能
通过摄像头实时捕捉用户的手势,使用百度AI手势识别API进行分析。系统支持多种手势的识别,如“点赞”、“OK”、“拳头”等,并在控制台输出识别结果。

2.语音播报功能:
将识别到的手势内容通过百度AI语音合成API生成语音,用户可以通过声音获取识别结果。语音内容使用识别到的手势名称。

3.状态反馈功能:
在识别到的手势区域绘制矩形框,提供视觉反馈,用户可以直观地看到识别结果的位置。

通过本次实训,我们的目标是开发一个功能全面、用户友好且具备一定智能的手势识别系统,增强人机交互的自然性和便利性。

4 实训组件

  1. 树莓派主板1块
  2. 树莓派电源适配器1个
  3. 40P软排线1根
  4. 温湿度传感器1个
  5. 面包板1个
  6. 跳线若干
  7. 电阻若干(用于温湿度传感器电流限制)
  8. 杜邦线若干(用于连接面包板上的组件)
  9. 显示器1个
  10. SD卡1张
  11. 网络线1根
  12. 外壳和保护套1个
  13. 摄像头

5 实训原理

以下是手势识别的核心工作原理:

  1. 系统架构
    系统搭建在树莓派上,通过摄像头进行视频捕捉,利用Python及相关库执行手势识别与语音播报。
  2. 手势捕捉与识别
    使用OpenCV库捕捉用户的手势图像。系统每隔一定帧数(如每5帧)进行处理,保存当前帧,将其转化为可供识别的格式,并调用百度AI手势识别API进行分析。
  3. 反馈机制
    识别出的手势通过gestures字典映射到具体的名称,并在控制台输出相应的信息。同时,识别结果将通过百度的文本转语音API进行语音播报,用户可以听到实时的反馈信息。
  4. 状态显示与反馈
    每次识别后,系统在图像上绘制识别区域的矩形框,加强用户对手势识别结果的理解。识别到的手势信息也通过文本形式展示在控制台,方便开发调试和用户观察。
  5. 数据处理
    手势识别结果进行动态处理,拼接识别的多个手势形成综合反馈,用于语音合成。通过适当的控制确保每次处理后的反馈有效传达给用户,同时处理错误情况(如未识别到手势)。

6 最终代码展示 

Gesture_recognition.py:

import os
import cv2
from aip import AipBodyAnalysis
import requests

# 手势识别字典
gestures = {
    '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': '脸'
}

# 百度AI平台的AppID、API Key和Secret Key
APP_ID = '116309748'
API_KEY = 'loIjB17JNpFWgdS8E5a9mcpU'
API_SECRET_KEY = 'xTZstlZd05fVJFD7ekWmWlH5boyRxpYD'

# 初始化百度AI手势识别客户端
Gestureclient = AipBodyAnalysis(APP_ID, API_KEY, API_SECRET_KEY)

# 获取access_token的URL
host = 'https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=FC3iKrW69CfHdH00fYh2wViw&client_secret=ZZBUUlCqKx5A9w52Y0HY8J94FTr7vtB8'

# 请求access_token
response = requests.get(host)
if response:
    print(response.json())
    token: object = response.json()['access_token']  # 提取token的内容


# 读取图片内容的函数
def get_file_content(path):
    with open(path, 'rb') as fp:
        return fp.read()


# 初始化摄像头
cap = cv2.VideoCapture(0)
cap.set(3, 352)  # 设置宽度
cap.set(4, 288)  # 设置高度
frame_num = 0

# 循环获取摄像头帧
while cap.isOpened():
    ret, frame = cap.read()  # 获得帧
    if frame_num % 5 == 0:  # 每几秒处理一次
        cv2.imwrite("gesture.jpg", frame)  # 保存当前帧为图片
        image = get_file_content("gesture.jpg")  # 读取图片内容

        # 调用百度AI手势识别API
        message = Gestureclient.gesture(image)
        print(message)
        num = message['result_num']
        if num == 0:
            say = '没有识别到人体动作'
            cv2.imshow("gesture", frame)
        else:
            results = message['result']
            content = []
            say = ''
            for i, result in enumerate(results):
                classname = result['classname']
                gesture_name = gestures.get(classname, '未知手势')  # 使用.get方法避免KeyError
                print("第%d个识别结果为%s" % (i + 1, gesture_name))
                content.append(gesture_name)  # 直接添加手势名称
                cv2.rectangle(frame, (result['left'], result['top']),
                              (result['left'] + result['width'],
                               result['top'] + result['height']), (255, 255, 255), 2)
                cv2.imshow('gesture', frame)

                for j in range(len(content)):
                    say += str(content)
                print('say:', say)
                print('token:', token)

        # 语音播报结果
        url = f'http://tsn.baidu.com/text2audio?tex="{say}"&lang=zh_CN&per=0&pit=7&spd=5&cuid=***&ctp=1&tok={token}'

    frame_num += 1

    # 按'q'或空格键退出
    if cv2.waitKey(0) & 0xFF == ord('q') or cv2.waitKey(0) & 0xFF == ord(' '):
        break

# 释放摄像头资源并关闭所有窗口
cap.release()
cv2.destroyAllWindows()

实验结果截图

7 参考文献

[1]张凯,陈峰.基于混合空洞卷积CNN和BiGRU的表面肌电信号手势识别[J/OL].计算机应用与软件,2024,(11):220-227[2024-11-28].http://kns.cnki.net/kcms/detail/31.1260.TP.20241126.1619.062.html.

[2]张会影,圣文顺,周子倡,等.手势识别技术研究[J].物联网技术,2024,14(11):36-38+41.DOI:10.16667/j.issn.2095-1302.2024.11.008.

[3]程亚龙,梁军,邹雲宇.基于YOLOv5的静态手势识别检测模型[J].软件导刊,2024,23(11):181-186.

[4]段元花,唐文鸿.基于动态手势识别的学前教育机器人人机交互技术研究[J].自动化与仪器仪表,2024,(09):263-267.DOI:10.14016/j.cnki.1001-9227.2024.09.263.

[5]谢强,张华梅,王宇才.基于OpenCV的手势识别技术在机电系统人机交互中的应用与研究[J].轻工科技,2024,40(05):119-121+159.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2249809.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Qt常用控件之显示类控件

目录 QLabel 文本格式 设置图片 文本对齐/自动换行/边距/缩进 设置伙伴 QLCDNumber 倒计时功能 QProgressBar 进度条 QCalendarWidget QLabel QLabel 同样是 QWidget 的子类,所以前面博客中 QWidget 中的属性方法也是适用的 QLabel可以用来显示文本和图…

架构-微服务-环境搭建

文章目录 前言一、案例准备1. 技术选型2. 模块设计3. 微服务调用 二、创建父工程三、创建基础模块四、创建用户微服务五、创建商品微服务六、创建订单微服务 前言 ‌微服务环境搭建‌ 使用的电商项目中的商品、订单、用户为案例进行讲解。 一、案例准备 1. 技术选型 maven&a…

【JTAG】1149.6协议总结

【JTAG】1149.6协议详解-CSDN博客 IEEE 1149.6标准的基本实现需要在信号路径驱动器中添加一个时脉产生器,它能发射单一脉冲或一列脉冲,这取决于被加载到 1149.1 指令暂存器中的 EXTEST_PULSE 或 EXTEST_TRAIN 指令。1149.6在克服信道中共模讯号干扰能力…

小程序 - 个人简历

为了让招聘人员快速地认识自己,可以做一个“个人简历”微信小程序, 展示自己的个人信息。 下面将对“个人简历”微信小程序进行详细讲解。 目录 个人简历 创建图片目录 页面开发 index.wxml index.wxss 功能实现截图 总结 个人简历 创建图片目录…

Tülu 3:重新定义开源大模型的后训练范式

一、引言 在大型语言模型(LLM)的发展历程中,预训练阶段往往受到最多关注,动辄需要数百万美元算力投入和数万亿token的训练数据。然而,一个鲜为人知但同样关键的事实是:预训练完成的模型实际上并不能直接投…

systemverilog约束中:=和:/的区别

“x dist { [100:102] : 1, 200 : 2, 300 : 5}” 意味着其值等于100或101或102或200或300其中之一, 其权重比例为1:1:1:2:5 “x dist { [100:102] :/ 1, 200 : 2, 300 : 5}” 意味着等于100,101,102或200,或300其…

用Pycharm安装manim

由于版本和工具的差异,manim的安装方式不尽相同。本文用Pycharm来安装manim. 一、准备工作:安装相应版本的python、pycharm和ffmpeg. 此处提供一种安装ffmpeg的方式 下载地址:FFmpeg 下载后,解压到指定目录。 配置环境变量&am…

云GPU——pycharm远程连接featurize实例

点击PyCharm远程连接会有详细的教程, 本文补充虚拟环境的创建以及包的下载。 1、虚拟环境的创建: 2、虚拟环境创建好之后,下载需要的包 (这种方法比较快) 可以在python interpreter点击go to tool window&#xff0c…

Fanuc法那科机器人维修之参考位置详解

参考位置是预先设定好的一个或多个特定点位,当启用这一功能时,系统会实时且精确地判断机器人的当前关节角度是否处于预设参考位置的一定范围之内(这个范围区间是可以根据实际需求进行设置的),并据此输出指定的信号。 这…

混淆零碎知识点

minifyEnabled true //混淆开关 zipAlignEnabled true // Zipalign优化 shrinkResources true // 移除无用的resource文件 (必须要混淆开了之后才才可以设置为true) proguard-rules.pro 为混淆文件 //整个文件保留 不被混淆 -keep class com.cn…

ELK(Elasticsearch + logstash + kibana + Filebeat + Kafka + Zookeeper)日志分析系统

文章目录 前言架构软件包下载 一、准备工作1. Linux 网络设置2. 配置hosts文件3. 配置免密登录4. 设置 NTP 时钟同步5. 关闭防火墙6. 关闭交换分区7. 调整内存映射区域数限制8. 调整文件、进程、内存资源限制 二、JDK 安装1. 解压软件2. 配置环境变量3. 验证软件 三、安装 Elas…

【通信协议】CAN总线通信协议的学习(一)基础理论知识学习

目录 1、CAN基本概念 1.0、基本概念 1.1、与其他通信协议的区别 1.2、CAN硬件电路 1.3、CAN总线电平信号 1.4、CAN的差分信号 1.5、CAN总线工作原理 1.6、CAN协议物理层 2、数据帧结构 3、CAN参数配置,波特率计算 1、CAN基本概念 CAN:controll…

探索文件系统,Python os库是你的瑞士军刀

文章目录 探索文件系统,Python os库是你的瑞士军刀第一部分:背景介绍第二部分:os库是什么?第三部分:如何安装os库?第四部分:简单库函数使用方法1. 获取当前工作目录2. 改变当前工作目录3. 列出目…

QT6学习第六天 初识QML

QT6学习第六天 创建Qt Quick UI项目使用Qt Quick DesignerQML 语法基础 创建Qt Quick UI项目 如果你有只测试QML相关内容快速显示界面的需求,这时可以创建Qt Quick UI 项目,该项目中只包含 QML 和 JavaScript 代码,没有 C 代码。 对于 QML …

深入浅出剖析典型文生图产品Midjourney

2022年7月,一个小团队推出了公测的 Midjourney,打破了 AIGC 领域的大厂垄断。作为一个精调生成模型,以聊天机器人方式部署在 Discord,它创作的《太空歌剧院》作品,甚至获得了美国「数字艺术/数码摄影」竞赛单元一等奖。 这一事件展示了 AI 在绘画领域惊人的创造力,让人们…

评分规则的建模,用户全选就是满分10分(分数可自定义), 选2个5分, 选2个以下0分

子夜(603***854) 15:11:40 和各位讨论一下设计问题: 有个有业务场景: 有一组产品共4个产品(数目用户可自定义), 需要一套规则,比如如果用户全选就是满分10分(分数可自定义), 选2个5分, 选2个以下0分 又比如另一组产品 产品有个必选属性,如果选了其中所有的必选则5分, 其他项每1…

水体分割检测 包含YOLOV,COCO,VOC三种标记的数据集包含 857张图片

说明 水体分割检测指的是利用深度学习模型进行水体区域的分割和检测。YOLO(You Only Look Once)是一种流行的实时目标检测算法,其主要特点是速度快,适合于实时场景下的目标检测。 在水体分割检测中,可以使用YOLO算法来…

【新人系列】Python 入门(十四):文件操作

✍ 个人博客:https://blog.csdn.net/Newin2020?typeblog 📝 专栏地址:https://blog.csdn.net/newin2020/category_12801353.html 📣 专栏定位:为 0 基础刚入门 Python 的小伙伴提供详细的讲解,也欢迎大佬们…

OGRE 3D----2. QGRE + QQuickView

将 OGRE(面向对象图形渲染引擎)集成到使用 QQuickView 的 Qt Quick 应用程序中,可以在现代灵活的 UI 框架中提供强大的 3D 渲染功能。本文将指导您如何在 QQuickView 环境中设置 OGRE。 前提条件 在开始之前,请确保您已安装以下内容: Qt(版本 5.15 )OGRE(版本14.2.5)…

丹摩 | 利用 CogVideoX 生成视频

声明:非广告,纯用户体验 1. CogVideoX CogVideoX 是智谱 AI 推出的一款极具创新性与突破性的视频生成产品。它在技术层面展现出诸多卓越特性,例如其采用的 Diffusion Transformer(DiT)架构奠定了强大的生成能力基础…