OpenCV를 활용한 손 제스쳐 인식 프로젝트
- 전제 조건:
- 다음이 설치되어 있는지 확인하십시오:
- Python 3.x: 이 프로젝트에서는 Python 3.8.8을 사용했습니다.
- OpenCV (버전 4.5): pip install opencv-python으로 설치할 수 있습니다.
- MediaPipe (버전 0.8.5): pip install mediapipe로 설치하세요.
- TensorFlow (버전 2.5.0): pip install tensorflow를 사용하세요.
- NumPy (버전 1.19.3).
- 다음이 설치되어 있는지 확인하십시오:
- 모델 초기화:
- 손 감지 및 키포인트 추출을 위해 MediaPipe 프레임워크를 사용합니다.
- 다음과 같이 MediaPipe를 초기화합니다:
# 필요한 패키지 가져오기 import cv2 import numpy as np import mediapipe as mp import tensorflow as tf from tensorflow.keras.models import load_model # MediaPipe 초기화 mpHands = mp.solutions.hands hands = mpHands.Hands(max_num_hands=1, min_detection_confidence=0.7)
- 이미지 읽기:
- 손 제스처가 포함된 이미지를 로드하세요.
- cv2.imread("이미지 경로/파일명.jpg")를 사용할 수 있습니다.
- 손 키포인트 감지:
- MediaPipe를 사용하여 손 키포인트를 감지하세요.
- MediaPipe는 각 검출된 손에 대해 총 21개의 키포인트를 반환합니다.
- 이러한 키포인트는 손 끝, 손바닥, 손목과 같은 손의 다양한 부분을 나타냅니다.
- 손 제스처 인식:
- 손 키포인트를 사전 훈련된 제스처 인식 네트워크에 입력하세요.
- 손 키포인트를 기반으로 다양한 손 모양을 인식하는 모델을 훈련하거나 로드하세요.
- 예를 들어 손 흔들기, 가리키기, 가위, 바위와 같은 제스처를 인식할 수 있습니다.
- 실험 및 세부 조정:
- 다양한 이미지와 손 제스처를 실험하세요.
- 정확도를 향상시키기 위해 모델을 세부 조정하세요.
: 웹캠을 사용한 실시간 손 제스처 인식으로 이 프로젝트를 확장하거나 손 움직임을 기반으로 가상 마우스 제어 시스템을 만들 수도 있다.
OpenCV를 활용한 얼굴 인식 프로젝트
1단계: 환경 및 데이터 준비
- 필요한 라이브러리를 설치:
- 먼저 다음 명령을 사용하여 OpenCV를 설치한다:
pip install opencv-python
- 그 다음, face_recognition을 설치한다:
pip install face_recognition
- 먼저 다음 명령을 사용하여 OpenCV를 설치한다:
2단계: 훈련 데이터 로드 및 모델 훈련
- 원하는 사람을 인식할 수 있는 사진으로 구성된 데이터셋을 만든다.
- 예를 들어, Elon Musk, Jeff Bezos, Lionel Messi, Ryan Reynolds 및 Sergio Canu의 이미지가 있다고 가정해 보자.
- 이미지를 로드하고 RGB 형식으로 변환:
import cv2 import face_recognition # 이미지 로드 (예: Messi1.webp) img = cv2.imread("Messi1.webp") rgb_img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) # 얼굴 인코딩 img_encoding = face_recognition.face_encodings(rgb_img)[0]
3단계: 미분류된 얼굴 인식
- 웹캠에서 비디오를 캡처:
video_capture = cv2.VideoCapture(0)
- 루프를 사용하여 각 프레임을 처리:
while True:
ret, frame = video_capture.read()
rgb_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
# 프레임에서 얼굴 감지
face_locations = face_recognition.face_locations(rgb_frame)
face_encodings = face_recognition.face_encodings(rgb_frame, face_locations)
# 각 감지된 얼굴을 알려진 인코딩과 비교
for face_encoding in face_encodings:
result = face_recognition.compare_faces([img_encoding], face_encoding)
if result[0]:
# 인식된 경우 이름 표시 (예: "Messi")
cv2.putText(frame, "Messi", (x, y), cv2.FONT_HERSHEY_SIMPLEX, 1, (255, 255, 255), 2)
# 프레임 표시
cv2.imshow("얼굴 인식", frame)
if cv2.waitKey(1) & 0xFF == ord("q"):
break
video_capture.release()
cv2.destroyAllWindows()
4단계: 결과 표시
- 스크립트를 실행하면 웹캠에서 실시간으로 얼굴을 인식합니다.
5단계: 모델 검증
- 정확한 인식을 확인하기 위해 알려진 이미지에 대해 모델을 테스트하세요.
6단계: 명령줄 인수 추가
- argparse를 사용하여 명령줄 인수를 추가하여 응용 프로그램을 개선하세요.
7단계: Python으로 얼굴 인식 수행
- Python과 OpenCV를 사용하여 간단한 얼굴 인식 도구를 만들었습니다.
- 간단한 face recognition 코드
import face_recognition
import cv2
# 이미지 파일 경로 설정
image_path = 'your_image2.jpg'
image = face_recognition.load_image_file(image_path)
# 얼굴 위치 정보를 찾습니다.
face_locations = face_recognition.face_locations(image)
# OpenCV로 이미지를 다시 불러옵니다.
image_cv2 = cv2.imread(image_path)
# 얼굴 위치에 사각형을 그립니다.
for top, right, bottom, left in face_locations:
cv2.rectangle(image_cv2, (left, top), (right, bottom), (0, 255, 0), 3)
# 이미지를 화면에 출력합니다.
cv2.imshow('얼굴 인식', image_cv2)
cv2.waitKey(0)
cv2.destroyAllWindows()
: Output

출처: https://m.blog.naver.com/serendipity86/223228396454
파이썬으로 얼굴 인식하기 - 초간단 튜토리얼
안녕하세요, 여러분! 육아이티입니다. 오늘은 매우 흥미로운 주제, 바로 '파이썬으로 얼굴 인식하기&#...
blog.naver.com
- Face-recognition (Blur the Face idea)
- 데이터 수집:
- 얼굴이 포함된 이미지 데이터셋을 수집하세요. CelebA, LFW와 같은 공개 데이터셋을 사용하거나 직접 이미지를 수집할 수 있습니다.
- 얼굴을 블러 처리해야 할 영역을 주석으로 표시하세요.
- 얼굴 감지:
- 사전 훈련된 딥러닝 모델(예: MTCNN, Haarcascades, SSD)을 사용하여 이미지에서 얼굴을 감지하세요.
- 얼굴 영역을 추출하세요.
- 블러 효과 적용:
- 감지된 얼굴 영역에 블러 필터를 적용하세요. 다양한 종류의 블러 기법을 선택할 수 있습니다:
- 가우시안 블러: 주변 픽셀 값의 평균으로 얼굴을 부드럽게 처리합니다.
- 픽셀화: 각 얼굴 픽셀을 주변 픽셀의 평균 색상으로 대체합니다.
- 박스 블러: 가우시안 블러와 유사하지만 더 간단합니다.
- 개인 정보 보호 요구 사항에 따라 블러 강도를 조절하세요.
- 감지된 얼굴 영역에 블러 필터를 적용하세요. 다양한 종류의 블러 기법을 선택할 수 있습니다:
- 통합:
- 얼굴 블러 모델을 응용 프로그램이나 스크립트에 통합하세요.
- 사용자가 이미지를 업로드하거나 비디오를 처리할 수 있도록 옵션을 제공하세요.
- 원본 이미지와 블러 처리된 버전을 함께 표시하세요.
- 테스트 및 최적화:
- 모델의 성능을 IoU (교차 영역 비율) 또는 F1 점수와 같은 지표로 평가하세요.
- 속도와 정확도를 위해 모델을 최적화하세요.
- 배포:
- 웹 서비스나 독립 실행형 도구로 응용 프로그램을 배포하세요.
- 확장성과 견고성을 확인하세요.
위에 코드를 참고해서 Blur처리를 하는 코드로 수정해봤다.
import face_recognition
import cv2
# 이미지 파일 경로 설정
image_path = 'your_image2.jpg'
image = face_recognition.load_image_file(image_path)
# 얼굴 위치 정보를 찾습니다.
face_locations = face_recognition.face_locations(image)
# OpenCV로 이미지를 다시 불러옵니다.
image_cv2 = cv2.imread(image_path)
# 얼굴 위치에 Blur처리.
for top, right, bottom, left in face_locations:
# 얼굴 영역 추출
face = image_cv2[top:bottom, left:right]
# Blur 처리 (가우시안 블러 사용)
blurred_face = cv2.GaussianBlur(face, (0, 0), 30)
# Blur 처리된 얼굴을 원본 이미지에 다시 삽입
image_cv2[top:bottom, left:right] = blurred_face
# 이미지를 화면에 출력합니다.
cv2.imshow('Make_The_Face_Blurred', image_cv2)
cv2.waitKey(0)
cv2.destroyAllWindows()
- Output
1. **얼굴 인식 기술을 활용한 블러 처리**: 얼굴 인식 알고리즘을 사용하여 핸드폰 소유자의 얼굴을 식별하고, 다른 사람들의 얼굴을 블러 처리할 수 있습니다. 이를 위해 OpenCV, Dlib, Face Recognition 등의 라이브러리를 활용할 수 있습니다.
2. **머신 러닝 모델을 훈련하여 얼굴을 구분**: 핸드폰 소유자의 얼굴을 훈련 데이터로 사용하여 머신 러닝 모델을 만들고, 이 모델을 카메라 앱에 통합하여 얼굴을 식별하고 블러 처리할 수 있습니다.
3. **사용자 지정 규칙을 설정하여 블러 처리**: 사용자가 앱 설정에서 핸드폰 소유자의 얼굴을 등록하고, 다른 사람들의 얼굴을 블러 처리하는 규칙을 설정할 수 있습니다.
4. **기타 방법**: 얼굴 인식 외에도 지문 인식, 음성 인식 등 다양한 생체 인식 기술을 활용하여 핸드폰 소유자를 식별하고 블러 처리할 수 있습니다.
'AIoT' 카테고리의 다른 글
AIoT 정규 58일차 (2) | 2024.04.02 |
---|---|
AIoT 정규 57일차 (0) | 2024.04.02 |
AIoT 정규 55일차 (0) | 2024.03.28 |
AIoT 정규 54일차 (0) | 2024.03.27 |
AIoT 정규 53일차 (0) | 2024.03.26 |