12

我正在做学校项目,其中一部分应该是关于 Android 计算机视觉库的现状。我怀着极大的热情去研究它,因为计算机视觉似乎是一个令人着迷的主题,但我已经搜索了一个多星期,但没有找到太多。我希望能够提供有关图书馆本身以及它们之间比较的信息。

我将分享我到目前为止发现的内容。

开放式CV

  • 似乎是最先进和最受欢迎的。

  • 提供最多的功能

  • 它有向后兼容性的问题

  • 很快(至少我听说过,但我对此的信息为零)

  • 确实有大量关于它的书籍(至少对于 C++ 版本)

JavaCV

  • 是其他几个库的包装器,包括 opencv

快速简历

  • 高通公司的新产品。

维基百科

  • 这更适用于增强现实,但其核心仍然是计算机视觉。

如您所见,我有一些关于它的信息,并且对每个库进行自己的测试远远超出了我目前的计算机视觉技能。

亲切的问候,彼得。

4

6 回答 6

26

基本上有两种选择:OpenCV 和 FastCV

OpenCV 是一个更成熟的库,具有比 FastCV 更多的功能。对于许多计算机视觉任务,您只能在 FastCV 中找到最基本的功能,而您可以在 OpenCV 中找到几乎所有流行的替代方案。例如,检查可用的特征检测器。OpenCV 有 Harris、SURF、SIFT、FAST 等。另一方面,FastCV 只有 Harris 和 FAST。OpenCV 包含针对不同硬件的硬件优化,包括台式计算机和移动计算设备。在桌面上使用 OpenCV 的能力为您提供了更灵活的开发选项,因为您可以在开始进行移动开发之前在快速的桌面计算机上调整和测试代码。OpenCV 也被视为Khronos 计算机视觉小组提案的一部分. 因此,如果获得批准,OpenCV 可以成为计算机视觉的标准 API。据我所知,FastCV 为 Snapdragon CPU 提供了卓越的优化。这可能在短期内对决策起到重要作用,但我确信 OpenCV 会很快缩小差距,如果有的话。

如果您选择 OpenCV 路径,则有两个子路径:带有 Android NDK 的 OpenCV 与带有 Android SDK 的 JavaCV。JavaCV 是基于 JavaCpp 的 OpenCV 包装器。JavaCV 主要封装了 C API,尽管 OpenCV 也提供了面向对象的 C++ API。例如,C++ API 会自动处理未使用内存的释放。但是,C API(因此是 JavaCV)要求您手动释放未使用的图像。此外,当您在 JavaCV 中遇到问题时,很难解决该问题,因为要检查的间接方式太多。直接使用 OpenCV 更容易定位问题。但是,在 Android 的情况下,不应忘记 NDK 增加的难度。

如果特定应用程序需要可用的 OpenCV 功能,并且不需要自定义像素级处理代码,那么 JavaCV 就是要走的路。但是,如果需要大量的自定义图像处理代码,Java 代码会减慢您的速度,无论如何您都需要切换到 NDK。在后一种情况下,OpenCV 是可供选择的替代方案。

于 2012-05-29T19:29:44.483 回答
7

我会使用 OpenCV,因为它是目前最好的计算机视觉库。您将使用 C++ 编写函数,然后使用 JNI 库编译 Android 应用程序。您可以在官方文档中了解如何执行此操作。

我已经使用过这种配置,并且在 android 中的 OpenCV 性能非常好。如果您在定点算术中创建一些函数,您会注意到好处。祝你好运

于 2012-05-27T21:53:07.530 回答
5

对于基于 android 的项目,从 JavaCV 开始很容易。它包含几乎所有 OpenCV 上可用的功能。

但是JavaCV没有丰富的文档,但是OpenCV有。因此,您可以从 OpenCV 文档中找到相关方法并在 JavaCV 中使用这些方法(方法名称相同)。

这里有一个完整的文档。这是关于如何在 Eclipse - android 环境中设置 JavaCV 的讨论。

于 2012-05-25T08:09:55.820 回答
3

vizier 回答得很好,但我的印象是他的分析有错误。我认为他不知道 Opencv 有一个名为 OpenCV4Android 的 android 版本。它是 c++ 功能的 Java 包装器,这意味着您可以避免使用 Android NDK 并使用 Java 编程所有内容。这将使 JavaCV “非官方”库变得多余,除了这个除了包装 opencv 之外,还包装了许多其他不错的 CV 库。

编辑:

这并没有改变关于推荐 OpenCV 的更重要的结论,它实际上为选择它增加了更多的点。

于 2012-05-30T09:25:14.943 回答
1

Android 上的 CV 有一个新选项,即Google Mobile Vision API。该 API 通过com.google.android.gms.vision并允许您检测给定任意图像位图的各种类型的对象(面部、条形码和面部特征)。

于 2015-08-13T20:34:09.737 回答
0

从 OpenCV 开始,然后移植重要的功能,例如特征跟踪、卷积、扩张/腐蚀,也许还有 SVM。在为 android 编译的情况下,使用 #ifdef __ANDROID__ 包装这些调用,然后只需调用 FastCV 等效项。抽象是你的朋友。

于 2016-08-11T03:39:27.333 回答