写真の複製

Java Cloud SDKを使用して重複イメージを検索する

私たちの脳は視覚処理に専念しており、画像への愛情は認知力と注意力にかかっています。画像は簡単に私たちの注意を引くことができ、携帯電話のデジタルカメラ、スキャナーなどの多くのデバイスが大量の画像を生成します。さらに、画像にはさまざまな圧縮アルゴリズムがあり、ラスター イメージは、消費する記憶領域が少ないため、それらの中で非常に一般的です。しかし、それでも時間の経過とともに、私たちは重複した写真や重複した画像などを作成してしまうことになります。重複画像ファインダーなど、重複した画像を見つける機能を提供するアプリケーションが多数あります。 Google フォトに画像が保存されている場合は、Google フォト重複ファインダーを使用するか、重複写真ファインダー Windows 10 または重複写真ファインダー Mac (オペレーティング システムに応じて) をインストールしてみてください。ただし、この記事では、あらゆるプラットフォームで使用できる REST API を使用して、素晴らしい重複写真ファインダーを開発する方法を説明します。

画像処理API

画像ファイルを作成、編集、操作する機能を備えた画像処理用のさまざまなアプリケーションが利用可能です。また、逆画像検索技術やその他のアルゴリズムに基づく画像検索などの機能も提供します。ただし、逆画像検索に基づいた REST API ベースのプログラムによるソリューションに興味がある場合は、Aspose.Imaging Cloud が明確な選択肢です。その強力な検索エンジンにより、開発者はあらゆるプラットフォーム上のアプリケーションに逆画像検索機能をシームレスに追加できます。画像比較操作を開始して、他のいくつかの画像の中から重複する写真を見つけることもできます。この操作の結果、次の条件に従って最も類似した画像のリストが取得されます。

  • 類似度
  • 類似性の最小しきい値
  • 比較のアルゴリズム

Java アプリケーション内で同様の画像処理と重複画像検索機能を持たせるには、Cloud API のラッパーである Aspose.Imaging Cloud SDK for Java を使用する必要があります。したがって、次のステップでは、Maven ビルド タイプ プロジェクトの pom.xml に次の情報を含めることにより、Java プロジェクトにその参照を追加します。

<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>

Aspose Cloud Dashboard でアカウントを作成していない場合は、有効な電子メール アドレスを使用して無料トライアルにサインアップできます。次に、新しく作成したアカウントを使用してログインし、クラウド ダッシュボードでクライアント ID とクライアント シークレットを検索/作成します。これらの詳細は、次のセクションで説明する認証の目的で必要になります。

Java を使用して重複イメージを検索する

逆画像検索は、サンプル画像に基づいて視覚的に類似した画像を検索するのに役立つ技術です。この機能の最も一般的な使用例を以下に示します。

重複した画像を検索し、重複した画像を削除します 類似した画像のコンテンツを検索する 不適切なコンテンツを検索する デジタル署名された画像を検索する

当社の API は現在、コンテンツベースの画像検索、重複画像検索、カスタム登録タグによる画像検索、画像比較と類似性検出、画像特徴抽出操作をサポートしています。このセクションでは、反転イメージ技術を使用して重複イメージを見つける方法について詳しく説明します。この要件を達成するために、この例では特徴検出には AKAZE アルゴリズムを、特徴マッチングには RandomBinaryTree アルゴリズムを使用します。次の手順に従って、重複したイメージを見つけます。

  • 画像をクラウドストレージにアップロードする
  • 検索コンテキストの作成
  • 画像の特徴を抽出する
  • 重複画像の検索

画像をクラウドストレージにアップロードする

次のコード スニペットを使用して、画像ファイルをローカル ドライブからクラウド ストレージにアップロードしてください。

  • まず、ClientIDとClientを指定してImagingApiのオブジェクトを作成します。
  • 次に、指定されたディレクトリからすべての画像ファイルを読み取ります
  • 画像ファイルのみをフィルタリングし、フィルタリングされたリストに追加します
  • UploadFileRequest オブジェクトを引数として受け取り、uploadFile(…) メソッドを使用して画像をクラウド ストレージにアップロードします。
// https://dashboard.aspose.cloud/ から ClientID と ClientSecret を取得します。
String clientId = "7ef10407-c1b7-43bd-9603-5ea9c6db83cd";
String clientSecret = "ba7cc4dc0c0478d7b508dd8ffa029845";

// イメージングオブジェクトを作成する
ImagingApi imageApi = new ImagingApi(clientSecret, clientId);

File directory = new File("/Users/");
//フォルダーからすべてのファイルを取得します
File[] allFiles = directory.listFiles();
if (allFiles == null || allFiles.length == 0) {
    throw new RuntimeException("No files present in the directory: " + directory.getAbsolutePath());
}
			 
//ここで必要な画像拡張子を設定します。
List<String> supportedImageExtensions = Arrays.asList("jpg", "png", "gif", "webp");
			 
int counter =0;
//画像ファイルのみをフィルタリングして除外する
List<File> acceptedImages = new ArrayList<>();
for (File file : allFiles) {
    //ファイル拡張子を解析する
    String fileExtension = file.getName().substring(file.getName().lastIndexOf(".") + 1);
    //拡張子がsupportedImageExtensionsにリストされているかどうかを確認します
    if (supportedImageExtensions.stream().anyMatch(fileExtension::equalsIgnoreCase)) {
        //フィルタリングされたリストに画像を追加します
        acceptedImages.add(file);
			    
    // 最初の PowerPoint プレゼンテーションをロードする
    byte[] bytes = Files.readAllBytes(file.toPath());
	
    // ファイルアップロードリクエストを作成する
    UploadFileRequest request = new UploadFileRequest(acceptedImages.get(counter).getName(),bytes,null);
    // 画像ファイルをクラウドストレージにアップロードする
    imageApi.uploadFile(request);
    // ファイルカウンターを増やす
    counter+=1;
    }
}

検索コンテキストの作成

  • まず、特徴検出アルゴリズムを akz として指定する必要があります。
  • 次に、特徴マッチングのアルゴリズムをrandomBinaryTreeとして指定します。
  • 3番目に、CreateImageSearchRequestオブジェクトを使用して画像検索リクエストを作成します。
  • 次に、createImageSearch(…) メソッドを使用して検索コンテキストの作成ステータスを作成します。
// 特徴検出のアルゴリズムを指定する
String detector = "akaze";
// 特徴マッチングのアルゴリズムを指定する
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

// 画像検索リクエストの作成
CreateImageSearchRequest createSearchContextRequest = new CreateImageSearchRequest(detector,matchingAlgorithm, folder, storage);
// 検索コンテキストのステータスを作成する 
SearchContextStatus status = imageApi.createImageSearch(createSearchContextRequest);
			  
// 検索コンテキストのステータスIDを取得
String searchContextId = status.getId();

画像の特徴を抽出する

次に、画像の特徴を抽出し、検索コンテキストに追加します。

// 画像の特徴を抽出し、検索コンテキストに追加します
for (File file : allFiles) 
{
    CreateImageFeaturesRequest request = new CreateImageFeaturesRequest(searchContextId, null, null, "internal", null,null);
		imageApi.createImageFeatures(request);
}

重複画像の検索

  • 類似度のしきい値を指定する
  • 次に、ImageDuplicatesSet オブジェクトを使用して複製イメージ セットを作成します。
  • 次に、重複画像のリストを反復処理し、getSimilarity(…) メソッドを使用して画像の類似性を見つけます。
// 類似度のしきい値を指定する
Double similarityThreshold = 90.0;
			    
// 複製イメージセットを作成する
ImageDuplicatesSet result = imageApi.findImageDuplicates(
    new FindImageDuplicatesRequest(status.getId(), similarityThreshold, folder, storage));

// カウントされた重複画像を印刷します
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 コマンドを使用して重複した写真を検索する

このセクションでは、cURL コマンドを利用して、コマンド ライン ターミナル経由で REST API にアクセスします。前提条件として、次のコマンドの実行中に、まず JWT アクセス トークン (クライアントの資格情報に基づいて) を生成する必要があります。

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"

このステップでは、すべての画像がクラウド ストレージにアップロードされることが想定されているため、CreateImageSearch API 呼び出しを通じて検索コンテキスト ID を作成する必要があります。次のコマンドを実行してください

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>"

レスポンスボディ

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

FindImageDuplicates API 呼び出しを使用して画像の重複を検索するには、次のコマンドを実行してください。次のコマンドでは、上記で生成された検索コンテキスト ID が使用されます。

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>"

結論

この記事では、Java Cloud SDK を使用して重複したイメージを検索する方法の詳細について学びました。同様に、cURL コマンドが重複画像ファインダーとしてどのように機能するかを学びました。ブラウザ内でこれらの API を試す必要がある場合は、swagger API リファレンス を使用してみてください。同様に、製品ドキュメント を調べて、この API によって提供される他の魅力的な機能を学ぶことを強くお勧めします。また、すべての Cloud SDK は MIT ライセンスに基づいて公開されているため、GitHub から完全なソース コードをダウンロードし、要件に応じて変更することを検討してください。問題が発生した場合は、無料の 製品サポート フォーラム を通じて迅速に解決するために当社に連絡することを検討してください。

関連記事

詳細については、次のリンクを参照してください。