無程式碼的啟動速度測試 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

相關連結

寫完睡覺

相關文章