打破次元壁,让游戏角色在指尖跳舞,简易的 AR 教程

4周前 (11-16 08:26)阅读1回复0
丸子
丸子
  • 管理员
  • 注册排名9
  • 经验值76440
  • 级别管理员
  • 主题15288
  • 回复0
楼主

本文介绍若何通过 Windows 自带的 Xbox Game Bar 录造游戏视频,并通过 Python 利用 u2net 的 AI 模子对视频停止布景去除,生成含有通明通道的视频。最初连系 Html5 的相机并播放 webm 视频,实现简单的 AR 才能。

本文介绍若何通过 Windows 自带的 Xbox Game Bar 录造游戏视频,并通过 Python 利用 u2net 的 AI 模子对视频停止布景去除,生成含有通明通道的视频。最初连系 Html5 的相机并播放 webm 视频,实现简单的 AR 才能。

做为一个海角明月刀游戏的端游老玩家,天刀的画量是没的说的。玩天刀的七年,我独一更大的收成就是拐了女伴侣回家。至此,双十一降临之际,我告急把之前想写的教程赶了出来。为了让独身的少侠能够在现实世界有本身游戏角色的陪同,不再那么孤寂,我可实是操碎了心,三更把网页赶了出来。其实独身和非独身的双十一区别不是很大,只是吃土的体例纷歧样罢了。话不多说,我们先来看下效果:

效果图

啊,不合错误,放错图了,下面那个,下面那个……

展开全文

效果图

在线演示地址:/

实现构想

加强现实(AR)那个概念想必各人都不生僻,根据其定义我们只需要将虚拟信息与实在世界合成就算的上是 AR 啦,那里我们不会用到三维建模、空间注册定位、智能交互等高峻上的手艺,也不会用到 ARCore、ARKit、Vuforia 等相关平台,今天仅实现简单的视频叠加效果。

在最末闪现上,我们通过海角明月刀客户端供给的海角一瞬功用录造视频素材,然后利用 AI 去除视频中的布景,生成含有 alpha 通明通道的视频。接着设想一个网页,翻开摄像头并播放那个视频,如许一来,一个简单的 AR 功用就实现了。

录造素材

在游戏中翻开海角一瞬摄影系统,利用自在镜头,将视角画面翻转 90 度,在粉饰中更改画面布景为第一个,如许便于后期抠图处置。关于灯光效果等其他设置各人根据本身的爱好来设置即可,当然衣服配饰什么的,优先考虑下后期抠图的效果。

海角一瞬

设置完成播放本身想录造的动做就能够筹办录造了,那里我利用的是 Windows 系统自带的 Xbox Game Bar ,按住 Win + G 呼出录造界面,点击录造按钮即可起头录造,你也能够间接按 Win + Alt + R 利用快速按键间接起头录造。关于 N 卡的用户,也可利用 NVIDIA GeForce Experience 的游戏录造功用停止录造。

那里我选择的动做是晨夕杏时茶时拆的春时舞,动做拖放后会反复施行,但是音乐只要一次,起头录造的时机可能会欠好掌握,那么动做能够在完毕前起头录造,然跋文得要 Ctrl + U 隐藏游戏 UI ,后期做裁剪就能够了。后期处置能够利用 必剪 [1] 等东西停止,导出 mov 格局。

视频处置 视频帧提取

视频抠图我们利用 Python 处置,当然为什么不消 After Effect 或是其他处置软件,以至必剪都带有抠图。话不克不及那么说,软件本身扣了,哪轮得到我写点代码呢?

那里会用到 OpenCV 、rembg 、PIL 等库。关于 AI 去布景能够看那一篇文章:《AI一键去布景》。

接下来,我们定义视频转换图片函数,先利用 cv2 将视频文件逐帧存储为 .jpg 文件

video =cv2.VideoCapture(video_name)

# 获取视频帧率fps =video.get(cv2.CAP_PROP_FPS)print(fps)

# 获取画面大小width =int(video.get(cv2.CAP_PROP_FRAME_WIDTH))height =int(video.get(cv2.CAP_PROP_FRAME_HEIGHT))size =(width,height)

# 获取帧数frame_num =str(video.get(7))name =int(math.pow(10,len(frame_num)))ret,frame =video.readwhileret:cv2.imwrite(save_path +str(name)+'.jpg',frame)ret,frame =video.readname +=1video.releasereturnfps,size,frame_num

施行挪用后,法式会将 video.mov 视频逐帧:

逐帧去布景

对逐帧保留的所有图片逐个停止去除布景操做:

output_dir='./output/'ifnotos.path.exists(output_dir):os.makedirs(output_dir)

files =[frames +i fori inos.listdir(frames)]forfiinfiles:fisave =fi.replace("frames","output").replace("jpg","png")ifnotos.path.exists(fisave):input =Image.open(fi)output=remove(input)output.save(fisave)

getRemoveBg("./frames/")

图片布景处置好的放在文件夹 output,上面的逐帧抠图确实很慢,归正还要写文章,一边写一边等了,没需要如今优化成多线程了。

导出PNG 视频合并

在我们得到一堆通明 PNG 的序列图后,只需要通过 ffmpeg 东西将其合并成视频即可。

需要安拆有 ffmpeg 软件,Windows 电脑需要设置装备摆设好情况变量。

ffmpeg

参数阐明:生成 30 帧的视频,输入一个是 png 序列,一个是 music.mp3 配乐文件,最初导出为 webm 格局。

网页效果

网页的设想十分简单,供给了强逼的手机后背摄像头画面的衬着,以及 webm 视频文件的播放。操做掌握按钮供给了全屏,视频文件的放大和缩小,以及起头播放功用。轻触角色会询问能否允许拜候摄像头,点击允许,之后就能够点击角色,将其拖放到适宜位置了。

网页界面 食用教程

1.克隆或下载存储库 文件

留意

需要留意的是,颠末测试,因为摄像头挪用和视频播放没有适配 IOS设备,别的是通明布景视频 webm 的视频编码 VP9 是一个由 Google 开发的开放格局,只要在 webkit 内核的阅读器才能够播放,所以那个网页仅有安卓用户能够一般拜候,在微信中或是手机版的 Chrome,Edge 阅读器拜候即可看到效果。

总结

录造的素材和春时舞的配乐各人可前去 Github 仓库,或前去 CSDN 下载 [2] 。

总体来说,最末的效果还算能够,就是抠图确实仍是存在很大的瑕疵。

希望天刀海角一瞬功用后期能够将布景增加一个绿幕,或者能够间接录造通明布景的视频,为少侠们创造更多的快乐和灵感。别的,N 卡的亮点,主动录造,图片形式等各类功用在 64 位呈现后就不断没再撑持了,如今 32 位退役就彻底用不了了。

“掌中舞罢箫声绝,三十六宫秋夜长。”

正午的阳光实好,少侠们,带上本身的游戏角色,去尽情起舞吧!

References

0
回帖

打破次元壁,让游戏角色在指尖跳舞,简易的 AR 教程 期待您的回复!

取消
载入表情清单……
载入颜色清单……
插入网络图片

取消确定

图片上传中
编辑器信息
提示信息