写真の複製

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

検索コンテキストの作成

  • まず、特徴検出アルゴリズムを akaze として指定する必要があります
  • 次に、特徴マッチングのアルゴリズムを 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 から完全なソース コードをダウンロードして、要件に応じて変更することを検討してください。問題が発生した場合は、無料の 製品サポート フォーラム から迅速な解決策を得ることができます。

関連記事

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