dlib对象检测始终在iOS

时间:2017-06-14 17:18:04

标签: c++ ios object-detection dlib

我一直在mac上成功使用dlib对象检测。现在我想在iOS应用程序中使用它。但是,在花费无数小时后,dlib对象检测器始终返回零矩形。

        ifstream fin(dataDir + "/object_detector.svm", ios::binary);
        typedef dlib::scan_fhog_pyramid<dlib::pyramid_down<6> > image_scanner_type;
        dlib::object_detector<image_scanner_type> detector;
        dlib::deserialize(detector, fin);

        vector<dlib::rectangle> dets = detector(dlibImage);

为了确保它不是由于不同的图像,我使用完全相同的图像,其中检测器在mac上返回1。我还在mac和iOS中的部分图像中打印了uchar,并返回相同的值。因此图像数据完全相同。

对于iOS,可能没有正确构建dlib库。我尝试了多种方法。从/ example / build dir,调用了以下命令。

    cmake -G Xcode ..
    cmake --build . --config Release

它在dlib_build目录中生成了dlib.xcodeproj项目。我在xcode中打开了项目,将架构改为iOS(armv7,arm64)并重建了库。这个库与我的项目相关联。我用这种方法得到的结果为零。 dlib是在调试模式下构建的;我没有得到任何断言错误。

尝试的第二种方法是在我的项目中使用dlib / all / source.app。我使用了cmake或dlib.xcodeproj项目使用的所有预处理标志。没有错误,但仍然没有匹配。

我已经将我的xcode项目的构建设置与cmake生成的examples.xcodeproj进行了比较,并且它是相同的。还从https://github.com/zweigraf/face-landmarking-ios检查了xcode项目,但没有帮助。

奇怪的是探测器需要几秒钟的时间来处理并返回零匹配。所以它正在做点什么。我希望有一个调试日志记录,我可以为探测器打开。

我没有想法。如果有人可以帮助,我们将不胜dlib是一个很棒的库,我只是希望它在iOS上更容易使用。

1 个答案:

答案 0 :(得分:0)

dlib在iOS上运行良好。踢它自己,但我混淆了探测器实例。我在下面调用的探测器没有用于物体探测。

dlib::deserialize(detector, fin);

我刚刚使用了一个空的探测器实例,它返回了0次检测。通过空检测器,我的意思是它被定义但是反序列化方法没有被调用。如果使用未加载object_detector.svm文件的检测器进行检测,如果dlib返回错误或警告,那将是很好的。

我也观察到形状检测器的相同行为。如果未加载sp.dat,则会以静默方式报告检测到的0个部分。将此作为答案发布,万一其他人也犯了这么愚蠢的错误。