好奇自己对键盘各键的使用频率,写了个能统计按键并生成热力图的程序 Keyboard Heatmap - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
werifu
V2EX    分享创造

好奇自己对键盘各键的使用频率,写了个能统计按键并生成热力图的程序 Keyboard Heatmap

  •  1
     
  •   werifu 2023-01-03 16:43:40 +08:00 4267 次点击
    这是一个创建于 1013 天前的主题,其中的信息可能已经有所发展或是发生改变。

    https://github.com/werifu/keyboard-heatmap

    如题,出发点是想知道自己哪些按键用最多,又想直观看到效果,所以采取了热力图的样子,做成键盘的布局,实现使用的是 Rust 的 egui ,原理其实就是监听键盘事件然后统计映射到热力图上而已。

    • 支持两种键盘的布局,一种是 MacBook 的键盘,另一种是 87 键的键盘(也就是中间有控制键区,但是没有小键盘的),都是 QWERTY 美式键盘布局,因为我手头只有这两种键盘,别的没法试所以就没做了。

    • 由自定义色相决定主题颜色

    • 可以保存为图片

    效果大概如下,是大概半个小时内的按键统计情况,主要做的事是在水群(也就是打汉字拼音,不过我用的是双拼,所以猜测跟全拼可能会有比较大差异,欢迎 po 出来)

    有个缺陷是按键的热力图深度到 150+基本就人眼不可区分了,我是用 HSL 颜色空间来做热力图深度的,空间也比较有限,没有特别好的办法,有好做法的话也欢迎建议。

    22 条回复    2023-01-10 10:06:00 +08:00
    AoEiuV020CN
        1
    AoEiuV020CN  
       2023-01-03 17:04:14 +08:00
    深度这个, 为什么用 sigmoid ,感觉第一反应应该是线性的,把当前最高作为线性最大值,映射到 0-1 ,有什么不好的吗?
    wdy3334
        2
    wdy3334  
       2023-01-03 17:05:49 +08:00
    ctrl c v
    opengps
        3
    opengps  
       2023-01-03 17:06:11 +08:00
    Ctrl ,C ,V ,Enter
    enzyme
        4
    enzyme  
       2023-01-03 17:37:19 +08:00
    不错。

    有个其实没什么用的小建议。为了增加趣味性,鼓励用户分享。可以考虑输出下最常用的字母案件是什么。最接近的英文词是什么,最接近的中文词汇是什么。
    loading
        5
    loading  
       2023-01-03 17:37:53 +08:00 via Android
    想法不错,有空我也试一下仿一个出来。
    PerFectTime
        6
    PerFectTime  
       2023-01-03 18:38:36 +08:00
    那自然是 CV 最多了
    EngAPI
        7
    EngAPI  
       2023-01-03 18:44:04 +08:00
    装了个 kmcounter v3.7 也差不多类似的,刚开始看看,后来直接废弃了
    hertzry
        8
    hertzry  
       2023-01-03 20:16:12 +08:00
    直接除以最大值变成 0~1 。
    luckykong
        9
    luckykong  
       2023-01-03 21:06:54 +08:00
    可以增加一个功能,按照空格将输入分隔开,然后进行词频统计,把最高的几个词标出来。这样就能简单的实现 4 楼的想法了。反正只是图好玩,准不准确无所谓
    LuxChen
        10
    LuxChen  
       2023-01-04 08:53:46 +08:00
    这个工具开着之后,不知道为什么,打字总会多出来几个字母,就好比现在这样,不确定是不是这个原因 iidi
    missdeer
        11
    missdeer  
       2023-01-04 09:05:33 +08:00   5
    改成立体的,越多越高
    liuidetmks
        12
    liuidetmks  
       2023-01-04 10:44:41 +08:00
    加强版,鼠标点击的分布。 (想不出有什么现实意义。
    lxms2021
        13
    lxms2021  
       2023-01-04 15:36:41 +08:00
    每个键上面能显示按键次数么
    Picmen
        14
    Picmen  
       2023-01-05 16:55:04 +08:00
    数量多了之后颜色不好分辨的话,建议增加数量显示
    Picmen
        15
    Picmen  
       2023-01-05 16:57:11 +08:00
    @Picmen 我错了,这个是有的
    shantongxu
        16
    shantongxu  
       2023-01-05 17:22:23 +08:00
    可以记录按键寿命, 键盘一直宣传几千万次的点击寿命,用个几年看看能不能达到
    pagict
        17
    pagict  
       2023-01-05 22:28:54 +08:00
    3D 柱状图,高度为频次
    werifu
        18
    werifu  
    OP
       2023-01-06 14:19:21 +08:00
    @AoEiuV020CN 我其实是取了半个 sigmod ,让导数单调递减,不用线性的理由是我想加大按键次数比较少时的颜色变化,因为有些按键的频率是非常低的,可能很长时间只会按到一两次,按线性去平分颜色会让这些键非常不明显,而对次数比较多的键,对多一两次感知并不敏感
    werifu
        19
    werifu  
    OP
       2023-01-06 14:22:35 +08:00
    @missdeer 我觉得是个可以的思路,做成类似 https://skyline.github.com/ 的 3D 柱状图
    werifu
        20
    werifu  
    OP
       2023-01-06 14:23:30 +08:00
    @LuxChen 好像没有发现过这种情况,开个 issue 详细描述下?
    werifu
        21
    werifu  
    OP
       2023-01-06 14:29:41 +08:00
    @liuidetmks 商业上一些 web 服务有这种鼠标 click/hover 分布的热力图统计,不过似乎主要是用来给 PM 看和改进产品的
    lyqqqq
        22
    lyqqqq  
       2023-01-10 10:06:00 +08:00
    可以加个。
    按键组合频次列表。

    按键间隔不超过某个阈值( 0.5s )视为为一个组合内的。长度不限

    怎样就 我今天 CTRL+C 1000 次。。。。
    CTRL+V 1100
    EN 999 次
    最长的组合是 ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     861 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 19:25 PVG 03:25 LAX 12:25 JFK 15:25
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86