前段时间翻了翻,发现 stagesepx 已经诞生一年了。在一年里,从一个我的玩票项目到现在逐渐被接受,谢谢各位愿意尝试新东西:)
最近几个月陆陆续续在收集反馈、把可靠性的坑填上,随着功能稳定下来,真正的用户也变得越来越多,很开心看到一些应用性质的帖子。这里特别感谢下 @150109514 同学写的 基于 stagesepx 的 App 页面跳转性能分析,相当详细,把原理也讲得很透彻了,比我从自己的角度出发的例子要更加贴近真实用户的感受。
第一次了解这玩意儿的朋友可以直接跳到最后面的相关链接,先了解下背景
除了可靠性,这个项目被吐槽最多的前三是:
这三个点在我写 work_with_stagesepx 就发现了,作为开发者我自己写起来也感觉不是很方便(...),更不用说用户了。虽然用代码来支配非常灵活,但无形中是提升了一些落地门槛的,很多人在看到需要写代码之后就止步了。
后来我还是决定用 命令行 + 配置文件 的设计,主要做两个方面的补全:
这个东西很客观,配置化在牺牲了灵活性的前提下节约了编写代码的成本。对于代码与配置我保持中立态度,看各位自己取舍,并没有绝对好坏。我还是非常推荐 python 开发者 直接调库。
从这里开始假定各位都看过了最后面的相关链接
以原来的手动模式为例,你只需要一个简单的 json 文件:
{
"output": ".",
"video": {
"path": "../videos/short.mp4",
"fps": 30
}
}
之后执行:
stagesepx run cut_only.json
即可得到一样的效果,而且具有很高的可读性。
而对于全自动的模式也是一样的,首先先训练一个模型(一样都在命令行完成):
stagesepx train trainset model.h5
运行之后我们可以得到一个 model.h5
文件。直接配就完事儿了:
{
"output": ".",
"video": {
"path": "../videos/short.mp4",
"fps": 30
},
"classifier": {
"classifier_type": "keras",
"model": "./model.h5",
},
"calc": {
"output": "./output.json",
"operators": [
{
"name": "cost between 1 and 3",
"calc_type": "between",
"args": {
"from_stage": "1",
"to_stage": "3"
}
}
]
}
}
可以看到配置里我选择了计算阶段 1 跟 3 的差值。一样的命令行运行之后,你就可以得到结果(阶段 1 到 3 对应的是 14-33 帧,耗时 0.63333):
[
{
"name": "cost between 1 and 3",
"type": "between",
"result": {
"from": 14,
"to": 33,
"cost": 0.6333333333333333
}
}
]
我们在命令行里完成了整个流程,而你没有编写一行代码。完整代码参考 run_with_config
这个很好理解,因为很多企业与开发者并不使用 python。命令行 + JSON 的组合能够让其他语言的开发者也无痛使用:
这就不赘述了。
run
函数内:https://github.com/williamfzc/stagesepx/blob/master/stagesepx/api.py
写完睡觉