confusable-vision
收藏资源简介:
confusable-vision是一个关于Unicode易混淆字符的视觉相似性评分数据集。它在230种系统字体中渲染字符对,测量结构相似性(SSIM),并生成评分的JSON文件,准确告诉你两个字符在哪些字体中易混淆以及置信度。数据集包含793个未在Unicode TR39中列出的易混淆对,以及563个非拉丁脚本之间的视觉易混淆对,填补了现有数据集的空白。
confusable-vision is a visual similarity scoring dataset focused on Unicode confusable characters. It renders character pairs across 230 system fonts, measures their structural similarity (SSIM), and generates scored JSON files that accurately specify in which fonts two given characters are confusable along with the corresponding confidence scores. This dataset includes 793 confusable character pairs not listed in Unicode TR39, as well as 563 visual confusable pairs between non-Latin scripts, filling the gaps of existing datasets.
数据集概述
数据集基本信息
- 数据集名称: confusable-vision
- 核心目标: 为Unicode易混淆字符提供基于经验的视觉相似性评分。
- 主要方法: 在230种系统字体中渲染字符对,测量结构相似性(SSIM),并生成带有评分的JSON文件,精确描述两个字符的混淆程度、涉及的字体以及置信度。
关键发现与规模
基于对22,000多个字符、12种书写系统进行的2650万次SSIM比较,主要发现如下:
1. 未被标准收录的易混淆对
- 数量: 793对。
- 描述: 这些字符在屏幕上看起来像拉丁字母,但未收录在Unicode官方的
confusables.txt中。 - 风险: 其中74.5%目前可在包名和域名中有效使用。
2. 首创的跨文字易混淆数据集
- 数量: 563对。
- 描述: 涵盖了非拉丁文字之间(如西里尔文与希腊文、韩文与汉字、天城文与泰文)的视觉易混淆对,这是此前公开数据集未覆盖的。
3. 字体感知的置信度评分
- 特点: 使用测量的SSIM值替代二元列表,量化混淆程度及具体字体。
- 对比: 96.5%的TR39易混淆对SSIM评分低于0.7;而危险的3.5%评分高于0.95。
数据内容与输出文件
已提交文件(CC-BY-4.0许可)
| 文件 | 描述 |
|---|---|
data/output/confusable-discoveries.json |
110个具有高SSIM(>= 0.7)或像素完全相同的TR39易混淆对。 |
data/output/candidate-discoveries.json |
793个未收录于TR39的新发现易混淆对,平均SSIM >= 0.7。 |
data/output/confusable-weights.json |
包含1,397个带权重的边,用于集成到namespace-guard中。 |
生成文件(需运行流水线重新生成)
| 文件 | 描述 |
|---|---|
data/output/render-index/ |
11,370个渲染PNG文件及索引。 |
data/output/candidate-index/ |
89,478个渲染PNG文件及索引。 |
data/output/confusable-scores.json |
完整的评分结果(63 MB)。 |
data/output/candidate-scores.json |
完整的评分结果(573 MB)。 |
data/output/report-stats.txt |
用于REPORT.md的详细统计数据。 |
技术方法
- 渲染流水线: 使用
build-index脚本将源字符和目标字符渲染为48x48灰度PNG图像,每个字符仅在其原生支持的字体中渲染。 - 评分计算: 使用
score-all-pairs和score-candidates脚本,以两种模式计算每个有效源/目标组合的SSIM:同字体模式和跨字体模式。 - 结果提取: 使用
extract-discoveries脚本过滤出高评分对(平均SSIM >= 0.7),并生成紧凑的JSON文件。 - 设计选择: 采用灰度渲染、无图像增强、使用SSIM而非学习嵌入、通过Fontconfig进行针对性渲染。
字体覆盖
自动发现所有包含拉丁字母a-z覆盖的系统字体,共计230种,分为以下几类:
- 标准字体: 74种(如Arial, Menlo, Georgia, Helvetica)。
- 文字字体: 49种(包含拉丁字形的中文、印度文、泰文字体)。
- Noto字体: 103种(用于非拉丁文字的Noto Sans变体)。
- 数学字体: 3种。
- 符号字体: 1种。
应用与集成
- 主要应用: 输出文件
confusable-weights.json可直接输入到namespace-guard(https://github.com/paultendo/namespace-guard),用于在包名、域名和标识符中进行运行时易混淆检测。 - 字体查询: 提供脚本查询特定字体存在的易混淆对,支持按阈值过滤和比较不同字体的SSIM差异。
许可信息
- 代码(src/, scripts/): MIT 许可证。
- 生成的数据(data/output/): CC-BY-4.0 许可证(https://creativecommons.org/licenses/by/4.0/),可自由使用、分享和改编,包括商业用途,需注明出处。
- 署名: Paul Wood FRSA (@paultendo), confusable-vision。



