打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
ZLG产品用户手册在线文档

    1. 适用范围

      该司机行为检测算法与本文档只适用于 M1808 工控板上,其他硬件平台暂不支持。

    2. 原理概述

      这套司机行为检测算法主要分为四个部分,人脸检测、人脸 68 关键点定位、目标检测。本算法由 ZLG 算法团队自主研发,我们都对其做出了较大的优化调整,并结合 AI 加速芯片的特性进行了针对性的优化,所以算法效率会比较高。人脸检测算法是通过检测人脸在图像中的位置,如果没有检测出人脸则认为司机偏离了位置或离岗了。人脸 68 关键点定位算法是通过输入人脸检测的图像区域,实时输出人脸眼睛、嘴巴、鼻子等各个部位的坐标信息,以此来实现打哈欠、眨眼睛等识别。目标检测算法检测图像中有没有出现指定的物体,可以实时识别物体的坐标位置,在本方案中可以检测打手机、抽烟等行为,并给出手机与烟的对应坐标。算法应用逻辑流程如图 2.1 所示。


    图2.1 算法逻辑流程图

    3. 开发环境

      软件开发环境为 Ubuntu18.04,硬件开发平台以 M1808 系列产品为主机,外搭显示器和摄像头等功能外设。

    3.1 硬件开发平台

      硬件主机平台为 M1808 系列产品,包含 M1808 核心板产品(如图 3.1)和 M1808 评估板产品 M1808_EV_Board

    3.2 显示器选型

      M1808 评估板同时提供了一路 MIPI DSI 显示接口以及一路 RGB-LCD 显示接口。对于MIPI DSI 显示接口可以选择使用致远电子生产的 LCD-1280800W101TC 10.1 寸 LVDS 接口的液晶显示屏。在使用该显示屏时,还需要需要额外增加一个 M1808-BR-PACK 显示接口转接板,用于将评估板 LVDS 接口转接成 LVDS 接口。液晶屏如图 3.3 所示,液晶转接板如图3.4 所示。


    图3.3 LCD-1280800W101TC 10.1寸 LVDS液晶显示屏套件

    图3.4 M1808-BR-PACK转接板

      对于 RGB-LCD 显示接口,可以选择使用致远电子生产的 7 寸电阻屏显示套件AP_TFT7.0,同时也可以使用 7 寸电容屏显示套件 LCD-800480W070TC。AP_TFT7.0 液晶套件如图 3.5 所示,LCD-800480W070TC 液晶屏如图 3.6 所示。


    图3.5 AP_TFT7.0 电阻触摸液晶显示套件

    图3.6 LCD-800480W070TC 电容触摸液晶显示套件



      摄像头选型上,选择成像清晰的 USB 摄像头 即可。

    4. 文件描述和使用

      司机行为检测demo文件 下载链接

    4.1 文件列表

      现在对主要文件进行描述,如表 4.1 所示。

    表4.1 文件描述
    源码文件描述
    \可执行文件\ install.tar用于安装到板子上的安装包
    \源码\ dms_qt_demo.tar.bz2应用工具源码
    \文档\ M1808 司机行为检测应用笔记.pdf使用文档

    4.2 开发环境搭建

    4.2.1 解压工程源码

      把文件: \源码\ dms_qt_demo.tar.bz2 移到虚拟机然后并进行解压,执行如下指令:

    1. $ tar xvf dms_qt_demo.tar.bz2
    4.2.2 配置交叉编译链

      该交叉编译工具与软件开发一致,为保持版本统一,这里暂不将具体流程复述一遍,详细的安装流程请查阅应用开发-开发环境搭建页面。
      当然修改编译器就需要修改环境变量的路径了,这里就由用户自行修改。

    4.3 工程编译

      项目要进行编译需要在 ubuntu 环境下切换到:

    1. $ cd dms_qt_demo/

      进入项目目录后直接执行如下指令即可进行编译:

    1. $ ./build.sh

      编译完成后可以看到生成我们需要的安装包 install.tar。

    4.4 运行使用说明

      本小节主要描述如何把程序安装到工控板上并运行,详细的描述如下所示。

    4.4.1 解压安装包到工控板

      程序安装需要用\可执行文件\ install.tar 移动到工控板进行安装。首先把 install.tar 通过adb、tftp、nfs 等方法移植到工控板上,adb 传输安装包执行如下指令:

    1. $ adb push install.tar /userdata

      切换目录然后执行解压命令:

    1. # cd /userdata
    2. # tar xvf install.tar
    4.4.2 运行程序

      切换到安装目录下:

    1. # cd /userdata/install

      修改 run.sh 脚本的运行权限:

    1. # chmod 777 run.sh

      修改 run.sh 脚本的运行权限:

    1. # ./run.sh
    4.5 运行效果

      司机行为检测 QT demo 运行效果如下所示。正常行驶如图 4.1 所示。


    图4.1 正常驾驶

      吸烟警告如图 4.2 所示。


    图4.2 吸烟警告

      打电话警告如图 4.3 所示。

    图4.3 打电话警告

      打哈欠警告如图 4.4 所示。

    图4.4 打哈欠警告

      偏离驾驶如图 4.5 所示。

    图4.5 偏离座位警告

      长闭眼如图 4.6 所示。

    图4.6 长闭眼警告

    5. 算法API说明

    5.1 人脸检测

      算法库 lib/rockx/librockx.so 封装了人脸检测相关 API,而函数的声明都在头文件include/rknn/modules/face.h 里。人脸检测函数如表 5.1 所示。

    表 5.1 人脸检测 API说明
    函数名称rockx_face_detect
    函数原型rockx_ret_t rockx_face_detect(rockx_handle_t handle,rockx_image_t in_img, rockx_object_array_t face_array, rockx_async_callback callback)
    功能描述检测图像中的最大人脸并获得坐标与关键点信息
    参数描述handle:句柄
    in_img:输入图像
    face_array:人脸检测输出坐标
    callback:函数回调,可不填

    5.2 人脸关键点定位

      算法库 lib/face_landmark68/libface_landmark68.a 封装了人脸关键点定位相关 API,而函数的声明都在头文件 include/face_landmark68/face_landmark68.h。人脸 68 个关键点定位初始化函数如表 5.2 所示。

    表 5.2 人脸关键点定位 初始化函数
    函数名称face_landmark68_init
    函数原型int face_landmark68_init(rknn_context ctx, const char path)
    功能描述人脸 68 个关键点定位初始化
    参数描述ctx: 输入参数,rknn_context 句柄
    path:输入参数,算法模型路径

      人脸 68 个关键点定位执行函数如表 5.3 所示。

    表 5.3 人脸关键点定位 执行函数
    函数名称face_landmark68_run
    函数原型int face_landmark68_run(rknn_context ctx, cv::Mat face_image,std::vector<KeyPointType> keyPoints, cv::Size image_size)
    功能描述人脸 68 个关键点定位初始化
    参数描述ctx:输入参数,rknn_context 句柄
    face_image:输入参数,图像数据输入(cv::Mat 是 Opencv 的类型)
    keyPoints:输出参数,算法输出的人脸关键点坐标
    image_size:输入参数,图像尺寸大小(cv::Size 是 Opencv 的类型)

      人脸 68 个关键点定位释放函数如表 5.4 所示。

    表 5.4 人脸关键点定位 释放函数
    函数名称face_landmark68_release
    函数原型int face_landmark68_run(rknn_context ctx, cv::Mat face_image, std::vector<KeyPointType> keyPoints, cv::Size image_size)
    功能描述人脸 68 个关键点定位释放
    参数描述ctx:输入参数,rknn_context 句柄

    5.3 吸烟、打电话检测

      算法库 lib/phone_cigarette_detect/libphone_cigarette_detect.a 封装了吸烟、打电话相关API,而函数的声明都在头文件 include/phone_cigarette_detect/phone_cigarette_detect.h。吸烟、打电话检测初始化函数如表 5.5 所示。

    表 5.5 吸烟、打电话检测 初始化函数
    函数名称phone_cigarette_detect_init
    函数原型int phone_cigarette_detect_init(rknn_context ctx, const char path)
    功能描述吸烟、打电话检测初始化
    参数描述ctx:输入参数,rknn_context
    句柄path:输入参数,算法模型路径

      吸烟、打电话检测执行函数如表 5.6 所示。

    表 5.6 吸烟、打电话检测 执行函数
    函数名称phone_cigarette_detect_run
    函数原型int phone_cigarette_detect_run(rknn_context ctx, cv::Mat input_image, detection *output_dets);
    功能描述吸烟、打电话检测执行
    参数描述ctx:输入参数,rknn_context 句柄
    input_image:输入参数,图像输入
    output_dets:输出参数,目标检测框输出

      吸烟、打电话检测释放函数如表 5.7 所示。

    表 5.7 吸烟、打电话检测 释放函数
    函数名称phone_cigarette_detect_release
    函数原型int phone_cigarette_detect_release(rknn_context ctx)
    功能描述吸烟、打电话检测释放
    参数描述ctx:输入参数,rknn_context 句柄
    本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
    打开APP,阅读全文并永久保存 查看更多类似文章
    猜你喜欢
    类似文章
    图像边缘检测技术的实现及应用
    Android人脸检测介绍
    2016年人脸检测在实际应用中用哪种算法比较好?
    深入浅出Yolo系列之Yolov3&Yolov4核心基础知识完整讲解
    人脸检测算法之Haar
    MSRA副院长郭百宁:20+行代码就能写出微软颜龄机器人
    更多类似文章 >>
    生活服务
    热点新闻
    分享 收藏 导长图 关注 下载文章
    绑定账号成功
    后续可登录账号畅享VIP特权!
    如果VIP功能使用有故障,
    可点击这里联系客服!

    联系客服