我正在寻找许多视频来处理不同的视频游戏,以检测其中的各种“状态”。
我要解决的第一款游戏是《超级街头霸王4 》的任何版本。
在其中,我想检测“vs”字符屏幕何时出现。这是视频一帧的示例:
如果我可以检测到“vs”,那么我就可以检测到视频帧确实是“vs”屏幕,这可以让我查找其他信息(现在,假设我将使用它来检测视频中比赛即将开始的时间戳)。
也就是说,以下是我将要处理的视频中的帧的假设(这不是唯一的视频,有数千个,如果不是数万或数十万个视频,但处理规模的问题许多视频是一个完全不同的领域):
- 我更喜欢(但不是必需的)以可靠的结果处理可能的最低分辨率图像(较低的分辨率 = 更快的处理时间)。上面的图片是 480 x 270 像素(取自YouTube 视频,带有
fmt
18),但它们可能有不同的尺寸(我得到了fmt
18 的 YouTube 视频,但尺寸为 640 x 360 像素)。 - 大多数视频将是直接馈送
- 大多数视频的宽高比为 16:9
- 带红色的背景将是动画的,但通常在橙红色范围内(它是火焰)
- 有时会在“vs”的下部有一个淡入淡出的徽章来表示一个版本(这很重要,但不是现在),这可能会混淆“vs”,如下所示:
(取自该视频的约 3 秒标记;另请注意,以上是 640 x 360 像素的分辨率)
- “vs”的大小和位置将大致相同(我还没有验证这一点,但我知道它不会移动)与其他直接馈送视频成比例
- 角色将从每边超过 30 个的池中选择(换句话说,框架的那些区域会有所不同)
- 这些视频的长度通常在 2 到 4 分钟之间,大约在 4,000 到 6,00 帧之间。但是,可能会有更长的视频(可能是两个小时),其中插入了各种其他游戏和真人动作。这些视频并不那么重要,但如果解决方案告诉我某个游戏在更大的整体视频中弹出的位置,那就太好了
- 捕获的原始分辨率为 720p,因此“vs”的基线图像可以被认为是“原始”尺寸。
最终,我希望在 .NET 中编写这个管道,但这并不是很重要,这里的概念验证以及对所涉及技术的理解更为重要,以便我可以为 .NET 翻译和优化它以及相同类型的其他游戏的其他视频(如果我能找出重要的区别,比如Ultimate Marvel vs. Capcom 3、Street Fighter x Tekken、BlazBlue: Continuum Shift等视频)。
我还在Mathematica 中试水,并且拥有家庭版 8.0,因此在该环境中进行概念验证也非常受欢迎。