FaceDetection
2024. 6. 20. 11:50ㆍJetson
✅ Face Detection
- Face Tracking 진행 예정!
✅ 1. 카메라 인스턴스 생성
from jetbot import Camera # 카메라 관련 라이브러리
from jetbot import bgr8_to_jpeg # bgr type -> jpeg 변환
camera = Camera.instance(width = 720, height = 720)
# 오류?
# 1) 왼쪽 정지버튼 -> 전체 커널 셧다운
# 2) 커널 restart
# 3) 재부팅
# 4) 카메라 접촉 불량 ...
✅ 2. 카메라 프리뷰 생성
import ipywidgets.widgets as widgets #파이썬에서 위젯을 활용할 수 있는 라이브러리
from IPython.display import display #실제 이미지를 display할 수 있는 라이브러리
detect_face = widgets.Image(width = 300, height = 300, format = 'jpeg') # 인식될 공간
display(detect_face)
# 카메라 테스트
while 1:
detect_face.value = bgr8_to_jpeg(camera.value) # 카메라 값을 변환시킨다
✅ FaceTracking
✅ 학습된 모델을 가져오자!!
sudo apt-get install curl
# curl 명령어 통해서 링크로 학습된 데이터 가져오기!
# 터미널창 sudo apt-get install curl
!curl -L -O https://github.com/opencv/opencv/raw/master/data/haarcascades/haarcascade_frontalface_default.xml
import cv2
face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
face_x = face_y = face_w = face_h = 0 # 얼굴을 표시할 좌표를 0으로 초기화
while 1:
frame = camera.value
cv2.resize(frame, (300, 300)) # 학습된 데이터의 이미지가 300*300 픽셀
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) # 흑백으로 변경
faces = face_cascade.detectMultiScale(gray) # 흑백 이미지 내에서 얼굴 검출
if len(faces) > 0 : # 만약 검출된게 있다면
(face_x, face_y, face_w, face_h) = faces[0] # 사진에 좌표 생성
# 직사각형 그리기!
cv2.rectangle(frame, (face_x, face_y), (face_x + face_w, face_y + face_h), (0, 0, 255), 4) # 직사각형 생성 # (0, 0, 255) -> 빨강
detect_face.value = bgr8_to_jpeg(frame)
✅ 눈 검출!
- ROT(Region of Interest)
# 눈 관련 학습 모델 가져오기!
!curl -L -O https://github.com/opencv/opencv/raw/master/data/haarcascades/haarcascade_eye.xml
import cv2
# 눈 관련 cascade 모델 생성!
eye_cascade = cv2.CascadeClassifier('haarcascade_eye.xml')
# 눈 좌표 초기화
eye_x = eye_y = eye_w = eye_h = 0
while 1:
frame = camera.value
cv2.resize(frame, (300, 300)) # 학습된 데이터의 이미지가 300*300 픽셀
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) # 흑백으로 변경
faces = face_cascade.detectMultiScale(gray) # 흑백 이미지 내에서 얼굴 검출
if len(faces) > 0 : # 만약 검출된게 있다면
(face_x, face_y, face_w, face_h) = faces[0] # 사진에 좌표 생성
# 직사각형 그리기!
cv2.rectangle(frame, (face_x, face_y), (face_x + face_w, face_y + face_h), (0, 0, 255), 4)
# 직사각형 생성 # (0, 0, 255) -> 빨강
# 눈이 검출된다 -> 먼저 얼굴이 검출되어야 함
roi_region = gray[face_y : face_y + face_h, face_x : face_x + face_w]
# -> gray 전체 프레임에서 얼굴 영역만 슬라이싱
roi_color = frame[face_y : face_y + face_h, face_x : face_x + face_w]
# -> 눈을 표시할 수 있는 도형을 컬러 프레임에 찍기 위함! # 원본 -> frame
eyes = eye_cascade.detectMultiScale(roi_region) # 눈 검출
# 눈이 검출되었다면!
for eye_x, eye_y, eye_w, eye_h in eyes : # 눈이라고 인식된 모든 공간
cv2.rectangle(roi_color, (eye_x, eye_y), (eye_x + eye_w, eye_y + eye_h), (255, 0, 0), 2)
# (255, 0, 0) -> 파랑
detect_face.value = bgr8_to_jpeg(frame)
'Jetson' 카테고리의 다른 글
Face Tracking (1) | 2024.06.21 |
---|---|
Cat Detection (0) | 2024.06.20 |
openCV (0) | 2024.06.19 |
Buzzer와 RGBstrip (0) | 2024.06.19 |
LED와 Button (0) | 2024.06.18 |