1. 젯슨나노용 카메라 

 

   젯슨 나노 등 Jetson 시리즈는 USB방식의 카메라 이외에도  MIPI-CSI (Mobile Industry Processor Interface - Camera Serial Interface)방식의 고속 카메라연결장치가 내장되어 있는데 이는 라즈베리파이 방식과 동일한 방식이다. 따라서 라즈베리파이용 카메라를 젯슨 나노에 연결해서 사용할 수 있다. 단 라즈베리파이 카메라 Ver 1.X는 안되고 IMX219칩을 사용한 Ver 2 만 사용 가능하고 사용방법도 다르다. 

 

2. 카메라 연결 

 

다음과 같이 라즈베리파이 카메라 V2 카메라를 Jetson Nano 카메라 슬롯에 연결한다.  

 

 

  주의사항 : Jetson Nano의 카메라 슬롯은 매우 약하게 제작되어 있어,

조금만 힘을 주어도 연결부위가 부러져 버려 난감해 지니 조심조심 해야 한다. 

 

3. 젯슨나노에서의  CSI 카메라의 사용 

 

    젯슨나노에서의  CSI 카메라의 사용을 위한 기본 프로그램은 nvarguscamerasrc라는 프로그램인데 이를 GStreamer 방식으로 pipeline을 생성하여 사용하거나  nvgstcapture라는 유틸리티 프로그램을 사용하여 작동시키는 방법을 사용한다.  GStreamer pipeline방식은 주로 프로그램에서 카메라를 제어할 때 사용하고,  nvgstcapture유틸리티프로그램은 키보드 명령어로 카메라를 제어 하면서 촬영하고자 할 때 사용한다.

 

4. Gstreamer를 이용한 방식 

    1) 단순 Preview : 터미널 창에서 다음 명령어로 Gstreamer pipeline을 구성하면 촬영 Preview를 볼 수 있다.

 

        $ gst-launch-1.0 nvarguscamerasrc ! nvoverlaysink

 

    2) 촬영 OPtion의 지정  :  Option을 지정하면서 촬영하려면 다음과 같이 복잡한 명령어 pipeline을 구성해야 한다.

 

        $ 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=0 ! 'video/x-raw,width=960, height=616' ! nvvidconv ! nvegltransform ! nveglglessink -e

 

여기에서 각각의 촬영 option을 지정하는 방식은 다음과 같다 

 

      . sensor_mode=0 : 신형 젯슨나노 보드( B01모델) 일 경우 카메라 슬롯이 두개이기 때문에 두번번째 카메라를 지정하려면 sensor_mode=1로 지정해 주어야 한다    

 

      . width=3820, height=2464 : 촬영할 해상도 

      . framerate=21/1 : 촬영 Framerate 21 fps로 촬영 

 

      촬영할 수 있는 해상도별 framerate 

촬영해상도  Framerate 
3280x2464 21 fps
3280x1848 28 fps
920x1080 30 fps
1280x720 60 fps

     . flip-method=0 : 카메라 촬영 방향을 지정하는 옵션인데 통상적인 라즈베리파이의 방식과는 다르게 표시된다. 

 

           (0): none             - Identity (no rotation)
           (1): counterclockwise - Rotate counter-clockwise 90 degrees
           (2): rotate-180       - Rotate 180 degrees
           (3): clockwise        - Rotate clockwise 90 degrees
           (4): horizontal-flip  - Flip horizontally
           (5): upper-right-diagonal - Flip across upper right/lower left diagonal
           (6): vertical-flip    - Flip vertically
           (7): upper-left-diagonal - Flip across upper left/low

 

     . 'video/x-raw,width=960, height=616' : preview 하거나 저장할 영상의 size

 

      3) 프로그램에서의 사용 

 

 

 

JetsonHacksNano/CSI-Camera

Simple example of using a CSI-Camera (like the Raspberry Pi Version 2 camera) with the NVIDIA Jetson Nano Developer Kit - JetsonHacksNano/CSI-Camera

github.com

     프로그램에서 CSI 카메라를 GSteamer방식으로 사용하는 방법들은 위 사이트에 접속해서 찾아볼 수 있는데,  python 프로그램으로 카메라를 구동하는 sample은 다음과 같다.      

# MIT License
# Copyright (c) 2019 JetsonHacks
# See license
# Using a CSI camera (such as the Raspberry Pi Version 2) connected to a
# NVIDIA Jetson Nano Developer Kit using OpenCV
# Drivers for the camera and OpenCV are included in the base image

import cv2

# gstreamer_pipeline returns a GStreamer pipeline for capturing from the CSI camera
# Defaults to 1280x720 @ 60fps
# Flip the image by setting the flip_method (most common values: 0 and 2)
# display_width and display_height determine the size of the window on the screen


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,
        )
    )


def show_camera():
    # To flip the image, modify the flip_method parameter (0 and 2 are the most common)
    print(gstreamer_pipeline(flip_method=0))
    cap = cv2.VideoCapture(gstreamer_pipeline(flip_method=0), 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()

 

구매좌표 : s.click.aliexpress.com/e/_9xmsb1

 

28.99US $ |Original Raspberry Pi Camera Module V2 PiNoIR Camera Module V2 IMX219 8MP Sensor THSER101 CABLE EXTENDER FOR RASPBERR

Smarter Shopping, Better Living! Aliexpress.com

www.aliexpress.com

녹색은 일반 카메라이고 검정색은 야간촬영용으로 NOIR 버전이므로 쥐의해서 구매해야 함  

+ Recent posts