/ 常问问题

您有问题,我们有答案。请阅读下面的常见问题解答,了解有关 OpenMV Cam 存在原因及其背后想法的更多信息。如果您正在寻找更多技术信息,请访问我们的产品页面或阅读我们的在线文档

为什么我应该使用 OpenMV Cam 而不是 Raspberry Pi?

我们使用 OpenMV Cam 的目标是在处理计算机视觉时为您提供类似 Arduino 的体验。因此,我们将 OpenMV Cam 制成低功耗模块,以便您可以从计算机的 USB 端口运行它。我们使其无需配置,因此您可以在几分钟内启动并运行。而且,我们把它做得很小,这样你就可以把它放在任何地方。

如果您只是寻求原始性能,而不考虑功耗、易用性和尺寸,那么像 Raspberry Pi 这样的单板计算机 (SBC) 就是您想要购买的。我们并不是想赢得性能竞赛。但是,当功耗、简单性和尺寸很重要时,您就需要 OpenMV Cam。

当您购买 OpenMV Cam 时,您就是在帮助支持为大众开发易于使用的机器视觉。最终,我们希望提供超小型、超低成本的 OpenMV 摄像头,可以轻松嵌入到产品中,就像使用 PIR 运动检测器传感器一样。我们正在努力创造一个让您可以轻松地将相机放置在一切可能的地方的未来。

OpenMV Cam 的功耗有多低?

OpenMV Cam 在空闲时消耗约 100 mA 的电流,在处理图像时消耗约 140 mA 的电流。这意味着您的 OpenMV Cam 可以轻松地通过 USB 端口运行。无需电源砖。

由于我们使用 MicroPython,您可以完全控制功耗,因此您可以在功耗敏感的应用程序中轻松部署 OpenMV 摄像头。需要消耗小于 1mA 的电流?只需将 sleep 命令添加到脚本中即可。 然后,您的 OpenMV Cam 可以通过电平敏感中断或片上 RTC 唤醒。

OpenMV Cam 易用性如何?

全新 Arduino 上的 LED 闪烁需要多长时间?好吧,您在计算机上安装 Arduino IDE,插入 Arduino,打开示例脚本,就完成了。所以,不到5分钟。

在全新的 OpenMV Cam 上跟踪彩色物体需要多长时间?好吧,您在计算机上安装 OpenMV IDE,插入 OpenMV Cam,打开示例脚本,然后就完成了。所以,不到5分钟。

在全新的单板计算机 (SBC) 上跟踪彩色物体需要多长时间?好吧,首先您需要在 SD 卡上安装操作系统。然后启动并登录您的 SBC,如果您没有屏幕,这可能会很困难。然后你需要将其连接到互联网并安装 OpenCV...以及...以及...以及...等等。

我可能省略了上面的一些步骤,但是,重点是,使用 OpenMV Cam,您将获得类似 Arduino 的机器视觉使用体验。也就是说,我们致力于让您能够超级简单地启动和运行机器视觉应用程序,从而轻松地与现实世界进行交互。

为什么使用 Python 而不是 C/C++ 编程?

这是个好问题。如果 MicroPython 在 OpenMV 启动之前不存在,那么它可能已经被开发出来,因此您必须使用 C/C++ 对其进行编程。如果您使用 C/C++ 对 OpenMV Cam 进行编程,我们将能够使用 Arduino 核心,未使用的库调用将被优化掉,并且您的代码将运行得更快。

然而,一个问题,一个大问题仍然存在——动态内存管理。在 C/C++ 中,这必须显式完成。因此,删除复杂的数据结构并不像Python那么容易。当然,我们可以创建复杂的类来解决这些问题。但是,MicroPython 可用并解决了这个问题,因此我们以它为基础进行构建。

重要的是要了解大多数机器视觉函数/方法都会返回数据结构列表。其中一些数据结构本身也可能是列表。迭代列表、排序、过滤等都由 MicroPython 神奇地处理,而在 C/C++ 中,用户必须积极参与确保他们的代码正确并且不会泄漏内存、取消引用错误指针正如我们之前所说,我们的目标是使系统易于使用,而 C/C++ 对于初学者程序员来说绝对不容易。

与 C/C++ 相比,Python 不是很慢吗?

是的,Python 比 C/C++ 慢,但是,我们所有的算法都是用 C 编写的。Python 只是用作顶层接口,使编码变得容易。此外,所有外设控制也都是用 C 语言编写的。因此,Python 再次被用作顶层接口,以使编码变得容易。

请注意,MicroPython 操作系统在执行之前将 Python 脚本编译为字节代码(就像在 PC 上一样)。因此,您的 OpenMV Cam 不会浪费大量时间一遍又一遍地解析相同的脚本。

无论如何,如果您想直接访问内存或者您需要更快的自定义算法速度,那么 MicroPython 都能满足您的需求。首先,如果您需要使用寄存器设置,MicroPython 允许您随时直接访问 OpenMV Cam 中的任何内存位置。其次,MicroPython 允许您编写本机 ARM 汇编代码,这些代码可以像函数调用一样在 Python 脚本中执行。第三,OpenMV Cam 的固件是开源的,您可以使用 C 语言的新自定义功能自由修改和扩展它,然后使用 OpenMV IDE 将新固件刷新到您的 OpenMV Cam 上。

你在使用 OpenCV 吗?

不,我们自己编写了所有机器视觉算法。 OpenCV 功能强大,但专为运行 Windows/OSX/Linux 的计算机而设计。但是,您的 OpenMV Cam 不运行任何操作系统,而是通过 MicroPython 为您提供裸机控制 - 因此,OpenCV 在多种方面不兼容。

无论如何,我们对这种情况很满意。实现机器视觉算法既有趣又有趣。此外,我们正在构建一个新的计算机视觉库,不受 OpenCV 施加的所有内存和操作系统限制。

最后一点,如果您想在 OpenMV Cam 上用 C 语言编写自己的自定义算法,您会发现我们的代码非常容易修改和扩展。而且,如果您想分享您的工作,您可以向我们发送包含您的更改的拉取请求,我们可能会将其合并到主固件中。

OpenMV Cam 是开源的吗?

是的,开放是我们的名字。我们所有的源代码以及原理图和电路板文件都在线发布在我们的GitHub 页面上。所以我们是一个开源软件和硬件项目。至于重新编程 OpenMV Cam 的固件,您可以在我们的GitHub Wiki上找到有关如何执行此操作的说明。

此外,我们所有的代码均获得 MIT 许可。所以,用它做任何你想做的事吧。我们希望围绕 OpenMV 代码库建立一个社区,以帮助其变得比目前更好。

为什么分辨率不是 Ultra Uber HD++?

我们的目标是制造廉价、低功耗且易于使用的机器视觉模块。而且……令人惊讶的是,对于大多数机器视觉应用来说,更高的分辨率实际上并没有帮助,反而有害。在相同的帧速率下,640x480 图像的处理能力比 320x240 图像多 4 倍。因此,除非有特定原因需要提高分辨率,否则您只是降低帧速率。例如,人脸检测是使用一种算法来实现的,该算法将为图像中人脸的位置生成多个匹配项,这些匹配项都相互重叠,就像一个人在某人的脸部周围重复画一个方框多次一样。然后,我们在返回结果之前对所有检测到的重叠框进行平均。因此,在这种情况下,额外的分辨率对于精度来说或多或少毫无价值,因为算法输出的噪声结果必须被过滤。因此,在拥有足够的分辨率后,除非您需要在更远的距离上解析更多细节,否则更多的分辨率并没有真正的帮助,而这可以通过使用长焦镜头轻松完成。

不管怎样,对于 TL;DR 的人来说,更高的分辨率意味着使用更昂贵的相机模块和更昂贵的耗电处理器,但实际上并没有给你带来更好的机器视觉结果。现在,您可以拍摄更高质量的图片和视频,但是,如前所述,我们的目标是制造廉价、低功耗且易于使用的机器视觉模块。

综上所述,您的 OpenMV Cam 可以拍摄足够好的照片和视频用于安全摄像头。超高清视频固然不错,但如果您只是需要快速记录发生的事情,则不是必需的。最重要的是,使用 OpenMV Cam,您可以完全控制拍照和录制视频,这样您就可以轻松地在快照上运行机器视觉算法,然后在保存快照之前对其进行标记。

你们能让 OpenMV Cam 更便宜吗?

随着我们销售越来越多的产品并发展公司,我们将能够做到这一点。我们没有风险投资,因此我们以允许公司在没有任何人拿薪水的情况下运作的价格出售我们的产品。所有资本均重新投资回公司。随着 OpenMV 的发展,电路板成本将会降到极其便宜的价格。请立即购买我们的一些产品以实现这一目标。

与 Raspberry Pi 相比,OpenMV Cam 的速度有多快?

OpenMV Cam M7 的速度大约是 Raspberry Pi 0 的一半,而 OpenMV Cam H7 在 CPU 限制的机器视觉性能方面比 Raspberry Pi 2 稍快(当然,您可以从具有应用处理器的单板计算机获得更多性能)当您使用他们的 GPU 和 SIMD 指令时 - 但当然,您也会消耗更多的功耗)。

得益于 ARM 的 Cortex-M7 架构,OpenMV Cam 能够实现应用处理器级别的性能,同时以较低的时钟频率运行(从而降低功耗),该架构每个时钟的指令数比 ARM11 和 Cortex-A7 架构多约 2.5 倍Raspberry Pi 0 和 Raspberry Pi 2 使用的。

查看coremark 性能页面以了解 CPU 比较分数或以下摘要:

  • 皮质-M7
    • * OpenMV Cam M7 @ 216 MHz -> 1082.41 (每 MHz 5.01)
    • * OpenMV Cam H7 @ 480 MHz -> 2040 (每 MHz 5.00)
  • ARM1176JZF-S
    • * Raspberry Pi 1 @ 700 MHz -> 1303.78 (每 MHz 1.86)
    • * Raspberry Pi 0 @ 1 GHz -> 2060.98 (每 MHz 2.06)
  • 皮质-A7
    • * Raspberry Pi 2 @ 900 MHz -> 2340 (每 MHz 2.6)
  • 皮质-A53
    • * Raspberry Pi 3 @ 900 MHz -> 2700 (每 MHz 3.0)
    • * Raspberry Pi 3 @ 1.2 GHz -> 3600 (每 MHz 3.0)
Coremark是比Dhrystone更实际的性能测量,编译器通常会优化基准测试所做的大部分工作。

现在,记忆怎么样? OpenMV Cam M7 具有用于计算机视觉算法的约 384 KB RAM,而 OpenMV Cam H7 具有用于计算机视觉算法的 512 KB RAM。 OpenMV Cam M7 上的内存总线为 32 位宽,运行频率为 216 MHz,内存带宽为864 MB/s 。 OpenMV Cam H7 上的内存总线为 64 位宽,运行频率为 4800 MHz,内存带宽为3.84 GB/s 。将此与原始 Raspberry Pi 和 Raspberry Pi 2 进行比较,后者的 32 位内存总线在 DDR 模式下以 400 MHz 运行,性能为 3.2 GB/s(Raspberry Pi 3 和 Zero 32 位内存总线在 DDR 模式下以 450 MHz 运行)模式的性能为 3.6 GB/s)。

因此,虽然 OpenMV 摄像头没有足够的 RAM 来支持高分辨率计算机视觉(对于实时应用程序来说,无论如何你都不想这样做),但它们能够以低功耗提供有竞争力的性能。能量消耗。