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) 프로그램에서의 사용
프로그램에서 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
녹색은 일반 카메라이고 검정색은 야간촬영용으로 NOIR 버전이므로 쥐의해서 구매해야 함
'각종 부품 사용방법 > 입력장치' 카테고리의 다른 글
ESP32-CAM Adapter보드 활용방법 (0) | 2022.02.10 |
---|---|
심박센서의 원리와 사용방법 (0) | 2021.05.02 |
라즈베리파이 카메라 사양과 사용방법 (1) | 2021.01.30 |
MPU6050 모션센서를 프로세싱으로 시뮬레이션해 보기 (0) | 2021.01.18 |
MPU6050 6축 모션센서 사용방법(GY-521) (0) | 2021.01.16 |