我用 deepseek 逆向了小米运动的卡路里算法,绷不住了

Chihiro316 2026-10-21 20:03 1

起因是主播最近在减肥,每天运动量不变,卡路里却忽高忽低,觉得其中必有蹊跷。让 deepseek 帮忙逆向看了一眼,看完是真绷不住。


先说明前提:我没戴小米手环,手机放裤兜或边走边刷。手环走的是另一套算法,由手环自己算完传给手机,跟下面这些无关。


我本以为这算法至少符合运动生理学。结果核心就三条:


按分钟分档,只看步频


每分钟步数 ≤138 → 0.04 卡/步 139–277 → 0.06 卡/步 ≥278 → 0.10 卡/步


注意最后那档:278 步/分相当于 4.6 步/秒,那是苏炳添、陈妤颉这种选手的顶速。而且它要的是整整一分钟都这个频率——人类压根做不到。所以实际只有前两档在用。


距离 = 步数 × 0.6 ,而且每次更新都取整


不是最后乘一次,是每次同步来 n 步,就算 int(n × 0.6) 再累加。n=13 时 7.8 → 7 ,丢 0.8 米。同步越勤,丢得越多,所以你看到的是 0.59 而不是 0.6 。


卡路里会重复累加(这是 bug )


同一分钟内,它每次更新不是把最新值同步过去,而是把这分钟的旧值再往上加一遍。


我做了个对照:


19:20 正常走 54 步,没碰手机 → 2.16 卡 ( 54×0.04 ,正确)
19:21 走 40 步,边走边下拉刷新 → 8.28 卡
8.28 ÷ 40 = 0.207 卡/步,比它自己最高档的 0.10 还高一倍。


日志里这一分钟被写了 8 次:


2 步/0.08 → 14 步/0.64 → 17 步/1.32 → 28 步/2.44
→ 33 步/3.76 → 35 步/5.16 → 38 步/6.68 → 40 步/8.28
每一个都是「上一次的值 + 这一次的累计值」。这就是为什么你越刷它越大。


复现


adb logcat -G 128M && adb logcat -c
走 5 分钟
adb logcat -d -v brief > walk.log
搜 srcDataMap = {calories=[...]
看同一个 time= 的 calories 是不是在涨
注意:logcat 分段时每行会重复带 I/fitness_xxx(pid): 前缀,直接删换行会漏读,得先剥前缀。


写这些不是想证明小米多烂。就是觉得,每次当我觉得世界总不可能这么草台班子吧?现实就冲过来狠狠地给我上一课。


一个天天摆在首屏、几千万人在看的数字,能偏 30%~100%,而且偏差取决于你刷不刷手机,挺神奇的。

最新回复 (22)
  • Ipsum 10-21 20:04
    1楼
    你这算啥?手表异常耗电才恶心
  • x86 10-21 20:04
    2楼
    最开始睡眠检测也是纯忽悠,后面改了不知道现在如何了
  • shoaly 10-21 20:06
    3楼
    我一直以为是跟心率联动的, 心率是一个最大的指标. 结果实在算步数啊
  • moefishtang 10-21 23:27
    4楼
    可以分析下手环固件试试看 x
    记得是跟小米运动打包在一起的
    试过用 REA 分析过 OPPO 的耳机固件( Deepseek 分析的,后来余额用完了甚至用的豆包工作),小米手环的不知道行不行
  • win8en 10-21 23:33
    5楼
    小米就是这样,电饭煲也是,之前一个从事电饭煲研发的朋友,说小米电饭煲的各种做饭功能都是忽悠,各阶段的功率都是一样的,只是换个名字给你看
  • mzotw2babm 10-22 08:57
    6楼
    也许小米手环负责这个卡路里计算功能的,只是一个二流大学的应届生吧= =
  • sentinelK 10-22 09:11
    7楼
    其实从信号学的角度讲,任何模拟信号的数字化都是一种信号损失的过程,关键就看你怎么取舍。

    一般器械采集这端就有很大误差,你量化转换的层面再精确,采集端精度就很低又有什么意义。

    所以很多生理指标即便是高端专业仪器也都只能看趋势,不能看绝对数值。
    医院等机构不愿意依据第三方检查结果,除了利益和责任原因,以上也是原因之一。
  • labubu 10-22 09:43
    8楼
    逆天
  • Meursau1T 10-22 10:45
    9楼
    估计是因为卡路里计算本来就麻烦,他们直接就摆烂了
  • mightofcode 10-22 10:49
    10楼
    小米除了雷军抓的项目
    都会摆烂
  • zealotxxxx 10-22 10:58
    11楼
    不止的,我以前帮忙研发过(不是小米)体脂秤的算法......

    我说实话,完全凑合,拟合各类参数搞个大差不差的数据,至于准不准的问题,你就说是不是感觉能不能用吧。

    这类东西,不认真下功夫去做是没办法的,但是严谨弄投入的资源极多。不是每个公司都是苹果。
  • Zarkkkk 10-22 10:58
    12楼
    之前买了一个小米手环 10Pro ,就觉得他那个活力值和卡路里目标完全就是扯淡,虽然我也不指望手环这种非专业设备能多准,但是你不能在我打游戏或者躺床上刷手机的时候提示我卡路里达标了吧。。。。。当然也可能是他把我维持人体机能的消耗也算进去了,但是实在是有点绷不住
  • Jamieyang 10-22 11:10
    13楼
    卡路里本来就是纯估算的,影响因素太多了。小米手环这么便宜的产品,哪有这么多资金来收集数据做清洗,训练模型。更何况一般消费者的数据都跟卡路里看不出关联性。

    从产品的角度来说,这真做出来了,它可能一整代都收不回成本。
  • KNaiFen 10-22 11:17
    14楼
    帖子是不是编辑过,怎么都在说手环怎么样怎么样,明明开头就写了这是手机的算法
  • 0xnycth 10-22 11:26
    15楼
    我认为越早的认识到世界就是个巨大的草台班子这个事实,对人的发展是越好的
  • 0o0o0o0 10-22 11:38
    16楼
    能不能逆向一下苹果的
  • gesse 10-22 11:43
    17楼
    刚刚看了一下,感觉还真是。
  • makuixuan1983 10-22 11:46
    18楼
    不要太当真就好
  • DefoliationM 10-22 12:00
    19楼
    小米的东西嘛,用过的都懂,跑分没输过,体验没赢过。
  • Dik3047 10-22 12:38
    20楼
    草台感拉满。刷一下就多算一轮,数字比运动本身还忙。

    我也做 indie 工具( TV Tracker ,追剧进度/日历/提醒,不正片): https://tv-tracker.uk/go?c=v2ex ——对数据可信度同感。
  • Woodrow 10-22 13:53
    21楼
    有没有老哥逆向下华为的
  • iv8d 10-22 14:36
    22楼
    小米产品可能就手机 MIUI 还有点技术,其他都是能跑起来就算吧,这也是很多不停上产品企业的通病,根本静不下心来做产品,你看现在的美的等都差不多了。
* 帖子来源V2EX
返回