Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 아파치 스파크
- caffemodel
- face blur
- opencv
- python
- 비식별화
- 카프카
- 내채공만기
- Yolo5
- 스파크
- 파이썬
- Swift
- 준지도학습
- scenedelegate
- yolov5
- Kafka
- 아파치 카프카
- train data
- iOS부트캠프
- roboflow
- 얼굴 비식별화
- SeSAC
- SPARK
- YOLO
- Yolo5 custom dataset
- 내일채움공제만기
- 앱생명주기
- Apache Spark
- IOS
- Apache Kafka
Archives
- Today
- Total
봉식이와 캔따개
Python과 OpenCV를 이용하여 웹캠 실시간 face detection + 비식별화 본문
반응형
기존에 face_recognition 라이브러리를 사용하여 얼굴을 찾아내고 블러처리해서 비식별화 시키는코드가 있었는데
손이 얼굴에 아주 조금만 겹쳐도 얼굴을 인식하지 못해 비식별화가 풀리는 문제점이 있었다.
이 문제점을 보완해보는것이 저번주 일과였다...
일단 caffemodel을 이용하였는데 원래는 얼굴을 학습시켜서 face recognition까지 가능한듯 하다.
하지만 이 얼굴이 누구얼굴인가는 아직 중요하지 않으므로 패스...
from imutils.video import VideoStream
from imutils.video import FPS
import numpy as np
import imutils
import time
import cv2
import os
필요한 친구들 import~
protoPath = "deploy.prototxt"
modelPath = "res10_300x300_ssd_iter_140000.caffemodel"
detector = cv2.dnn.readNetFromCaffe(protoPath, modelPath)
모델을 가져와준다.
vs = VideoStream(src=0).start()
time.sleep(2.0)
fps = FPS().start()
while True:
frame = vs.read()
frame = imutils.resize(frame,width=600)
(h, w) = frame.shape[:2]
imageBlob = cv2.dnn.blobFromImage(cv2.resize(frame,(300,300)),1.0, (300,300),(104.0,177.0,123.0), swapRB=False, crop=False)
detector.setInput(imageBlob)
detections = detector.forward()
for i in range(0,detections.shape[2]):
confidence = detections[0,0,i,2]
if confidence > 0.5:
box = detections[0,0,i,3:7] * np.array([w,h,w,h])
(startX, startY, endX, endY) = box.astype("int")
face = frame[startY:endY, startX:endX]
(fH, fW) = face.shape[:2]
if fW < 20 or fH < 20:
continue
faceBlob = cv2.dnn.blobFromImage(face, 1.0 / 255,(96, 96), (0, 0, 0), swapRB=True, crop=False)
y = startY - 10 if startY - 10 > 10 else startY + 10
cv2.rectangle(frame, (startX, startY), (endX, endY),
(0, 0, 255), 2)
fps.update()
cv2.imshow("Frame", frame)
key = cv2.waitKey(1) & 0xFF
if key == ord("q"):
break
fps.stop()
cv2.destroyAllWindows()
vs.stop()
우선 face detection 코드 먼저...
얼굴에 네모쳐주는 코드다.
이제 이걸 네모대신 블러처리 하도록 바꾸어 주면 된다.
cv2.rectangle 부분을 지우고 밑의 코드로 바꾸어준다.
face_image = cv2.GaussianBlur(face,(99,99), 30)
frame[startY:endY, startX:endX] = face_image
굿굿굿
참고로 손으로 좀 가리고 마스크 쓴 상태에서도 얼굴을 인식하고 가려준다.
근데 그동안 다른 소스들에서는 cv2.VideoCapture(0)로 웹캠영상을 불러들였는데 VideoStream은 뭘까...
아무리 찾아봐도 둘의 차이점..장단점이 안나온다 ㅠㅠ
www.pyimagesearch.com/2020/04/06/blur-and-anonymize-faces-with-opencv-and-python/
반응형
'머신러닝, 딥러닝 > 이미지처리' 카테고리의 다른 글
[Yolo5] Yolo5의 detect.py 사용해서 Yolo 학습용 데이터셋 만들기 (6) | 2022.02.23 |
---|---|
[YOLO] 커스텀 데이터셋 학습시키기 - colab에서 Yolo5 모델 (5) | 2022.02.10 |
[YOLO] 커스텀 데이터셋 학습시키기 - roboflow에서 데이터셋 만들기 (4) | 2022.02.07 |
CNN에 대해 쉽게 정리 (3) | 2021.01.22 |
Python으로 OpenCV를 사용하여 YOLO Object detection (25) | 2020.03.30 |
Comments