错误: (-2:Unspecified error) 函数未实现。使用 Windows、GTK+ 2.x 或 Cocoa 支持重建库

Kar*_*an 6 python opencv machine-learning computer-vision tensorflow

我正在 jupyter notebook 上进行手语检测项目。在运行实时检测代码时,我遇到了如下所示的错误:

OpenCV(4.5.1) C:\Users\appveyor\AppData\Local\Temp\1\pip-req-build-1drr4hl0\opencv\modules\highgui\src\window.cpp:651: 错误: (-2:Unspecified错误)该功能未实现。使用 Windows、GTK+ 2.x 或 Cocoa 支持重建库。如果您使用的是 Ubuntu 或 Debian,请安装 libgtk2.0-dev 和 pkg-config,然后重新运行 cmake 或在函数 'cvShowImage' 中配置脚本

尽管尝试了我在网上找到的许多解决方案,但我仍然遇到相同的错误。

遇到错误的代码是:while True: ret, frame = cap.read() image_np = np.array(frame)

input_tensor = tf.convert_to_tensor(np.expand_dims(image_np, 0), dtype=tf.float32)
detections = detect_fn(input_tensor)

num_detections = int(detections.pop('num_detections'))
detections = {key: value[0, :num_detections].numpy()
              for key, value in detections.items()}
detections['num_detections'] = num_detections

# detection_classes should be ints.
detections['detection_classes'] = detections['detection_classes'].astype(np.int64)

label_id_offset = 1
image_np_with_detections = image_np.copy()

viz_utils.visualize_boxes_and_labels_on_image_array(
            image_np_with_detections,
            detections['detection_boxes'],
            detections['detection_classes']+label_id_offset,
            detections['detection_scores'],
            category_index,
            use_normalized_coordinates=True,
            max_boxes_to_draw=5,
            min_score_thresh=.5,
            agnostic_mode=False)

cv2.imshow('object detection',  cv2.resize(image_np_with_detections, (800, 600)))

if cv2.waitKey(1) & 0xFF == ord('q'):
    cap.release()
    break
Run Code Online (Sandbox Code Playgroud)

请帮我!

Sac*_*han 60

我在 Karthik Thilakan 第一个答案的评论下看到了这个解决方案:

pip uninstall opencv-python-headless -y 

pip install opencv-python --upgrade
Run Code Online (Sandbox Code Playgroud)

这在 conda 环境中对我有用。


gre*_*245 12

我在 Windows 10 上使用 yolov5 遇到了完全相同的错误。通过键入重建库

pip uninstall opencv-python 
Run Code Online (Sandbox Code Playgroud)

然后

pip install opencv-python
Run Code Online (Sandbox Code Playgroud)

为我工作。

  • 卸载+安装不会“重建库”。它*重新安装*该软件包。真正的问题是 opencv 的多个包之间的冲突,其中一个可能是无头包。 (3认同)
  • 谢谢,我上周解决了这个问题。正如您提到的,我尝试使用以下命令重新安装 OpenCV `pip uninstall opencv-python-headless -y` `pip install opencv-python --upgrade` (2认同)

jsf*_*a11 8

我安装了另一个 GPU,并最终在本周升级到 Tensorflow 2,突然,出现了同样的问题。我终于发现了我的错误以及为什么卸载并重新安装 opencv 对某些人有效。该问题在 opencv-python dist-packages 中名为 METADATA 的文本文件中明确说明。

它指出;

有四种不同的软件包(请参阅下面的选项 1、2、3 和 4),您应该仅选择其中之一。不要在同一环境中安装多个不同的软件包。

此外,该文件还指出;

如果您不使用cv2.imshow等,则应该始终使用这些软件包。或者您正在使用 OpenCV 之外的其他软件包(例如 PyQt)来创建 GUI。

指的是

用于服务器(无头)环境的软件包...(没有)GUI 库依赖项

所以,如果你跑步;

pip list | grep opencv
Run Code Online (Sandbox Code Playgroud)

结果是不止一个 opencv 版本,你可能已经找到了你的问题。虽然卸载并重新安装 opencv 可能会解决您的问题,但更巧妙的解决方案是简单地卸载无头版本,因为它不关心 GUI,因为它应该在服务器环境中使用。

  • 当我升级 Tensorflow 时,就击中了他。pip uninstall opencv-python-headless 修复了它。Ubuntu 20.04、Python 3.8、Opencv 4.5.4 (2认同)

Ric*_*rdo 6

几周前我遇到了同样的问题,我想补充一些涉及房间里无头大象的答案。

我的复杂项目包含其他同事的一些内部子项目。这些往往是独立开发和测试的,因此不会发生交叉污染。然而,由于其中一个使用了opencv-python,另一个使用了opencv-python-headless,所以最终版本安装了两者。

这就是问题!

每当我同时拥有这两种功能时,许多功能,尤其是与可视化相关的功能,现在都会失败。更糟糕的是:pip list显示安装了两个opencv-版本!更糟糕的是,每当我卸载并再次安装时opencv-python(一个简单的方法--upgrade从未起作用,因为它声称有最新版本并且不需要升级),然后它就开始工作。我们都讨厌巫术,所以...

我深入编译兔子洞,显然没有发现什么好东西。

怎么pip知道呢?

如果您检查您的.venv\Lib\site-packages,您会发现以下两个文件夹:

  • opencv_python-4.5.4.60.dist-info
  • opencv_python-headless-4.5.4.60.dist-info

或者无论你的版本是什么。这些是从中获取元数据的文件夹pip,但不是实际代码所在的文件夹。事实上,你不是做import opencv-...,而是做import cv2

在这两种情况下你都会这样做import cv2事实上,-headless这是真实事物的一个残缺的插入。因此,如果您在列表中查找,您会找到一个cv2文件夹。两个库都将其代码存放在该文件夹中。众所周知,在保存文件方面,最后到场的人获胜。

命令!命令!

(好吧,我想念约翰·伯考。)

现在,两个库都保存到同一个文件夹中,顺序是什么?由于它们不相互依赖,并且在我的情况下,poetry使用 来管理依赖关系,因此默认按字母顺序排列,并且 (drumroll)-headless排在最后。

解决方案

在某个时候,我决定发疯并-headless完全删除。我不是团队中的简历开发人员,所以我只是抓住救命稻草,但是......它起作用了!就在那时我仔细研究了整个插入的事情。

我的同事正在使用一个简单的requirements.txt文件进行开发,因此当需要在一个合适的pyproject.toml文件中收集需求时,我只是忽略了该-headless选项。

底线

你不能两者兼得。每当您有多个部分的项目时,我强烈建议在构建环境后运行pip list并检查这对夫妇。如果您发现两者,请始终删除-headless,因为它是主项的子集。

Achtung:检查您的.venv\pyvenv.cfg线路:

  • include-system-site-packages = true

此行意味着您的项目将从全局 Python 安装中导入任何库(标准库除外),如果您碰巧-headless在全局环境中拥有这些库,那么您仍然会遇到麻烦。


小智 5

当我编写类似的程序时,我遇到了同样的问题,但问题出在不同版本的 opencv 软件包上。

您可以使用以下命令检查它们:

pip list | grep opencv
Run Code Online (Sandbox Code Playgroud)

我的输出是:

opencv-contrib-python 4.5.5.62

opencv-python 4.5.5.62

opencv-python-无头 4.5.4.60

结果发现opencv-python-headless必须是4.5.4版本才能使程序正常运行。所以解决方案是将opencv-python版本更改为与opencv-python-headless相同。所以在这种情况下你可以运行:

pip install opencv-python==4.5.4.60
Run Code Online (Sandbox Code Playgroud)

为我工作。