4.linux系统USB串口绑定与设备管理
目录
一、Linux系统USB串口绑定与设备管理
00:07
1. 课程导览
00:16

- 课程结构:分为四个核心模块:设备绑定必要性、Linux外设识别技术、udev规则编写、实战应用
- 核心技术:重点掌握udev规则编写,实现USB串口设备的永久绑定,解决工业场景中的设备冲突问题
2. 设备识别
02:12
1)命令行侦察兵
02:17

- lsusb命令:
- 功能:列出所有连接的USB设备,显示厂商ID(Vendor ID)和产品ID(Product ID)
- 示例:输出"Bus 001 Device 002: ID 04f2:b52d"中,
04f204f204f2
是厂商ID,b52db52db52d
是产品ID - 过滤技巧:配合grep使用,如lsusb | grep 04f2可快速定位特定厂商设备
- dmesg命令:
- 功能:显示内核环缓冲区信息,记录设备插拔事件
- 关键信息:包含设备序列号、驱动加载状态等,如"[100.123456]usb 1-1: New USB device found,idVendor=04f2,idProduct=b52d"

- 高级用法:通过管道符组合命令,如lsusb | grep 1d6b可筛选特定厂商设备,提高排查效率
2)设备文件生成逻辑揭秘
04:36

- ttyUSB与ttyACM区别:
- 协议差异:ttyUSB基于传统USB转串口芯片(如FTDI),ttyACM遵循CDC-ACM协议
- 应用场景:开发板虚拟串口多采用ttyACM,工业设备常用ttyUSB
- 设备文件生成:
- 机制:udev根据sysfs属性信息动态生成设备文件
- 查看方法:使用ls /dev/tty*命令列出所有串口设备文件
3. udev规则
06:16
1)参数提取黄金三要素
06:23

- 序列号提取:
- 命令:udevadm info -a -n /dev/ttyUSB0
- 字段:ID_SERIAL为设备唯一标识,如"FTDI_FT232R_USB_UART_A9007P1K"
- 物理路径获取:
- 字段:ID_PATH反映设备物理连接拓扑,如"pci-0000:00:14.0-usb-0:1:1.0"
- 厂商ID解析:
- 字段:ATTRS(idVendor)标识设备厂商,如"0403"对应FTDI公司
2)规则语法深度拆解
07:29

- SUBSYSTEM:
- 作用:指定设备子系统类型,如SUBSYSTEM=="tty"匹配串口设备
- ATTRS:
- 匹配逻辑:通过设备属性精准定位,如ATTRS(idVendor)=="0403"匹配FTDI设备
- SYMLINK:
- 功能:创建持久化符号链接,如SYMLINK+="sensor_imu"生成易记设备名
- 组合规则示例:
SUBSYSTEM=="tty", ATTRS(idVendor)=="0403", ATTRS(idProduct)=="6015", SYMLINK+="sensor_imu"
3)热插拔调试黑科技
09:21

- udevadm monitor:
- 功能:实时监控设备热插拔事件,显示设备状态变化
- udevadm test:
- 作用:模拟规则执行过程,验证规则匹配逻辑
- 调试组合技:
- 先监控设备事件,再测试规则匹配,快速定位问题
4. 设备绑定技术
10:08
1)设备绑定原理

- 核心概念:通过唯一标识符(厂商ID和设备ID)将物理设备与逻辑名称绑定
- 绑定优势:解决设备插拔后编号变化问题(如video0可能变为video1)
- 典型应用:USB摄像头、串口设备等需要稳定识别的外设
2)设备信息获取

- 查询命令:
- lsusb:列出所有USB设备
- udevadm info:获取设备详细信息
- 关键参数:
- idVendor:厂商ID(如05a3)
- idProduct:设备ID(如9230)
- 示例输出:Bus 003 Device 010: ID 05a3:9230表示厂商ID05a3,设备ID9230
3)规则文件创建

- 目录检查:
- 目录创建:
- 编辑器选择:
- vim:功能强大适合高级用户
- nano:简单易用适合新手
4)权限设置

- 权限表示:
- 第一位:所有者权限
- 第二位:所属组权限
- 第三位:其他用户权限
- 常用权限:
- 6:读写权限(4+2)
- 4:只读权限
- 权限设置命令:
5)规则文件编写

- 基本格式:
- 参数说明:
- KERNEL:设备类型匹配模式
- ATTRS:设备特征匹配条件
- MODE:设备访问权限
- SYMLINK:创建的符号链接名称
6)规则生效

- 重新加载规则:
- 验证绑定:
- 应显示类似:/dev/camera -> video1
5. 实战演示
1)设备检测

- 检测步骤:
- 插入设备前执行lsusb记录初始状态
- 插入设备后再次执行lsusb对比新增设备
- 使用ls /dev/video*查看视频设备节点
2)规则文件编辑

- 编辑要点:
- 确保厂商ID和设备ID准确
- 符号链接名称应具有描述性(如camera、arm等)
- 权限建议设置为666(所有用户可读写)
3)多设备测试

- 测试场景:
- 同时连接多个同类型设备
- 验证符号链接是否始终指向目标设备
- 优势体现:
- 无论设备编号如何变化,符号链接保持稳定
- 应用程序只需使用符号链接名称即可
6. 常见问题
1)权限问题
- 现象:设备访问被拒绝
- 解决方案:
- 检查规则文件中的MODE值
- 确认规则文件所有者为root
- 重新加载规则后重新插拔设备
2)设备识别错误
- 排查步骤:
- 确认idVendor和idProduct准确
- 检查规则文件语法是否正确
- 查看系统日志dmesg | tail获取错误信息
7. OpenCV基础介绍与应用
27:05
1)OpenCV基础介绍与应用
27:34
- OpenCV的定义与发展历程
27:39

- 定义:OpenCV全称为Open Source Computer Vision Library,是一个开源计算机视觉库,具有开源特性,全球开发者可免费使用、修改和分发其代码。
- 里程碑意义:为计算机视觉领域带来新活力,提供丰富工具和算法,推动技术在安防监控、自动驾驶等领域的广泛应用。
- 版本迭代:
- 2.x版本开始支持Python,降低开发门槛
- 4.x版本升级DNN模块,提升深度学习任务性能
- OpenCV核心功能解析
28:18

- 图像处理:
- 常用函数:imread读取图像,imshow显示图像
- 优势:简化图像输入输出操作流程
- 特征检测:
- 典型应用:Canny函数实现边缘检测
- 作用:为后续图像分析提供基础特征信息
- 视频分析:
- 能力:逐帧处理实现目标跟踪、行为分析
- 跨平台性:支持多种操作系统和编程语言
- 图像处理基础:灰度化与二值化
29:14

- 前置作用:对原始图像进行预处理,提高图像质量,为特征提取奠定基础
- 灰度化实现:
- 公式:
Gray=0.299∗R+0.587∗G+0.114∗BGray = 0.299*R + 0.587*G + 0.114*BGray=0.299∗R+0.587∗G+0.114∗B
- 过程:将彩色图像每个像素点转换为单一灰度值
- 公式:
- 二值化实现:
- 方法:Otsu阈值法通过计算灰度直方图寻找最优阈值
- 效果:使图像类间方差最大化,突出目标特征
- 图像处理进阶:滤波与边缘检测
30:20

- 滤波去噪:
- 均值滤波:计算邻域像素平均值
- 高斯滤波:基于高斯函数加权平均,保留更多细节
- 边缘检测:
- Canny算法:检测精确边缘,采用双阈值减少虚假边缘
- Sobel算法:侧重梯度计算,检测较粗边缘
- 函数参数:
- 高斯滤波:
cv2.GaussianBlur()cv2.GaussianBlur()cv2.GaussianBlur()
需指定卷积核大小和标准差 - Canny检测:
cv2.Canny()cv2.Canny()cv2.Canny()
需设置高低阈值
- 高斯滤波:
- 模板匹配:原理与实现步骤
31:14

- 核心目标:在大图中定位小模板位置
- 匹配方法:
- 数学基础:基于
TM_CCOEFF_NORMED\mathrm{TM}\_\mathrm{CCOEFF}\_\mathrm{NORMED}TM_CCOEFF_NORMED
相关性系数 - 优势:能克服部分光照变化影响
- 数学基础:基于
- 实现步骤:
- 加载模板图像
- 滑动窗口遍历大图
- 计算窗口相似度
- 定位最佳匹配位置
- 误差因素:实际应用中需考虑尺度变化和光照差异
- OpenCV典型应用场景
31:54

- 医疗领域:X光、CT影像处理,辅助疾病诊断
- 工业领域:零件缺陷检测(划痕、裂纹等)
- 安防领域:人脸/车牌识别,实现门禁控制和车辆管理
- 优势特点:低成本、高灵活性促进广泛应用
2)OpenCV-Python环境搭建
32:11
- 环境搭建前的准备

- 工具要求:
- Python 3.x及以上版本
- pip包管理器
- 推荐IDE:PyCharm
- 版本兼容:
- OpenCV4.5.5与Python3.9适配良好
- 需参考官方文档确认版本搭配
- 镜像配置:建议使用阿里云、清华大学等国内镜像源加速下载
- Windows系统安装步骤

- 安装命令:
- 基础库:pip install opencv-python
- 扩展库:pip install opencv-contrib-python
- 验证方法:Python环境下执行import cv2无报错
- 常见问题:
- Python版本过高导致不兼容
- 解决方案:安装虚拟环境或降级Python版本
- 虚拟机(Linux)安装步骤

- 基础依赖:
- Ubuntu系统需先安装开发库:sudo apt-get install相关依赖
- 环境差异:
- Linux更依赖命令行操作
- 图形界面可能需要额外配置
- 注意事项:文件命名建议使用英文避免兼容性问题
3)项目实战:人脸记录系统
- 系统架构与核心组件

- 系统流程:采集→训练→识别→存储
- 模块功能:
- 采集模块:获取人脸图像
- 训练模块:对采集到的人脸数据进行模型训练
- 识别模块:利用训练好的模型进行实时人脸匹配
- 存储模块:将相关数据保存
- 关键技术:
- 人脸检测器:采用Haar级联分类器,能快速准确检测人脸区域
- 训练算法:使用LBPH算法,对光照变化有较好适应性
- 数据存储:选用SQLite数据库,具有轻量级、易操作特点
- 数据处理:人脸矩阵会转换为灰度图,减少数据量同时突出人脸特征
- 相关函数介绍

- CascadeClassifier:
- 功能:OpenCV中用于创建和管理级联分类器对象的类
- 模型文件:haarcascade_frontalface_default.xml,基于Haar特征和AdaBoost算法训练
- LBPHFaceRecognizer_create:
- 原理:基于图像纹理的识别方法,通过计算局部二值模式的直方图提取特征
- 优势:适用于算力有限的平台
- detectMultiScale:
- 功能:在给定灰度图像中检测对象,返回包含检测对象边界框的列表
- 输出格式:每个边界框由(x,y,width,height)组成
- 人脸采集器

- 采集过程:
- 摄像头调用:通过cv2.VideoCapture()函数实时获取视频流
- 人脸处理:
- 区域裁剪:采用ROI提取方法精准获取人脸部分
- 数据增强:通过旋转、缩放等操作增加训练数据多样性
- 数据存储:
- 格式:将提取的人脸特征向量存储至SQLite数据库
- 标注信息:包含用户姓名、ID等,方便后续识别和管理
- 人脸训练器

- 训练要求:
- 样本数量:建议每人≥30张,使模型学习更丰富的特征信息
- 训练函数:使用cv2.face.LBPHFaceRecognizer_create()创建识别器
- 训练效果:
- 接口特点:提供简单易用的接口,方便模型训练和调优
- 准确率影响:训练集大小对模型准确率有重要影响
- 人脸识别器

- 识别流程:
- 读取视频流→检测人脸→特征提取→模型匹配→输出结果
- 结果显示:
- 绘制信息:使用cv2.putText()在画面上绘制识别出的姓名和置信度
- 性能优化:
- 降低分辨率:减少数据处理量
- 多线程处理:提高处理效率
- 系统特点与优化方向

- 系统优势:
- 低成本:使用轻量级数据库和算法
- 易扩展:方便添加新功能模块
- 跨平台:可在不同操作系统上运行
- 现存问题:
- 光照影响:复杂光照下识别率下降
- 训练耗时:大样本训练需要大量计算资源和时间
- 优化方向:
- 模型升级:引入深度学习模型如MTCNN提高准确率
- 硬件加速:使用GPU加速训练过程
二、人脸识别系统实现要点
47:57

- 模型加载:系统启动时会自动加载训练好的模型文件models/trainer.yml和用户信息
- 音频提示:识别到已知人脸时会播放audio_files/test.mp3音频文件作为提示音
- 操作控制:
- 按q键可退出程序
- 按t键可调整识别阈值参数
- 错误处理:
- 当出现识别错误时,系统会显示红色"Error"提示
- 控制台会打印详细的错误信息识别错误:{e}
- 程序终止时会抛出KeyboardInterrupt异常
三、设备使用常见问题
1. USB设备绑定
- 设备识别:绑定后的USB设备可插在任意USB接口使用
- 系统通过设备标识而非接口位置进行识别
- 更换USB插口不影响设备功能
2. 虚拟机与树莓派对比
- 兼容性:虚拟机中的操作在树莓派上同样适用
- 部分库需要在树莓派中单独安装
- 树莓派性能通常低于虚拟机环境
- 使用便利性:
- 虚拟机无需外接显示设备,操作更方便
- 树莓派需要连接显示屏才能使用
四、知识小结
|
知识点 |
核心内容 |
考试重点/易混淆点 |
难度系数 |
|
USB串口绑定原理 |
通过udev规则实现设备与固定名称的绑定,避免因插拔顺序导致串口号变化 |
序列号提取方法:udevadm info -a -p查找id_serial字段 权限问题:规则文件中需配置MODE="0666" |
⭐⭐⭐ |
|
设备识别工具 |
lsusb显示厂商/产品ID,dmesg查看内核日志,grep过滤关键信息 |
ID区分:厂商ID可能重复,设备ID唯一 协议差异:ttyUSB(FTDI芯片) vs ttyACM(CDC-ACM协议) |
⭐⭐ |
|
udev规则编写 |
规则文件路径:/etc/udev/rules.d/,后缀为.rules 关键语法:SUBSYSTEM=="tty", ATTRS{idVendor}=="xxxx", SYMLINK+="自定义名称" |
热插拔调试:udevadm monitor实时追踪,udevadm test模拟规则生效 |
⭐⭐⭐⭐ |
|
OpenCV基础功能 |
图像处理(灰度化/二值化)、特征检测(边缘识别)、视频分析(目标跟踪) |
灰度化公式:RGB加权平均 二值化优化:Otsu算法自动计算阈值 |
⭐⭐ |
|
人脸识别系统 |
流程:采集→训练→识别 核心算法:Haar级联分类器(人脸检测)、LBPH(特征训练) |
数据增强:采集时需多角度/光照变化 延迟优化:降低分辨率或简化模型 |
⭐⭐⭐⭐ |
|
环境配置问题 |
Python版本兼容性(推荐3.8)、OpenCV库安装(pip install opencv-python) |
常见报错:版本冲突需创建虚拟环境 镜像加速:配置国内源(如清华镜像) |
⭐⭐ |
更多推荐


所有评论(0)