转载请注明出处:https://www.codelast.com/

OS:Ubuntu 14.04 LTS

ELLtutorial中,有一个步骤是在PC上测试运行一个demo程序来检查ELL能否正常工作,当你选择CNTK model的时候,运行的就是 cntkDemo.py 这个demo程序。

这个demo程序调用了OpenCV来在GUI窗口中显示摄像头拍摄的实时视频,可能会跑不起来,并输出下面这样的错误:

OpenCV Error: Unspecified error (The function is not implemented. Rebuild the library with Windows, GTK+ 2.x or Carbon support. If you are on Ubuntu or Debian, install libgtk2.0-dev and pkg-config, then re-run cmake or configure script) in cvShowImage, file /feedstock_root/build_artefacts/opencv_1490907195496/work/opencv-3.2.0/modules/highgui/src/window.cpp, ...(后面还有很长的内容)

如果你的PC和我的一样老旧,那么执行 python cntkDemo.py 可能耗时非常长(你可以在一台老爷车上试一下),直到N分钟后才打印出上面的错误,然后程序挂掉,这使得我们解决这个问题非常不方便——每次都要等待超级长的时间,才知道自己的修改是否有效。
文章来源:https://www.codelast.com/
因此,为了能便于debug问题,我们先把和上面那个错误相关的关键代码段提取出来,单独放到一个源代码文件 z.py 中:

import numpy as np
import cv2
cam = cv2.VideoCapture(0)
while True:
ret, frame = cam.read()
cv2.imshow('test', frame)
if cv2.waitKey(1) & 0xFF == 27:
break

稍后,我们只需要执行 python z.py,不出错的话,就说明我们搞定了以上问题。
注意:这里的程序假设你的Ubuntu PC上至少连接了一个USB摄像头,cv2.VideoCapture(0)里的0就是指第一个摄像头,千万不要傻傻地在没有摄像头的情况下测试。
文章来源:https://www.codelast.com/

其实,打印出的错误信息已经告诉我们,如果你使用的是Ubuntu,需要安装 libgtk2.0-devpkg-config,然后rebuild软件。这里没有写清楚到底是rebuild OpenCV还是ELL,但我理解应该是指OpenCV。不过根据我的试验,把系统里的OpenCV卸载掉,并且把miniconda环境里的OpenCV也卸载掉,然后安装 libgtk2.0-dev 和 pkg-config,再按ELL doc的方法把miniconda环境里的OpenCV装上,并不能fix这个问题。
经过漫长的Google搜索,我最终找到了问题的原因:ELL文档中提供的安装opencv的方法有问题(至少在我的Ubuntu上如此):
conda install -c conda-forge opencv
这样安装上的OpenCV,在运行 cntkDemo.py 的时候就会出上面的错。
 
我在Stack Overflow上找到的一个解决方案是,你应该在conda环境下,用下面的方法来安装OpenCV:
conda install --channel loopbio --channel conda-forge --channel pkgw-forge gtk2 ffmpeg ffmpeg-feature gtk2-feature opencv
这样安装好了OpenCV之后,再运行 python z.py,你就会看到它神奇地解决了问题:马上弹出了一个图形窗口,里面显示的就是摄像头拍摄的实时视频。
当然,在安装之前,如果已经装错了另一个版本的OpenCV,需要先用 conda remove opencv 卸载掉。关于这个错误的详解可以看这个这个链接。
[原创] 解决ELL demo的 OpenCV Error: Unspecified error in cvShowImage 错误
Tagged on:             

发表评论

电子邮件地址不会被公开。 必填项已用*标注