实现计算机视觉系统/算法/应用程序的好语言?

信息处理 图像处理 计算机视觉 编程
2022-01-13 22:19:31

我正在尝试实现基于内容的图像检索系统,但在此之前,我想大致了解一些适合此任务的编程语言(具有良好的库等)。

有谁知道这种任务的一些好的语言和库?Python 或 Java 呢?

最好的

4个回答

也许您可以更具体地说明您的工作范围和规模(学术项目?桌面或移动商业产品?基于 Web 的商业项目?)。

一些建议和评论:

  • Matlab 在学术界很常见,非常适合草绘/验证想法。您将可以访问来自其他研究人员的大量代码(在 CV 和机器学习方面);原型设计和调试将非常快速和容易,但是您在这种环境中开发的任何东西都很难投入生产。根据您的代码在做什么,您可能会遇到内存/性能问题(在某些情况下,您无法根据 Matlab 的原语描述您想要做什么,并且必须开始循环像素,而 Matlab 作为一种解释语言不是在这种情况下提供帮助)。与数据库、Web 服务器等交互并不容易,有时甚至是不可能的(您不会让 Matlab 程序成为 Web 前端调用的 Thrift 服务器)。花费$$$。

  • C++ 用于许多生产级 CV 系统(想想 Google 的图像搜索或街景,或许多商业机器人应用程序的规模)。像 OpenCV 这样的优秀库,性能出色,易于投入生产环境。如果你需要进行机器学习,那里有很多库(LibSVM / SVMlight、Torch)。如果您必须求助于“循环所有像素”代码,它将表现良好。易于用于对大规模检索系统中所需的系统/存储层进行编码(例如:用于存储倒排索引映射特征哈希到图像的非常大的磁盘哈希映射)。Thrift / Message Pack 之类的东西可以把你的检索程序变成一个 RPC 服务器,可以被 Web 前端调用。然而:原型设计不是很敏捷,尝试新想法非常糟糕,较慢的开发时间;并且交给没有经验的编码人员可能难以跟踪性能和/或不稳定问题。

  • Python 在某种程度上是两者之间的中间地带。您可以将它用于 Matlab 风格的数值计算(使用 numpy 和 scipy)+ 绑定到 OpenCV 等库。你可以用它做系统/数据结构的东西并获得可接受的性能。尽管比 Matlab 或 C++ 中的机器学习包要少,但仍有不少机器学习包。除非您必须使用“循环所有像素”代码,否则您将能够以 1:1.5 到 1:3 的性能比率和 2:1 到 10:1 的比率编写几乎所有可以使用 C++ 完成的操作源代码大小(有争议)。但是,根据您项目的成功情况,有时会出现性能问题,并且无法选择重写为 C++。

特别是因为您的项目是学术性的,所以Mathematica是一个非常好的和合适的软件系统。Mathematica 8 带有一套全面的图像处理、线性代数、数值、GPU 等功能。它也是一个符号系统,因此我可以多次推导出方程的封闭形式解——对于计算机视觉任务来说非常方便。Mathematica还可以与 Python、C、C++、Java、.NET、...、代码进行通信。

如果这是一个学术项目,那么您绝对应该使用 Matlab,更具体地说是图像处理工具箱和计算机视觉系统工具箱。在 Matlab 中创建原型和评估算法所需的时间比在 C++ 中要少几个数量级。

即使使用 Python 接口,OpenCV 也比 Matlab 更难使用,如果你真的需要,你可以通过 mex 从 Matlab 调用 C 或 C++ 代码。

对于图像检索系统。您将拥有客户端和服务器端代码。服务器端可以是 Python 或 C/C++。OpenCV 是您最好的选择。它同时具有 python 和 C++ 接口。对于客户端,我认为你最好使用java。