有没有跟陪伴自己多年的爱宠道过别?对我来说,幼儿园时养了两年的小鸡突然病死,让我当时哭的心都碎了。
但当我看到这位爱好设计和编程的美国女生,自学各种代码,用科技的力量让去世的爱犬重获新生,我的心都融化了……
玩具贵宾犬 Sammy 出生于 1998 年,陪伴美国女生 Angela Perrone 度过了 17 年幸福的生活。
Angela 介绍自己“出生于愚人节那天,也就注定了喜剧的一生。”她特别爱在 Sammy 以及自己养的其他贵宾犬身上试验自己的喜剧天分,总是把它们装扮成渔夫、消防员、魔术师,甚至名人 Amy Winehouse 等各种各样的造型,当它们的专职摄影师……
Sammy 跟 Angela 在一起的时候无比乖巧,不仅能对主人“坐”、“招手”等各种各样的口令做出反应,居然还可以像瑞士山区的歌手一样用约德尔唱法来“唱歌”,真不亏是一只多才多艺的小狗……
去年,Sammy 接受了自己的命运,安静地离开了爱它的主人和充满欢乐的世界。读于纽约大学帝势艺术学院,学习交互设计和创意叙事的 Angela 一直想要做点什么来纪念它。她决定自己写一套程序,在家里重现一个 Sammy 的全息影像,而且还得是像它还在世时一样可互动的……就这样,“Good Boy, Sammy”开发项目启动了。
Angela 开始从自己的过去十几年积累的视频素材库里找可以使用的素材。幸运的是,她在 2009 年用索尼摄像机拍摄的一段长达 34 秒,画面晃动、画质糟糕的视频里发现,Sammy 的绝大多数小把戏,包括唱歌的片段全都在里面了。
素材到位,项目启动。第一步,Angela 把素材放到 Adobe AE 里,然后痛苦地把每一帧里的 Sammy 用遮罩(rotoscope)功能抠出来,重新定位到一个透明画面的中央,制作成关键帧。
就这样,Angela 把这段视频里的原始视频剪辑并重绘成 5 小段视频,分别对应 Sammy 接受主人语音指令所作出的不同反应:休息、坐、趴下、唱歌以及拍手。
有了素材,麻烦的还在后面:搞定最重要的语音识别模块。Angela 的计划是让 Sammy 的全息影像能够一直保持播放,当喊出指令时,全息影像可以播放对应的素材,播放完后再回到播放休息素材的状态。经过调研,她发现用直接播放的视频编程难度太高、太费时,把素材和语音识别 API 用 JavaScript 写成网页比较靠谱。
经过对 p5.speech、Annyang、PocketSphinx.js、HTML5 等不同方案的测试,她最后选择了 p5.js+p5.speech,因为这套方案整合视频和语音指令到 JavaScript 框架效果更好,且 p5.js 本身对非技术人士友好,适合没学过计算机的 Angela 操作。
尽管这样,Angela 的代码编写过程,也是一路报错加死机的……
比如她在按照相关说明写完代码之后,却发现每一个小视频播放完不会暂停,会在另一个视频播放时继续在后台播放,最终占用了太多的系统资源导致浏览器卡死,用各种播放控制的函数都解决不了。精通 p5.js 的校友建议她善用 JavaScript 里的 onended 事件,用它写成函数来控制每一个小视频。Angela 也遇到了一些怎么 debug 都找不到根本原因的问题,比如程序能够正常运行,屏幕上却显示不出来任何内容,结果发现原来是因为视频的尺寸太大……
团结力量大,在校友以及学校老师的帮助下,全息 Sammy 开发过程中的各种各样的 bug 都迎刃而解。接下来,到了代码变狗的最后阶段了……
Angela 用到了一台连接到投影仪的 Mac mini 作为输入端,再利用 Mac OS 的程序全屏功能,让浏览器全屏运行写好的 JS 文件。输入环境搭建起来也是挺累的:想要语音控制,先要给 Mac mini 外接一个麦克风;接下来,浏览器需要获取使用麦克风的权限,Angela 把一个鼠标粘在地上来点击弹出对话框的“确认”按钮;最后,浏览器时不时还得刷新一下,这还得用到蓝牙键盘来按 ⌘+R……
至于“屏幕”,她用激光切割了一块亚克力板架在狗窝里,让投影仪从后面向薄板投影。
虽然编程过程 bug 不断,硬件设施煞费苦心,但最后的结果仍然让 Angela 高兴坏了:
如果说 17 年的陪伴是最长情的告白,那么让去世的爱犬通过全息影像重获新生,应该是 Angela 对 Sammy 最浪漫的报答。
0 条评论
请「登录」后评论