作者:admin 发布时间:2020-08-14 10:03 浏览次数:
预备工作:摄像头,Ubuntu体系、python开发环境、网络环境
没错,便是这么简略,需求预备的东西并不多。这里你也能够用Windows体系来搭建,只要你高兴,怎么着都行。
装置python的依赖包
关于python环境,你能够直接经过下载anaconda,它是一款python的集成开发环境,里边包含了很多的python依赖包。接下来会装置一些anaconda中没有的依赖包:face_recognition、OpenaCV、pymysql、wxpy
关于pymysql,能够这么装置:
pip install pymysql -i https://pypi.tuna.tsinghua.edu.cn/simple
关于face_recognition和OpenaCV,会比较费事
装置OpenCV
装一大堆内核:
#Remove any previous installations of x264
sudo apt-get remove x264 libx264-dev
#We will Install dependencies now
sudo apt-get install build-essential checkinstall cmake pkg-config yasmsudo apt-get install git gfortransudo apt-get install libjpeg8-dev libjasper-dev libpng12-dev
# If you are using Ubuntu 14.04
sudo apt-get install libtiff4-dev
# If you are using Ubuntu 16.04
sudo apt-get install libtiff5-dev
sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libdc1394-22-dev
sudo apt-get install libxine2-dev libv4l-dev
sudo apt-get install libgstreamer0.10-dev libgstreamer-plugins-base0.10-dev
sudo apt-get install qt5-default libgtk2.0-dev libtbb-dev
sudo apt-get install libatlas-base-devsudo apt-get install libfaac-dev libmp3lame-dev libtheora-dev
sudo apt-get install libvorbis-dev libxvidcore-dev
sudo apt-get install libopencore-amrnb-dev libopencore-amrwb-dev
sudo apt-get install x264 v4l-utils
# Optional dependencies
sudo apt-get install libprotobuf-dev protobuf-compiler
sudo apt-get install libgoogle-glog-dev libgflags-dev
sudo apt-get install libgphoto2-dev libeigen3-dev libhdf5-dev doxygen
下载opencv包:
git clone https://github.com/opencv/opencv.git
cd opencv
git checkout 3.3.1
cd ..
下载opencv_contrib包:
git clone https://github.com/opencv/opencv_contrib.git cd opencv_contrib git checkout 3.3.1 cd ..
开端编译:
cd opencv
mkdir release
cd release
cmake -DBUILD_TIFF=ON \
-DBUILD_opencv_java=OFF \
-DWITH_CUDA=OFF \
-DWITH_OPENGL=ON \
-DWITH_OPENCL=ON \
-DWITH_IPP=ON \
-DWITH_TBB=ON \
-DWITH_EIGEN=ON \
-DWITH_V4L=ON \
-DWITH_VTK=OFF \
-DBUILD_TESTS=OFF \
-DBUILD_PERF_TESTS=OFF \
-DCMAKE_BUILD_TYPE=RELEASE \
-DCMAKE_INSTALL_PREFIX=$(python -c "import sys; print(sys.prefix)") \
-DPYTHON3_EXECUTABLE=$(which python) \
-DPYTHON3_INCLUDE_DIR=$(python -c "from distutils.sysconfig import get_python_inc; print(get_python_inc())") \
-DPYTHON3_PACKAGES_PATH=$(python -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())") \
..
make -j4
make install # not sudo, except for Raspberry Pi
#Note: on the Raspberry Pi, consider make -j2 to avoid over-temperature and under-voltage warnings (in general when compiling on Raspberry Pi, not just for OpenCV).
此时此刻,opencv已经编译完成了,在你的
/home/[user_name]/anaconda3/lib/python3.6/site-packages/
下会有一个cv*.so的文件,创立一个软衔接到你的虚拟环境下就OK了:
cd /home/[user_name]/anaconda3/lib/python3.6/site-packages/
ln -s /home/[user_name]/anaconda3/lib/python3.6/site-packages/cv2.cpython-36m-x86_64-linux-gnu.so cv2.so
能够打开ipython来验证一下:
In [1]: import cv2
In [2]: print(cv2.__version__)
3.3.1-dev
这个比较简略,官方写了一份文档十分详细,能够下载看看:
https://media.readthedocs.org/pdf/face-recognition/latest/face-recognition.pdf
要说明的是,在看装置说明时仔细一点。装置face_recognition之前需求先装置dlib,文档上都有链接,亲测可用,十分顺利。
人脸辨认
接下来该编写一小段程序了,不过不要发慌,程序也有现成的例子,只需求根据自己的需求改一改,就能够了。python语言的优点便是阅览性很强,根本能看懂英语的都能读懂代码什么意思,所以这份代码的样例读起来也很容易,衔接在这里:
https://github.com/ageitgey/face_recognition/blob/master/examples/facerec_from_webcam_faster.py
上面的注释是比较详细的,这里我挑几段简略介绍一下:
video_capture = cv2.VideoCapture(0) ①
# Find all the faces and face encodings in the current frame of video
face_locations = face_recognition.face_locations(small_frame) ②
face_encodings = face_recognition.face_encodings(small_frame, face_locations) ③
第1行是将摄像头打开,开端捕捉画面;第2行是寻觅画面中出现的人脸图画,第3行是提取出人脸图画中的特征。什么是特征?你能够简略把他理解为电脑为辨认出人脸而定制的一套规矩,契合这套规矩就被认为是人脸。
找出人脸后与预存的人脸进行比照。比照的操作实际上便是核算相似度。首要需求将预存的人脸图画进行向量化,存储为numpy.array格局。当然,为了每次启动程序时不用重复对预存的图片向量化,能够将成果进行存储,用的时候读取就行。
import os
import face_recognition
import numpy as np
import constants as cons
know_face_path = cons.BASE_FACES_PATH
model_path = cons.MODEL_PATH
time_now = cons.time_str
known_faces = []
known_names = []
for index, file_name in enumerate(sorted(os.listdir(know_face_path))): # 为了调用时次序一致
test_image = face_recognition.load_image_file(know_face_path + '/' + file_name)
model = face_recognition.face_encodings(test_image)[0]
np.savetxt(model_path + '/' + time_now + '_' + str(index) + '.model', model)
接下来,开端核算间隔,排序,选出在我所设置阈值内的最小值,进行标识:
match = face_recognition.compare_faces(known_faces, face_encoding, tolerance=0.38)
dis = face_recognition.face_distance(known_faces, face_encoding)
name = "Unknown"
id = np.argmin(dis)
if match[id]:
name = known_names[id].split('.')[0]
好了,这便是代码中的首要部分,剩下的便是一些个性化的定制了。比如你能够在检测到人脸之后,给自己发送微信音讯,这就用到了wxpy
登录微信:
# 导入模块
from wxpy import *
# 初始化机器人,扫码登录
bot = Bot()
寻觅老友:
my_firend = bot.friends().search('张三', sex=MALE)[0]
发送音讯:
# 发送文本给老友
my_friend.send('Hello!!!')
# 发送图片
my_friend.send_image('my_picture.fig')