为了在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"
本文暂时没有评论,来添加一个吧(●'◡'●)