使用Jetson Xavier NX 打开树莓派摄像头

使用Jetson Xavier NX 打开树莓派摄像头Pi cam

Nvidia推出的Jetson系列是将现代AI计算能力与嵌入式系统完美结合的产品,虽然只是体积很小的arm架构的开发板,却有着跟PC一样的CUDA内核,因此可以通用我们在PC上开发的深度学习算法。除了老旧的TX 1,这个系列所有的产品我都使用过,其中我最喜欢的是2020年推出的Xavier NX。NX不但有8G的内存加显存(内存显存共用),很好的计算能力,而且尺寸跟小巧的nano一样大小,大概两张信用卡的大小,而且跟nano是插卡式的,我们可以很方便的复刻和修复系统。

提到了Jetson系列,就不得不提及同时代的另一款arm架构嵌入式明星产品,Raspberry Pi,树莓派。树莓派2012年首次推出,以其丰富的接口,低廉的价格,图形化的操作系统立刻在电子发烧友中收获大量拥趸。从名字就可以看出来,我要跟大家介绍的Pi cam,就是来自树莓派系的一个配件。这里Pi cam指的是第二代Pi cam,不过我相信你也很难买到一代了。
在这里插入图片描述

跟最新的nano一样,NX 有两个可以连接Pi cam的接口,小心的打开接口将Pi cam的排线塞进去,然后再小心的关上,接口很脆弱,手劲大的朋友可一定要小心,不然就像我一样,弄坏了接口。

在这里插入图片描述
打开卡槽

在这里插入图片描述

安装好了pi cam我们就要开始重头戏了。

我们先用gstreamer命令来测试一下。

$ gst-launch-1.0 nvarguscamerasrc ! nvoverlaysink

新款的nano和NX都有两个CSI槽,我们可以用命令指定使用哪个。

$ nvarguscamerasrc sensor_mode=0

要是想要更复杂的控制可以参考下面的代码:

$ gst-launch-1.0 nvarguscamerasrc sensor_mode=0 ! 'video/x-raw(memory:NVMM),width=3820, height=2464, framerate=21/1, format=NV12' ! nvvidconv flip-method=2 ! 'video/x-raw,width=960, height=616' ! nvvidconv ! nvegltransform ! nveglglessink -e

这段代码的意思是打开一个像素为3820x2464,帧率是21,在960x616大小的窗口显示。如果值想反转图片可以修改‘flip-method’ 的值,这个值通常都设置成0或2。因为我没有装带摄像头夹具的外壳,所以我喜欢设置flip_method=2。🙃

现在我们来写一个python代码来打开rpi cam。我们新建一个文件叫open_picam.py,并添加以下代码:

import cv2

def gstreamer_pipeline(
    capture_width=1280,
    capture_height=720,
    display_width=1280,
    display_height=720,
    framerate=60,
    flip_method=0,
):
    return (
        "nvarguscamerasrc ! "
        "video/x-raw(memory:NVMM), "
        "width=(int)%d, height=(int)%d, "
        "format=(string)NV12, framerate=(fraction)%d/1 ! "
        "nvvidconv flip-method=%d ! "
        "video/x-raw, width=(int)%d, height=(int)%d, format=(string)BGRx ! "
        "videoconvert ! "
        "video/x-raw, format=(string)BGR ! appsink"
        % (
            capture_width,
            capture_height,
            framerate,
            flip_method,
            display_width,
            display_height,
        )
    )

在这里插入图片描述

这段代码用python打开了一个gstreamer。

def show_camera():
    # To flip the image, modify the flip_method parameter (0 and 2 are the most common)
    print(gstreamer_pipeline(flip_method=2))
    cap = cv2.VideoCapture(gstreamer_pipeline(flip_method=2), cv2.CAP_GSTREAMER)
    if cap.isOpened():
        window_handle = cv2.namedWindow("CSI Camera", cv2.WINDOW_AUTOSIZE)
        # Window
        while cv2.getWindowProperty("CSI Camera", 0) >= 0:
            ret_val, img = cap.read()
            cv2.imshow("CSI Camera", img)
            # This also acts as
            keyCode = cv2.waitKey(30) & 0xFF
            # Stop the program on the ESC key
            if keyCode == 27:
                break
        cap.release()
        cv2.destroyAllWindows()
    else:
        print("Unable to open camera")


if __name__ == "__main__":
    show_camera()

下面的代码就跟打开网络摄像头很类似了。

在这里插入图片描述

这画质真的感人啊…🙄我一度怀疑是不是买到了假货…🤔

在这里插入图片描述

可能是官方也意识到了这一点,新推出了C口的高质量摄像头。

谢谢朋友们的观看,我要去做早饭了👨‍🍳

  • 1
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值