Computer Vision Community
321 subscribers
35 photos
3 videos
4 files
78 links
محلی برای انتقال تجربه در زمینه بینایی ماشین
Download Telegram
Channel photo updated
سلام.
به کانال جامعه بینایی ماشین خوش اومدید.
پس از مدتها کار کردن در این حوزه خاص، تصمیم گرفتم که در قالب کانال (و احتمالا بعدها گروه) تلگرامی، تجربیاتی که در زمینه بینایی ماشین دارم رو باهاتون به اشتراک بذارم.
به زودی مطالب این کانال به‌روز خواهند شد 😊
👍1
خب با درس اول بینایی ماشین شروع می‌کنیم :)
اصلا بیایید ببینیم بینایی ماشین چیه؟
👀 ماشین‌ها مثل انسان‌ها چشم ندارن اما می‌دونیم که خیلی از کامپیوترها، گوشی‌های موبایل و سایر دستگاه‌هایی که به نوعی کامپیوتر محسوب میشن، ممکنه دوربین داشته باشند و اگر رابط گرافیکی مناسبی هم بهشون متصل کنیم، می‌تونن تصاویر رو نشون بدن.
👀 هر تصویری - مثل سایر داده‌هایی که در یک کامپیوتر می‌بینیم - یک عدده. البته در مورد تصاویر، بهتره بگیم که یک ماتریس عددیه. کامپیوتر، می‌تونه این ماتریس‌ها رو بخونه و به پیکسل‌های رنگی تبدیل کنه و به ما نمایش بده.
👀 حالا ما به هر فرآیندی که بتونه به ما در درک، تغییر و نمایش تصاویر به کمک کامپیوتر کمک کنه، می‌گیم بینایی ماشین.

@computer_vision_com
تصویر چیه؟
تصویر، یک ماتریس چندبعدیه که طول و عرضش، طول و عرض تصویر رو در واحد پیکسل مشخص می‌کنه. حالا چرا چند بعدی؟ چون ما در تصاویرمون معمولا سه کانال آبی، سبز و قرمز داریم.
برای این که بهتر درکش کنیم یک پیکسل سبز رنگ رو در نظر بگیرید. این پیکسل به این شکل ساخته میشه:
[[0],[255],[0]]

یعنی این پیکسل خودش یه ماتریس بزرگه که درون خودش سه‌تا ماتریس ۱*۱ داره (البته نمایشی که از قضیه دادم یکم غلطه، فقط برای اینه که مفهوم رو درک کنیم) و ماتریس دومی، که رنگ سبز رو به ما نشون میده، مقدارش برابر ۲۵۵ قرار گرفته.
حالا چرا ۲۵۵؟ ما در هر پیکسل معلق به هر رنگ در مدهای رنگی BGR و RGB می‌تونیم از ۰ تا ۲۵۵ رو قرار بدیم (مقدار حافظه‌ای که به هر پیکسل اختصاص میدیم ۸ بیت یا یک بایته) و اگر یکی رو ماکزیمم قرار بدیم و باقی رو صفر، همون رنگ رو در پیکسل مورد نظر خواهیم داشت.
در بعضی از تصاویر، ممکنه یک «کانال آلفا» داشته باشیم که اون رو فعلا باهاش کار نداریم 😁
پس به صورت کلی، هر تصویر یک ماتریس بزرگه که در خودش سه تا ماتریس رو جای داده.
فعلا این تعریف رو داشته باشیم تا بعدا در مورد «مدهای رنگی» بیشتر مطالعه کنیم :)

@computer_vision_com
👍1
کاربردهای بینایی ماشین کجان؟
خب کاربردهای زیادی براشون وجود داره که در این قسمت با هم مرورشون می‌کنیم :)
- ویرایش تصاویر: بله، همون فتوشاپی که ما ازش برای ویرایش تصاویر استفاده می‌کنیم بر مبنای همین مفاهیم نوشته شده. با توجه به این که فتوشاپ از اواخر دهه ۸۰ میلادی وجود داشته، می‌تونید بفهمید که بینایی ماشین همچین هم جدید نیست :)
- طبقه‌بندی تصاویر: اگر کمی هوش مصنوعی، یادگیری ماشین و یادگیری عمیق چاشنی کارمون کنیم، می‌تونیم طبقه‌بندی تصاویر رو هم انجام بدیم.
- خودروهای خودران: خودروهای خودران برای تشخیص چراغ قرمز، موانع، ترافیک، خودروهای نزدیک، علائم راهنمایی رانندگی در کنار سنسورهای فراصوت و LiDar از پردازش تصویر استفاده می‌کنند. احتمال زیاد عمومیت موضوع این کانال هم بر مبنای همین بزرگوارها باشه :)
- واقعیت افزوده: واقعیت افزوده علیرغم این که درست فهمیده نمیشه، اما فیلد خوبیه برای مطالعه. طبیعتا برای انجام پروژه‌های واقعیت افزوده نیازمند حجم خوبی دانش بینایی ماشین هستیم :)
موارد بالا، فقط بخش کوچکی از کاربردهای بینایی ماشین بودن :) در ادامه درس‌های این کانال، با هم موارد بیشتری رو بررسی خواهیم کرد.

@computer_vision_com
👍1
این هم تصویر ماتریس‌هایی که یک تصویر رو برای ما در مد رنگی BGR یا RGB میسازند.

@computer_vision_com
👍1
و اما درس دوم بینایی ماشین :)
پیش‌نیازهای بینایی ماشین چیه؟
این درس قراره یک درس نسبتا کوتاه باشه در مورد این که ما برای یادگیری بینایی ماشین، چه چیزایی نیاز داریم که بلد باشیم.
اولین چیزی که نیازه بلد باشیم، بیسیک‌های برنامه‌نویسیه. در واقع باید بتونیم یک برنامه که در دنیای واقعی کار می‌کنه بنویسیم. این بیسیک‌هایی که اینجا ازشون حرف میزنیم شامل عملگرهای منطقی و محاسباتی، ساختارهای کنترلی، توابع، کلاس‌ها و کار با فایل (و I/O ) میشه.
👀 چه زبانی باید برای بینایی ماشین بلد باشیم؟
برای بینایی ماشین ما از یک کتابخونه‌ای به اسم OpenCV که مخفف Open Source Computer Vision است استفاده می‌کنیم. این کتابخونه برای زبان‌های سی++، جاوا و پایتون ارائه شده و binding های مرتبط با سی‌شارپ (برای موتور بازی‌سازی یونیتی) هم داره.
👀 ما قراره با کدوم یکی از این زبان‌ها کار کنیم؟
عمده مفاهیمی که در این کانال در موردش بحث خواهیم کرد بیشتر با کلیت و تمامیت OpenCV کار داره و نه کتابخونه خاصی. اما برای ساده‌سازی بحث‌ها، عمده مثالها با پایتون خواهند بود. اما در آینده‌ای نه چندان دور مثالهای جاوا هم اضافه میشن.

@computer_vision_com
👍1
راهنمای نصب OpenCV در کنار پایتون
فرض ما بر اینه که شما پایتون رو نصب کردید و می‌دونید که چی به چیه (همونطوری که خدمتتون عرض کردم، شما نیاز دارید تا بیسیک‌های پایتون رو بلد باشید که خب نصب پکیج هم از اوناست). فرض ما اینجا این خواهد بود که شما پایتون رو از python.org نصب کردید (برای آناکاندا و ... روش‌های دیگری هست. اما خب تا حد خوبی روش‌ها شبیه به همن).
حالا کافیه که شما ترمینال یا cmd رو باز کنید و دستور زیر رو اجرا کنید:
pip install opencv-python

و اگر پایتون ۲ و ۳ رو کنار هم دارید:
pip3 install opencv-python

و اگر ویندوز دارید:
python3 -m pip install opencv-python

و منتظر باشید تا نصبش تمام شه.
بعد از نصبش، کافیه که شل پایتون رو باز کنید و این دستور رو اجرا کنید:
import cv2

و اگر بدون هیچ خطایی اجرا شد، یعنی که شما OpenCV رو به درستی نصب کردید.
در ادامه، ممکنه یک سری پکیج دیگه نصب کنیم که اهم اونها عبارتند از numpy و matplotlib و mediapipe. گرچه الان کار زیادی باهاشون نداریم، اما اگر نصبشون کنید بد نیست :)

@computer_vision_com
👍1
بعنوان یک مطلب کوتاه این رو بگم که قرار نیست فعلا کد بنویسیم. درس بعدی در مورد مُدهای رنگی خواهد بود و بعدش وارد وادی کدنویسی می‌شیم.
این رو بعنوان یک یادآور اینجا نوشتم.
👍1
خب درس سوممون هم فضاهای رنگی یا همون مُد رنگی در پردازش تصویره :)
در این درس مدهای زیر رو بررسی می‌کنیم:
۱. مد خاکستری (که بهش Gray یا Grayscale هم می‌گیم)
۲. مد آبی-سبز-قرمز و قرمز-سبز-آبی (BGR, RGB)
۳. مد HSV (یا Hue, Saturation, Value)
چند مُد دیگر هم وجود داره که فعلا باهاشون کاری نداریم. حقیقت اینه که عمده چیزایی که قراره در ادامه باهاشون کار کنیم، با همین مدها کارمون راه میفته و نیاز به مد اضافه‌تری نداریم.
از ساده‌ترین مُد شروع کنیم؟ مد خاکستری.
مد خاکستری یک لایه بیشتر نداره. یک تصویر رو فرض کنید که ۶۴۰ در ۴۸۰ پیکسل اندازه‌شه.
اگر این تصویر رو به مد خاکستری ببریم، صرفا یه ماتریس تک‌بعدی میشه که ۶۴۰ ستون و ۴۸۰ ستر داره و در هر درایه از ماتریس یک عدد از ۰ تا ۲۵۵ عه که مشخص می‌کنه کجای طیف هستیم. در واقع، اینطوری بگم خدمت شما که هرچی به صفر نزدیک‌تر باشیم تیره‌تر و هرچی به ۲۵۵ نزدیک‌تر بشیم روشن‌تر میشه.
سایر مدها چی؟ در ادامه می‌بینیم. :)

@computer_vision_com
👍1
در مد رنگی RGB یا BGR ما سه ماتریس داریم که تعیین‌کننده رنگ‌هامون هستند. یک ماتریس برای آبی، یکی برای سبز و دیگری برای قرمز.
در واقع اینجا به این نگاه کنیم که سه ماتریس هرکدوم با ۶۴۰ ستون و ۴۸۰ سطر.
در هر درایه یک عدد بین ۰ تا ۲۵۵ داریم که نشون میده چقدر قرمز، چقدر سبز و چقدر آبی داریم. مثلا اگر قرمز و آبی روی ۲۵۵ و سبز روی ۰ باشه، یعنی چی شده؟ هیچی. اون پیکسل خاص بنفش نمایش داده میشه.
کتابخونه OpenCV به صورت خاص تصاویر رو BGR می‌بینه ولی ما می‌تونیم اونا رو به شکل RGB هم ببینیم. این مورد رو در درس‌های بعدی بررسی خواهیم کرد.

@computer_vision_com
👍1
مد رنگی HSV هم از سه بخش Hue, Saturation و Value تشکیل شده.
حالا اینا چین؟ Hue میشه اون طول موجی که در یک پیکسل خاص، غالب بوده. مثلا اینطوری بگیم که اگر یک پیکسل نارنجی ببینیم، احتمالا طول موج مربوط به قرمز در اون به طول موج آبی و سبز غالب باشه.
مورد دوم Saturation یا اشباعه. این مورد میگه که رنگ ما چقدر خالصه و چقدر سایه داره.
مورد آخر یا همون Value نشان از اینه که شدت اون رنگ خاص چقدره.
مد HSV برای شناسایی الگو‌ها در یک تصویر، تشخیص رنگ و ...، کاربرد داره. این مورد رو شاید خیلی بعدتر ازش استفاده کنیم پس اگر درکش براتون مشکله نگران نباشید.

@computer_vision_com
👍1
از اونجا که بعضی از دوستانی که تازه به کانال پیوستند ممکنه که با پایتون آشنا نباشند، این کورس پنج‌ساعته «پایتون برای دیتاساینس» رو ببینید.
چرا که خیلی از کارایی که ما قراره انجام بدیم، پایه‌ش دقیقا در همین دیتاساینسه:
https://www.youtube.com/watch?v=yGN28LY5VuA

@computer_vision_com
Computer Vision Community
درسهای برنامه‌نویسی در چه فرمتی باشند؟
نتایج این نظرسنجی تا ۲۴ ساعت آینده تعیین می‌کنه با کدوم فرمون بریم جلو :)