本文介绍如何通过 Windows 自带的 Xbox Game Bar 录制游戏视频,并通过 Python 使用 u2net 的 AI 模型对视频进行背景去除,生成含有透明通道的视频。最后结合 Html5 的相机并播放 webm 视频,实现简单的 AR 能力。
文章目录
作为一个天涯明月刀游戏的端游老玩家,天刀的画质是没的说的。玩天刀的七年,我唯一最大的收获就是拐了女朋友回家。至此,双十一来临之际,我紧急把之前想写的教程赶了出来。为了让单身的少侠可以在现实世界有自己游戏角色的陪伴,不再那么孤单,我可真是操碎了心,半夜把网页赶了出来。其实单身和非单身的双十一区别不是很大,只是吃土的方式不一样罢了。话不多说,我们先来看下效果:

啊,不对,放错图了,下面这个,下面这个……

在线演示地址:https://sangyuxiaowu.github.io/Wuxia_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 ,后期做裁剪就可以了。后期处理可以使用 必剪 等工具进行,导出 mov 格式。
视频抠图我们使用 Python 处理,当然为什么不用 After Effect 或是其他处理软件,甚至必剪都带有抠图。话不能这么说,软件自己扣了,哪轮得到我写点代码呢?
这里会用到 OpenCV 、rembg 、PIL 等库。关于 AI 去背景可以看这一篇文章:《AI一键去背景》。
#导入所需的库
import cv2
import os
import math
from PIL import Image
from rembg import remove
接下来,我们定义视频转换图片函数,先使用 cv2 将视频文件逐帧存储为 .jpg 文件
def getFrame(video_name, save_path):
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.read()
while ret:
cv2.imwrite(save_path + str(name) + '.jpg', frame)
ret, frame = video.read()
name += 1
video.release()
return fps, size, frame_num
执行调用后,程序会将 video.mov 视频逐帧:
#将视频按帧保存为图片
frame_path = "./frames/"
if not os.path.exists(frame_path):
os.makedirs(frame_path)
fps, size, frame_number = getFrame("video.mov", frame_path)
print(fps, size, frame_number)
对逐帧保存的所有图片逐个进行去除背景操作:
def getRemoveBg(frames):
output_dir='./output/'
if not os.path.exists(output_dir):
os.makedirs(output_dir)
files = [frames + i for i in os.listdir(frames)]
for fi in files:
fisave = fi.replace("frames","output").replace("jpg","png")
if not os.path.exists(fisave):
input =Image.open(fi)
output=remove(input)
output.save(fisave)
getRemoveBg("./frames/")
图片背景处理好的放在文件夹 output,上面的逐帧抠图确实很慢,反正还要写文章,一边写一边等了,没必要现在优化成多线程了。

在我们得到一堆透明 PNG 的序列图后,只需要通过 ffmpeg 工具将其合并成视频即可。
需要安装有 ffmpeg 软件,Windows 电脑需要配置好环境变量。
ffmpeg -r 30 -i output/1%06d.png -i music.mp3 -y output.webm

参数解释: 生成 30 帧的视频,输入一个是 png 序列,一个是 music.mp3 配乐文件,最后导出为 webm 格式。
网页的设计非常简单,提供了强制的手机背面摄像头画面的渲染,以及 webm 视频文件的播放。操作控制按钮提供了全屏,视频文件的放大和缩小,以及开始播放功能。轻触角色会询问是否允许访问摄像头,点击允许,之后就可以点击角色,将其拖放到合适位置了。

main.ipynbvideo.mov 录制的角色视频,放到这个文件夹中main.ipynb 中的代码块index.html 文件网页视频的图片预览可替换 1000000.png 文件。
需要注意的是,经过测试,因为摄像头调用和视频播放没有适配 IOS设备,另外是透明背景视频 webm 的视频编码 VP9 是一个由 Google 开发的开放格式,只有在 webkit 内核的浏览器才可以播放,所以这个网页仅有安卓用户可以正常访问,在微信中或是手机版的 Chrome,Edge 浏览器访问即可看到效果。
录制的素材和春时舞的配乐大家可前往 Github 仓库,或前往 CSDN 下载 。
总体来说,最终的效果还算可以,就是抠图确实还是存在很大的瑕疵。
希望天刀天涯一瞬功能后期可以将背景增加一个绿幕,或者可以直接录制透明背景的视频,为少侠们创造更多的快乐和灵感。另外,N 卡的亮点,自动录制,图片模式等各种功能在 64 位出现后就一直没再支持了,现在 32 位也没有就彻底用不了了。
“掌中舞罢箫声绝,三十六宫秋夜长。”
正午的阳光真好,少侠们,带上自己的游戏角色,去尽情起舞吧!
C#实现简易绘图工具一.引言实验目的:通过制作窗体应用程序(C#画图软件),熟悉基本的窗体设计过程以及控件设计,事件处理等,熟悉使用C#的winform窗体进行绘图的基本步骤,对于面向对象编程有更加深刻的体会.Tutorial任务设计一个具有基本功能的画图软件**·包括简单的新建文件,保存,重新绘图等功能**·实现一些基本图形的绘制,包括铅笔和基本形状等,学习橡皮工具的创建**·设计一个合理舒适的UI界面**注明:你可能需要先了解一些关于winform窗体应用程序绘图的基本知识,以及关于GDI+类和结构的知识二.实验环境Windows系统下的visualstudio2017C#窗体应用程序三.
1.postman介绍Postman一款非常流行的API调试工具。其实,开发人员用的更多。因为测试人员做接口测试会有更多选择,例如Jmeter、soapUI等。不过,对于开发过程中去调试接口,Postman确实足够的简单方便,而且功能强大。2.下载安装官网地址:https://www.postman.com/下载完成后双击安装吧,安装过程极其简单,无需任何操作3.使用教程这里以百度为例,工具使用简单,填写URL地址即可发送请求,在下方查看响应结果和响应状态码常用方法都有支持请求方法:getpostputdeleteGet、Post、Put与Delete的作用get:请求方法一般是用于数据查询,
在VMware16.2.4安装Ubuntu一、安装VMware1.打开VMwareWorkstationPro官网,点击即可进入。2.进入后向下滑动找到Workstation16ProforWindows,点击立即下载。3.下载完成,文件大小615MB,如下图:4.鼠标右击,以管理员身份运行。5.点击下一步6.勾选条款,点击下一步7.先勾选,再点击下一步8.去掉勾选,点击下一步9.点击下一步10.点击安装11.点击许可证12.在百度上搜索VM16许可证,复制填入,然后点击输入即可,亲测有效。13.点击完成14.重启系统,点击是15.双击VMwareWorkstationPro图标,进入虚拟机主
1.1.1 YARN的介绍 为克服Hadoop1.0中HDFS和MapReduce存在的各种问题⽽提出的,针对Hadoop1.0中的MapReduce在扩展性和多框架⽀持⽅⾯的不⾜,提出了全新的资源管理框架YARN. ApacheYARN(YetanotherResourceNegotiator的缩写)是Hadoop集群的资源管理系统,负责为计算程序提供服务器计算资源,相当于⼀个分布式的操作系统平台,⽽MapReduce等计算程序则相当于运⾏于操作系统之上的应⽤程序。 YARN被引⼊Hadoop2,最初是为了改善MapReduce的实现,但是因为具有⾜够的通⽤性,同样可以⽀持其他的分布式计算模
修改(澄清问题)我已经花了几天时间试图弄清楚如何从Facebook游戏中抓取特定信息;但是,我遇到了一堵又一堵砖墙。据我所知,主要问题如下。我可以使用Chrome的检查元素工具手动查找我需要的html-它似乎位于iframe中。但是,当我尝试抓取该iframe时,它是空的(属性除外):如果我使用浏览器的“查看页面源代码”工具,这与我看到的输出相同。我不明白为什么我看不到iframe中的数据。答案不是它是由AJAX之后添加的。(我知道这既是因为“查看页面源代码”可以读取Ajax添加的数据,也是因为我有b/c我一直等到我可以看到数据页面之后才抓取它,但它仍然不存在)。发生这种情况是因为
我正在寻找用于Rails的优质管理插件。似乎大多数现有的插件/gem(例如“restful_authentication”、“acts_as_authenticated”)都围绕着self注册等展开。但是,我正在寻找一种功能齐全的基于管理/管理角色的解决方案——但不是简单地附加到另一个非基于角色的解决方案。如果我找不到,我想我会自己动手......只是不想重新发明轮子。 最佳答案 RyanBates最近做了两个关于授权的railscast(注意身份验证和授权之间的区别;身份验证检查用户是否如她所说的那样,授权检查用户是否有权访问资源
我是Ruby新手,并被要求在我们的新项目中使用它。我们还被要求使用Padrino(Sinatra)作为后端/框架。我们被要求使用Rspec进行测试。我一直在寻找可以指导在Padrino上使用RspecforRuby的教程。我得到的主要是引用RoR。但是,我需要RubyonPadrino。请在任何入门/指南/引用/讨论等方面指导我。如有不妥之处请指正。可能是我没有针对我的问题搜索正确的词/短语组合。我正在使用Ruby1.9.3和Padrinov.0.10.6。注意:我还提到了SOquestion,但它没有帮助。 最佳答案 我没用过Pa
关闭。这个问题不符合StackOverflowguidelines.它目前不接受答案。要求我们推荐或查找工具、库或最喜欢的场外资源的问题对于StackOverflow来说是偏离主题的,因为它们往往会吸引自以为是的答案和垃圾邮件。相反,describetheproblem以及迄今为止为解决该问题所做的工作。关闭9年前。Improvethisquestion是否有适用于这些的3d游戏引擎?
文章目录1.任务背景2.任务目标3.相关知识点4.任务实操4.1安装配置JDK4.2启动FISCOBCOS4.3下载解压WeBASE-Front4.4拷贝sdk证书文件4.5启动节点4.6访问节点4.7检查运行状态5.任务总结1.任务背景FISCOBCOS其实是有控制台管理工具,用来对区块链系统进行各种管理操作。但是对于初学者来说,还是可视化界面更友好,本节就来介绍WeBASE管理平台,这是一款微众银行开源的自研区块链中间件平台,可以降低区块链使用的门槛,大幅提高区块链应用的开发效率。微众银行是腾讯牵头设立的民营银行,在国内民营银行里还是比较出名的。微众银行参与FISCOBCOS生态建设,一定
这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:FlashMessagesinPartials(Rails3)我正在做MichaelHartl的Railstutorial和listing7.26将flash消息添加到应用程序布局:...">...这很好用。但是,我试图通过在我的部分文件夹中创建一个_flash.html.erb来清理这段代码...">-->...并且比使用......在我的应用程序布局中,我的所有Rspec测试开始失败,每个测试都显示以下消息:Failure/Error:before{visitsignup_path}ActionView: