嵌入式平台上的人脸检测系统(简单总结)

从自己接触这个项目到目前为止,学到和弥补了很多知识,其中对编译器的认识,对平台的认识,对交叉编译的认识,都有很大进步。

下面就简单总结一下自己近期学到的东西,尽管我的项目依然在继续。


(注:此博客只是帮助自己简单总结和记录之前的工作思路,以便今后能够整理和完善整个项目的过程)


实现嵌入式平台上的人脸检测,主要是在ARM板子上能够检测到人脸

这就涉及一个检测和识别人脸的计算机视觉库---opencv ,通过调用这个库中的函数和一些文件,可以检测到人脸,人眼,鼻子等

那么,要调用这个库中的函数,就必须安装这个库文件,并且添加库文件的路径到你的开发工具,这样你在编程时就可以调用相关函数,实现相关功能,比如说人脸识别


(windows +VS2010 + opencv)

我首先实现的是用vs2010这个开发工具,因为其自带的编译器能够编译产生在windows上运行的控制台程序。所以第一步是编译能够在windows 平台使用的opencv库,这里涉及一个工具cmake ,这是一个帮助编译的工具,网上有具体的解释和用法。我首先用其编译了opencv ,然后添加到库文件路径到VS 的项目包含路径中,这样的话,在引用Opencv的头文件时,不会出现找不到头文件的情况。然后在网上找到 人脸检测的代码,建立项目 编译产生 控制台程序,实现人脸检测的功能。其实opencv可能自带的有一些例子程序,这些程序中可以实现,从图片,视频文件,摄像头中捕获人脸的功能。

但是,我的项目需要加上界面,不能单单是一个控制台程序,所以采用了跨平台的界面编程工具 qt creator ,所有第二部是实现在qt 中调用Opencv

(windows + qt +opencv)

和上述过程相似,只要能够添加库文件路径到开发工具,就可以调用相关函数和文件到项目中。依然是用cmake 编译产生库文件 到指定位置。与VS不同的是,我是在单独每个QT项目中,添加opencv 头文件和库文件路径的。这与之前过程类似,此处不多言,今后详述。建立项目后,就是编译通过。

这里设计的一个问题是版本问题和编译器的问题:

此处的opencv 版本 和qt 版本需要特别注意,qt 使用的编译器是mingw 版本的,具体为什么我不太懂,貌似cmake 中有这个选项,用这个选项编译Opencv才可以通过。

所以下载了带有此编译器的qt  然后用较低版本的Opencv 才可以通过编译。

这里遇到的第二个问题是:

把opencv调用的视频帧转换成QT能够处理的图片,显示出来,具体转化方法网上有,此处暂时不详细叙述


(linux +qt +opencv)

下面便是实现linux 系统上的编程。此处,需要用到的 opencv ,cmake ,qt 等,都应该是实用于linux系统的,这些都可以从官网上下载到相应的版本。

然后,首先是cmake安装,建立相应的目录,放置cmake 解压包(具体操作网上有),然后是添加环境变量;这样的话便可以利用cmake的图像界面进行opencv的编译

其次,编译opencv ,此处编译是适用于linux上位机的库,所用到编译器是g++(查看linux系统中是否已经安装),编译过程中是利用Cmake的图像界面,所以其中要注意的细节问题,在本论坛中可以找到前辈们作出的努力,他们的帖子讲的很详细。编译后,产生可以调用的opencv库文件,然后便是添加相应的环境变量(要有这个概念)

再次,安装qt ,可以从官网上下载.run文件,进行图形界面的安装。安装完成后,同样是建立项目,在项目中,添加Opencv库的路径和头文件路径。编译产生程序


(arm +qt +opencv)

这个过程需要做的主要是交叉编译和移植。前提是安装交叉编译器arm-linux-gcc(安装方法网上有,注意安装路径和环境变量的添加)

首先是opencv库文件的交叉编译和移植,此处就是opencv for arm ,大致过程如同 opencv for linux ,只是细节问题可能不同,需要注意

其次是 qt for arm。就是需要交叉编译qt 如果arm 板子有qt 库,这个问题就解决一半了。不需要自己交叉编译后移植,只需要在上位机将程序通过 qt for arm 中的命令工具进行编译,然后将程序下载到装有qt for arm 库的板子即可。(这个过程我还在弄,主要是交叉编译QT 这个过程我依然在捣鼓中,为了是能够得到qmake for arm,这样就可以交叉编译我的程序,以便下载)

好了,基本思路是这样的,其中很多问题,很多细节,都是需要自己慢慢理解和捣鼓的。感谢网上一些前辈前仆后继的努力和无私付出,解决了我很多问题和困惑。我写这些知识想和自己一样的新手在思路上更加清晰一下,以便总结和进行下一步工作。

有时间的话,我会贴出具体的步骤和需要注意的细节问题,毕竟这是毕业设计的项目,毕业才是王道,吼吼。

最后,向那些前辈们致敬,么有你们,就么有我的这些进展

你可能感兴趣的:(嵌入式开发)