kritskii-ilia/FaceComposite
GitHub: kritskii-ilia/FaceComposite
基于参数化SVG渲染与离线语音识别的本地化模拟画像构建工具,通过文字描述辅助操作员生成可解释的嫌疑人参考画像。
Stars: 0 | Forks: 0
# 模拟画像生成器 (MVP)
这是一款面向桌面的**本地化**构建应用,旨在根据口头描述生成参考性的嫌疑人模拟画像。操作员与目击者/受害者协同工作,输入外貌特征描述——系统基于参数化特征组合出初始画像,随后可通过手动进一步微调。
这是**第一阶段的 MVP**:它不是生成式神经网络,而是一个可控且具备可解释性的构建器(参见 [docs/original-user-prompt.md](docs/original-user-prompt.md) 中的简介)。
## 从源码安装
```
git clone https://github.com/kritskii-ilia/FaceComposite.git
cd FaceComposite
py -m pip install pywebview vosk sounddevice
```
接着下载俄语 Vosk 语言模型(约 45 MB):
```
# 在项目的 models/ 文件夹中
curl -L https://alphacephei.com/vosk/models/vosk-model-small-ru-0.22.zip -o vosk-ru.zip
unzip vosk-ru.zip -d models/
```
运行:`Запустить.bat` 或 `py app.py`。
构建独立的 `.exe` 文件:`build_exe.bat`(需要 `pyinstaller`)。
## 如何运行
无论选择哪种方式,均无需联网;数据完全保存在本地。
**1. 独立应用程序(推荐用于展览或陌生设备)。**
运行 `dist\FaceComposite\FaceComposite.exe` —— 这是一个真正的桌面窗口,无需安装 Python。
您可以将整个 `dist\FaceComposite\` 文件夹复制到任何 Windows 电脑上(仅需系统组件 WebView2,Windows 10/11 默认已包含)。
**2. 通过 Python 启动原生窗口(用于开发)。**
双击 `Запустить.bat`。首次运行需执行一次:`py -m pip install pywebview`。
重新构建 `.exe` —— 运行 `build_exe.bat`(还需要 `pyinstaller`)。
**3. 直接在浏览器中运行(最可靠的兜底方案)。**
在 Microsoft Edge 或任何 Chromium 浏览器中双击打开 `index.html`。
## MVP 功能特点
- **案件卡片**:名称、操作员、对象类型(在逃/失踪/其他)。
- **文字描述** → 点击“根据描述生成”按钮,将启动确定性的俄语文本特征提取,并生成初始画像。
- **演示预设**:包含现成描述的芯片组件(蓄胡男子、年轻女性、老人、女孩、儿童、嫌疑人)——一键生成画像。
- **语音输入(离线)**:点击“🎤 听写”按钮——通过 Vosk 在本地进行俄语语音识别,全程断网可用。此功能在原生应用程序(`.exe` / `Запустить.bat`)中可用;在纯浏览器模式下被禁用。识别出的文本会立即送入特征提取并生成画像。
- **“识别出的特征”面板**会显示具体设置了*什么*以及是*根据哪个词语*设置的(可解释性是建立操作员信任的基础,也为第二阶段的置信度功能奠定了基础)。
- **撤销/重做**(支持按钮及 Ctrl+Z / Ctrl+Y)——最多支持记录 60 步历史。
- **手动微调**:针对所有主要特征的下拉菜单(性别、年龄、肤色、脸型、下巴、耳朵、眼睛及颜色、眉毛、鼻子、嘴唇、发型及发色、面部毛发、眼镜)。
- **滑块精细调节**:脸部的宽度/长度、下颌宽度、额头高度、眼睛的大小与间距、鼻子的大小/长度、嘴巴的大小/高度、眉毛高度等。
- **特殊印记**:疤痕、痣、雀斑、皱纹。
- **“选择相似度”匹配**:该按钮会显示整个人脸的变异群体;操作员/目击者标记出最相似的个体,系统据此逐渐逼近目标(类似于 EvoFIT/EFIT-V 的 whole-face refinement 技术)。这实现了第二阶段规划中关于生成多个变体及迭代微调的需求。
- **根据描述匹配人脸**:点击“根据描述匹配人脸”按钮将生成一组与文本相符的候选人像库:在描述中明确指出的特征(脸型、鼻子、眉毛等)会被**锁定**且保持不变,只有目击者未提及的部分——即难以用语言描述的几何结构——会发生变异。只需单击即可解除任何锁定,使该特征也加入变异行列。选择相似的画像 → 逼近目标 → 点击“应用” → 使用常规特征进行最后微调。这是一条“从文字描述出发,通过样本筛选来生成画像”的路径,而不是单纯调整单一的画像。
- **画像版本**:保存当前状态快照;您可以随时回退到任意历史版本。
- **项目管理**:支持在本地保存/列表/打开/删除(基于 localStorage),此外还支持通过 `.fcase.json` 格式的文件进行导入与导出。
- **协查通报**:点击“协查通报”按钮将生成一份可打印的 A4 页面(包含页眉、带边框的画像、案件数据、特征列表、文字描述、免责声明)并将其保存为 PNG 格式——呈现出正式公文的视觉效果,而不仅仅是简单的图片。
- **结果导出**:PNG(画像),SVG(矢量格式),JSON-工程文件。
## 设计思路(关键决策)
- **技术栈 —— 无需编译的本地 Web 应用程序。** 用于演示时,这是最可靠且视觉效果出众的选择(在陌生设备上运行绝不会“崩溃”,也无需安装 Visual Studio);并且对于未来的产品化绝非死胡同:同一套前端代码完全可以被封装为 Windows 原生窗口(WebView2/Tauri)。更多详情请参阅 [docs/architecture.md](docs/architecture.md)。
- **渲染机制 —— 参数化绘图,而非图片拼接。** 每一个特征都是通过代码基于头部几何结构的基准点实时绘制而成的。这不仅实现了通过滑块进行*平滑的*手动修正,还能保证全局视觉风格的绝对统一;全程无需依赖外部美术资源包,排除了潜在的版权风险。在此基础之上,还叠加了柔和的光影效果(增加立体感),并根据性别和年龄区分了不同的几何轮廓。
- **特征提取 —— 采用确定性规则,而非神经网络。** 在第一阶段的实际业务应用中,可解释性与操作员的完全掌控力比什么都重要。
## 结构
```
icon.html — исходник иконки (SVG); app.ico — собранная иконка приложения
index.html — разметка экрана
styles.css — операторская тёмная тема
js/traits.js — таксономия признаков (единый источник правды) + модель профиля
js/render.js — параметрический движок сборки лица (SVG)
js/extract.js — детерминированное извлечение признаков из русского текста
js/store.js — локальное хранение, импорт/экспорт, PNG/SVG
js/ui.js — построение панелей из таксономии
js/app.js — состояние карточки, цикл перерисовки, обработчики
docs/ — бриф и архитектурные заметки
```
添加新特征 = 编辑 `traits.js`(描述定义)+ 在 `render.js` 中编写生成逻辑。
UI 和存储层将会自动识别并适配它。
## 路线图(第二阶段)—— 无需重构
底层架构在设计之初就预留了扩展空间,确保后续是增量升级而不是推倒重来:
1. **语音输入(离线 STT)** —— ✅ 已上线(基于 Vosk 俄语模型,`voice.py` + pywebview 桥接)。下一步规划:流式实时显示识别文本、录音输入设备选择、自动标点。
2. **自然语义的智能解析**:扩充了规则字典(涵盖肤色、年龄表述的格变与语序、否定句式如“没有胡子/不戴眼镜”、同义词);提取的准确性已通过测试集验证 —— 参见 [tests/extract-tests.html](tests/extract-tests.html)(在浏览器中打开后,会针对一组测试短语直观显示 PASS/FAIL 结果)。下一步规划:为每一个特征引入置信度/证据追踪层(数据库相关字段已预留完毕)。
3. **生成多个初始变体**及**迭代式筛选**(选择相似画像)—— ✅ 已上线(`evolve.js`,包含“选择相似度”及“根据描述匹配人脸”按钮)。✅ 并且已实装**特征“锁定”机制** —— 在描述中提及的特征会被自动锁定,其余未提及特征则自动参与变异演化;锁定状态可通过鼠标点击解除。下一步规划:保存变异演化历史,以及不同推演分支的可视化直观对比。
4. **原生 Windows 封装** —— ✅ 已完成(基于 pywebview + WebView2 架构,`app.py`,生成完全独立的 `.exe`)。下一步规划:将工程数据存储目录从 localStorage 迁移至 `%APPDATA%`(底层 `store.js` 接口逻辑保持不变),并添加应用图标与正式版安装程序。
## 已知局限
- 画面呈现风格为**插画式**(目前业界根本不存在免费开源的离线照片级真实面部组件库;照片级逼真度已被单列为第二阶段的攻坚任务)。
- 本工具定位为辅助操作员生成*参考性*嫌疑人画像的助手,而**不是**用于自动化个人身份核验的系统。
标签:Python, SVG渲染, 人脸画像, 执法调查工具, 数据可视化, 无后门, 桌面应用, 漏洞挖掘, 离线语音识别, 自定义脚本, 语音转写, 逆向工具