[python] 웹캠 영상에서 검출된 얼굴들에 모자이크 효과 넣기

코딩/python|2020. 9. 25. 18:26

728x90

오늘은 웹캠 영상에서 검출된 얼굴들에 모자이크 효과를 넣어보도록 하겠습니다. 다음과 같은 절차를 거쳐서 얼굴들에 모자이크 효과를 넣을 것입니다. 

 

1) 우선 cvlib 라이브러리의 얼굴 검출 모델(딥러닝 기반)을 이용해서 영상의 각 프레임 내 얼굴들을 검출합니다. 

2) 얼굴 부분을 잘라내서 크기를 축소시킨 다음에 다시 원래 사이즈로 확대시켜서 모자이크 효과를 준 것을 다시 프레임에 붙여넣습니다. 얼굴 부분의 해상도를 확 줄인 다음에 다시 확대시키기 때문에 모자이크 처리된 것처럼 보이게 됩니다.

 

얼굴에 모자이크 효과 넣기 알고리즘.

 

제가 작성한 python 코드는 다음과 같습니다. 이 코드를 실행하기 위해서는 cvlib과 opencv-python 패키지가 필요하니 설치가 안 되어 있다면 설치해주세요. 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
# import necessary packages
import cvlib as cv
import cv2
 
# open webcam
webcam = cv2.VideoCapture(0)
 
if not webcam.isOpened():
    print("Could not open webcam")
    exit()
    
 
# loop through frames
while webcam.isOpened():
 
    # read frame from webcam 
    status, frame = webcam.read()
 
    if not status:
        print("Could not read frame")
        exit()
 
    # apply face detection
    face, confidence = cv.detect_face(frame)
 
    print(face)
    print(confidence)
 
    # loop through detected faces
    for idx, f in enumerate(face):
        
        (startX, startY) = f[0], f[1]
        (endX, endY) = f[2], f[3]
 
        '모자이크 효과 주기: 얼굴 부분을 줄였다가 다시 원크기로 복구시키면 모자이크처럼 됨.'
        face_region = frame[startY:endY, startX:endX]
        
        M = face_region.shape[0]
        N = face_region.shape[1]
 
        face_region = cv2.resize(face_region, None, fx=0.05, fy=0.05, interpolation=cv2.INTER_AREA)
        face_region = cv2.resize(face_region, (N, M), interpolation=cv2.INTER_AREA)
        frame[startY:endY, startX:endX] = face_region
 
    # display output
    cv2.imshow("Real-time face detection", frame)
 
    # press "Q" to stop
    if cv2.waitKey(1& 0xFF == ord('q'):
        break
    
# release resources
webcam.release()
cv2.destroyAllWindows() 
cs

 

위 코드를 실행하면 웹캠을 통해 촬영되는 영상에서 검출되는 얼굴들이 모자이크 처리됩니다. 

 

 

꽤 괜찮게 얼굴들이 검출되어 모자이크 처리되었죠? 얼굴 각도가 너무 틀어졌을 때는 검출에 실패하는 경우도 있긴 하지만요. cvlib에서 제공하는 얼굴 검출 모델이 opencv 라이브러리에서 제공하는 Haar cascade 방식의 얼굴 검출기보다 훨씬 정확합니다. 속도도 real-time으로 적용할 수 있을만큼 빠르고요. 

 

 

b스카이비전의 추천글

[ubuntu+python] 얼굴 검출 

 

[ubuntu+python] 얼굴 검출

오늘은 파이썬을 이용해서 얼굴을 검출해보겠습니다. 먼저 설치해야하는 라이브러리들이 있습니다. opencv-python과 cvlib입니다. opencv-python는 이미지를 읽고 쓰기 위해 필요하고, cvlib은 얼굴 검출��

bskyvision.com

[ubuntu+python] 웹캠 영상 실시간 물체(객체) 검출

 

[ubuntu+python] 웹캠 영상 실시간 물체(객체) 검출

[파이썬] 얼굴 검출 https://bskyvision.com/675 [파이썬] 얼굴 검출 후 성별 인식 https://bskyvision.com/677 [파이썬] 물체 검출 https://bskyvision.com/678 지난 번에 말씀드린대로 오늘은 웹캠으로 촬영되는..

bskyvision.com