واقعیت افزوده(AR) در اندروید

نویسنده همراه: علیرضا ایجیاپلیکیشن های موبایل همیشه جایی برای انجام کار های روزمره مثل پیام دادن به دیگران و یا تنظیم یک یادآوری بوده. اما امروزه با استفاده قدرت پردازشی گوشی های هوشمند، توسعه دهندگان میتوانند مرز های برنامه های خود را تا واقعیت دور و اطرافمان گسترش دهند!واقعیت افزوده چیه؟هدف اصلی واقعیت افزوده(همانطور که از اسمش هم قابل مشاهده است)، افزودن اشیایی به دنیای واقعی است که توسط کامپیوتر مدل شده اند و با استفاده از سنسور ها و دوربین ها میتوانیم این مدل ها را در دنیای واقعی ببینیم. گوشی هوشمند شما اطلاعات را از دنیای بیرون دریافت میکند، آن را پردازش میکند، آبجکت های مدل شده را به آن اضافه میکند و در نهایت تصویر زنده ای از دنیای بیرون که اشیا مدل شده در آن هستند را به کاربر نمایش میدهد.چند نمونه از واقعیت افزوده به من نشون بده، لطفا واقعیت افزوده تا به الان راهش را به صنایع مختلف گشوده و هر روز تعداد بیشتری از توسعه دهندگان با قدرت بی نظیر این ابزار آشنا میشوند و از آن برای کاربرد های مختلف استفاده میکنند. Google Maps یک مثال از این برنامه هاست. تصور کنید که در حال جستجو برای یک کافه نزدیک محل خود هستید و مکان این کافه را در Google Maps پیدا کرده اید. اما از آنجا که شما در حال قدم زدن در یک دنیای ۳بعدی هستید، دیدن و پیدا کردن مسیر بر روی یک نمایشگر ۲بعدی میتواند سخت و اذیت کننده باشد. Google Maps برای این مشکل یک راه حل ARای ارائه داده است. این قابلیت میتواند با اضافه کردن فلش های جهت داری به دنیای واقعی مسیر را به شما نشان دهد و شما را از نگرانی اشتباه رفتن یک کوچه به جای کوچه دیگر رها کند. به تصویر متحرک پایین نگاه کنید.مسیریابی با استفاده از AR در Google Mapsآیا من به عنوان یک توسعه دهنده باید تمام این پردازش ها و تشخیص محیط را خودم در برنامه AR خودم انجام بدم؟البته که نه. شرکت های تکنولوژی در سال های اخیر SDK های خوبی برای توسعه برنامه های AR در اختیار توسعه دهندگان قرار داده اند. از آنجایی که گوگل پلتفورم اندروید را در اختیار دارد، در این متن ما به SDK این شرکت در زمینه AR که ARCore نام دارد خواهیم پرداخت. ARCore خودش را به شرح زیر معرفی میکند:اس دی کی ARCore پلتفورم گوگل برای ساختن تجربه های واقعیت افزوده است. با استفاده از API های مختلف، ARCore به گوشی شما این قابلیت را میدهد تا دنیای اطراف خودش را احساس کند، آن را درک کند و با اطلاعات آن تعامل کند. بعضی از API ها در پلتفورم های اندروید و iOS قابل دسترسی هستند تا تجربه ی واقعیت افزوده ی اشتراکی را ممکن کنند.اس دی کی ARCore از سه توانایی کلیدی برای ادغام محتوای مجازی با دنیای واقعی از طریق دوربین گوشی شما استفاده میکند:ردیابی حرکت(Motion Tracking): به گوشی این امکان را میدهد تا مکان خودش را نسبت به دنیای اطرافش بشناسد و ردیابی کند.درک محیطی(Environmental Understanding): به گوشی این امکان را میدهد تا اندازه و مکان هر گونه سطحی را شناسایی کند: عمودی، افقی و سطوح زاویه دار مثل زمین، میز نهارخوری یا دیوار ها.حدس نور محیط(Light Estimation): به گوشی این امکان را میدهد تا نور محیط را با دقتی حدس بزند.ARCoreشما میتواند از این SDK علاوه بر توسعه اپلیکیشن های بر بستر اندروید، برای توسعه اپلیکیشن های AR در پلتفورم های iOS، وب و یونیتی استفاده کنید.ابزار ARCore، همانند دیگر ابزار های AR، از ورودی دوربین استفاده میکند و آن را با سنسور های حرکت سنج گوشی مخلوط میکند تا مکان و جهت نگه داری گوشی را در عین حرکت گوشی در فضا تشخیص دهد. این ابزار نقطه هایی کلیدی را معین میکند و آن ها را به خاطر میسپرد، تا هنگامی که گوشی به آن نقطه دوباره بازگشت، بتواند دوباره همان اشیا را در آن نقطه قرار دهد. این ابزار همچنین میتواند سطوح صاف را تشخیص دهد تا اشیا را روی آن قرار دهد.جالبه. چطور میتونم اولین برنامه AR خودم رو با استفاده از ARCore بنویسم؟در ادامه این متن، قرار است تا استفاده و فعالسازی ARCore را با زبان جاوا در محیط اندروید مشاهده کنیم. اما شما میتوانید پیاده سازی های این SDK در پلتفورم های دیگر در وبسایت ARCore مشاهده کنید.پیش نیاز هامحیط توسعه: Android Studioآشنایی مقدماتی با جاوا و توسعه برنامه های اندرویدفعالسازی ARCore در پروژه اندرویددر ابتدای امر، شما باید مشخص کنید که اپلیکیش شما یک اپلیکیشن "AR Required"(استفاده از AR در آن مورد نیاز است) است یا یک اپلیکیشن "AR Optional"(استفاده از AR در آن اختیاری است. در زیر لیستی از تفاوت های این دو نوع اپلیکیشن قرار دارد.اضافه کردن تگ های زیر در فایل Manifest.XMLبرای سادگی، فرض میکنیم که برنامه ی ما قرار است تا AROptional باشد. به همین دلیل، کد هایی که در ادامه خواهیم آورد برای نوشتن یک برنامه AROptional خواهد بود.تگ های زیر را به فایل Manifest.XLM پروژه خود اضافه کنید.<uses-permission android:name=&quotandroid.permission.CAMERA&quot /> <application …> <meta-data android:name=&quotcom.google.ar.core&quot android:value=&quotoptional&quot /> </application> همچنین، فراموش نکنید تا minSdkVersion پروژه خود را در فایل build.gradle به ۱۴ یا بالاتر تغییر دهید. android { defaultConfig { … minSdkVersion 14 } }به طور قطع باید یک سری dependency هم اضافه کنید!اولا مطمئن شوید تا فایل build.gradle پروژه شما مخزن Maven عه Google را دارد.allprojects { repositories { google() … } }همچنین این dependecy را برای اضافه کردن اس دی کی ARCore به این فایل اضافه کنید.dependencies { … implementation 'com.google.ar:core:1.23.0' }حال که مقدمات افزودن ARCore به پروژه مان را انجام دادیم، به سراغ کدمان میرویم!از کجا در زمان اجرای برنامه مطمئن شم که ARCore پشتیبانی میشه؟قطعه کد پایین را برای این منظور به برنامه خود در متد ()onCreate اکتیویتی ای که ARCore از آن استفاده شده است اضافه کنید.@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // فعالسازی قابلیت های مربوط به واقعیت افزوده بر روی دستگاه های پشتیبانی شده maybeEnableArButton(); … } void maybeEnableArButton() { ArCoreApk.Availability availability = ArCoreApk.getInstance().checkAvailability(this); if (availability.isTransient()) { // برنامه را با نرخ ۵ هرتز ادامه بده در حالی که پشتیبانی واقعیت افزوده را چک میکنیا new Handler().postDelayed(new Runnable() { @Override public void run() { maybeEnableArButton(); } }, 200); } if (availability.isSupported()) { mArButton.setVisibility(View.VISIBLE); mArButton.setEnabled(true); } else { // اگر این دستگاه غیر قابل شناسایی یا پشتیبانی نشده بود mArButton.setVisibility(View.INVISIBLE); mArButton.setEnabled(false); } }برنامه واقعیت افزوده قطعا نیاز به دوربین داره. چطور اجازه دسترسی به دوربین رو از کاربر بگیرم؟قطعه کد زیر را در تابع () اکتیویتی اضافه کنید تا هر بار که برنامه باز و بسته شد این اجازه اگر داده نشده بود، درخواست شود.@Override protected void () { super.(); // ARCore برای انجام کارش به دسترسی دوربین نیازمند است if (!CameraPermissionHelper.hasCameraPermission(this)) { CameraPermissionHelper.requestCameraPermission(this); return; } … }همچنین متد زیر را برای گرفتن این دسترسی ها باید پیاده کنید.@Override public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] results) { super.onRequestPermissionsResult(requestCode, permissions, results); if (!CameraPermissionHelper.hasCameraPermission(this)) { Toast.makeText(this, &quotCamera permission is needed to run this application&quot, Toast.LENGTH_LONG) .show(); if (!CameraPermissionHelper.shouldShowRequestPermissionRationale(this)) { //اگر دسترسی با عبارت&quotدوباره سوال نشود&quot بسته شد CameraPermissionHelper.launchPermissionSettings(this); } finish(); } }در انتها، چک کنید که آیا سرویس واقعیت افزوده گوگل پلی نصب شده است یا نهقطعه کد زیر را به همانند بخش قبل به تابع () اکتیویتی اضافه کنید.private boolean mUserRequestedInstall = true; @Override protected void () { super.(); // چک کردن دسترسی دوربین … // اطمینان از نصب و به روز بودن ابزار واقعیت افزوده سرویس گوگل پلی // بر روی دستگاه try { if (mSession == null) { switch (ArCoreApk.getInstance().requstInstall(this, mUserRequestedInstall)) { case INSTALLED: // موفقیت آمیز: میتوان یک نشست واقعیت افزوده ایجاد کرد mSession = new Session(this); break; case INSTALL_REQUESTED: // برگردانده شدی`INSTALL_REQUESTED`اگر: // 1. اکتیویتی را متوقف میکندARCore // 2. به کاربر ارور میدهد تا گوگل پلی را نصب یا ARCore // بروزرسانی کند // 3. بروزترین داده های پروفایل دستگاه را دانلودمیکدARCore // 4. دوباره اکتیویتی را راه اندازی میکند و همینARCore //مرحل را تکرار میکند تا مطمئن شود نصب یا بروزرسانی انجام شده باشد mUserRequestedInstall = false; return; } } } catch (UnavailableUserDeclinedInstallationException e) { Toast.makeText(this, &quotTODO: handle exception &quot + e, Toast.LENGTH_LONG) .show(); return; } catch (…) { … return; //نال میماند زیرا ساخت نشست موفقیت آمیز نبود mSession } … }پروژه نمونه را دریافت کنید و آن را اجرا کنیددر نهایت از لینک زیر از مخزن رسمی ARCore، پروژه زیر را clone کنید.git clone https://github.com/google-ar/arcore-android-sdk.git https://virgool.io/p/nab8y5wnagxq/%F0%9F%93%B7 ?حال با دستگاه خود میتوانید تصویر زیر را ببینید .این اندروید های گوگولی را نگاه کنید که روی میز شناور اند.:)در ادامه مسیر راهم چیه؟میتوانید با کمک از داکیمونتیشن رسمی گوگل، توابع استفاده شده در کد سمپل را در کنید و از آنها در کد خودتان استفاده کنید. همچنین اگر جایی استفاده از دیگر SDK ها را مناسب تر دیدید، از آن ها استفاده کنید.