Bộ não của chúng ta dành riêng cho việc xử lý hình ảnh và tình yêu của chúng ta dành cho hình ảnh nằm ở nhận thức và khả năng chú ý của chúng ta. Các hình ảnh có thể thu hút sự chú ý của chúng ta một cách dễ dàng và nhiều thiết bị bao gồm máy ảnh kỹ thuật số của điện thoại di động, máy quét, v.v. tạo ra một lượng lớn hình ảnh. Hơn nữa, hình ảnh có các thuật toán nén khác nhau và hình ảnh raster rất phổ biến trong số đó vì chúng tiêu tốn ít dung lượng lưu trữ hơn. Tuy nhiên, theo thời gian, cuối cùng chúng ta vẫn tạo ra các ảnh trùng lặp, ảnh thừa, v.v. Chúng ta có rất nhiều ứng dụng cung cấp khả năng tìm ảnh trùng lặp, bao gồm cả công cụ tìm ảnh trùng lặp. Trong trường hợp bạn có hình ảnh được lưu trữ trong google ảnh, bạn có thể thử sử dụng công cụ tìm ảnh trùng lặp của google, cài đặt công cụ tìm ảnh trùng lặp trên windows 10 hoặc công cụ tìm ảnh trùng lặp trên mac (tùy thuộc vào hệ điều hành của bạn). Tuy nhiên, trong bài viết này, chúng tôi sẽ làm sáng tỏ cách phát triển một công cụ tìm ảnh trùng lặp tuyệt vời bằng API REST có thể được sử dụng trên mọi nền tảng.
API xử lý hình ảnh
Nhiều ứng dụng có sẵn để xử lý hình ảnh cung cấp các tính năng để tạo, chỉnh sửa và thao tác với các tệp hình ảnh. Chúng cũng cung cấp các khả năng bao gồm tìm kiếm hình ảnh dựa trên kỹ thuật tìm kiếm hình ảnh đảo ngược hoặc bất kỳ thuật toán nào khác. Tuy nhiên, nếu bạn quan tâm đến việc có giải pháp lập trình dựa trên API REST dựa trên tìm kiếm hình ảnh đảo ngược, thì Aspose.Imaging Cloud là lựa chọn chắc chắn. Công cụ tìm kiếm mạnh mẽ của nó giúp các nhà phát triển thêm các tính năng tìm kiếm hình ảnh đảo ngược trong ứng dụng của họ trên bất kỳ nền tảng nào một cách liền mạch. Bạn thậm chí có thể bắt đầu thao tác so sánh hình ảnh để tìm ảnh trùng lặp giữa một số hình ảnh khác. Kết quả của thao tác này là bạn có được danh sách các hình ảnh giống nhau nhất phù hợp với các điều kiện sau:
- Mức độ giống nhau
- Ngưỡng tương tự tối thiểu
- Thuật toán so sánh
Giờ đây, để có khả năng xử lý hình ảnh tương tự và khả năng tìm ảnh trùng lặp trong ứng dụng Java, chúng ta cần sử dụng Aspose.Imaging Cloud SDK for Java vì đây là trình bao bọc xung quanh Cloud API. Vì vậy, bước tiếp theo là thêm tham chiếu của nó vào dự án java bằng cách đưa thông tin sau vào tệp pom.xml của dự án kiểu xây dựng maven.
<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>
Bây giờ nếu bạn chưa tạo tài khoản trên Aspose Cloud Dashboard, bạn có thể đăng ký Dùng thử miễn phí thông qua một địa chỉ email hợp lệ. Bây giờ hãy đăng nhập bằng tài khoản mới tạo và tra cứu/tạo Client ID và Client Secret tại Cloud Dashboard. Những chi tiết này được yêu cầu cho mục đích xác thực trong các phần sau.
Tìm hình ảnh trùng lặp bằng Java
Tìm kiếm Hình ảnh Đảo ngược là một kỹ thuật giúp bạn tìm kiếm các hình ảnh tương tự trực quan dựa trên hình ảnh mẫu của bạn. Đưa ra dưới đây là các trường hợp sử dụng phổ biến nhất cho tính năng này:
Tìm kiếm hình ảnh trùng lặp và loại bỏ các bản sao Tìm kiếm nội dung hình ảnh tương tự Tìm kiếm nội dung không phù hợp Tìm kiếm hình ảnh có chữ ký điện tử
API của chúng tôi hiện hỗ trợ tìm kiếm hình ảnh dựa trên nội dung, tìm kiếm hình ảnh trùng lặp, tìm kiếm hình ảnh theo thẻ đã đăng ký tùy chỉnh, so sánh hình ảnh và phát hiện sự tương đồng cũng như các thao tác trích xuất tính năng hình ảnh. Bây giờ trong phần này, chúng ta sẽ thảo luận chi tiết về cách tìm hình ảnh trùng lặp bằng kỹ thuật đảo ngược hình ảnh. Bây giờ để thực hiện yêu cầu này, chúng tôi sử dụng thuật toán AKAZE để phát hiện các tính năng và thuật toán RandomBinaryTree để so khớp tính năng trong ví dụ. Chúng tôi sẽ làm theo các bước sau để tìm các hình ảnh trùng lặp:
- Tải hình ảnh lên bộ nhớ đám mây
- Tạo bối cảnh tìm kiếm
- Trích xuất các tính năng hình ảnh
- Tìm hình ảnh trùng lặp
Tải hình ảnh lên bộ nhớ đám mây
Vui lòng sử dụng đoạn mã sau để tải tệp hình ảnh từ ổ đĩa cục bộ lên bộ nhớ đám mây
- Đầu tiên, tạo một đối tượng ImagingApi trong khi cung cấp ClientID và Client
- Thứ hai, đọc tất cả các tệp hình ảnh từ thư mục được chỉ định
- Chỉ lọc các tệp hình ảnh và thêm chúng vào danh sách đã lọc
- Tải hình ảnh lên bộ nhớ Đám mây bằng phương thức uploadFile(…) trong khi lấy đối tượng UploadFileRequest làm đối số
// Nhận ClientID và ClientSecret từ https://dashboard.aspose.cloud/
String clientId = "7ef10407-c1b7-43bd-9603-5ea9c6db83cd";
String clientSecret = "ba7cc4dc0c0478d7b508dd8ffa029845";
// tạo đối tượng hình ảnh
ImagingApi imageApi = new ImagingApi(clientSecret, clientId);
File directory = new File("/Users/");
//Nhận tất cả các tệp từ thư mục
File[] allFiles = directory.listFiles();
if (allFiles == null || allFiles.length == 0) {
throw new RuntimeException("No files present in the directory: " + directory.getAbsolutePath());
}
//Đặt phần mở rộng hình ảnh bắt buộc tại đây.
List<String> supportedImageExtensions = Arrays.asList("jpg", "png", "gif", "webp");
int counter =0;
//Chỉ lọc ra các tệp hình ảnh
List<File> acceptedImages = new ArrayList<>();
for (File file : allFiles) {
//Phân tích phần mở rộng tập tin
String fileExtension = file.getName().substring(file.getName().lastIndexOf(".") + 1);
//Kiểm tra xem tiện ích mở rộng có được liệt kê trong ImageExtensions được hỗ trợ không
if (supportedImageExtensions.stream().anyMatch(fileExtension::equalsIgnoreCase)) {
//Thêm hình ảnh vào danh sách đã lọc
acceptedImages.add(file);
// tải bản trình bày PowerPoint đầu tiên
byte[] bytes = Files.readAllBytes(file.toPath());
// tạo yêu cầu tải lên tập tin
UploadFileRequest request = new UploadFileRequest(acceptedImages.get(counter).getName(),bytes,null);
// tải tệp hình ảnh lên bộ nhớ đám mây
imageApi.uploadFile(request);
// tăng bộ đếm tập tin
counter+=1;
}
}
Tạo bối cảnh tìm kiếm
- Trước tiên, chúng ta cần chỉ định thuật toán phát hiện tính năng là akaze
- Thứ hai, chỉ định thuật toán để khớp tính năng là RandomBinaryTree
- Thứ ba, tạo Yêu cầu tìm kiếm hình ảnh bằng đối tượng CreateImageSearchRequest
- Bây giờ hãy tạo trạng thái ngữ cảnh tìm kiếm thông qua phương thức createImageSearch(…)
// chỉ định thuật toán để phát hiện các tính năng
String detector = "akaze";
// chỉ định thuật toán để khớp tính năng
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
// Tạo yêu cầu tìm kiếm hình ảnh
CreateImageSearchRequest createSearchContextRequest = new CreateImageSearchRequest(detector,matchingAlgorithm, folder, storage);
// tạo trạng thái ngữ cảnh tìm kiếm
SearchContextStatus status = imageApi.createImageSearch(createSearchContextRequest);
// nhận ID trạng thái của bối cảnh tìm kiếm
String searchContextId = status.getId();
Trích xuất các tính năng hình ảnh
Bây giờ là lúc trích xuất các tính năng của hình ảnh và thêm chúng vào ngữ cảnh tìm kiếm.
// Trích xuất các tính năng hình ảnh và thêm chúng vào ngữ cảnh tìm kiếm
for (File file : allFiles)
{
CreateImageFeaturesRequest request = new CreateImageFeaturesRequest(searchContextId, null, null, "internal", null,null);
imageApi.createImageFeatures(request);
}
Tìm hình ảnh trùng lặp
- Chỉ định giá trị ngưỡng tương tự
- Thứ hai, tạo bộ ảnh trùng lặp bằng cách sử dụng đối tượng ImageDuplicatesSet
- Bây giờ lặp qua danh sách các hình ảnh trùng lặp và tìm sự tương đồng của hình ảnh bằng cách sử dụng phương thức getSimilarity(…)
// chỉ định giá trị ngưỡng tương tự
Double similarityThreshold = 90.0;
// tạo bộ ảnh trùng lặp
ImageDuplicatesSet result = imageApi.findImageDuplicates(
new FindImageDuplicatesRequest(status.getId(), similarityThreshold, folder, storage));
// in số lượng hình ảnh trùng lặp
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());
}
}
Tìm ảnh trùng lặp bằng lệnh cURL
Trong phần này, chúng ta sẽ tận dụng việc sử dụng các lệnh cURL để truy cập API REST qua thiết bị đầu cuối dòng lệnh. Bây giờ là điều kiện tiên quyết, trước tiên chúng ta cần tạo mã thông báo truy cập JWT (dựa trên thông tin đăng nhập của khách hàng) trong khi thực hiện lệnh sau.
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"
Bước này hy vọng rằng tất cả các hình ảnh được tải lên bộ nhớ đám mây và bây giờ chúng tôi cần tạo ID ngữ cảnh tìm kiếm thông qua lệnh gọi API CreateImageSearch. Hãy thực hiện lệnh sau
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>"
nội dung phản hồi
{
"id": "0b9ac539-07fb-462a-91cb-8a8d5069ba4d",
"searchStatus": "Idle"
}
Vui lòng thực hiện lệnh sau để tìm các bản sao Hình ảnh bằng cách sử dụng lệnh gọi API FindImageDuplicates. Trong lệnh sau, ID ngữ cảnh tìm kiếm được tạo ở trên được sử dụng.
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>"
Phần kết luận
Trong bài viết này, chúng ta đã tìm hiểu chi tiết về cách tìm Hình ảnh trùng lặp bằng Java Cloud SDK. Tương tự như vậy, chúng ta đã học cách các lệnh cURL có thể hoạt động như một công cụ tìm ảnh trùng lặp. Trong trường hợp bạn cần dùng thử các API này trong trình duyệt, vui lòng thử sử dụng Tham khảo API swagger. Tương tự, chúng tôi thực sự khuyên bạn nên khám phá Tài liệu sản phẩm để tìm hiểu các tính năng thú vị khác do API này cung cấp. Ngoài ra, xin lưu ý rằng tất cả SDK đám mây của chúng tôi đều được xuất bản theo giấy phép MIT, vì vậy bạn có thể cân nhắc tải xuống mã nguồn hoàn chỉnh từ GitHub và sửa đổi nó theo yêu cầu của mình. Trong trường hợp có bất kỳ vấn đề nào, bạn có thể cân nhắc liên hệ với chúng tôi để được giải quyết nhanh chóng thông qua [diễn đàn hỗ trợ sản phẩm] miễn phí]9.
Những bài viết liên quan
Vui lòng truy cập các liên kết sau để tìm hiểu thêm về: