728x90
반응형
이전 글에서 다룬 face alignment를 이 글에서 실시간으로 적용해 보도록 한다.
[GUI 기반 Face Toy Project -5] face alignment opencv
이전 글에서 real time face swap (replacement)를 했다. [GUI 기반 Face Toy Project -4] real time face swap 이전 글에서 2개의 얼굴 사진을 이용해서 face swap을 했다. [GUI 기반 Face Toy Project -3] 들로네 삼각 변환(Delaunay
yeeca.tistory.com
실행 결과는 아래와 같다.
코드는 이전 pyqt5 코드에서 수정, 추가했다.
def test_m4(frame):
frame = face_align(frame)
return frame
test_m4()는 button1과 연결한다.
def button1_clicked(self):
print('btn1')
self.handler = 3
def face_align(frame):
"""
frame : RGB converted ndarray
"""
idx_to_coordinates = get_idx_to_coordinates(frame)
if idx_to_coordinates:
try:
frame = get_masked_frame(frame,idx_to_coordinates[0],connection=mpFaceMesh.FACEMESH_FACE_OVAL,thickness=20)
frame = get_masked_frame(frame,idx_to_coordinates[0],connection=mpFaceMesh.FACEMESH_LIPS,color=(255,0,0),thickness=2)
frame = align(frame,idx_to_coordinates[0],1)
except:
return frame
return frame
위 코드의 함수는 GUI 기반 Face Toy Project -5 게시글에 설명되어 있으며, 추가한 함수는 get_masked_frame이다.
내 얼굴을 가리기 위해 align() 함수 실행 전에 frame위에 mask를 씌웠다.
def get_masked_frame(frame,idx_to_coordinates,connection=mpFaceMesh.FACEMESH_LEFT_EYE,color=(0,0,0),thickness=8):
# mask = np.zeros(frame.shape[:2],dtype=frame.dtype)
# cv2.fillConvexPoly(mask,np.int32(get_connection_points(idx_to_coordinates,connection)),(255,255,255))
# frame = cv2.bitwise_and(frame,frame,mask=mask)
cv2.drawContours(frame,[get_connection_points(idx_to_coordinates,connection)],0,color,thickness)
return frame
728x90
반응형
'Projects > Face Toy Project' 카테고리의 다른 글
[GUI 기반 Face Toy Project -5] face alignment opencv (0) | 2023.04.10 |
---|---|
[GUI 기반 Face Toy Project -4] real time face swap (0) | 2023.04.10 |
[GUI 기반 Face Toy Project -3] 들로네 삼각 변환(Delaunay triangulation) (0) | 2023.04.07 |
GUI 기반 Face Toy Project -2 (0) | 2023.04.05 |
GUI 기반 Face Toy Project - 1 (0) | 2023.04.02 |
댓글