هماکنون که در سال 2023 به مسیر زندگی ادامه میدهیم، تکنولوژی همچون موشکی با سوختی پایانناپذیر در حال پرش در مداری بیانتهاست. جای تعجب ندارد اگر بگوییم تا به حال تمامی حواس پنجگانهی انسانی در ابعاد مختلف و البته با محدودیتهایی برای ماشینهای دیجیتال نیز ساخته و پرداخته شده است. ادراک ماشین (machine perception) قابلیتی است در سیستمهای کامپیوتری برای تفسیر دادههای درون محیط به صورتی که شبیه به حواس پنجگانه انسان پیادهسازی شده و عمل کند. بینایی ماشین نیز، جزئی از این مولفههای ادراکی ماشین است که صد البته بحث جدیدی نیست و بیش از 70 سال است که این تئوری پای در عرصهی عمل گذاشته و امروزه با گسترده شدن فناوری و دنیای دیجیتال، به جزئی جداییناپذیر از زندگی ما بدل گشته است.
حس بینایی چیست؟
حدود 70 درصد از کل گیرندههای حسی بدن شما، در چشمان شما قرار دارد!
سلولهای گیرندهی نوری چشمان شما، انرژی نور را به پالسهای عصبی که مغز شما آن را بفهمد تبدیل میکند. اما این فرآیند چگونه اتفاق میافتد؟ بیاید ابتدا ساختار چشم را بررسی کنیم.
- صلبیه چشم (Sclera): لایهی سفید رنگ چشم که بخش بزرگی از ناحیه بیرونی چشم را پوشش میدهد.
- قرنیه چشم (Cornea): بخش شفاف در جلوی چشم که به همراه صلبیه، کل پوشش بیرونی چشم را تشکیل میدهد و همچنین عنبیه و عدسی چشم را کاور میکند.
- عنبیه چشم (Iris): بخش رنگی و دایرهای شکلی که مردمک چشم را احاطه میکند. این ناحیه در واقع همان بخش رنگی و یکتای چشم اشخاص است. این عضو را میتوان مانند یک شیرینی دونات در نظر گرفت که سوراخ وسط آن، مردمک چشم است و توانایی باز و بسته کردن آن را دارد.
- مردمک چشم (Pupil): بخش کوچک، گِرد، و سیاه در مرکز چشم که ناحیهای برای ورود پرتوهای نور است. عنبیهی چشم با کنترل مردمک، میزان نور ورودی را کم یا زیاد میکند.
- عدسی چشم (Lens): بخشی شفاف و محدب که به همراه قرنیه، وظیفهی متمرکز کردن نور برای وضوح تصاویر در شبکیه را بر عهده دارد.
- شبکیه چشم (Retina): غشاء حساس به نور در پشت چشم که تصاویر در این محل تشکیل شده و پس از تبدیل نور به پالسهای الکتریکی، از طریق عصب بینایی به مغز منتقل میگردد.
- عصب باصره (Optic nerve): عصب باصره یا عصب بینایی، رشتههای عصبی چسبیده به شبکیه چشم هستند که وظیفه انتقال پالسهای عصبی به مغز را بر عهده دارند.
حال که با ساختار چشم آشنا شدید، بیایید در مورد نور بیشتر یاد بگیریم! همانطور که ممکن است بدانید، نور هم مانند صوت، نوعی سیگنال سینوسی است با این تفاوت که موج صوت، موجی مکانیکی و موج نور، موجی الکترومغناطیسی است بدان معنا که نور نیازی به حرکت مولکولها برای انتقال ندارد.
فرکانس در صوت، تعیین کنندهی زیر یا بمی صداست و دامنهی آن، تعیینکنندهی ضعیف یا قوی بودن بلندی صداست. اما فرکانس در نور، تعیینکنندهی رنگ یا چرده (hue) و دامنهی آن، تعیینکنندهی روشنایی آن است.
حال یک جسم مانند برگ درخت را در جلوی چشم خود تصور کنید. پرتوهای نوری که به این برگ برخورد کرده و به چشم شما بازتاب میشود ابتدا به قرنیهی چشمتان برخورد میکند؛ سپس از طریق مردمک چشم وارد لایهی میانی چشم شده و پس از عبور از عدسی، به شبکیهی چشم میرسد. حال به صورت خودآگاه یا ناخودآگاه برای دیدن بهتر تصویر از نظر روشنایی، عنبیهی چشمتان میزان نور ورودی را با باز و بسته کردن مردمک چشم تنظیم میکند و سپس برای شفاف شدن تصویر، محل تمرکز نور بر شبکیهی چشم توسط عدسی چشم تنظیم میشود.
توجه کنید که تصویر برگ بر روی شبکیهی چشم، به صورت کوچکتر و وارونه است که پس از یک پیشپردازش طبیعی، اطلاعات به صورت سیگنالهای عصبی به مغز منتقل میشود. اما این پردازش تصویر توسط چه سلولهایی و به چه شکلی صورت میگیرد؟
پیش از بررسی نحوهی پردازش پرتوهای نور در چشم انسان، در صورتی که با پردازش تصویر آشنایی ندارید، میتوانید به مقاله پردازش تصویرپردازش تصویر دیجیتال چیست؟ چه انواعی دارد؟ چه مراحلی را شامل میشود؟ پردازش تصویر یکی از فیلدهای پرطرفدار مرتبط با گرافیک کامپیوتر، بینایی کامپیوتر، هوش مصنوعی، یادگیری ماشین، و الگوریتمها و محاسبات است که ارتباط تنگاتنگی میان تمام آنهاست. در نتیجه در این صفحه علاوه بر معرفی این فیلد، نقشه راهی نیز برای علاقهمندان این حوزه ارائه کردهایم. مراجعه کنید.
شبکیه، پس از دریافت نور، آن را به انرژی شیمیایی تبدیل میکند که این انرژی شیمیایی، کار فعالسازی اعصاب بینایی را بر عهده دارد. شبکیه، خود، به چهار لایه تقسیمبندی میشود که از بیرونیترین به داخلیترین بخش به معرفی آنها میپردازیم:
- لایهی رنگدانهی چشم (Pigment Epithelium): که وظیفهی غذارسانی به سلولهای عصبی بینایی در لایههای داخلیتر را بر عهده دارد.
- لایهی ادراک نور که شامل سلولهای مخروطی (Cone) و سلولهای استوانهای (Rod) میشود.
- لایهی نورونهای دوقطبی (Bipolar Neurons)
- لایهی یاختههای گانگلیون (Ganglion Cells)
پردازش نور وارد شده به شبکیه، از لایهی یاختههای مخروطی و استوانهای شکل شروع شده و با سلولهای گانگلیون خاتمه مییابد و سپس سیگنالهای الکتریکی تولید شده، از طریق عصب باصره که به سلولهای گانگلیون چسبیده است به سمت هیپوتالاموس مغز فرستاده میشود.
بخش مهمی که میخواهیم بیشتر به آن بپردازیم، همین سلولهای مخروطی و استوانهای شکل است که شناخت آنها درک بسیار زیادی را نسبت به بینایی، چه بینایی انسان و چه بینایی ماشین به ما میدهد.
یاختههای مخروطی (Cone Cells)
این سلولها در مرکز شبکیه قرار دارند و وظیفهی شناسایی جزئیات و رنگ را بر عهده دارند که خود به سه دستهی سلولهای مخروطی حساس به قرمز، حساس به سبز، و حساس به آبی تقسیم میشوند. این سلولهای مخروطی تنها در شرایطی که آستانهی روشنایی نور از یک حدی بیشتر باشد حساسیت نشان میدهند و فعال میشوند.
یاختههای استوانهای (Rod Cells)
در مقابل سلولهای مخروطی، سلولهای استوانهای قرار دارد که هم از نظر تعداد بسیار زیاد هستند و حساسیت بالاتری نسبت به نور دارند و در روشنایی کمتر نیز فعال هستند. این سلولها تنها در مقیاس خاکستری (سیاه و سفید) میتوانند اطلاعات کلیتر از محیط را پردازش کنند.
شبکیهی چشم حدود 7 میلیون سلول مخروطی و بیش از 100 میلیون سلول استوانهای دارد. از آنجایی که سلول مخروطی وظایف خطیرتری بر عهده دارند و جزئیات رنگی را برای مغز فراهم میکنند، هر کدام به صورت مجزا به یک عصب دوقطبی و سلول گانگلیون وصل هستند چرا که مغز بتواند تشخیص دهد کدام یک از این سلولها کدام اطلاعات را فراهم کرده است. در مقابل آن، ممکن است صدها سلول استوانهای به یک عصب دوقطبی متصل باشد. دلیل این که تعداد استوانهایها بسیار بیشتر از مخروطیهاست شاید همین باشد!
مباحثی که تا به اینجا بررسی شد تماما مقدمهای بود بر بینایی کامپیوتر؛ این حقیقت که میتوان با یادگیری از ساختارهای طبیعت، ساختارهای پیچیدهی مصنوعی خلق کرد.
بینایی کامپیوتر چیست؟
دهها سال است که ما انسانها در رویای ساخت ماشینها با ویژگیهای هوشمندانهی انسانی بودهایم. ماشینهایی که مانند انسان بتواند فکر کند یا عمل کند. بحثی که در سیطرهی مسائل هوش مصنوعیهوش مصنوعی (AI) چیست؟ انواع، کاربردها، مزایا و معایبهوش مصنوعی یا Artificial Intelligence یا به اختصار AI، امروزه کاربردهای بسیاری پیدا کرده و به یکی از داغترین حوزههای بشر تبدیل شده است، اما با این وجود بسیاری از افراد با کاربردهای آن آشنایی کامل ندارند، به همین علت در این صفحه کاربردها، مزایا و معایب AI بطور کامل بررسی شده است قرار میگیرد. مسائلی که شاید با تلاشهای آلن تورینگ، پدر علم کامپیوتر، شروع شد و اکنون بخش عظیمی از زندگی روزمره ما را در نوردیده است. یکی از جذابترینِ این ایدهها، ایجاد توانایی «دیدن» برای ماشینهاست.
بینایی کامپیوتر (Computer Vision) عبارت است «مجموعه فرآیندی که بر روی یک کامپیوتر پیاده میشود تا بتواند مانند حس بینایی انسان، درک بصری از اطراف خود داشته باشد». حال این فرآیند میخواهد شامل سیستم سختافزاری مانند چشم دیجیتال یا خواه الگوریتمهای نرمافزاری باشد. به تمام این مجموعه فرآیند میتوان بینائی کامپیوتر گفت.
تفاوت بینایی کامپیوتر با بینایی ماشین
با اینکه شاید تعاریف مختلفی از این دو مفهوم وجود دارد اما میتوان اظهار داشت که «بینایی کامپیوتر» و «بینایی ماشین»، مفاهیمی هستند که هر دو برای امور پردازش تصویر مورد استفاده قرار میگیرند.
بینایی ماشین، لفظی است که بیشتر به بینایی رباتها در صنعت منتسب میشود. شاخهای از تکنولوژی که برای حل مسائل صنعتی مرتبط با پردازش تصویر ایجاد شده است. از طرفی میتوان بینایی ماشین را مجموعهای از ابزارهای سختافزاری و نرمافزاری در نظر گرفت که در مرکز آن، الگوریتمهای بینایی کامپیوتر در جریان است.
این در حالی است که بینایی کامپیوتر به تنهایی، بیشتر متمرکز بر روی درک معنای تصاویر هست. چه بخواهد این تصویر دو بعدی باشد یا سه بعدی، چه بخواهد تصاویر با سنسور ویژن دریافت شود یا با سنسورهای مختلفی مانند حسگر حرارتی. مهم، استخراج اطلاعات مفید و ارزشمند از دل اطلاعات بصری است.
تفاوت بینایی کامپیوتر با پردازش تصویر
همانطور که در مقالهی پردازش تصویر به این موضوع اشاره شد، این دو مفهوم از نظر اهدافی که در مسائل تعریف میکنیم با هم متفاوت هستند. پردازش تصویر به عملیات تبدیل عکس به عکسی دیگر برای هدفی همچون بهبود کیفیت تصویر است؛ درحالی که در بینایی ماشین، ما به دنبال استخراج اطلاعاتی خاص از طریق درک تصاویر هستیم، دقیقا کاری مانند پردازش مغز انسان پس از دیدن. بینایی کامپیوتر به مراتب عملیاتی پیچیدهتر، دشوارتر، و طولانیتر را نسبت به پردازش تصویر به دنبال دارد.
بینایی کامپیوتر به عنوان شاخهای از علم کامپیوتر
در بینایی کامپیوتر به عنوان شاخهای از علوم کامپیوتر، تمرکز بر روی ساخت سیستمهای دیجیتالی است که بتواند از طریق حسگرهای بینایی، دادههای دریافتی را به وسیله الگوریتمهای مخصوص به خود پردازش، تحلیل، و تفسیر کرده و سپس نتایج ارزشمندی را در اختیار قرار دهد.
چند مساله بسیار رایج در بینایی کامپیوتر چنین است:
1- مساله دسته بندی اشیا
کلاسبندی اشیاء (object classification)، امری است که الگوریتم ما بتواند به اشیاء داخل تصویر ورودی تا حدی که به آن آموزش دادهایم، برچسب درستی منتسب کند. مانند تصویر زیر که در آن سگها و گربهها دستهبندی شدهاند.
2- مساله شناسایی اشیا
در این مساله بر خلاف مسالهی قبل، هدف ما پیدا کردن یک شیء خاص از میان تمام اشیاء داخل تصویر است. مثلا یافتن سگی خاص از میان تمام سگها یا گربههای عکس بالا.
3- ردیابی اشیا
در این نوع مساله، شیء یا اشیاء مد نظر در ویدیوی ورودی پیدا شده و حرکت آنها ردیابی (tracking) میشود.
4- قطعهبندی معنایی
در مسالهی قطعهبندی معنایی (semantic segmentation)، کل تصویر در دستههای پیکسلی مختلفی قرار میگیرد که هر گروه از این پیکسلها، نمایانگر قطعهها یا اشیاء متفاوتی هستند.
5- قطعهبندی نمونهای
این مساله (instance segmentation) شباهت بسیاری به قطعهبندی معنایی دارد با این تفاوت که در قطعهبندی معنایی، تمام نمونهها از یک کلاس، با هم در یک گروه قرار میگیرند اما در دیگری، تمام نمونهها به صورت مجزا دستهبندی میشوند.
تفاوت قطعهبندی معنایی و قطعهبندی نمونهای را در عکس زیر مشاهده کنید:
چالش های بینایی کامپیوتر
اکنون که در سال 2023 به سر میبریم، با وجود پیشرفتهای چشمگیری در حوزهی هوش مصنوعی (به عنوان مثال ChatGPT که با مدلهای پردازش زبانهای طبیعی آموزش داده شده است)، هنوز هم چالشهایی وجود دارد که میتواند سد این توسعهی سریع باشد!
در این بخش به 4 چالش مهمتر میپردازیم:
1- ناکافی بودن سخت افزار
تکنولوژی بینایی ماشین، با ترکیبی از سختافزار و نرمافزار پیادهسازی میگردد. برخی از تسکهای پردازش تصویر یا بینایی کامپیوتر، نیاز به محاسبات سنگین دیجیتالی دارند و همین مورد، وابستگی به سختافزار قدرتمند را به میان میکشد. یک کسبوکار برای اطمینان از کارا بودن سیستم به دوربینهای دیجیتال، سنسورها و رباتهای با کیفیت نیاز دارد. این سختافزار میتوان خیلی گران باشد و یا در صورت نصب غیربهینه، ناکارا باشد یا در نقاط کور قرار گیرد.
توصیهها:
- تهیه دوربینهای با کیفیت و دارای قابلیت تشخیص عمق
- تنظیم درست پارامترهای سنسورها مانند نرخ فریم بر ثانیه (fps)
- نصب سنسورها و دوربینها در موقعیتی که تمام فضا و اشیای مشخص شده را پوشش دهد.
- استفاده از سختافزارهای FPGA با تکنولوژی جدید که در حوزه IoT قرار میگیرند.
یکی از مثالهای استفادهی غیربهینه از سختافزار در حوزهی بینایی ماشین، استفادهی نامناسب از سخت افزار در مراکز خرید Walmart برای اسکن کردن قفسهها بوده است. بعد از بازرسی این مشکل، این شرکت بازرگانی، رباتهای اسکن قفسه را پس فرستاد و به قرارداد خود با شرکت ساخت این ربات خاتمه داد. اگرچه این رباتها، وظایف مربوط به بینایی کامپیوتر را به درستی انجام میدادند اما به دلیل بزرگ بودن در سایز، باعث عدم رضایت مشتریها بوده است.
از طرفی دیگر، یکی از برندهای خردهفروش که متعلق به Walmart است، چنین رباتهای ساخته شده توسط کمپانی Brain Corp را برای اسکن کردن موجودی انبار استفاده میکند. این رباتها بر روی رباتهای خودمختار از همان کمپانی که زمین را تمیز میکنند نصب شده است. این خردهفروشی، چنین سیستمی را موثر میداند و قصد دارد سرمایهگذاری بر روی آن را افزایش دهد.
یک مثال دیگر از چالشهای سختافزاری، پروژهی Noisy Student است که یک رویکرد آموزش شبهنظارتی میباشد و توسط گوگل توسعه یافته است. این مدل محاسباتی که بر پایهی شبکههای عصبی کانولوشِنال است، دارای 480 میلیون پارامتر میباشد. چنین مدلی با این تعداد پارامتر عظیم، نیازمند سخت افزاری بسیار قدرتمند است!
2- کیفیت پایین دادهها یا کمبود دادهها
در گسترهی پروژههای مرتبط با یادگیری ماشینیادگیری ماشین چیست و چرا مهم است؟ - Machine learning (ML)تعریف یادگیری ماشین : ماشین لرنینگ (Machine Learning یا به اختصار ML) باعث میشود که خود ماشینها با آنالیز داده ها امکان یادگیری و پیشرفت داشته باشند به صورت نظارتی یا شبهنظارتی، نیازمند مجموعهدادههایی هستیم که به خوبی نشانه گذاری شده و برچسب خورده باشند؛ در غیر این صورت، خروجی مورد نظر حاصل نخواهد شد و یا دقت و صحت مناسبی نخواهد داشت. در صنایعی مانند صنعت مراقبت از سلامت که بینایی ماشین به وفور استفاده میشود، اگر دیتا به درستی برچسبگذاری نشود، میتواند به شدت خطرناک باشد. به عنوان مثال، خیلی از برنامهها و ابزار ساخته شده برای تشخیص بیماری کویید-19 به علت عدم وجود دادههای مناسب و ناکافی، منجر به شکست شدند!
توصیهها:
- حتما با یک متخصص نشانهگذاری دادههای پزشکی مشورت کنید.
میتوانید برخی از ابزارهای مناسب برای نشانهگذاری دادههای پزشکی را در سایت AIMultiple بیابید.
3- برنامهریزی ضعیف برای توسعهی مدل
اجرا کنندگان عملیات مرتبط با بینایی ماشین تمایل دارند تا در مرحلهی برنامهریزی بسیار بلند پروازی کرده و از واقعیت ممکن دور شوند که در این صورت، به اهداف تعریف شده دسترسی پیدا نمیکنند؛ درخواست سیستم سختافزاری را خواهند داشت که وجود خارجی ندارد؛ بسیار پر خرج خواهد شد؛ و باعث تولید خروجی نامطلوب با دقت یا صحت پایین خواهد شد.
توصیهها:
- ساخت برنامهای مدون با آنالیز نیازمندیهای دسترسیپذیر
- توانایی جمعآوری دادههای مرتبط و خرید دیتاست برچسبگذاری شده موثق
- در نظر داشتن هزینههای مورد نیاز
- بررسی داستان دیگر کسبوکارها در فیلد مشابه
4- کمبود زمان
مدیران کسبوکار، تمایل دارند تا در حین فاز برنامهریزی، بیشتر به مرحلهی توسعه توجه کنند و در نتیجه به زمان اضافی مورد نیاز در موارد زیر، کمتوجهی میکنند:
- نصب اولیه، تنظیم پارامترها و کالیبره کردن سختافزار مورد نیاز شامل دوربینها و سنسورها
- جمعآوری، تمیز کردن، و برچسبگذاری دادهها
- آموزش و تست مدل مورد نظر
طبق یک بررسی بر روی شرکتهایی که در زمینه هوش مصنوعی فعالیت دارند، یافت شده است که بسیاری از شرکتها مقدار زمان بسیار زیادی را از زمان مورد انتظار عقب میافتند و به ددلاین نمیرسند.
یک مطالعهی دیگر بر روی شرکتها نشان میدهد که 99% تیمهایی که در پروژههای بینایی کامپیوتر کار میکنند، با یک تاخیر قابل توجهی رو به رو میشوند که دلایل متعددی دارد:
توصیهها:
- شکستن مراحل توسعه به زیر مراحل متعدد و بررسی زمان مورد نیاز برای آنها به صورت مجزا
- دریافت و خرید الگوریتمهای توسعه و یا دیتاست مورد نیاز از یک منبع خارجی معتبر
یادگیری بینایی کامپیوتر
برای شروع یادگیری الگوریتمهای کامپیوتر ویژن، قاعدتا بایستی پیشزمینهی ریاضی خوبی داشته باشید و بعد از آن هم در مورد پردازش تصویرپردازش تصویر دیجیتال چیست؟ چه انواعی دارد؟ چه مراحلی را شامل میشود؟ پردازش تصویر یکی از فیلدهای پرطرفدار مرتبط با گرافیک کامپیوتر، بینایی کامپیوتر، هوش مصنوعی، یادگیری ماشین، و الگوریتمها و محاسبات است که ارتباط تنگاتنگی میان تمام آنهاست. در نتیجه در این صفحه علاوه بر معرفی این فیلد، نقشه راهی نیز برای علاقهمندان این حوزه ارائه کردهایم. اطلاعات کافی داشته باشید. مسائل رایجی که تا اینجا با هم دیدیم، تنها بخشی از مسائل مرتبط با بینایی کامپیوتر هست و تکنیکها، الگوریتمها، و رویههای بسیار زیاد و متنوعی در آن وجود دارد که از حوصلهی بحث ما خارج هست.
به صورت تیتروار برخی از مفاهیم مورد نیاز برای شروع یادگیری این گرایش از علم را که از صفحهی درس دکتر بهروز نصیحتکن (استادیار دانشگاه صنعتی خواجه نصیرالدین طوسی) اقتباس شده است، اشاره میکنیم. پیشنیازهای مبانی بینایی کامیپوتر عبارتند از:
پیش نیاز های ریاضیاتی
ریاضیات بخشی جداناپذیر از رشته کامپیوتر است. چند درس مرتبط با کامپیوتر ویژن که در دانشگاهها نیز تدریس میشود، در ادامه آماده است:
- ریاضیات گسسته: درسی بسیار پایهای که در ترمهای اول لیسانس تدریس میشود؛ شامل مباحثی نظیر شمارش و احتمال، استدلال و برهان خلف، نظریه اعداد، منطق ریاضی، روابط بازگشتی، روابط و نظریه گراف.
- جبر خطی و ماتریسها
- سیگنالها و سیستمها
- آمار و احتمال مهندسی
پیش نیاز های برنامه نویسی
قاعدتا برای پیادهسازی عملی هر مسالهی مرتبط با علوم و مهندسی کامپیوتر، نیازمند آن هستید که برنامهنویسی کنید؛ کدنویسی و ساخت برنامههایی کارآمد. اما برای شروع برنامهنویسی بسیار توصیه میگردد که مفاهیم و مباحثی پایهای که در دانشگاه نیز تدریس میشود را فرا بگیرید:
- ساختمان دادهها: هر ساختمان داده یک نوع فرمت ذخیرهسازی و مدیریت دادهها در کامپیوتر است که در آن مبانی نظری مورد نیاز برای کسب مهارت لازم در حل مسئله به کمک کامپیوتر آموزش داده میشود.
- طراحی الگوریتمها: درس طراحی الگوریتم یکی از مهمترین و بنیادیترین دروس رشته کامپیوتر است. هدف از این درس، معرفی روشهای مختلف طراحی الگوریتمها برای حل مسائل گوناگون است.
- مبانی هوش مصنوعی: امروزه هوش مصنوعی کاربردهای بسیار زیادی دارد، شاید بتوان بیش از 50 کاربرد اصلی برای هوش مصنوعی بیان کرد. این شاخه از علوم کامپیوتر، پایهی بسیاری از مفاهیم بینایی کامپیوتر است.
- الگوریتمهای یادگیری ماشین
- الگوریتمهای تقریبی (اختیاری)
- الگوریتمهای تصادفی (اختیاری)
برای شروع برنامهنویسی قاعدتا بایستی حداقل یک زبان برنامه نویسی بلد باشید. برای شروع میتوانید زبان آسان و غنی «پایتون» را آموزش ببینید. چرا که برای مسائل بینایی کامپیوتر، کتابخانههای متعدد زیادی در این زبان وجود دارد که یکی از آنها، کتابخانهی Opencv است. کتابخانهای که متنباز بوده و میتوانید به راحتی از آن استفاده کنید.
لیست مفاهیم مورد نیاز در مبانی بینایی کامپیوتر
- نحوه نمایش تصاویر، نمونه برداری، طیف نوری، رنگ
- عملیات پیکسلی، روشنایی، کانتراست و وضوح عکس، هیستوگرام
- نویز، نویز گاوسی، انواع نویزها
- فیلتر خطی، کانولوشن، بلور
- تبدیل فوریه دو بعدی، تبدیل فوریه دیجیتال
- همبستگی نرمال شده، فیلتر میانهای، فیلتر دوطرفه
- گرادیان تصویر، آشکارسازی لبه، عملگرهای لبهای دو بعدی
- لاپلاسیَن گُوسی، لبهیاب Canny
- تصاویر باینری، مولفههای متصل
- مورفولوژی یا ریختشناسی
- تبدیلات Hough
- یافتن خصیصهها، تطبیق خصیصهها
- یافتن گوشهها، گوشهیاب Harris
- الگوریتمهای Image Pyramid
- الگوریتم SIFT
- تبدیلات هندسی و پروجکشن
- الگوریتم RANSAC
- الگوریتمهای تشخیص تصویر، دستهبندی بیزین
- الگوریتم نزدیکترین همسایه
- الگوریتمهای support vector machine
- خصیصههای Haar، خصیصههای HoG
- الگوهای باینری محلی
- شبکههای عصبی، شبکههای عصبی پیچشی دو بعدی
مفاهیمی که امروزه در بینایی کامپیوتر بسیار پرکاربرد است، یکی مفهوم «یادگیری عمیق» و دیگری «شبکههای عصبی پیچشی یا کانولوشِنال» است که هر دو زیرمجموعهای از شاخهی هوش مصنوعی و یادگیری ماشین هستند.
منابع و کتابهای زیادی در این عرصه وجود دارند که یکی از بهترین آنها کتاب زیر است که نسخه الکترونیک آن را نیز میتوانید از سایت نویسنده دانلود کنید:
ایدهی مباحث کامپیوتر ویژن ابتدا در دههی 1950 میلادی مطرح شده است و در آن زمان، هدف، تشخیص نوشتههای دستنویس بوده است. خب طبیعتا با کمبود منابع سیستمی در آن زمان و پایین بودن سطح قدرت سیستمهای کامپیوتری، به سر انجام رساندن چنین ایدهای کار آسانی نبوده و نیازمند وجود تعداد بسیار زیادی از اپراتورهای انسانی بوده است. اما امروزه مشکل چندانی از بابت سطح قدرت کامپیوتری نداریم و علاوه بر آن، ساخت بسیاری از الگوریتمهای مطمئن و سریع، راه را برای پیشرفت تکنولوژی در این شاخه باز کرده است.
پیشرفت سریع تکنولوژی و فراهم آمدن منابع سیستمی فراوان، شاخهی جدیدی از هوش مصنوعی را برای ما ایجاد کرده است که «یادگیری عمیق» (deep learning) نام دارد. این مفهوم، بر پایهی مفاهیم یادگیری ماشین و شبکههای عصبی است. شبکهی عصبی مصنوعی (artificial neural network) رویه یا الگوریتمی است که از شبکهی عصبی مغز انسان الهام گرفته شده است به طوری که در آن، مفاهیم «نورون»، «شاخه عصبی»، «سیناپس» و ... تعریف میشود.
هر شبکه عصبی دارای یکسری گره (نورون) در لایههای مختلف هست که با یالهایی به هم متصل شدهاند. هر گره و یال مقدار خاصی دارد. به مقادیر روی یالها، وزن میگوییم. در بینایی کامپیوتر، به طور مثال اگر ورودی این شبکه، مقادیر پیکسلهای تصویر باشد، این ورودی پس از ورود به نورونها و اِعمال توابع فعالسازی بر روی تک تک آنها در لایههای مختلف، یک دسته خروجی از جنس عدد برای ما تولید میگردد که میتواند اطلاعات ارزشمندی را به دست دهد.
در یادگیری عمیق، تعداد لایههای شبکه عصبی بیشتر و بیشتر شده و عمق آن زیاد میشود. در این صورت میتوانیم مسائل پیچیدهتر را به این روش حل کنیم.
کاربردهای بینایی کامپیوتر
- سیستمهای نظارتی مانند کنترل ترافیک
- تحلیل تصاویر پزشکی
- ماشینهای خودران
- سیستمهای امنیتی
- رباتهای صنعتی
- فروش خودکار محصولات در فروشگاههای بزرگ
- کاربرد بیومتریک مانند شناسایی اثر انگشت یا تشخیص چهره
- ساخت مدلهای سه بعدی
- واقعیت مجازی و واقعیت افزوده
کاربردهای ذکر شده به همینجا ختم نمیشوند و عملا خیلی از مسائلی که در روزمره با آن سر و کار داریم، به طور مستقیم یا غیر مستقیم امکان ارتباط با بینایی کامپیوتر را دارا هستند!
مقدمهای بر برنامه نویسی در حوزهی بینایی کامپیوتر
در این بخش، به مقدمه ای بر بینایی کامیپوتر برای آشنایی اولیه با نحوه برنامه سازی در حوزهی کامپیوتر ویژن میپردازیم.
- در صورتی که پایتون را بر روی سیستم خود ندارید، آنرا نصب کنید؛
- سپس پکیجمنجر pip را نصب کنید. با آن قادر خواهید بود تا کتابخانههای مورد نیاز را به راحتی نصب کنید.
- برای کار با تصویر و انجام عملیات بینایی کامپیوتر، نیازمند کتابخانهی open-cv خواهیم بود پس آن را با استفاده از pip نصب میکنیم؛
- یک پنجرهی جدید از ترمینال، کامندلاین یا cmd یا powershell را باز کنید.
- دستور زیر را وارد کنید (pip باید نصب باشد):
pip install opencv-python
- پس از اتمام نصب، حال برنامهی پایتون را با دستور زیر اجرا کنید:
python
یا
python3
- داخل همین ترمینال، دستورات پایتون را وارد خواهیم کرد. حال، برای شروع، یک عکس رنگی را با استفاده از این کتابخانه از ورودی خوانده، نمایش داده و تغییر ابعاد میدهیم. نام فایلِ این عکس را image.png در نظر بگیرید:
import cv2 image = cv2.imread(‘image.png’) new_image = cv2.resize(image, (200, 200))
خط اول، کتابخانهی opencv را فراخوانی میکند. خط دوم، عکس مد نظر را به صورت رنگی و RGB از فایل میخواند. خط سوم نیز، سایز عکس را به 200 در 200 تغییر میدهد و در متغیر جدیدی میریزد.
نکته: کتابخانهی opencv، کانالهای رنگیِ RGB را به صورت BGR در متغیرها استفاده میکند بدین معنا که کانال اول، بُعدِ آبی، کانال دوم، بُعدِ سبز و کانال آخر، بُعدِ قرمز رنگ عکس است.
در خط زیر، کانالِ اول (در واقع اندیس صفر) از عکس را خوانده و در متغیر جدیدی میریزیم و نمایش میدهیم. در براکت، پارامتر اول، بُعدِ x، پارامتر دوم، بُعدِ y از عکس و پارامتر آخر، بُعد کانالها را مشخص میکند. کانالِ صفر به معنای کانال آبی رنگ است.
blue_image = image[:, :, 0]
cv2.imshow(blue_image)
عکس سمت راست، عکس اصلی و عکس سمت راست، عکسی است که فقط کانال آبی رنگِ عکس اصلی را به نمایش میگذارد:
به همین ترتیب برای کانال سبز:
green_image = image[:, :, 1]
cv2.imshow(green_image)
و البته به همین ترتیب برای کانال قرمز:
red_image = image[:, :, 2]
cv2.imshow(red_image)
عکس سمت راست، عکس با کانال سبز و عکس چپ، عکس با کانال قرمز را نشان میدهد.
دانلود کتاب های مرجع درس بینایی کامیپوتر
شباهت و تفاوت بینایی کامپیوتر و بینایی ماشین در چیست؟
«بینایی کامپیوتر» و «بینایی ماشین»، مفاهیمی هستند که هر دو برای امور پردازش تصویر مورد استفاده قرار میگیرند. بینایی ماشین، لفظی است که بیشتر به بینایی رباتها در صنعت منتسب میشود اما بینایی کامپیوتر به تنهایی، بیشتر متمرکز بر روی درک معنای تصاویر هست.
تفاوت بینایی کامپیوتر و پردازش تصویر در چیست؟
این دو شاخه، از نظر اهدافی که در مسائل تعریف میشوند با هم متفاوت هستند. پردازش تصویر به عملیات تبدیل تصویری به تصویری دیگر با هدفی همچون بهبود کیفیت تصویر است درحالی که در بینایی ماشین، ما به دنبال استخراج اطلاعاتی خاص از طریق درک تصاویر هستیم دقیقا کاری مانند کاری که مغز انسان پس از دیدن میکند.