Skip to content

感知哈希(pHash)

🖼️ `pkg/phash/phash.go` — 视觉去重与相似度。

pkg/phash 用感知哈希(perceptual hash)比较截图,发现视觉重复或微小变化,比逐像素对比快得多且对人眼变化敏感。

📁 源码:pkg/phash/phash.go

核心类型与函数

符号源码说明
HashResultL15哈希结果(含距离/相似度)
ComputeHash(path)L23单图计算
ComputeHashFromImage(img)L31从 image.Image 计算
ComputePerceptionHash(path)L43别名
CompareHashes(a, b)L52比较两哈希
HashToHex(h)L67哈希转十六进制
HexToHash(s)L75十六进制转回

算法流程

基于 goimagehash,默认 pHash(DCT):

用 pHash 比对"今日 vs 昨日"截图是否改版的时序:

相似度计算

CompareHashes 用汉明距离(不同位数)衡量差异:

  相似度 = 1 - hamming_distance / 64

  distance=0  → 完全相同 (相似度 1.0)
  distance<5  → 视觉几乎相同
  distance<10 → 高度相似
  distance>20 → 明显不同

HashResult 字段

字段说明
Hash64bit 感知哈希
Hex十六进制表示
Distance与参照的距离
Similarity0~1 相似度

应用场景

  • 去重:批量结果中过滤视觉重复页
  • 变化监控:定期截图,距离>阈值即告警
  • 克隆检测:钓鱼站常复刻正版视觉
  • 回归:UI 变更前后对比

感知哈希(进阶)监控

存储与恢复

哈希可存为十六进制串(SQLite/JSONL),需要时 HexToHash 还原再比较,无需保留原图。

下一步

基于 MIT 许可发布