瑞芯微:基于RK3568得人脸朝向检测

news/2024/7/10 2:51:20 标签: rknn, 深度学习, 目标检测

驾驶员监控系统是基于驾驶员面部图像处理来研究驾驶员状态的实时系统。首先挖掘出人在疲劳状态下的表情特征,然后将这些定性的表情特征进行量化,提取出面部特征点及特征指标作为判断依据,再结合实验数据总结出基于这些参数的识别方法,最后输入获取到的状态数据进行识别和判断。

通过一个面向驾驶员的红外摄像头来实时监测头部、眼部、面部、手部等细节,可以从眼睛闭合、眨眼、凝视方向、打哈欠和头部运动等检测驾驶员状态。通常通过检测人脸眼睛和其他脸部特征以及行为,同时跟踪变化,提取症状实现驾驶员疲劳、分神、不规范驾驶检测。

至于为什么采用红外摄像机,是因为系统要求能够在全部工况环境下(包括白天、夜晚、顺光、逆光等)工作,能适应各种光源环境,即视在夜间、逆光等情况下,也能提供高品质的。同时在驾驶员佩戴帽子、眼镜、墨镜、口罩等情况下由于红外特性可以穿透墨镜镜片,被遮挡的眼部信息也能正常成像,很好地解决了驾驶员眼镜反光或佩戴墨镜的问题。

脸部检测:其过程又分为人脸定位、人脸识别和人脸跟踪。人脸定位的作用是在图像中通过识别面部特征点以检测人脸并标记出位置;人脸识别的作用是将在新图像中检测到到的面部数据和已储存的数据进行匹配;人脸跟踪的作用是在每帧图像上跟踪之前图像帧里发现的人脸。

头部特征:由三个姿态角构成,基于CNN设计头部跟踪系统以图像中脸部区域为输入,通过检测出的面部特征点结合默认的头部模型,可以得到大概的头部姿态。通过进一步跟踪已发现的面部特征和寻找到的更多特征,可以获取更多的数据用以添加到头部模型中,进而更新头部的几何特性。系统运行中,此过程不停的循环,从而以三维姿态角持续输出头部的当前姿态。

onnx2rknn.py

 
import cv2
import numpy as np
 
from rknn.api import RKNN
import os
 
if __name__ == '__main__':
 
    platform = 'rk3568'
    exp = 'yolov8nseg'
    Width = 640
    Height = 640
    MODEL_PATH = './onnx_models/yolov8n.onnx'
    NEED_BUILD_MODEL = True
    # NEED_BUILD_MODEL = False
    im_file = './bus.jpg'
 
    # Create RKNN object
    rknn = RKNN()
 
    OUT_DIR = "rknn_models"
    RKNN_MODEL_PATH = './{}/{}_kk.rknn'.format(OUT_DIR,exp+'-'+str(Width)+'-'+str(Height))
    if NEED_BUILD_MODEL:
        DATASET = './pose.txt'
        rknn.config(mean_values=[[0, 0, 0]], std_values=[[255, 255, 255]], target_platform="rk3568")
        # Load model
        print('--> Loading model')
        ret = rknn.load_onnx(MODEL_PATH)
        if ret != 0:
            print('load model failed!')
            exit(ret)
        print('done')
 
        # Build model
        print('--> Building model')
        ret = rknn.build(do_quantization=True, dataset=DATASET)
        if ret != 0:
            print('build model failed.')
            exit(ret)
        print('done')
 
        # Export rknn model
        if not os.path.exists(OUT_DIR):
            os.mkdir(OUT_DIR)
        print('--> Export RKNN model: {}'.format(RKNN_MODEL_PATH))
        ret = rknn.export_rknn(RKNN_MODEL_PATH)
        if ret != 0:
            print('Export rknn model failed.')
            exit(ret)
        print('done')
    else:
        ret = rknn.load_rknn(RKNN_MODEL_PATH)
 
    rknn.release()


http://www.niftyadmin.cn/n/4997008.html

相关文章

近年GDC服务器分享合集(四): 《火箭联盟》:为免费游玩而进行的扩展

如今,网络游戏采用免费游玩(Free to Play)加内购的比例要远大于买断制,这是因为前者能带来更低的用户门槛。甚至有游戏为了获取更多的用户,选择把原来的买断制改为免费游玩,一个典型的例子就是最近的网易的…

PixelSNAIL论文代码学习(3)——自注意力机制的实现

文章目录 引言正文介绍自注意力机制的简单实现样例本文中的自注意力机制具体实现代码分析nn.nin函数的具体实现nn.causal_attention模块实现注意力模块实现代码完整实现代码使用pytorch实现因果注意力模块causal_atttention模块 问题 总结引用 引言 阅读了pixelSNAIL,很简短&a…

GO学习之 消息队列(Kafka)

GO系列 1、GO学习之Hello World 2、GO学习之入门语法 3、GO学习之切片操作 4、GO学习之 Map 操作 5、GO学习之 结构体 操作 6、GO学习之 通道(Channel) 7、GO学习之 多线程(goroutine) 8、GO学习之 函数(Function) 9、GO学习之 接口(Interface) 10、GO学习之 网络通信(Net/Htt…

模拟实现线程池

关于JAVA标志库创建线程池推荐看通过标准库创建线程池 核心思路 实现一个submit方法,让用户传入要执行的任务,在线程池内部,将用户传入的任务存储到阻塞队列中,根据用户实例化线程池时传入的参数,知道线程池中线程的数…

nodejs设置镜像

1、npm镜像地址配置 -- 查看 npm 安装目录 npm root -g-- 查看 npm 配置信息 npm config list-- 查询当前镜像配置 npm get registry-- 或者仅修改 npm 命令镜像 -- 设置为淘宝镜像 npm config set registry https://registry.npmmirror.com -- 修改为官方镜像 npm config set…

Android逆向学习(二)vscode进行双开与图标修改

Android逆向学习(二)vscode进行双开与图标修改 写在前面 这其实应该还是吾爱的第一个作业,但是写完上一个博客的时候已经比较晚了,如果继续敲机械键盘吵到室友,我怕我看不到明天的太阳,所以我决定分成两篇…

Lesson4-3:OpenCV图像特征提取与描述---SIFT/SURF算法

学习目标 理解 S I F T / S U R F SIFT/SURF SIFT/SURF算法的原理,能够使用 S I F T / S U R F SIFT/SURF SIFT/SURF进行关键点的检测 SIFT/SURF算法 1.1 SIFT原理 前面两节我们介绍了 H a r r i s Harris Harris和 S h i − T o m a s i Shi-Tomasi Shi−Tomasi…

探索生成人工智能的前景

什么是生成式人工智能? 生成式人工智能是一类旨在创建新颖内容的人工智能 (AI) 技术和模型。与简单的复制不同,这些模型通过利用从训练数据集中收集的模式和见解从头开始生成数据,例如文本、图像、音乐等。 生成式人工智能如何运作&#xf…