사진 복제

Java Cloud SDK를 사용하여 중복 이미지 찾기

우리의 두뇌는 시각적 처리에 전념하고 이미지에 대한 우리의 사랑은 우리의 인지와 주의력에 달려 있습니다. 이미지는 우리의 관심을 쉽게 끌 수 있으며 휴대폰 디지털 카메라, 스캐너 등을 포함한 많은 장치는 많은 양의 이미지를 생성합니다. 또한 이미지는 압축 알고리즘이 다르며 저장 공간을 덜 차지하기 때문에 래스터 이미지가 매우 일반적입니다. 그러나 여전히 시간이 지남에 따라 중복 사진, 중복 이미지 등을 생성하게 됩니다. 중복 사진 찾기를 포함하여 중복 이미지를 찾을 수 있는 기능을 제공하는 수많은 응용 프로그램이 있습니다. Google 포토에 이미지가 저장되어 있는 경우 운영 체제에 따라 Google 포토 복제 파인더를 사용하거나 복제 사진 파인더 창 10 또는 복제 사진 파인더 Mac을 설치할 수 있습니다. 그러나이 기사에서는 모든 플랫폼에서 사용할 수있는 REST API를 사용하여 멋진 복제 사진 찾기를 개발하는 방법에 대해 설명합니다.

이미지 처리 API

이미지 파일을 생성, 편집 및 조작하는 기능을 제공하는 이미지 처리에 다양한 응용 프로그램을 사용할 수 있습니다. 또한 역 이미지 검색 기술 또는 기타 알고리즘을 기반으로 한 이미지 검색을 포함한 기능을 제공합니다. 그러나 역 이미지 검색을 기반으로 하는 REST API 기반 프로그래밍 솔루션에 관심이 있다면 Aspose.Imaging Cloud가 확실한 선택입니다. 강력한 검색 엔진을 통해 개발자는 모든 플랫폼의 응용 프로그램에 역 이미지 검색 기능을 원활하게 추가할 수 있습니다. 다른 여러 이미지 중에서 사진 중복을 찾기 위해 이미지 비교 작업을 시작할 수도 있습니다. 이 작업의 결과로 다음 조건에 따라 가장 유사한 이미지 목록을 얻습니다.

  • 유사도
  • 유사성의 최소 임계값
  • 비교 알고리즘

이제 Java 애플리케이션 내에서 유사한 이미지 처리 및 복제 사진 찾기 기능을 갖기 위해 Aspose.Imaging Cloud SDK for Java를 사용해야 합니다. 이는 Cloud API를 감싸는 래퍼입니다. 따라서 다음 단계는 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 알고리즘을 사용합니다. 다음 단계에 따라 중복 이미지를 찾습니다.

  • Cloud Storage에 이미지 업로드
  • 검색 컨텍스트 만들기
  • 이미지 특징 추출
  • 중복 이미지 찾기

Cloud Storage에 이미지 업로드

다음 코드 스니펫을 사용하여 로컬 드라이브에서 클라우드 스토리지로 이미지 파일을 업로드하십시오.

  • 먼저 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로 지정합니다.
  • 셋째, 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>"

결론

이번 글에서는 자바 클라우드 SDK를 이용하여 중복 이미지를 찾는 방법에 대해 자세히 알아보았습니다. 마찬가지로, 우리는 cURL 명령이 어떻게 중복 사진 찾기 역할을 할 수 있는지 배웠습니다. 브라우저 내에서 이러한 API를 시도해야 하는 경우 swagger API 참조를 사용해 보십시오. 마찬가지로 제품 설명서를 탐색하여 이 API에서 제공하는 다른 흥미로운 기능에 대해 알아보는 것이 좋습니다. 또한 모든 Cloud SDK는 MIT 라이선스로 게시되므로 GitHub에서 전체 소스 코드를 다운로드하고 요구 사항에 따라 수정할 수 있습니다. 문제가 있는 경우 무료 제품 지원 포럼을 통해 빠른 해결을 위해 당사에 연락하는 것을 고려할 수 있습니다.

관련 기사

자세한 내용은 다음 링크를 참조하십시오.