GuillaumeBlais/activity-tracker
GitHub: GuillaumeBlais/activity-tracker
一款 100% 离线运行的本地鼠标与键盘活动追踪器,通过交互式 Web 仪表板提供详尽的个人电脑使用行为分析与可视化。
Stars: 1 | Forks: 0
# 🖱️⌨️ 活动追踪器与仪表板




## ⚠️ 隐私警告
本项目会**持续**捕捉你的鼠标点击、键盘按键、输入的单词以及你正在使用的应用程序。
- ✅ **所有数据均保留在本地**:无任何外部网络请求,无任何遥测数据。
- ✅ 数据存储在项目根目录下的两个 JSON 文件中。
- 🔴 **切勿分享 `mouse_data.json` 或 `keyboard_data.json`** —— 它们包含了你完整的操作记录(如果在非隐藏字段中输入过,可能还包含密码)。
- ✅ 这些文件已包含在 `.gitignore` 中。
- 🎯 建议仅限个人严格使用。
## ✨ 功能
### 🖱️ 鼠标追踪
- 总移动距离(px → 米 → 千米)
- 左键 / 右键 / 中键点击 + **双击**检测
- **拖放**检测,包含距离和持续时间
- 滚动(上 / 下 / 对应的像素距离)
- 点击之间的平均间隔
- **多屏幕热力图**(每个显示器一个 canvas,通过按钮分隔)
- 带方向箭头的拖拽轨迹图
### ⌨️ 键盘追踪
- 总按键计数 + 分类统计(字母、数字、空格、修饰键、导航键、符号、功能键等)
- **输入单词**计数,带有智能检测(缓存 + 退格 + 导航)
- **实时 WPM**(1小时滑动平均值)
- **高频词**,带有 **双语 FR/EN 词干提取**(通过 NLTK SnowballStemmer)→ 对变体进行分组(`travailler`, `travaille`, `travaillé` → 1 个词干)
- 自动过滤 FR + EN 的 **停用词**(排除 200+ 个单词)
- **快捷键**检测:Ctrl+C、Ctrl+V、Ctrl+Z、Alt+Tab、Win+D……(识别 25+ 种组合)
- 使用频率最高的前 24 个键
### 📊 Web 仪表板
打开 `http://localhost:5000` —— 包含 5 个标签页:
| 标签页 | 内容 |
|---|---|
| 🖱️ **鼠标** | 点击 KPI、热力图、拖拽图、距离,以及**趣味对比**(埃菲尔铁塔、长颈鹿、大披萨、救世基督像、泰坦尼克号、波音 747 等) |
| ⌨️ **键盘** | 按键 KPI、WPM、高频键、高频词、快捷键、独立词汇量 |
| 📈 **分析** | GitHub 风格的日历图(52 周)、生产力得分、每小时鼠标/键盘相关性、**异常**检测(z-score)、“你 vs 你”对比 |
| 🪟 **应用程序** | 根据当前活动应用(Chrome、VSCode、Excel 等)划分的点击和按键分布 |
| 🏆 **记录** | 单日最高点击/按键/拖拽/滚动次数、最常输入的单词、连续打卡天数、移动距离对比 300+ 参考物体(从 CD 到太阳直径 ☀️) |
### 🎨 额外功能
- 🪟 **基于应用程序的追踪**(Windows):你最常用哪个应用?
- ⏸️ **休息检测**:自动记录超过 5 分钟的非活动时段
- 📅 **全局时间过滤器**:今天、昨天、7 天、30 天、本周、本月、本年、12 个月、全部、**自定义时间段**、**对比模式**
- 🚀 **Windows 开机自启**(通过注册表 `HKCU\Run`)
- 🍔 **系统托盘图标**(通过 pystray)
- 🎯 **置顶悬浮小组件**(通过 tkinter)
- 🖥️ **动态多屏幕检测**(每 5 秒热插拔检测)
## 🛠️ 技术栈
- **后端**:Python 3.10+(`pynput`、`http.server`、`threading`)
- **前端**:原生 HTML / CSS / JS + **Chart.js 4.4**(通过 CDN)
- **NLP**:NLTK Snowball Stemmer(FR + EN)
- **系统 UI**:`pystray` + `Pillow`(托盘),`tkinter`(小组件),`ctypes`(Windows API)
- **持久化**:两个 JSON 文件(无数据库)
## 📦 安装
```
# 克隆 repo
git clone https://github.com/GuillaumeBlais/activity-tracker.git
cd activity-tracker
# (推荐)创建虚拟环境
python -m venv .venv
# Windows:
.venv\Scripts\activate
# Linux/macOS:
source .venv/bin/activate
# 安装依赖
pip install -r requirements.txt
# (可选)下载 NLTK 数据用于 stemming
python -c "import nltk; nltk.download('punkt')"
```
## ▶️ 运行
```
python tracker.py
```
然后在浏览器中打开 **http://localhost:5000**。
追踪器将会:
1. 自动检测你的屏幕
2. 启动鼠标和键盘的 hook(在 Windows 上有时需要管理员权限)
3. 在 5000 端口启动本地 HTTP 服务器
4. 每 10 秒将数据保存到 JSON 文件中
若要停止:在终端中按 `Ctrl+C`,或右键点击托盘图标 → *退出*。
## 📁 项目结构
```
activity-tracker/
├── tracker.py # Backend : capture + serveur HTTP
├── dashboard.html # Frontend : dashboard 5 onglets
├── mouse_data.json # 🔒 Données souris (généré, gitignoré)
├── keyboard_data.json # 🔒 Données clavier (généré, gitignoré)
├── requirements.txt # Dépendances Python
├── .gitignore
└── README.md
```
## 🔒 隐私
- 🚫 **无任何外部网络请求** —— 如果愿意,你可以用 Wireshark 进行检查。
- 🏠 HTTP 服务器仅在 `127.0.0.1` (localhost) 上监听。
- 🗄️ 数据保存在你的机器上,位于你的项目文件夹中。
- 🙈 `.json` 文件已被 git 忽略 —— 你不会意外提交它们。
- ⚠️ 仍请保持谨慎:这些文件包含**大量个人隐私信息**。请加密你的磁盘,不要分享这些文件。
## 📝 许可证
MIT © Guillaume Blais
## 🤝 贡献
最初只是个人项目 —— 但欢迎提交 PR(新增距离参考对象、改进仪表板、为 Linux/macOS 提供应用程序追踪支持等)。
*用 ☕ 和无数次点击制作。*
标签:Python, 后端开发, 多模态安全, 数据可视化, 无后门, 本地离线, 桌面行为追踪, 逆向工具, 键鼠分析