mirror of
https://github.com/snapotter-hq/SnapOtter.git
synced 2026-08-03 07:46:42 +02:00
All 181 docs markdown files translated into 20 languages (apps/docs/<locale>/**). Companion to the i18n code PR; admin-merged because the file count exceeds GitHub's per-PR CI trigger limit. Validated by pnpm i18n:check (all surfaces, 0 stale/missing) and a clean all-locale docs build.
116 lines
4.6 KiB
Markdown
116 lines
4.6 KiB
Markdown
---
|
||
description: "Algısal karma kullanarak yinelenen ve neredeyse yinelenen görselleri tespit edin."
|
||
i18n_source_hash: 4e1f4413f90f
|
||
i18n_provenance: human
|
||
i18n_output_hash: 60bf8830f7de
|
||
---
|
||
|
||
# Yinelenenleri Bul {#find-duplicates}
|
||
|
||
Algısal karma (dHash) kullanarak yinelenenleri ve neredeyse yinelenenleri tespit etmek için birden fazla görsel yükleyin. Benzer görselleri birlikte gruplandırır, her gruptaki en iyi kalitedeki sürümü belirler ve olası alan tasarrufunu hesaplar.
|
||
|
||
## API Uç Noktası {#api-endpoint}
|
||
|
||
`POST /api/v1/tools/image/find-duplicates`
|
||
|
||
Birden fazla görsel dosyası ve isteğe bağlı bir JSON `settings` alanı içeren multipart form verisini kabul eder.
|
||
|
||
## Parametreler {#parameters}
|
||
|
||
| Parametre | Tür | Zorunlu | Varsayılan | Açıklama |
|
||
|-----------|------|----------|---------|-------------|
|
||
| threshold | number | Hayır | `8` | Görselleri yinelenen olarak kabul etmek için maksimum Hamming mesafesi (0 ile 20 arası). Daha düşük = daha katı eşleştirme |
|
||
|
||
### Dosya Alanları {#file-fields}
|
||
|
||
Multipart isteğinde en az 2 görsel dosyası yükleyin (tümü `file` alan adını veya dosya bölümleri için herhangi bir alan adını kullanarak).
|
||
|
||
## Örnek İstek {#example-request}
|
||
|
||
```bash
|
||
curl -X POST http://localhost:1349/api/v1/tools/image/find-duplicates \
|
||
-H "Authorization: Bearer si_your-api-key" \
|
||
-F "file=@photo1.jpg" \
|
||
-F "file=@photo2.jpg" \
|
||
-F "file=@photo3.jpg" \
|
||
-F "file=@photo4.jpg" \
|
||
-F 'settings={"threshold": 8}'
|
||
```
|
||
|
||
## Örnek Yanıt {#example-response}
|
||
|
||
```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": []
|
||
}
|
||
```
|
||
|
||
## Yanıt Alanları {#response-fields}
|
||
|
||
| Alan | Tür | Açıklama |
|
||
|-------|------|-------------|
|
||
| totalImages | number | Başarıyla analiz edilen görsel sayısı |
|
||
| duplicateGroups | array | Yinelenen görsel grupları |
|
||
| uniqueImages | number | Herhangi bir yinelenen grubun parçası olmayan görsel sayısı |
|
||
| spaceSaveable | number | En iyi olmayan yinelenenleri kaldırarak tasarruf edilebilecek toplam bayt |
|
||
| skippedFiles | array | İşlenemeyen dosyalar (dosya adı ve nedeniyle birlikte) |
|
||
|
||
### Yinelenen Grup Nesnesi {#duplicate-group-object}
|
||
|
||
| Alan | Tür | Açıklama |
|
||
|-------|------|-------------|
|
||
| groupId | number | Grup tanımlayıcısı |
|
||
| files | array | Bu yinelenen gruptaki görseller |
|
||
|
||
### Dosya Nesnesi (bir grup içinde) {#file-object-within-a-group}
|
||
|
||
| Alan | Tür | Açıklama |
|
||
|-------|------|-------------|
|
||
| filename | string | Orijinal dosya adı |
|
||
| similarity | number | Referans görsele (gruptaki ilki) benzerlik yüzdesi |
|
||
| width | number | Piksel cinsinden görsel genişliği |
|
||
| height | number | Piksel cinsinden görsel yüksekliği |
|
||
| fileSize | number | Bayt cinsinden dosya boyutu |
|
||
| format | string | Görsel biçimi |
|
||
| isBest | boolean | Bunun en yüksek kalitedeki sürüm olup olmadığı (en fazla piksel, en büyük dosya) |
|
||
| thumbnail | string veya null | Önizleme için Base64 JPEG küçük resim (200px genişliğinde) |
|
||
|
||
## Notlar {#notes}
|
||
|
||
- Algısal benzerlik tespiti için 128 bitlik bir dHash (64 bitlik satır + 64 bitlik sütun) kullanır. Bu, yeniden boyutlandırma, yeniden sıkıştırma ve küçük düzenlemeler arasında bile yinelenenleri yakalar.
|
||
- Eşik değeri, karmalar arasındaki maksimum Hamming mesafesini temsil eder. Varsayılan 8 değeri, yanlış pozitiflerden kaçınırken neredeyse yinelenenleri yakalar. Yalnızca piksel bakımından aynı olanlar için 0, çok gevşek eşleştirme için 15-20 kullanın.
|
||
- Her gruptaki "en iyi" görsel, en fazla piksele (genişlik x yükseklik) sahip olandır; eşitlik durumunda dosya boyutu belirleyicidir.
|
||
- En az 2 görsel gereklidir. Doğrulama veya çözümlemede başarısız olan dosyalar, tüm isteğin başarısız olmasına neden olmak yerine `skippedFiles` içinde bildirilir.
|
||
- Küçük resimler, veri URI'leri olarak kodlanmış 200px genişliğinde JPEG önizlemeleridir.
|
||
- Tüm yaygın biçimler desteklenir (HEIC, RAW, PSD, SVG otomatik olarak çözümlenir).
|