این آموزش واقعیت افزوده با پایتون و OpenCV در واقع بخشی از این بسته آموزش بینایی کامپیوتر است که مستقل هم میتوانید استفاده کنید. یک پروژه واقعیت افزوده آلبوم موسیقی در این آموزش از صفر پیاده سازی میشود. خواهیم آموخت که واقعیت افزوده چیست و چطور باید آن را پیاده کرد.
واقعیت افزوده چیست ؟
واقعیت افزوده (به انگلیسی: Augmented Reality) به ترکیبی از نمای محیط واقعی به علاوه عناصر مجازی روی آن گفته میشود. در واقع بر اساس موقعیت دوربین و آنچه که دوربین به آن نگاه میکند، کدی که در پشت آن نوشته شده عمل میکند. اگر پدیده خاصی یا مختصات خاصی شناسایی شود، عنصر مجازی در خروجی دوربین روی دنیای واقعی افزوده میشود.
بر این اساس واقعیت افزوده به دو دسته تقسیم میشود. دسته اول واقعیت افزوده مختصات مبنا یا Location-based AR است. دسته دوم واقعیت افزوده تشخیص مبنا یا Recognition-based AR است.
واقعیت افزوده تشخیص-مبنا خود به دو دسته تقسیم میشود. واقعیت افزوده مبتنی بر نشانه گذاری یا Marker-based AR و واقعیت افزوده بدون نشانه گذاری یا Markerless AR .
دقت کنید که واقعیت افزوده با واقعیت مجازی (به انگلیسی Virtual Reality) متفاوت است. فرق AR با VR این است که واقعیت افزوده شامل افزودن پدیدههای مجازی به دنیای واقعی در خروجی دوربین است. اما واقعیت مجازی شامل تعامل با دنیای مجازی به واسطه یک عینک و دستههای مخصوص است.
برای شناخت بیشتر و دیدن مثال، این مقاله تفاوت واقعیت افزوده و واقعیت مجازی و همچنین این مقاله بهترین اپلیکیشن های واقعیت افزوده را بخوانید.
این آموزش در یک نگاه
بسته آموزش واقعیت افزوده با پایتون و OpenCV شامل 9 درس است. در درس 1 به این پرسش پاسخ میدهیم که واقعیت افزوده چیست و فرق واقعیت افزوده با واقعیت مجازی چیست.
در درس 2 به تعریف پروژه و راه اندازی محیط کدنویسی میپردازیم. در درس 3 با مفهوم ویژگی یا feature در تصویر آشنا میشویم. سپس دستورات لازم را برای واکشی ویژگیهای تصویر مرجع یا QUERY در پروژه خود مینویسیم.
درس 4 به مفهوم مهم matching اختصاص دارد. ویژگیهای استخراج شده در تصویر مرجع و تصویر ورودی وبکم باید با هم مقایسه شوند. در صورت انطباق یا match بودن ویژگیها میتوان نتیجه گرفت که تصویر مرجع در دوربین دیده شده است.
در درسهای 5 و 6 ابتدا به بیان مفهوم هم نگاری میپردازیم. این که Homography چیست و ماتریس هم نگاری چه نقشی دارد. سپس به کدنویسی و استخراج ماتریس همنگاری میپردازیم.
درسهای 7 و 8 جمعبندی همه تلاشهای دوره هستند. در درس 7 میآموزیم که چطور از دادههای درسهای گذشته برای ساخت یک واقعیت افزوده با درج یک تصویر استفاده کنیم. در درس 8 همین فرآیند برای جاسازی یک فیلم در واقعیت دوربین اجرا میشود.
درس 9 بسیار مهم است. اینجا به جمع بندی میپردازیم. چه یاد گرفتیم و چرا؟ سپس اندیشه پردازی میکنیم. ذهن باید دست را به تلاش ترغیب کند. طوفان فکری یک روش عالی برای انگیزه بخشی و دست به عمل زدن است.
نگاه این دوره
در سراسر این دوره ضمن کدنویسی همواره از مستندات OpenCV استفاده میشود. همچنین با اسلایدهای متنوع و یا دیباگ کردن کدها سعی میشود که مفاهیم درک شوند.
وقتی شما OpenCV را درک کنید فراتر از یک زبان هستید. میتوانید از پایتون استفاده کنید. میتوانید در پروژههای سنگین پردازشی از سی پلاس پلاس استفاده کنید.
در این دوره سعی شده به جای کدنویسی تنها، نگاه عمیقی به امکانات OpenCV در بحث واقعیت افزوده پیدا کنید.
آموزههای اصلی
- آشنایی با توابع واقعیت افزوده در OpenCV
- درک عمیق واقعیت افزوده بدون نشانه گذاری
- آموختن روش صحیح استفاده از مستندات OpenCV
- درک فرق واقعیت افزوده و واقعیت مجازی
- شناخت بسیاری از توابع OpenCV و Numpy با کاربرد عملی
- درک مفهوم Homography و مفهوم Matching
- درک تفاوت Brute force Matcher و FLANN Matcher
این آموزش بینظیر است زیرا:
- این آموزش هم مفهوم محور و هم پروژه محور است.
- آموزش واقعیت افزوده با پایتون از صفر و گام به گام پیش میرود.
- آموزش واقعیت افزوده با OpenCV فقط محدود به زبان پایتون نیست.
- با ترکیب این آموزش و آموزش کیوی (+) میتوان اپلیکیشنهای AR ساخت.
- با ترکیب این آموزش و آموزش پایگیم (+) میتوان بازیهای AR ساخت.
پیشنیاز
آموزش پردازش تصویر با پایتون و OpenCV (+)
کلیدواژهها
آموش واقعیت افزوده با پایتون – آموزش واقعیت افزوده با OpenCV – واقعیت افزوده چیست – فرق واقعیت افزوده با واقعیت مجازی – آموزش پروژه محور واقعیت افزوده – واقعیت افزوده در پایتون – Augmented Reality با OpenCV
فرزانه همدانچی (خریدار محصول) –
فرزانه همدانچی
سلام مجدد. استاد با توجه به نمونه کدی که فرستادید ویدعو وصدا سینک میشن. ولی وقتی در کد این آموزش واقعیت افزوده جایگزاری میکنم از همون ابتدای روشن شدن وب کم صدا پخش میشه بدون توجه به اینکه آیا تصویر خاص مدنظر رویت شده که ویدعو پخش بشه یا نه . میشه راهنمایی کنید کجای کد واقعیت افزوده بخش مربوط به صدا را جانمایی کنم . من در بخش if objDetected == True: قرار میدم . ولی بدون توجه به این شرط صدا پخش میشه .
فرزانه همدانچی (خریدار محصول) –
سلام .من میخواستم صدای ویدعو رو هم داشته باشم از کتاب خونه ffpyplayer استفاده کردم ولی صدا بدون هما هنگی با ویدعو و بدون توجه اینکه چه زمانی قطع و جدد پخش بشه .پلی میشه . اگر زاهنمایی کنید ممنون میشم
مصطفی آصفی –
سلام وقت بخیر. بله اصولا OpenCV برای تصویره و کتابخونه های جانبی مثل ffpyplayer گزینه خوبی برای پخش صدا روی فیلمه. با الهام از این نمونه کد تطبیق صدا و تصویر (+) کدتون رو تصحیح کنید تا فریم و صدا همگام بشن.
تقی جعفری –
سلام و عرض ادب جناب مهندس
مهندس چطوری میشه یک سرویس ایجاد کرد و یا از یک سرویس داخلی برای بارگذاری ازش استفاده کرد که این واقعیت های افزوده فقط با یک نرمافزار مثلا بارکدخوان اطلاعات رو از اون سرور بخونن ؟؟ ممنون میشم اگر راهنمایی بفرمایید
مصطفی آصفی –
سلام وقت بخیر. اگه ممکنه سوالتون رو واضح تر و با توضیح دقیق تر توضیح بدین. چه کاری قصد دارین انجام بشه؟
mehrab –
سلام وقت بخیر اموزش مفیدی بود
یک سوال داشتم اکنون اکثر واقعیت افزوده ها یک تصویر متحرک سه بعدی است و در اموزش شما فقط یک فیلم را جانمایی کردید
ایا روشی برای جانمایی تصاویر متحرک سه بعدی هست؟
مصطفی آصفی –
سلام و سپاس. میدونید موضوع خیلی مهمی که باید توجه کنید اینه که آموزشهای فارسی فقط سکوی پرتاب اولیه هستن. عادت کنید که بعد از درک اصول یه موضوعی مثل این برای ایدههای بعدی گوگل کنید. من می تونستم الان چند گام رو براتون این جا بنویسم ولی ترجیح می دم همین براتون تمرین باشه. عبارت پایین رو گوگل کنید و در بین مقالهها و فیلمها کدهای مفید رو پیدا و جایگزین کنید:
3d model augmented reality python opencv
طاهرزاده (خریدار محصول) –
سلام وقتتون بخیر
ببخشید لینک دانلود آموزشتون برای من باز نمیشه، اصلا نمیشه دانلود کرد
مصطفی آصفی –
سلام وقتتون بخیر. بله متاسفم. یه اختلال سراسری برای برخی سرورهای داخلی هست. موقته رفع میشه امروز فردا.
همایون (خریدار محصول) –
ببخشید من وقتی می خوام از DroidCamApp استفاده کنم نمیشه
یعنی تصویر رو از وب کم لپ تاپ میگیره روی گوشی نمیره باید چیکار کنم که این تنظیمات درست بشه
ممنون میشم راهنمایی بفرمایید.
مصطفی آصفی –
سلام به شما. لطفا ۱- مقاله استفاده از موبایل به عنوان وب کم (+) رو برای راه اندازی بخونید و مطمئن بشید که ورودی موبایل رو روی لپ تاپ دارید. ۲- ممکنه در دستور cv2.VideoCapture(1) نیاز باشه شماره دیگه ای رو بزنید تا سورس دیگه ورودی ویدیو رو بتونید به اوپن سی وی بدین.
مجتبی حبیبی (خریدار محصول) –
سلام استاد . ممنون از آموزش خوبتون . میخواستم بدونم من چطور می تونم واقعیت افزوده را در فلاتر بکار ببرم . فلاتر با زبان دارت است . ولی اینجا زبان پایتون گفته شد . ممنونم میشم راهنماییم کنید
مصطفی آصفی –
سلام به شما. اگه قصد دارید واقعیت افزوده رو در خود اپ فلاتری پیاده کنید در این صورت می تونید از کتابخانههای مناسب دارت استفاده کنید. برای مثال این مقاله (+) رو ببینید.
وحید –
سلام استاد ، سپاسگذارم بابت دوره های خوبتون
من در پایان قسمت 6 این درس با قطعه کد زیر مشکل دارم
src_pts=np.float32([kp[[m].queryIdx].pt for m in good]).reshape(-1,1,2)
در واقع پایچرم میگه منی منبعی برای ” queryIdx ” پیدا نکردم
و بعد از اجرا این ارور رو دارم :
AttributeError: ‘list’ object has no attribute ‘queryIdx’
اگر راهنمایی کنید ممنون میشم.
البته از stackFlow هم جستجو کردم ولی بی نتیجه بود(سعی کردم از منابع opencv هم استفاده کنم)
مصطفی آصفی –
سلام به شما. لطفا به کد دقت کنید:
src_pts = np.float32([kp[m.queryIdx].pt for [m] in good]).reshape(-1, 1, 2)
شما اشتباه ریزی دارید: [kp[m.queryIdx] این درسته.
در چنین مواقعی کار خوب اینه که نوع متغیر رو برای خودتون پرینت کنید.
zein tiz (خریدار محصول) –
سلام استاد . ممنونم از پاسخگویی تون . من از ژوپیتر استفاده می کنم. آناکوندا رو آپدیت کردم. پایتون و اوپن سی وی هم بروز کردم. اول که خود اوپن سی وی به مشکل برخورد cv2 رو نمی تونست ایمپورت کنه با اینکه تو خود env پوشه اش بود. رفتم داخل محیط مجازی تو پوشه اناکوندا دیدم نصب بود ولی نمی تونست بخونه . بعد از کلی کلانجار از یک محیط از جای دیگر که می خوند کلون کردم درست شد. بعد این متد siftرو دوتا متد detectandcompute رو باهم نمیتونست اجرا کنه و کرنل ریستارت میشد. آخرش رفتم جدا جدا زدم. یکبار detect زدم و اجرا کردم و بعدش هم compute را زدم . یعنی دوتا رو روهم اجرا نمی کرد. ولی تک تک اجرا می کرد. برای خودم هم عجیب بود . البته رمم 8 گیگ هست .
zein tiz (خریدار محصول) –
سلام استاد
آموزش خیلی عالی بود. من اجرا می گیرم. ولی موقعی که توابع انطباقی مثل sift رو detect and compute اجرا میگیرم کرنل ریستارت میزنه و میگه
The kernel appears to have died. It will restart automatically.
میتونین راهنمایی کنین. 2 روزه علاف کرده درست نمیشه نمیدونم چکار کنم. لطفا راهنمایی بفرمایید؟
مصطفی آصفی –
سلام به شما. این مشکل معمولا در ژوپیتر هست. معمولا با conda update mkl حل میشه.
اگه از پایچارم استفاده می کنید و این خطا رو دارید سه تا احتمال هست:
1- یک جایی فرآیند کار رو با دقت انجام ندادید و تو ترتیب ایمپورت ها یا کدها یک جایی ایراد دارید.
2- ممکنه از پکیج هایی که استفاده کردیم یک مورد به روز شده و ناسازگار هست. سعی کنید تا حد ممکن موقع نصب ابزارها از همون نسخه بنده استفاده کنید.
3- بدترین حالت ممکنه این باشه که واقعا Ram کم میاره.
پینوشت: لطفا بررسی و نتیجه رو اعلام کنید .
Ashkan –
سلام استاد خسته نباشید.
ممنون بابت آموزش های خوبتون.
ببخشید یه سوال داشتم,
میخواستم بدونم برای تمرین هوش مصنوعی و یادگیری عمیق, حداقل مشخصات سخت افزاری سیستممون باید چی باشه؟
مصطفی آصفی –
سلام به شما. پاسخ قبلی رو با توجه به دوره تازه بهروز میکنم:
در آغاز راه شما زیاد سخت نگیرید. با یک سیستم ساده هم می تونید شروع کنید. یک رم 8 و حتی بدون GPU.
وقتی وارد یادگیری عمیق شدید و به جایی رسیدید که خواستید مدل ها رو واقعا تعلیم بدید بهتره سیستمی داشته باشید که GPU با کیفیت مناسب داشته باشه.
اما اگر چنین سیستمی ندارید یا امکان تهیه نیست، میتونید از سرویس کولب گوگل استفاده کنید که در این آموزش یولو (+) برای نمونه از اون در تعلیم یولو برای تشخیص اشیا استفاده کردیم.
سرویس Colab امکان اتصال به GPU های رایگان گوگل رو به شما میده که می تونید برای پروژ های یادگیری عمیق و کلان داده استفاده کنید.
آرش رضایی –
واقعیت های افزوده روی سیستم عامل کاربرد زیادی ندارن بیشتر روی گوشی ها و عینک ها و… استغاده میشود بهتر بود این آموزش سمت اندروید بود
مصطفی آصفی –
سلام به شما. قلب موضوع اینجا توضیح داده شده و شما با استفاده از این آموزش کیوی (+) میتونید اونچه یاد گرفتید رو در قالب یک اسکریپت پایتونی در قلب یک اپ اندروید کار بگذارید و بهینه کنید. و بعدها به سرور متصل کنید و …