最近,随着minmax.gg/chickendinner
重播,我们发布了一项新功能,可以显示参与PUBG Twitch直播者播放的视频。 为了实现它,我们需要通过游戏中的名字来识别Twitch流光,这真是一件相当有趣的任务。
我们新的Twitch功能正在发挥作用。您与彩带同场比赛的可能性
在开始开发此功能之前,我们希望确保其中一名玩家在Twitch上进行直播的比赛概率足够大,足以证明我们的努力是正确的。 通过查看活跃播放器的数量并将其与活跃广播的数量进行比较,我们可以做出非常粗略的估算。
在撰写本文时,该游戏在Twitch上广播了大约2100个用户,而在Steam上,PUBG中大约有70万活跃玩家。 这意味着当时的彩带大约占玩家人数的0.3%。
考虑到100个人最经常参加比赛,他们中至少有一个人将成为飘带的概率与
没有人将成为飘带的概率相反。 由于玩家不是流光者的概率为99.7%,因此100个玩家都不是流光者的概率为0.997乘以100的幂,即0.74。 换句话说,在任何一场比赛中,大约有25%的机会找到至少一位在Twitch上进行串流的玩家。
值得一提的是,与PUBG选手的总人数相比,我们可以假设Twitch会在北美地区发生重大转变,因此,如果您观看来自北美的比赛,这个百分比可能会更高。
猜名字
现在我们知道在任何给定的比赛中都有找到流光的机会,我们如何知道玩家是否正在Twitch上流媒体游戏?
要获得额外的奖励,您可以将Twitch帐户连接到游戏,但是很遗憾,该数据无法从
PUBG API获得 。 我们需要另一种将播放器名称绑定到Twitch中的流媒体的方法。
让我们看一个带有
Mitch帐户名的假想流光。 Mitch经常参加PUBG,但是他的Twitch频道尚未达到他梦reached以求的水平。 经过反思,他将游戏名称更改为
TwitchMitch 。 现在每个人都知道Mitch在Twitch上流。
该原理非常普遍,有时
会有一些稍微不同的变化:
TTVMitch或
Mitch_TV 。 可以通过程序检测此类名称,并从中确定Twitch上的帐户,从而使我们能够接收视频以在比赛重播中显示。
手动映射
这种方法为我们提供了很好的参考点,但还远远不够。 最受欢迎的彩带名称与该模式不匹配。 要找到它们,您必须分别从PUBG帐户链接到其Twitch频道的名称。
为了解决这个问题,我们开始在Twitch上手动搜索最受欢迎的彩带,并记录在屏幕上可见的游戏内帐户名称。 如果幸运的话,您将能够赶上玩家在大厅等候的时刻,您可以在几个地方找到名字:
但是,更有可能找到已经参加比赛的球员。 如果他与球队一起比赛,那么他的名字将始终在左下角显示:
但是,必须计算出哪个名字属于他,因为它并不总是相同的。 最简单的方法是查看右下角的小地图,该小地图位于玩家标记的中央,并用数字和颜色标记。
最全面的方法是研究屏幕中央下部,您可以在其中找到以下内容:
此文本包含帐户名称,游戏的当前版本,比赛标识符的最后6个字符和服务器区域。 值得考虑的是,它并不总是如上所示那样干净,因为它通常会与屏幕上背后发生的事情混合在一起。 文本很小,这意味着当出现严重的视频伪像时,文本可能会模糊且阅读效果不佳。 但是迟早您会抓到足够好的框架来阅读它。
也许您已经在考虑我们当时实现的目标-这对于自动计算机解决方案而言是一项理想的任务!
电脑视觉
在理想条件下,
OCR算法应能够识别出下面的文字。 在尝试了几种选择之后,我们最终决定Google
Cloud Vision API可以提供最佳结果。 我们可以创建一个执行以下操作的脚本:
- 进行PUBG直播,并截取屏幕截图的底部( Twitch API提供了全尺寸的预览图像,因此我们不需要自己截屏)。
- 将屏幕截图发送到Cloud Vision API并从结果中解析玩家的名字。
- 通过PUBG API验证播放器是否存在,然后将Twitch帐户从PUBG帐户保存到我们的数据库中。
这将非常有效,除了一个小细节:Google要求每向Cloud Vision API发出的每1000个请求1.5美元。 在任何给定时间,大约有2-3千个活动拖缆,因此,即使是单个脚本运行,也要花费我们4.5美元。 鉴于我们很可能会获得许多包含不可读文本的屏幕截图,因此您将需要多次运行脚本以获取大量数据。 换句话说,这种方法将很快成为一项非常昂贵的工作。 幸运的是,我们可以更智能地组织对Cloud Vision的请求。 我们可以利用以下事实:无论图像大小如何,Google都会为单个请求付款。 也就是说,我们可以将许多图像连接到网格:
然后,我们将此图像网格发送到API,并将结果文本附加到与找到文本的区域相对应的磁带机。
Google同时发送的数据大小受到限制,因此我们将拍摄300张粘贴在一起的图像以进行请求。 这意味着现在我们可以以与以前相同的价格运行相同的脚本300次,这使该方法非常可行和有效。
填补最后的空白
我们的脚本工作了几个星期,到目前为止,我们已经在Twitch和PUBG之间进行了25,000次比较。 但是,该脚本无法绑定某些拖缆,例如,那些拖缆在屏幕底部的文本上方具有自己的叠加层。
我们必须手动绑定这些彩带。 我们决定添加一个函数,以允许访问者发送他们在数据库中找不到的任何流媒体的名称,而不是独自执行此操作:
我们将很高兴继续尝试获得这种帐户对的方法,甚至我们还希望找到使用现有信息的新方法。 期待我们的新文章!