乐趣区

关于python:连Python都不熟也能跑通AI人脸识别隐藏Boss竟是它

摘要 :先把 AI 人脸识别跑起来,而后钻研它是如何实现的,整个过程中的确播种不少。所谓先跟着做,再跟着学,实际与实践联合,本人感觉有了解了一些根底概念入个门,在此分享一下本人的捣鼓教训。

1、买台小“电脑”

既然要做人脸识别,那得找台带摄像头的小电脑啊。首先得价格便宜,简略搜了下,根本有以下几个抉择:

  • 树莓派 4:ARM 零碎,生态好。价格适合,55 刀。CPU 在 3 个中最好,算力 0.1TFLOPS
  • K210:RISC- V 的(非 ARM),价格是最实惠的,299 元。算力有 0.8TOPS
  • Jetson Nano:ARM 零碎,比树莓派 4 还贵,然而多一个英伟达的 GPU(当然是丐版的 GPU),价格 99 刀。算力 0.47TFLOPS

这 3 个外面,思考到人脸识别应该有更多的 AI 属性,那么带 GPU 能做 AI 推理不是更香么,于是就抉择了英伟达的 Jetson Nano 开发板(次要也是想先入门英伟达的 GPU 派别,谁叫当初 NVIDIA 比拟香呢)。

参考链接:

https://www.zhihu.com/questio…

https://zhuanlan.zhihu.com/p/…

2、启动零碎

这里须要先把“零碎 image”刷到 tf 卡外面,而后把 tf 卡插到开发板上,而后开机启动。启动有 2 个点须要留神:

  1. 跳线帽,须要插上(不然电源点不亮)。
  2. 第一次开机会卡住,须要重启一次。

启动后,发现是个带界面的 Ubuntu 零碎,接上鼠标 + 键盘,就是最相熟的小电脑嘛。

连贯网络,设置国内 Ubuntu 源,装置 jtop 命令(因为 nano 不能敲 nvidia-smi 命令)。

设置零碎参考:https://zhuanlan.zhihu.com/p/…

3、原来 CUDA 是个编译器

既然选了英伟达的 GPU 开发板,刚好理解一下 CUDA 是什么。

3.1 写个 CUDA 程序

当然,程序是抄课本的,如下。

https://blog.csdn.net/fb_help/article/details/79283032

能够看到是 C 语言的,一共就 2 个函数。一个 main 函数,一个 useCUDA 函数。

要跑起来,须要先进行编译。发现不应用 gcc,而是应用 nvcc 编译器,有意思。

Jetson Nano 的 image 曾经装置了 nvcc,所以能够间接用,只是应用前须要设置一下 path。

export CUDA_HOME=/usr/local/cuda-10.0
export LD_LIBRARY_PATH=/usr/local/cuda-10.0/lib64:$LD_LIBRARY_PATH
export PATH=/usr/local/cuda-10.0/bin:$PATH

设置后,才能够敲 nvcc 命令。参考:https://www.huaweicloud.com/articles/0ba49cd30493adbb37c82250408d8be4.html

于是开始编译:

nvcc -o main.out main.cu foo.cu(跟 gcc 编译一样)

运行:./main.out 即可。呵,原来 CUDA 是个编译器啊(编译出给 GPU 跑的程序)。

3.2 CUDA 在干嘛

一般的程序编译进去都是给 CPU 跑的;写个程序,想给 GPU 跑,就得应用 cuda 编译器了。毕竟咱们的这个 GPU 弱是弱了一点,也有 128 核呢,跑这种简略的 cuda 程序还是 OK 的。

另外,CUDA 还提供了一些现成的操作 GPU 的函数,比方:矩阵乘法,矩阵转置 之类的。CUDA 只能用于英伟达的 GPU,用于利用 GPU 进行简单的并行计算。而后很多 AI 框架都是基于 CUDA 搞的,所以跑个 cuda 程序,帮忙了解挺好的。

4、检测摄像头性能 OK

这里须要应用 nvgstcapture-1.0 命令,经查,字母 gst 原来是 Gstreamer 的缩写。

间接敲:

nvgstcapture-1.0

发现能够把摄像头关上了。

4.1 Gstreamer

搜了下,发现是一个音视频流解决的 pipeline 框架。

比方 Shell 命令的管道符为:|

为防止抵触,Gstreamer 的管道符,用了个比拟像的:! 符号。

参考:https://thebigdoc.readthedocs…

5、人脸能够失常辨认

依照教程:https://github.com/JetsonHacksNano/CSI-Camera/blob/master/face_detect.py

Copy 了一个 face_detect.py 文件。

间接运行了:

python ./face_detect.py 

发现就能够辨认出人脸了,厉害了。。。(额,只是图像是倒过去的)

于是简略看了下代码(不会 Python,然而也大略能看懂),发现有一个图像模式的参数“flip_method=0”,我改成了 6,发现图像就转过来失常了。

再看了下,发现获取摄像头拍摄的图片,还是通过 Gstreamer 来实现的。

6、Opencv 才是暗藏的 Boss?

通过下面的章节,发现总共代码没几行,怎么就能辨认人脸了呢?尽管 python 不熟,但好在代码少,认真看了下:发现次要是调用了 opencv 的函数就能够辨认人脸了,那阐明 opencv 还是得理解一下。

你看辨认人脸的代码,总共也就 10 行,简略过一下:

找了这篇文章,还不错:https://www.jianshu.com/p/051…

6.1 Haar 分类器

再搜寻,发现这里的人脸识别用的是“Haar 分类器”这种办法实现的。学习了下,属于机器学习的领域,没有用卷积神经网络。可参考:https://zhuanlan.zhihu.com/p/…

残缺的 Opencv 的介绍:http://woshicver.com/

7、Windows 下面复现人脸识别

既然通过 opencv 就能辨认人脸,那我不须要摄像头,间接拿图片是不是也能够跑了?于是 Windows 下面装置个 opencv 试试。

7.1 装置 Python

去 https://www.python.org/ 下载最新的 Python,装置后就有 Python 了。当然执行命令是 py。

7.2 pip 命令

发现 pip 命令,还是不行。找到原来在:

C:UserstsjsdbdAppDataLocalProgramsPythonPython39Scripts

这个目录下。

于是把这个门路,退出到了本机的环境变量外面:

所以 pip 命令 ok 了

7.3 设置 pip 国内源

vi ~/pip/pip.ini

而后设置内容:

[global]
index-url = https://pypi.tuna.tsinghua.edu.cn/simple

7.4 装置 opencv 包

pip install opencv-python 

这条命令会同时装置 numpy 包。

Ps:如果须要代理。设置一下

 export http_proxy=http:// 代理: 端口
export https_proxy=http:// 代理: 端口 

7.5 重现 Haar 人脸识别

下载一个带人脸的 jpg 照片,这里假如名为 face.jpg

detect.py 代码如下:

import cv2

# load model
detector=cv2.CascadeClassifier('C:/Users/t00402375/AppData/Local/Programs/Python/Python39/Lib/site-packages/cv2/data/haarcascade_frontalface_default.xml')

src = cv2.imread("./face.jpg")
cv2.namedWindow("image", cv2.WINDOW_AUTOSIZE);

# detect
gray=cv2.cvtColor(src,cv2.COLOR_BGR2GRAY)
faces=detector.detectMultiScale(gray,1.2,5)

# box
for x,y,w,h in faces:
    cv2.rectangle(src,(x,y),(x+w,y+h),(255,0,0),2)    

# show
cv2.imshow("image", src);
cv2.waitKey(0);
cv2.destroyAllWindows();

运行就行了。

py detect.py

失去后果:

发现的确能够,杠杠滴。

8、通过神经网络的人脸识别

当初视频图像的辨认,个别走 CNN,所以咱也得玩一遍。Jetson 开发板,本人配套了一套 jetson-inference 的推理我的项目,就是用来跑 GPU 推理的。

参考:https://blog.csdn.net/weixin_45319326/article/details/107956896

点击关注,第一工夫理解华为云陈腐技术~

退出移动版