内容介绍
内容介绍
1.项目需求
将dToF可识别挥动,接近/远离等手部动作,并使用手势动作控制屏幕上的菜单功能。
2.处理思路
我们使用MicroPython驱动TMF8821的dToF传感器模块,之后我们将获取其中的置信值和距离作为我们手势判断标准,并且将温度值读取出来作为我们的菜单选项,再添加当前时间作为我们菜单的第二个选项。
3.流程图
4.实现步骤
4.1 下载TMF8821固件
我们将再GitHub上下载我们的TMF8821固件https://github.com/K1ngGrim/tmf882X_micropython
这里将我们的固件下载已经写完了,这里我们主要解决对于挥动远离接近的逻辑判断。
4.2 动作识别的实现
4.2.1 获取识别数据
在每一帧数据采集时,我们提取了第2、5、8个采样点的距离和置信度值,以便进行动作识别判断。
frames = tmf8821_util.measure_frame() # 获取多帧数据
if frames:
selected_results = [] # 存储第2、5、8个结果
frame = frames[0] # 获取第一个帧
for frame in frames:
if len(frame.results) >= 8:
selected_results.extend([frame.results[1], frame.results[4], frame.results[7]])
4.2.2 识别逻辑
通过分析距离和置信度的变化趋势,我们实现了挥动、接近和远离的判断:
def collect_data(self, result, temp):
self.distances.append(result.distanceInMm)
self.temp = temp
if self.previous_distance is not None:
distance_change = result.distanceInMm - self.previous_distance
self.distance_changes.append(distance_change)
self.previous_distance = result.distanceInMm
if self.previous_confidence is not None:
confidence_change = result.confidence - self.previous_confidence
self.confidence_changes.append(confidence_change)
self.previous_confidence = result.confidence
通过比较当前和前一时刻的距离与置信度变化,我们判断手势动作:
- 接近: 当距离逐渐减小,且置信度增大时,判断为手势接近。
- 远离: 当距离逐渐增大,且置信度减小时,判断为手势远离。
- 挥动: 通过分析数据的波动模式(如距离的增减交替),判断是否为挥动动作。
def analyze_changes(self):
if len(self.distance_changes) < 5 or len(self.confidence_changes) < 5 or self.default_distance is None:
return "No sufficient data to analyze"
distance_trend = sum(self.distance_changes)
confidence_trend = sum(self.confidence_changes)
if self.is_wave_gesture():
self.wave_action()
print("挥动")
elif distance_trend > 80 and confidence_trend <=0:
self.far_action()
print("远离")
elif distance_trend < -150 and confidence_trend <= 0:
self.near_action()
print("接近")
else:
print("不动")
self.reset()
4.2.3 扩展的手势识别
此外,系统还实现了更精细的挥动检测。挥动手势识别不仅通过距离变化来判断,还结合了距离的波动模式。挥动的判断逻辑如下:
def is_wave_gesture(self):
if len(self.distances) < 5:
return False
default_distance = self.distances[0]
max_distance = max(self.distances)
min_distance = min(self.distances)
if (default_distance - min_distance > 15 and max_distance - default_distance > 15) or \
(max_distance - default_distance > 15 and default_distance - min_distance > 15):
return True
return False
4.3 菜单界面设计
菜单界面设计分为三个界面:初始界面显示温度和时间,第二个界面显示传感器温度数据,第三个界面显示当前时间。用户通过挥动手势在菜单项之间切换,接近进入选择界面,远离退出或返回。
def display_menu(self):
self.in_menu = True
menu_y_offset = 50
display.fill(st7789.BLACK)
for index, item in enumerate(self.menu_items):
color = st7789.WHITE
if index == self.current_menu_index:
color = st7789.GREEN
display.text(font2, item, CENTER_X - 20, menu_y_offset + index * 40, color)
4.4 菜单界面切换
def enter_selected_menu_item(self):
self.in_menu = False
selected_item = self.menu_items[self.current_menu_index]
if selected_item == "Temp":
self.display_temp_page()
elif selected_item == "Time":
self.display_time_page()
5.效果展示
5.1 菜单界面
5.2 温度界面
5.3 时间界面
6. 项目总结
通过本项目,我们成功实现了一个基于TMF8821 dToF传感器的手势识别系统,系统能够识别接近、远离和挥动等常见手势,并根据手势控制屏幕菜单的切换。通过对传感器数据的分析,我们实现了高效、精确的手势识别。菜单界面设计简洁,用户可以通过手势轻松切换不同界面,查看温度、时间等信息。
7.后续计划
后续可以添加一些LGVL,让我们界面显示更加美观,然后再调试的过程中可能会导致一些误判,我们也可以添加一些滤波算法来调整我们的识别的操作。
附件下载
tmf882X_micropython-master.7z
团队介绍
热爱电子学生
评论
0 / 100
查看更多
猜你喜欢
[2024艾迈斯欧司朗竞赛] 基于TMF8821的dToF传感器模块 - 搭配RP2040实现手势识别本项目基于TMF8821 dToF传感器模块和RP2040微控制器的项目,TMF8821传感器能够精确测量距离并识别手部动作,挥动、接近和远离等功能,RP2040微控制器处理传感器数据,通过算法识别手势屏幕菜单显示和测量。
meiyao
25
2024艾迈斯欧司朗竞赛 - 基于dToF实现手势识别该项目使用了自制的STM32系统板,实现了dToF传感器手势识别的设计,它的主要功能为:识别手势挥动和接近远离。
汽车抓狂人
27
2024艾迈斯欧司朗竞赛 - 基于RP2040和TMF8821 dToF传感器实现手势识别基于RP2040游戏机和TMF8821 dToF传感器实现手势识别。
bzhou830
25