需要在龙芯上面使用opencv做一些图像处理,也不知道龙芯上面能不能正常驱动usb摄像头以及使用python的opencv库,这篇博文记录一下折腾经过以及心路历程。
最直接的想法是,如果要能正常使用,首先驱动要正常,其次,在python上的opencv库要装好,这样应该就行了。
先测试驱动,接上usb摄像头,输入dmesg
查看内核日志,发现
1 | [ 1218.094299] usb 1-3: USB disconnect, device number 2 |
也不知道有没有正常驱动,看这句Warning! Unlikely big volume range (=6144), cval->res is probably wrong.
有个警告,好像是有点问题?搜了一下,也没咋搞明白,不过用lsmod
看了一下啊,uvc相关驱动也加载了,/dev/video0和/dev/video1
设备文件也有了,应该是可以用的吧?
然后就是python相关的opencv包,apt install python3-opencv
,装好了,版本是3.2.0+dfsg-6
。
紧接着,去搜个python版本opencv的demo代码,
1 | import cv2 |
运行,果不其然,报错了。
1 | OpenCV Error: Assertion failed (size.width>0 && size.height>0) in imshow, file /build/opencv-WUBzAs/opencv-3.2.0+dfsg/modules/highgui/src/window.cpp, line 304 |
刚开始怀疑是版本问题,报错信息拿去搜,网上说确定不是版本问题,有说改cv2.VideoCapture(0)
括号里面的数字为1或者-1的,有说打开的图片或者视频路径不对的我这本来就不是打开图片或者视频,哪来路径一说,有说需要打开摄像头后延迟一段时间再读取的,有说重新加载驱动的,试过了都没用。
首先,摄像头肯定是好的,我尝试用cheese(linux下的一个相机软件)打开摄像头,提示找不到设备,但是用v4l2-ctl
程序是可以读取到摄像头的一些分辨率之类的信息,那按理来说应该是可以用的啊,我在一篇csdn里面看到有说cheese读不出来的话用luvcview
就行,但是龙芯软件仓库没有,好嘛,源码编译一个,去github找一下源码,装好依赖,就一个SDL2库就行。一运行
1 | luvcview version 0.2.1 |
权限不够?加个sudo看看,
1 | luvcview version 0.2.1 |
好嘛,还是不行,看来是root下缺少一些环境变量,不能运行。
再考虑一下luvcview的权限问题,考虑是当前用户没有权限访问/dev/video0
文件。
tips:有的摄像头接上会生成video0和video1,但只有一个可以正常读取。
ls -l /dev/video*
看看,好嘛,只有root可以访问,以及video
用户组里面的用户可以访问,那就把当前用户加入video
用户组就行了。执行sudo usermod -aG video loongson
,再输入id
,你会发现,你依旧没有加入video
用户组,logout
再重新登录一次就行了。
参考资料:
https://stackoverflow.com/questions/27953069/opencv-error-215size-width0-size-height0-in-function-imshow
https://www.wake-up-neo.com/zh/python/cv2videocaptureopen%EF%BC%88%EF%BC%89%E5%A7%8B%E7%BB%88%E8%BF%94%E5%9B%9Efalse/1045510561/
https://blog.csdn.net/qq_44596345/article/details/88390562