提要:Openface人脸识别的原理与过程请参考:
https://zhuanlan.zhihu.com/p/24567586
openface是一个开源库,运行它需要一些第三方库的支持,比如opencv、dlib等
移植步骤:
- 安装hi3559av100交叉编译工具链并设置环境变量;
- 移植opencv3.4(选用3.4版本是因为3.4以上版本中的opencv_contrib 支持face,便于后续拓展;
- 移植dlib-19.13 (需要移植openblas库);
- 移植openface( 需要移植boost)。
(注:cmake最好选用高点的版本,此处选用的是cmake-3.2.2)
需要用到的库及模型文件:
链接:https://pan.baidu.com/s/1Oo-FOh9Pak1gS5vXCqhi8A
提取码:64f7
正文:
- 安装3559a交叉编译链
此步骤请按照hi3559a开发板使用说明文档进行。 - 移植opencv3.4;
从opencv官网下载源码(上面为网盘路径),在目录下新建build文件下,编写编译脚本如下:
cmake -D CMAKE_BUILD_TYPE=RELEASE \ -D CMAKE_C_COMPILER=aarch64-himix100-linux-gcc \ -D CMAKE_CXX_COMPILER=aarch64-himix100-linux-g++ \ -D CMAKE_INSTALL_PREFIX=/home/nfs_root/opencv_install_3559 \ #安装目录 -D BUILD_SHARED_LIBS=ON \ -D CMAKE_CXX_FLAGS=-fPIC \ -D CMAKE_C_FLAGS=-fPIC \ -D CMAKE_EXE_LINKER_FLAGS=-lpthread -ldl \ -D ENABLE_PIC=ON \ -D WITH_1394=OFF \ -D WITH_ARAVIS=OFF \ -D WITH_ARITH_DEC=ON \ -D WITH_ARITH_ENC=ON \ -D WITH_CLP=OFF \ -D WITH_OPENMP=ON \ -D WITH_TBB=ON \ -D WITH_GTK=OFF \ # 此项一定要选off,默认不编译图像库,不然依赖的所有库都需要交叉编译,按照此选项编译好后对于linux系统默认不能使用imshow() waitKey()函数。 -D WITH_CUBLAS=OFF \ -D WITH_CUDA=OFF \ -D WITH_CUFFT=OFF \ -D WITH_FFMPEG=ON \ -D WITH_GSTREAMER=ON \ -D WITH_GSTREAMER_0_10=OFF \ -D WITH_HALIDE=OFF \ -D WITH_HPX=OFF \ -D WITH_IMGCODEC_HDR=ON \ -D WITH_IMGCODEC_PXM=ON \ -D WITH_IMGCODEC_SUNRASTER=ON \ -D WITH_INF_ENGINE=OFF \ -D WITH_IPP=OFF \ -D WITH_ITT=OFF \ -D WITH_JASPER=ON \ -D WITH_JPEG=ON \ -D WITH_LAPACK=ON \ -D WITH_LIBREALSENSE=OFF \ -D WITH_NVCUVID=OFF \ -D WITH_OPENCL=OFF \ -D WITH_OPENCLAMDBLAS=OFF \ -D WITH_OPENCLAMDFFT=OFF \ -D WITH_OPENCL_SVM=OFF \ -D WITH_OPENEXR=OFF \ -D WITH_OPENGL=OFF \ -D WITH_OPENMP=OFF \ -D WITH_OPENNNI=OFF \ -D WITH_OPENNNI2=OFF \ -D WITH_OPENVX=OFF \ -D WITH_PNG=OFF \ -D WITH_PROTOBUF=OFF \ -D WITH_PTHREADS_PF=ON \ -D WITH_PVAPI=OFF \ -D WITH_QT=OFF \ -D WITH_QUIRC=OFF \ -D WITH_TBB=OFF \ -D WITH_TIFF=ON \ -D WITH_VULKAN=OFF \ -D WITH_WEBP=ON \ -D WITH_XIMEA=OFF \ .. make -j8 make install
若一切ok的话就会正常输入lib include bin等目录到安装路径下,将安装路径下的lib目录下的所有文件拷贝到开发板的/usr/lib目录下,编写测试文件进行测试,测试文件Makefile如下:
CC = aarch64-himix100-linux-g++ -fPIC -std=c++11 -Wall -fopenmp -Wformat
NAME = test
FILES = test.c
PATH=path #安装的opencv路径 如:/home/nfs_root/opencv_install_3559
all:$(FILES) $(CC) $^ -o $(NAME) -I$(PATH)/include/ -L$(PATH)/lib/ -lopencv_core -lopencv_imgcodecs -lopencv_imgproc -lopencv_video -lopencv_highgui -lopencv_shape -lopencv_videoio -lopencv_objdetect -lpthread -lrt -ldl -fpermissive
clean: rm -rf $(NAME) *.o
测试可以正常运行后再进行下一步。(请不要使用imshow(),waitKey()函数,否则会报gtk错误)
3 .交叉编译openblas和dilib
1)从网盘下载openblas 进到目录下,打开Makefile.arm64文件进行修改如下:
ifeq ($(CORE), CORTEXA53)
CCOMMON_OPT += -march=armv8-a -mtune=cortex-a53 -O3
FCOMMON_OPT += -march=armv8-a -mtune=cortex-a53 -O3
#CCOMMON_OPT += -mcpu=cortex-a73.cortex-a53 --ftree-vectorize -ftree-vectorizer-verbose=1
#FCOMMON_OPT += -mcpu=cortex-a73.cortex-a53 -mfpu=neon -ftree-vectorize -ftree-vectorizer-verbose=1
然后新建编译脚本build.sh 内容如下:
#!/bin/bash
#/setp:1
#CCOMMON_OPT += -march=armv8-a -mtune=cortex-a53 -O3
#FCOMMON_OPT += -march=armv8-a -mtune=cortex-a53 -O3
make TARGET=CORTEXA53 HOSTCC=gcc CC=aarch64-himix100-linux-gcc CROSS=1 CROSS_SUFFIX=aarch64-himix100-linux-gcc BINARY=64 NO_LAPACKE=1 NO_SHARED=0
make PREFIX=/home/nfs_root/opencv_install_3559 install # 此目录为刚才安装opencv的目录,请务必保持一致
2) 编译dlib
下载好dlib后进入目录新建build目录,并新建编译脚本如下:
cmake -D CMAKE_CXX_COMPILER=aarch64-himix100-linux-g++ \
-D CMAKE_C_COMPILER=aarch64-himix100-linux-gcc\
-D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/home/nfs_root/opencv_install_3559 \
-D BUILD_SHARED_LIBS=ON \
-D CMAKE_CXX_FLAGS=-fPIC \
-D CMAKE_C_FLAGS=-fPIC \
-D CMAKE_EXE_LINKER_FLAGS=-lpthread -ldl \
-D DLIB_USE_LAPACK=ON \
..
make -j4
make install
-
交叉编译openface
1) 编译boost 解压进入到目录下:修改bootstrap.sh文件指定交叉编译器路径 PREFIX=/opt/hisi-linux/x86-arm/aarch64-himix100-linux/ 执行bootstrap.sh 脚本文件: ./bootstrap.sh 修改生成的project-config.jam 文件 using gcc : arm : /opt/hisi-linux/x86-arm/aarch64-himix100-linux/bin/aarch64-himix100-linux-g++ ; ./b2 --without-python --prefix=./out --build-dir=./build variant=release stage ./b2 install --prefix=/home/nfs_root/opencv_install_3559
2) 编译openface
git clone https://github.com/TadasBaltrusaitis/OpenFace.git 下载源代码
新建build目录,新建编译脚本内容如下:
export PATH="/home/nfs_root/opencv_install_3559/bin:$PATH" export LD_LIBRARY_PATH="/home/nfs_root/opencv_install_3559/lib:$LD_LIBRARY_PATH" export LD_INCLUDE_PATH="/home/nfs_root/opencv_install_3559/include:$LD_INCLUDE_PATH" export PKG_CONFIG_PATH="/home/nfs_root/opencv_install_3559/lib/pkgconfig" export OpenBLAS_HOME="/home/nfs_root/opencv_install_3559" cmake -D CMAKE_CXX_COMPILER=aarch64-himix100-linux-g++ \ -D CMAKE_C_COMPILER=aarch64-himix100-linux-gcc\ -D CMAKE_BUILD_TYPE=RELEASE \ -D CMAKE_EXE_LINKER_FLAGS=-lpthread -ldl \ -D CMAKE_INSTALL_PREFIX=/home/nfs_root/opencv_install_3559 \ -D CMAKE_C_FLAGS+=-O3 \ -D CMAKE_CXX_FLAGS+=-O3 \ -D CMAKE_CXX_FLAG+=-mcpu=cortex-a73.cortex-a53 \ -D CMAKE_C_FLAGS+=-mcpu=cortex-a73.cortex-a53 \ -D CMAKE_CXX_FLAG=-fPIC \ -D CMAKE_C_FLAGS=-fPIC \ .. make -j4 make install
编译完成后就可以将安装目录下的所有文件拷贝到开发板的相应目录下进行测试,运行时将云盘中cen_patches_*_of.dat四个文件拷贝到 (默认安装路径) etc/OpenFace/model/patch_experts下,然后将生成的bin目录下的可执行文件拷贝到etc/OpenFace目录下进行运行查看效果。
遗憾的事在3559A上运行处理一幅图片需要将近600ms。
dilib 库也有提供人脸特征点检测的方法,请参考其他文章,dilib的模型可以云盘下载:shape_predictor_68_face_landmarks.dat