This page was machine-translated. Spotted a mistake?Help improve it.
Skip to content

查找重复项

上传多张图像,使用感知哈希(dHash)检测重复和近似重复的图像。将相似图像分组,识别每组中质量最佳的版本,并计算可节省的潜在空间。

API 端点

POST /api/v1/tools/image/find-duplicates

接受包含多个图像文件的 multipart 表单数据,以及一个可选的 JSON settings 字段。

参数

参数类型是否必填默认值说明
thresholdnumber8将图像视为重复项的最大汉明距离(0 到 20)。值越小匹配越严格

文件字段

在 multipart 请求中上传至少 2 个图像文件(全部使用 file 字段名,或对文件部分使用任意字段名)。

请求示例

bash
curl -X POST http://localhost:1349/api/v1/tools/image/find-duplicates \
  -H "Authorization: Bearer si_your-api-key" \
  -F "[email protected]" \
  -F "[email protected]" \
  -F "[email protected]" \
  -F "[email protected]" \
  -F 'settings={"threshold": 8}'

响应示例

json
{
  "totalImages": 4,
  "duplicateGroups": [
    {
      "groupId": 1,
      "files": [
        {
          "filename": "photo1.jpg",
          "similarity": 100,
          "width": 4032,
          "height": 3024,
          "fileSize": 2450000,
          "format": "jpeg",
          "isBest": true,
          "thumbnail": "data:image/jpeg;base64,/9j/..."
        },
        {
          "filename": "photo2.jpg",
          "similarity": 96.88,
          "width": 1920,
          "height": 1440,
          "fileSize": 850000,
          "format": "jpeg",
          "isBest": false,
          "thumbnail": "data:image/jpeg;base64,/9j/..."
        }
      ]
    }
  ],
  "uniqueImages": 2,
  "spaceSaveable": 850000,
  "skippedFiles": []
}

响应字段

字段类型说明
totalImagesnumber成功分析的图像数量
duplicateGroupsarray重复图像的分组
uniqueImagesnumber不属于任何重复分组的图像数量
spaceSaveablenumber移除非最佳重复项后可节省的总字节数
skippedFilesarray无法处理的文件(含文件名和原因)

重复分组对象

字段类型说明
groupIdnumber分组标识符
filesarray此重复分组中的图像

文件对象(分组内)

字段类型说明
filenamestring原始文件名
similaritynumber与参考图像(分组中的第一张)的相似度百分比
widthnumber图像宽度(像素)
heightnumber图像高度(像素)
fileSizenumber文件大小(字节)
formatstring图像格式
isBestboolean是否为质量最高的版本(像素最多、文件最大)
thumbnailstring 或 null用于预览的 Base64 JPEG 缩略图(200px 宽)

说明

  • 使用 128 位 dHash(64 位行 + 64 位列)进行感知相似度检测。即使经过缩放、重新压缩和轻微编辑,也能识别出重复项。
  • 阈值表示两个哈希之间的最大汉明距离。默认值 8 可捕获近似重复项,同时避免误报。使用 0 表示仅识别像素完全相同的图像,使用 15-20 表示非常宽松的匹配。
  • 每组中的“最佳”图像是像素最多(宽 x 高)的那张,以文件大小作为决胜依据。
  • 至少需要 2 张图像。验证或解码失败的文件会在 skippedFiles 中报告,而不会导致整个请求失败。
  • 缩略图是编码为 data URI 的 200px 宽 JPEG 预览图。
  • 支持所有常见格式(HEIC、RAW、PSD、SVG 会被自动解码)。