SeetaFace簡介
SeetaFace依賴於OpenCV,對於Tegra on Ubuntu,Nvidia提供libopencv4tegra並且可以使用Cuda加速。
准備工作
1.閱讀OpenCV4Tegra-README.txt,下載對應板子版本的cuda與libopencv4tegra的repo文件
2.打開ubuntu的universe源:
sudo apt-add-repository universe
並且可以換成國內的ubuntu-ports源。
3.下載SeetaFace
git clone https://github.com/seetaface/SeetaFaceEngine.git
下載后在其它主機上解壓出FaceIdentification/model/下的rar壓縮包
4.下載cmake最新版
下述編譯、安裝操作在板子上執行
先安裝Cuda(可選)
$ sudo dpkg -i cuda-repo-<distro>_<version>_<architecture>.deb
$ sudo apt-get update
$ sudo apt-get install cuda-toolkit-<cuda_version>
$ cat << END >> ~/.bashrc
# For 32-bit systems (eg: most ARM systems),Add 32-bit CUDA library & binary paths:
export PATH=/usr/local/cuda-<cuda_version>/bin:\$PATH
export LD_LIBRARY_PATH=/usr/local/cuda-<cuda_version>/lib:\$LD_LIBRARY_PATH
END
$ source ~/.bashrc
OpenCV for Tegra 安裝
$ sudo dpkg -i libopencv4tegra-repo-<distro>_<ocv_version>_<architecture>.deb
$ sudo apt-get update
$ sudo apt-get install libopencv4tegra libopencv4tegra-dev
編譯安裝cmake
遵循README
編譯SeetaFace
過程與前一篇博文一致,需要修改一些地方以支持在ARM下編譯(針對2016年11月份版本,之后的版本這些問題可能不復存在):
1.編譯器提示找不到-msse4.1
-m打開與硬件相關的一些選項,sse便是針對x86、x86_64進行的優化,在ARM上沒有這個選項,需要去掉。
在兩個CMakeLists.txt中注釋掉 -msse4.1 相關的行。
2.找不到xmmintrin.h
修改 FaceIdentification/src/math_functions.cpp
將 'xmmintrin.h' 替換為 'arm_neon.h',並將x86intrin.h那行注釋掉。
此外還需替換掉一些數學運算函數,具體要查閱許多資料。gitbub中pull request中有人提交了補丁,在math_functions 的 添加使用arm neon寫的simd_dot函數,直接替換文件即可,點擊查看。
3.編譯時報錯: #error You must enable NEON instructions (e.g. -mfloat-abi=softfp -mfpu=neon) to use arm_neon.h
方法:
在CMakeLists.txt的CMAKE_CXX_FLAGS_RELEASE中加上-mfloat-abi=hard -mfpu=neon
注意是硬浮點還是軟浮點,float-abi選項有hard、soft、softfp,如果寫成了softfp,而硬件支持硬浮點可能導致運行程序時找不到動態鏈接庫的問題。(至於如何查看動態鏈接庫是否是硬浮點,可以運行ldconfig -p|grep xxx來查看輸出中是否包含hardsoft字樣)
所有以后發現找不到動態鏈接庫,而ldconfig -p能找到、ldd卻找不到且設置LD_LIBRARY_PATH也無效的情況下就要考慮CPU架構不同、編譯選項不同了。
4./usr/include/c++/4.8/iostream:38:28: fatal error: bits/c++config.h: No such file or directory
一種簡單的解決方式:sudo apt-get install gcc-4.8-multilib g++-4.8-multilib