![]() |
OpenCV 4.12.0
开源计算机视觉
|
OpenCV (开源计算机视觉库) 是一个开源的计算机视觉和机器学习软件库。OpenCV 的构建旨在为计算机视觉应用提供一个通用基础设施,并加速机器感知在商业产品中的使用。OpenCV 在宽松许可下分发,使企业可以轻松地使用和修改代码。
该库拥有超过 2500 种优化算法,其中包括一套全面的经典和最先进的计算机视觉和机器学习算法。这些算法可用于检测和识别人脸,识别物体,对视频中的人类动作进行分类,跟踪相机移动,跟踪移动物体,提取物体的 3D 模型,从立体相机生成 3D 点云,将图像拼接在一起以生成整个场景的高分辨率图像,从图像数据库中查找相似图像,从使用闪光灯拍摄的图像中移除红眼,跟踪眼球运动,识别场景并建立标记以将其与增强现实叠加等等。OpenCV 拥有超过 4.7 万人的用户社区,估计下载量超过 1800 万。该库被公司、研究小组和政府机构广泛使用。
Julia 是一种高性能、高级和动态编程语言,专门用于与数值和科学计算相关的任务。但是,它也可以用于带有 GUI 和 Web 编程的通用编程。Julia 可以被认为是 Python 的快速解释器风格原型设计能力与 C 的原始速度的结合,因为它具有特殊的“just-ahead-of-time”编译。
尽管如此,Julia 仍然严重缺乏许多传统的计算机视觉和图像处理算法。这也阻碍了 Julia 在任何需要计算机视觉的管道中的使用。Julia 的 OpenCV 绑定旨在解决这个问题。
Julia 的 OpenCV 绑定是在配置时使用 Python 脚本自动创建的,然后使用 Julia 包管理器安装在系统上。这些绑定涵盖了 core、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。
在构建绑定之前,请确保您知道如何构建具有您需要的所有功能的 OpenCV 以及 contrib 模块(除了 Julia 绑定)。如前所述,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/。接下来,您需要从 link 下载两个文件 "opencv_face_detector.pbtxt" 和 "opencv_face_detector_uint8.pb",并将它们放在与 face_detect_dnn.jl 相同的目录中。现在您可以运行了。启动终端并简单地输入
您现在应该看到一个使用深度神经网络进行人脸检测的工作示例。
注意:该示例可能需要一些时间才能加载。
以下是 OpenCV.jl 绑定和教程的贡献者列表。