4.1 RK3399项目开发实录-案例开发之MIPI 摄像头开发(wulianjishu666)

2024-03-27 1266阅读

温馨提示:这篇文章已超过417天没有更新,请注意相关的内容是否还可用!

嵌入式从零到项目开发全套例程资料

链接:https://pan.baidu.com/s/1ksCQN__jD8ZrJhw8sWzhwQ?pwd=vvfz

3.2. MIPI 摄像头

带有 MIPI CSI 接口的 RK3399 板子都添加了双 MIPI 摄像头 OV13850 的支持,应用中也添加了摄像头的例子。下面介绍一下相关配置。

3.2.1. 设备树文件配置

以 rk3399-firefly-aiojd4.dts 为例,这些都是摄像头需要打开的配置。由于内核已经添加了双 MIPI 摄像头的支持,所以这里配置了两个摄像头,如果只使用一个摄像只需要打开其中一个摄像头就可以了。

//电源管理
&vcc_mipi {
        status = "okay";
};
&dvdd_1v2 {
        status = "okay";
};
//MIPI 摄像头1
&ov13850 {
        status = "okay";
};
&rkisp1_0 {
        status = "okay";
};
&mipi_dphy_rx0 {
        status = "okay";
};
&isp0_mmu {
        status = "okay";
};
//MIPI 摄像头2
&ov13850_1 {
        status = "okay";
};
&rkisp1_1 {
        status = "okay";
};
&mipi_dphy_tx1rx1 {
        status = "okay";
};
&isp1_mmu {
        status = "okay";
};

注意: 如果使用的是 core-3399 核心板加上 DIY 底板,可能需要修改相应的 GPIO 属性。

3.2.2. 调试

在运行脚本之前先确认一下 OV13850 设备是否注册成功,下面是成功的内核日志:

root@firefly:~# dmesg | grep ov13850
//MIPI 摄像头1
[    1.276762] ov13850 1-0036: GPIO lookup for consumer reset
[    1.276771] ov13850 1-0036: using device tree for GPIO lookup
[    1.276803] of_get_named_gpiod_flags: parsed 'reset-gpios' property of node '/i2c@ff110000/ov13850@36[0]' - status (0)
[    1.276855] ov13850 1-0036: Looking up avdd-supply from device tree
[    1.277034] ov13850 1-0036: Looking up dovdd-supply from device tree
[    1.277170] ov13850 1-0036: Looking up dvdd-supply from device tree
[    1.277535] ov13850 1-0036: GPIO lookup for consumer pwdn
[    1.277544] ov13850 1-0036: using device tree for GPIO lookup
[    1.277575] of_get_named_gpiod_flags: parsed 'pwdn-gpios' property of node '/i2c@ff110000/ov13850@36[0]' - status (0)
[    1.281862] ov13850 1-0036: Detected OV00d850 sensor, REVISION 0xb2
//MIPI 摄像头2
[    1.284442] ov13850 1-0046: GPIO lookup for consumer pwdn
[    1.284461] ov13850 1-0046: using device tree for GPIO lookup
[    1.284523] of_get_named_gpiod_flags: parsed 'pwdn-gpios' property of node '/i2c@ff110000/ov13850@46[0]' - status (0)
[    1.288235] ov13850 1-0046: Detected OV00d850 sensor, REVISION 0xb2

在 /dev 下应该生成相关设备文件:

root@firefly:~# ls /dev/video
//MIPI 摄像头1
video0  video1  video2  video3
//MIPI 摄像头2
video4  video5  video6  video7

注意: 同理,如果只使用一个摄像头,只需要注册一个摄像头设备就可以了。

3.2.3. 测试预览摄像头

3.2.3.1. v4l2

使用v4l2方式预览摄像头:

apt-get install -y git libopencv-dev cmake libdrm-dev g++ librga-dev
git clone https://github.com/T-Firefly/rkisp-v4l2.git
cd rkisp-v4l2/rkisp_demo/
cmake ./
make
sudo -u firefly DISPLAY=:0 ./rkisp_demo -c 300 -d /dev/video0 -w 640 -h 480
or
sudo -u firefly DISPLAY=:0 ./rkisp_demo -c 300 -d /dev/video5 -w 640 -h 480
3.2.3.2. gstreamer

使用gstreamer方式预览摄像头:

gst-launch-1.0 v4l2src device=/dev/video0 ! video/x-raw,format=NV12,width=640,height=480, framerate=30/1 ! videoconvert ! kmssink &

运行脚本即可,结果如图所示:

4.1 RK3399项目开发实录-案例开发之MIPI 摄像头开发(wulianjishu666)

3.2.4. 开发MIPI 摄像头

3.2.4.1. FFMPEG读取MIPI摄像头
  • 使用v4l2loopback和FFMPEG多路投影

    apt-get install -y git libopencv-dev cmake libdrm-dev g++ librga-dev python-dev
    git clone https://github.com/umlaeute/v4l2loopback.git
    cd v4l2loopback/
    #参考 《安装linux-headers和linux-image》
    make install
    ...
    //使用v4l2loopback创建 video10、video11和video12设备
    sudo insmod v4l2loopback.ko videonr=10,11,12
    #打开读取video0设备,并把图像信息写入到video10中
    sudo -u firefly DISPLAY=:0  ./rkisp_demo -c 300  -d /dev/video0 -w 640  -h 480 -D /dev/video10
    // 使用ffmpeg拷贝功能将video10中的内容,拷贝到video11和video12设备中
    ffmpeg -loglevel quiet -f v4l2 -video_size 640x480 -r 10 -i /dev/video10 -preset fast -codec copy -f v4l2 /dev/video11 -preset fast -codec copy -f v4l2 /dev/video12
    // 另起一个终端,使用ffplay工具任意预览video11或video12
    ffplay -i /dev/video11
    
    3.2.4.2. OpenCV读取MIPI摄像头

    MIPI摄像头是不支持OpenCV中 capture.open(index) 方式读取的,在此提供2中读取摄像头的方法:

    这种方式推荐OpenCV的C++版本使用,详细使用参考前面的v4l2预览一节。v4l2_simple_demo是rkisp_demo.cpp的精简版本,详细可参考rkisp_demo.cpp。

    • C++

      推荐OpenCV的C++版本使用,详细使用参考前面的v4l2预览一节。v4l2_simple_demo是rkisp_demo.cpp的精简版本,详细可参考rkisp_demo.cpp。

      参考:
      https://github.com/T-Firefly/rkisp-v4l2.git
      git clone https://github.com/T-Firefly/rkisp-v4l2.git
      cd rkisp-v4l2/mipi_video_demo/v4l2_simple_demo
      make
      # open /dev/video0
      sudo -u firefly DISPLAY=:0 ./opencv
      
    • Python

      使用 OpenCV-Python 方式读取 MIPI 摄像头需要添加Gstreamer支持,并需要重现编译安装OpenCV。参考《OpenCV 编译和安装》

      git clone https://gitlab.com/firefly-linux/test_code/rkisp-v4l2.git
      cd mipi_video_demo/OpenCV_Python
      # Please read rkisp-v4l2/mipi_video_demo/OpenCV_Python/README.md carefully.
      python3 opencv_gst_test.py
VPS购买请点击我

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

目录[+]