摘要:首先运行AI人脸识别,然后研究它是如何实现的。整个过程确实收获颇丰。所谓先跟进,再跟进学习,实践与理论相结合,感觉了解了一些基本的概念就可以入门了,在此分享一下我的修补经验。1、买一台小“电脑”既然要做人脸识别,就得找一台带摄像头的小电脑。首先,价格便宜。简单搜索了一下,基本有以下几种选择:RaspberryPi4:ARM系统,生态不错。价格合适,55。CPU是三者中最好的,计算能力0.1TFLOPSK210:RISC-V(非ARM),价格也是最实惠的,299元。算力0.8TOPSJetsonNano:ARM系统,比RaspberryPi4贵,但是多了一个NvidiaGPU(当然是乞丐版),价格99刀。在0.47TFLOPS算力的三者中,考虑到人脸识别应该有更多的AI属性,用GPU做AI推理岂不是更好,所以选择了NVIDIA的JetsonNano开发板(主要是想先上手)NVIDIA的GPU派,谁说现在的NVIDIA更香)。参考链接:https://www.zhihu.com/questio...https://zhuanlan.zhihu.com/p/...2。启动系统需要先将“系统镜像”刷入TF卡,然后将TF卡插入开发板,然后开机。开机有2点需要注意:跳线帽需要插上(否则电源点不亮)。第一次会卡顿,需要重启一次。启动后发现是有界面的Ubuntu系统。接上鼠标+键盘,就是大家最熟悉的小电脑了。连接网络,设置国内Ubuntu源,安装jtop命令(因为nano打不了nvidia-smi命令)。设置系统参考:https://zhuanlan.zhihu.com/p/...3.原来CUDA是一个编译器。既然选择了NVIDIA的GPU开发板,那我只需要知道什么是CUDA就可以了。3.1编写一个CUDA程序程序当然是从课本上抄来的,如下。https://blog.csdn.net/fb_help/article/details/79283032可以看到是C语言的,一共只有2个函数。一个主要功能和一个useCUDA功能。要运行,需要先编译。有趣的是发现使用了nvcc编译器而不是gcc。JetsonNano的镜像安装了nvcc,可以直接使用,但使用前需要设置路径。exportCUDA_HOME=/usr/local/cuda-10.0exportLD_LIBRARY_PATH=/usr/local/cuda-10.0/lib64:$LD_LIBRARY_PATHexportPATH=/usr/local/cuda-10.0/bin:$PATH在键入nvcc之前设置命令。参考:https://www.huaweicloud.com/articles/0ba49cd30493adbb37c82250408d8be4.html然后开始编译:nvcc-omain.outmain.cufoo.cu(同gcc编译)运行:./main.out。哦,原来CUDA是一个编译器(编译出供GPU运行的程序)。3.2CUDA在做什么?普通程序是编译出来让CPU运行的;如果你写了一个程序并想在GPU上运行它,你必须使用cuda编译器。毕竟我们的GPU弱了点,也有128核。运行这个简单的cuda程序就OK了。此外,CUDA还提供了一些操作GPU的现成函数,如:矩阵乘法、矩阵转置等。CUDA只能在Nvidia的GPU上使用,用于使用GPU进行复杂的并行计算。然后很多AI框架都是基于CUDA的,所以跑个cuda程序有利于理解。4、检测摄像头功能正常。这里需要用到nvgstcapture-1.0命令。经查,字母gst原来是Gstreamer的缩写。直接敲:nvgstcapture-1.0发现可以开启摄像头。4.1Gstreamer搜索了一下,发现是一个音视频流处理的流水线框架。例如,Shell命令的管道字符为:|为了避免冲突,Gstreamer的管道字符使用了一个更类似的:!象征。参考:https://thebigdoc.readthedocs...5、可以正常识别人脸。按照教程:https://github.com/JetsonHacksNano/CSI-Camera/blob/master/face_detect.py复制一个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.1haar分类器然后搜索,发现这里的人脸识别是通过“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.2pip命令找到pip命令,还是不行。原来在:C:UserstsjsdbdAppDataLocalProgramsPythonPython39Scripts这个目录下找到。所以在本机的环境变量中加入这个路径:这样pip命令就ok了7.3设置pip国内源vi~/pip/pip.ini设置内容:[global]index-url=https://pypi.tuna.tsinghua.edu.cn/simple7.4安装opencv包pipinstallopencv-python该命令也会安装numpy包。ps:如果需要代理。设置exporthttp_proxy=http://proxy:portexporthttps_proxy=http://proxy:port7.5重现haar人脸识别下载一张带有人脸的jpg照片,这里假设名字为face.jpgdetect.py代码如下:importcv2#loadmodeldetector=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);#detectgray=cv2.cvtColor(src,cv2.COLOR_BGR2GRAY)faces=detector.detectMultiScale(gray,1.2,5)#boxforx,y,w,h面孔:cv2.rectangle(src,(x,y),(x+w,y+h),(255,0,0),2)#showcv2.imshow("image",src);cv2.waitKey(0);cv2.destroyAllWindows();运行它。pydetect.py得到结果:发现确实可以,滴滴。8、通过神经网络进行人脸识别现在视频图像的识别一般都是用CNN,所以我们又要玩一遍了。Jetson开发板配备了一套jetson-inference推理工程,用于运行GPU推理。参考:https://blog.csdn.net/weixin_45319326/article/details/107956896点击关注,第一时间了解华为云的新鲜技术~
