code clean up

pull/6/head
Alessandro Cauduro 4 years ago
parent dd367e180a
commit 0651327367

@ -33,19 +33,19 @@ parser.add_argument('--system', type = str, default = "win")
args = parser.parse_args()
webcam_id = args.webcam_id
gpu_id = args.gpu_id
stream_id = args.stream_id
system = args.system
webcam_height = 480
webcam_width = 640
screen_width, screen_height = pyautogui.size()
img_shape = [256, 256, 0]
system = args.system
if system=="linux":
print("Linux version, importing FakeWebCam")
import pyfakewebcam
stream_id = args.stream_id
first_order_path = 'first-order-model/'
sys.path.insert(0,first_order_path)
reset = True
@ -67,7 +67,6 @@ if (torch.cuda.is_available()):
print("Device",torch.cuda.current_device())
img_list = []
print("Scanning /media folder for images to use...")
for filename in os.listdir(media_path):
@ -77,10 +76,6 @@ for filename in os.listdir(media_path):
#print(img_list, len(img_list))
############## end setup ####
def main():
@ -108,16 +103,17 @@ def main():
# create windows
cv2.namedWindow('Face', cv2.WINDOW_GUI_NORMAL) # extracted face
cv2.moveWindow('Face', int(screen_width/2)-150, 100)
cv2.moveWindow('Face', int(screen_width//2)-150, 100)
cv2.resizeWindow('Face', 256,256)
cv2.namedWindow('DeepFake', cv2.WINDOW_GUI_NORMAL) # face transformation
cv2.moveWindow('DeepFake', int(screen_width/2)+150, 100)
cv2.resizeWindow('DeepFake', int(img_shape[1] / img_shape[0] * 256), 256)
cv2.moveWindow('DeepFake', int(screen_width//2)+150, 100)
img_shape = source_image.shape
cv2.resizeWindow('DeepFake', int(img_shape[1] // img_shape[0] * 256), 256)
cv2.namedWindow('Stream', cv2.WINDOW_GUI_NORMAL) # rendered to fake webcam
cv2.moveWindow('Stream', int(screen_width/2)-int(webcam_width/2), 400)
cv2.moveWindow('Stream', int(screen_width//2)-int(webcam_width//2), 400)
cv2.resizeWindow('Stream', webcam_width,webcam_height)
@ -133,25 +129,42 @@ def main():
x1,y1,x2,y2 = find_face_cut(net,frame)
previous = cut_face_window(x1,y1,x2,y2,frame)
reset = False
#img_shape = source_image.shape
#cv2.resizeWindow('DeepFake', int(img_shape[1] // img_shape[0] * 256), 256)
#cv2.imshow('Previous',previous)
curr_face = cut_face_window(x1,y1,x2,y2,frame)
#cv2.imshow('Curr Face',curr_face)
#cv2.imshow('Source Image',source_image)
cv2.imshow('Previous',previous)
cv2.imshow('Curr Face',curr_face)
cv2.imshow('Source Image',source_image)
print('previous=',previous.shape)
print('curr_face=',curr_face.shape)
print('source=',source_image.shape)
deep_fake = process_image(source_image,previous,curr_face,net, generator, kp_detector, relative)
deep_fake = cv2.cvtColor(deep_fake, cv2.COLOR_RGB2BGR)
print("deep_fake",deep_fake.shape)
#cv2.imshow('Webcam', frame) - get face
cv2.imshow('Face', curr_face)
cv2.imshow('DeepFake', deep_fake)
deep_fake = cv2.cvtColor(deep_fake, cv2.COLOR_RGB2BGR)
rgb = cv2.resize(deep_fake,(int(source_image.shape[0] // source_image.shape[1] * 480),480))
rgb = cv2.resize(deep_fake,(int(img_shape[1] / img_shape[0] * 480),480))
# pad image
x_border = int((640-(img_shape[1] / img_shape[0] * 480))/2)
y_border = int((480-(img_shape[0] / img_shape[1] * 640))/2)
stream_v = cv2.copyMakeBorder(rgb, y_border if y_border >=0 else 0, y_border if y_border >=0 else 0, x_border if x_border >=0 else 0, x_border if x_border >=0 else 0, cv2.BORDER_CONSTANT)
x_border = int((640-(img_shape[1] // img_shape[0] * 480))//2)
#y_border = int((480-(img_shape[0] // img_shape[1] * 640))//2)
stream_v = cv2.copyMakeBorder(rgb, 0, 0, x_border if x_border >=0 else 0, x_border if x_border >=0 else 0, cv2.BORDER_CONSTANT)
cv2.imshow('Webcam', frame)
cv2.imshow('Face', curr_face)
cv2.imshow('DeepFake', deep_fake)
#cv2.imshow('Previous', previous)
#cv2.imshow('RGB', rgb)
#cv2.imshow('Source Image', source_image)
cv2.imshow('Stream',stream_v)
#time.sleep(1/30.0)
@ -196,12 +209,8 @@ def main():
# transform face with first-order-model
def process_image(source_image,base,current,net, generator,kp_detector,relative):
predictions = make_animation(source_image, [base,current], generator, kp_detector, relative=relative, adapt_movement_scale=False, cpu=False)
#print("Device",torch.cuda.current_device())
#print("Device Name:",torch.cuda.get_device_name(gpu_id))
# predictions = [1]# predictions[..., ::-1]
# predictions = (np.clip(predictions, 0, 1) * 255).astype(np.uint8)
return predictions[1]
predictions = make_animation(source_image, [base,current], generator, kp_detector, relative=relative, adapt_movement_scale=False)
return predictions[1]
def load_face_model():
modelFile = f"{model_path}/res10_300x300_ssd_iter_140000.caffemodel"
@ -210,13 +219,8 @@ def load_face_model():
return net
def cut_face_window(x1,y1,x2,y2,frame):
cut_x1 = x1
cut_y1 = y1
cut_x2 = x2
cut_y2 = y2
frame = frame[cut_y1:cut_y2,cut_x1:cut_x2]
face = resize(frame, (256, 256))[..., :3]
frame = frame[y1:y2,x1:x2]
face = resize(frame, (256, 256))# [..., :3]
return face
# find the face in webcam stream and center a 256x256 window
@ -237,15 +241,15 @@ def find_face_cut(net,face,previous=False):
x2 = int(detections[0, 0, i, 5] * frameWidth)
y2 = int(detections[0, 0, i, 6] * frameHeight)
face_margin_w = int(256 - (abs(x1-x2) -.5))
face_margin_h = int(256 - (abs(y1-y2) -.5))
face_margin_w = int(256 - (abs(x1-x2)))
face_margin_h = int(256 - (abs(y1-y2)))
cut_x1 = (x1 - int(face_margin_w/2))
cut_x1 = (x1 - int(face_margin_w//2))
if cut_x1<0: cut_x1=0
cut_y1 = y1 - int(2*face_margin_h/3)
cut_y1 = y1 - int(2*face_margin_h//3)
if cut_y1<0: cut_y1=0
cut_x2 = x2 + int(face_margin_w/2)
cut_y2 = y2 + int(face_margin_h/3)
cut_x2 = x2 + int(face_margin_w//2)
cut_y2 = y2 + int(face_margin_h//3)
if not face_found:
print("No face detected in video")
@ -261,8 +265,6 @@ def find_face_cut(net,face,previous=False):
def readimage():
global img_list,img_shape
img = imageio.imread(img_list[pos])
img_shape = img.shape
cv2.resizeWindow('DeepFake', int(img_shape[1] / img_shape[0] * 256), 256)
img = resize(img, (256, 256))[..., :3]
return img

Loading…
Cancel
Save