Beynimiz kendisini görsel işlemeye adamıştır ve resimlere olan sevgimiz, bilişimize ve dikkat yeteneğimize bağlıdır. Görüntüler kolayca dikkatimizi çekebiliyor ve cep telefonları, dijital kameralar, tarayıcılar vb. birçok cihaz büyük miktarda görüntü üretiyor. Ayrıca, görüntülerin farklı sıkıştırma algoritmaları vardır ve tarama görüntüleri aralarında çok yaygındır çünkü daha az depolama alanı tüketirler. Ancak yine de, zaman geçtikçe, yinelenen fotoğraflar, gereksiz görüntüler vb. oluşturuyoruz. Yinelenen resim bulucu da dahil olmak üzere, yinelenen görüntüleri bulma yetenekleri sunan çok sayıda uygulamamız var. Google fotoğraflarında saklanan resimleriniz olması durumunda, google fotoğraf yinelenen bulucuyu kullanmayı deneyebilir, yinelenen fotoğraf bulucu Windows 10’u veya yinelenen fotoğraf bulucu mac’u (işletim sisteminize bağlı olarak) yükleyebilirsiniz. Ancak bu yazıda, herhangi bir platformda kullanılabilen REST API kullanarak harika bir fotoğraf kopyası bulma aracının nasıl geliştirileceğine ışık tutacağız.
- Görüntü İşleme API’sı
- Java kullanarak Yinelenen Resimleri Bulma
- CURL Komutlarını Kullanarak Fotoğraf Çoğaltmasını Bulun
Görüntü İşleme API’sı
Görüntü dosyalarını oluşturmak, düzenlemek ve değiştirmek için özellikler sunan görüntü işleme için çeşitli uygulamalar mevcuttur. Ayrıca, ters görüntü arama tekniklerine veya başka herhangi bir algoritmaya dayalı görüntü arama dahil olmak üzere yetenekler sağlarlar. Ancak, geriye doğru görsel aramaya dayalı REST API tabanlı programatik çözümle ilgileniyorsanız, Aspose.Imaging Cloud kesin seçimdir. Güçlü arama motoru, geliştiricilerin herhangi bir platformdaki uygulamalarına sorunsuz bir şekilde tersine görsel arama özellikleri eklemelerine yardımcı olur. Diğer birkaç resim arasında aynı kopyayı bulmak için resim karşılaştırma işlemine bile başlayabilirsiniz. Bu işlemin bir sonucu olarak, aşağıdaki koşullara göre en benzer görüntülerin listesini alırsınız:
- benzerlik derecesi
- Minimum benzerlik eşiği
- karşılaştırma algoritması
Şimdi, Java uygulamasında benzer görüntü işleme ve yinelenen resim bulucu yeteneklerine sahip olmak için, Cloud API çevresinde bir sarmalayıcı olduğu için Aspose.Imaging Cloud SDK for Java kullanmamız gerekiyor. Dolayısıyla bir sonraki adım, maven yapı türü projesinin pom.xml dosyasına aşağıdaki bilgileri dahil ederek referansını java projesine eklemektir.
<repositories>
<repository>
<id>aspose-cloud</id>
<name>artifact.aspose-cloud-releases</name>
<url>https://artifact.aspose.cloud/repo</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>com.aspose</groupId>
<artifactId>aspose-imaging-cloud</artifactId>
<version>22.4</version>
</dependency>
</dependencies>
Aspose Cloud Dashboard üzerinden bir hesap oluşturmadıysanız, geçerli bir e-posta adresi aracılığıyla Ücretsiz Deneme için kaydolabilirsiniz. Şimdi yeni oluşturulan hesabı kullanarak oturum açın ve Cloud Dashboard’ta Müşteri Kimliği ve İstemci Sırrı arayın/oluşturun. Bu ayrıntılar, aşağıdaki bölümlerde kimlik doğrulama amacıyla gereklidir.
Java kullanarak Yinelenen Resimleri Bulma
Tersine Görsel Arama, örnek görselinize göre görsel olarak benzer görselleri aramanıza yardımcı olan bir tekniktir. Aşağıda verilenler, bu özellik için en yaygın kullanım durumlarıdır:
Yinelenen görüntüyü arayın ve kopyaları kaldırın İçerik benzer görseller ara Uygunsuz içerik ara Dijital olarak imzalanmış görüntüleri arayın
API’miz şu anda içerik tabanlı görüntü aramayı, yinelenen görüntü aramayı, özel kayıtlı etiketlerle görüntü aramayı, görüntü karşılaştırma ve benzerlik algılamayı ve Görüntü özellikleri çıkarma işlemlerini desteklemektedir. Şimdi bu bölümde, ters görüntü tekniğini kullanarak yinelenen görüntülerin nasıl bulunacağına ilişkin ayrıntıları tartışacağız. Şimdi bu gereksinimi karşılamak için, örnekte özellik tespiti için AKAZE algoritmasını ve özellik eşleştirme için RandomBinaryTree algoritmasını kullanıyoruz. Yinelenen resimleri bulmak için şu adımları izleyeceğiz:
- Görüntüleri Bulut Depolamaya Yükleyin
- Arama Bağlamı Oluştur
- Görüntü Özelliklerini Çıkarın
- Yinelenen Resimleri Bul
Görüntüleri Bulut Depolamaya Yükleyin
Görüntü dosyalarını yerel sürücüden bulut depolamaya yüklemek için lütfen aşağıdaki kod parçacığını kullanın
- İlk olarak, ClientID ve Client sağlarken bir ImagingApi nesnesi oluşturun.
- İkinci olarak, belirtilen dizindeki tüm resim dosyalarını okuyun
- Yalnızca görüntü dosyalarını filtreleyin ve bunları filtrelenmiş listeye ekleyin
- UploadFileRequest nesnesini bağımsız değişken olarak alırken uploadFile(…) yöntemini kullanarak görüntüleri Bulut depolama alanına yükleyin
// ClientID ve ClientSecret'i https://dashboard.aspose.cloud/ adresinden alın
String clientId = "7ef10407-c1b7-43bd-9603-5ea9c6db83cd";
String clientSecret = "ba7cc4dc0c0478d7b508dd8ffa029845";
// Görüntüleme nesnesi oluştur
ImagingApi imageApi = new ImagingApi(clientSecret, clientId);
File directory = new File("/Users/");
//Klasördeki tüm dosyaları al
File[] allFiles = directory.listFiles();
if (allFiles == null || allFiles.length == 0) {
throw new RuntimeException("No files present in the directory: " + directory.getAbsolutePath());
}
//Burada gerekli resim uzantılarını ayarlayın.
List<String> supportedImageExtensions = Arrays.asList("jpg", "png", "gif", "webp");
int counter =0;
//Yalnızca görüntü dosyalarını filtrele
List<File> acceptedImages = new ArrayList<>();
for (File file : allFiles) {
//Dosya uzantısını ayrıştırın
String fileExtension = file.getName().substring(file.getName().lastIndexOf(".") + 1);
//Uzantının desteklenenImageExtensions'ta listelenip listelenmediğini kontrol edin
if (supportedImageExtensions.stream().anyMatch(fileExtension::equalsIgnoreCase)) {
//Resmi filtrelenmiş listeye ekle
acceptedImages.add(file);
// ilk PowerPoint sunumunu yükle
byte[] bytes = Files.readAllBytes(file.toPath());
// dosya yükleme isteği oluştur
UploadFileRequest request = new UploadFileRequest(acceptedImages.get(counter).getName(),bytes,null);
// resim dosyasını bulut depolamaya yükle
imageApi.uploadFile(request);
// dosya sayacını artır
counter+=1;
}
}
Arama Bağlamı Oluştur
- Öncelikle özellik algılama algoritmasını akaze olarak belirlememiz gerekiyor.
- İkincisi, özellik eşleştirme için algoritmayı randomBinaryTree olarak belirtin
- Üçüncüsü, CreateImageSearchRequest nesnesini kullanarak Görsel Arama İsteği oluşturun
- Şimdi createImageSearch(…) yöntemiyle arama bağlamı oluşturma durumu oluşturun
// özellik tespiti için algoritma belirtin
String detector = "akaze";
// özellik eşleştirme için algoritma belirtin
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
// Görsel Arama İsteği Oluştur
CreateImageSearchRequest createSearchContextRequest = new CreateImageSearchRequest(detector,matchingAlgorithm, folder, storage);
// arama bağlamı durumu oluştur
SearchContextStatus status = imageApi.createImageSearch(createSearchContextRequest);
// arama Bağlamının Durum Kimliğini al
String searchContextId = status.getId();
Görüntü Özelliklerini Çıkarın
Şimdi görüntü özelliklerini çıkarma ve bunları arama bağlamına ekleme zamanı.
// Görüntü özelliklerini ayıklayın ve bunları arama içeriğine ekleyin
for (File file : allFiles)
{
CreateImageFeaturesRequest request = new CreateImageFeaturesRequest(searchContextId, null, null, "internal", null,null);
imageApi.createImageFeatures(request);
}
Yinelenen Resimleri Bul
- Benzerlik eşik değerini belirtin
- İkincisi, ImageDuplicatesSet nesnesini kullanarak yinelenen görüntü seti oluşturun
- Şimdi, yinelenen görüntüler listesini yineleyin ve getSimilarity(…) yöntemini kullanarak görüntü benzerliğini bulun.
// benzerlik eşik değerini belirtin
Double similarityThreshold = 90.0;
// yinelenen görüntü seti oluştur
ImageDuplicatesSet result = imageApi.findImageDuplicates(
new FindImageDuplicatesRequest(status.getId(), similarityThreshold, folder, storage));
// yinelenen görüntüleri yazdır
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());
}
}
CURL Komutlarını Kullanarak Fotoğraf Çoğaltmasını Bulun
Bu bölümde, komut satırı terminali üzerinden REST API’lerine erişmek için cURL komutlarını kullanmanın avantajlarından yararlanacağız. Şimdi bir ön koşul olarak, aşağıdaki komutu yürütürken önce bir JWT erişim belirteci (istemci kimlik bilgilerine dayalı olarak) oluşturmamız gerekiyor.
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"
Bu adım, tüm görüntülerin bulut depolama alanına yüklenmesini bekler ve şimdi CreateImageSearch API çağrısı aracılığıyla arama bağlamı kimliği oluşturmamız gerekir. Lütfen aşağıdaki komutu yürütün
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>"
Yanıt gövdesi
{
"id": "0b9ac539-07fb-462a-91cb-8a8d5069ba4d",
"searchStatus": "Idle"
}
FindImageDuplicates API çağrısını kullanarak Görüntü kopyalarını bulmak için lütfen aşağıdaki komutu yürütün. Aşağıdaki komutta, yukarıda oluşturulan arama içeriği kimliği kullanılır.
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>"
Çözüm
Bu yazıda, Java Cloud SDK kullanarak yinelenen Görüntülerin nasıl bulunacağına ilişkin ayrıntıları öğrendik. Benzer şekilde, cURL komutlarının nasıl kopya resim bulucu işlevi görebileceğini öğrendik. Bu API’leri tarayıcıda denemeniz gerekirse, lütfen swagger API Reference kullanmayı deneyin. Benzer şekilde, bu API tarafından sunulan diğer heyecan verici özellikleri öğrenmek için Ürün belgelerini incelemenizi önemle tavsiye ederiz. Ayrıca, lütfen tüm Bulut SDK’larımızın MIT lisansı altında yayınlandığına dikkat edin, bu nedenle kaynak kodunun tamamını GitHub indirmeyi ve gereksinimlerinize göre değiştirmeyi düşünebilirsiniz. Herhangi bir sorun olması durumunda, hızlı bir çözüm için ücretsiz ürün destek forumu aracılığıyla bize ulaşmayı düşünebilirsiniz.
İlgili Makaleler
Hakkında daha fazla bilgi edinmek için lütfen aşağıdaki bağlantıları ziyaret edin: