OpenCV  4.10.0
开源计算机视觉
加载中...
搜索中...
无匹配项
Julia OpenCV 绑定的简介

OpenCV

OpenCV(开源计算机视觉库)是一款开源的计算机视觉与机器学习软件库。OpenCV 的构建旨在为计算机视觉应用程序提供一个通用的基础架构,并加速机器感知在商业产品中的使用。OpenCV 采用宽松的授权条款发行,使企业能够轻松利用和修改代码。

该库拥有超过 2500 种优化算法,其中包括一套经典和最先进的计算机视觉与机器学习算法。这些算法可用于检测并识别面孔、识别物体、将视频中的人类动作进行分类、跟踪摄像头运动、跟踪移动物体、提取物体 3D 模型、从立体相机生成 3D 点云、将图像拼接在一起生成整个场景的高分辨率图像、从图像数据库中找到类似图像、消除使用闪光拍摄的图像中的红眼、追踪眼睛运动、识别场景并建立标记以将它与增强现实叠加,等等。OpenCV 拥有超过 47000 名用户,下载次数据估计超过 1800 万次。该库被广泛用于公司、研究团队和政府机构。

Julia

Julia 是一种高性能、高级的动态编程语言,专门用于与数值和科学计算相关的任务。但是,它还可以用于带有 GUI 和 Web 编程的常规编程。由于它特殊的“及时”即时编译,Julia 可被视为结合了 Python 的快速解释器风格原型制作功能和 C 的原始速度。

尽管如此,Julia 在许多传统的计算机视觉和图像处理算法中仍然严重不足。这也妨碍了 Julia 在任何需要计算机视觉的管道中的使用。OpenCV 针对 Julia 的绑定旨在解决此问题。

绑定

针对 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

$ julia
...
julia> ]
pkg> add OpenCV

如何构建绑定项

在构建绑定项之前,请务必了解如何使用所需的所有功能和部分模块(除了 Julia 绑定项之外)构建 OpenCV。如前所述,Julia 绑定项目前在 Windows 上不受官方支持,更好的替代方法是尝试在 WSL/WSL2 中使用它。

Julia 绑定项的先决条件是

建议使用 Julia 1.4+ 和最新版本的 CxxWrap.jl 和 libcxxwrap-julia。

第一步是从源代码构建 libcxxwrap-julia。链接解释了如何执行此操作。你还必须在 /.julia/artifacts/Overrides.toml 中设置覆盖,如链接中所解释的。

完成后,启动 Julia 终端并启动 REPL。按下 ],然后键入 add CxxWrap

$ julia
...
julia> ]
pkg> add CxxWrap

这应安装 CxxWrap。在此步骤中,你还可以检查 libcxxwrap-julia 覆盖是否设置正确。你可以通过检查 CxxWrap.CxxWrapCore.prefix_path() 的值来执行此操作。输出应显示 libcxxwrap-julia 的构建目录

julia> using CxxWrap
julia> CxxWrap.CxxWrapCore.prefix_path()
"$HOME/src/libcxxwrap-julia-build"

你现在已准备好构建 Julia 绑定项。只需将 -DWITH_JULIA=ON 添加到 cmake 配置命令,将构建 Julia 绑定项。例如

cmake -DOPENCV_EXTRA_MODULES_PATH=../opencv_contrib/modules -DWITH_JULIA=ON ../opencv

此命令假定父目录具有包含存储库的 opencvopencv_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 以让 binding 向 Julia 包管理器注册。

示例用法

要使用绑定,只需键入

$ julia
...
julia> using OpenCV

请注意,仅当您调用了 make install 时它才能起作用。要在不制作安装目标的情况下运行包装程序包,必须先将环境变量 JULIA_LOAD_PATH 设置为包含 OpenCV 包的目录。例如,如果在构建目录中

$ export JULIA_LOAD_PATH=$PWD/OpenCV
$ julia
...
julia> using OpenCV

Julia 包不导出任何符号,因此所有函数/结构/常量都必须以 OpenCV 为前缀

using OpenCV
const cv = OpenCV
img = cv.imread('cameraman.tif');
cv.imshow("window name", img)
cv.waitKey(Int32(0))

最后,因为 Julia 不支持 OOP 范式,因此必须进行一些更改。要访问诸如 obj.function(ARGS) 之类的函数,您应该改用 function(obj, ARGS)。从 VideoCapture 读取帧的以下示例应该可以更清楚地说明这一点。

cap = OpenCV.VideoCapture(Int32(0))
ret, img = OpenCV.read(cap)

我们调用了 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 相同的目录中即可。现在您已准备好运行了。启动一个终端并键入

> julia face_detect_dnn.jl
image

现在,您应该会看到一个使用深度神经网络进行面部检测的工作示例。

请注意:样例可能需要一些时间加载。

贡献者

下面是 OpenCV.jl 绑定和教程的贡献者列表。

  • Archit Rungta(初始版本作者和 GSoC 学生,印度理工学院,卡拉格普尔)
  • Sayan Sinha(GSoC 导师,印度理工学院,卡拉格普尔)
  • Mosè Giordano(GSoC 第二阶段导师)
  • Vadim Pisarevsky(GSoC 导师)