반응형
- 본 내용은 python 3.10 버전을 이용하여 진행하였습니다.
이미지 검색과 블러 처리를 위해 먼저 두 라이브러리를 import 해줍니다.
import cv2
# 세그멘테이션 모듈 불러오기 (블러 처리용)
from cvzone.SelfiSegmentationModule import SelfiSegmentation as ssm
배경과 사람을 분리할 떄 필요한 새그맨테이션 객체와 얼굴을 감지할 기본적인 Haar Cascade 데이터를 로드해줍니다.
# 세그멘테이션 모듈 객체 생성
segmentor = ssm()
# 사전 훈련된 Haar Cascade 분류기 파일 로드
face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_frontalface_default.xml')
웹캠을 불러와 데이터 분석에 필요한 그레이스케일로 이미지를 변경합니다.
먼저 detectMultiScale로 변환한 이미지에서 얼굴이 검출되는지 확인합니다.
얼굴값이 검출될 경우 원본 이미지 객체를 하나 더 생성하여 흐리게 처리하고,
그 위에 배경을 제거한 얼굴 이미지를 합칩니다.
while cap.isOpened :
# 웹캠에서 프레임 읽기
ret, img = cap.read()
# 그레이스케일 이미지로 변환
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 얼굴 인식
faces = face_cascade.detectMultiScale(gray, 1.3, 5)
if len(faces) :
img_blur = cv2.GaussianBlur(img, (51, 51), 0) # 원본 이미지 블러 처리
img = segmentor.removeBG(img, imgBg=img_blur) # 블러 처리 실행
마지막으로 검출된 얼굴 주변에 파란색 사각형이 출력될 수 있도록 설정한 뒤
동영상 출력 및, Q키를 누르면 종료되는 기본적인 기능들을 추가합니다.
# 얼굴 주변에 사각형 그리기
for (x, y, w, h) in faces:
cv2.rectangle(img, (x, y), (x+w, y+h), (255, 0, 0), 2)
# 결과 이미지 출력
cv2.imshow('Face Detection', img)
# 'q' 키를 누르면 종료
if cv2.waitKey(1) & 0xFF == ord('q'):
break
# 리소스 해제
cap.release()
cv2.destroyAllWindows()
아래는 전체 코드입니다.
더보기
import cv2
# 세그멘테이션 모듈 불러오기 (블러 처리용)
from cvzone.SelfiSegmentationModule import SelfiSegmentation as ssm
# 세그멘테이션 모듈 객체 생성
segmentor = ssm()
# 사전 훈련된 Haar Cascade 분류기 파일 로드
face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_frontalface_default.xml')
# 웹캠 캡처 객체 생성
cap = cv2.VideoCapture(0)
while cap.isOpened :
# 웹캠에서 프레임 읽기
ret, img = cap.read()
# 그레이스케일 이미지로 변환
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 얼굴 인식
faces = face_cascade.detectMultiScale(gray, 1.3, 5)
if len(faces) :
img_blur = cv2.GaussianBlur(img, (51, 51), 0) # 원본 이미지 블러 처리
img = segmentor.removeBG(img, imgBg=img_blur) # 블러 처리 실행
# 얼굴 주변에 사각형 그리기
for (x, y, w, h) in faces:
cv2.rectangle(img, (x, y), (x+w, y+h), (255, 0, 0), 2)
# 결과 이미지 출력
cv2.imshow('Face Detection', img)
# 'q' 키를 누르면 종료
if cv2.waitKey(1) & 0xFF == ord('q'):
break
# 리소스 해제
cap.release()
cv2.destroyAllWindows()
반응형
'공부를 함시다 > Python' 카테고리의 다른 글
[Python] HandDetector를 이용한 소리 크기 조절 (0) | 2024.11.10 |
---|---|
[Python] PoseDetector을 이용한 운동 횟수 세기 (0) | 2024.11.03 |
[Python] 웹캠 출력하기 (0) | 2024.08.04 |
[Python] 사진 학습을 통해 데이터 파일로 만들기 (0) | 2024.07.18 |
[Python] 파이썬 코드를 exe로 만들기(pyinstaller) (0) | 2024.03.22 |