安装 dlib

dlib 是一个基于 C++ 编写的扩展库,包含有许多常用的机器学习算法以及图像处理函数。

并且还支持大量的数值计算,如矩阵、大整数随机运算等。

但是在编译安装 dlib 之前我们还需要先给系统装上各种依赖环境,步骤如下。

参考:dlib 官网

http://dlib.net

安装 OpenCV

OpenCV 是一款功能强大的跨平台计算机视觉开源库,可以用于解决人机交互、物体检测、人脸识别等领域的问题。

库本身是采用 C++ 编写的,但是同时也对 Python, Java, C# 等语言提供接口支持。

https://docs.opencv.org/master/d7/d9f/tutorial_linux_install.html

安装方法

pip3 install opencv-python

安装 docopt

docopt 是 Python 的一个第三方参数解析库,可以根据使用者提供的文档描述自动生成解析器。因此使用者可以用它来定义交互参数与解析参数。

所以 docopt(__doc__, version=__version__) 函数能自动根据三个双引号中的文档内容(存储于 __doc__ 中)生成命令行解析器,并将解析结果以字典对象返回。

所以使用 docopt 进行命令行解析,我们唯一需要做好的事情就是编写好帮助文档,然后其它一切解析的问题都可以甩手给 docopt 自动解决。

安装 docopt

$ sudo pip3 install docopt

参考:http://docopt.org/

-----------------------------------------------------------------------

dlib 很准确地检测出来了下巴、嘴巴、鼻子、眼睛和眉毛这些面部特征点。并且每个部位都被分配固定索引的点进行标注,

范围如下表,一共是 68 个标记点。

部位 索引

下巴 0~16

左眉毛 17~21

右眉毛 22~26

鼻子 27~35

左眼睛 36~41

右眼睛 42~47

嘴巴 48~67

参考文档

https://www.w3cschool.cn/opencv/opencv-ful52dkf.html

https://qiita.com/ufoo68/items/b1379b40ae6e63ed3c79

https://blog.csdn.net/hongbin_xu/article/details/78347484

程序中使用到的 shape_predictor_68_face_landmarks.dat 是 dlib 官方提供的模型数据,

有了这个模型之后我们就不需要自己再耗费时间去训练模型,直接拿来使用即可。

下载方式:

wget https://labfile.oss.aliyuncs.com/courses/686/shape_predictor_68_face_landmarks.dat

tutorials

https://docs.opencv.org/master/d9/df8/tutorial_root.html

Ever wondered how your digital camera detects peoples and faces? Look here to find out!

https://docs.opencv.org/master/db/d28/tutorial_cascade_classifier.html

Look here in order to find use on your video stream algorithms like: motion extraction,

feature tracking and foreground extractions.

https://docs.opencv.org/master/da/dd0/tutorial_table_of_content_video.html

This section contains tutorials about how to read/save your video files.

https://docs.opencv.org/master/df/d2c/tutorial_table_of_content_videoio.html

各种cascade类文件的效果展示。包括 嘴巴 鼻子 眼睛 身体的识别.

https://symfoware.blog.fc2.com/blog-entry-1556.html

# 从下面的地址获获取opencv的训练完成后的类文件,包括鼻子 脸部 嘴巴等识别文件。

# https://github.com/opencv/opencv/blob/master/data/haarcascades/

# https://github.com/opencv/opencv_contrib/blob/master/modules/face/data/cascades/

----------------------------------------------------------

机器深度学习的时候需要大量的图片,手工制作非常麻烦。

通过这个教程可以很快的用一张图片自动生成大量的图片,包括方向改变,颜色改变,尺寸改变等。

水増し 掺水分 作假

画像の水増し方法をTensorFlowのコードから学ぶ

https://qiita.com/Hironsan/items/e20d0c01c95cb2e08b94

----------------------------------------------------------

openCVで効率的に大量画像を顔検出するためのtips

https://qiita.com/FukuharaYohei/items/1e15d79c87f1de513eac

重要参数设置数值

scaleFactor=1.2, minNeighbors=2, minSize=[50,50]が誤検知率が低くて優秀でした。

----------------------------------------------------------

优化分析 提高准确率降低分析时间降低系统负荷

物体検出(detectMultiScale)をパラメータを変えて試してみる(scaleFactor編)

http://workpiles.com/2015/04/opencv-detectmultiscale-scalefactor/

物体検出(detectMultiScale)をパラメータを変えて試してみる(minNeighbors編)

http://workpiles.com/2015/04/opencv-detectmultiscale-minneighbors/

----------------------------------------------------------

需要完成的部分

分析 支持多人同时识别的代码 OpenCV_multi_people.py ok

实现能够支持手势gesture的实现方法

实现读取视频文件,然后分析识别视频中的人物的脸部和眼睛

实现追踪特征点,根据指定的物体,追踪物体移动,并在图像中标注出来 ok

如何识别特定的物体,或者是指定的物体 特定人脸识别 ok

实现换脸的特效,检测2张脸,然后互换眼睛,鼻子,嘴巴,眉毛等特征

readme文档中没有实现的代码 ok

了解使用GCP google cloud plateform 来实现快速训练

Tensorflow object detection API 搭建属于自己的物体识别模型(1)——环境搭建与测试

https://blog.csdn.net/dy_guox/article/details/79081499

在实际使用前需要进行安装 installation instructions 安装下面的官方操作方法安装

https://github.com/tensorflow/models/blob/master/research/object_detection/g3doc/installation.md

(1)如果有下面的错误

ModuleNotFoundError: No module named 'tensorflow.python.saved_model.model_utils'

参考这个url解决问题

pip uninstall tensorflow_estimator

pip install tensorflow_estimator

https://stackoverflow.com/questions/55082483/why-i-cannot-import-tensorflow-contrib-i-get-an-error-of-no-module-named-tensor

(2)如果出现 ModuleNotFoundError: No module named 'object_detection'这样的模块没有找到的错误

参考这个url解决问题

选择File—>settings—>project:pythonWork—>project structure 调整root路径为models/research 这样就可以找到object_detection模块了

https://blog.csdn.net/qq_20367813/article/details/79608108

(3)如果出现Protobuf没有安装,参照下面的方法安装,选择Mac版本下载

Protobuf 安装与配置

在 https://github.com/google/protobuf/releases

创建软连接到/usr/local/bin

ln -s /Users/qiulongquan/protoc-3/bin/protoc /usr/local/bin

把include文件夹拷贝到/usr/local里面去

cp -r include /usr/local

在models\research\目录下打开命令行窗口,输入:

# From tensorflow/models/research/

protoc object_detection/protos/*.proto --python_out=.

(更新视频教程)Tensorflow object detection API 搭建属于自己的物体识别模型(2)——训练并使用自己的模型

https://blog.csdn.net/dy_guox/article/details/79111949

这个是对应的视频 重点参考看

https://www.bilibili.com/video/av21539370/?p=1

tensorflow进行人脸识别已经可以使用,准确率还是很高的,可以侧脸识别。

如果有一部分脸部被遮挡,匹配率会下降,这说明程序按照预想进行了视频分析。

----------------------------关于参数和图片数量 重点-----------------------------------

1.图片要150张以上,可以确保比较高的准确率。图片越多训练时间越长。同一个目标各种不同方向,光照,姿势的图片都应该加入。

2.训练的时候 batch_size(一次批处理的大小)选择5-10都可以,越大越容易收敛归一,但是内存容量要更多。

3.训练step选择25000步基本就可以了,主要看lose损失函数是不是已经下降并且平稳了。

4.150张图片25000步大概20多个小时可以完成。大概2.8秒一步。

------------------------------------------------------------------------------------

训练完成先冻结模型,然后生成TF lift文件,轻量化文件可以在手机端使用。pb文件不能在手机端正常调用。

【TF lite】从tensorflow模型训练到lite模型移植

https://blog.csdn.net/lukaslong/article/details/86649453

Tensorflow Lite之编译生成tflite文件

https://blog.csdn.net/qq_16564093/article/details/78996563

这个是查看pb文件内容的网站

https://lutzroeder.github.io/netron/

Tensorflow object detection API 搭建属于自己的物体识别模型——常见问题汇总

https://blog.csdn.net/dy_guox/article/details/80139981

# 下载模型的名字

MODEL_NAME = 'ssd_mobilenet_v1_coco_2017_11_17'

MODEL_FILE = MODEL_NAME + '.tar.gz'

DOWNLOAD_BASE = 'http://download.tensorflow.org/models/object_detection/'

# Path to frozen detection graph. This is the actual model that is used for the object detection.

PATH_TO_CKPT = MODEL_NAME + '/frozen_inference_graph.pb'

# List of the strings that is used to add correct label for each box.

PATH_TO_LABELS = os.path.join('data', 'mscoco_label_map.pbtxt')

NUM_CLASSES = 90

官方的各种模型

https://github.com/tensorflow/models/blob/master/research/object_detection/g3doc/detection_model_zoo.md

github上有对应官方的各种模型(地址摸我),这些都是基于不用的数据集事先训练好的模型,下载好以后就可以直接调用。

下载的文件以 '.tar.gz'结尾。'PATH_TO_CKPT'为‘.pb’文件的目录,'.pb'文件是训练好的模型(frozen detection graph),即用来预测时使用的模型。

‘PATH_TO_LABELS’为标签文件,记录了哪些标签需要识别,'NUM_CLASSES'为类别的数目,根据实际需要修改。

动态手势识别实战

https://blog.csdn.net/wonderseen/article/details/78341932

手把手教你如何安装Tensorflow(Windows和Linux两种版本) ok

不安装gpu部分,只使用cpu来运算

https://blog.csdn.net/Cs_hnu_scw/article/details/79695347

windows下安装配置cudn和cudnn ok

配置完成了,但是整体测试还是有问题,暂时取消掉,不安装gpu部分,只使用cpu来运算

https://www.jianshu.com/p/9bdeb033e765

----------------------------------------------------------

分析 opencv的实现原理 ok

http://labs.eecs.tottori-u.ac.jp/sd/Member/oyamada/OpenCV/html/py_tutorials/py_objdetect/py_face_detection/py_face_detection.html#face-detection

https://qiita.com/FukuharaYohei/items/ec6dce7cc5ea21a51a82

http://www.ime.info.hiroshima-cu.ac.jp/%7Ehiura/lec/ime/04.pdf

https://memo.sugyan.com/entry/20151203/1449137219

https://blog.mudatobunka.org/entry/2016/10/03/014520

下面这个地址是网页版本face-detector 输入一个图像的url会得到这个图片里面人物的脸部和眼睛的标注。

https://face-detector.herokuapp.com

下面这篇文章简单的介绍了

2001年のViola & Johns超高速&超正確な検出アルゴリズム的实现方法。

简单来说 是通过 脸部主要是眼睛和鼻子部分的光亮度差别来检测是不是人脸,这样的方法可以很快的检测一张图片中是不是有人脸

一般通过10次左右可以把候选对象降低到千分之一, 20次可以降低到百万分之一。

サルでもわかる顔検出の原理

https://cru.hatenadiary.org/entry/20100613/1276436975#f-401898cd

【OpenCV笔记 06】OpenCV中绘制基本几何图形【矩形rectangle()、椭圆ellipse() 、圆circle() 】

https://blog.csdn.net/sinat_34707539/article/details/51912610

一个成熟的人脸识别系统通常由

人脸检测、

人脸最优照片选取、

人脸对齐、

特征提取、

特征比对几个模块组成。

拒识和误识二者不可兼得,

所以评价人脸识别算法时常用的指标是误识率小于某个值时(例如0.1%)的拒识率。

如何理解误识率(FAR)拒识率(FRR),TPR,FPR以及ROC曲线

https://blog.csdn.net/colourful_sky/article/details/72830640

人脸识别技术相关知识原理

http://baijiahao.baidu.com/s?id=1598498964557818156&wfr=spider&for=pc 一般,不是很清晰

深入浅出人脸识别原理

回顾下流程:

1、使用HOG找出图片中所有人脸的位置。

2、计算出人脸的68个特征点并适当的调整人脸位置,对齐人脸。

3、把上一步得到的面部图像放入神经网络,得到128个特征测量值,并保存它们。

4、与我们以前保存过的测量值一并计算欧氏距离,得到欧氏距离值,比较数值大小,即可得到是否同一个人。

https://blog.csdn.net/LEON1741/article/details/81358974 普通理论 没有实现方法

1.从识别的准确率考虑,通过实验发现要保证人脸识别的准确率,人脸照片中双眼瞳距之间要大于80个像素,

这就意味着在选择摄像头时要充分考虑焦距和分辨率两个指标。

2.人脸大小在满足比对要求时控制在150个像素是比较合适的。

3.同时对图片质量的压缩也是非常必要的。经我们测试,75%的jpeg压缩率对人脸识别的性能影响可以忽略,却可以节约几倍的带宽资源。

除了常用的jpeg、png图像编码,苏宁还使用WebP图像压缩格式,可以使带宽资源的占用进一步降低20%~30%。

视频图像的一个非常重要的特性是它的时间连续性,以及由此产生的人脸信息的不确定性。在人脸跟踪和识别中利用时间信息是视频人脸识别算法和基于静态图像的人脸识别算法的最大区别。

目前这类算法大致可分为两类:

1、 跟踪 - 然后 - 识别,这类方法首先检测出人脸,然后跟踪人脸特征随时间的变化。当捕捉到一帧符合一定标准(大小,姿势)的图像时,用基于静态图像的人脸识别算法进行识别。

这类方法中跟踪和识别是单独进行的,时间信息只在跟踪阶段用到。识别还是采用基于静态图像的方法,没用到时间信息。

2、 跟踪 - 且 - 识别,这类方法中,人脸跟踪和识别是同时进行的,时间信息在跟踪阶段和识别阶段都用到。

参考

瓦希德·卡奇米(Vahid Kazemi)和约瑟菲娜·沙利文(Josephine Sullivan)在 2014 年发明的方法。

这一算法的基本思路是找到68个人脸上普遍存在的点(称为特征点, landmark)。

保罗·比奥拉(Paul Viola)和迈克尔·琼斯(Michael Jones)在2000年发明了一种能够快速在廉价相机上运行的人脸检测方法,人脸检测在相机上的应用才成为主流。

然而现在我们有更可靠的解决方案HOG(Histogram of Oriented Gradients)方向梯度直方图,一种能够检测物体轮廓的算法。

首先把图片灰度化,因为颜色信息对于人脸检测而言没什么用。

Anaconda install archive Anaconda的安装URL

https://repo.continuum.io/archive/

用python实现人脸识别输出画像_这个是利用OpenCV TensorFlow来实现图片人脸识别相关推荐

  1. [python] 工作记录一、利用opencv,numpy旋转图片无黑边(轮子必须由我造!!!)

    [python] 工作记录一.利用opencv,numpy旋转图片无黑边(轮子必须由我造!!!) 1. 第三方库的安装 2. 程序目的 3. 图片理解 4. 编写代码 (1).旋转顺时针90° (2) ...

  2. python输入什么就输出什么_一文读懂Python的输入和输出

    本文介绍了Python的输入和输出,既然是Python代码,那么就一定有输出量,那么,Python是如何输出的呢? 输出 用print()在括号中加上字符串,就可以向屏幕上输出指定的文字.比如输出'h ...

  3. python用for循环输出直角三角形_使用FOR循环语句在屏幕上输出一个由星号组成的直角三角形...

    题目要求: 请用C++的信息输出方式,使用循环语句在屏幕上输出一个由星号组成的直角三角形,形状如下: * ** *** **** ***** 要求: 完全使用C++的信息输出方式,即cout以及流插入 ...

  4. python用opencv计算汽车间距_计算机视觉:利用OpenCV和Python进行车辆计数详细步调...

    本教程我将分享几个简单步调剂释如何使用OpenCV进行Python对象计数. 需要安装一些软件: Python 3OpennCV 1.了解Opencv从摄像头获得视频的Python脚本 import ...

  5. 【Python-利用动态二维码传输文件(四)】使用pyautogui库录屏(连续截图),然后利用OpenCV逐张读取截图,识别当中的二维码信息,并把信息重组成原文件

    程序示意图 目录 一.使用pyautogui库,对电脑屏幕进行录屏 二.使用OpenCV库对100帧截图进行识别,并与原29帧二维码图片内含信息进行比对 三.把获取的100帧二维码信息去重,并保持原来 ...

  6. python人脸识别解锁电脑_给你的电脑做个简单的“人脸识别认证”

    原标题:给你的电脑做个简单的"人脸识别认证" Simple "Face ID" for your PC 作者 | German Gensetskiy 翻译 | ...

  7. python中倒着输出输入值_十五、深入Python输入和输出

    「@Author:By Runsen」 在很多时候,你会想要让你的程序与用户(可能是你自己)交互.你会从用户那里得到输入,然后打印一些结果.我们可以使用input和print语句来完成这些功能. in ...

  8. python根据数量打折输出总额_用Python预测2020年双十一交易额

    原标题:用Python预测2020年双十一交易额 去年双十一的时候,我曾利用算法预测过阿里巴巴 2019 年双十一交易额,并做了复盘总结(本文结尾处有当时预测和复盘的文章链接). 今年的双十一,规则发 ...

  9. 用python怎样用程序输出文字_如何用Python输出PPT中的文字信息

    在这里,会用到win32com模块 代码如下: importwin32comfrom win32com.client importDispatch, constants ppt= win32com.c ...

最新文章

  1. Git入门最终集!SSH公钥是乱码怎么办?IDEA与Git!将自己的代码上传至远程仓库!
  2. 使用spring mail发送html邮件
  3. 在 Windows 窗体 DataGridView 单元格中承载控件
  4. 流批一体生产应用!Bigo 实时计算平台建设实践
  5. 太强了,300分钟撸一个基于redis的亿级用户高并发系统
  6. @ManyToOne和@OneToMany 注解
  7. redis在Windows下以后台服务一键搭建集群(多机器)
  8. DataNode 运行状况
  9. dataframe 上下拼接_pandas DataFrame 的横向纵向拼接组合
  10. 数据库专家:MySQL分片水很深
  11. 181026英语每日一句
  12. 不确定度用计算机怎么算,算A类不确定度用计算器该怎样按
  13. 微信小程序wxParse富文本解析
  14. PIC单片机IDE,IPE和PICkit3下载使用的几个坑
  15. 静态代理和动态代理区别(是否有实现类)
  16. 题目内容: 班级第一次列队,通常老师会让同学按身高排成一列,然后1、2报数,喊到1的同学向前一 步,就这样,队伍就变成两列了。假设现在一个班级有n个同学,并且他们已经按身高排成 了一列,同学按身高从1
  17. python求组合数c(m、n)编程题_c语言编程问题,计算出从n 个不同元素中取出m 个元素(m≤n)的组合数。编写程序...
  18. html 页眉选项卡,步骤如下: (1)在插入选项卡的页眉和页脚选项组中单击【页眉】按钮...
  19. windows隐藏CMD窗口,使jar程序在后台执行
  20. MTK BROM 作用

热门文章

  1. Android编解码流程
  2. LimeSDR 中文教程 (八)
  3. (28) 基于手机信令数据的动态出行OD以及出行需求估计
  4. postman断言--数据比对
  5. JDK1.8安装教程
  6. 张量分解(二):CP分解
  7. QT调试的详细操作步骤
  8. 大数据时代_如何构建国家地质基础数据更新体系
  9. 分布式架构设计概要总结
  10. h5端点击复制分享链接