因为对足球的酷爱,同时作为一个机器学习的从业者,业余时间开发了一款自动生成足球视频集锦的应用(包括网页版,Windows客户端,MacOS客户端)。
动机:之前参加湾区的比赛我们自己球队有时录像,整场90分钟的比赛大家一般感兴趣会看的也就那几个高光(进球,秒传,打嘴炮等)每次队友CY总是辛苦剪辑或打点。平时大家看专业球赛一般时间有限的情况下也只想看一下集锦。平时的集锦都是人工编辑,耗时耗人力。于是就想做一个自动生成集锦的应用。还有董路作为足球小将的教练,应该经常编辑集锦,如果能让董路用上也算是为小将做一些贡献。
感兴趣试用,请点击着陆页:http://highlighter.PengLiangAI.com/
简单说说开发过程和用到的工具。因为平时球赛一般进球或者有精彩场景的时候,通常解说或者观众的声音会忽然提高。所以这款应用是完全根据分析声音变化来开发的。所以前提是有解说或者观众声音的情况下才可以工作,用小将的视频,SB比赛视频和一些职业比赛测试,效果还不错,大部分进球可以囊括进去。
整个实现几乎pure python。虽然是个玩的东西也不期待会有很多用户或者请求,不过还是用可以scale的production的tech stack来搭建,作为学习段炼。
算法方面主要用到了numpy,scipy,视频处理方面OpenCV, MoviePy和ffmpeg。Web App框架用的Flask,deployment web server用nginx,WSGI server用gunicorn。虽然Flask可以独立作为server,但是稳定性和handle 多worker和并发请求方面都太弱不适合production,所以gunicorn就加强了这方面,支持多个worker和handle 并请求。外面又包了一层nginx。同时还学到并用到了一个挂机重启的神器supervisor,配置好后可以server如果挂掉可以自动重启,这样web service就非常的robust。
VPS选择:把web service host到了hostwinds服务商,原因是因为便宜,固定硬件配置flat rate,我选的是4G的内存那一档,一个月大概12美元。还有一个好处是在这个配置局限下,code re-factor了好几轮才使内存没爆掉,对memory的management也是很好的一个锻炼。
网页版开发完后好友试用发现一个缺点,就是上传原视频和下载集锦时间会比较久如果网速较慢。所以又开发了两个客户端。
客户端版:GUI用PySimpleGUI, 第一次用,本身框架设计的很high-level好用,而且doc中例子很多,所以写一个上传下载文件的简单GUI还比较容易。打包成可执行文件用的是PyInstaller。
开发过程中还是学到了很多东西。欢迎试用,欢迎反馈,欢迎抓虫子:)