12강 얼굴 인식
Pyhton을 통해 얼굴인식 해보자
여기서 핵심은 의 이해가 필요하다 net = cv2.dnn.readNetFromCaffe(“deploy.prototxt”, “res10_300x300_ssd_iter_140000_fp16.caffemodel”) blob = cv2.dnn.blobFromImage(frame, 1.0, (in_width, in_height), mean, swapRB = False, crop = False
- 함수 모듈 호출
import cv2 import sys
- 변수 값 받아오기 만약 python에서 변수가 없으면 카메라 영상 데이터를 가져온다.
s = 0
if len(sys.argv) > 1:
s = sys.argv[1]
source = cv2.VideoCapture(s)
참고 사항
참고로 컴퓨터로 동작하고 싶은데 나는 USB 카메라가 없어요 하는 경우 휴대폰에서 Ip webCam을 다운받아 사용하는데 python 파일명 http://XXX.XXX.XX.XX:8080/video 실행하면된다.
- 딥러닝 자료 가져오기 추후 내가 caffemodel 자료 만드는 방법을 알고 싶은데 우선 만들어진 자료를 가져와 사용한다. ```python win_name = ‘Camera Preview’ cv2.namedWindow(win_name, cv2.WINDOW_NORMAL)
net = cv2.dnn.readNetFromCaffe(“deploy.prototxt”, “res10_300x300_ssd_iter_140000_fp16.caffemodel”)
4. 모델 변수 적용
```python
# Model parameters
in_width = 300
in_height = 300
mean = [104, 117, 123]
conf_threshold = 0.7
while cv2.waitKey(1) != 27:
has_frame, frame = source.read()
if not has_frame:
break
frame = cv2.flip(frame,1)
frame_height = frame.shape[0]
frame_width = frame.shape[1]
# Create a 4D blob from a frame.
blob = cv2.dnn.blobFromImage(frame, 1.0, (in_width, in_height), mean, swapRB = False, crop = False)
# Run a model
net.setInput(blob)
detections = net.forward()
for i in range(detections.shape[2]):
confidence = detections[0, 0, i, 2]
if confidence > conf_threshold:
x_left_bottom = int(detections[0, 0, i, 3] * frame_width)
y_left_bottom = int(detections[0, 0, i, 4] * frame_height)
x_right_top = int(detections[0, 0, i, 5] * frame_width)
y_right_top = int(detections[0, 0, i, 6] * frame_height)
cv2.rectangle(frame, (x_left_bottom, y_left_bottom), (x_right_top, y_right_top), (0, 255, 0))
label = "Confidence: %.4f" % confidence
label_size, base_line = cv2.getTextSize(label, cv2.FONT_HERSHEY_SIMPLEX, 0.5, 1)
cv2.rectangle(frame, (x_left_bottom, y_left_bottom - label_size[1]),
(x_left_bottom + label_size[0], y_left_bottom + base_line),
(255, 255, 255), cv2.FILLED)
cv2.putText(frame, label, (x_left_bottom, y_left_bottom),
cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 0, 0))
t, _ = net.getPerfProfile()
label = 'Inference time: %.2f ms' % (t * 1000.0 / cv2.getTickFrequency())
cv2.putText(frame, label, (0, 15), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 255, 0))
cv2.imshow(win_name, frame)
source.release()
cv2.destroyWindow(win_name)
전체 소스코드
import cv2
import sys
s = 0
if len(sys.argv) > 1:
s = sys.argv[1]
source = cv2.VideoCapture(s)
win_name = 'Camera Preview'
cv2.namedWindow(win_name, cv2.WINDOW_NORMAL)
net = cv2.dnn.readNetFromCaffe("deploy.prototxt",
"res10_300x300_ssd_iter_140000_fp16.caffemodel")
# Model parameters
in_width = 300
in_height = 300
mean = [104, 117, 123]
conf_threshold = 0.7
while cv2.waitKey(1) != 27:
has_frame, frame = source.read()
if not has_frame:
break
frame = cv2.flip(frame,1)
frame_height = frame.shape[0]
frame_width = frame.shape[1]
# Create a 4D blob from a frame.
blob = cv2.dnn.blobFromImage(frame, 1.0, (in_width, in_height), mean, swapRB = False, crop = False)
# Run a model
net.setInput(blob)
detections = net.forward()
for i in range(detections.shape[2]):
confidence = detections[0, 0, i, 2]
if confidence > conf_threshold:
x_left_bottom = int(detections[0, 0, i, 3] * frame_width)
y_left_bottom = int(detections[0, 0, i, 4] * frame_height)
x_right_top = int(detections[0, 0, i, 5] * frame_width)
y_right_top = int(detections[0, 0, i, 6] * frame_height)
cv2.rectangle(frame, (x_left_bottom, y_left_bottom), (x_right_top, y_right_top), (0, 255, 0))
label = "Confidence: %.4f" % confidence
label_size, base_line = cv2.getTextSize(label, cv2.FONT_HERSHEY_SIMPLEX, 0.5, 1)
cv2.rectangle(frame, (x_left_bottom, y_left_bottom - label_size[1]),
(x_left_bottom + label_size[0], y_left_bottom + base_line),
(255, 255, 255), cv2.FILLED)
cv2.putText(frame, label, (x_left_bottom, y_left_bottom),
cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 0, 0))
t, _ = net.getPerfProfile()
label = 'Inference time: %.2f ms' % (t * 1000.0 / cv2.getTickFrequency())
cv2.putText(frame, label, (0, 15), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 255, 0))
cv2.imshow(win_name, frame)
source.release()
cv2.destroyWindow(win_name)
댓글남기기