移植seetaface到树莓派

前几天做了个项目,关于在树莓派上跑人脸识别来着。网上资源很少,就自己来写写吧。

首先当然是入手一个树莓派啦~ 关于怎么装系统就不说了。用的是xshell和winscp。

开始安装opencv的时候,我第一次是用apt方式安装的,直接sudo apt-get install libcv-dev就好了。只不过用这个命令前记得 update一下。其实我觉得我讲这个方式没啥用。。。因为虽然这个方式,opencv的代码能跑,但是我使用seetaface的时候出毛病了。。以至于后来我又去官网下载源码载入的。。源码的话,推荐直接Cmake安装就好了。(源码编译的时间好久好久,感觉要5个小时来着),然后记得要在build目录里 make install呀。

opencv测试代码:#include <opencv/cv.h>

#include <opencv2/core/core.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <iostream>

using namespace std;
using namespace cv;

int main(int argc,char **argv)
{
        IplImage* img = cvLoadImage(argv[1]);
        IplImage* dstimg = cvCreateImage(cvGetSize(img),IPL_DEPTH_8U,1);
        cvCvtColor(img,dstimg,CV_BGR2GRAY);
        cvNamedWindow("Oringinal Image");
        cvShowImage("Original Image",img);
        cvNamedWindow("Gray Image");
        cvShowImage("Gray Image",dstimg);
        cvWaitKey(0);
        return  0;
}

编译的时候 直接手动写上静态链接库:g++ XXX.cpp -o XXX  -lopencv_core -lopencv_proc -lopencv_highgui。(XXX是你cpp文件名)
然后直接 ./ XXX+ 图片 调用就可以啦,可以看到效果。

到这里应该都没有什么问题。然后就是开始我们的配置seetaface啦
 先去官网下一个zip,压缩后扔到树莓派就好了。

配置SeetaFace:
我在这里用的都是cmake的图像化界面,命令行也用过,不过自己出了些问题,所以还是用图形化界面啦。

1、detection
在detection里新建一个build目录。
用cmake, source配置SeetaFace选择detection目录。目标目录就选择这个build目录,直接生成就好了。不出意外会报错。敲打


因为树莓派这个系统是被阉割的,所以这个USE_SSE可以去掉了,不然编译无法通过。然后进入到这个build目录下,输入指令make。(对了,我喜欢用root权限来。不然有些地方权限不够容易出错。)
make的过程中,不出意外又会出错。


应该是这个问题,可以看到的是,没有-msse4.1这个玩意。。所以,我们要把他删了。


找到这个dir文件夹,找到里面的 flag.make文件。 里面有一行关于 -msse4.1 的,单单把这删了就可以了。
另外一个要删的地方就是,里面有个link.txt,同样删除。

然后再进行编译,应该就能过咯。可以看到的是生成了一个facedet_test 的文件,

./facedet_test [在此处填写测试图片路径] ../model/seeta_fd_frontal_V1.0.bin 这样就可以进行测试了。

2、alignment

同样 ,在alignment里也是同样的操作。

3、indefication

最后呢,就是identification里的操作了。
同样的话

将之前生成的libseeta_facedet_lib, libseeta_fa_lib复制到build文件夹中

然后在src/test/CMakeLists.txt文件中循环前添加link_directories(${PROJECT_BINARY_DIR})

补全target_link_libraries(${BIN} viplnet ${OpenCV_LIBS} seeta_facede_lib seeta_fa_lib)



不出意外又要出问题了,这里比较麻烦,要改加速器的代码,不然无法执行。找到这个math_function 文件,修改里面的加速器。修改代码如下:
include "math_functions.h"
#include <cstdint>
float simd_dot(const float* x, const float* y, const long& len) {
  float inner_prod = 0.0f;
  long i=0;
  // add the remaining values
  for (; i < len; ++i) {
      inner_prod += x[i] * y[i];
  }
  return inner_prod;
}
void matrix_procuct(const float* A, const float* B, float* C, const int n,
    const int m, const int k, bool ta, bool tb) {
#ifdef _BLAS
  arma::fmat mA = ta ? arma::fmat(A, k, n).t() : arma::fmat(A, n, k);
  arma::fmat mB = tb ? arma::fmat(B, m, k).t() : arma::fmat(B, k, m);
  arma::fmat mC(C, n, m, false);
  mC = mA * mB;
#else
  CHECK_TRUE(ta && !tb);
  const float* x = B;
  for (int i = 0, idx = 0; i < m; ++i) {
    const float* y = A;
    for (int j = 0; j < n; ++j, ++idx) {
      C[idx] = simd_dot(x, y, k);
      y += k;
    }
    x += k;
  }
#endif
}

修改后重新跑一下,不出意外。。可能又会出现类似问题:
这里我是因为路径问题。。后来直接全部改成绝对路径了。。。虽然不太好。。。。
基本后来我遇到的都是一些路径问题,修改一下就可以了。 然后开始跑seetaface的代码,会发现。。在树莓派上跑整个流程好慢好慢。。。所以想用opencv 打开摄像头实时。。基本别想了。。。推荐把人脸对齐和比较扔服务器上跑。。不说了。我吃饭去了。。。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值