AIoT

AIoT 정규 56일차

맥기짱짱 2024. 3. 29. 17:34

OpenCV를 활용한 손 제스쳐 인식 프로젝트

  1. 전제 조건:
    • 다음이 설치되어 있는지 확인하십시오:
      • 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).
  2. 모델 초기화:
    • 손 감지 및 키포인트 추출을 위해 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)
    
  3. 이미지 읽기:
    • 손 제스처가 포함된 이미지를 로드하세요.
    • cv2.imread("이미지 경로/파일명.jpg")를 사용할 수 있습니다.
  4. 손 키포인트 감지:
    • MediaPipe를 사용하여 손 키포인트를 감지하세요.
    • MediaPipe는 각 검출된 손에 대해 총 21개의 키포인트를 반환합니다.
    • 이러한 키포인트는 손 끝, 손바닥, 손목과 같은 손의 다양한 부분을 나타냅니다.
  5. 손 제스처 인식:
    • 손 키포인트를 사전 훈련된 제스처 인식 네트워크에 입력하세요.
    • 손 키포인트를 기반으로 다양한 손 모양을 인식하는 모델을 훈련하거나 로드하세요.
    • 예를 들어 손 흔들기, 가리키기, 가위, 바위와 같은 제스처를 인식할 수 있습니다.
  6. 실험 및 세부 조정:
    • 다양한 이미지와 손 제스처를 실험하세요.
    • 정확도를 향상시키기 위해 모델을 세부 조정하세요.

: 웹캠을 사용한 실시간 손 제스처 인식으로 이 프로젝트를 확장하거나 손 움직임을 기반으로 가상 마우스 제어 시스템을 만들 수도 있다.

 

OpenCV를 활용한 얼굴 인식 프로젝트

1단계: 환경 및 데이터 준비

  1. 필요한 라이브러리를 설치:
    • 먼저 다음 명령을 사용하여 OpenCV를 설치한다:
      pip install opencv-python
      
    • 그 다음, face_recognition을 설치한다:
      pip install face_recognition
      

2단계: 훈련 데이터 로드 및 모델 훈련

  1. 원하는 사람을 인식할 수 있는 사진으로 구성된 데이터셋을 만든다.
  2. 예를 들어, Elon Musk, Jeff Bezos, Lionel Messi, Ryan Reynolds 및 Sergio Canu의 이미지가 있다고 가정해 보자.
  3. 이미지를 로드하고 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)

  1. 데이터 수집:
    • 얼굴이 포함된 이미지 데이터셋을 수집하세요. CelebA, LFW와 같은 공개 데이터셋을 사용하거나 직접 이미지를 수집할 수 있습니다.
    • 얼굴을 블러 처리해야 할 영역을 주석으로 표시하세요.
  2. 얼굴 감지:
    • 사전 훈련된 딥러닝 모델(예: MTCNN, Haarcascades, SSD)을 사용하여 이미지에서 얼굴을 감지하세요.
    • 얼굴 영역을 추출하세요.
  3. 블러 효과 적용:
    • 감지된 얼굴 영역에 블러 필터를 적용하세요. 다양한 종류의 블러 기법을 선택할 수 있습니다:
      • 가우시안 블러: 주변 픽셀 값의 평균으로 얼굴을 부드럽게 처리합니다.
      • 픽셀화: 각 얼굴 픽셀을 주변 픽셀의 평균 색상으로 대체합니다.
      • 박스 블러: 가우시안 블러와 유사하지만 더 간단합니다.
    • 개인 정보 보호 요구 사항에 따라 블러 강도를 조절하세요.
  4. 통합:
    • 얼굴 블러 모델을 응용 프로그램이나 스크립트에 통합하세요.
    • 사용자가 이미지를 업로드하거나 비디오를 처리할 수 있도록 옵션을 제공하세요.
    • 원본 이미지와 블러 처리된 버전을 함께 표시하세요.
  5. 테스트 및 최적화:
    • 모델의 성능을 IoU (교차 영역 비율) 또는 F1 점수와 같은 지표로 평가하세요.
    • 속도와 정확도를 위해 모델을 최적화하세요.
  6. 배포:
    • 웹 서비스나 독립 실행형 도구로 응용 프로그램을 배포하세요.
    • 확장성과 견고성을 확인하세요.

 

위에 코드를 참고해서 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