研电赛海报

手语识别项目。

 

简介:研究生电子设计竞赛赛题,设计基于视觉感知的手语识别系统,自动将手语翻译成文本或语言,为聋哑人和普通人之间的交流提供便利。
本人工作及技术重点:
设计基于深度图像的三维姿态估计算法,缓解光照、背景等干扰问题,同时得到更为完整的空间运动轨迹信息。
设计帧间差分累加法进行孤立词分割,同时设计帧间差分法用于提取孤立词序列的关键帧,减小了系统计算量。
充分利用关节轨迹的前后移动关系,设计基于双向LSTM的孤立词视频分类算法,模型小、易于部署。
采用阻塞消息队列,实现生产者消费者模型的进程间通信机制,解决了摄像头数据采集主进程与识别算法子进程之间的数据耦合问题。
设计QT上位机界面,实时显示识别算法中间变量与识别结果。

 

相关知识及面试优化。

进程间需要通信,可以使用multiprocessing模块的Queue实现多进程之间的数据传递。Queue本身是一个消息队列程序。
以队列为基础实现数据的共享。放入最后一个数据后,队列就进入了阻塞状态,默认会等待队列先取出值再放入新的值。

两个队列:一个que队列用于放深度图,一个stop队列用于标识一整句手语都说完了。

生产者用于Azure Kinect相机生产视频。生产者进程负责把一个完整的孤立词视频存起来,写到本地视频。在生产者进程里面自己还实现了一个队列,用来存放孤立词所有帧的图像集合。如果达到大于30帧图像并且符合是动作的要求,就开始把那个本地视频地址放到que消息队列,通知消费者来拿数据。同时,生产者进程还要接收消费者进程发送的终止stop信号,如果接收成员这句话就识别结束了就不用再采集了。

消费者用于que队列接收并处理孤立词所有帧的图像的算法,包含姿态提取,词义分析等等业务。同时还要使用算法判断是不是30几帧以上都没动,没动就是不说话了,就要放结束标识符到stop队列通知生产者。

 

如果是普通的put函数,当队列满了就阻塞等待一个弹出再push进去。如果是put_nowait函数,当队列满了就不再等待,直接报错。

get函数不止取了值,还会把值弹出队列。

 

下面是队列的基本使用。

复制代码
import multiprocessing
#定义消息队列,不指定默认最大
queue = multiprocessing.Queue(3)
queue.push(1)
queue.push("hello")
queue.push([1, 2, 3])
print(queue)
#获取第一个值
value = queue.get()
print(value)
#获取第二个值
value2 = queue.get()
print(value2)
复制代码

 

posted @   花与不易  阅读(452)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下
点击右上角即可分享
微信分享提示