Jetson Nano Board 적용예제
Jetson Nano에서 OpenCV를 활용한 다양한 예제 프로그램을 소개합니다. 아래는 Jetson Nano에서 실행 가능한 간단한 프로그램 예제입니다.
1. 카메라 캡처 및 디스플레이
Jetson Nano의 CSI 카메라 또는 USB 카메라로 영상을 실시간으로 캡처하고 디스플레이하는 프로그램입니다.
코드:
import cv2
def main():
cap = cv2.VideoCapture(0) # 카메라 인덱스 (CSI 카메라 사용 시: 0)
if not cap.isOpened():
print("카메라를 열 수 없습니다.")
return
while True:
ret, frame = cap.read()
if not ret:
print("프레임을 읽을 수 없습니다.")
break
cv2.imshow("Camera Feed", frame)
# 'q'를 누르면 종료
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
if __name__ == "__main__":
main()
2. 얼굴 인식
Haarcascade를 사용하여 Jetson Nano에서 카메라 입력으로 얼굴을 감지하는 예제입니다.
코드:
import cv2
def main():
face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + "haarcascade_frontalface_default.xml")
cap = cv2.VideoCapture(0)
if not cap.isOpened():
print("카메라를 열 수 없습니다.")
return
while True:
ret, frame = cap.read()
if not ret:
print("프레임을 읽을 수 없습니다.")
break
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) # 그레이스케일 변환
faces = face_cascade.detectMultiScale(gray, 1.3, 5) # 얼굴 탐지
for (x, y, w, h) in faces:
cv2.rectangle(frame, (x, y), (x+w, y+h), (255, 0, 0), 2)
cv2.imshow("Face Detection", frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
if __name__ == "__main__":
main()
3. 객체 추적 (HSV 색상 기반)
HSV 색상 공간을 사용하여 특정 색상의 객체를 추적합니다.
코드:
import cv2
import numpy as np
def main():
cap = cv2.VideoCapture(0)
if not cap.isOpened():
print("카메라를 열 수 없습니다.")
return
while True:
ret, frame = cap.read()
if not ret:
print("프레임을 읽을 수 없습니다.")
break
hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
# 빨간색 범위 정의
lower_red = np.array([0, 120, 70])
upper_red = np.array([10, 255, 255])
mask = cv2.inRange(hsv, lower_red, upper_red)
# 마스크를 원본 영상에 적용
result = cv2.bitwise_and(frame, frame, mask=mask)
cv2.imshow("Original Frame", frame)
cv2.imshow("Tracked Object", result)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
if __name__ == "__main__":
main()
4. 엣지 검출
Canny 엣지 검출기를 사용하여 이미지의 가장자리만 표시하는 예제입니다.
코드:
import cv2
def main():
image = cv2.imread("sample.jpg", cv2.IMREAD_GRAYSCALE)
if image is None:
print("이미지를 로드할 수 없습니다.")
return
edges = cv2.Canny(image, 100, 200)
cv2.imshow("Original Image", image)
cv2.imshow("Edge Detection", edges)
cv2.waitKey(0)
cv2.destroyAllWindows()
if __name__ == "__main__":
main()
5. 모션 감지
프레임 간 차이를 계산하여 움직임을 감지하는 프로그램입니다.
코드:
import cv2
def main():
cap = cv2.VideoCapture(0)
if not cap.isOpened():
print("카메라를 열 수 없습니다.")
return
ret, frame1 = cap.read()
ret, frame2 = cap.read()
while ret:
diff = cv2.absdiff(frame1, frame2)
gray = cv2.cvtColor(diff, cv2.COLOR_BGR2GRAY)
blur = cv2.GaussianBlur(gray, (5, 5), 0)
_, thresh = cv2.threshold(blur, 20, 255, cv2.THRESH_BINARY)
dilated = cv2.dilate(thresh, None, iterations=3)
contours, _ = cv2.findContours(dilated, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
for contour in contours:
if cv2.contourArea(contour) < 500:
continue
x, y, w, h = cv2.boundingRect(contour)
cv2.rectangle(frame1, (x, y), (x + w, y + h), (0, 255, 0), 2)
cv2.imshow("Motion Detection", frame1)
frame1 = frame2
ret, frame2 = cap.read()
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
if __name__ == "__main__":
main()
추가 팁
- Jetson Nano에서 OpenCV 성능을 최적화하려면 CUDA를 활성화하고 GPU 가속을 활용해야 합니다.
- 설치된 OpenCV가 CUDA를 지원하는지 확인하려면 아래 명령을 실행하세요:
import cv2 print(cv2.getBuildInformation())
이 코드를 Jetson Nano에서 실행합니다. 😊