Fotoduplikat

Finden Sie doppelte Bilder mit dem Java Cloud SDK

Unser Gehirn widmet sich der visuellen Verarbeitung und unsere Liebe zu Bildern beruht auf unserer Wahrnehmung und Aufmerksamkeitsfähigkeit. Die Bilder können unsere Aufmerksamkeit leicht erregen und viele Geräte, einschließlich Mobiltelefone, Digitalkameras, Scanner usw., erzeugen eine große Menge an Bildern. Darüber hinaus verfügen Bilder über unterschiedliche Komprimierungsalgorithmen und Rasterbilder sind unter ihnen weit verbreitet, da sie weniger Speicherplatz beanspruchen. Dennoch kommt es im Laufe der Zeit dazu, dass wir doppelte Fotos, überflüssige Bilder usw. erstellen. Wir verfügen über eine Vielzahl von Anwendungen, die die Möglichkeit bieten, doppelte Bilder zu finden, einschließlich der Suche nach doppelten Bildern. Falls Sie Bilder in Google Fotos gespeichert haben, können Sie versuchen, den Google Photo Duplicate Finder zu verwenden, den Duplicate Photo Finder Windows 10 oder den Duplicate Photo Finder Mac zu installieren (abhängig von Ihrem Betriebssystem). In diesem Artikel werden wir jedoch beleuchten, wie man mithilfe der REST-API einen fantastischen Duplikat-Foto-Finder entwickelt, der auf jeder Plattform verwendet werden kann.

Bildverarbeitungs-API

Für die Bildbearbeitung stehen zahlreiche Anwendungen zur Verfügung, die Funktionen zum Erstellen, Bearbeiten und Bearbeiten von Bilddateien bieten. Sie bieten auch Funktionen wie die Bildsuche basierend auf Techniken der umgekehrten Bildsuche oder einem anderen Algorithmus. Wenn Sie jedoch an einer REST-API-basierten Programmlösung mit umgekehrter Bildsuche interessiert sind, ist Aspose.Imaging Cloud definitiv die richtige Wahl. Seine leistungsstarke Suchmaschine hilft Entwicklern, ihrer Anwendung auf jeder Plattform nahtlos Funktionen für die umgekehrte Bildsuche hinzuzufügen. Sie können sogar den Bildvergleich starten, um Fotoduplikate unter mehreren anderen Bildern zu finden. Als Ergebnis dieses Vorgangs erhalten Sie die Liste der ähnlichsten Bilder gemäß den folgenden Bedingungen:

  • Grad der Ähnlichkeit
  • Die minimale Ähnlichkeitsschwelle
  • Vergleichsalgorithmus

Um nun über ähnliche Bildverarbeitungs- und Suchfunktionen für doppelte Bilder innerhalb der Java-Anwendung zu verfügen, müssen wir Aspose.Imaging Cloud SDK für Java verwenden, da es ein Wrapper für die Cloud-API ist. Der nächste Schritt besteht also darin, seine Referenz im Java-Projekt hinzuzufügen, indem die folgenden Informationen in pom.xml des Maven-Build-Typ-Projekts eingefügt werden.

<repositories> 
    <repository>
        <id>aspose-cloud</id>
        <name>artifact.aspose-cloud-releases</name>
        <url>http://artifact.aspose.cloud/repo</url>
    </repository>   
</repositories>

<dependencies>
    <dependency>
        <groupId>com.aspose</groupId>
        <artifactId>aspose-imaging-cloud</artifactId>
        <version>22.4</version>
    </dependency>
</dependencies>

Wenn Sie noch kein Konto über Aspose Cloud Dashboard erstellt haben, können Sie sich über eine gültige E-Mail-Adresse für eine kostenlose Testversion anmelden. Melden Sie sich nun mit dem neu erstellten Konto an und suchen/erstellen Sie die Client-ID und das Client-Geheimnis unter Cloud Dashboard. Diese Angaben werden zur Authentifizierung in den folgenden Abschnitten benötigt.

Finden Sie doppelte Bilder mit Java

Die umgekehrte Bildsuche ist eine Technik, mit der Sie anhand Ihres Beispielbilds visuell ähnliche Bilder suchen können. Nachfolgend sind die häufigsten Anwendungsfälle für diese Funktion aufgeführt:

Suchen Sie nach doppelten Bildern und entfernen Sie die Duplikate Suchen Sie nach inhaltsähnlichen Bildern Suchen Sie nach unangemessenen Inhalten Suchen Sie nach digital signierten Bildern

Unsere API unterstützt derzeit die inhaltsbasierte Bildsuche, die Suche nach doppelten Bildern, die Bildsuche anhand benutzerdefinierter registrierter Tags, den Bildvergleich und die Ähnlichkeitserkennung sowie Extraktionsvorgänge für Bildmerkmale. In diesem Abschnitt besprechen wir nun die Einzelheiten zum Auffinden doppelter Bilder mithilfe der Umkehrbildtechnik. Um diese Anforderung zu erfüllen, verwenden wir im Beispiel den Algorithmus AKAZE für die Merkmalserkennung und den Algorithmus RandomBinaryTree für den Merkmalsabgleich. Wir führen die folgenden Schritte aus, um die doppelten Bilder zu finden:

  • Laden Sie Bilder in den Cloud-Speicher hoch
  • Suchkontext erstellen
  • Bildfunktionen extrahieren
  • Suchen Sie nach doppelten Bildern

Laden Sie Bilder in den Cloud-Speicher hoch

Bitte verwenden Sie den folgenden Codeausschnitt, um Bilddateien vom lokalen Laufwerk in den Cloud-Speicher hochzuladen

  • Erstellen Sie zunächst ein Objekt von ImagingApi und geben Sie dabei ClientID und Client an
  • Zweitens: Lesen Sie alle Bilddateien aus dem angegebenen Verzeichnis
  • Filtern Sie nur Bilddateien und fügen Sie sie der gefilterten Liste hinzu
  • Laden Sie die Bilder mit der Methode uploadFile(…) in den Cloud-Speicher hoch und verwenden Sie dabei das UploadFileRequest-Objekt als Argument
// Holen Sie sich ClientID und ClientSecret von https://dashboard.aspose.cloud/
String clientId = "7ef10407-c1b7-43bd-9603-5ea9c6db83cd";
String clientSecret = "ba7cc4dc0c0478d7b508dd8ffa029845";

// Bildobjekt erstellen
ImagingApi imageApi = new ImagingApi(clientSecret, clientId);

File directory = new File("/Users/");
//Holen Sie sich alle Dateien aus dem Ordner
File[] allFiles = directory.listFiles();
if (allFiles == null || allFiles.length == 0) {
    throw new RuntimeException("No files present in the directory: " + directory.getAbsolutePath());
}
			 
//Legen Sie hier die erforderlichen Bilderweiterungen fest.
List<String> supportedImageExtensions = Arrays.asList("jpg", "png", "gif", "webp");
			 
int counter =0;
//Nur Bilddateien herausfiltern
List<File> acceptedImages = new ArrayList<>();
for (File file : allFiles) {
    //Analysieren Sie die Dateierweiterung
    String fileExtension = file.getName().substring(file.getName().lastIndexOf(".") + 1);
    //Überprüfen Sie, ob die Erweiterung in den unterstützten ImageExtensions aufgeführt ist
    if (supportedImageExtensions.stream().anyMatch(fileExtension::equalsIgnoreCase)) {
        //Fügen Sie das Bild zur gefilterten Liste hinzu
        acceptedImages.add(file);
			    
    // Laden Sie die erste PowerPoint-Präsentation
    byte[] bytes = Files.readAllBytes(file.toPath());
	
    // Datei-Upload-Anfrage erstellen
    UploadFileRequest request = new UploadFileRequest(acceptedImages.get(counter).getName(),bytes,null);
    // Laden Sie die Bilddatei in den Cloud-Speicher hoch
    imageApi.uploadFile(request);
    // Dateizähler erhöhen
    counter+=1;
    }
}

Suchkontext erstellen

  • Zuerst müssen wir den Merkmalserkennungsalgorithmus als Akaze angeben
  • Zweitens geben Sie den Algorithmus für den Merkmalsabgleich als randomBinaryTree an
  • Drittens erstellen Sie eine Bildsuchanfrage mit dem Objekt „CreateImageSearchRequest“.
  • Erstellen Sie nun den Suchkontextstatus mit der Methode createImageSearch(…).
// Geben Sie einen Algorithmus für die Merkmalserkennung an
String detector = "akaze";
// Geben Sie einen Algorithmus für den Merkmalsabgleich an
String matchingAlgorithm = "randomBinaryTree";

String folder = null; // File will be saved at the root of the storage
String storage = null; // We are using default Cloud Storage

// Bildsuchanfrage erstellen
CreateImageSearchRequest createSearchContextRequest = new CreateImageSearchRequest(detector,matchingAlgorithm, folder, storage);
// Suchkontextstatus erstellen 
SearchContextStatus status = imageApi.createImageSearch(createSearchContextRequest);
			  
// Status-ID des Suchkontexts abrufen
String searchContextId = status.getId();

Bildfunktionen extrahieren

Jetzt ist es an der Zeit, Bildfunktionen zu extrahieren und sie dem Suchkontext hinzuzufügen.

// Extrahieren Sie Bildfunktionen und fügen Sie sie dem Suchkontext hinzu
for (File file : allFiles) 
{
    CreateImageFeaturesRequest request = new CreateImageFeaturesRequest(searchContextId, null, null, "internal", null,null);
		imageApi.createImageFeatures(request);
}

Suchen Sie nach doppelten Bildern

  • Geben Sie den Schwellenwert für die Ähnlichkeit an
  • Zweitens erstellen Sie einen doppelten Bildsatz mit dem ImageDuplicatesSet-Objekt
  • Gehen Sie nun die Liste der doppelten Bilder durch und finden Sie Bildähnlichkeiten mit der Methode getSimilarity(…).
// Geben Sie den Ähnlichkeitsschwellenwert an
Double similarityThreshold = 90.0;
			    
// Erstellen Sie einen doppelten Bildsatz
ImageDuplicatesSet result = imageApi.findImageDuplicates(
    new FindImageDuplicatesRequest(status.getId(), similarityThreshold, folder, storage));

// Drucken Sie die Anzahl der doppelten Bilder aus
System.out.println("Duplicates Set Count: " + result.getDuplicates().size());
for (ImageDuplicates duplicates : result.getDuplicates())
{
    System.out.println("Duplicates:");
		for (SearchResult duplicate : duplicates.getDuplicateImages())
		{
		    System.out.println("ImageName: " + duplicate.getImageId() +
			      ", Similarity: " + duplicate.getSimilarity());
    }
}

Finden Sie Fotoduplikate mit cURL-Befehlen

In diesem Abschnitt werden wir cURL-Befehle nutzen, um über das Befehlszeilenterminal auf REST-APIs zuzugreifen. Als Voraussetzung müssen wir nun zunächst ein JWT-Zugriffstoken (basierend auf den Client-Anmeldeinformationen) generieren, während wir den folgenden Befehl ausführen.

curl -v "https://api.aspose.cloud/connect/token" \
-X POST \
-d "grant_type=client_credentials&client_id=bb959721-5780-4be6-be35-ff5c3a6aa4a2&client_secret=4d84d5f6584160cbd91dba1fe145db14" \
-H "Content-Type: application/x-www-form-urlencoded" \
-H "Accept: application/json"

Dieser Schritt setzt voraus, dass alle Bilder in den Cloud-Speicher hochgeladen werden. Jetzt müssen wir über den API-Aufruf „CreateImageSearch“ eine Suchkontext-ID erstellen. Bitte führen Sie den folgenden Befehl aus

curl -v -X POST "https://api.aspose.cloud/v3.0/imaging/ai/imageSearch/create?detector=akaze&matchingAlgorithm=randomBinaryTree" \
-H  "accept: application/json" \
-H  "authorization: Bearer <JWT Token>"

Antwortkörper

{
  "id": "0b9ac539-07fb-462a-91cb-8a8d5069ba4d",
  "searchStatus": "Idle"
}

Bitte führen Sie den folgenden Befehl aus, um Bildduplikate mithilfe des FindImageDuplicates-API-Aufrufs zu finden. Im folgenden Befehl wird die oben generierte Suchkontext-ID verwendet.

curl -v -X GET "https://api.aspose.cloud/v3.0/imaging/ai/imageSearch/da150333-57b4-4371-b13d-4889578ce2bd/findDuplicates?similarityThreshold=90" \
-H  "accept: application/json" \
-H  "authorization: Bearer <JWT Token>"

Abschluss

In diesem Artikel erfahren Sie mehr darüber, wie Sie mit dem Java Cloud SDK doppelte Bilder finden. Ebenso haben wir gelernt, wie cURL-Befehle als Finder für doppelte Bilder dienen können. Falls Sie diese APIs im Browser ausprobieren müssen, versuchen Sie es bitte mit der Swagger API Reference. Ebenso empfehlen wir dringend, die Produktdokumentation zu erkunden, um weitere spannende Funktionen kennenzulernen, die diese API bietet. Bitte beachten Sie außerdem, dass alle unsere Cloud SDKs unter MIT-Lizenz veröffentlicht werden. Sie können daher den vollständigen Quellcode von GitHub herunterladen und ihn entsprechend Ihren Anforderungen ändern. Bei Problemen können Sie sich für eine schnelle Lösung über das kostenlose Produkt-Support-Forum an uns wenden.

In Verbindung stehende Artikel

Bitte besuchen Sie die folgenden Links, um mehr darüber zu erfahren: