为了在Android上运行dlib的demo,需要编译Android的dlib库。

但网上都是基于linux的方法。没有针对在windows上的方法。

故此次验证了在windows上编译dlib的Android库。方法如下。

1、下载dlib-android ,解压后放置到一个自己的dba-temp目录下。

2、进入dba-temp,修改build.py,envsetup两个文件。

因为个人用的是python3,做了必要的修正。

修改后的文件参见我的GitHub。

3、下载dlib,把解压后的dblib-master下所有文件拷贝到dba-temp\dlib下。

4、对dlib中文件做修改,主要对应如下to_string,round找不到的问题。

修改的内容见本文的问题说明。修改后的文件已经放置到GitHub。

5、下载miniglog,解压后放置到dba-temp\third_party\miniglog下。

miniglog的网址是https://github.com/tzutalin/miniglog

6、下载opencv的Android库,运行脚本如下

python envsetup

7、编译dlib,

ndk-build -j 2

编译后的libandroid_dlib.so库,位于dba-temp\libs的目录下。

完整的代码及编译后的so库,参见个人的github:https://github.com/renwoxing2016/dlib-android-self。

问题说明

1、to_string,round找不到的问题。

jni/../dlib\dlib/image_loader/../serialize.h:1635:30: error: no member named 'to_string'

in namespace 'std'

std::to_string(objects_read+1) + "th object from the file ...

jni/../dlib\dlib/image_loader/../array2d/../geometry/rectangle.h:742:40: error: no member

named 'round' in namespace 'std'

unsigned long scale = std::round(std::sqrt(area));

解决办法:

定义newdefine.h.

然后在头文件serialize.h中加入如下一行。 #include "newdefine.h"

在头文件interpolation.h中加入如下一行。 #include "../newdefine.h"

相关文章