本文正在参与「金石方案 . 分割6万现金大奖」
opencv-python 最新4.6.0.66版装置及介绍翻译
github.com/opencv/open…
项目描述
车轮上的 OpenCV
为 Python 预构建的仅 CPU 的 OpenCV 包。
假如您希望从源代码编译绑定以启用其他模块(例如 CUDA),请查看手动构建部分。
装置与运用
-
假如您装置了以前/其他手动装置(= 未通过装置
pip
)版别的 OpenCV(例如,Python 站点包根目录中的 cv2 模块),请在装置前将其删去以避免冲突。 -
确保您的
pip
版别是最新的(19.3 是支撑的最低版别)pip install --upgrade pip
:. 查看版别与pip -V
. 例如,Linux 发行版一般顺便非常旧的pip
版别,这会导致许多意想不到的问题,尤其是manylinux
格局问题。 -
为您的环境挑选正确的包:
有四种不同的套餐(请参阅下面的选项 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.imshow
et al.,你应该总是运用这些包。或许您正在运用 OpenCV 之外的其他包(例如 PyQt)来创立 GUI。- 选项 3 – 无头主模块包:
pip install opencv-python-headless
- 选项 4 – 无头完整包(包括首要模块和奉献/额定模块):(查看来自OpenCV 文档
pip install opencv-contrib-python-headless
的奉献/额定模块列表)
- 选项 1 – 首要模块包:
-
导入包:
import cv2
一切包都包括 Haar 级联文件。
cv2.data.haarcascades
能够用作数据文件夹的快捷方式。例如:cv2.CascadeClassifier(cv2.data.haarcascades + "haarcascade_frontalface_default.xml")
-
阅览OpenCV 文档
-
在翻开新问题之前,请阅览下面的常见问题解答并查看现已翻开的其他问题。
常常问的问题
问:我还需求独自装置 OpenCV 吗?
答:不,这些包是特殊的 wheel 二进制包,它们现已包括静态构建的 OpenCV 二进制文件。
问:Pip 装置失利并呈现ModuleNotFoundError: No module named 'skbuild'
?
从opencv-python
4.3.0.* 版别开端,manylinux1
wheels 被 wheels 替代了manylinux2014
。假如你的 pip 太旧,它会测验运用 4.3.0.38 中引入的新源分发来手动构建 OpenCV,因为它不知道如何装置manylinux2014
轮子。可是,source build 也会因为太旧而失利,pip
因为它不了解pyproject.toml
. 要运用新的manylinux2014
预制轮子(或从源代码构建),您的pip
版别必须 >= 19.3。请晋级pip
。pip 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-python
更cv2
简单用查找引擎找到包。cv2
(旧 OpenCV 版别中的旧接口被命名为cv
)是 OpenCV 开发人员在创立绑定生成器时挑选的称号。这被保存为导入称号,以与 Internet 上不同类型的教程保持一致。更改导入称号或行为也会让习惯于import cv2
.
opencv-python 文档
这个存储库的目的是供给为最常用的 Python 版别和平台打包每个新OpenCV 版别的办法。
CI构建进程
该项目的结构类似于带有标准setup.py
文件的一般 Python 包。构建矩阵中单个条目的构建进程如下(参见示例.github/workflows/build_wheels_linux.yml
文件):
-
在 Linux 和 MacOS 构建中:获取咱们编译所针对的 OpenCV 的可选 C 依靠项
-
查看存储库和子模块
- OpenCV 作为子模块包括在内,而且在发布新的 OpenCV 版别时由保护人员手动更新版别
- Contrib 模块也作为子模块包括在内
-
从源中查找 OpenCV 版别
-
构建 OpenCV
- 测验被禁用,不然构建时刻会增加太多
- 每个构建组合有 4 个构建矩阵条目:有和没有 contrib 模块,有和没有 GUI(无头)
- Linux 构建在 manylinux Docker 容器中运转 (CentOS 5)
- 源散布是构建矩阵中的独自条目
-
重新排列 OpenCV 的构建成果,增加咱们的自定义文件并生成 wheel
-
Linux 和 macOS 的 wheel 是用 auditwheel 和 delocate 改造的,对应
-
装置生成的轮子
-
测验 Python 是否能够导入库并运转一些健全性查看
-
运用 twine 将生成的轮子上传到 PyPI(仅在发布版别中)
过程 1–4 由 处理pip wheel
。
能够运用环境变量自定义构建。除了 OpenCV 的构建接受的任何变量外,咱们还认识到:
-
CI_BUILD
. 设置为1
模拟 CI 环境构建行为。仅用于 CI 构建以在setup.py
. 除非您知道自己在做什么,不然不要运用它。 -
ENABLE_CONTRIB
和ENABLE_HEADLESS
。设置为1
构建 contrib 和/或无头版别 -
ENABLE_JAVA
, 设置为1
启用 Java 客户端构建。默许情况下禁用。 -
CMAKE_ARGS
. OpenCV 的 CMake 调用的附加参数。您能够运用它来进行自定义构建。
有关在 CI 环境之外手动构建的更多信息,请参阅下一节。
手动构建
假如在预构建的轮子中未启用某些依靠项,您还能够在本地运转构建以创立自定义轮子。
- 克隆此存储库:
git clone --recursive https://github.com/opencv/opencv-python.git
-
cd opencv-python
- 假如需求,您能够在和子模块
git
中查看其他版别的 OpenCVopencv``opencv_contrib
- 假如需求,您能够在和子模块
- 假如需求,增加自定义 Cmake 标志,例如:(
export CMAKE_ARGS="-DSOME_FLAG=ON -DSOME_OTHER_FLAG=OFF"
在 Windows 中,您需求依据指令行或 PowerShell 设置不同的环境变量) - 挑选您希望构建的包风格
ENABLE_CONTRIB
和ENABLE_HEADLESS
:即export ENABLE_CONTRIB=1
假如您希望构建opencv-contrib-python
- 运转
pip wheel . --verbose
。留意:确保您具有最新pip
版别,该指令将替换不支撑pip wheel
的旧指令。python setup.py bdist_wheel``pyproject.toml
- 这或许需求 5 分钟到 2 个多小时不等,具体取决于您的硬件
- 您将在文件
dist
夹中具有 wheel 文件,您能够为所欲为地运用它- 可选:假如需求最大的可移植性,在 Linux 上运用一些
manylinux
图画作为构建主机,并auditwheel
在构建后运转 - 可选:在 macOS 上运用
delocate
(与 macOS 相同auditwheel
)以取得更好的便携性
- 可选:假如需求最大的可移植性,在 Linux 上运用一些
手动调试构建
为了构建opencv-python
未优化的调试版别,您需求稍微避开正常进程。
- 装置软件包
scikit-build
并numpy
通过 pip。 - 运转指令
python setup.py bdist_wheel --build-type=Debug
。 - 将生成的 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 构建环境从更新manylinux1
到manylinux2014
. 这放弃了对旧 Linux 发行版的支撑。