مغز ما آدما دنیای اطرافمون رو به صورت خودکار درک و تفسیر میکنه. احتمالا با خودتون بگید خب بینایی کامپیوتری (Computer Vision) چیز خاصی نداره که فقط نیاز داره موز رو از گوریل تشخیص بده ولی اینجوریام نیست! همین دیدن و درک کردن اشیا برای ما آدما هم صد هزار سال و حتی بیشتر طول کشیده. خب قراره در ادامه بیشتر باهاش آشنا بشیم و نظرمون تغییر میکنه.
بینایی کامپیوتری زیررشته هوش مصنوعی (AI) و یادگیری ماشین (Machine Learning) هست که ابزار هایی رو ایجاد میکنه تا کامپیوتر ها بتونن اطلاعات بصری توی دنیای واقعی رو درک کنند. به طور کلی برای درک یه چیزی نیازه که کامپیوتر سه گام زیر رو طی کنه:
خودکار بفهمه که شی موجود توی تصویر چیه و کجا قرار گرفته.
اشیا مختلف توی تصویر رو دسته بندی کنه و رابطه های بین اونا رو بفهمه.
درک کنه که مفهوم عکس و فیلم یعنی چی.
تاریخچه بینایی کامپیوتری
احتمالا حس کنید بینایی کامپیوتری یه چیز جدیدیه ولی اینجوری نیست. تلاش های اولیه توی سال 1959 انجام شد. به طور قطع نمیشه گفت پدر علم بینایی کامپیوتری کیه ولی اکثریت پذیرفتن که جناب لرنس رابرت (Lawrence Roberts) هست که از سازندگان اینترنت و دانشمند ارشد «DARPA» بود.
محقق ها شروع کرده بودن راهکار هایی پیدا میکردن که با کمک اونا کامپیوتر میتونست الگو ها و اشکال های ساده ای رو تشخیص بده ولی هنوز کامپیوتر ها ساده بودن برای همین سرعت پیشرفت کم بود. بعد ها پیشرفت های زیادی توی این زمینه به دست اومد که این پایین لیستش موجوده:
سال 1953: اولین برنامه تشخیص حروف و اعداد نوشته شد که البته حروف و اعداد از حد معمولی به بد رو نمیتونست تشخیص بده ولی برای اولین برنامه سیستم بینایی ماشین عالی بود.
سال 1959: برنامه ای برای تشخیص گربه بود که از گوشه های تیز و خطوط استفاده میکرد.
سال 1966: برنامه تشخیص چهره توسط جناب رابرت ایجاد شد که توی صنایع نظامی بیشتر استفاده کردند که بعد ها مقاله های متنوعی اومد که باعث شد این سیستم پیشرفت خوبی داشته باشه.
سال 1978: جناب دیوید لوئیس یه سیستم بینایی ماشین به نام «VICAR» درست کرد که کیفیت قطعات الکترونیکی رو سنجش میکرد و ازش در بعضی آزمایشگاه ها استفاده میکردن.
سال 1998: بینایی کامپیوتری وارد فاز تحلیل و تجزیه حرکت، تشخیص اشیا سه بعدی شد و کامپیوتر های قدرتمند تری نسبت به اوایل توی این دوران وجود داشت. اولین خوردو خودران رو تیم «Carnegie Mellon University» درست کردن و بعد ها ویژگی های جدیدی براش اعمال کردن.
سال 2012: سیستم تشخیص تصویر «Alex Net» توی مسابقه ILSVR تونست برنده بشه و این شد که به صورت جدی تر و قوی تر محققان توی این زمینه جلوتر رفتن.
این پیشرفت ها به خاطر الگوریتم های پیچیده امروزی و کامپیوتر های قوی به سرعت ادامه داره ...
بینایی کامپیوتری چطوری کار میکنه؟
اول اینکه کامپیوتر نیاز داره داده های زیادی که اینجا تصویر هست رو ببینه و بعد بتونه تشخیص بده شی نشون داده شده چیه. به طور مثال میخوایم کامپیوتر دوچرخه رو از موتور تشخیص بده. خب راهکاری که به ذهن ما میاد اینه که بگیم اولا دو تا چرخ داشتن و بدنه کوچیک نشونه دوچرخه هست. ولی خب دوچرخه ای داریم که چهار تا چرخ داره! به این کار مهندسی ویژگی (Feature Engineering) میگن یعنی ویژگی های هر آبجکت رو میایم سازمان دهی میکنیم.
ولی خب این روش خوبی نیست. ما میایم با الگوریتم های طبقه بندی و داده هارو برچسب میزنیم و ماشین با دیدن اینها شروع میکنه با تحلیل اشکال، رنگ، فاصله های نکته ها و ... یاد میگیره.
چالش های بینایی کامپیوتری
همیشه داده ها بصری به شکل ایده آل نیست و دستخوش تغییر داره. مشکلاتی که تو بینایی کامپیوتری باهاشون مواجه هستیم مهم ترین هاشو میشه گفت:
نویز (Noise): گاهی وقتا پیکسل های عکس یا خیلی روشن تر یا خیلی کمرنگ تر میشن و این باعث میشه کار سیستم سخت باشه. مثلا دوربین های راهنمایی رانندگی توی روزای بارونی یا برفی کارشون سخته.
زاویه های ناآشنا (Unfamiliar angles): ماشین برای درک نیاز داره زاویه های مختلفی از شی داشته باشه. برای همین گاهی وقتا زاویه ای که ماشین باهاش رو به رو هست درک کردنش دشواره.
همپوشانی (Overlapping): وقتی توی عکس ما بیشتر از یه شی داشته باشیم احتمال داره اینا هم دیگه رو بپوشونن و این برای درک ماشین سخته.
شباهت جعلی (Fake Similarity): گاهی وقتا پیش میاد یه شی از یه زاویه ای به چیز دیگه شباهت داشته باشه. مثلا مشهوره که همه جا آوردن اینه شده توی اطرافمون وقتی عکس میگیریم نیم رخ یه نفر خیلی شبیه بشه به یه آدم معروف در صورتی که اون نیست. برای حل این مشکل از مهندسی ویژگی نمیشه. برای درک کردن بهتر ما سراغ شبکه های عصبی عمیق (Deep Artificial Neural Networks) میریم.
تفاوت بینایی ماشین و بینایی کامپیوتری
این دوتا رشته های شبیه به هم هستند ولی دقیقا یکی نیستن. میشه گفت بینایی ماشین زیر مجموعه بینایی کامپیوتر هست.
بینایی ماشین با کمک دوربین، حسگر و بقیه چیزای سخت افزاری دنبال تجزیه و تحلیل اطلاعات بصری که دریافت کرده هست و معمولا توی صنعت و تولیدات برای کنترل مونتاژ و بازرسی کاربرد داره. سیستم بینایی ماشین بیشتر برای هدف های خاصی هستن.
بینایی کامپیوتر منتهی نه تنها از این سخت افزار ها برای گرفتن اطلاعات بصری استفاده میکنه، بلکه از الگوریتم های یادگیری ماشین هم استفاده میکنه تا این دیتا هارو تفسیر کنه. توی زمینه های رباتیک و وسایل نقلیه خودران و تصویر برداری های پزشکی کاربرد داره. بینایی کامپیوتر انعطاف پذیر تره.
کاربرد های بینایی کامپیوتری
سیستم بینایی کامپیوتری از دیتا های بیدرنگ (Real Time) استفاده میکنه برای همون کاربرد های زیادی داره:
سیستم های امنیتی (Security Systems): تشخیص دادن مجرمان و خشونت و شناسایی سلاح ها
وسایل نقلیهی خودران (Self-driving Vehicles): با کمک سنسور ها اتومبیل ها دارن یاد میگیرن که اشیا اطرافشون رو مثل درخت و انسان و چراغ راهنمایی رو تشخیص بدن.
خردهفروشی (Retail): توی سوپر مارکت ها میشه ازش استفاده کرد و احتمالا ویدیو آمازون رو دیدین که یه فروشگاهی زده به نام «Amazon Go» که صندوقداری وجود نداره و همه چیز با بینایی کامپیوتری انجام میشه و دیگه نیازی نیست توی صف های بلند فروشگاه های زنجیره ای عمرمون هدر بشه.
مدیریت شرکت (Factory Management): تشخیص اینکه توی کدوم خط تولید مشکلی پیش اومده یا کیفیت کالا ها کم شده یا نه سخته ولی با کمک بینایی کامپیوتری این کار ساده میشه.
توی حوزه های دیگه هم خیلی کاربرد داره که به طور خلاصه میتونیم بگیم:
حوزه سلامت و دارو: کشف و توسعه دارو، تجزیه و تحلیل رفتاری، تشخیص و غربالگری بیماری، راهنمای جراحی، تجزیه و تحلیل تصویربرداری پزشکی
حوزه راه و شهر سازی: تشخیص و مرتبسازی اشیا، درک صحنه، سرویسدهی بصری، ناوبری خودمختار
حوزه کشاورزی: رباتیک کشاورزی، نظارت بر دام، آبیاری و مدیریت آب، شناسایی و مدیریت علفهای هرز، نظارت بر محصول و تخمین عملکرد
حوزه ورزشی: تعامل با مخاطب و تجربه طرفداران، طراحی و آزمایش تجهیزات ورزشی، پخش و تفسیر ورزش
خب این مقاله هم تموم شد ممنونم که تا اینجا وقت گذاشتی و خوندی. امیدوارم به زبون ساده رشته بینایی کامپیوتر رو توضیح داده باشم.
در حین ویس گرفتن تازه میفهمم غلط املایی هامو :) احتمالا مقاله به مرور آپدیت بشه!