anaconda prompt
Mediapipe는 구글이 개발한 오픈 소스 프레임워크로, 컴퓨터 비전 및 머신 러닝을 활용하여 비디오 및 오디오 데이터에서 다양한 작업을 수행하는 데 사용됩니다. Mediapipe는 주로 실시간 비디오 및 오디오 처리, 손동작 감지, 얼굴 감지, 물체 추적, 자세 추정 등과 같은 다양한 응용 분야에서 활용된다.
conda create -n opencv python=3.8
activate opencv
pip install opencv-python scikit-learn numpy pandas jupyter matplotlib mediapipe
jupyter notebook
카메라를 키는 코드
import mediapipe as mp
import cv2
cap = cv2.VideoCapture(0)
while cap.isOpened():
ret, img = cap.read()
if not ret:
break
cv2.imshow('video',img)
if cv2.waitKey(33) == 49:
break
cap.release()
cv2.destroyAllWindows()
얼굴에서 특징점을 찾을 수 있는 기능 불러오기
import mediapipe as mp
import cv2
mp_face_mesh = mp.solutions.face_mesh
cap = cv2.VideoCapture(0)
while cap.isOpened():
ret, img = cap.read()
if not ret:
break
cv2.imshow('video',img)
if cv2.waitKey(33) == 49:
break
cap.release()
cv2.destroyAllWindows()
찾은 특징점을 표현하기
import mediapipe as mp
import cv2
mp_face_mesh = mp.solutions.face_mesh
mp_drawing = mp.solutions.drawing_utils
cap = cv2.VideoCapture(0)
while cap.isOpened():
ret, img = cap.read()
if not ret:
break
cv2.imshow('video',img)
if cv2.waitKey(33) == 49:
break
cap.release()
cv2.destroyAllWindows()
특징점 그리기 속성 추가
import mediapipe as mp
import cv2
mp_face_mesh = mp.solutions.face_mesh
mp_drawing = mp.solutions.drawing_utils
drawing_spec = mp_drawing.DrawingSpec(thickness = 1, color = (0,0,255))
cap = cv2.VideoCapture(0)
while cap.isOpened():
ret, img = cap.read()
if not ret:
break
cv2.imshow('video',img)
if cv2.waitKey(33) == 49:
break
cap.release()
cv2.destroyAllWindows()
얼굴에서 특징점 찾기 세부 설정
import mediapipe as mp
import cv2
mp_face_mesh = mp.solutions.face_mesh
mp_drawing = mp.solutions.drawing_utils
drawing_spec = mp_drawing.DrawingSpec(thickness = 1, color = (0,0,255))
face_mesh = mp_face_mesh.FaceMesh(
min_detection_confidence = 0.5,
min_tracking_confidence = 0.5
)
cap = cv2.VideoCapture(0)
while cap.isOpened():
ret, img = cap.read()
if not ret:
break
cv2.imshow('video',img)
if cv2.waitKey(33) == 49:
break
cap.release()
cv2.destroyAllWindows()
카메라에서 불러온 사진에서 얼굴 특징점 찾기
import mediapipe as mp
import cv2
mp_face_mesh = mp.solutions.face_mesh
mp_drawing = mp.solutions.drawing_utils
drawing_spec = mp_drawing.DrawingSpec(thickness = 1, color = (0,0,255))
face_mesh = mp_face_mesh.FaceMesh(
min_detection_confidence = 0.5,
min_tracking_confidence = 0.5
)
cap = cv2.VideoCapture(0)
while cap.isOpened():
ret, img = cap.read()
if not ret:
break
results = face_mesh.process(img)
cv2.imshow('video',img)
if cv2.waitKey(33) == 49:
break
cap.release()
cv2.destroyAllWindows()
얼굴의 특징점(478개)을 감지했을 때 얼굴에 점찍기
import mediapipe as mp
import cv2
mp_face_mesh = mp.solutions.face_mesh
mp_drawing = mp.solutions.drawing_utils
drawing_spec = mp_drawing.DrawingSpec(thickness = 1, color = (0,0,255))
face_mesh = mp_face_mesh.FaceMesh(
min_detection_confidence = 0.5,
min_tracking_confidence = 0.5
)
cap = cv2.VideoCapture(0)
while cap.isOpened():
ret, img = cap.read()
if not ret:
break
results = face_mesh.process(img)
if results.multi_face_landmarks is not None:
for res in results.multi_face_landmarks:
mp_drawing.draw_landmarks(img, res, mp_face_mesh.FACEMESH_TESSELATION)
cv2.imshow('video',img)
if cv2.waitKey(33) == 49:
break
cap.release()
cv2.destroyAllWindows()
얼굴 특징을 나타내는 478개의 점 중 코에 점찍기
import mediapipe as mp
import cv2
mp_face_mesh = mp.solutions.face_mesh
mp_drawing = mp.solutions.drawing_utils
drawing_spec = mp_drawing.DrawingSpec(thickness = 1, color = (0,0,255))
face_mesh = mp_face_mesh.FaceMesh(
min_detection_confidence = 0.5,
min_tracking_confidence = 0.5
)
cap = cv2.VideoCapture(0)
while cap.isOpened():
ret, img = cap.read()
if not ret:
break
results = face_mesh.process(img)
if results.multi_face_landmarks is not None:
#print(results.multi_face_landmarks)
#for res in results.multi_face_landmarks:
# mp_drawing.draw_landmarks(img, res, mp_face_mesh.FACEMESH_TESSELATION)
face_landmarks = results.multi_face_landmarks[0]
x = int(face_landmarks.landmark[8].x * img.shape[1])
y = int(face_landmarks.landmark[8].y * img.shape[0])
print(x,y)
cv2.imshow('video',img)
if cv2.waitKey(33) == 49:
break
cap.release()
cv2.destroyAllWindows()
호랑이 필터
import mediapipe as mp
import cv2
# 얼굴에서 특징점을 찾을 수 있는 기능 불러오기
mp_face_mesh = mp.solutions.face_mesh
# 찾은 특징점 표현하기
mp_drawing = mp.solutions.drawing_utils
# 특징점 그리기 속성
drawing_spec = mp_drawing.DrawingSpec(thickness = 1, color = (0,0,255))
# 얼에서 특징점 찾기 속성
face_mesh = mp_face_mesh.FaceMesh(
min_detection_confidence = 0.5, # 얼굴 검출 확률(자체 판단) 50% 이상인 것들만 출력하기
min_tracking_confidence = 0.5 # 특징점 검출 확률(자체 판단) 50% 이상인 것들만 출력하기
)
tiger = cv2.imread('images/tiger.png')
tiger = cv2.resize(tiger,(200,200))
mask2gray = cv2.cvtColor(tiger , cv2.COLOR_BGR2GRAY)
_, mask_b = cv2.threshold(mask2gray, 200, 255, cv2.THRESH_BINARY)
mask_b_inv = cv2.bitwise_not(mask_b)
cap = cv2.VideoCapture(0)
while cap.isOpened():
ret, img = cap.read()
if not ret :
break
# 카메라에서 불러온 사진에서 얼굴 특징점 찾
results = face_mesh.process(img)
# 얼굴의 특징점을 감지했을 때 실행하겠다
if results.multi_face_landmarks is not None :
# print(results.multi_face_landmarks)
# for res in results.multi_face_landmarks :
# mp_drawing.draw_landmarks(img, res, mp_face_mesh.FACEMESH_TESSELATION)
# 478개 점을 사용하기가 편함
face_landmarks = results.multi_face_landmarks[0]
# 코의 좌표 찾기
x = int(face_landmarks.landmark[4].x * img.shape[1])
y = int(face_landmarks.landmark[4].y * img.shape[0])
# cv2.circle(img, (x,y), 20, (0,0,255), cv2.FILLED)
# 이미지를 집어넣을 중심 좌표(코의 위치) > x,y
# 마스크 이미지의 크기 > 123,132(tiger.shape)
try :
sub_img = img[ y-100 : y+100 , x-100 : x+100 ]
img_bg = cv2.bitwise_and(sub_img, sub_img, mask = mask_b)
img_fg = cv2.bitwise_and(tiger,tiger, mask = mask_b_inv)
bg_fg = cv2.add(img_bg,img_fg)
img[ y-100 : y+100 , x-100 : x+100 ] = bg_fg
except:
pass
cv2.imshow('video',img)
if cv2.waitKey(33) == 49 :
break
cap.release()
cv2.destroyAllWindows()