無程式碼的啟動速度測試 with stagesepx

williamfzc發表於2020-09-08

前段時間翻了翻,發現 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 的組合能夠讓其他語言的開發者也無痛使用:

  • 寫配置
  • call
  • 讀結果

這就不贅述了。

後話

  • 新設計,可能會有一些隱藏問題,歡迎嚐鮮:)
  • 這次加入的特性的抽象層級很高(客觀來說,只是對例子的一些合理整合),還是比較可讀的,也很歡迎使用過的同學擴充 API
  • 本次改動主要就集中在 run 函式內:https://github.com/williamfzc/stagesepx/blob/master/stagesepx/api.py

相關連結

  • 主庫:https://github.com/williamfzc/stagesepx
  • 例子倉庫:https://github.com/williamfzc/work_with_stagesepx
  • 還是非常推薦 基於 stagesepx 的 App 頁面跳轉效能分析

寫完睡覺

相關文章