המוח שלנו מתמסר לעיבוד חזותי והאהבה שלנו לדימויים נעוצה בקוגניציה וביכולת הקשב שלנו. התמונות מסוגלות למשוך את תשומת הלב שלנו בקלות ומכשירים רבים כולל טלפונים סלולריים מצלמות דיגיטליות, סורקים וכו’ מייצרים כמות גדולה של תמונות. יתר על כן, לתמונות יש אלגוריתמי דחיסה שונים ותמונות רסטר נפוצות מאוד ביניהן מכיוון שהן צורכות פחות שטח אחסון. אבל עדיין, עם חלוף הזמן, בסופו של דבר אנו יוצרים תמונות כפולות, תמונות מיותרות וכו’. יש לנו שפע של יישומים המציעים את היכולות למצוא תמונות כפולות כולל מאתר תמונות כפולות. במקרה שיש לך תמונות מאוחסנות ב-Google Photos, אתה יכול לנסות להשתמש ב-Google Photo Duplicate Finder, להתקין כפילויות 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 build.
<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 להתאמת תכונות בדוגמה. אנו נבצע את השלבים הבאים כדי למצוא את התמונות הכפולות:
- העלה תמונות ל-Cloud Storage
- צור הקשר חיפוש
- חלץ תכונות תמונה
- מצא תמונות כפולות
העלה תמונות ל-Cloud Storage
אנא השתמש בקטע הקוד הבא כדי להעלות קובצי תמונה מהכונן המקומי לאחסון בענן
- ראשית, צור אובייקט של ImagingApi תוך מתן זיהוי לקוח ולקוח
- שנית, קרא את כל קבצי התמונה מהספרייה שצוינה
- סנן רק קובצי תמונה והוסף אותם לרשימה המסוננת
- העלה את התמונות לאחסון בענן באמצעות שיטת 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);
//בדוק אם התוסף מופיע ב-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);
// קבל מזהה סטטוס של הקשר החיפוש
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"
שלב זה מצפה שכל התמונות יועלו לאחסון בענן וכעת עלינו ליצור מזהה הקשר חיפוש באמצעות קריאת API של CreateImageSearch. אנא בצע את הפקודה הבאה
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. בפקודה הבאה, נעשה שימוש במזהה הקשר החיפוש שנוצר לעיל.
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 ולשנות אותו בהתאם לדרישות שלך. בכל מקרה של בעיה, אתה יכול לשקול לפנות אלינו לפתרון מהיר באמצעות פורום תמיכת מוצרים בחינם.
מאמרים קשורים
אנא בקר בקישורים הבאים כדי ללמוד עוד על: