当前位置: 首页 > 科技观察

《蚂蚁呀嘿》@开发者:使用华为云ModelArts自己实现一个

时间:2023-03-12 06:58:13 科技观察

环境。准备ModelArts和她最好的搭档——对象存储服务OBS。你可以把它理解为“网盘”,主要用来存放数据集、模型或其他文件。ModelArts:https://www.huaweicloud.com/product/modelarts.htmlAI开发平台ModelArts是面向开发者的一站式AI开发平台,为机器学习和深度学习提供海量数据预处理和半自动标注,以及大规模分布式训练、模型自动生成、端边云模型按需部署,帮助用户快速创建和部署模型,管理全周期AI工作流。OBS:https://www.huaweicloud.com/product/obs.html对象存储服务(ObjectStorageService,OBS)提供海量、安全、高可靠、低成本的数据存储能力,允许用户存储任意类型、任意大小的数据.适用于企业备份/归档、视频点播、视频监控等多种数据存储场景。使用以上服务会收取一定的费用,也可以尝试认证为开发者,获得一定的代金券。当然,关注ModelArts,加入ModelArts开发者社区,也将有机会获得大额代金券。模型和材料准备此实现使用图像动画的一阶运动模型。这是一种基于关键点和局部仿射变换的图像动画方法。论文地址:https://arxiv.org/abs/2003.00196下载预训练模型和资料最近比较紧缺。非常抱歉,无法为您提供直接下载的OBS路径。我已经把预训练好的模型和素材上传到AIGallery数据集了。请自行下载到您的OBS。当然,如果你有可以快速下载的地址,欢迎分享!源文件地址:https://drive.google.com/drive/folders/1kZ1gCnpfU0BnpdU47pLM_TQ6RypDDqgw?usp=sharing或者https://drive.google.com/drive/folders/16inDpBRPT1UC0YMGMX3dKvRnOUsf5Dhn?usp=sharing因为是源文件,它不包含“蚂蚁雅黑”的原始视频素材,但我已经将其添加到AI图库数据集AI图库是一个基于ModelArts构建的开发者生态社区,提供模型、算法、HiLens的分享和交易技能、数据集等。因此,您可以将分发的数据集或文件下载到您的OBS中,使用时请遵守相应的政策和规则!打开https://marketplace.huaweicloud.com/markets/aihub/datasets/detail/?content_id=00bc20c3-2a00-4231-bdfd-dfa3eb62a46d点击下载按钮进入下载详情,设置OBS路径,确认下载上传模型和材质下载到自己的OBS中,比如我的路径是/modelarts-lab/first-order-motion-model。下载进度可在爱图集个人中心-我的下载中查看。JUSTDOIT——ModelArts我的笔记本接下来,开始使用ModelArts——我的笔记本,这是一个开箱即用的在线集成开发环境,可以轻松构建、训练、调试和部署机器学习算法和模型。目前使用的是免费规格体验,需要注意的是72小时内不使用资源会被释放,需要注意文件备份。当然你也可以使用Notebook的免费计算能力,记得选择GPU环境哦!我们在使用笔记本电脑时,CPU环境默认是开启的,所以我们需要切换到GPU环境。目前ModelArts-我的笔记本电脑支持8vCPU+64GiB+1xTeslaV100-PCIE-32GB。新建一个Pytorch1.0的.ipynb文件,开始我们的“蚂蚁嘿嘿”体验之旅。下载代码!gitclonehttps://github.com/AliaksandrSiarohin/first-order-model#或!gitclonehttps://codehub.devcloud.cn-north-4.huaweicloud.com/ai-pome-free00001/first-order-model.gitgithub比较慢,建议转移到华为云代码托管平台再拉取。这里提供了我缓存的代码仓库地址,就不演示如何将github代码迁移到codehub了。(不保证我的账号欠费不能访问,所以建议大家自行上传代码到Notebook!)使用魔星复制文件到JupyterLab通过复制之前下载到OBS的模型和素材Moxing,并在此处将它们替换为您的OBS路径。02.mp4是《蚂蚁嘿嘿》的模板视频,#这里做个小测试——使用魔星下载文件importmoxingasmox#这里需要替换你的OBS地址mox.file.copy_parallel('obs://modelarts-lab/first-order-motion-model/first-order-motion-model-20210226T075740Z-001.zip','first-order-motion-model.zip')mox.file.copy_parallel('obs://modelarts-lab/first-order-motion-model/02.mp4','02.mp4')#Unzip!unzipfirst-order-motion-model.zip#模板视频!mv02.mp4first-order-motion-model/JUSTDOIT准备工作完成后,卷起袖子开始吧!切换到first-order-model目录,然后将source_image_path中的路径替换为“你的脸”所在的路径,人脸的照片可以直接通过Notebook的文件上传功能上传。当然,您也可以将默认的“蚂蚁牙黑”视频替换为您自己的自定义mp4格式视频。一路执行看合成前的预览。cdfirst-order-modelimportimageioimportnumpyasnpimportmatplotlib.pyplotaspltimportmatplotlib.animationasanimationfromskimage.transformimportresizefromIPython.displayimportHTMLimportwarningswarnings.filterwarnings("ignore")#在这里替换For你的图片路径,图片大小最好是256*256,这里默认是普京大帝source_image_path='/home/ma-user/work/first-order-motion-model/02.png'source_image=imageio.imread(source_image_path)#这个可以换成你的视频路径,默认是“蚁牙黑”reader_path='/home/ma-user/work/first-order-motion-model/02.mp4'reader=imageio.get_reader(reader_path)#将图片和视频调整为256x256source_image=resize(source_image,(256,256))[...,:3]fps=reader.get_meta_data()['fps']driving_video=[]try:forimin阅读器:driving_video.append(im)除了RuntimeError:通过reader.close()driving_video=[resize(frame,(256,256))[...,:3]forframeindriving_video]defdisplay(sourcee,驾驶,generated=None):fig=plt.figure(figsize=(8+4*(generatedisnotNone),6))ims=[]foriinrange(len(driving)):cols=[source]cols。append(driving[i])如果generated不是None:cols.append(generated[i])im=plt.imshow(np.concatenate(cols,axis=1),animated=True)plt.axis('off')ims.append([im])ani=animation.ArtistAnimation(fig,ims,interval=50,repeat_delay=1000)plt.close()returnaniHTML(display(source_image,driving_video).to_html5_video())创建模型和加载检查点这一步完成后,我们就会得到“蚂蚁嗨”的视频——“generated.mp4”,这就结束了吗?然而,问题来了...fromdemoimportload_checkpointsgenerator,kp_detector=load_checkpoints(config_path='config/vox-256.yaml',checkpoint_path='/home/ma-user/work/first-order-motion-model/vox-cpk.pth.tar')fromdemoimportmake_animationfromskimageimportimg_as_ubytepredictions=make_animation(source_image,driving_video,generator,kp_detector,relative=True)保存生成的视频imageio.mimsave('../generated.mp4',[img_as_ubyte(frame)forframeinpredictions],fps=fps)#可以在Notebook根目录下找到,/home/ma-user/work/HTML(display(source_image,driving_video,predictions).to_html5_video())后续操作和我一样直接下载然后打开上面操作的产物——generated.mp4,你一定和我一样一头雾水:声音呢?是的,声音丢失了,因为核心代码只处理图像,声音需要我们自己找回,因为我们使用moviepy不仅如此,我们还可以给视频加水印。安装moviepy为视频编辑做准备#安装视频编辑神器moviepy!pipinstallmoviepy给视频添加背景音乐#给生成的视频添加源视频声音frommoviepy.editorimport*videoclip_1=VideoFileClip(reader_path)videoclip_2=VideoFileClip("../generated.mp4")audio_1=videoclip_1.audiovideoclip_3=videoclip_2.set_audio(audio_1)videoclip_3.write_videofile("../result.mp4",audio_codec="aac")别人花钱打水印,我还要加水印,欢迎来到千年发展目标!#视频也可以加水印video=VideoFileClip("../result.mp4")#加水印图片请自行上传logo=(ImageClip("/home/ma-user/work/first-order-motion-model/water.png").set_duration(video.duration)#Watermarkduration.resize(height=50)#水印的高度会按比例缩放。margin(right=0,top=0,opacity=1)#WatermarkmarginAndtransparency.set_pos(("left","top")))#Watermarkpositionfinal=CompositeVideoClip([video,logo])final.write_videofile("../result_water.mp4",audio_codec="aac")final_reader=imageio.get_reader("../result_water.mp4")fps=final_reader.get_meta_data()['fps']result_water_video=[]try:foriminfinal_reader:result_water_video.append(im)exceptRuntimeError:passreader.close()result_water_video=[resize(frame,(256,256))[...,:3]forframeinresult_water_video]HTML(display(source_image,driving_video,result_water_video).to_html5_video())到目前为止,这个实现首先到此结束,“多人运动”的解决办法——合影还没探索,欢迎大家在评论区分享指导,谢谢!最后打个小广告:欢迎广州朋友加入我们,一起共建ModelArts生态!