صورة مكررة

ابحث عن الصور المكررة باستخدام Java Cloud SDK

يكرس دماغنا نفسه للمعالجة البصرية ويعتمد حبنا للصور على إدراكنا وقدرتنا على الانتباه. الصور قادرة على جذب انتباهنا بسهولة والعديد من الأجهزة بما في ذلك الكاميرات الرقمية للهواتف المحمولة والماسحات الضوئية وما إلى ذلك تنتج كمية كبيرة من الصور. علاوة على ذلك ، تحتوي الصور على خوارزميات ضغط مختلفة ، كما أن الصور النقطية شائعة جدًا فيما بينها لأنها تستهلك مساحة تخزين أقل. ولكن مع مرور الوقت ، ينتهي بنا المطاف بإنشاء صور مكررة وصور زائدة عن الحاجة وما إلى ذلك. لدينا عدد كبير من التطبيقات التي تقدم إمكانات للعثور على الصور المكررة بما في ذلك أداة البحث عن الصور المكررة. في حالة وجود صور مخزنة في صور google ، يمكنك محاولة استخدام أداة البحث عن صور مكررة من Google ، أو تثبيت برنامج البحث عن الصور المكررة windows 10 أو مكرر برنامج مكتشف الصور mac (اعتمادًا على نظام التشغيل الخاص بك). ومع ذلك ، في هذه المقالة ، سنلقي الضوء على كيفية تطوير مكتشف صور مكرر رائع باستخدام REST API والتي يمكن استخدامها على أي نظام أساسي.

واجهة برمجة تطبيقات معالجة الصور

تتوفر مجموعة متنوعة من التطبيقات لمعالجة الصور تقدم ميزات لإنشاء ملفات الصور وتحريرها ومعالجتها. كما أنها توفر القدرات بما في ذلك البحث عن الصور بناءً على تقنيات البحث العكسي عن الصور أو أي خوارزمية أخرى. ومع ذلك ، إذا كنت مهتمًا بالحصول على حل برمجي قائم على واجهة برمجة تطبيقات REST استنادًا إلى البحث العكسي عن الصور ، فإن Aspose.Imaging Cloud هو الخيار المحدد. يساعد محرك البحث القوي المطورين على إضافة ميزات البحث العكسي عن الصور في تطبيقاتهم على أي نظام أساسي بسلاسة. يمكنك حتى بدء عملية مقارنة الصور للعثور على صورة مكررة بين عدة صور أخرى. نتيجة لهذه العملية ، تحصل على قائمة بالصور الأكثر تشابهًا وفقًا للشروط التالية:

  • درجة التشابه
  • عتبة التشابه الأدنى
  • خوارزمية المقارنة

الآن من أجل الحصول على إمكانات مماثلة لمعالجة الصور ومكتشف الصور المكررة داخل تطبيق Java ، نحتاج إلى استخدام Aspose.Imaging Cloud SDK for Java لأنه عبارة عن غلاف حول Cloud API. لذا فإن الخطوة التالية هي إضافة مرجعها في مشروع java عن طريق تضمين المعلومات التالية في ملف pom.xml لمشروع نوع بناء maven.

<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 ، يمكنك التسجيل للحصول على نسخة تجريبية مجانية من خلال عنوان بريد إلكتروني صالح. سجّل الدخول الآن باستخدام حساب تم إنشاؤه حديثًا وابحث / أنشئ معرّف العميل وسر العميل في Cloud Dashboard. هذه التفاصيل مطلوبة لأغراض المصادقة في الأقسام التالية.

ابحث عن صور مكررة باستخدام Java

البحث العكسي عن الصور هو أسلوب يساعدك في البحث عن صور متشابهة بصريًا بناءً على عينة الصورة. فيما يلي حالات الاستخدام الأكثر شيوعًا لهذه الميزة:

ابحث عن الصورة المكررة وقم بإزالة التكرارات البحث عن محتوى صور مماثلة ابحث عن محتوى غير لائق ابحث عن الصور الموقعة رقميا

تدعم واجهة برمجة التطبيقات الخاصة بنا حاليًا البحث عن الصور المستند إلى المحتوى ، والبحث عن الصور المكررة ، والبحث عن الصور عن طريق العلامات المسجلة المخصصة ، ومقارنة الصور واكتشاف التشابه وعمليات استخراج ميزات الصورة. الآن في هذا القسم ، سنناقش التفاصيل حول كيفية العثور على الصور المكررة باستخدام تقنية الصورة العكسية. الآن من أجل تحقيق هذا المطلب ، نستخدم خوارزمية AKAZE لاكتشاف الميزات وخوارزمية RandomBinaryTree لمطابقة الميزات في المثال. سنتبع هذه الخطوات للعثور على الصور المكررة:

  • تحميل الصور إلى التخزين السحابي
  • إنشاء سياق البحث
  • استخراج ميزات الصورة
  • البحث عن صور مكررة

تحميل الصور إلى التخزين السحابي

يرجى استخدام مقتطف الشفرة التالي لتحميل ملفات الصور من محرك الأقراص المحلي إلى التخزين السحابي

  • أولاً ، قم بإنشاء كائن ImagingApi أثناء تقديم ClientID والعميل
  • ثانيًا ، اقرأ جميع ملفات الصور من الدليل المحدد
  • قم بتصفية ملفات الصور فقط وإضافتها إلى القائمة المصفاة
  • قم بتحميل الصور إلى التخزين السحابي باستخدام طريقة 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);
    //تحقق مما إذا كان الامتداد مدرجًا في SupportImageExtensions
    if (supportedImageExtensions.stream().anyMatch(fileExtension::equalsIgnoreCase)) {
        //أضف الصورة إلى القائمة المصفاة
        acceptedImages.add(file);
			    
    // تحميل أول عرض بوربوينت
    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 عبر محطة سطر الأوامر. الآن كشرط مسبق ، نحتاج أولاً إلى إنشاء رمز وصول 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. يرجى تنفيذ الأمر التالي

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 أن تكون بمثابة مكتشف صورة مكرر. في حالة احتياجك إلى تجربة واجهات برمجة التطبيقات هذه داخل المتصفح ، يرجى محاولة استخدام مرجع واجهة برمجة تطبيقات swagger. وبالمثل ، نوصي بشدة باستكشاف وثائق المنتج للتعرف على الميزات المثيرة الأخرى التي تقدمها واجهة برمجة التطبيقات هذه. يُرجى أيضًا ملاحظة أن جميع حزم SDK الخاصة بالسحابة منشورة بموجب ترخيص MIT ، لذلك يمكنك التفكير في تنزيل كود المصدر الكامل من GitHub وتعديله وفقًا لمتطلباتك. في حالة وجود أية مشكلات ، يمكنك الاتصال بنا للحصول على حل سريع عبر منتدى دعم المنتج مجانًا.

مقالات ذات صلة

يرجى زيارة الروابط التالية لمعرفة المزيد حول: