VIM3 板子 OS08A10 摄像头

没有显示器应该也能用摄像头os08a10吧?现在问题是接上摄像头后查找不到os08a10摄像头的设备节点。用opencv程序测试,找不到摄像头。

接不接显示器和摄像头没关系。提供一下内核打印信息。

$ sudo dmesg > kernel.log

kernel.log发出来。

我这边也再次验证过固件VIM3_Ubuntu-gnome-focal_Linux-4.9_arm64_EMMC_V0.9-20200530不接显示器也是可以正常工作的。

我是使用gstreamer来录制视频,方法如下:

$ gst-launch-1.0 v4l2src name=vsrc device=/dev/video0 ! video/x-raw,width=1920,height=1080,framerate=60/1,format=RGB ! filesink location=//tmp/test.rgb

录制几秒之后按Ctrl+C中断程序,录制的视频保存在/tmp/test.rgb,然后把/tmp/test.rgb拷贝到PC上进行播放,命令如下:

$ ffplay -f rawvideo -pixel_format rgb24 -video_size 1920x1080 ~/work/share/test.rgb

我用自带的软件guvcview可以打开摄像头,但是opencv程序打不开摄像头,
报错 WARN:0] VIDEOIO(V4L2:/dev/video0): can’t open camera by index
查看摄像头信息如下:
root@Khadas:/home/khadas/projects/mipicamera# ls /dev/video*
/dev/video0 /dev/video11 /dev/video13
/dev/video10 /dev/video12 /dev/videosync
root@Khadas:/home/khadas/projects/mipicamera#
root@Khadas:/home/khadas/projects/mipicamera# v4l2-ctl -d /dev/video0 --all
Driver Info:
Driver name : ARM-camera-isp
Card type : juno R2
Bus info : platform:isp-v4l2-0
Driver version : 4.9.224
Capabilities : 0x85201000
Video Capture Multiplanar
Read/Write
Streaming
Extended Pix Format
Device Capabilities
Device Caps : 0x05201000
Video Capture Multiplanar
Read/Write
Streaming
Extended Pix Format
Priority: 2
Video input : 0 (camera: ok)
Format Video Capture Multiplanar:
Width/Height : 1280/720
Pixel Format : ‘RGB4’ (32-bit A/XRGB 8-8-8-8)
Field : None
Number of planes : 1
Flags :
Colorspace : sRGB
Transfer Function : Default
YCbCr/HSV Encoding: Default
Quantization : Default
Plane 0 :
Bytes per Line : 5120
Size Image : 3686400

User Controls

报错信息如下

opencv程序

import cv2

if __name__ == '__main__':

    val = True

    cap = cv2.VideoCapture(0)
    if  cap.isOpened()== False:
        print("摄像头异常!")
    else:
        print("摄像头已打开!")
    cap.set(cv2.CAP_PROP_FRAME_WIDTH, 1920)
    cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 1080)
    
    fourcc = cv2.VideoWriter_fourcc(*'XVID')

    out = cv2.VideoWriter("./test.avi", fourcc, 20.0, (640, 480), True)

    while val is True:
        ret, frame = cap.read()
        cv2.cvtColor(frame,cv2.COLOR_RGB2BGR)
        if frame is None:
            break
        else:
            out.write(frame)
           # cv2.imshow("video", frame)
            k = cv2.waitKey(1) & 0xFF
            if k == 27:
                break

    cap.release()
    out.release()

@pangy

我这边测试是正常的,同时我也测试了你的代码,也是正常的。

请问一下我的哪里有不一样的吗??,为什么我的出现oot@Khadas:/home/khadas/projects/mipicamera# python3 camera.py
[ WARN:0] VIDEOIO(V4L2:/dev/video0): can’t open camera by index
摄像头异常!
Traceback (most recent call last):
File “camera.py”, line 21, in
cv2.cvtColor(frame,cv2.COLOR_RGB2BGR)
cv2.error: OpenCV(3.4.13) /home/khadas/projects/opencv/sources/opencv-3.4.13/modules/imgproc/src/color.cpp:182: error: (-215:Assertion failed) !_src.empty() in function ‘cvtColor’

你的系统是UBUNTU 20.04 V0.9 版本的吗?

@pangy 我的是最新系统,你应该升级到最新的系统再试试

还一个问题是怎么调整整os08a10摄像头的分辨率到最小,帧率到最大,现在用桌面自带的软件帧率显示2fps

那是guvcview这个软件的问题,在Framebuffer下用v4L2_test命令测试是可以达到1080P 60帧的。

我换成最新的系统,用opencv的程序打开还是 [ WARN:0] VIDEOIO(V4L2:/dev/video0): can’t open camera by index ,程序退出,麻烦问下要改什么地方吗?

请问下你用opencv 程序打开摄像头用的哪个版本的opencv ?,是自己编译的还是用pip 直接安装的?

你用我们原始的系统,不做任何修改,也会报错?

用你们最新的系统,root@Khadas:/home/khadas/projects/mipicamera# uname -a
Linux Khadas 4.9.241 #20 SMP PREEMPT Thu May 20 18:06:42 CST 2021 aarch64 aarch64 aarch64 GNU/Linux
也总是报这个错
[ WARN:0] VIDEOIO(V4L2:/dev/video1): can’t open camera by index
查了video0信息,显示的是os08a10的信息:Driver Info:
Driver name : ARM-camera-isp
Card type : juno R2
Bus info : platform:isp-v4l2-0
Driver version : 4.9.241
Capabilities : 0x85201000
Video Capture Multiplanar

我试了网上的方法改成 cap = cv2.VideoCapture(-1)
还是一样

我换成自己的usb摄像头可以正常用程序打开

先定性问题,你完全按照我下面的操作再来做一遍,不做任何其他额外的修改。

1、重新烧录固件:https://dl.khadas.com/Firmware/VIM3/Ubuntu/EMMC/VIM3_Ubuntu-gnome-focal_Linux-4.9_arm64_EMMC_V1.0.6-210520.img.xz

2、烧录完后,移除所有USB摄像头,然后接上MIPI摄像头,在接上电源开机

3、开机后登陆系统,然后安装一些必要的依赖包,如numpy

$ sudo apt update
$ sudo apt-get install python3-numpy

4、使用我们的测试程序,如下:

import cv2 

if __name__ == '__main__':

    val = True

    cap = cv2.VideoCapture(0)
    cap.set(cv2.CAP_PROP_FRAME_WIDTH, 1920)
    cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 1080)

    fourcc = cv2.VideoWriter_fourcc(*'XVID')

    out = cv2.VideoWriter("./test.avi", fourcc, 20.0, (640, 480), True)

    while val is True:
        ret, frame = cap.read()
        cv2.cvtColor(frame,cv2.COLOR_RGB2BGR)
        if frame is None:
            break
        else:
            out.write(frame)
            cv2.imshow("video", frame)
            k = cv2.waitKey(1) & 0xFF
            if k == 27: 
                break

    cap.release()
    out.release()

5、运行

$ pthon3 test.py
1 Like

安照上面方法用程序成功打开摄像头。我之前是在板子安装了opencv的依赖,然后编译opencv3.4.13,安装了opencv3.14.3 。请问下官方自带的opencv3.4.3也是编译安装的吗?

如果是你自己编译的版本,那么你要自己去找下原因了。

请问一下os08a10的摄像头怎么做畸变校正,有这方面的文档吗?校正后可以当做无畸变镜头一样使用吗?

请问下怎么测试得到60帧的信息的,我使用IR-CUT关掉的情况,信息中没有fps打印,并且在几秒钟之后程序自己停止
v4l2_test -c 1 -p 0 -F 0 -f 0 -D 0 -R 1 -r 2 -d 2 -N 1000 -n 800 -w 0 -e 1 -I 0 -b /dev/fb0 -v /dev/video0