OpenCV 4.11.0
开源计算机视觉
|
OpenCV(开源计算机视觉库)是一个开源的计算机视觉和机器学习软件库。OpenCV 的构建是为了提供计算机视觉应用程序的通用基础架构,并加速机器感知在商业产品中的应用。OpenCV 采用宽松许可证分发,使企业能够轻松地利用和修改代码。
该库拥有超过 2500 个经过优化的算法,其中包括一套全面的经典和最先进的计算机视觉和机器学习算法。这些算法可用于检测和识别面部、识别物体、对视频中的人类行为进行分类、跟踪摄像机运动、跟踪移动物体、提取物体的 3D 模型、从立体相机生成 3D 点云、将图像拼接在一起以生成整个场景的高分辨率图像、从图像数据库中查找类似图像、去除使用闪光灯拍摄的图像中的红眼、跟踪眼球运动、识别场景并建立标记以将其与增强现实叠加等。OpenCV 拥有超过 47000 名用户社区成员,估计下载量超过 1800 万次。该库广泛应用于公司、研究小组和政府机构。
Julia 是一种高性能、高级和动态的编程语言,专门用于处理与数值和科学计算相关的任务。但是,它也可以用于具有 GUI 和 Web 编程的通用编程。由于其特殊的“即时”编译,Julia 可以被认为是 Python 快速解释器式原型设计能力与 C 的原始速度的结合。
尽管如此,Julia 在许多传统的计算机视觉和图像处理算法方面严重不足。这也阻碍了 Julia 在任何需要计算机视觉的流水线中的使用。Julia 的 OpenCV 绑定旨在解决这个问题。
Julia 的 OpenCV 绑定是在配置时使用 Python 脚本自动创建的,然后安装在系统的 Julia 包管理器上。这些绑定涵盖了核心、imgproc、imgcodecs、highgui、videio、calib3d 和 dnn 模块中大部分重要的功能。这些绑定依赖于 CxxWrap.jl,使用方法和编译过程将在下面详细解释。这些绑定已在 Ubuntu 和 Mac 上进行了测试。Windows 可能可以使用,但目前尚未正式测试和支持。
生成过程和绑定工作方式与 Python 绑定类似。唯一的重大区别是 CxxWrap.jl 不支持可选参数。因此,有必要在 Julia 代码中定义可选参数,这增加了许多额外的复杂性。
安装绑定的最简单和推荐的方法是使用 Julia 的内置包管理器。OpenCV 可作为 Julia 的注册包使用,并在所有主要平台和架构上受支持。以下步骤在 Julia v1.6.1 上进行了正确性检查
要安装,请启动 Julia REPL。按]
,然后输入add OpenCV
。
在构建绑定之前,请确保您知道如何构建具有所有所需功能和 contrib 模块(Julia 绑定除外)的 OpenCV。如前所述,Julia 绑定目前未在 Windows 上正式支持,更好的替代方法是尝试使用 WSL/WSL2。
Julia 绑定的先决条件是:
建议使用 Julia 1.4+ 和最新版本的 CxxWrap.jl 和 libcxxwrap-julia。
第一步是从源代码构建libcxxwrap-julia。该链接解释了如何操作。您还必须按照链接中的说明在/.julia/artifacts/Overrides.toml
中设置覆盖。
完成后,启动 Julia 终端并启动 REPL。按]
,然后输入add CxxWrap
。
这应该会安装 CxxWrap。在此步骤中,您还应该检查 libcxxwrap-julia 覆盖是否设置正确。您可以通过检查CxxWrap.CxxWrapCore.prefix_path()
的值来实现。输出应显示 libcxxwrap-julia 的构建目录
您现在可以构建 Julia 绑定了。只需将-DWITH_JULIA=ON
添加到您的 cmake 配置命令中,Julia 绑定就会被构建。例如
cmake -DOPENCV_EXTRA_MODULES_PATH=../opencv_contrib/modules -DWITH_JULIA=ON ../opencv
此命令假设父目录具有包含存储库的opencv
和opencv_contrib
文件夹。如果 cmake 抱怨找不到 Julia 可执行文件,请添加Julia_EXECUTABLE
变量,例如
cmake -DWITH_JULIA=ON -DJulia_EXECUTABLE=$HOME/julia-1.4.1/bin/julia ...
默认情况下,安装的包将保留在与您的构建目录相同的目录中。您可以使用 cmake 变量JULIA_PKG_INSTALL_PATH
更改此设置。
最后,输入sudo make install
将绑定注册到 Julia 包管理器。
要使用绑定,只需输入
请注意,只有在调用make install
后,此方法才有效。要运行包装器包而不创建安装目标,必须首先将环境变量JULIA_LOAD_PATH
设置为包含 OpenCV 包的目录。例如,如果在构建目录中
Julia 包不导出任何符号,因此所有函数/结构体/常量都必须以 OpenCV 为前缀
最后,由于 Julia 不支持 OOP 范式,因此必须进行一些更改。要访问像obj.function(ARGS)
这样的函数,应改为使用function(obj, ARGS)
。以下从 VideoCapture 读取帧的示例应该使其更清晰。
我们调用了OpenCV.read(cap)
,而不是调用cap.read()
。
另一个更改是所有整数和浮点数常量可能需要以适当的类型构造函数为前缀。这是必需的,因为 OpenCV 函数接受 32 位整数/浮点数,但 Julia 中的整数和浮点数常量的尺寸取决于 Julia 是在 64 位还是 32 位模式下运行。
现在让我们尝试运行其中一个包含的示例。在本教程中,我们将学习如何运行face_detect_dnn.jl
示例。此示例使用深度神经网络通过网络摄像头视频流检测面部。屏幕截图来自一个略微修改的版本,该版本读取图像而不是视频。首先导航到opencv_contrib/modules/julia/samples/
。接下来,您需要从链接获取两个文件“opencv_face_detector.pbtxt”和“opencv_face_detector_uint8.pb”;只需下载并将它们放置在与face_detect_dnn.jl
相同的目录中。现在您可以运行了。启动终端并键入
您现在应该看到一个使用深度神经网络进行人脸检测的有效示例。
注意:样本加载可能需要一些时间。
以下是 OpenCV.jl 绑定和教程的贡献者列表。