CV:利用人工智能算法让古代皇帝画像以及古代四大美女画像动起来(模仿偶像胡歌剧中角色表情动作)
2020-08-30 16:48
1766 查看
CV:利用人工智能算法让古代皇帝画像以及古代四大美女画像动起来(模仿偶像胡歌剧中角色表情动作)
利用人工智能算法让古代四大美女画像动起来(模仿偶像胡歌剧中角色表情动作)
导读:本论文来自NeurIPS2019,该算法中主要采用一阶运动模型的思想,用一组自学习的关键点和局部仿射变换,建立了复杂运动模型。模型由运动估计模块和图像生成模块两个主要部分组成。首先进行关键点检测,然后根据关键点,进行运动估计,最后使用图像生成模块,生成最终效果。
额,哈哈,不好意思了,又拿我的偶像胡歌下手啦,视频截取来源偶像胡歌在《猎场》中的一角色。
目录
利用人工智能算法让经典图片根据自定义动作嗨起来(将一张静态人像图片转为带表情动作视频)
利用人工智能算法让古代皇帝画像动起来(模仿偶像胡歌《猎场》剧中角色表情动作)
利用人工智能算法让经典图片根据自定义动作嗨起来(将一张静态人像图片转为带表情动作视频)
相关论文
Paper:《First Order Motion Model for Image Animation》翻译与解读
输出结果
利用人工智能算法让古代皇帝画像动起来(模仿偶像胡歌《猎场》剧中角色表情动作)
利用人工智能算法让古代四大美女画像动起来
实现代码
更新中……
[code]import imageio import torch from tqdm import tqdm from animate import normalize_kp from demo import load_checkpoints import numpy as np import matplotlib.pyplot as plt import matplotlib.animation as animation from skimage import img_as_ubyte from skimage.transform import resize import cv2 import os import argparse ap = argparse.ArgumentParser() ap.add_argument("-i", "--input_image", required=True,help="Path to image to animate") ap.add_argument("-c", "--checkpoint", required=True,help="Path to checkpoint") ap.add_argument("-v","--input_video", required=False, help="Path to video input") args = vars(ap.parse_args()) print("[INFO] loading source image and checkpoint...") source_path = args['input_image'] checkpoint_path = args['checkpoint'] if args['input_video']: video_path = args['input_video'] else: video_path = None source_image = imageio.imread(source_path) source_image = resize(source_image,(256,256))[..., :3] generator, kp_detector = load_checkpoints(config_path='config/vox-256.yaml', checkpoint_path=checkpoint_path) if not os.path.exists('output'): os.mkdir('output') relative=True adapt_movement_scale=True cpu=False if video_path: cap = cv2.VideoCapture(video_path) print("[INFO] Loading video from the given path") else: cap = cv2.VideoCapture(0) print("[INFO] Initializing front camera...") fourcc = cv2.VideoWriter_fourcc(*'MJPG') out1 = cv2.VideoWriter('output/Animation_HuGe_02.avi', fourcc, 12, (256*3 , 256), True) cv2_source = cv2.cvtColor(source_image.astype('float32'),cv2.COLOR_BGR2RGB) with torch.no_grad() : predictions = [] source = torch.tensor(source_image[np.newaxis].astype(np.float32)).permute(0, 3, 1, 2) if not cpu: source = source.cuda() kp_source = kp_detector(source) count = 0 while(True): ret, frame = cap.read() frame = cv2.flip(frame,1) if ret == True: if not video_path: x = 143 y = 87 w = 322 h = 322 frame = frame[y:y+h,x:x+w] frame1 = resize(frame,(256,256))[..., :3] if count == 0: source_image1 = frame1 source1 = torch.tensor(source_image1[np.newaxis].astype(np.float32)).permute(0, 3, 1, 2) kp_driving_initial = kp_detector(source1) frame_test = torch.tensor(frame1[np.newaxis].astype(np.float32)).permute(0, 3, 1, 2) driving_frame = frame_test if not cpu: driving_frame = driving_frame.cuda() kp_driving = kp_detector(driving_frame) kp_norm = normalize_kp(kp_source=kp_source, kp_driving=kp_driving, kp_driving_initial=kp_driving_initial, use_relative_movement=relative, use_relative_jacobian=relative, adapt_movement_scale=adapt_movement_scale) out = generator(source, kp_source=kp_source, kp_driving=kp_norm) predictions.append(np.transpose(out['prediction'].data.cpu().numpy(), [0, 2, 3, 1])[0]) im = np.transpose(out['prediction'].data.cpu().numpy(), [0, 2, 3, 1])[0] im = cv2.cvtColor(im,cv2.COLOR_RGB2BGR) joinedFrame = np.concatenate((cv2_source,im,frame1),axis=1) cv2.imshow('Test',joinedFrame) out1.write(img_as_ubyte(joinedFrame)) count += 1 if cv2.waitKey(20) & 0xFF == ord('q'): break else: break cap.release() out1.release() cv2.destroyAllWindows()
相关文章推荐
- CV之FC:人脸识别之判断相似度极高的国内外明星根据人工智能算法(AP云)预测判别是否为同一个人
- 利用Python_keras编写简单BP神经网络以及初步分析的算法
- 【算法】矩阵的快速幂以及利用快速幂去解题
- DayDayUp:关于本博客所有人工智能算法案例代码以及回答网友提问——2019年,博主会逐步开设线上辅导课程,敬请关注!
- CV:基于人工智能算法实现人脸口罩的实时检测,文章已丢失——daiding
- DL之FAN:基于人工智能算法偶像和明星渐变卡通形象
- 机器学习-回归算法中利用RidgeCV回归、LASSOCV回归、Elastic NetCV弹性网算法络解决过拟合问题
- 机器学习分类之结合实际应用介绍KNN算法原理以及利用sklearn进行分类预测
- 汇编中的冒泡排序以及算法改进(利用标志位)
- 结对编程就是两个人用同一个设计、同一个算法以及同一段代码,并且两人的角色可以随时互换;
- 【人工智能】算法--Precision/Recall和ROC曲线原理以及Matlab源码
- 自然语言处理技术(NLP)在推荐系统中的应用 原2017.06.29人工智能头条 作者: 张相於,58集团算法架构师,转转搜索推荐部负责人,负责搜索、推荐以及算法相关工作。多年来主要从事推荐系统以及机
- 利用高级Java、算法、三角学、分布计算设计自己的智能机器人--(重锤痛击续2)
- 关于JavaScript闭包/匿名函数,以及垃圾回收算法的小结
- C语言中自定义Split函数分割字符串以及利用strtol函数把字符串转换为数字的实例
- 利用Forms验证(自定义、角色提供程序、单点登录)登陆
- 初学java利用多线程模仿手机闹钟,代码简单朴实易懂!
- C#中利用Process类调用外部程序以及执行dos命令(转)
- R中logistics回归分析以及K-CV