CV:利用人工智能算法让古代皇帝画像以及古代四大美女画像动起来(模仿偶像胡歌剧中角色表情动作)

简介: CV:利用人工智能算法让古代皇帝画像以及古代四大美女画像动起来(模仿偶像胡歌剧中角色表情动作)

利用人工智能算法让经典图片根据自定义动作嗨起来(将一张静态人像图片转为带表情动作视频)


相关论文


Paper:《First Order Motion Model for Image Animation》翻译与解读https://yunyaniu.blog.csdn.net/article/details/108306885



输出结果


利用人工智能算法让古代皇帝画像动起来(模仿偶像胡歌《猎场》剧中角色表情动作)

image.png




利用人工智能算法让古代四大美女画像动起来


image.png




实现代码

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()


相关文章
|
9月前
|
人工智能 算法 搜索推荐
电商API的“AI革命”:全球万亿市场如何被算法重新定义?
AI+电商API正引领智能商业变革,通过智能推荐、动态定价与自动化运营三大核心场景,大幅提升转化率、利润率与用户体验。2025年,75%电商API将具备个性化能力,90%业务实现智能决策,AI与API的深度融合将成为未来电商竞争的关键基石。
|
12月前
|
人工智能 自然语言处理 算法
阿里云 AI 搜索开放平台:从算法到业务——AI 搜索驱动企业智能化升级
本文介绍了阿里云 AI 搜索开放平台的技术的特点及其在各行业的应用。
1169 3
|
7月前
|
机器学习/深度学习 人工智能 算法
当AI提示词遇见精密算法:TimeGuessr如何用数学魔法打造文化游戏新体验
TimeGuessr融合AI与历史文化,首创时间与空间双维度评分体系,结合分段惩罚、Haversine距离计算与加权算法,辅以连击、速度与完美奖励机制,实现公平且富挑战性的游戏体验。
|
人工智能 自然语言处理 vr&ar
当人类关系重构:从“相互需要”到“鹅卵石化”——生成式人工智能(GAI)认证的角色与影响
在数字化浪潮下,人类关系从“相互需要”逐渐转变为“鹅卵石化”的复杂结构。生成式人工智能(GAI)作为新兴技术,正深刻影响这一变革。GAI认证的推出,不仅填补了技能评估空白,还通过促进知识共享、增强信任与合作、推动创新发展,助力人类关系的重构。未来,随着GAI技术发展和认证体系完善,人类社交网络将更紧密高效,持续推动社会进步。
|
9月前
|
机器学习/深度学习 人工智能 算法
AI-Compass RLHF人类反馈强化学习技术栈:集成TRL、OpenRLHF、veRL等框架,涵盖PPO、DPO算法实现大模型人类价值对齐
AI-Compass RLHF人类反馈强化学习技术栈:集成TRL、OpenRLHF、veRL等框架,涵盖PPO、DPO算法实现大模型人类价值对齐
 AI-Compass RLHF人类反馈强化学习技术栈:集成TRL、OpenRLHF、veRL等框架,涵盖PPO、DPO算法实现大模型人类价值对齐
|
人工智能 编解码 算法
DeepSeek加持的通义灵码2.0 AI程序员实战案例:助力嵌入式开发中的算法生成革新
本文介绍了通义灵码2.0 AI程序员在嵌入式开发中的实战应用。通过安装VS Code插件并登录阿里云账号,用户可切换至DeepSeek V3模型,利用其强大的代码生成能力。实战案例中,AI程序员根据自然语言描述快速生成了C语言的base64编解码算法,包括源代码、头文件、测试代码和CMake编译脚本。即使在编译错误和需求迭代的情况下,AI程序员也能迅速分析问题并修复代码,最终成功实现功能。作者认为,通义灵码2.0显著提升了开发效率,打破了编程语言限制,是AI编程从辅助工具向工程级协同开发转变的重要标志,值得开发者广泛使用。
9364 71
DeepSeek加持的通义灵码2.0 AI程序员实战案例:助力嵌入式开发中的算法生成革新
|
9月前
|
机器学习/深度学习 人工智能 算法
AI-Compass 强化学习模块:理论到实战完整RL技术生态,涵盖10+主流框架、多智能体算法、游戏AI与金融量化应用
AI-Compass 强化学习模块:理论到实战完整RL技术生态,涵盖10+主流框架、多智能体算法、游戏AI与金融量化应用
|
12月前
|
机器学习/深度学习 人工智能 JSON
这个AI把arXiv变成代码工厂,快速复现顶会算法!Paper2Code:AI论文自动转代码神器,多智能体框架颠覆科研复现
Paper2Code是由韩国科学技术院与DeepAuto.ai联合开发的多智能体框架,通过规划、分析和代码生成三阶段流程,将机器学习论文自动转化为可执行代码仓库,显著提升科研复现效率。
1524 19
这个AI把arXiv变成代码工厂,快速复现顶会算法!Paper2Code:AI论文自动转代码神器,多智能体框架颠覆科研复现
|
8月前
|
人工智能 算法 计算机视觉
只需完成手画线稿,让AI算法帮你自动上色
本文介绍了如何利用图像处理技术生成手绘风格图像及自动上色的方法。内容涵盖图像灰度化、梯度调整、虚拟深度实现手绘效果,以及使用 Python 编程实现相关算法。此外,还介绍了 AI 工具 Style2Paints V4.5,其可为线稿自动上色并支持多种线稿类型,如插画和手绘铅笔稿,适用于艺术创作与图像处理领域。

热门文章

最新文章