前段时间翻了翻,发现 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 的组合能够让其他语言的开发者也无痛使用:

这就不赘述了。

后话

相关链接

写完睡觉


↙↙↙阅读原文可查看相关链接,并与作者交流