Cum de a identifica imagini duplicat cu php, savepearlharbor

În orice proiect, factorul uman nu a fost anulat și, dacă utilizatorii înșiși încarcă imagini pe site - apariția duplicatelor nu poate fi evitată. Când vine vorba de mii de fișiere, nu se uită deloc la ochi, iar imaginile repetitive nu sunt doar inutile pentru oricine, ci și pentru a ocupa spațiu, a cheltui o resursă și, în cele din urmă, a încetini munca.

Cum de a identifica imagini duplicat cu php, savepearlharbor

Prin urmare, mai devreme sau mai târziu, se pune problema automatizării procesului de căutare a repetițiilor, iar aici vom examina principalele și, de asemenea, vom încerca în afaceri.

Compararea fișierelor prin intermediul funcției hash

O modalitate de a identifica duplicate este de a compara fișierele prin generarea unei valori de tip hash din conținutul fișierului specificat.

Un exemplu simplu de calcul al unui hash al unei imagini:

Rezultatul arată astfel: bff8b4bc8b5c1c1d5b3211dfb21d1e76

Dacă coșurile celor două imagini coincid, imaginile sunt aceleași.
Metoda este departe de cele mai exacte, deoarece funcționează numai pentru imagini identice, cu cea mai mică diferență - un sens zero.

Cum de a identifica imagini duplicat cu php, savepearlharbor

ImageMagick

Procesarea imaginilor Imagick :: compareImages returnează un tablou care conține imaginea restaurată și diferența dintre imagini.

Exemplu de utilizare la compararea a două imagini:

Ca urmare, cele două imagini comparate sunt modelate într-una, pe care diferențele sunt vizibile.
De asemenea, este posibil să se primească expresia numerică a diferențelor pentru fiecare parametru (un exemplu de la site-ul off.site):

gd2 și libpuzzle

Pentru a găsi rapid duplicate, trebuie să instalați librăriile gd2 și libpuzzle.

Libpuzzle este proiectat pentru a găsi rapid similitudinea vizuală a imaginilor (GIF, PNG, JPEG). În primul rând, imaginea bitmap este împărțită în blocuri - cadrele care nu poartă informații deosebit de importante sunt eliminate automat. Diferența dintre blocurile adiacente formează un vector - acesta este așa numitul legendă a imaginii. Similitudinea imaginilor este determinată de distanța dintre doi astfel de vectori. Deoarece, de obicei, schimbarea culorii, redimensionarea sau comprimarea nu afectează rezultatele obținute de libpuzzle.

Cum de a identifica imagini duplicat cu php, savepearlharbor

Libpuzzle este destul de ușor de utilizat. Calcularea semnăturii pentru două imagini:

Calcularea distanței dintre semnături:

Verificarea imaginilor pentru similitudine:

Comprimarea semnăturilor pentru stocarea în baza de date:

Permis de hash

Cel mai probabil, modul cel mai precis de a găsi duplicate este de a compara fișierele printr-un hash perceptiv. Testul de similitudine se efectuează prin numărarea numărului de poziții diferite între cele două hași, distanța Hamming. Cu cât distanța este mai mică, cu atât este mai mare coincidența.

Cum de a identifica imagini duplicat cu php, savepearlharbor

Instalarea pentru platformele UNIX arată astfel:

Puteți încerca, de fapt, prin i.onthe.io/phash. Descărcarea de imagini prin interfață și pe ieșire este un indicator al "identității".

Cum funcționează

Obținem hash-ul primei imagini:

Obținem hash-ul celei de-a doua imagini:

Obținem distanța Hamming între cele două imagini:

Am făcut aproape toate manipulările posibile cu aceeași fotografie pentru a verifica - ce schimbări împiedică determinarea duplicatelor prin pH, și care - nu.
De exemplu, atunci când oglindesc - imaginea rămâne nerecunoscută.
Dar cu florile poti juca cat vrei - nu va afecta rezultatul comparatiei.
Ceea ce nu poate fi spus despre manipulările cu canalele RGB, John nu a recunoscut din nou. deși distanța Hamming pentru acest caz este mult mai mică.

Rezultatele rămase arată astfel:

Nu interfera (distanța Hamming = 0)

Interferează (distanța Hamming - în paranteze)

Schimbarea culorii și a clarității

* Depinde de dimensiunea zonei tăiate. Atunci când se taie un cadru mic de câteva pixeli în grosime, distanța Hamming va fi zero, prin urmare, similitudinea este de 100%. Dar cu cât cultura este mai vizibilă, cu atât este mai mare distanța, cu atât mai puține șanse de a găsi un duplicat. Puteți citi despre căutarea duplicatelor duplicate prin intermediul hashes-urilor perceptive aici.

** la fel ca la croșetat. Când rotiți câteva grade, distanța este nesemnificativă, dar cu cât unghiul de înclinare este mai mare, cu atât diferența este mai puternică.

  1. Pentru a compara imaginile, utilizați ImageMagick. și să găsească una complet identică - o comparație printr-un hash.
  2. Pentru a găsi imagini ușor modificate, utilizați librăria libpuzzle.
  3. Comparația prin hash perceptiv este una dintre cele mai fiabile, puteți încerca aici.

Articole similare