Face/recognition_video.py

284 lines
12 KiB
Python

import time
from centerface import CenterFace
from skimage import transform as trans
import numpy as np
import torch
import cv2
from backbones import iresnet100, iresnet18
from create_database import findOne, load_npy,findAll
from PIL import Image, ImageDraw,ImageFont
def show():
cap = cv2.VideoCapture("test.mp4")
ret, frame = cap.read()
h, w = frame.shape[:2]
centerface = CenterFace()
size = (int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)),
int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT)))
out = cv2.VideoWriter('ccvt6.mp4', cv2.VideoWriter_fourcc('m', 'p', '4', 'v'), 30, size)
while ret:
start_time = time.time()
dets, lms = centerface(frame, h, w, threshold=0.35)
end_time = time.time()
print("findOne time: " + str(end_time - start_time))
for det in dets:
boxes, score = det[:4], det[4]
cv2.rectangle(frame, (int(boxes[0]), int(boxes[1])), (int(boxes[2]), int(boxes[3])), (2, 255, 0), 1)
for lm in lms:
for i in range(0, 5):
cv2.circle(frame, (int(lm[i * 2]), int(lm[i * 2 + 1])), 2, (0, 0, 255), -1)
cv2.imshow('out', frame)
out.write(frame)
# Press Q on keyboard to stop recording
if cv2.waitKey(1) & 0xFF == ord('q'):
break
ret, frame = cap.read()
cap.release()
out.release()
cv2.destroyAllWindows()
def video():
model = iresnet100()
model.load_state_dict(torch.load("./model/backbone100.pth", map_location="cpu"))
model.eval()
k_v = load_npy("student.npy")
count = 0
#cap = cv2.VideoCapture("http://ivi.bupt.edu.cn/hls/cctv6hd.m3u8")
cap = cv2.VideoCapture("software.mp4")
ret, frame = cap.read()
h, w = frame.shape[:2]
size = (int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)),
int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT)))
fps = cap.get(cv2.CAP_PROP_FPS)
out = cv2.VideoWriter('ttt.mp4', cv2.VideoWriter_fourcc('m', 'p', '4', 'v'), fps, size)
centerface = CenterFace()
while ret:
start_time = time.time()
dets, lms = centerface(frame, h, w, threshold=0.35)
end_time = time.time()
print("detectOneframe time: " + str(end_time - start_time))
face_list = []
name_list = []
for i,det in enumerate(dets):
boxes, score = det[:4], det[4]
img_w = int(boxes[2] - boxes[0])
img_h = int(boxes[3] - boxes[1])
distace = int(abs(img_w - img_h) / 2)
img_w1 = int(boxes[0]) - distace
img_w2 = int(boxes[2]) + distace
# print(img_w,img_h,distace,max_hw)
if img_w <= img_h and img_w1 >= 0 and img_w2 <= frame.shape[1]:
img112 = frame[int(boxes[1]):int(boxes[3]), img_w1:img_w2, :]
img112 = cv2.resize(img112, (112, 112))
# cv2.imwrite("./img/man"+str(count)+".jpg", img112)
# count += 1
face_list.append(img112)
else:
img112 = frame[int(boxes[1]):int(boxes[3]), int(boxes[0]):int(boxes[2]), :]
img112 = cv2.resize(img112, (112, 112))
face_list.append(img112)
if len(face_list) != 0:
face_list = np.array(face_list)
face_list = face_list.transpose((0,3,1,2))
face_list = np.array(face_list, dtype=np.float32)
face_list -= 127.5
face_list /= 127.5
print(face_list.shape)
face_list = torch.from_numpy(face_list)
start_time = time.time()
for face in face_list:
face = face[np.newaxis, :, :, :]
name_list.append(findOne(face,model,k_v))
end_time = time.time()
print("findOneframe time: "+str(end_time-start_time))
img_PIL = Image.fromarray(cv2.cvtColor(frame, cv2.COLOR_BGR2RGB))
draw = ImageDraw.Draw(img_PIL)
font = ImageFont.truetype("font.ttf",12)
for i,det in enumerate(dets):
boxes, score = det[:4], det[4]
# cv2.rectangle(frame, (int(boxes[0]), int(boxes[1])), (int(boxes[2]), int(boxes[3])), (2, 255, 0), 1)
# cv2.putText(frame, name_list[i], (int(boxes[0]), int(boxes[1])), cv2.FONT_HERSHEY_COMPLEX, 0.4,
# (0, 225, 255), 1)
name = name_list[i][:3]
if not isinstance(name, np.unicode):
name = name.decode('utf8')
draw.text((int(boxes[0]), int(boxes[1])),name,fill=(0, 225, 255),font=font)
draw.rectangle((int(boxes[0]), int(boxes[1]),int(boxes[2]), int(boxes[3])),outline="green",width=1)
frame = cv2.cvtColor(np.asarray(img_PIL),cv2.COLOR_RGB2BGR)
cv2.imshow('out', frame)
out.write(frame)
# Press Q on keyboard to stop recording
if cv2.waitKey(1) & 0xFF == ord('q'):
break
ret, frame = cap.read()
cap.release()
out.release()
cv2.destroyAllWindows()
def video_GPU():
model = iresnet100()
model.load_state_dict(torch.load("./model/backbone100.pth", map_location="cpu"))
model.eval()
k_v = load_npy("student.npy")
count = 0
#cap = cv2.VideoCapture("http://ivi.bupt.edu.cn/hls/cctv6hd.m3u8")
cap = cv2.VideoCapture("software.mp4")
ret, frame = cap.read()
h, w = frame.shape[:2]
size = (int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)),
int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT)))
fps = cap.get(cv2.CAP_PROP_FPS)
out = cv2.VideoWriter('ttt.mp4', cv2.VideoWriter_fourcc('m', 'p', '4', 'v'), fps, size)
centerface = CenterFace()
while ret:
start_time = time.time()
dets, lms = centerface(frame, h, w, threshold=0.35)
end_time = time.time()
print("detectOneframe time: " + str(end_time - start_time))
face_list = []
name_list = []
for i,det in enumerate(dets):
boxes, score = det[:4], det[4]
img_w = int(boxes[2] - boxes[0])
img_h = int(boxes[3] - boxes[1])
distace = int(abs(img_w - img_h) / 2)
img_w1 = int(boxes[0]) - distace
img_w2 = int(boxes[2]) + distace
# print(img_w,img_h,distace,max_hw)
if img_w <= img_h and img_w1 >= 0 and img_w2 <= frame.shape[1]:
img112 = frame[int(boxes[1]):int(boxes[3]), img_w1:img_w2, :]
img112 = cv2.resize(img112, (112, 112))
# cv2.imwrite("./img/man"+str(count)+".jpg", img112)
# count += 1
face_list.append(img112)
else:
img112 = frame[int(boxes[1]):int(boxes[3]), int(boxes[0]):int(boxes[2]), :]
img112 = cv2.resize(img112, (112, 112))
face_list.append(img112)
if len(face_list) != 0:
face_list = np.array(face_list)
face_list = face_list.transpose((0,3,1,2))
face_list = np.array(face_list, dtype=np.float32)
face_list -= 127.5
face_list /= 127.5
print(face_list.shape)
face_list = torch.from_numpy(face_list)
start_time = time.time()
name_list = findAll(face_list, model, k_v)
# for face in face_list:
# face = face[np.newaxis, :, :, :]
#
# name_list.append(findOne(face,model,k_v))
end_time = time.time()
print("findOneframe time: "+str(end_time-start_time))
img_PIL = Image.fromarray(cv2.cvtColor(frame, cv2.COLOR_BGR2RGB))
draw = ImageDraw.Draw(img_PIL)
font = ImageFont.truetype("font.ttf",18)
for i,det in enumerate(dets):
boxes, score = det[:4], det[4]
# cv2.rectangle(frame, (int(boxes[0]), int(boxes[1])), (int(boxes[2]), int(boxes[3])), (2, 255, 0), 1)
# cv2.putText(frame, name_list[i], (int(boxes[0]), int(boxes[1])), cv2.FONT_HERSHEY_COMPLEX, 0.4,
# (0, 225, 255), 1)
name = name_list[i][:3]
if not isinstance(name, np.unicode):
name = name.decode('utf8')
draw.text((int(boxes[0]), int(boxes[1])),name,fill=(255, 0, 0),font=font)
draw.rectangle((int(boxes[0]), int(boxes[1]),int(boxes[2]), int(boxes[3])),outline="green",width=2)
frame = cv2.cvtColor(np.asarray(img_PIL),cv2.COLOR_RGB2BGR)
cv2.imshow('out', frame)
out.write(frame)
# Press Q on keyboard to stop recording
if cv2.waitKey(1) & 0xFF == ord('q'):
break
ret, frame = cap.read()
cap.release()
out.release()
cv2.destroyAllWindows()
def video_GPU_retinaface():
model = iresnet100()
model.load_state_dict(torch.load("./model/backbone100.pth", map_location="cpu"))
model.eval()
k_v = load_npy("student.npy")
count = 0
#cap = cv2.VideoCapture("http://ivi.bupt.edu.cn/hls/cctv6hd.m3u8")
cap = cv2.VideoCapture("software.mp4")
ret, frame = cap.read()
h, w = frame.shape[:2]
size = (int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)),
int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT)))
fps = cap.get(cv2.CAP_PROP_FPS)
out = cv2.VideoWriter('ttt.mp4', cv2.VideoWriter_fourcc('m', 'p', '4', 'v'), fps, size)
centerface = CenterFace()
while ret:
start_time = time.time()
dets, lms = centerface(frame, h, w, threshold=0.35)
end_time = time.time()
print("detectOneframe time: " + str(end_time - start_time))
face_list = []
name_list = []
print(dets.shape)
for i,det in enumerate(dets):
boxes, score = det[:4], det[4]
img_w = int(boxes[2] - boxes[0])
img_h = int(boxes[3] - boxes[1])
distace = int(abs(img_w - img_h) / 2)
img_w1 = int(boxes[0]) - distace
img_w2 = int(boxes[2]) + distace
# print(img_w,img_h,distace,max_hw)
if img_w <= img_h and img_w1 >= 0 and img_w2 <= frame.shape[1]:
img112 = frame[int(boxes[1]):int(boxes[3]), img_w1:img_w2, :]
img112 = cv2.resize(img112, (112, 112))
# cv2.imwrite("./img/man"+str(count)+".jpg", img112)
# count += 1
face_list.append(img112)
else:
img112 = frame[int(boxes[1]):int(boxes[3]), int(boxes[0]):int(boxes[2]), :]
img112 = cv2.resize(img112, (112, 112))
face_list.append(img112)
if len(face_list) != 0:
face_list = np.array(face_list)
face_list = face_list.transpose((0,3,1,2))
face_list = np.array(face_list, dtype=np.float32)
face_list -= 127.5
face_list /= 127.5
print(face_list.shape)
face_list = torch.from_numpy(face_list)
start_time = time.time()
name_list = findAll(face_list, model, k_v)
# for face in face_list:
# face = face[np.newaxis, :, :, :]
#
# name_list.append(findOne(face,model,k_v))
end_time = time.time()
print("findOneframe time: "+str(end_time-start_time))
img_PIL = Image.fromarray(cv2.cvtColor(frame, cv2.COLOR_BGR2RGB))
draw = ImageDraw.Draw(img_PIL)
font = ImageFont.truetype("font.ttf",18)
for i,det in enumerate(dets):
boxes, score = det[:4], det[4]
# cv2.rectangle(frame, (int(boxes[0]), int(boxes[1])), (int(boxes[2]), int(boxes[3])), (2, 255, 0), 1)
# cv2.putText(frame, name_list[i], (int(boxes[0]), int(boxes[1])), cv2.FONT_HERSHEY_COMPLEX, 0.4,
# (0, 225, 255), 1)
name = name_list[i][:3]
if not isinstance(name, np.unicode):
name = name.decode('utf8')
draw.text((int(boxes[0]), int(boxes[1])),name,fill=(255, 0, 0),font=font)
draw.rectangle((int(boxes[0]), int(boxes[1]),int(boxes[2]), int(boxes[3])),outline="green",width=2)
frame = cv2.cvtColor(np.asarray(img_PIL),cv2.COLOR_RGB2BGR)
cv2.imshow('out', frame)
out.write(frame)
# Press Q on keyboard to stop recording
if cv2.waitKey(1) & 0xFF == ord('q'):
break
ret, frame = cap.read()
cap.release()
out.release()
cv2.destroyAllWindows()
video_GPU_retinaface()
#video_GPU()
#show()