AidLux “人脸测试”案例源码详解
“人脸检测”案例源码详解
testface.py用于进行人脸检测
- 构建APP框架和添加主要控件
- 人脸关键点识别的方法
打开人脸测试案例
1.在VScode中进入代码编辑状态。
2.代码存在路径在/examples_gpu/face/testface.py。
导入相关库
1. cv2模块是OpenCV 2.0的简写,在计算机视觉项目的开发中,OpenCV作为较大众的开源库,拥有了丰富的常用图像处理函数库,采用C/C++语言编写,可以运行在Linux/Windows/Mac等操作系统上,能够快速的实现一些图像处理和识别的任务。
2. sys模块包括了一组非常实用的服务,内含很多函数方法和变量,用来处理Python运行时配置以及资源,从而可以与前当程序之外的系统环境交互。
3. NumPy(Numerical Python) 是 Python 语言的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。在机器学习算法中大部分都是调用Numpy库来完成基础数值计算的。
4. blazeface为了不断提升用户的流程体验、促进人脸相关应用的进一步发展、拓宽支持人脸检测的设备范围,来自谷歌的研究人员通过改造mobileNet提出更为紧凑的轻量级特征提取方法、结合适用于移动端GPU高效运行的新型锚框机制,以及代替非极大值抑制的加权方法保证检测结果的稳定性,在移动端上实现了超高速的高性能人脸检测BlazeFace,最快不到一毫秒的检测速度为众多人脸相关的应用提供了更广阔的发展空间。
5. cvs图形控件模块
6. tflite_gpu,GPU加速代码由AID提供,TensorFlow Lite 支持多种硬件加速器。 GPU 是设计用来完成高吞吐量的大规模并行工作的,因此,它们非常适合用在包含大量运算符的神经网络上,一些输入张量可被划分为更小的工作负载,且支持同时执行,这通常会导致更低的延迟;在最佳情况下,用 GPU 在实时应用程序上做推理运算已经可以运行的足够快,而这在以前是不可能的。
输入输出图像
- #输入图片的尺寸大小,128*128可以适用深度学习的图片尺寸
input_shape=[128,128] - #rgb3通道 1个float是32位也就是4字节,每个数据4个字节
#输入数据数量 单位是字节,输入图像
inShape =[1 * 128 * 128 34,] - #4代表4个字节,89616 指的好像是896个框,8961指的是每个框的置信度,具体这16个数表示些啥 顺序是怎样的 就只有看作者训练的时候怎么定义的 找不到定义就只有去猜 去试
- #outShape就是输出数据的数据量 单位是字节,896是值人脸关键点448*2;16代表鼻子,嘴巴,眼睛的x,y坐标点,8个点,每个点都有x,y,所以是16
- #outShape输出图像
outShape= [1 * 896164,18961*4]
指定模型
- #使用NN模型训练,参数4表示4个通道,参数0表示使用GPU
- #anchors.npy作用
- #根据大数据统计 图片的那些位置出现目标的概率大
- #比如图像左上角出现人脸的可能大 就把左上角的位置保存进去
- #导入’anchors.npy’并转换为float32位
设置相机并开始读帧
cvs.VideoCapture(1)是调用手机前置摄像头,如果是cvs.VideoCapture(0)就是调用手机后置摄像头。
frame=cap.read()
一直尝试读图,读到为止
if frame is None:
continue#flip()的作用是使图像进行翻转,cv2.flip(filename, flipcode)
#filename:需要操作的图像,flipcode:翻转方式,1水平翻转,0垂直翻转,-1水平垂直翻转
#如果是前置摄像头,需要翻转图片,想象照镜子的原理
if camid==1:
# frame=cv2.resize(frame,(720,1080))
frame=cv2.flip(frame,1)#改变填充后的黑白图像的大小为128*128
img =cv2.resize(frame,(128,128))#cv2.cvtColor(p1,p2) 是颜色空间转换函数,p1是需要转换的图片,p2是转换成何种格式。
#cv2.COLOR_BGR2RGB 将BGR格式转换成RGB格式
#cv2.COLOR_BGR2GRAY 将BGR格式转换成灰度图片
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB).astype(np.float32)
img = img / 127.5 - 1.0
载入模型
#由于fp16的值区间比fp32的值区间小很多,所以在计算过程中很容易出现上溢出(Overflow,>65504 )和下溢出(Underflow,<6x10^-8 )的错误,溢出之后就会出现“Nan”的问题,所以我们选择fp32
#分配内存并传入数据:
tflite.setTensor_Fp32(img,input_shape[1],input_shape[1])
start_time = time.time()#启动tensorflow模型,使之开始运行
tflite.invoke()#outshape里列出了输出,表示输出序号
#一个是框的位置
#raw_boxes: 14336
#此算法,一言以蔽之:预先在图上选很多区域 然后检查这些区域是否有人脸
#输出的一堆数据 通过outshape分成了2部分
#0和1就是指取第一部分和第二部分
raw_boxes = tflite.getTensor_Fp32(0)#一个是框的置信度,得到468个人脸的坐标,x,y
#classificators: 896置信度classificators = tflite.getTensor_Fp32(1)
#预先在图上画了896个框 然后模型会判断这896个框有人脸的概率大不大 如果有人脸的话位置会在哪
#把模型的输出解析成人脸结果,脸上6个点,框2个点
detections = blazeface(raw_boxes, classificators, anchors)out=plot_detections(frame, detections[0])
cvs.imshow(out)
AidLux “人脸测试”案例源码详解相关推荐
- AidLux“人像抠图”案例源码详解 (Python)
"人像抠图"案例源码详解 (Python) seg_gui_meet.py用于人像抠图 导入基础包作用详解 构建程序图形化类 初始化处理函数(人体抠图应用启动时首先被调用) 程序入 ...
- AidLux“换脸”案例源码详解 (Python)
"换脸"案例源码详解 (Python) faceswap_gui.py用于换脸,可与facemovie_gui.py身体互换源码(上一篇文章)对照观看 打开faceswap_gui ...
- AidLux“实时头发分割”案例源码详解
"实时头发分割"案例源码详解 1. 构建APP框架和添加主要控件 2. 头发分割的方法 打开实时头发分割案例 1.在VScode中进入代码编辑状态. 2.代码存在路径在/examp ...
- Android开发之GPS测试完整案例源码详解之实时检测GPS的状态
获取Android系统Location位置服务实例: /*** Get location manager system service** @return LocationManager*/publi ...
- Pytorch 之 TSM(Time Shift Module)测试部分源码详解
本文致力于将文中的一些细节给大家解释清楚,如果有照顾不到的细节,还请见谅,欢迎留言讨论 1.参数部分: parser = argparse.ArgumentParser(description=&qu ...
- 【卷积神经网络CNN 实战案例 GoogleNet 实现手写数字识别 源码详解 深度学习 Pytorch笔记 B站刘二大人 (9.5/10)】
卷积神经网络CNN 实战案例 GoogleNet 实现手写数字识别 源码详解 深度学习 Pytorch笔记 B站刘二大人 (9.5/10) 在上一章已经完成了卷积神经网络的结构分析,并通过各个模块理解 ...
- Android AR开发实践之七:OpenGLES相机预览背景绘制源码详解
Android AR开发实践之七:OpenGLES相机预览背景绘制源码详解 目录 Android AR开发实践之七:OpenGLES相机预览背景绘制源码详解 一.OpenGL ES渲染管线 1.基本处 ...
- 封装成jar包_通用源码阅读指导mybatis源码详解:io包
io包 io包即输入/输出包,负责完成 MyBatis中与输入/输出相关的操作. 说到输入/输出,首先想到的就是对磁盘文件的读写.在 MyBatis的工作中,与磁盘文件的交互主要是对 xml配置文件的 ...
- 李沐d2l《动手学深度学习》第二版——风格迁移源码详解
本文是对李沐Dive to DL<动手学深度学习>第二版13.12节风格迁移的源码详解,整体由Jupyter+VSCode完成,几乎所有重要代码均给出了注释,一看就懂.需要的同学可以在文末 ...
最新文章
- vue cli3.0 引入eslint 结合vscode使用
- 动图-完整清晰展示TCP的三次握手与四次挥手
- 个人阅读的Deep Learning方向的paper整理
- ITK:向量值图像像素的变换幅度
- 对discuz的代码分析学习(三)mysql驱动
- python大众点评最新字体加密破解完结
- 你已经是一个成熟的码农了,这些思维习惯你要有!
- 小程序技术能提升桌面应用安全等级?
- java怎么用unicode写程序_简单的讲解Java是使用Unicode字符集
- 人生永远没有太晚的开始
- QT5在arm板上的汉字显示
- .NET EF(Entity Framework)详解
- 成功在开发板运行vsftpd
- 搜狗如何打特殊符号 - 搜狗特殊符号的打法!!
- 欲速则不达--不能忽略情绪
- ruoyi vue 其功能介绍
- ZIP压缩算法详细分析及解压实例解释
- vue--后台管理系统问题和功能实现思路集锦
- 如何在业务开发中实现自我成长
- 大促场景系统稳定性保障实践经验总结
热门文章
- python从入门到就业-时间日历
- 一键清理系统盘的垃圾
- 品牌如何借势奥运进行微博营销
- Unity安卓 :launcherWARNING: The option setting ‘android.enableR8=false’
- 服务器信息更新是什么意思,正在联系iphone软件更新服务器是什么意思?怎么解决?...
- [转载]Zhuangbility~
- 点特征提取及影像相关系数法匹配
- java中抽象类描述正确的是_在Java中,下面关于抽象类的描述正确的是
- redis安装及调试
- 打通版微社区(4):微信第三方服务部署——JSP的IIS部署