İki sorunu düzelttik: (1) eski ekran görüntüleri kategori sayfasının ortasından kırpılmıştı; (2) bazı parça fotoları fiyatıyla eşleşmiyordu. 30 beceri: 25 uygulandı, 2 ölçüldü/not edildi, 3 planlandı.We fixed two problems: (1) the old screenshots were crops from the middle of category pages; (2) some part photos did not match their price. 30 skills: 25 applied, 2 measured / noted, 3 planned.
Ne değiştiWhat changed
- Canlı ilan kontrolü: 500 rastgele satırda fiyat %99.8 aynı (GA %98.9–99.96); foto %99.8 o ilana ait; 1 ilan kapanmış.Live listing check: on 500 random rows the price is the same in 99.8% (CI 98.9–99.96%); the photo belongs to that listing in 99.8%; 1 listings closed.
- Foto kontrolü: 2756 foto; 96 gizlendi (bütün araç, modül/anahtar, yığın, farklı parçaya aynı foto), 160 “incele”, 26 paylaşılan foto. Tahmini kötü foto oranı galeride %13.4 → %2.3.Photo check: 2756 photos; 96 hidden (whole car, module/switch, pile, same photo for a different part), 160 “review”, 26 shared photos. Estimated bad-photo rate in the gallery 13.4% → 2.3%.
- Yeni kanıt kartları: ilanın kendi sayfasının üstü (başlık, foto, fiyat) + bizim satırımız + SHA-256.New evidence cards: top of the listing’s own page (header, photo, price) + our row + SHA-256.
- 1Kaydın kendi sayfasını çek, kategori sayfasını değilCapture the record’s own page, not a category pageUygulandıApplied
Eski görüntüler kategori sayfasının ortasından kırpılmıştı ve DB’de olmayan “Pazarlık” ilanlarını gösteriyordu. Yeni kartlar her DB satırının kendi ilan sayfasını açar.The old shots were crops from the middle of category pages and showed “Pazarlık” cards that are not in the DB. The new cards open each DB row’s own listing page.
📄 W3C PROV-O — provenance: an entity is linked to the activity and source that generated it ↗
- 2Sayfanın üstünü, adres çubuğu ve zamanla çekShoot the top of the page with URL bar and timeUygulandıApplied
Görüntü 1280×900, sayfa en üstte: site başlığı, ilan başlığı, fotoğraf ve fiyat görünür; üstte tam URL ve UTC saat.Screenshot 1280×900 at the top of the page: site header, listing title, photo and price visible; full URL and UTC time on top.
📄 OSINT Academy — Preserving digital evidence: full page with URL bar and timestamp ↗
- 3Her dosyanın SHA-256 özetiSHA-256 hash of every artefactUygulandıApplied
Her PNG, kart ve sayfa HTML’i için SHA-256 manifest.json’a yazılır; sonradan değiştirilirse anlaşılır.Every PNG, card and page HTML gets a SHA-256 in manifest.json, so later edits are detectable.
📄 Web archiving screenshots — URL, UTC time, SHA-256, viewport, HTTP status ↗
- 4Pikselin yanında DOM’u da saklaKeep the rendered DOM next to the pixelsUygulandıApplied
Ekran görüntüsü tek başına yapıyı kanıtlamaz; işlenmiş HTML’in özeti de saklanır.A screenshot alone does not prove structure; a hash of the rendered HTML is stored too.
📄 ISO/IEC 27037 web evidence acquisition guide (rendered DOM + screenshot) ↗
- 5İddia ile kanıt yan yanaClaim and evidence side by sideUygulandıApplied
Kartın solunda canlı ilan, sağında bizim satırımız: foto, DB fiyatı, canlı fiyat, yıllar ve ✓/✗ kontroller.Left: the live listing; right: our row — photo, DB price, live price, years and ✓/✗ checks.
📄 NN/g — UX guidelines for e-commerce product pages (name, image, price together) ↗
- 6WARC arşivi (ISO 28500)WARC archive (ISO 28500)PlanlandıPlanned
Kanıtların tam yeniden oynatılabilir kopyası için WARC; bugün PNG+HTML özeti yeterli görüldü.WARC for fully replayable copies; PNG + HTML hash is used for now.
📄 ISO 28500:2017 WARC — explained in site2pdf legal archiving guide ↗
- 7Güvenilir zaman damgası (RFC 3161)Trusted timestamp (RFC 3161)PlanlandıPlanned
Saat bilgisi bugün sunucu saatinden; mahkeme düzeyi için bağımsız zaman damgası gerekir.Time comes from the server clock today; court-grade use needs an independent timestamp.
- 8Görsel fiyatı değil, yapılandırılmış veriyi okuRead structured data, not the visual priceUygulandıApplied
İlan sayfasındaki schema.org Product/Offer (ld+json) fiyatı ve para birimi okunur ve DB fiyatıyla karşılaştırılır.The schema.org Product/Offer (ld+json) price and currency on the listing page are read and compared with the DB price.
- 9Uyumluluk yılları ilandanFit years from the listing itselfUygulandıApplied
isAccessoryOrSparePartFor alanı (ör. “Fiat Egea 2020 - 2024”) okunur; 76 satırın tahmini yılı ilan yılıyla değişti.The isAccessoryOrSparePartFor field (e.g. “Fiat Egea 2020 - 2024”) is read; 76 rows had their guessed years replaced by listing years.
- 10Stok durumu: satılanı çıkarAvailability: drop sold itemsUygulandıApplied
schema.org availability okunur; kapanmış/satılmış ilanlar işaretlenir (1 / 500).schema.org availability is read; closed / sold listings are flagged (1 / 500).
- 11Rastgele örnek + Wilson güven aralığıRandom sample + Wilson intervalUygulandıApplied
500 rastgele satır canlı kontrol edildi: fiyat eşleşmesi %99.8 (GA %98.9–99.96), foto ilana ait %99.8.500 random rows were checked live: price match 99.8% (CI 98.9–99.96%), photo belongs to the listing 99.8%.
📄 Wilson 1927 — Probable inference, the law of succession, and statistical inference (JASA) ↗
- 12Tazelik: kontrol tarihi her satırdaFreshness: verification date on every rowUygulandıApplied
Kontrol edilen satırlara price_verified tarihi eklendi; ilanlar değiştikçe yeniden tarama sırası buna göre.Checked rows carry a price_verified date; re-crawl order follows it as listings change.
📄 Cho & Garcia-Molina 2003 — Effective page refresh policies for web crawlers (ACM TODS) ↗
- 13robots.txt + nazik hızrobots.txt + polite rateUygulandıApplied
/ilan/ yolu izinli; istekler 1,5 sn arayla, tek tek. Görseller CDN’den, sayfa başına bir kez.The /ilan/ path is allowed; requests 1.5 s apart, one at a time. Images come from the CDN, once each.
- 14Algısal özet (pHash) ile tekrar eden fotoPerceptual hash (pHash) for reused photosUygulandıApplied
256 bitlik DCT özeti; 16 foto çifti farklı ilanlarda aynı. Bunların 4 tanesi farklı parçalar için aynı foto → gizlendi.256-bit DCT hash; 16 photo pairs are the same across different listings. 4 of them use one photo for different parts → hidden.
📄 Zauner 2010 — Implementation and benchmarking of perceptual image hash functions ↗
- 15Ürün fotosu için eşik ayarıThreshold tuned for product photosUygulandıApplied
Beyaz zeminli ürün fotolarında gevşek eşik yanlış eşleşme verir; 255 bitte ≤12 farklı bit kullanıldı (gözle kontrol edildi).On white-background product photos a loose threshold gives false matches; ≤12 differing bits out of 255 is used (checked by eye).
📄 SimilarImageFinder — pHash hash_size 16, Hamming threshold guidance ↗
- 16Aynı foto çok ilanda = stok/genel fotoSame photo on many listings = stock photoUygulandıApplied
Bir satıcının ikiz modellere (Fiorino/Nemo, Sandero/Logan…) aynı fotoyu koyması “paylaşılan foto” olarak işaretlenir; galeride yalnız bir kez gösterilir.A seller reusing one photo for twin models (Fiorino/Nemo, Sandero/Logan…) is marked “shared photo” and shown only once in the gallery.
📄 idealo/imagededup — finding exact and near duplicates in an image collection (hashing + CNN) ↗
- 17Katmanlı tekrar aramaLayered duplicate searchUygulandıApplied
Önce dosya anahtarı, sonra pHash, sonra CLIP vektör benzerliği (kosinüs ≥0,97) ile yakın kopyalar.File key first, then pHash, then CLIP-vector similarity (cosine ≥0.97) for near-duplicates.
📄 vecstore — Duplicate image detection: hashes vs embeddings ↗
- 18Özet mi, vektör mü?Hash or embedding?Ölçüldü / notMeasured / noted
Yayın: özetler birebir kopyada iyi, yakın kopyada zayıf; vektörler daha iyi. İkisi birlikte kullanıldı.Paper: hashes are good for exact copies and weak for near-copies; embeddings do better. Both are used.
📄 MDPI Electronics 15(7):1493 — perceptual hashing vs deep embeddings for product images ↗
- 19CLIP sıfır-atış: foto parçayı gösteriyor mu?CLIP zero-shot: does the photo show the part?UygulandıApplied
Tüm 2756 foto CLIP ViT-B/32 (int8 ONNX, CPU) ile puanlandı. Bulgu: 165 px küçük resimde parçalar zor ayrılıyor; büyük (570 px) resme geçildi.All 2756 photos were scored with CLIP ViT-B/32 (int8 ONNX, CPU). Finding: on 165 px thumbnails parts are hard to tell apart, so the 570 px images were used.
📄 Radford et al. 2021 — Learning transferable visual models from natural language supervision (CLIP) ↗
- 20İstem şablonları ve toplulukPrompt templates and ensemblingUygulandıApplied
Her sınıf için 3 şablon (“a photo of…”, “a used … for sale”, “a close-up photo of…”) ortalandı.Three templates per class (“a photo of…”, “a used … for sale”, “a close-up photo of…”) are averaged.
📄 CLIP paper §3.1.4 — prompt engineering and ensembling (+3.5 points on ImageNet) ↗
- 21Kapsam dışı sınıflar: bütün araç, logo, yığınOut-of-scope classes: whole car, logo, pileUygulandıApplied
Parça istemlerinin yanına “bütün araç”, “elektronik modül/anahtar”, “çok parça yığını”, “telefon ekran görüntüsü”, “bulanık” istemleri eklendi.“Whole car”, “electronic module / switch”, “pile of parts”, “phone screenshot” and “blurry” prompts were added next to the part prompts.
📄 Esmaeilpour et al. 2022 — Zero-shot out-of-distribution detection based on CLIP (ZOC) ↗
- 22Güvenli öğrenme ile etiket hatası bulmaConfident learning to find label errorsUygulandıApplied
CLIP vektörleri üzerinde katman dışı (5-kat) doğrusal sınıflandırıcı: belirtilen parçanın olasılığı çok düşükse şüpheli. Doğruluk üst-1 %82.3.Out-of-fold (5-fold) linear probe on CLIP vectors: if the stated part gets a very low probability the photo is suspect. Top-1 accuracy 82.3%.
- 23E-ticarette görsel-metin uyumsuzluğuImage-text mismatch in e-commerceUygulandıApplied
Satıcı fotosu ile ilan metni (parça) uyuşmazlığı ayrı bir hata türü olarak ölçülüyor.A mismatch between the seller photo and the listing text (part) is measured as its own error type.
- 24CPU’da kuantize ONNXQuantised ONNX on CPUUygulandıApplied
GPU yok: 89 MB int8 görüntü modeli + 64 MB metin modeli, onnxruntime ile 2 CPU’da tüm fotolar dakikalar içinde.No GPU: 89 MB int8 vision + 64 MB text model with onnxruntime score all photos on 2 CPUs in minutes.
📄 Xenova/clip-vit-base-patch32 ONNX weights (Hugging Face) ↗
- 25Eşiği elle etiketli örnekle ayarla, sonra yeni örnekte doğrulaTune on hand labels, then validate on a fresh sampleUygulandıApplied
Eşik 431 elle etiketli fotoyla seçildi, ardından ayrı 48 fotoda doğrulandı: kesinlik %60.0, kalan kötü oran %2.3.The threshold was chosen on 431 hand-labelled photos, then validated on a separate 48: precision 60.0%, remaining bad rate 2.3%.
- 26Emin değilsen “incele” bandıAn “uncertain → review” bandUygulandıApplied
Kesin kötü → gizle; şüpheli → galeride kullanma ama tabloda göster; temiz → göster.Sure bad → hide; suspect → not used in the gallery but kept in the table; clean → shown.
📄 Geifman & El-Yaniv 2019 — SelectiveNet: a deep neural network with an integrated reject option ↗
- 27Kısayol öğrenmeye dikkatBeware of shortcut learningÖlçüldü / notMeasured / noted
Logo/telefon numarası basılmış fotolar CLIP’i “yazı” sınıfına çekiyor; bu yüzden “logo” tek başına kötü sayılmadı.Photos stamped with a logo / phone number pull CLIP towards “text”; so “logo” alone is not treated as bad.
📄 Geirhos et al. 2020 — Shortcut learning in deep neural networks ↗
- 28Galeride yalnız doğrulanmış, sorguya özgü fotoGallery shows only verified, query-specific photosUygulandıApplied
Web galerisi ve Telegram albümü artık yalnız “ok” fotoları kullanıyor; 96 foto gizlendi, 160 foto “incele”.The web gallery and Telegram album now use only “ok” photos; 96 photos hidden, 160 marked “review”.
📄 NN/g — 6 tips for product photos on listing pages (“specific” photos) ↗
- 29Her fiyatın yanında kaynak ve kontrol tarihiSource and check date next to each priceUygulandıApplied
Tabloda ✓ = fiyat canlı ilanda aynı (tarihli); 📷✗ = foto gizlendi, nedeni üzerine gelince.In the table ✓ = price matches the live listing (dated); 📷✗ = photo hidden, reason on hover.
- 30CLIP + DINOv2 topluluğuCLIP + DINOv2 ensemblePlanlandıPlanned
2 GB RAM’de ikinci model sığmadı; GPU ile ince taneli parça ayrımı için planlandı.A second model did not fit in 2 GB RAM; planned for finer part recognition with a GPU.
Kod: cekicin-ai/v8 (verify.py, photo_check.py, probe.py, badtype.py, evidence.py, apply_v8.py). Fiyat DB 2.1 · API 1.10.0.Code: cekicin-ai/v8 (verify.py, photo_check.py, probe.py, badtype.py, evidence.py, apply_v8.py). Price DB 2.1 · API 1.10.0.