老柯修机铺

通讯行老师傅的手机软件笔记——每款 App 装过、用过,才敢写下来

開不了機的鬧鐘,還是鬧得了人的鬧鐘——PushClock 強制互動鬧鐘的防作弊原理

PushClock 不是靠音量取勝的鬧鐘,它靠的是手機感應器與裝置端機器學習的協同運作。這篇文章拆解它如何透過加速度計、陀螺儀與人體關鍵點追蹤,讓你想賴床都賴不成。

開不了機的鬧鐘,還是鬧得了人的鬧鐘

你有沒有過這種經驗——鬧鐘響了,你伸手按掉,翻個身又睡過頭?普通鬧鐘的設計哲學是「給你一個聲音」,剩下的事全交給你的意志力。但如果你的意志力早上六點鐘正處於一天中的最低谷,那這個設計就形同虛設。

pushclock 想解決的就是這個問題。它不是一款鬧鐘 App,更像是一個「互動式起床任務系統」——鬧鐘響了之後,你必須完成一個它指定的小任務(搖手機、走幾步、做幾個伏地挺身、甚至對著鏡頭做個特定動作),驗證通過之後鬧鐘才會停。任務沒完成?那就一直響,直到你真的從被窩裡爬起來為止。

這款軟體在 Google Play 上的好評率非常高,核心原因很簡單:它確實讓人起得了床。但真正讓我感興趣的不是「它有效」這個結果,而是「它為什麼有效」——要知道,用戶想作弊的動機永遠比開發者想防的動機更強,PushClock 是怎麼在這場貓鼠遊戲裡守住防線的?

安裝

PushClock 目前只有 Android 版本,最新版本是 1.4.9,安裝包約 114MB。體積比一般鬧鐘軟體大不少,主要是因為它內建了機器學習模型——這個後面會講到。

安裝本身沒什麼特別的:pushclock下載 APK 後點擊安裝,第一次啟動時會請求幾項權限——通知權限(鬧鐘要能響)、精確鬧鐘權限(Android 12 以上的強制要求)、以及如果你要用運動任務的話還需要攝影頭權限。

但這裡有一個非做不可的後續步驟:把 PushClock 從系統的省電策略限制裡拉出來。小米、華為、OPPO、vivo 這幾家的 Android 系統為了續航會激進地殺後台進程,如果不手動把 PushClock 設為「不受限制」、打開自啟動,隔天早上很可能會發現鬧鐘根本沒響——這不是 PushClock 的 bug,是國產 Android 的後台管理策略和它的設計衝突了。pushclock文檔 裡有各個品牌的具體設置路徑,這步做完才是真的「安裝完成」。

裝置端機器學習:不上雲端的防作弊

說到防作弊,大多數人的第一反應是「上雲端做人臉識別」——把視頻傳到伺服器分析,伺服器返回「這人是真的在做伏地挺身還是在裝樣子」。但 PushClock 走了一條完全不同的路:所有的分析都在手機本地完成,視頻幀用完即棄,從來不離開設備。

這個設計選擇解釋了很多事情——為什麼它的安裝包有 114MB(模型要隨身帶著),為什麼它能離線工作(不需要網路往返),以及為什麼它的延遲低到幾乎和你的動作同步。但更重要的是,它從根本上解決了一個隱私問題:你做運動的樣子永遠只存在於你的手機上,不會被上傳到任何伺服器。

加速度計與陀螺儀:低門檻的第一道防線

不是所有任務都需要攝影頭。PushClock 有一類任務完全靠手機的加速度計和陀螺儀就能完成——搖手機、走步數、持續運動。

這些感應器是現代智慧手機的標配,但 PushClock 對它們的使用方式比大多數 App 更細緻。以搖手機為例:它不是簡單地檢測「加速度超過某個閾值就算一次」,而是判斷「是否存在一個有明確開始和結束的加速過程」——口袋裡的顛簸、手指的誤觸、甚至放在桌上被貓碰一下,這些隨機的加速度變化都被算法過濾掉了,只有你真的拿起來用力搖才算數。

步數任務更有意思。它利用加速度計和陀螺儀的組合來區分「坐在椅子上晃腿」和「真的站起來走」——前者的加速度模式是不規則的小幅度震盪,後者則有一個穩定的節奏性週期。這個區分背後是一個簡單但有效的假設:如果你真的站起來走了幾十步,那你大概率已經離開被窩了——PushClock 的核心目標其實已經達成,至於你是在家裡繞圈還是走到陽台,對它來說並不重要。

17 個人體關鍵點:計數不是隨便揮揮手

需要攝影頭的任務(伏地挺身、深蹲)就沒這麼好糊弄了。PushClock 在每一幀畫面裡識別大約 17 個人體關鍵點——頭部、頸部、肩膀、手肘、手腕、軀幹、臀部、膝蓋、腳踝——然後追蹤這些點在連續幀之間的位置變化。

PushClock 運動任務追蹤示意圖

以伏地挺身為例,演算法不是只看「你是否動了」,而是要同時驗證幾個條件:頭部和軀幹保持一條直線(不能塌腰也不能撅屁股)、手肘彎曲到接近 90 度(下壓到底)、然後手肘伸直身體完全回到起始位置(起來)——只有這兩個狀態之間的完整切換才算一次。揮揮手臂不算數、只做半程不算數、身體姿勢歪了不算數。

這個驗證邏輯的好處是它同時達成了兩個目標:一是防作弊(你不能用假動作蒙混過去),二是確保你做的是標準動作(對身體比較友好)。代價是如果你動作不夠標準,可能計數一直不增加——素材裡提到光線太暗、攝影頭沒擦乾淨、手機位置不對都會影響識別準確率,這是設備端 ML 的固有侷限。

為什麼不上雲端:隱私與延遲的雙重取捨

回到一開始那個問題:為什麼 PushClock 選擇在裝置端跑 ML 而不是上雲端?我認為這是一個「取捨」而非「單向優勢」的決定。

上雲端的優勢很明顯:模型可以做得更複雜(不受手機算力限制)、可以持續迭代優化(不需要每次更新 App)、可以利用大數據訓練(識別更準確)。但代價也大:隱私問題(視頻要上傳)、延遲(網路往返至少幾百毫秒,運動計數會明顯滯後)、以及成本(伺服器運維是長期負擔)。

裝置端 ML 的優勢恰好解決了這些問題:隱私零泄露、延遲幾乎為零、伺服器成本近乎於零。但代價是模型大小受制於手機記憶體(PushClock 用的是輕量模型,精度肯定不如雲端大模型)、無法遠端更新(要優化模型就得發布 App 更新)、以及不同手機的執行效果可能有差異(低端機跑不動,高端機效果更好)。

PushClock 的開發者顯然認為,對於一款鬧鐘軟體來說,隱私即時性遠比最高精度重要——如果因為延遲導致計數跟不上動作節奏,用戶體驗會非常糟糕;如果因為上傳視頻讓用戶擔心隱私,哪怕識別再準也會有人不用。這個判斷從商業角度來看是對的,PushClock 目前的用戶基數和評分都說明了這一點。

還有什麼可以作弊?

當然,還是有。比如搖手機任務你可以把手機綁在腳上甩;比如步數任務你可以用那種「搖手機刷步數」的作弊器。但有意思的是,PushClock 的開發者對這種情況的態度是放任的——素材裡有一段話說得很直白:「你都把手機綁在腳上甩了,說明你確實已經從床上爬起來、在做動作了——PushClock 的核心目標其實已經達成。」

這個態度揭示了 PushClock 防作弊設計的底層哲學:它防的是「躺在被窩裡按一下就能關鬧鐘」這種零成本作弊,而不是「為了關鬧鐘不得不下床找工具」這種有成本的作弊。只要你離開了被窩,睏意就會自然消退,鬧鐘的使命就完成了。這是一個非常務實的設計——它不追求百分之百的防作弊,只追求讓作弊的成本高到不值得。

本文为个人基于网络公开资料整理编写,非官方内容,仅供学习交流参考;软件版权归原作者所有,请支持正版;使用过程中遇到问题请查阅官方渠道,本文不承担任何责任。

同类文章

從播放器到生態:Echo Music 的進化之路

一個專注乾淨與離線的 YouTube Music 第三方客戶端,走過了怎樣的迭代軌跡?從核心播放到 Echo Find,從單體 App 到 130+ 貢獻者的開源項目。