简写智能辅助驾驶的功能之 :注意力监测
本文介绍了智能辅助驾驶中的注意力监测系统实现方案。该系统通过摄像头采集驾驶员面部特征,使用CNN和LSTM算法分析注意力状态,当检测到分心或疲劳时触发预警。作者详细演示了本地开发环境搭建过程,包括使用ffmpeg进行视频流推送(rtmp://127.0.0.1:1935/live/cam)、MediaMTX流媒体服务器配置以及基于PyTorch和OpenCV的实时检测实现。项目采用本地化处理方案,
智能辅助驾驶是当前最热门的研究和实际落地应用的模块代码,无论本身就是人工智能方向的码农还是想刚入门的新人都可以通过这个小项目,来打开或充实自己的代码编程和落地能力。
智能辅助驾驶 —— 注意力监测
项目背景说明:
注意力监测功能主要通过传感器和算法实时监测驾驶员的注意力状态,防止因分心或疲劳导致事故。核心逻辑分为数据采集、状态分析和预警触发三个部分。
数据采集通常依赖车内摄像头、方向盘传感器或红外传感器。摄像头捕捉驾驶员的面部特征(如眼睑闭合度、视线方向),方向盘传感器检测握力变化,红外传感器辅助夜间监测。
状态分析环节采用计算机视觉和机器学习算法。面部特征数据通过卷积神经网络(CNN)提取关键点,结合时序模型(如LSTM)判断注意力持续性。
以下是我对注意力监测中数据采集、状态分析的总结和自己的小小落地试用:
环境搭建:
推流:
ffmpeg 8.0.0 gpl_he3062b8_906 conda-forge
opencv-python 4.13.0.92 pypi_0 pypi
关键的检测:
torch 2.8.0+cu126 pypi_0 pypi
torchvision 0.23.0+cu126 pypi_0 pypi
ultralytics 8.0.224 pypi_0 pypi
numpy 2.0.2 pypi_0 pypi
代码运行的整体逻辑:
获取实时视频流 - 打开MediaMTX - 推流 - VLC查看推流视频 -- 终端执行注意力检测指令
1、获取目标视频流【以自己的电脑摄像头为目标】获取对应的摄像头名称:
终端运行:
ffmpeg -list_devices true -f dshow -i dummy
回车会得到自己本地电脑对应的摄像头名称:
例如:video -- 视频设备类型
[dshow @ 0000020DFEFCFD40] "Integrated Webcam" (video)
2、将该设备推流【这里只是推流给本地127.0.0.1, 不经过互联网、不传给别人、不上云】
终端指令:
ffmpeg -f dshow -rtbufsize 10M -i video="Integrated Webcam" -pix_fmt yuv420p -c:v libx264 -preset ultrafast -tune zerolatency -f flv rtmp://127.0.0.1:1935/live/cam
# video="Integrated Webcam" = 推流的设备
# rtmp://127.0.0.1:1935/live/cam = 推流的整体地址
# 127.0.0.1 = 你的本机电脑(不经过互联网、不传给别人、不上云)
#1935 = RTMP 默认端口
#/live/cam = 自定义流地址
运行效果:正常效果本机摄像头已经启用
[libx264 @ 000002bcab6ba7c0] profile Constrained Baseline, level 3.1, 4:2:0, 8-bit
[libx264 @ 000002bcab6ba7c0] 264 - core 161 - H.264/MPEG-4 AVC codec - Copyleft 2003-2020 - http://www.videolan.org/x264.html - options: cabac=0 ref=1 deblock=0:0:0 analyse=0:0 me=dia subme=0 psy=1 psy_rd=1.00:0.00 mixed_ref=0 me_range=16 chroma_me=1 trellis=0 8x8dct=0 cqm=0 deadzone=21,11 fast_pskip=1 chroma_qp_offset=0 threads=11 lookahead_threads=11 sliced_threads=1 slices=11 nr=0 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=0 weightp=0 keyint=250 keyint_min=25 scenecut=0 intra_refresh=0 rc=crf mbtree=0 crf=23.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 ip_ratio=1.40 aq=0
Output #0, flv, to 'rtmp://127.0.0.1:1935/live/cam':
Metadata:
encoder : Lavf58.45.100
Stream #0:0: Video: h264 (libx264) ([7][0][0][0] / 0x0007), yuv420p, 1280x720, q=-1--1, 30 fps, 1k tbn, 30 tbc
Metadata:
encoder : Lavc58.91.100 libx264
Side data:
cpb: bitrate max/min/avg: 0/0/0 buffer size: 0 vbv_delay: N/A
# 下面这一行是实时变化的,这只是截取的其中一刻
frame= 4574 fps= 30 q=23.0 size= 84259kB time=00:02:32.93 bitrate=4513.4kbits/s speed= 1x
错误运行效果:这个就是没有在运行推流指令前打开MediaMTX
Last message repeated 2 times
[dshow @ 000001c4df184f00] real-time buffer [Integrated Webcam] [video input] too full or near too full (97% of size: 10000000 [rtbufsize parameter])! frame dropped!
Last message repeated 2 times
[dshow @ 000001c4df184f00] real-time buffer [Integrated Webcam] [video input] too full or near too full (99% of size: 10000000 [rtbufsize parameter])! frame dropped!
Last message repeated 2 times
[dshow @ 000001c4df184f00] real-time buffer [Integrated Webcam] [video input] too full or near too full (100% of size: 10000000 [rtbufsize parameter])! frame dropped!
Last message repeated 36 times
[tcp @ 000001c4df18f080] Connection to tcp://127.0.0.1:1935 failed: Error number -138 occurred
[rtmp @ 000001c4df18eb80] Cannot open connection tcp://127.0.0.1:1935
rtmp://127.0.0.1:1935/live/cam: Unknown error
终端实时监测的指令:注要和推流的地址、端口号保持一致!!
# rtmp://127.0.0.1 -- 本机地址
:1935/live/cam -- 端口号
python keypoint.py --source rtmp://127.0.0.1:1935/live/cam
整体的项目代码感兴趣可以git上获取完整代码:GDB-Creator/Driver-Attention-Detection-in-ADA: 初级的智能辅助驾驶的数据收集和分析,简单的完成了本地电脑设备的识别、推流、实时检测
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐

所有评论(0)