【飞桨领航团AI创造营+部署】EdgeBoard上实现手势识别操控音乐播放器
在EdgeBoard上实现手势识别操控音乐播放器
·
前言
-
该项目是对先前手势识别控制音乐播放器项目的进一步完善并在Edgeboard上进行部署,主体思路是通过摄像头实时读取手势信息,再调用自训练的手势识别模型(paddlex yolov3模型)通过edgeboard fz3计算卡进行计算得出手势对应的操作信息,最后操控音乐播放器。
-
本项目前期模型训练见:做个手势,让音乐播放器言听计从?
一、项目效果展示
前半部分的是手势图片在Edgeboard上的预测
后半部分是通过摄像头在Edgeboard上预测(本人对着摄像头做手势)
由于Edgeboard上连接音响发不了声音(解决了的好兄弟麻烦教教我),而我这个项目又比较依赖音响,所以选择在本地进行了补充的部署,来补充展示模型预测效果。
二、开发环境
(1)硬件
- EdgeBoard Lite FZ3A
- 笔记本电脑
- 串口转USB数据线
- 1080P摄像头
(2)软件环境
EdgeBoard
- Ubuntu18.04
- Edgeboard软核1.8.1版本
- Python3.6.9
笔记本电脑
- win10
- Python3.8.0
三、部署流程和原理剖析
部署流程
原理剖析
通过摄像头实时读取手势信息,再调用自训练的手势识别模型(paddlex yolov3模型)通过edgeboard fz3计算卡进行计算得出手势对应的操作信息,最后操控音乐播放器。
四、核心文件及部分代码展示
Edgeboard部署部分
使用MobaXterm连接Edgeboard(默认密码为root)
运用cd指令进入/root/workspace/PaddleLiteDemo/res/models/detection/yolov3路径,并用ls指令查看目录下的文件如下
替换 /root/workspace/PaddleLiteDemo/res/models/detection/yolov3/路径下的_model_ params label.txt文件
设置好config.json
配置/root/workspace/PaddleLiteDemo/Python/路径下的detection.py
找到对应的image.json文件进行图片路径的配置
设置好测试图片的路径
然后在Edgeboard下运行以下代码,便可实现图片预测以及摄像头读取图片预测,预测展示见上文结果演示
五、本地部署的python程序代码以及模型文件已上传到文档中,有兴趣的同学可自行下载,此处摘选核心代码进行展示
import time
import pygame
import numpy as np
import cv2
import paddlex as pdx
import os
import time
import paddlehub as hub
def playMusic(path):
pygame.mixer.music.load(path)
pygame.mixer.music.play()
def pauseMusic():
pygame.mixer.music.pause()
def unpauseMusic():
pygame.mixer.music.unpause()
def stopMusic():
pygame.mixer.music.stop()
def nextMusic(musciList,index):
if index>=len(musciList)-1:
print("已经是最后一曲了")
index=0
return index
else:
index += 1
playMusic(musicList[index])
return index
def perMusic(musicList,index):
if index <= 0:
print("已经是第一首了")
return index
else:
index -= 1
playMusic(musicList[index])
return index
def addVome(volume):
print("当前音量值%f"%volume)
if round(volume,1)>=1.0:
print("已经是最大音量了")
else:
volume += 0.1
pygame.mixer.music.set_volume(volume)
return volume
def subVome(volume):
if round(volume,1)<=0:
print("已经是最小音量了")
else:
volume -= 0.1
pygame.mixer.music.set_volume(volume)
print("当前音量值%f" % volume)
return volume
def __init__(self,path,index=0,volum=0.5):
pathList = []
fileList = os.listdir(path)
for filename in fileList:
pathList.append(os.path.join(path,filename))
self.pathList = pathList
self.index = index
self.volum = volum
def gtcontrol(musicList,index):
model = pdx.load_model("E:\code (1)\demo\inference_model2")
volume2=0.5
countgo=0
countpause=0
countvoicedown=0
countvoiceup=0
countmodel2=0
countnext=0
while (True):
ret, frame = cap.read()
new_img = video_mirror_output(frame)
cv2.imshow('frame', new_img)
result = model.predict(new_img)
for dt in np.array(result):
cname, bbox, score = dt['category'], dt['bbox'], dt['score']
if score < 0.5:
continue
if (str(cname) == "go"):
countgo=countgo+1
if countgo==2:
countgo = 0
countpause = 0
countvoicedown = 0
countmodel2 = 0
countnext = 0
print(cname)
playMusic(musicList[index])
if (str(cname) == "pause"):
countpause = countpause + 1
if countpause == 2:
countgo = 0
countpause = 0
countvoicedown = 0
countmodel2 = 0
countnext = 0
print(cname)
pauseMusic()
if (str(cname) == "voicedown"):
countvoicedown = countvoicedown + 1
if countvoicedown == 1:
countgo = 0
countpause = 0
countvoicedown = 0
countmodel2 = 0
countnext = 0
print("减少音量")
print(cname)
volume2 = subVome(volume2)
if (str(cname) == "voiceup"):
print("添加音量")
print(cname)
volume2 = addVome(volume2)
if (str(cname) == "model2"):
countmodel2=countmodel2+1
if countmodel2==3:
countgo = 0
countpause = 0
countvoicedown = 0
countmodel2 = 0
countnext = 0
print(cname)
print("点歌")
model2()
if (str(cname) == "next"):
countnext=countnext+1
if countnext==3:
countgo = 0
countpause = 0
countvoicedown = 0
countmodel2 = 0
countnext = 0
print(cname)
print("下一首")
index=nextMusic(musicList,index)
if cv2.waitKey(1) & 0xFF == ord('q'): # 按q键退出
break
cap.release()
index=nextMusic(musicList,index)
if cv2.waitKey(1) & 0xFF == ord('q'): # 按q键退出
break
cap.release()
cv2.destroyAllWindows()
六、参考链接
-
特别感谢廷楠大佬在我部署项目时给予的帮助,当然还有eb技术支持、以及郑佬,这里就不一一列举啦。
七、个人简介
作者:萧泽锋
嘉应学院 2018级 本科生
感兴趣方向:计算机视觉、深度学习
我在AI Studio上获得白银等级,来互关呀~
更多推荐
已为社区贡献1438条内容
所有评论(0)