สมองของเราทุ่มเทให้กับการประมวลผลภาพ และความรักของเราที่มีต่อภาพนั้นขึ้นอยู่กับความรู้ความเข้าใจและความสามารถในการให้ความสนใจ รูปภาพสามารถดึงดูดความสนใจของเราได้อย่างง่ายดาย และอุปกรณ์ต่างๆ เช่น โทรศัพท์มือถือ กล้องดิจิทัล สแกนเนอร์ ฯลฯ สร้างภาพจำนวนมาก นอกจากนี้ รูปภาพยังมีอัลกอริทึมการบีบอัดที่แตกต่างกัน และรูปภาพแรสเตอร์ก็พบได้ทั่วไปในหมู่รูปภาพเหล่านั้น เนื่องจากใช้พื้นที่จัดเก็บน้อยกว่า แต่ถึงกระนั้น เมื่อเวลาผ่านไป เราก็ลงเอยด้วยการสร้างรูปภาพที่ซ้ำกัน รูปภาพซ้ำซ้อน ฯลฯ เรามีแอพพลิเคชั่นมากมายที่ให้ความสามารถในการค้นหารูปภาพที่ซ้ำกัน รวมถึงโปรแกรมค้นหารูปภาพที่ซ้ำกัน ในกรณีที่คุณมีรูปภาพที่เก็บไว้ใน google photos คุณอาจลองใช้ google photo duplicate finder ติดตั้ง duplicate photo finder windows 10 หรือ duplicate photo finder mac (ขึ้นอยู่กับระบบปฏิบัติการของคุณ) อย่างไรก็ตาม ในบทความนี้ เราจะอธิบายวิธีพัฒนาโปรแกรมค้นหารูปภาพซ้ำที่ยอดเยี่ยมโดยใช้ REST API ซึ่งสามารถใช้ได้กับทุกแพลตฟอร์ม
API การประมวลผลภาพ
มีแอพพลิเคชั่นมากมายสำหรับการประมวลผลภาพ นำเสนอคุณสมบัติในการสร้าง แก้ไข และจัดการไฟล์ภาพ พวกเขายังมีความสามารถรวมถึงการค้นหารูปภาพตามเทคนิคการค้นหารูปภาพย้อนกลับหรืออัลกอริทึมอื่นๆ อย่างไรก็ตาม หากคุณสนใจที่จะมีโซลูชันแบบเป็นโปรแกรมที่ใช้ REST API ตามการค้นหาภาพย้อนกลับ Aspose.Imaging Cloud คือตัวเลือกที่ชัดเจน เสิร์ชเอ็นจิ้นอันทรงพลังช่วยให้นักพัฒนาสามารถเพิ่มคุณสมบัติการค้นหาภาพย้อนกลับในแอปพลิเคชันของตนบนแพลตฟอร์มใดก็ได้อย่างไร้รอยต่อ คุณยังสามารถเริ่มดำเนินการเปรียบเทียบรูปภาพเพื่อค้นหารูปภาพที่ซ้ำกันระหว่างรูปภาพอื่นๆ ผลจากการดำเนินการนี้ คุณจะได้รับรายการรูปภาพที่คล้ายกันมากที่สุดตามเงื่อนไขต่อไปนี้:
- ระดับความเหมือน
- เกณฑ์ขั้นต่ำของความคล้ายคลึงกัน
- อัลกอริทึมของการเปรียบเทียบ
ตอนนี้ เพื่อให้มีการประมวลผลรูปภาพที่คล้ายกันและความสามารถในการค้นหารูปภาพซ้ำภายในแอปพลิเคชัน Java เราจำเป็นต้องใช้ Aspose.Imaging Cloud SDK สำหรับ Java เนื่องจากเป็นตัวห่อหุ้ม Cloud API ดังนั้น ขั้นตอนต่อไปคือการเพิ่มการอ้างอิงในโครงการ java โดยรวมข้อมูลต่อไปนี้ใน pom.xml ของโครงการประเภทการสร้าง 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>
ตอนนี้ หากคุณยังไม่ได้สร้างบัญชีบน Aspose Cloud Dashboard คุณสามารถลงทะเบียนเพื่อทดลองใช้ฟรีผ่านที่อยู่อีเมลที่ถูกต้อง ตอนนี้เข้าสู่ระบบโดยใช้บัญชีที่สร้างขึ้นใหม่และค้นหา/สร้างรหัสไคลเอ็นต์และรหัสลับไคลเอ็นต์ที่ Cloud Dashboard รายละเอียดเหล่านี้จำเป็นสำหรับวัตถุประสงค์ในการรับรองความถูกต้องในส่วนต่อไปนี้
ค้นหาภาพที่ซ้ำกันโดยใช้ Java
การค้นหารูปภาพย้อนกลับเป็นเทคนิคที่ช่วยให้คุณค้นหารูปภาพที่มีลักษณะคล้ายกันโดยอ้างอิงจากรูปภาพตัวอย่างของคุณ ด้านล่างเป็นกรณีการใช้งานทั่วไปสำหรับคุณลักษณะนี้:
ค้นหาภาพที่ซ้ำกันและนำภาพที่ซ้ำกันออก ค้นหารูปภาพที่คล้ายกันในเนื้อหา ค้นหาเนื้อหาที่ไม่เหมาะสม ค้นหาภาพที่เซ็นชื่อแบบดิจิทัล
ขณะนี้ API ของเรารองรับการค้นหารูปภาพตามเนื้อหา การค้นหารูปภาพซ้ำ การค้นหารูปภาพด้วยแท็กที่ลงทะเบียนแบบกำหนดเอง การเปรียบเทียบรูปภาพและการตรวจจับความคล้ายคลึงกัน และการดำเนินการแยกคุณสมบัติของรูปภาพ ในหัวข้อนี้ เราจะพูดถึงรายละเอียดเกี่ยวกับวิธีค้นหาภาพที่ซ้ำกันโดยใช้เทคนิคภาพย้อนกลับ เพื่อให้บรรลุข้อกำหนดนี้ เราใช้อัลกอริทึม AKAZE สำหรับการตรวจหาคุณลักษณะและอัลกอริทึม RandomBinaryTree สำหรับการจับคู่คุณลักษณะในตัวอย่าง เราจะทำตามขั้นตอนเหล่านี้เพื่อค้นหาภาพที่ซ้ำกัน:
- อัปโหลดรูปภาพไปยังที่เก็บข้อมูลบนคลาวด์
- สร้างบริบทการค้นหา
- แยกคุณสมบัติของรูปภาพ
- ค้นหารูปภาพที่ซ้ำกัน
อัปโหลดรูปภาพไปยังที่เก็บข้อมูลบนคลาวด์
โปรดใช้ข้อมูลโค้ดต่อไปนี้เพื่ออัปโหลดไฟล์รูปภาพจากไดรฟ์ในเครื่องไปยังที่เก็บข้อมูลบนคลาวด์
- ประการแรก สร้างวัตถุของ ImagingApi พร้อมกับระบุ ClientID และ Client
- ประการที่สอง อ่านไฟล์รูปภาพทั้งหมดจากไดเร็กทอรีที่ระบุ
- กรองเฉพาะไฟล์รูปภาพและเพิ่มลงในรายการที่กรอง
- อัปโหลดรูปภาพไปยังที่เก็บข้อมูลบนคลาวด์โดยใช้เมธอด uploadFile(…) ในขณะที่รับวัตถุ UploadFileRequest เป็นอาร์กิวเมนต์
// รับ ClientID และ ClientSecret จาก https://dashboard.aspose.cloud/
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);
//ตรวจสอบว่าส่วนขยายอยู่ใน ImageExtensions ที่รองรับหรือไม่
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 APIs ผ่านเทอร์มินัลบรรทัดคำสั่ง ตามข้อกำหนดเบื้องต้น เราต้องสร้างโทเค็นการเข้าถึง 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"
ขั้นตอนนี้คาดว่ารูปภาพทั้งหมดจะถูกอัปโหลดไปยังที่เก็บข้อมูลบนคลาวด์ และตอนนี้เราต้องสร้าง ID บริบทการค้นหาผ่านการเรียก CreateImageSearch API โปรดดำเนินการคำสั่งต่อไปนี้
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 Reference ในทำนองเดียวกัน เราขอแนะนำให้สำรวจ เอกสารประกอบของผลิตภัณฑ์ เพื่อเรียนรู้คุณสมบัติที่น่าตื่นเต้นอื่นๆ ที่นำเสนอโดย API นี้ นอกจากนี้ โปรดทราบว่า Cloud SDK ทั้งหมดของเราได้รับการเผยแพร่ภายใต้ใบอนุญาต MIT ดังนั้นคุณอาจพิจารณาดาวน์โหลดซอร์สโค้ดทั้งหมดจาก GitHub และแก้ไขตามความต้องการของคุณ ในกรณีที่มีปัญหาใดๆ คุณสามารถติดต่อเราเพื่อขอวิธีแก้ปัญหาอย่างรวดเร็วผ่าน [ฟอรัมสนับสนุนผลิตภัณฑ์] ฟรี 9
บทความที่เกี่ยวข้อง
โปรดไปที่ลิงก์ต่อไปนี้เพื่อเรียนรู้เพิ่มเติมเกี่ยวกับ: