HEXA娱乐开发日志调研001——弹幕操控机器人
上一篇 HEXA娱乐开发日志调研000——机器人直接推流可行
用弹幕操控机器人有三件事要做
1.获取弹幕
我目前的目标是B站,看了一下“弹幕姬”的源码,倒是没多复杂,就是一个线程处理心跳包,另一个线程处理弹幕,只是它是C#写的,移植挺麻烦的。
第一版要从简,所以准备先试试直接从网页上抓字符串。
从网页内容看这是件相当容易的事,因为最近的弹幕记录就在网页里,只要把网页爬(网络爬虫的爬)下来,用正则表达式一过滤,就能为所欲为了,只是有个小风险,即如果B站做了反爬,也许会有点麻烦。
2.弹幕转化为机器人行动
把弹幕解析为机器人指令就没什么好说的了,而比较麻烦的细节问题是怎么区分重复的命令。弹幕可能刷得很快,比如收到了10个命令都让机器人前进,这可能是十个人同时发的,事实上他们只希望机器人前进一次,如果机器人全都执行了,就会前进10次,很明显这样的控制反馈震荡很大,机器人的行动不容易收敛,观众会感觉永远控制不到机器人,可能这样也很好玩,暂且叫它“随缘”玩法吧。
虽然“随缘”玩法也有点意思,不过我还是希望观众能有一点控制感。我目前想到的方法是让观众发送命令的同时再发送点别的东西,第一版先打算加一个数字。比如形式可以为
<命令> #1
从某个时间点开始机器人会接受一个编号为1的命令,那些旧的、编号不是1的命令就不会再被执行了,当1号命令执行完毕,观众就得发2号命令,以此类推。这样,机器人在一个时间点只吃一条命令,观众在同一时间给机器人的命令只会被执行一条,这样机器人就变得可控多了。
还有,在众多1号命令里执行哪一条命令呢?这个规则就很有发挥空间了,这里的机会我不想多讲。
3.给观众反馈
观众需要知道当前机器人在执行什么,也许还要知道距离下次接受新命令的时间还有多久,也许还要知道点别的什么,这些都需要显示在HUD(可以理解为第一人称UI)上。
那么问题来了,如何把信息显示到视频上,或者说如何渲染HUD?
幸运的是这个问题也不是很困难,官方给了一个使用OpenCV(OpenCV官网)的例子,向图像上写几个字应该不是大问题。