嵌入式Ubuntu 搭建caffee环境
来源:互联网 发布:c语言输出txt文件内容 编辑:程序博客网 时间:2024/06/08 11:53
1.首先登录caffee官网, 转到github,点击Installation instructions, 选择ubuntu环境
2.小机使用的是ubuntu16.04, 所以按照指令搭建
3.首先安装如下安装包:
sudo apt-get install
libprotobuf-dev
libleveldb-dev
libsnappy-dev
libopencv-dev
libhdf5-serial-dev
protobuf-compiler
libgflags-dev
libgoogle-glog-dev
liblmdb-dev
sudo apt-get install --no-install-recommends libboost-all-dev
blas库要使用开源openblas在小机中自己编译, 库地址https://github.com/xianyi/OpenBLAS/tree/v0.2.18.
小机编译时最多指定两个线程运行, 所以使用make NUM_THREADS=2 这条指令进行编译.(多线程=6会导致性能下降)
安装到/usr目录下 sudo make install PREFIX=/usr
4.下载 caffe git仓库到小机
5.在caffe目录下, 修改CMakeLists文件中cude 为关闭, 增加C++编译选项CMAKE-CXX-FLAGS中增加-std=gnu++11
if(UNIX OR APPLE)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC -Wall -std=gnu++11")
endif()
5.1 这里修改caffe/cmake/Dependencies.cmake文件, 将其中默认的Atlas库改为openblas库
具体修改110行 set(BLAS "Atlas" CACHE STRING "Selected BLAS library") 改为set(BLAS "Open" CACHE STRING "Selected BLAS library")
6.在caffe目录下简历build文件夹, 进入build文件夹, 执行:cmake .. 然后执行make
----------------------------------------------------------分割线---------------------------------------------------------------------------------------
以上是caffe的原生编译, 下面添加dlib中编译的人脸识别数据库来编译人脸识别文件.
在caffe/examples中, 修改Cmakelists文件.
添加人脸识别和dlib库路径:
link_directories("dlib中人脸识别库路径") //LINK_DIRECTORIES("/home/czy/dlib-19.4/examples/build")
link_directories("dlib中dlib路径") //LINK_DIRECTORIES("/home/orbita/dlib-19.4/examples/build/dlib_build")
target_link_libraries("人脸识别库名 dlib库名")// target_link_libraries(${name} ${Caffe_LINK} libmyfacedetect.a libdlib.a)
然后, 添加人脸识别文件到cpp_classification中,(这里借用一个现有文件夹做工程目录)
1修改人脸识别源文件中对人脸识别模型的引用绝对路径
//初始化
int InitFace()
{
InitialFaceObject();
char path[]="/home/czy/caffe/examples/cpp_classification/";
char szFileName1[256];
char szFileName2[256];
sprintf(szFileName1, "%sdata/poya.prot", path);
sprintf(szFileName2, "%sdata/poya.dat", path);
_net = Net_Init_Load<NetF>(szFileName1,
szFileName2, caffe::TEST);
m_layer_ = (caffe::MemoryDataLayer<NetF> *)_net->layers()[0].get();//**定义个内存数据层指针
return 0;
}
2.
删除windows和x86的头文件
添加arm体系结构相关头文件<arm_neon.h>
3.删除x86相关头文件
4.修改simd函数指令
这里讲simd_dot指令贴出
float simd_dot(const float* x, const float* y, const long& len) { float inner_prod=0.0f; float32x4_t X,Y,Z;// 128-bit values float32x4_t acc=vdupq_n_f32(0.0f);//set to (0, 0, 0, 0) long i; for (i = 0; i + 4 < len; i += 4) { X = vld1q_f32(x + i);// load chunk of 4 floats Y = vld1q_f32(y + i); Z = vmulq_f32(X, Y); acc = vaddq_f32(acc, Z); } inner_prod=vgetq_lane_f32(acc, 0)+vgetq_lane_f32(acc, 1)+vgetq_lane_f32(acc, 2) +vgetq_lane_f32(acc, 3); for (; i < len; ++i) { inner_prod += x[i] * y[i]; } return inner_prod;}
这段代码也是我在网上找到的, 帮助我很大忙, 十分感谢原作者
ps:人脸识别算法需要包含dlib中人脸识别库的源文件的头文件, 这个头文件中有一个人脸对其函数和seetaface重名,所以在移植dlib时需要重新命名, 这里头文件也要做相应修改.
重新编译, 人脸识别demo可以在小机上运行
这里附一段基于opencv 摄像头采集图像, 比对结果的代码:
InitFace();
std::string path1 = argv[1];
CheckFile(path1);
std::vector<float> V1;
std::vector<float> V2;
std::vector<unsigned char>buf1;
std::vector<unsigned char>buf2;
ReadFileBuf(path1, buf1);
GetFaceTemplate((vector<char>&) buf1, (vector<char>&) V1);
cv::VideoCapture gcapture;
gcapture.open(0);
if (!gcapture.isOpened()) {
cout << "fail to open usb camera" << endl;
return 0;
}
cv::Mat gframe;
while (1) {
gcapture >> gframe;
cv::imshow("czy", gframe);
imencode(".jpg", gframe, buf2);
GetFaceTemplate((vector<char>&) buf2, (vector<char>&) V2);
float fCalcSimilarity = CalcSimilarity((float*)V1.data(), (float*)V2.data(), (V2.size()));
cout << "----------------------"<<endl;
cout << "CalcSimilarity :" << fCalcSimilarity << endl;
cout << endl;
cv::waitKey(50);
}
-------------------------------------------------------------------------------------------------分割线----------------------------------------------------------------------------------------------------
将seetaface与现有算法融合做人脸识别.
seetaface作为opencv输入图像人脸图片截取,和opencv视频显示中人脸框取.将截取人脸后的图片, 输入自有算法, 做人脸识别.
1.将seetaface faceidentification/include中头文件复制到caffe/include/seeta中, 修改人脸识别融合文件中头文件相对路径
2.在人脸识别融合文件开始处添加如下宏定义: #define GLOG_NO_ABBREVIATED_SEVERITIES
3.修改融合文件中simd_dot函数, 添加<arm_neon.h>头文件
4.修改模型库所在位置绝对路径
5.修改人脸fea所在路径
6.修改seetaface .bin文件加载路径
修改caffe/example下Cmakelists文件, 添加seetaface三个库文件路径
LINK_DIRECTORIES("SeetaFaceEngine-master-openface/FaceIdentification/build")
target_link_libraries(libseeta_facedet_lib.so libseeta_fa_lib.so libviplnet.so)
到此, 融合完毕
- 嵌入式Ubuntu 搭建caffee环境
- ubuntu嵌入式环境搭建
- ubuntu搭建嵌入式开发环境
- Ubuntu下搭建嵌入式环境
- Ubuntu下搭建嵌入式环境
- Ubuntu嵌入式开发环境搭建
- ubuntu 12.04 搭建 嵌入式环境搭建
- Ubuntu下 嵌入式开发环境的搭建:
- ubuntu下嵌入式开发环境的搭建
- Ubuntu下搭建Linux嵌入式开发环境
- ubuntu-10.10嵌入式开发环境搭建
- Ubuntu下搭建Linux嵌入式开发环境
- ubuntu下嵌入式开发环境的搭建
- 关于一步一步搭建嵌入式Ubuntu 开发环境
- 嵌入式 ubuntu上搭建java运行环境
- Ubuntu搭建嵌入式开发环境-续
- ubuntu下嵌入式开发环境的搭建
- Ubuntu下嵌入式Linux开发环境搭建
- 程序的编译与解释的区别
- 管理表
- 2. Add Two Numbers
- 八大排序算法(java实现)
- Nginx反向代理以及缓存
- 嵌入式Ubuntu 搭建caffee环境
- caffe-windows所需libraries_v120_x64_py27_1.1.0.tar.bz2下载
- sql 左连接,右连接,等值连接,case-when
- VS2017单元测试列表中获取不到单元测试的异常
- ubuntu14设置在当前目录打开终端
- Android开发 React Native项目创建及环境搭建
- 在Mac上搭建SylixOS开发环境
- HDU
- git和svn的区别