FindShapeModel崩溃

   日期:2024-12-26    作者:b1247569 移动:http://ljhr2012.riyuangf.com/mobile/quote/55481.html


目前Android平台上进行人脸特征识别非常火爆,本人研究生期间一直从事人脸特征的处理,所以曾经用过一段ASM(主动形状模型)提取人脸基础特征点,所以这里采用JNI的方式将ASM在Android平台上进行了实现,同时在本应用实例中,给出了几个其他的图像处理的示例。

由于ASM (主动形状模型,Active Shape Model)的核心算法比较复杂,所以这里不进行算法介绍,我之前写过一篇详细的算法介绍和公式推导,有兴趣的朋友可以参考下面的连接: ASM(主动形状模型)算法详解

接下来介绍本应用的实现。 首先,给出本应用的项目源码: Android ASM Demo 在这个项目源码的README中详细介绍了怎么配置运行时环境,请仔细阅读。 本项目即用到了Android JNI开发,又用到了Opencv4Android,所以,配置起来还是很复杂的。Android JNI开发配置请参考:Android JNI,Android 上使用Opencv请参考:Android Opencv

整个应用的代码比较多,所以如果想很好的了解项目原理,最好还是将代码下载下来仔细看看。

首先给出本地cpp代码,下面的本地cpp代码负责调用stasm提供的c语言接口:

stasm代码比较多,这里不具体给出,这里特别给出一下Android.mk这个Android平台JNI代码的makefile

需要特别注意: NDK在Ubuntu平台下build代码时会自动删除已经存在了的动态链接库文件,因为我们需要在Android项目中引用OpenCV4Android提供的libopencv_java.so这个链接库,然而每次build JNI代码的时候NDK都会把这个.so文件删了,所以,需要用一个小trick,就是上面的Android.mk文件中最后一部分,采用prebuild的libopencv_java.so

这个地方当时迷糊了我很久,并且浪费了很多时间进行处理,这个现象在Windows上是不存在的。WTF!

然后是Android中java代码对Native JNI code的调用

然后就是主程序啦,主程序中有很多trick,目的是让Android能够高效的进行计算,因为ASM的计算量非常大,在Android平台上来说,需要消耗大量的时间,所以肯定不能放在UI线程中进行ASM计算。

本应用中通过AsyncTask来进行ASM特征点人脸定位

并且在主界面中,实时的进行人脸检测,这里人脸检测是通过开启一个新的线程进行的:

线程定义如下:

貌似代码有点多,所以,还是请看源代码吧。
下面给出几个系统的应用截图,由于本人太屌丝,所以用的红米1S,性能不是很好,请见谅。。。
同时感谢Google提供赫本照片,再次申明文明转载,MD.

应用启动之后:

分为四个主窗口,第一个是摄像头预览,第二个是人脸检测,第三个是Canny边缘检测,最后一个是ASM计算,因为ASM计算比较耗时,所以提供了一个按钮对最新的人脸计算ASM.

计算ASM以后:

然后点击第四个区域可以进行ASM特征点的图片查看:

第二个人脸检测窗口点击以后会进行一个人脸检测的Activity:

点击第三个窗口可以进入Canny边缘检测的Activity:


特别提示:本信息由相关用户自行提供,真实性未证实,仅供参考。请谨慎采用,风险自负。


举报收藏 0评论 0
0相关评论
相关最新动态
推荐最新动态
点击排行
{
网站首页  |  关于我们  |  联系方式  |  使用协议  |  隐私政策  |  版权隐私  |  网站地图  |  排名推广  |  广告服务  |  积分换礼  |  网站留言  |  RSS订阅  |  违规举报  |  鄂ICP备2020018471号