dlib 对象检测在 iOS 上始终返回零结果

Posted

技术标签:

【中文标题】dlib 对象检测在 iOS 上始终返回零结果【英文标题】:dlib object detection always return zero results on iOS 【发布时间】:2017-11-16 23:19:40 【问题描述】:

我一直在 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 目录,调用了以下命令。

    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】:

dlib 在 iOS 上也可以正常工作。为它踢自己,但我混淆了检测器实例。我在下面调用的检测器没有用于对象检测。

dlib::deserialize(detector, fin);

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

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

【讨论】:

您好,我也在尝试使用 dlib 构建对象检测器,您对此有任何指导吗?因为它对我来说很新,只是在努力如何用特定对象图像训练模型并将其用于检测其他图像中的对象。如果您为我提供一些教程或博客以便我更好地理解,我们将不胜感激。谢谢!

以上是关于dlib 对象检测在 iOS 上始终返回零结果的主要内容,如果未能解决你的问题,请参考以下文章

dlib 人脸检测错误:不支持的图像类型,必须是 8 位灰度或 RGB 图像

SOQL:避免使用 NULL 结果计数,而是返回 0(零)

Dlib 正面人脸检测在 IOS 中不起作用。?

C 中的 FTDI D2XX API 在命令行控制台上工作,但在由 Xcode 和 Swift 编程在 macOS 上构建的应用程序中始终返回零

最后插入值始终返回零

如何进行始终返回零行的选择