Vincent

Vincent

0个粉丝

2

问答

0

专栏

5

资料

Vincent  发布于  2020-09-29 13:46:29
采纳率 0%
2个问答
2396

海思平台如何移植opencv2.4.9+人脸识别?

   

最近在海思平台遇到问题,请问如何移植opencv2.4.9+人脸识别?

我来回答
回答1个
时间排序
认可量排序

Sky

0个粉丝

35

问答

0

专栏

6

资料

Sky 2020-09-29 13:50:16
认可1

1.确保Ubuntu能上网
2.安装cMAKE
代码: 全选
sudo apt-get install cmake-GUI
3.下载opencv2.4.9 linux版源码,不要用最新的3.0.0

http://opencv.org/downloads.html

4.解压opencv源码

代码: 全选

unzip opencv-2.4.9.zip

5.创建一个build目录用于编译和一个output目录用于存放编译完成后的海思平台的opencv:

代码: 全选

xlab@xlab-dev:~/zhouhua/opencv/opencv-2.4.9$ ls

3rdparty&nBSP; LICENSE apps datainclude modules samples

CMakeLists.txtREADME.mdcmakedoc index.rstplatforms

xlab@xlab-dev:~/zhouhua/opencv/opencv-2.4.9$ cd ..

xlab@xlab-dev:~/zhouhua/opencv$ ls

buiLDOpencv-2.4.9opencv-2.4.9.zipoutput

xlab@xlab-dev:~/zhouhua/opencv$ mkdir build

xlab@xlab-dev:~/zhouhua/opencv$ mkdir output

6.执行cmake-gui

代码: 全选

xlab@xlab-dev:~/zhouhua/opencv/opencv-2.4.9$ cmake-gui

点击Browse Source选择~/zhouhua/opencv/opencv-2.4.9

点击Browse Build选择~/zhouhua/opencv/build

然后点击Configure

此时出现的对话框选择最后一项:SPECify options for cross-compiling

下一步

Operating system填写 arm-hisiV100nptl-linux

C填写arm-hisiv100nptl-linux-gcc

C++填写arm-hisiv100nptl-linux-g++

下一步,然后等待Configuration done

然后在出现的列表中修改CMAKE_INSTALL_PREFIX为~/zhouhua/opencv/output

然后点击Generate

等待Generation done

即可关闭cmake软件。

7.进入build目录执行make

代码: 全选

xlab@xlab-dev:~/zhouhua/opencv/build$ make

提示出错:

代码: 全选

../../lib/libopencv_core.so: undefined reference to `pthread_once’

../../lib/libopencv_core.so: undefined reference to `pthread_spin_lock’

../../lib/libopencv_core.so: undefined reference to `pthread_spin_unlock’

../../lib/libopencv_core.so: undefined reference to `pthread_spin_init’

../../lib/libopencv_core.so: undefined reference to `pthread_spin_trylock’

../../lib/libopencv_core.so: undefined reference to `pthread_spin_destroy’

修改CMakeCache.txt大约200行处

//Flags used by the linker.

CMAKE_EXE_LINKER_FLAGS:STRING= -lpthread -lrt

继续make

可能出现如下错误

代码: 全选

CMake Error at /home/xlab/zhouhua/opencv/opencv-2.4.9/cmake/cl2cpp.cmake:50 (string):

string does not recognize sub-command MD5

make[2]: * [modules/ocl/opencl_kernels.cpp] Error 1

make[1]: * [modules/ocl/CMakeFiles/opencv_ocl.dir/all] Error 2

make: * [all] Error 2

删除/home/xlab/zhouhua/opencv/opencv-2.4.9/cmake/cl2cpp.cmake的第50行的内容即可。

继续make

完成后执行make install

代码: 全选

xlab@xlab-dev:~/zhouhua/opencv/output$ ls

LICENSEbinincludelibshare

8.得到了include和lib目录就可以编写程序了,来试试最常用的人脸检测吧

编写如下代码

代码: 全选

#include "cv.h"

#include "highgui.h"

#include "stdio.h"

/******************for time mesurement*************************/

#include <sys/time.h>

struct timeval tpstart,tpend;

unsigned long timeuses;

void timeRec()

{

  gettimeofday(&tpstart,0);

}

int timeRep()

{

  gettimeofday(&tpend,0);

  timeuses=(tpend.tv_sec-tpstart.tv_sec)*1000000+tpend.tv_usec-tpstart.tv_usec;

  printf("use time: %uus\n",timeuses);

  return timeuses;

}

/********************end**************************************/



int main(int argc, char* argv[])

{

IplImage* img = null;

IplImage* cutImg = NULL;

CvMemstorage* storage = cvCreateMEMStorage(0);

CvHaarClassifierCascade* cascade = (CvHaarClassifierCascade*)cvLoad("./haarcascade_frontalface_alt2.xml", 0, 0, 0);

CvSeq* faces; 



  img = cvLoADImage(argv[1], 0);

timeRec();

  faces = cvHaarDetectObjects(img, cascade,storage, 1.2, 2, 0, cvSize(25,25) );

  timeRep();

  if (faces->total == 0){

  printf("no face!\n");

  }

  cvSETimageROI(img, *((CVRect*)cvGetSeqElem( faces, 0))); 

  cvSaveImage("face.bmp", img);  

  cvResetImageROI(img);

  printf("face detected! in face.bmp!\n");

}

为了方便,直接将库和头文件拷贝到编译器的目录下去

代码: 全选

xlab@xlab-dev:~/zhouhua/opencv/mytest$ sudo cp ../output/lib/* /opt/hisi-linux-nptl/arm-hisiv100-linux/arm-hisiv100-linux-uclibcgnueabi/lib/

xlab@xlab-dev:~/zhouhua/opencv/mytest$sudo cp ../output/include/* /opt/hisi-linux-nptl/arm-hisiv100-linux/arm-hisiv100-linux-uclibcgnueabi/include/ -r

然后编译:(由于版本比较高,用了opencv2的头文件,因此需要额外增加一个-I参数指定头文件目录)

代码: 全选

arm-hisiv100nptl-linux-g++ face.cpp -I/home/xlab/zhouhua/opencv/output/include/opencv -lopencv_highgui -lopencv_core -lopencv_imgproc -lpthread -lrt -lopencv_objdetect -o face

会提示一些warning,不用管。

编译成功,然后拷贝人脸分类器文件过来。

代码: 全选

xlab@xlab-dev:~/zhouhua/opencv/mytest$ cp ../output/share/OpenCV/haarcascades/haarcascade_frontalface_alt2.xml ./

再找个图片过来,我这里就用lena.jpg了。

然后nfs挂到开发板

到开发板端做软连接库到/lib目录下

代码: 全选

ln -s /mnt/nfs/zhouhua/opencv/output/lib/libopencv_imgproc.so /lib/libopencv_imgproc.so

ln -s /mnt/nfs/zhouhua/opencv/output/lib/libopencv_objdetect.so /lib/libopencv_objdetect.so

ln -s /mnt/nfs/zhouhua/opencv/output/lib/libopencv_highgui.so /lib/libopencv_highgui.so

ln -s /mnt/nfs/zhouhua/opencv/output/lib/libopencv_core.so /lib/libopencv_core.so

然后到face所在的nfs目录去执行即可:

./face lena.jpg

use time: 31532724us

face detected! in face.bmp!

由于参数没有优化,用了31秒才找到lena的脸。。

或将文件直接拖到这里
悬赏:
E币
网盘
* 网盘链接:
* 提取码:
悬赏:
E币

Markdown 语法

  • 加粗**内容**
  • 斜体*内容*
  • 删除线~~内容~~
  • 引用> 引用内容
  • 代码`代码`
  • 代码块```编程语言↵代码```
  • 链接[链接标题](url)
  • 无序列表- 内容
  • 有序列表1. 内容
  • 缩进内容
  • 图片![alt](url)
+ 添加网盘链接/附件

Markdown 语法

  • 加粗**内容**
  • 斜体*内容*
  • 删除线~~内容~~
  • 引用> 引用内容
  • 代码`代码`
  • 代码块```编程语言↵代码```
  • 链接[链接标题](url)
  • 无序列表- 内容
  • 有序列表1. 内容
  • 缩进内容
  • 图片![alt](url)
举报反馈

举报类型

  • 内容涉黄/赌/毒
  • 内容侵权/抄袭
  • 政治相关
  • 涉嫌广告
  • 侮辱谩骂
  • 其他

详细说明

易百纳技术社区