زمان تخمینی مطالعه: 10 دقیقه
OpenCV که در ابتدا توسط اینتل توسعه یافت، یک کتابخانه بینایی کامپیوتری بین پلتفرمی رایگان برای پردازش تصویر در زمان واقعی است. نرم افزار OpenCV که مخفف Open Source Computer Vision است تبدیل به یک ابزار استاندارد واقعی برای همه موارد مربوط به بینایی ماشین شده است. امروزه این نرم افزار همچنان محبوبیت بالایی دارد و هر هفته بیش از 29000 بار دانلود میشود. کتابخانه اوپن سی وی به زبان C و ++C نوشته شده است. این نرم افزار قابلیت اجرا در محبوبترین سیستم عاملها مانند گنو/لینوکس، OS X، ویندوز، اندروید، iOS و غیره را دارد. این نرم افزار تحت مجوز Apache 2 به صورت رایگان در دسترس است. همچنین دارای توسعه فعال در اینترفیسهای پایتون، روبی، متلب و سایر زبانها دارا است که به راحتی از طریق دستوراتی مانند «pip install opencv» برای کاربران پایتون و «git opencv» برای کنترل نسخه قابل دسترسی است. کتابخانه OpenCV شامل بیش از 2500 الگوریتم، مستندات گسترده، کد منبع و کد نمونه برای بینایی کامپیوتری در زمان واقعی(Real-time) است. توسعه دهندگانی که از پکیج پایتون استفاده میکنند، همراه با سایر کتابخانههای پایتون، میتوانند با استفاده از دستوراتی مانند “python opencv” به طور یکپارچه OpenCV را با پروژههای خود ادغام کنند.
از زمان انتشار اولیه در سال 2000 تحت مجوز BSD و بعداً تحت مجوز Apache 2، این کتابخانه منبع باز در برنامههای کاربردی، محصولات و پروژههای تحقیقاتی متعددی مورد استفاده قرار گرفته است. این برنامهها شامل اتصال(stitching) تصاویر دوربین در نقشههای ماهوارهای یا وب، تراز اسکن تصویر، کاهش نویز تصاویر پزشکی، تجزیه و تحلیل اشیا، سیستمهای امنیتی، نظارت و تشخیص نفوذ، نظارت خودکار و سیستمهای ایمنی، ساخت بازرسی هوش مصنوعی، کالیبراسیون دوربین، صنایع دفاعی و نظامی، برنامههای کاربردی و وسایل نقلیه هوایی بدون سرنشین است.
این کتابخانه دارای مجور اوپن سورس(منبع باز) است تا توسعه دهندگان بتوانند محصولات تجاری را با استفاده از تمام یا بخشی از OpenCV بسازند. بنابراین، شرکتها هیچ تعهدی به منبع باز کردن محصول خود یا بازگرداندن پیشرفتها به حوزه عمومی (کپیلفت) ندارند، اگرچه بسیاری از آنها این کار را میکنند و به جامعه توسعهدهندگان کمک بزرگی میکنند.
کاربرد OpenCV
OpenCV برای به حداکثر رساندن کارایی و عملکرد وظایف بینایی ساخته شده است. بنابراین، تمرکز زیادی بر کاربردهای بلادرنگ بینایی هوش مصنوعی دارد. هدف OpenCV ارائه یک زیرساخت بینایی کامپیوتری با استفاده آسان است که به افراد کمک میکند تا با ارائه بیش از 500 عملکرد به سرعت برنامههای پیچیده بینایی بسازند. کتابخانه اوپن سی وی اغلب در بازرسی محصولات کارخانه، تصویربرداری پزشکی، تجزیه و تحلیل امنیتی، رابط انسان و ماشین، کالیبراسیون دوربین، دید استریو (دید سه بعدی) و دید رباتیک استفاده میشود. مجهز بودن به قابلیتهای جامع پردازش تصویراین کتابخانه را قادر میکند تا بتواند پردازش جریان ویدئو، دوخت تصویر (ترکیب چندین دوربین)، کالیبراسیون دوربین و کارهای مختلف پیشپردازش تصویر را انجام دهند. از آنجایی که یادگیری ماشین در بینایی کامپیوتر ضروری است، OpenCV شامل یک کتابخانه ML کامل و همه منظوره است که بر تشخیص الگوی آماری و خوشهبندی متمرکز است. برای افزایش کارایی، OpenCV از NVIDIA CUDA و شتاب GPU از سال 2011 پشتیبانی کرده است و عملکردی را برای مدیریت بستههای نصب شده، بستههای سایت و باینریهای OpenCV، همراه با کنترل صریح بر حرکت دادهها بین حافظه CPU و GPU از طریق ماژول OpenCV GPU ارائه میدهد.
چه کسانی از OpenCV استفاده میکنند؟
OpenCV توسط شرکتهای بزرگ و موسسات دولتی، به عنوان مثال، گوگل، تویوتا، آی بی ام، مایکروسافت، SONY، زیمنس و فیس بوک استفاده میشود. همچنین، استارتآپهای معروف بینایی کامپیوتر از OpenCV برای ساخت محصولات قدرتمند بینایی کامپیوتری و راهحلهای هوش مصنوعی از استفاده میکنند. کتابخانه OpenCV توسط بسیاری از مراکز تحقیقاتی مانند Stanford، MIT، INRIA، Cambridge و CMU استفاده میشود. موارد استفاده از بینایی کامپیوتر بسیار زیاد است. در حالی که بیشتر افراد از موارد استفاده نسبتاً محبوب در امنیت و نظارت تصویری یا اتومبیلهای خودران آگاه هستند، افراد محدودی میتوانند موارد استفاده را در صنایع خاصی مانند تولید صنعتی، رستورانها یا تجزیه و تحلیل خرده فروشی ببینند. پیشرفتهای سریع در بینایی کامپیوتر در سالهای گذشته این امکان را برای شرکتها در سراسر صنایع ایجاد کرده است تا برنامههای کاربردی بینایی رایانهای را توسعه دهند که مشکلات بسیار خاص را حل میکند (مانند:تشخیص مشکلات محصول، شمارش اشیا، تجزیه و تحلیل رفتار و غیره).
قابلیتهای بینایی در OpenCV
OpenCV را احتمالاً میتوان همه کارهترین ابزار بینایی رایانهای دانست که در زمینه وسیعی از وظایف بینایی رایانهای از تشخیص تصویر و تجزیه و تحلیل دو بعدی یا سه بعدی گرفته تا ردیابی حرکت، تشخیص چهره و موارد دیگر استفاده میشود. در ادامه، برجستهترین قابلیتهای این کتابخانه را بررسی خواهیم کرد:
- تشخیص اشیاء در زمان واقعی: فناوری تشخیص اشیا برای اعمال تشخیص تصویر و مکانیابی اشیاء خاص در دادهها یا تصاویر ویدئویی مانند اتومبیل، انسان، حیوانات، قطعات خاص یا تجهیزات در تولید صنعتی استفاده میشود.
- تقسیمبندی تصویر Image Segmentation: تقسیمبندی تصویر از الگوریتمهای پردازش تصویر برای تقسیم یک تصویر به بخشهای مختلف استفاده میکند. تقسیمبندی معمولاً برای ساده کردن، تغییر یا بهبود تصویر اعمال میشود که اغلب با کارهای بعدی بینایی رایانه ترکیب میشود. یک مثال از این کاربرد رانندگی خودکاراست که در آن از تقسیمبندی تصویر برای تعیین جاده استفاده میشود.
- تشخیص حرکت و ژست: حالات فیزیکی انسان و تشخیص ژست برای تفسیر و درک ژستهای انسان از طریق تجزیه و تحلیل ویدئویی استفاده میشود. حرکات بدن، دست یا صورت را میتوان تشخیص داد و دستهبندی کرد. تجزیه و تحلیل حرکت اغلب بخشی از تخمین وضعیت برای تجزیه و تحلیل حرکات بدن با نقاط کلیدی مرجع (مفاصل، اندامها) است. محاسبه ژست شی، روشی را برای درک نحوه قرارگیری شی در یک فضای سه بعدی فراهم میکند، به عنوان مثال، نحوه چرخش اشیاء.
- تشخیص چهره: تشخیص خودکار چهره برای شناسایی انسان از طریق تشخیص چهره انسان و تطبیق آن با پایگاه داده بر اساس ویژگیهای چهره شناسایی شده استفاده میشود. تشخیص صورت OpenCV مجموعهای از الگوریتمهای تشخیص چهره محبوب را برای استفاده در برنامههای واقعی ارائه میدهد.
- واقعیت افزوده: واقعیت افزوده (AR) امکان تعامل در زمان واقعی بین دنیای واقعی و دنیای مجازی را فراهم میکند. بنابراین، واقعیت افزوده قصد دارد دنیای فیزیکی اطراف ما را با اطلاعات ادراکی تولید شده توسط رایانه تقویت کند.
تکنیکهای پیشرفته بینایی کامپیوتری OpenCV
OpenCV همچنین تکنیکهای پیچیدهتری را ارائه میدهد که فراتر از قابلیتهای اساسی است.
– تشخیص و توصیف ویژگیهای کلیدی
- SIFT: تبدیلSIFT (Scale-Invariant Feature Transform) یک الگوریتم OpenCV برای تشخیص و توصیف ویژگیهای کلیدی در تصاویر است. ماهیت تغییرناپذیر مقیاس SIFT که به دلیل موثر بودن در تشخیص اشیا و دوخت تصویر شناخته شده است، آن را در برابر تغییرات اندازه و جهت شی انعطافپذیر میکند.
- SURF (ویژگیهای قوی با سرعت بالا): SURF الگوریتم دیگری برای تشخیص نقاط کلیدی و توصیف ویژگیهای تصویر است. SURF با تکیه بر SIFT سرعت محاسباتی را افزایش میدهد که برای برنامههای بلادرنگ مفید است.
– تکنیکهای تشخیص اشیا
OpenCV مدلهای از پیش آموزش دیدهای را برای تشخیص اشیا ارائه میدهد. این مدلهای از پیش ساخته شده، اجرای مدل را ساده میکنند، که به کاربران اجازه میدهد بدون نیاز به پیکربندی دستی گسترده شروع به کار کنند که عبارتند از:
- آبشار Haar : که در تشخیص الگوهای خاص مانند صورت و چشم استفاده میشود
- روشهای مبتنی بر یادگیری عمیق: کتابخانه OpenCV با مدلهای یادگیری عمیق محبوب مانند SSD و YOLO ادغام شده است.
– تقسیمبندی تصویر و تحلیل حرکت
- تکنیکهای تقسیمبندی: با تکنیکهای GrabCut و MeanShift میتوان وارد دنیای تقسیمبندی تصویر شد.این تکنیکها تصویر را بر اساس رنگ، بافت و شدت جداسازی میکنند.
- جریان نوری(Optical Flow): الگوریتمهای Lucas-Kanade و Farneback میتوانند حرکت بین فریمهای متوالی را در یک ویدیو با محاسبه جابجایی پیکسلها در طول زمان ردیابی کنند.
– مورفولوژی و بهبود تصویر
- عملیات مورفولوژیکی: عملیات مورفولوژیکی مانند فرسایش، اتساع، باز کردن و بسته شدن را میتوان برای تجزیه و تحلیل شکل و حذف نویز استفاده کرد. فرسایش اجسام را کوچک میکند و جزئیات کوچک را حذف میکند، در حالی که اتساع اشیا را منبسط میکند و شکافها را پر میکند. باز شدن، ترکیبی از فرسایش و به دنبال آن اتساع، به کاهش نویز و شکستن اتصالات باریک کمک میکند. بستن، از طریق اتساع و به دنبال آن فرسایش انجام میشود، به بستن سوراخها و شکافهای کوچک کمک میکند.
- فیلترینگ تصویر: فیلترهای Gaussian، Sobel، Laplacian و موارد دیگر را میتوان برای بهبود تصویر و استخراج ویژگی استفاده کرد. Gaussian تصاویر صاف را با کاهش نویز و تاری فیلتر میکند. فیلترهای سوبل لبهها را با محاسبه گرادیان برجسته میکنند. فیلترهای لاپلاسی نواحی تغییر شدت سریع را شناسایی میکنند و بر جزئیات ظریف تأکید دارند.
– کالیبراسیون دوربین و دید محیطی
- کالیبراسیون دوربین: کالیبراسیون دوربین پارامترهای درونی و بیرونی دوربین را برای رفع اعوجاج و بهبود دقت اندازهگیری تصویر تخمین میزند. تابع کالیبراسیون با گرفتن تصاویری از یک الگوی کالیبراسیون از دیدگاههای مختلف عمل کالیبره کردن را انجام میدهد. پارامترها، مانند فاصله کانونی و ضرایب اعوجاج، امکان بازسازی دقیق سه بعدی و تصحیح دقیق پرسپکتیو را فراهم میکنند. این کار در کاربردهایی مانند واقعیت افزوده بسیار مفید است.
- تکنیکهای استریو ویژن: تکنیکهای دید استریو، مانند StereoBM و StereoSGBM، بر تخمین عمق از تصاویر گرفتهشده توسط دوربین استریو تمرکز میکنند.
– تفریق پس زمینه و دوخت تصویر
- تفریق پس زمینه Background Subtraction: الگوریتمهای تفریق پسزمینه، مانند MOG2 و KNN، اجسام متحرک را در جریانهای ویدیویی جدا میکنند. این روشها از یک رویکرد مبتنی بر کنتراست استفاده میکنند و عناصر پیشزمینه و پسزمینه را متمایز میکنند. معیارهای ارزیابی اغلب شامل دقت(Precision)، یادآوری(Recall) و امتیاز F1 برای ارزیابی دقت تشخیص و ترسیم شیء هستند.
- دوخت تصویر Image stitching: دوخت تصویر شامل ترکیب چندین تصویر برای ایجاد یک نمای پانوراما است. OpenCV توابعی را برای تطبیق ویژگیها، تخمین هموگرافی و تبدیل پرسپکتیو برای تراز و ترکیب تصاویر فراهم میکند. ارزیابی میتواند شامل بازرسی بصری برای ارزیابی کیفیت درز و دقت هندسی باشد و اطمینان حاصل شود که نتایج منسجم و بدون اعوجاج هستند.