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)
为我工作。
我安装了另一个 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,因为它应该在服务器环境中使用。
几周前我遇到了同样的问题,我想补充一些涉及房间里无头大象的答案。
我的复杂项目包含其他同事的一些内部子项目。这些往往是独立开发和测试的,因此不会发生交叉污染。然而,由于其中一个使用了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)
为我工作。
归档时间: |
|
查看次数: |
6105 次 |
最近记录: |