مغز ما خود را وقف پردازش بصری می کند و عشق ما به تصاویر به شناخت و توانایی توجه ما بستگی دارد. تصاویر به راحتی می توانند توجه ما را به خود جلب کنند و بسیاری از دستگاه ها از جمله دوربین های دیجیتال تلفن های همراه، اسکنرها و غیره حجم زیادی از تصاویر را تولید می کنند. علاوه بر این، تصاویر دارای الگوریتم های فشرده سازی متفاوتی هستند و تصاویر شطرنجی در بین آنها بسیار رایج است زیرا فضای ذخیره سازی کمتری را مصرف می کنند. اما همچنان، با گذشت زمان، ما در نهایت به ایجاد عکسهای تکراری، تصاویر اضافی و غیره میپردازیم. ما تعداد زیادی برنامه کاربردی داریم که قابلیتهایی را برای یافتن تصاویر تکراری از جمله تصویر یاب تکراری ارائه میدهند. در صورتی که تصاویری در google photos ذخیره کرده اید، می توانید از Google Photo Duplicate Finder استفاده کنید، یاب عکس تکراری ویندوز 10 یا Duplicate Photo Finder مک را نصب کنید (بسته به سیستم عامل شما). با این حال، در این مقاله، ما قصد داریم نحوه ایجاد یک یاب عکس تکراری عالی با استفاده از REST API را که می تواند در هر پلتفرمی مورد استفاده قرار گیرد، روشن کنیم.
- API پردازش تصویر
- تصاویر تکراری را با استفاده از جاوا پیدا کنید
- عکس تکراری را با استفاده از دستورات cURL پیدا کنید
API پردازش تصویر
برنامه های مختلفی برای پردازش تصویر موجود است که ویژگی های ایجاد، ویرایش و دستکاری فایل های تصویری را ارائه می دهد. آنها همچنین قابلیت هایی از جمله جستجوی تصویر بر اساس تکنیک های جستجوی عکس معکوس یا هر الگوریتم دیگری را ارائه می دهند. با این حال، اگر شما علاقه مند به داشتن راه حل برنامه ای مبتنی بر REST API بر اساس جستجوی عکس معکوس هستید، Aspose.Imaging Cloud انتخاب قطعی است. موتور جستجوی قدرتمند آن به توسعه دهندگان کمک می کند تا ویژگی های جستجوی عکس معکوس را در برنامه خود در هر پلتفرمی به طور یکپارچه اضافه کنند. حتی ممکن است عملیات مقایسه تصویر را برای یافتن عکس تکراری در میان چندین تصویر دیگر شروع کنید. در نتیجه این عملیات، لیستی از مشابه ترین تصاویر را با توجه به شرایط زیر دریافت می کنید:
- درجه تشابه
- حداقل آستانه تشابه
- الگوریتم مقایسه
اکنون برای اینکه پردازش تصویر مشابه و قابلیتهای تکراری یاب تصویر در برنامه جاوا داشته باشیم، باید از Aspose.Imaging Cloud SDK for Java استفاده کنیم، زیرا یک پوشش در اطراف Cloud API است. بنابراین گام بعدی اضافه کردن مرجع آن در پروژه جاوا با قرار دادن اطلاعات زیر در 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 ایجاد نکردهاید، میتوانید از طریق یک آدرس ایمیل معتبر برای یک نسخه آزمایشی رایگان ثبتنام کنید. اکنون با استفاده از حساب تازه ایجاد شده وارد شوید و Client ID و Client Secret را در Cloud Dashboard جستجو/ایجاد کنید. این جزئیات برای اهداف احراز هویت در بخشهای زیر مورد نیاز است.
تصاویر تکراری را با استفاده از جاوا پیدا کنید
جستجوی عکس معکوس تکنیکی است که به شما کمک می کند تصاویر مشابه بصری را بر اساس تصویر نمونه خود جستجو کنید. در زیر رایج ترین موارد استفاده از این ویژگی آورده شده است:
تصویر تکراری را جستجو کنید و موارد تکراری را حذف کنید تصاویر مشابه محتوا را جستجو کنید جستجوی محتوای نامناسب جستجوی تصاویر با امضای دیجیتال
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);
//بررسی کنید که آیا برنامه افزودنی در supportedImageExtensions فهرست شده است
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 مشخص کنیم
- در مرحله دوم، الگوریتمی را برای تطبیق ویژگی ها به صورت تصادفی باینری درخت مشخص کنید
- ثالثاً، درخواست جستجوی تصویر را با استفاده از شی 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 برای دسترسی به APIهای 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 می توانند به عنوان یک تصویر یاب تکراری عمل کنند. در صورت نیاز به امتحان این APIها در مرورگر، لطفاً از Swagger API Reference استفاده کنید. به طور مشابه، ما به شدت توصیه میکنیم مستندات محصول را بررسی کنید تا سایر ویژگیهای هیجانانگیز ارائهشده توسط این API را بیاموزید. همچنین، لطفاً توجه داشته باشید که همه کیتهای توسعه نرمافزار ابری ما تحت مجوز MIT منتشر شدهاند، بنابراین میتوانید کد منبع کامل را از GitHub دانلود کنید و آن را مطابق با نیاز خود تغییر دهید. در صورت بروز هر گونه مشکلی، می توانید برای حل سریع از طریق [تالار گفتمان پشتیبانی محصول] رایگان به ما مراجعه کنید.
مقالات مرتبط
لطفا برای کسب اطلاعات بیشتر به لینک های زیر مراجعه کنید: