基于百度飞桨PaddlePaddle模型训练的手势识别模型控制音乐播放器

15 篇文章 3 订阅
本文介绍了使用百度飞桨PaddlePaddle构建的手势识别模型,通过识别5种手势来控制音乐播放器。作者分享了从配置虚拟环境、安装飞桨、模型训练到实战应用的全过程,包括数据集的选择、模型训练的细节以及实际操作中采用的多线程优化。最终,模型能够流畅地根据手势控制音乐播放的开始、停止、切换等操作。
摘要由CSDN通过智能技术生成


前言

随着机器学习深度学习的爆火,百度近期推出了百度飞桨模型,秉承着玩玩看看的想法基于百度飞桨模型做了一套代码。目前实现的功能是识别5种手势,控制音乐播放器的开始关闭上一首下一首以及暂停。在开始之前,不得不说,百度飞桨的社区有待壮大。


一、什么是百度飞桨PaddlePaddle?

PaddlePaddle简介:
(PArallel Distributed Deep LEarning 并行分布式深度学习)
飞桨(PaddlePaddle)以百度多年的深度学习技术研究和业务应用为基础,是中国首个自主研发、功能完备、 开源开放的产业级深度学习平台,集深度学习核心训练和推理框架、基础模型库、端到端开发套件和丰富的工具组件于一体。目前,飞桨累计开发者265万,服务企业10万家,基于飞桨开源深度学习平台产生了34万个模型。飞桨助力开发者快速实现AI想法,快速上线AI业务。帮助越来越多的行业完成AI赋能,实现产业智能化升级。

百度飞桨使用指南
特别指出:百度飞桨研究了多套模型,如
PaddleNLP自然语言处理模型库与PaddleCV视觉模型库,仅基于本项目我采用了PaddlePaddle模型而已。关于其它可移步官网。

一.1 飞桨AI Studio

这是目前我找到的,可以在线跑模型的唯一一个网站(如果各位有知道其他的欢迎评论)每周可以 领取(白嫖)一定时间的算力卡,用来在线跑模型,另外这也是一个学习社区,内部有许多基于百度飞桨的课程供大家参考学习,学习完成还可以领取算力卡。
大家直接百度搜索飞桨AI Studio即可 我不再附上链接(因为之前写爬虫附链接太多被官方大大提醒了)

二、实际使用

1.配置虚拟环境

学python嘛,虚拟环境必不可少,环境的坑我是踩了一次又一次(我恨啊),继上次我整理文件结果格式化了我的电脑以后我谨慎了很多。近期对于手上的许多项目基本上是一个项目一个虚拟环境。在使用过程中可以完全隔绝环境污染等问题,但是也出现了另一个问题。python以大量的第三方库而出名,所以使用一套虚拟环境稍微整理一下就小几个G,对于电脑又是一种负担。所以一定要随用随清理。
对于虚拟环境的配置我在其它博客中已经提到。没有看过的朋友务必创建一个虚拟环境再进行下一步。少壮不整理,老大修bug。
袁六加.:linux和windows下虚拟环境的配置

2.安装

代码如下(示例):
个人感觉官方文档还是非常良心的 ,进入官网后点击菜单栏的安装 选择自己的环境 如笔者环境 windows10 python pip 无GPU (所以选择cpu)
在这里插入图片描述
进入虚拟环境复制命令即可

安装验证:

import paddle
paddle.utils.run_check()

运行出现
PaddlePaddle is installed successfully!
证明安装成功
测试实例:
在这里插入图片描述

三、实战

飞桨AI Studio内部有大量数据集可供选择下载
数据集选择:
数据集我使用的是现成的,文件解压后内部有十种手势,一种大概200张笔者采用了其中的12345手势。
在这里插入图片描述
关于训练本人训练了150层cnn实际上在训练到110层左右时损失函数就已经准确到小数点后三位了,本人电脑没有GPU,挂着跑了三天三夜(哭死)。模型最后跑完了准确度还是非常不错的。
在投入使用的时候采用opencv进行了一个简单的中值滤波,以及镜像反转并框定区域对指定区域保存其图片传递给模型进行手势识别。在音乐播放方面采用了pygame。
在以上方式投入使用时会出现播放音乐则视频进程卡死现象。基于此状况采用了多线程的方式进行优化,最后的效果是比较流畅的。

核心代码概览

训练代码:

EPOCH_NUM = 150
print('开始训练...')
model_save_dir = r"E:\deeplearning_finger\model_cnn"

for pass_id in range(EPOCH_NUM):
    # 进行训练
    train_cost = 0
    for batch_id, data in enumerate(train_reader()):
        # 遍历train_reader的迭代器,并为数据加上索引batch_id
        train_cost, train_acc = exe.run(
            program=fluid.default_main_program(),  # 运行主程序
            feed=feeder.feed(data),  # 喂入一个batch的数据
            fetch_list=[avg_cost, accuracy])  # fetch均方误差和准确率

        all_train_iter = all_train_iter + BATCH_SIZE
        all_train_iters.append(all_train_iter)
        all_train_costs.append(train_cost[0])
        all_train_accs.append(train_acc[0])

        if batch_id % 10 == 0:  # 每10次batch打印一次训练、误差、准确率
            print("\nPass %d, batch %d, Cost %f, Acc %f" %
                  (pass_id, batch_id, train_cost[0], train_acc[0]))
    # 开始测试
    test_accs = []  # 测试的损失值
    test_costs = []  # 测试的准确率
    # 每训练一轮 进行一次测试
    for batch_id, data in enumerate(test_reader()):  # 遍历test_reader
        test_cost, test_acc = exe.run(program=fluid.default_main_program(),  # #运行测试主程序
                                      feed=feeder.feed(data),  # 喂入一个batch的数据
                                      fetch_list=[avg_cost, accuracy])  # fetch均方误差、准确率
        test_accs.append(test_acc[0])  # 记录每个batch的误差
        test_costs.append(test_cost[0])  # 记录每个batch的准确率

    # 求测试结果的平均值
    test_cost = (sum(test_costs) / len(test_costs))  # 每轮的平均误差
    test_acc = (sum(test_accs) / len(test_accs))  # 每轮的平均准确率
    print('Test:%d, Cost:%0.5f, ACC:%0.5f' % (pass_id, test_cost, test_acc))

识别代码:

while (cap.isOpened()):

    # print(finger_num)
    if finger_num == '1':
        cv2.putText(frame, '1', (0, 50), font, 2, (0, 0, 255), 3, cv2.LINE_AA)
        # pygame.mixer.music.stop()
        if pygame.mixer.music.get_busy():
            pass
        else:
            pygame.mixer.music.stop()
            music = pygame.mixer.music.load(songs_list[index])
            # print(songs_list[index])
            pygame.mixer.music.play()
    elif finger_num == '2':
        cv2.putText(frame, '2', (0, 50), font, 2, (0, 0, 255), 3, cv2.LINE_AA)
        pygame.mixer.music.pause()
    elif finger_num == '3':
        cv2.putText(frame, '3', (0, 50), font, 2, (0, 0, 255), 3, cv2.LINE_AA)
        if index >= len(songs_list) - 1:
            pass
        else:
            pygame.mixer.music.stop()  # 暂停音乐意为无论播放什么都中断
            music = pygame.mixer.music.load(songs_list[index])
            pygame.mixer.music.play()
            index += 1

    elif finger_num == '4' or canny_num == '4':
        cv2.putText(frame, '4', (0, 50), font, 2, (0, 0, 255), 3, cv2.LINE_AA)
        if index <= 0:
            pass

        else:

            music = pygame.mixer.music.load(songs_list[index])
            pygame.mixer.music.play()
            index -= 1
    elif finger_num == '5':
        cv2.putText(frame, '5', (0, 50), font, 2, (0, 0, 255), 3, cv2.LINE_AA)
        pygame.mixer.music.stop()
        stop_thread(t5)
        cv2.destroyAllWindows()
        cap.release()
        # 键盘Esc键退出
    else:
        pass

如需完整代码请私信我

四、 效果展示:

基于百度飞桨的手势识别控制音乐


总结

以上就是今天全部内容,如有问题欢迎批评指正。

  • 2
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论
百度飞桨PaddlePaddle)是一个开源的深度学习平台,它提供了丰富的深度学习算法库和工具,可以帮助开发者快速构建和训练深度学习模型。下面是一些使用PaddlePaddle的基本步骤: 1. 安装PaddlePaddle:你可以通过pip安装PaddlePaddle。在命令行中运行以下命令即可安装最新版本: ``` pip install paddlepaddle ``` 2. 导入PaddlePaddle库:在Python代码中,你需要导入paddle模块来使用PaddlePaddle的功能: ``` import paddle ``` 3. 构建模型:使用PaddlePaddle可以方便地构建各种深度学习模型。你可以使用PaddlePaddle提供的高级API,如paddle.nn模块来定义神经网络模型。 4. 数据处理:在训练深度学习模型之前,你需要准备好训练数据。PaddlePaddle提供了丰富的数据处理和预处理工具,如paddle.io模块,可以帮助你加载和处理数据。 5. 模型训练:使用PaddlePaddle进行模型训练非常简单。你可以使用paddle.optimizer模块选择优化器,并使用paddle.nn模块中的API定义损失函数和评估指标。然后,使用PaddlePaddle提供的训练API进行模型训练。 6. 模型预测:训练完成后,你可以使用训练好的模型进行预测。使用PaddlePaddle的预测API,你可以输入待预测的数据,并获得模型的输出结果。 这只是PaddlePaddle的基本使用方法,还有更多高级功能和技巧可以探索。你可以查阅PaddlePaddle的官方文档和示例代码来获取更多信息。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

袁六加.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值