资源描述
本科毕业论文(设计)专用本科毕业论文(设计)论 文 题 目:基于深度学习技术的人员行为异常检测系统设计摘要随着人工智能领域技术的不断发展,人工智能与制造业的融合应用已具备一定的基础。 现代工厂中人员基数较大,人员行为状况复杂,发生突发意外事件的情况可能性较大,为 了方便企业对员工异常行为的判断,提高工厂安防能力,本设计拟设计一款现代工厂作业 人员行为异常检测系统。本设计利用深度学习技术,对数据进行训练与验证,依靠 open pose 框架对权重进行 设置,以达到视觉检测的效果,使用 Open Pose 在做动作识别的时候可以有效的提高动作 识别度,增加视觉识别的准确性和数据交互能力。同时,利用 Open Pose 算法对目标进行 检测与数据分析,并对所检测的图像中的人体骨架的关键信息点进行目标检测和数据分析, 将算法检测出的图像中人体骨架进行信息关键点标注,将骨架关键点连接形成一个类似火 柴人的骨架,然后计算每一个关键点的夹角,以此来判断人体动作的姿态显示。本设计系统通过 Visual Studio Code 软件搭载 python3.75 进行程序设计实现对人体姿态 识别,并进行了实验验证,通过实验表明:本系统结构简单,设备需求量减小、数据集中, 系统稳定性好,与传统人体姿态识别方法相比,数据交互性强,使用成本较低,数据量较 小。关键词:Open pose;姿态识别;人体姿态;目标检测AbstractWith the continuous development of artificial intelligence technology, the fusion application of artificial intelligence and manufacturing industry has a certain basis. In modern factories, the personnel base is large, the personnel behavior is complex, and the possibility of accidents is large. In order to facilitate the enterprise to judge the abnormal behavior of employees and improve the factory security ability, this design intends to design a modern factory personnel behavior abnormal detection system.This design uses deep learning technology to train and verify data, and relies on open pose framework to set weights, so as to achieve the effect of visual detection. Open Pose can effectively improve the degree of motion recognition, increase the accuracy of visual recognition and the ability of data interaction when doing motion recognition. At the same time, the Open Pose algorithm was used for target detection and data analysis, and the key information points of human skeleton in the detected images were detected and data analysis. The key information points of human skeleton in the images detected by the algorithm were marked, and the skeleton key points were connected to form a skeleton similar to that of a match man, and then the included Angle of each key point was calculated. To judge the posture display of human movement.In this design system, the Visual Studio Code software is equipped with python3.75 for program design to realize the recognition of human posture, and the experimental verification is carried out. The experiment shows that: The system has the advantages of simple structure, reduced equipment demand, stable data, good system stability and strong data robustness. Compared with traditional human body posture recognition methods, the data interaction is strong, the use cost is low, and the data volume is small.Key words: Open pose;Gesture recognition;The body posture;Target detection目录1 引论11.1 研究目的及意义11.2 国内外研究现状31.3 设计的主要内容42 行为异常检测系统总体方案52.1 系统需求与分析52.2 系统总体方案设计53 系统硬件设计63.1 硬件方案设计63.2 深度相机选型73.3 视觉板卡选型83.4 声光报警装置选型103.5 光源装置选型114 行为异常检测系统通讯设计134.1 通信协议的选择134.2 深度相机与 JETSON NANO 板卡 TCP/IP 通讯134.3 深度相机与 JETSON NANO 板卡 CSI 通讯145 行为异常检测系统软件设计165.1 软件方案设计165.2 数据采集185.3 数据集收集与图片标注185.4 图片预处理195.5 手部特征算法及程序设计225.6 身体特征算法及程序设计235.7 人体姿态识别算法及程序设计256 行为异常检测276.1 识别权重准备276.2 检测系统识别准备276.3 行为异常检测系统297 结语33参考文献34致谢35附录36附录一36附录二421 引论1.1 研究目的及意义1.1.1 研究目的随着经济发展,社会体系的逐步完善,社会治安的能力得到大幅度提升,在 2020 年11 月国家信息中心提出全观智慧城市白皮书,首次提出全光智慧城市的发展理念。 随着这一政策推出,各地方开始纷纷跟进“智慧城市”建设项目,由各大城市开始向乡镇 扩散。智慧城市是运用物联网、云计算、大数据、空间地理信息集成等新一代信息技术, 促进城市规划、建设、管理和服务智慧化的新理念和新模式。至 2010 起年我国安防行业总收入已达 2350 亿元,并逐年快速增长态势。2013 年我国安防行业总收入达到 3800 亿元。到了 2016 年我国安防行业总收入达到了 5400 亿元,截止至 2017 年底,我国安防企业数量大约有 2.1 万家,行业总收入增长至突破 6000 亿元, 年均增长 14.4%,全行业实现增加值 1960 亿元,年均增长 12.7%。2018 年我国安防行业 总收入将达到 6678 亿元左右。2020 年我国安防行业总收入将突破 8000 亿元,达到了 8212亿元左右,如图 1.1 所示。图 1.1 视觉市场分析智能安防市场空间广阔,视频监控高增速。AI 技术赋予安防感知和认知能力,从人 脸识别、视频行为分析到后端有效数据的提取及挖掘,协助解决安防场景中诸多复杂、动 态问题,推动安防行业智能化发展。据预测,全球智能视频监控市场 2020-2025 年复合增1速为 7.1%,2025 年市场规模将达到 318 亿美元,如图 1.2 所示。图 1.2 视觉市场规模示意图由于深度学习算法在在语音和图像识别领域的重大突破,通过摄像头识别人脸开始成 为现实。伴随安防监控系统的越发庞大,监控数据也随之而来,针对视频监控的中出现的 行为异常时间的检测与事故发生的诱导因素,这需要安防人员时时刻刻的观察各个监控数 据,但是人的精力是有限的,无法时时刻刻保持高度集中的注意力进行观察各监控数据, 因此会产生各种因素导致漏检与误检等情况,从而导致安防能力下降。如今,工厂人员密 集,人员活动范围变大,在此过程中突发的异常行为事件就变得各式各样,有的行为异常 很难去辨认,甚至难以察觉,如此以来,大大的增加了视频监控技术的技术难度。针对这 种情况本设计提出一种基于深度学习技术的现代工厂作业人员行为异常检测系统设计,用 以辅助监控人员的工作,以此减少监控工作人员压力提高安防能力。5G 带来了网络环境的全新变革,多项智慧城市的标准体系的落地、加上 AI 技术条 件的逐渐成熟,智慧城市建设有望将进入快车道。人工智能改变了机器视觉在物理世界朝 数字世界转换的方式,这两大技术在安防领域的融合应用,目前正在构成“5G+AI+安防” 的全新的组合,助推视频监控行业迈向超高清、AI 智能的新阶段。1.1.2 研究意义异常事件检测技术(或者称为行为异常检测技术)的研究能不断推进智能化技术的发 展,这对促进社会和谐意义重大。在社会治安方面;可以对视频监控地点进行实时监控, 当检测点发生打架,抢劫,斗殴等做出有违社会治安稳定的异常行为时通过视觉检测进行 判断其异常行为模式并及时向相关部门进行数据交互提醒,以此可以大幅度提升该地区安 防效率,有效避免恶性事件的发生;在交通监管方面,行人横穿马路,发生车祸,都可以 通过行为异常检测技术进行监控识别;在工厂生产方面,能检测出检测区的作业人员发生9跌倒,违规攀爬,碰撞和突发性的异常行为动作进行报警提示,使监控人员第一时间注意 到,并给予解决,在关键时刻甚至可以挽救工作人员的生命;行为异常检测技术也可以运 用于商场,小区,银行,景点园区,博物馆等场景,通过及时有效的检测监控中的异常行 为,降低突发事件造成的危害。将视频识别与动作检测,这种高效的行为异常检测技术运 用在安防技术上,能减少人力物力 ,对群众与社会治安提供一定量的保障。所以,对针 对这种行为异常检测算法的研究显得极为急迫和重要。1.2 国内外研究现状1.2.1 国外研究现状 人工智能技术通过搭载着大数据时代的帆船得到了飞速的发展,监控安防系统也越来越智能化普及化,如图 1.3 所示。研究人员基于这个实验,发现动作和骨骼关键点的关系, 于是开始针对骨骼关键点进行研究。2019 年曾经开源 Open Pose 的卡内基梅隆大学(CMU) 公布了 ICCV 2019 论文 Single-Network Whole-Body Pose Estimation,提出一种在单一网 络实现全人体姿态估计的算法,相对 Open Pose 大幅提高了速度。在 Open Pose 只能达到 帧率 1.6 fps 的图像上,该文提出的算法运行帧率可达到 13.2 fps,且精度还有改进。相对 与原来的人体姿态估计,即对人体躯干、人脸、手部都进行姿态估计,这可以通过先检测 人体躯干关键点,然后再针对人脸和手部进行单独的关键点定位实现,这种方法需要多个 姿态估计网络,速度并不快。 卡内基梅隆大学在 Open Pose 算法框架下,使用单一网络 实现全人体的姿态估计并在论文 Open Pose: reatime multi-person 2D pose estimation using Part Affinity Fields 基础上进行了改进,将原本人脸、手部 Part Affinity Fields 直接合并进 入人体的 Part Affinity Fields, 进行多任务学习,实现上述功能。图 1.3 全球视觉市场规模分布图1.2.2 国内研究现状2022 年由国内苏波,柴自强,王莉7等学者提出针对人体姿态估计模型 Open Pose 计 算量大、检测速度慢等问题,提出了一种改进 Open Pose 模型,替换其主干网络为八度卷 积与 Mobile Net 融合而成的 Oct - Mobile Net,并优化缩减预测阶段的重复分支。实验表 明,改进模型的计算量降低为原来的 12%且检测速度提升 300%。应用改进 Open Pose 模 型提取标准视频与测试视频的姿态向量时间序列,其中姿态向量由关键点坐标经归一化处 理后组合得到。采用姿态向量之间的余弦距离表征单帧动作相似度,通过动态时间规整算 法计算标准序列与测试序列之间的累积距离作为序列整体相似度。该评分方法计算复杂度 低且适用于视频 时长不一致的情况,在八段锦健身动作评估中取得了较好应用效果,具 有一定的推广应用价值,如图 1.4 所示。1.3 设计的主要内容图 1.4 姿态估计本文提出了一种基于深度学习技术的人员行为异常检测系统设计,通过了解深度学习 技术的人员行为异常检测系统的组成单元,首先对深度学习技术的人员行为异常检测系统 进行功能分析,根据功能进行设备选型,选择适当的视觉板卡和深度相机等硬件,合理构 建空连接布局。通过运用 Open pose 算法对读取的图像进行关键点识别方法,该方法通过轻量化 Open pose 对视频流进行骨骼图像提取,中间通过对得到的图像进行姿态数据集标注,最 后再通过 COCO 模型对标注图像进行分类训练,将训练出来的权重文件进行分类。根据 所需要的识别状态更换合适的权重文件,然后利用 Python3.75 结合 Visual Studio Code 编 写深度学习系统程序,最后通过识别检测验证程序调试,使深度相机可以实现实时的姿态 获取,以检测人体姿态。2 行为异常检测系统总体方案2.1 系统需求与分析由于现在人工智能技术的发展,企业与公司对安防意识的需求增大,参考海康威视和 百度对视觉安防的技术攻坚,视觉安防得到了一定量的普及,人工智能视觉识别作为安防 监控的能力得到大幅度提升。针对这一发展需求与时代发展趋势,提出一种基于深度学习 技术的现代工厂作业人员行为异常检测系统设计来实时监测定位人体,判断特殊时段、核 心区域是否有人员入侵;基于人体关键点信息,进行二次开发,识别特定的异常行为,及 时预警管控。学习技术的人员行为异常检测系统,技术通过相机作为视觉采集装置,在特定的工作 区域或指定的安装位置进行数据采集,根据分析数据自动检测区域内是否存在异常行为, 来提高安防效率,可以通过不同场景的实际需求更换不同的采集设备与视觉处理设备来实 现不同类型的异常行为识别。2.2 系统总体方案设计通过在各工作地点内安装高清视觉摄像头,实时监控工作人员的工作状态。通过以太 网通信,将摄像头的数据画面实时传播给 Jetson Nano 板卡进行视觉处理,通过算法的深度 学习将视频中的人分为若干个点,在拼合运用模型将人体进行姿态估计,形成一个由多个 关键点合成的人体骨架并更具视频传输回来的画面进行实时更新用以检测,当工作人员出 现异常行为,身体姿态发生变化,Jetson Nano 视觉处理检测到行为异常的姿态输出信号。 声光报警器接收到信号后报警触发,人体姿态示意实时在 PC 端显示。方案如图 2.1 所示图 2.1 系统方案示意图3 系统硬件设计3.1 硬件方案设计本设计主要由 4 个部分组成,分别是采集点,处理点,报警点,反馈点四个部分组成。 首先通过摄像头进行目标进行图像检测,然后通过通讯进行数据交互,将数据给于视觉板 卡进行视觉处理。视觉板卡将得到的数据图像通过 open pose 算法框架进行算法识别数据 通过对比已经训练好的权重进行数据验证,然后通过显示设备将图像处理处理,图片中每 一个都变成了一幅幅由多个关键目标数据信息点组成的一副火柴人形状的人体骨架,然后 通过骨架去判断人体姿态。当人体发生异常的时候算法会输出一个信号,该信号经过 Jetson Nano 内置 I/O 口输出信号,使报警装置进行报警等工作提示,硬件方案如图 3.13.2 所示。通过本方案的设计与需求的分析结合设计需求主要硬件产品表 3.1 所示;表3.1 硬件设计产品序列表产品名称产品型号产品数量海康威视双目行为分析摄像机DS-2CD8426F/B-I4英伟达视觉板卡Jetson Nano1联想 TF 高速存储卡专业版 128G1施耐 Schneider Electric 信号灯带蜂鸣器Schneider XVR 多功能 LED 信号灯1图 3.1 硬件设备整体连接示意图3.2 深度相机选型图 3.2 硬件设备控制连接示意图传统相机,仅支持普通监控功能,脱离不了人员值守监控范畴,不能减少人员疲劳, 松懈,短时间离开,无法支持照顾多点的常规缺陷。传统监控的图像不能长时间显示。摄 像机采集到的海量视频图像传输到监控中心后,值班人员很可能没看到重要的异常情况。 因为缺乏智能因素,录像数据无法被有效地分类存储,数据工作非常耗时,人们很难获得 全部信息。海康威视 DS-2CD8426F/B-I 200 万深眸双目行为分析摄像机,内置高性能 GPU,内嵌 专为视频监控场景设计、优化的深度学习算法和双目立体视觉算法,具备了比人脑更精准 的安防大数据归纳能力,可以实现穿越警戒线、徘徊、奔跑检测、人数异常检测、间距异 常检测、剧烈运动检测、离岗检测、倒地检测、滞留检测等 9 项人工智能视觉检测技术。 只需要将权重训练好则无需二次配置,该设备采用人体仿生双目式设计,可以像人眼由于 立体识别图像而不是简单的二维平面识别,如图 3.3 所示。当设备供电开始工作时一对双目镜头实时获取同一目标检测的场景并各自独立生成 的两幅图像,通过自带的数据计算,目标在同一个空间点时所生成的两幅图像的视觉差距”, 用以来定位该目标场景的深度,通过数据算法对图片的目标检测图像进行生成一种立体结 构的视图,在双目摄像头在工作过程中识别到需要检测的目标后,通过计算图像对应点间位 置偏差,获取目标的三维信息, 瞬间完成图像获取,大大提高了行为分析检测的准确性。支 持手动标定、自动标定、智能标定三种标定方式 可满足不同场景下的参数标定并且支持 单次报警或者定时循环报警功能和多种协议接入,方便和第三方系统集成。摄像机后端接口简洁,包含 DC36V 电源接口、RJ45 10M/100M 自适应以太网口以及 1 路报警输入/输出、1 路音频输入/输出,实测中功耗最大 27W,无需复杂的接线和配置, 安装简单便捷。通过传统相机与深度相机进行对比,如表 3.2 所示。表3.2 传统相机与深度相机传统相机深度相机功能普通监控功能视频监控,多传感器协调应用脱离不了人员值守监控范畴,不能减少带有计算机人工智能分析功能,无需人人员疲劳,松懈,短时间离开员值守,所有值守均由计算机执行报警只能监控,出现警况只能事后回放,不实时预警,出现警况第一时间进行自动能及时预警报警回放回放视频只能播放全部时刻录像,费时可以根据多种条件线索智能检索录像,费力快速定位储存录像只能无差别存放,大量无效数据占报警数据和无效数据分类存放,可以根用空间,储存服务器投资大据需要自动清理无效数据资料来源:辰启智科所以本论文工业相机选型选择海康威视 DS-2CD8426F/B-I 的相机,其功能强,性价比 高,能实现本设计需求。3.3 视觉板卡选型图 3.3 深度相机树莓派 3B+是在 2018 年 pi 日(3 月 14 日)发售的目前为止树莓派家族当中最新,性 能最强,也是功耗最高的一款产品=,Raspberry Pi 3 Model B +作为 Raspberry Pi 3 系列的最 终版本,拥有 1.4GHz 64 位 4 核 ARM Cortex-A53 CPU;1.4GHz 64 位 4 核 ARM Cortex-A53 CPU;千兆以太网 over USB 2.0;1G LPDDR2;PoE 支持(Power-over-Ethernet,with PoE HAT);改进 PXE 网络与 USB 大容量存储启动,如图 3.4 所示。图 3.4 树莓派 3B+板卡Jetson Nano 是一款功能强大的人工智能(AI)开发板,可助你快速入门学习 AI 技术, 并将其应用到各种智能设备。它搭载四核 Cortex-A57 处理器,128 核 Maxwell GPU 及 4GB LPDDR 内存,拥有足够的 AI 算力,可以并行运行多个神经网络,适用于需要图像分类、 目标检测、分割、语音处理等功能的 AI 应用。它支持 NVIDIA Jet Pack,其中包括用于深 度学习,计算机视觉,GPU 计算,多媒体处理,CUDA,CUDNN 和 TensorRT 等软件库, 以及其他一系列流行的 AI 框架和算法,比如 TensorFlow,PyTorch,Caffe / Caffe2,Keras, MXNet 等,如图 3.5 所示。图 3.5 Jetson Nano 视觉板卡1-SD 卡插槽;2-40 针膨胀针头;3-MicroUSB 接口;4-以太网口;5-USB3.0 接口;6-HDMI 输出 端口;7-视频接口;8-供电口;9-摄像头连接口;10-Poe 接口首先主板正中上面是一个很大的散热片,1 是主存储 SD 卡插槽;2 是 40 引脚的 CPIO;3 是个 5V2A 的 Micro USB 接口(可以使用电源供电,或者使用 PC 连接);4 是一个 RJ45 千兆以太网接口;5 是 4 个 USB3.0 接口;6 是 1 个 HDMI 2.0 视频接口;7 是显示端口连 接器;8 是 5V 的 DC 供电口;9 是 MIPI CSI 摄像头连接口;10 是 Poe 接口。一般看视频 是推荐使用 5V4A 的 DC 供电方式(使用 DC 电源需要短接 J48 跳线帽),因为电源连接 这里可以开启 15w 的高功率模式。据说 YoloV3 的应用,电流需要 2.9A 左右,如果连接右 下角的电源口,会让 Nano 板不断地发热和重启。通过市场常用的几款板卡进行参数对比可知,如表 3.3 所示。表3.3 板卡参数对比表型号树莓派 3B+Intel NCS2 神经计算棒(仅模块)Jetson Nano算力(INTB)-4TOPS7TOPS功耗1.4W2W10W算力/功耗-20.7重量42g77.8g249.47价格8509001500资料来源:芯板坊本论文设计的视觉系统核心在于深度学习算法,但是深度学习的训练加速离不开算力 的支持,Jetson Nano 开发板是我目前主打深度学习方向的开发板。所以经过对比分析我选 择 Jetson Nano 开发板。3.4 声光报警装置选型Schneider XVR 多功能 LED 信号灯(内置蜂鸣器),作为市场中畅销的几款信号灯, 他的功能不容置疑,尤其是 Harmony XVR 系列电动机旋转信号灯及蜂鸣器是可视音频信 号装置,设计用于工厂应用、建筑车辆和公共区域。该 蜂鸣器信号灯提供 4 种不同的颜 色,并随附可扩展照明区域的有小面的透镜。 带蜂鸣器的 XVR 信号灯独特且美观的设 计已获得 2014 年 Red Dot 工业设计大奖。 由于灵活的电压输入、光模式选择器和允许 直向和侧面布线的集成橡胶基座,可以轻松安装这些可视音频信号装置。且依托于电动机 LED 技术,使得使用寿命更长且免维护,可实现旋转、闪光和闪烁 LED 等工作状态。10 种照明模式使其易于使用且易于选择宽电压输入,可满足不同应用可以进行直向和侧面布 线,如图 3.6 所示。19图 3.6 Schneider XVR 多功能 LED 信号灯简单且易于安装,无需使用任何工具。1m 时可调节 90 dB 蜂鸣器外部蜂鸣器音量在 70 dB 至 90 dB 范围内可调,提供绿色、红色、橙色和蓝色,独特的美观设计。有小面的 透镜可扩展照明区域,集成橡胶基座可提高 IP 等级,高达 IP65 保护等级,取决于蜂鸣 器选项。7.1G 的高抗振性,CE 认证,且符合 ROHS 标准,通过 400 mm 飞线连接,截 面为 0.57 mm2。报警信号灯主要参数如表 3.4 所示。表 3.4 报警信号灯参数属性数值电源电压12 24 V 直流光效闪光,旋转1m 距离外分贝90dB最小分贝70dB最大分贝90dB安装样式基座安装透镜颜色红色资料来源:Schneider官网3.5 光源装置选型光源从大类上可分为普通自然光和人造光源,由光照强度、色温及光源的几何形状来 描述。在实际应用中,应优先选择明场照明方式,从而可以抑制自然光源及外界环境的干 扰。常用光源及相关特性如表 3.5 所示。表 3.5 主要光源类型及其特性类型光效(lm/W)平均寿命/(h)色温/K特点卤素灯1224100028003000发热量大,价格便宜,形体小荧光灯501201500300030006000价格便宜,适用于大面积照射LED 灯110250100000全系列功耗低,发热小,使用寿命长,价格便 宜,使用范围广氙灯1503301000550012000光照强度高,可连续快速点亮激光50000全系列具有良好的方向性、单色性与相干性其中荧光灯光源作为工厂中主要照明光源具有价格便宜,适用于大面积照射等优点, 因此,常使用荧光灯作为照明光源。本课题将荧光灯作为检测系统中识别作业人员的照明 光源。如图 3.7 所示荧光灯。图 3.7 大功率 LED 荧光灯 T5LED 荧光灯 T8LED 荧光灯4 行为异常检测系统通讯设计4.1 通信协议的选择根据实际设计需求,本设计针对相机类型自主选择 TCP/IP 通讯协议或 MIPI CSI-2CSI (Camera Serial Interface)通讯协议。(1)CSI (Camera Serial Interface) 是 MIPI 定义的规范,用于连接摄像头和 CPU,传 输摄像头的视频信号,最新的规范是 2012 发布的 CSI-3,使用的物理层为 M-PHY。而这 里要介绍的 CSI-2 规范在 2005 发布、使用 D -PHY 作为物理层。DSI(Display Serial Interface) 同样基于 D- PHY,不同的是,它主要用于 host 将图像传输给显示设备。(2)TCP/IP 通讯协议 TCP/IP 是用于因特网 (Internet) 的通信协议。 TCP/IP 通信协 议是对计算机必须遵守的规则的描述,只有遵守这些规则,计算机之间才能进行通信。互联网进行通信时,需要相应的网络协议,TCP/IP 原本就是为使用互联网而开发制定 的协议族。因此,互联网的协议就是 TCP/IP,TCP/IP 就是互联网的协议。4.2 深度相机与 JETSON NANO 板卡 TCP/IP 通讯连接 nano 网卡槽进行以太网通讯,对以太网通过 IP 地址 mac 码进行更改后进行连接 通信,当电脑与 nano 处于同一个网段时,即可实现通信。该通讯模式中,前面字节为 08,后面的字节为 00 或 06,表示 IP 包或 ARP 包,通过 网线进 IP 连接设置每个设备的 IP 与 mac 和 DNS 进行通信设置,因为以太网中所有的主机 共享一个通信信道,当局域网中的摄像头任意一台设备发出数据后,通过交换机该局域网 中的 nano 收到该数据。通过每一个设备对应的 IP 和 mac 去对应每一个相机传输的数据对 nano 进行数据交互,nano 读取相机的内容进行深度学习并通过网口反馈给显示端口,如图 4.1 所示。图 4.1 TCP/IP 模型图4.3 深度相机与 JETSON NANO 板卡 CSI 通讯深度相机是网络设备,需要有通讯协议,原有的私有协议无法胜任产业合作模式,因 此行业标准化的接口由此而生。CSI 为单向传输,包括一个 clock lane 和一到四个的 data lane 组成,传输图像数据。采 用 D -PHY 物理层协议。在物理层之上,即是 CSI 协议层,由三层构成,每一层有着明确 的功能。这一层中,发送端接收来自应用层的像素数据,并打包成字节格式发送到下一层; 在接收端,解包来自 LLP 层的数据并传输到应用层。该层的主要目的是将不同像素格式(例如 YUYV, RGBA 等)都转换成为 8bit 字节格式, 消除不同图像格式差异,减少传输的复杂度。例如,对于 RGB888 格式,一个 pixel 为 24 bit, 将转换为三个字节;RGB565 格式,一个 pixel 为 16 bit,转换为两个字节。而对于 RGB444, 大小为 12 bit,需要通过 padding 变成 RGB565 格式,为两个字节,如图 4.2 所示。图 4.2 CSI 协议层示意图Low Level Protocol(LLP)层为 CSI 协议的主要功能层,不仅定义了包格式,还定义了 传输中使用的同步机制。在发送端,该层负责将上层传输过来的数据打包,添加校验字段, 增加同步包,发送到下一层;在接收端首先校验包的完整性,并解析各个字段,根据包类 型执行对应操作,将图像数据传到上一层。LLP 处理的 play load 数据为经过转换后的纯字 节数据,没有像素概念。通过定义不同的的字段和包类型,实现一帧一帧图像数据的传输。Jetson Nano 与海康视觉相机通讯代码如下;import cv2import multiprocessing as mp num = 0def image_put(q, name, pwd, ip, channel):#cv2.namedWindow(ip, cv2.WINDOW_NORMAL) global urlurl=rtsp:/%s:%s%s:%s/Streaming/Channels/1 % (name, pwd, ip, channel)cap = cv2.VideoCapture(url)# 获取视频帧率fps = cap.get(cv2.CAP_PROP_FPS) print(fps: , fps)#打印 fps 内容if cap.isOpened(): print(HIKVISION1)print(camera + ip + connected.) while cap.isOpened():ret, frame = cap.read()# 抓取图片不成功再重新抓取if not ret:cap = cv2.VideoCapture(rtsp:/%s:%s%s:%s/Streaming/Channels/1 % (name, pwd, ip, channel) print(HIKVISION2)ret, frame = cap.read()frame = cv2.resize(frame, (800,600) cv2.imshow(ip,frame)# Press esc on keyboard toexit if cv2.waitKey(1) & 0xFF = 27:breakcap.release()# 解决进程问题def run_multi_camera():user_name, user_pwd = admin, a12345678 camera_ip_l = 10.16.14.151,ports = 556 mp.set_start_method(method=spawn)# initqueues = mp.Queue(maxsize=2) for _ in camera_ip_l processes = for queue, camera_ip,port in zip(queues, camera_ip_l,ports): processes.append(mp.Process(target=image_put,args=(queue,user_name, user_pwd, camera_ip,port)for process in processes: process.daemon = True process.start()for process in processes: process.join()if name = main : run_multi_camera()5 行为异常检测系统软件设计本基于深度学习技术的现代工厂作业人员行为异常检测系统设计通过 Visual Studio Code 软件搭载 python3.75 进行程序设计,实现对人体姿态识别。5.1 软件方案设计本软件设计主要由编译器,依赖包,库环境,GPU 算力驱动组成。首先在 Github 上 下载 pytorch -open pose 压缩包进行 open pose 学习框架搭建,然后安装 Numpy,Matplotlib, Opencv -python,Scipy,Scikit -image,Tqdm 等依赖包文件对电脑库环境进行配置,最后 搭载 python3.75 编译器进行程序编译与调试。通过在系统中安装 VS 与 Visual Studio Code 作为程序设计软件,配置软件 pip 下载源地址使 Visual Studio Code 可以搜寻到所需要文件 因为程序中需要调用多种工具包和库文件,所以需要针对 open pose 去安装对应的工具包 与库文件,使程序能正常运转。当程序开始运前时需要根据处理器选择 CUDA 版本与 CUDNN 版本。由于算力在计算 的时候需要很强的算力,所以需要安装 CUDNN 来配置 torch 提高计算机算力,加快识别 进程。CUDNN 启动后数据方式将会从 CPU 处理转为 GPU 处理,理论上运行速度会提高 5 倍,如图 5.1 所示。图 5.1 CUDA 示意图针对目前行为异常检测这方面,常用的姿态估计算法 Alpha pose 与 open pose。首先 Alpha pose 是自上而下的算法,也就是先检测倒人体,再得到关键点和骨架。因此他的准 确率、A p 值要比 open pose 高。但是缺点就是随着图片上的人数增加,他的计算量增大, 速度变慢。这一缺点注定他无法应用于多人的实时姿态识别,更适用于单人的精确识别, 从而不符合本设计需要满足的工作条件。Open Pose 是基于卷积神经网络和监督学习并以 caffe 为框架写成的开源库,可以实现 人的面部表情、躯干和四肢甚至手指的跟踪,不仅适用于单人也适用于多人,同时具有较 好的鲁棒性。最终结合两则优缺点选择更贴合设计的 open pose 算法。软件设计流程如图 5.2 所示。图 5.2 软件设计流程图5.2 数据采集由摄像头对目标进行采集,将视频进行取帧,图片的清晰度将直接影响后期图像识别 的精确度与识别速度。图片的遮挡,目标点的缺失,关键信息点的重叠,图像检测的范围 也将对后期的识别造成一定的影响。通过模拟人体姿态几种情况进行识别测试,通过对采集的图片进行判断来判断初期所 采集的图片是否正常。以此来保障后期的权重训练,提高精确度。举例如图 5.3 所示。图 5.3 姿态动作举例所识别的图片的状态与画质直接影响识别效果,图片关键点缺失和图片清晰度不够将 会导致位置关建点存在一定缺失,无法完全体现人体姿态情况,因此我在图片采集的时候 需要避免这些问题。5.3 数据集收集与图片标注打开标注精灵软件,修改标注类别,如何开始标注,并保存在指定文件夹,如图 5.4所示。由于标注完的输出文件格式,还不是所需要的数据集格式,所以运行程序将其转换成 所需的数据。主要实现代码如下:import os,glob#调用库,查找 glob 下的文件 LabelPaths = glob.glob(整合/*.json)#查找路径文件 for LabelPath in LabelPaths:Print(LabelPath)#打印 LabelPath 的结果Name = os.path.basename(LabelPath).split(.)0cmd = labelme_json_to_dataset 0 -o 1.format(LabelPath, Name) os.system(cmd)5.4 图片预处理图 5.4 标注精灵标注示意图在相机进行采集处理的时候,相机必须稳定,识别区域需要提前确定,环境不能相差 过大。不然识别效果会存在一定降低。识别图像的特征的过程中,需要对采集图片进行预 处理。由于刚处理的图片还是一个空图片,没有进行特征提取,如图 5.55.6 所示,所以 主要运行程序代码如下;import cv2import numpy as np import mathimport timefrom scipy.ndimage.filters import gaussian_filter import matplotlib.pyplot as pltimport matplotlib import torchfrom torchvision import transforms#import utilfrom src import utilfrom src.model import bodypose_model class Body(object):def init (self, model_path): self.model = bodypose_model() if torch.cuda.is_available():self.model = self.model.cuda()model_dict = util.transfer(self.model, torch.load(model_path) self.model.load_state_dict(model_dict)self.model.eval()def call (self, oriImg):# scale_search = 0.5, 1.0, 1.5, 2.0scale_search = 0.5boxsize = 368stride = 8padValue = 128thre1 = 0.1thre2 = 0.05multiplier = x * boxsize / oriImg.shape0 for x in scale_search heatmap_avg = np.zeros(oriImg.shape0, oriImg.shape1, 19) paf_avg = np.zeros(oriImg.shape0, oriImg.shape1, 38)for part in range(18):map_ori = heatmap_avg:, :, partone_heatmap = gaussian_filter(map_ori, sigma=3) map_left = np.zeros(one_heatmap.shape) map_left1:, : = one_heatmap:-1, :map_right = np.zeros(one_heatmap.shape) map_right:-1, : = one_heatmap1:, : map_up = np.zeros(one_heatmap.shape) map_up:, 1: = one_heatmap:, :-1 map_down = np.zeros(one_heatmap.shape) map_down:, :-1 = one_heatmap:, 1: peaks_binary = np.logical_and.reduce(one_heatmap = map_left, one_heatmap = map_right, one_heatmap = map_up, one_heatmap = map_down, one_heatmap thre1)peaks = list(zip(np.nonzero(peaks_binary)1, np.nonzero(peaks_binary)0)#29note reversepeaks_with_score = x + (map_orix1, x0,) for x in peaks peak_id = range(peak_counter, peak_counter + len(peaks)peaks_with_score_and_id = peaks_with_scorei + (peak_idi,) for i inrange(len(peak_id)all_peaks.append(peaks_with_score_and_id) peak_counter += len(peaks)# find connection in the specified sequence, center 29 is in the position 15# 按指定顺序查找连接,中心 29 位于位置 15limbSeq = 2, 3, 2, 6, 3, 4, 4, 5, 6, 7, 7, 8, 2, 9, 9, 10, 10, 11, 2, 12, 12, 13, 13, 14, 2, 1, 1, 15, 15, 17, 1, 16, 16, 18, 3, 17, 6, 18# 中间关节热图相关性mapIdx = 31, 32, 39, 40, 33, 34, 35, 36, 41, 42, 43, 44, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 47, 48, 49, 50, 53, 54, 51, 52, 55, 56, 37, 38, 45, 46图 5.5 手部特征关键点图 5.6 身体特征关键点5.5 手部特征算法及程序设计手部关键点检测,旨在找出给定图片中手指上的关节点及指尖关节点,一共 21 个关 键点,如图 5.7 所示。其类似于面部关键点检测(Facial Landmark Detection) 和人体关键点 检测(Human Body Pose Estimation)。手部关键点检测的应用场景包括:手势识别、手语识 别与理解和手部的行为识别等。程序主要代码如下;import cv2 import jsonimport numpy as np import mathimport timefrom scipy.ndimage.filters import gaussian_filter import matplotlib.pyplot as pltimport matplotlib import torchfrom skimage.measure import label from src.model import handpose_model from src import utilclass Hand(object):def init (self, model_path): self.model = handpose_model() if torch.cuda.is_available():self.model = self.model.cuda()model_dict = util.transfer(self.model, torch.load(model_path) self.model.load_state_dict(model_dict)self.model.eval()def call (self, oriImg): scale_search = 0.5, 1.0, 1.5, 2.0# scale_search = 0.5 boxsize = 368stride = 8padValue = 128thre = 0.05multiplier = x * box
展开阅读全文