مقدمهای بر OpenCV
مقدمهای بر آموزشهای OpenCV-Python
OpenCV#
پروژه OpenCV در سال ۱۹۹۹ توسط Gary Bradsky در اینتل آغاز شد و اولین نسخه آن در سال ۲۰۰۰ منتشر گردید. Vadim Pisarevsky به Gary Bradsky پیوست تا مدیریت تیم روسی نرمافزار OpenCV در اینتل را بر عهده بگیرد. در سال ۲۰۰۵، OpenCV در استنلی (Stanley)، خودرویی که برنده چالش بزرگ DARPA ۲۰۰۵ شد، مورد استفاده قرار گرفت. بعدها، توسعه فعال آن تحت پشتیبانی Willow Garage با رهبری Gary Bradsky و Vadim Pisarevsky ادامه یافت. در حال حاضر OpenCV از تعداد بیشماری از الگوریتمهای مرتبط با بینایی کامپیوتر (Computer Vision) و یادگیری ماشین (Machine Learning) پشتیبانی میکند و روز به روز در حال گسترش است.
پروژه OpenCV از انواع مختلفی از زبانهای برنامهنویسی مانند ++C، پایتون، جاوا و غیره پشتیبانی میکند و بر روی پلتفرمهای مختلف از جمله Windows، Linux، OS X، Android و iOS در دسترس است. رابطهایی برای عملیات با سرعت بالای GPU بر پایه CUDA و OpenCL نیز تحت توسعه فعال هستند.
کتابخانه OpenCV-Python رابط برنامهنویسی پایتون (API) برای OpenCV است که بهترین ویژگیهای API زبان ++C در OpenCV و زبان پایتون را ترکیب میکند.
OpenCV-Python#
کتابخانه OpenCV-Python مجموعهای از اتصالات پایتون (Python bindings) است که برای حل مسائل بینایی کامپیوتر طراحی شده است.
پایتون یک زبان برنامهنویسی همهمنظوره است که توسط Guido van Rossum آغاز شد و عمدتاً به دلیل سادگی و خوانایی کد، بسیار سریع محبوب شد. این زبان به برنامهنویس امکان میدهد تا ایدهها را در خطوط کد کمتری بدون کاهش خوانایی بیان کند.
در مقایسه با زبانهایی مانند C/C++، پایتون کندتر است. با این حال، پایتون را میتوان به راحتی با C/C++ توسعه داد، که به ما اجازه میدهد کدهای با بار محاسباتی سنگین را در C/C++ بنویسیم و بستهبندهای (wrappers) پایتون ایجاد کنیم که بتوانند به عنوان ماژولهای پایتون استفاده شوند. این کار دو مزیت به همراه دارد: اول، کد به اندازه کد اصلی C/C++ سریع است (زیرا این همان کد واقعی ++C است که در پسزمینه اجرا میشود) و دوم، کدنویسی در پایتون آسانتر از C/C++ است. کتابخانه OpenCV-Python یک پوشش پایتون (Python wrapper) برای پیادهسازی اصلی OpenCV با ++C است.
کتابخانه OpenCV-Python از Numpy استفاده میکند، که یک کتابخانه بسیار بهینهشده برای محاسبات عددی با ساختار دستوری مشابه MATLAB است. تمام ساختارهای آرایهای OpenCV به آرایههای Numpy و بالعکس تبدیل میشوند. این امر همچنین یکپارچهسازی با سایر کتابخانههایی که از Numpy استفاده میکنند، مانند SciPy و Matplotlib را آسانتر میسازد.
آموزشهای OpenCV-Python#
کتابخانه OpenCV مجموعه جدیدی از آموزشها را معرفی میکند که شما را از طریق توابع مختلف موجود در OpenCV-Python راهنمایی میکند. این راهنما عمدتاً بر روی نسخه OpenCV 3.x متمرکز است (اگرچه بیشتر آموزشها با OpenCV 2.x نیز کار خواهند کرد).
آشنایی قبلی با Python و Numpy توصیه میشود زیرا در این راهنما پوشش داده نخواهند شد. تسلط بر Numpy برای نوشتن کد بهینه با استفاده از OpenCV-Python الزامی است.
این آموزش در ابتدا توسط Abid Rahman K. به عنوان بخشی از برنامه Google Summer of Code 2013 تحت راهنمایی Alexander Mordvintsev آغاز شد.
OpenCV به شما نیاز دارد !!!#
از آنجا که OpenCV یک طرح متنباز (Open Source) است، از مشارکت همگان در کتابخانه، مستندات و آموزشها استقبال میشود. اگر هر گونه خطایی در این آموزش یافتید (از یک اشتباه املایی کوچک گرفته تا یک خطای فاحش در کد یا مفهوم)، با خیال راحت با کلون کردن OpenCV در GitHub و ارسال درخواست پول (Pull Request) آن را اصلاح کنید. توسعهدهندگان OpenCV درخواست شما را بررسی خواهند کرد، بازخوردهای مهمی به شما خواهند داد و (پس از تأیید بازبین) در OpenCV ادغام خواهد شد. پس از آن شما یک مشارکتکننده متنباز خواهید بود :-)
با اضافه شدن ماژولهای جدید به OpenCV-Python، این آموزش نیز باید گسترش یابد. اگر با الگوریتم خاصی آشنایی دارید و میتوانید آموزشی شامل تئوری پایه الگوریتم و کد نشاندهنده نحوه استفاده نمونه بنویسید، لطفاً این کار را انجام دهید.
به یاد داشته باشید، با هم میتوانیم این پروژه را به موفقیتی بزرگ تبدیل کنیم !!!
مشارکتکنندگان#
در زیر فهرست مشارکتکنندگانی که آموزشهایی به OpenCV-Python ارسال کردهاند آمده است:
- Alexander Mordvintsev (GSoC-2013 mentor)
- Abid Rahman K. (GSoC-2013 intern)
منابع اضافی#
- A Quick guide to Python - A Byte of Python
- A Quick guide to Python
- NumPy Quickstart tutorial
- NumPy Reference
- OpenCV Documentation
- OpenCV Forum