Jetson Nano

Jetson Nano 보드에 PiCamera 사용을 위한 CSI-Camera를 설치하자

coding art 2020. 5. 19. 13:13
728x90

파이선 코딩 초보자를 위한 텐서플로우∙OpenCV 머신 러닝 2차 개정판 발행

http://blog.daum.net/ejleep1/1175

 

파이선 코딩 초보자를 위한 텐서플로우∙OpenCV 머신 러닝 2차 개정판 하이퍼링크 목차 pdf 파일

본서는 10월 26일 교보문고 퍼플 POD 출판 신청하였습니다. 일정 기간 검토 후 출판 결정이 될 것이며 11월 초부터 주문 구입이 가능합니다. 참고로 책 목차에 따른 내용별 학습을 위한 코드는 이미

blog.daum.net

 

______________________________________________________________________________________________________________________________

 

CSI-Camera 드라이버는 다음 url 주소에서다운 받아 설치하도록 하자.
https://github.com/JetsonHacksNano/CSI-Camera

라즈베리 파이 전용인 PiCamera를 Jetson Nano에 설치하자. 설치 방법은 라브베리 파이와 거의 유사하며 사진에서처럼 납작한 플랫리본의 앞뒤를 잘 구별하여 설치하면 된다.

 

라즈베리 파이에서는 PiCamera 라이브러리를 설치하였지만 이와는 달리 Jetson Nano에서는 GStreamer 가 사용된다. 일단 CSI 커넥터 상에 카메라 설치가 완료되었으면 마우스 오른쪽 버튼으로 Open terminal을 열어서 다음의 GStreamer command line 명령을 실행해 보자. 이 명령은 CSI-Camera 설치 없이도 가능하다. flip-method = 0, 1, 2에 따라 화면 방향이 거꾸로, 측면으로, 바로 설정된다. 기본 해상도는 3820X24641초당 21 frame rate이며, 사용자가 화면에 볼 수 있는 화면 해상도는 width height 값에 의해 결정된다. Opencv 웹캠 기준으로 640X480 이면 충분하다.

 

다음의 텍스트형 명령 전문을 복사해서 활용하도록 하자.

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

 

그밖에 이미 CSI-CameraGithub url 주소에서 다운받아 압축을 해제하여 설치하였다면 별도의 pip install 작업 없이 simple_camera.py를 실행할 수 있을 것이다. 아울러 Haarcascade 라이브러리를 사용하는 face_detect.py도 실행 가능하다. 이와 같이 CSI-Camera 가 준비 되었으면 이어지는 다음 단계의 AI World를 설치 작업을 시작하도록 한다.

 

Jetson Nano 보드 Opencv 용 웹캠 설치

 

Jetson Nano 보드에서 Opencvcv2.VideoCapture() 명령을 사용해 보자. 다음과 같이 Jetson Nano 보드에 설치된 디바이스 즉 카메라들을 확인해 보자. 웹캠을 설치하기 전에 video0CSI-Camera 에 의한 PiCamera를 뜻한다. 웹캠 설치 후 추가된 video1이 바로 웹캠이다.

cv2.VideoCapture(1) 명령에 의해 이 웹캠을 구동이 가능하다. 하지만 PiCamera 에 해당하는 video0 의 경우 cv2.VideoCapture(0) 명령은 실행되지 않음에 유의하자. video0GStreamer 에 의해 묶여 있다고 보면 될 것이다.

다음의 파이선 코드를 사용하여 Jetson Nano 에서 웹캠 사용을 체크해보자.

 

#Webcam_opencv_01.py

 

import cv2

import numpy as np

import sys

#import time

 

cap = cv2.VideoCapture(1)

cap.set(cv2.CAP_PROP_FRAME_WIDTH,640)

cap.set(cv2.CAP_PROP_FRAME_HEIGHT,480)

fps = cap.get(cv2.CAP_PROP_FPS)

print("Frames per second using video.get(cv2.CAP_PROP_FPS)

: {0}".format(fps))

 

 

while True:

 

ret, image = cap.read()

image = cv2.GaussianBlur(image,(5,5), cv2.BORDER_DEFAULT)

hsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)

cv2.imshow('Image', image)

 

if cv2.waitKey(30) > 0:

break

 

cv2.destroyAllWindows()