本文正在参与「金石方案 . 分割6万现金大奖」

opencv-python 最新4.6.0.66版装置及介绍翻译

github.com/opencv/open…

项目描述

车轮上的 OpenCV

为 Python 预构建的仅 CPU 的 OpenCV 包。

假如您希望从源代码编译绑定以启用其他模块(例如 CUDA),请查看手动构建部分。

装置与运用

  1. 假如您装置了以前/其他手动装置(= 未通过装置pip)版别的 OpenCV(例如,Python 站点包根目录中的 cv2 模块),请在装置前将其删去以避免冲突。

  2. 确保您的pip版别是最新的(19.3 是支撑的最低版别)pip install --upgrade pip:. 查看版别与pip -V. 例如,Linux 发行版一般顺便非常旧的pip版别,这会导致许多意想不到的问题,尤其是manylinux格局问题。

  3. 为您的环境挑选正确的包:

    有四种不同的套餐(请参阅下面的选项 1、2、3 和 4),您应该只挑选其间一个。不要在同一环境中装置多个不同的包。没有插件架构:一切包都运用相同的命名空间 ( cv2)。假如您在同一环境中装置了多个不同的包,请将它们全部卸载pip uninstall并仅重新装置一个包。

    **一个。**适用于标准桌面环境(Windows、macOS、简直任何 GNU/Linux 发行版)的软件包

    • 选项 1 – 首要模块包:pip install opencv-python
    • 选项 2 – 完整包(包括首要模块和 contrib/extra 模块):(查看OpenCV 文档pip install opencv-contrib-python中的 contrib/extra 模块列表)

    b. 服务器(无头)环境(如 Docker、云环境等)的包,无 GUI 库依靠项

    这些包比上面的其他两个包小,因为它们不包括任何 GUI 功用(不是用 Qt/其他 GUI 组件编译的)。这意味着这些包避免了对 X11 库的严峻依靠链,因此您将具有例如更小的 Docker 映像。假如你不运用cv2.imshowet al.,你应该总是运用这些包。或许您正在运用 OpenCV 之外的其他包(例如 PyQt)来创立 GUI。

    • 选项 3 – 无头主模块包:pip install opencv-python-headless
    • 选项 4 – 无头完整包(包括首要模块和奉献/额定模块):(查看来自OpenCV 文档pip install opencv-contrib-python-headless的奉献/额定模块列表)
  4. 导入包:

    import cv2

    一切包都包括 Haar 级联文件。cv2.data.haarcascades能够用作数据文件夹的快捷方式。例如:

    cv2.CascadeClassifier(cv2.data.haarcascades + "haarcascade_frontalface_default.xml")

  5. 阅览OpenCV 文档

  6. 在翻开新问题之前,请阅览下面的常见问题解答并查看现已翻开的其他问题。

常常问的问题

问:我还需求独自装置 OpenCV 吗?

答:不,这些包是特殊的 wheel 二进制包,它们现已包括静态构建的 OpenCV 二进制文件。

问:Pip 装置失利并呈现ModuleNotFoundError: No module named 'skbuild'

opencv-python4.3.0.* 版别开端,manylinux1wheels 被 wheels 替代了manylinux2014。假如你的 pip 太旧,它会测验运用 4.3.0.38 中引入的新源分发来手动构建 OpenCV,因为它不知道如何装置manylinux2014轮子。可是,source build 也会因为太旧而失利,pip因为它不了解pyproject.toml. 要运用新的manylinux2014预制轮子(或从源代码构建),您的pip版别必须 >= 19.3。请晋级pippip install --upgrade pip

问:在 Windows 上导入失利:ImportError: DLL load failed: The specified module could not be found.?

答:假如在 Windows 上导入失利,请确保您装置了Visual C++ redistributable 2015。假如您运用的 Windows 版别低于 Windows 10 且未装置最新的体系更新,则或许还需求通用 C 运转时。

Windows N 和 KN 版别不包括 OpenCV 所需的媒体功用包。假如您运用的是 Windows N 或 KN 版别,请一起装置Windows Media Feature Pack。

假如您有 Windows Server 2012+,媒体 DLL 或许也会丢失;请在服务器管理器中装置名为“媒体根底”的功用。留神,有些帖子主张装置“Windows Server Essentials Media Pack”,可是这个需求“Windows Server Essentials Experience”角色,这个角色会深刻影响您的 Windows Server 装备(通过强制活动目录集成等);所以只装置“媒体根底”应该是一个更安全的挑选。

假如以上没有帮助,请查看您是否正在运用 Anaconda。旧的 Anaconda 版别有一个导致过错的过错,请参阅此问题以进行手动修正。

假如在查看了之前的一切解决方案后依然遇到过错,请下载Dependencies并运用它翻开cv2.pyd(一般坐落C:\Users\username\AppData\Local\Programs\Python\PythonXX\Lib\site-packages\cv2)文件以调试丢失的 DLL 问题。

问:我还有一些其他导入过错?

答:确保您已删去旧的 OpenCV Python 绑定手动装置(站点包中的 cv2.so 或 cv2.pyd)。

问:函数 foo() 或办法 bar() 返回过错成果,抛出异常或使解释器崩溃。我应该怎么办?

答:存储库仅包括 OpenCV-Python 包构建脚本,而不包括 OpenCV 自身。OpenCV 的 Python 绑定是在官方 OpenCV 存储库中开发的,它是陈述问题的最佳场所。另请在提交新过错之前查看 {OpenCV wiki]( github.com/opencv/open… ) 和官方 OpenCV 论坛。

问:为什么软件包不包括非自在算法?

答:非自在算法(例如 SURF)不包括在这些软件包中,因为它们已取得专利/非自在,因此不能作为内置二进制文件分发。请留意,自 OpenCV 版别 4.3.0 和 3.4.10 以来,因为专利到期,SIFT 包括在构建中。有关详细信息,请参阅此问题:https ://github.com/skvark/opencv-python/issues/126

问:为什么打包和导入不同(opencv-python vs. cv2)?

A: 用户更简单了解,也opencv-pythoncv2简单用查找引擎找到包。cv2(旧 OpenCV 版别中的旧接口被命名为cv)是 OpenCV 开发人员在创立绑定生成器时挑选的称号。这被保存为导入称号,以与 Internet 上不同类型的教程保持一致。更改导入称号或行为也会让习惯于import cv2.

opencv-python 文档

这个存储库的目的是供给为最常用的 Python 版别和平台打包每个新OpenCV 版别的办法。

CI构建进程

该项目的结构类似于带有标准setup.py文件的一般 Python 包。构建矩阵中单个条目的构建进程如下(参见示例.github/workflows/build_wheels_linux.yml文件):

  1. 在 Linux 和 MacOS 构建中:获取咱们编译所针对的 OpenCV 的可选 C 依靠项

  2. 查看存储库和子模块

    • OpenCV 作为子模块包括在内,而且在发布新的 OpenCV 版别时由保护人员手动更新版别
    • Contrib 模块也作为子模块包括在内
  3. 从源中查找 OpenCV 版别

  4. 构建 OpenCV

    • 测验被禁用,不然构建时刻会增加太多
    • 每个构建组合有 4 个构建矩阵条目:有和没有 contrib 模块,有和没有 GUI(无头)
    • Linux 构建在 manylinux Docker 容器中运转 (CentOS 5)
    • 源散布是构建矩阵中的独自条目
  5. 重新排列 OpenCV 的构建成果,增加咱们的自定义文件并生成 wheel

  6. Linux 和 macOS 的 wheel 是用 auditwheel 和 delocate 改造的,对应

  7. 装置生成的轮子

  8. 测验 Python 是否能够导入库并运转一些健全性查看

  9. 运用 twine 将生成的轮子上传到 PyPI(仅在发布版别中)

过程 1–4 由 处理pip wheel

能够运用环境变量自定义构建。除了 OpenCV 的构建接受的任何变量外,咱们还认识到:

  • CI_BUILD. 设置为1模拟 CI 环境构建行为。仅用于 CI 构建以在setup.py. 除非您知道自己在做什么,不然不要运用它。
  • ENABLE_CONTRIBENABLE_HEADLESS。设置为1构建 contrib 和/或无头版别
  • ENABLE_JAVA, 设置为1启用 Java 客户端构建。默许情况下禁用。
  • CMAKE_ARGS. OpenCV 的 CMake 调用的附加参数。您能够运用它来进行自定义构建。

有关在 CI 环境之外手动构建的更多信息,请参阅下一节。

手动构建

假如在预构建的轮子中未启用某些依靠项,您还能够在本地运转构建以创立自定义轮子。

  1. 克隆此存储库:git clone --recursive https://github.com/opencv/opencv-python.git
  2. cd opencv-python

    • 假如需求,您能够在和子模块git中查看其他版别的 OpenCVopencv``opencv_contrib
  3. 假如需求,增加自定义 Cmake 标志,例如:(export CMAKE_ARGS="-DSOME_FLAG=ON -DSOME_OTHER_FLAG=OFF"在 Windows 中,您需求依据指令行或 PowerShell 设置不同的环境变量)
  4. 挑选您希望构建的包风格ENABLE_CONTRIBENABLE_HEADLESS:即export ENABLE_CONTRIB=1假如您希望构建opencv-contrib-python
  5. 运转pip wheel . --verbose。留意:确保您具有最新pip版别,该指令将替换不支撑pip wheel的旧指令。 python setup.py bdist_wheel``pyproject.toml
    • 这或许需求 5 分钟到 2 个多小时不等,具体取决于您的硬件
  6. 您将在文件dist夹中具有 wheel 文件,您能够为所欲为地运用它
    • 可选:假如需求最大的可移植性,在 Linux 上运用一些manylinux图画作为构建主机,并auditwheel在构建后运转
    • 可选:在 macOS 上运用delocate(与 macOS 相同auditwheel)以取得更好的便携性

手动调试构建

为了构建opencv-python未优化的调试版别,您需求稍微避开正常进程。

  1. 装置软件包scikit-buildnumpy通过 pip。
  2. 运转指令python setup.py bdist_wheel --build-type=Debug
  3. 将生成的 wheel 文件装置dist/pip install dist/wheelname.whl.

假如您希望构建生成一切编译器指令,那么以下标志和环境变量的组合现已过测验可在 Linux 上运转:

export CMAKE_ARGS='-DCMAKE_VERBOSE_MAKEFILE=ON'
export VERBOSE=1
python3 setup.py bdist_wheel --build-type=Debug

有关更多讨论,请参阅此问题:https ://github.com/opencv/opencv-python/issues/424

来历散布

从 OpenCV 版别 4.3.0 开端,PyPI 中也供给了源代码分发。这意味着假如您的体系与 PyPI 中的任何轮子都不兼容,pip将测验从源代码构建 OpenCV。假如您需求 PyPI 中没有的 OpenCV 版别作为源代码分发,请遵从上面的手动构建指南而不是这个。

您还能够强制pip从源代码分发构建轮子。一些例子:

  • pip install --no-binary opencv-python opencv-python
  • pip install --no-binary :all: opencv-python

假如您需求 contrib 模块或无头版别,只需更改包称号(不需求上一节中的过程 4)。可是,能够通过环境变量供给任何额定的 CMake 标志,如手动构建部分的过程 3 中所述。假如未供给,OpenCV 的 CMake 脚本将测验查找并启用任何合适的依靠项。无头发行版具有硬编码的 CMake 标志,可禁用一切或许的 GUI 依靠项。

在 Raspberry Pi 等慢速体系上,完整构建或许需求几个小时。在 8 核 Ryzen 7 3700X 上,构建大约需求 6 分钟。

答应

Opencv-python 包(此存储库中的脚本)在 MIT 答应下可用。

OpenCV 自身在Apache 2答应下可用。

第三方包答应证坐落LICENSE-3RD-PARTY.txt。

一切轮子都顺便LGPLv2.1答应的FFmpeg。

非无头 Linux wheels 顺便Qt 5,依据LGPLv3取得答应。

这些包还包括其他二进制文件。能够从LICENSE-3RD-PARTY.txt找到完整的答应证列表。

版别控制

find_version.py脚本从 OpenCV 源查找版别信息,并将特定于此存储库的修订号附加到版别字符串。除了一些其他标志外,它还将版别信息保存到version.py文件中。cv2

发布

当新标签被推送到 master 分支时,发布并上传到 PyPI。这些标签区分包(这个 repo 或许有修改,但 OpenCV 版别保持不变)而且应该按顺序递增。实际上,发布版别号如下所示:

cv_major.cv_minor.cv_revision.package_revision例如3.1.0.0

master 分支遵从 OpenCV master 分支发布。3.4 分支遵从 OpenCV 3.4 过错修正版别。

开发构建

每次提交到这个 repo 的 master 分支都会被构建。或许的构建工件运用本地版别标识符:

cv_major.cv_minor.cv_revision+git_hash_of_this_repo例如3.1.0+14a8d39

这些工件不能也不会上传到 PyPI。

Manylinux 轮子

Linux 轮子是运用manylinux2014 构建的。这些轮子对于大多数发行版(运用 GNU C 标准库)应该开箱即用,因为它们是针对旧版别的 glibc 构建的。

默许manylinux2014图画已运用一些 OpenCV 依靠项进行了扩展。有关详细信息,请参阅Docker 文件夹。

支撑的 Python 版别

为官方支撑的 Python 版别(不在 EOL 中)供给了 Python 3.x 兼容的预构建轮子:

  • 3.6
  • 3.7
  • 3.8
  • 3.9
  • 3.10

向后兼容性

从 4.2.0 和 3.4.9 版别开端,macOS Travis 构建环境已更新为 XCode 9.4。这一变化实际上放弃了对 10.13 之前的 macOS 版别的支撑。

从 4.3.0 和 3.4.10 版别开端,Linux 构建环境从更新manylinux1manylinux2014. 这放弃了对旧 Linux 发行版的支撑。