OpenCV چیست؟
OpenCV یا همان Open Computer Vision Library مجموعه ای از کتابخانههای برنامهنویسی پردازش تصویر و یادگیری ماشین است. این مجموعه بیشتر بر پردازش تصویر بی درنگ (به انگلیسی: Real Time) تمرکز دارد. در ابتدا توسط اینتل ساخته و پشتیبانی میشد و هم اکنون توسط Willow Garage و Itseez پشتیبانی میگردد. استفاده از آن با پروانه فری بیاسدی آزاد است. اوپن سی وی کتابخانهای چندسکویی است و توسط سیستم عامل های ویندوز، لینوکس، مک اواس، آی او اِس و اندروید پشتیبانی میشود. همچنین دارای رابط برنامه نویسی به زبان های سی، سی++، پایتون، جاوا و متلب میباشد.
کاربردهای OpenCV
- فیلتر تصویر
- سیستم تشخیص صورت
- تشخیص حرکت
- تعامل انسان و رایانه ( HCI )
- رباتیک موبایل
- درک حرکت
- شناسایی شی
- تقسیمبندی و تشخیص
- چشم انداز عمق استریو : ادراک عمق از 2 دوربین
- ساختار از حرکت ( SFM )
- ردیابی حرکت
- واقعیت افزوده
برای پشتیبیانی از برخی زمینههای بالا، OpenCV یک کتابخانه یادگیری ماشینی را در بردارد شامل:
- الگوریتم متا
- یادگیری درخت تصمیم گیری
- درختان افزایش گرادیان
- الگوریتم امید ریاضی-بیشینه کردن
- الگوریتم نزدیکترین همسایه
- دستهبندی کننده نایو بیز
- شبکه عصبی مصنوعی
- جنگل تصادفی
- ماشین بردار پشتیبانی(SVM)
زبانهای برنامهنویسی
OpenCV به زبان سی++ نوشته شده و بنیاد رابط برنامه نویسی آن به زبان سی++ است. رابط برنامه نویسی کاملی نیز برای پایتون، جاوا و متلب/اوکتاو دارد. ایپیآی این زبانها در اسناد برخط OpenCV یافت میشود. همچنین پوششهایی (به انگلیسی: Wrapper) برای زبانهایی همچون سی#، Ch و روبی برای تشویق پذیرش مخاطبان گستردهتر طراحی شدند.
- یک رابط جیپییو کودا-پایه از سپتامبر ۲۰۱۰ در حال پیشرفت است.
- یک رابط OpenCL-پایه از اکتبر ۲۰۱۲ در حال گسترش است.
پشتیبیانی سیستمعامل
OpenCV روی ویندوز، اندروید، ماامو، فریبیاسدی، اوپنبیاسدی، آیاواس، بلکبری۱۰، لینوکس و اواسده اجرا میشود[۳]. کاربران میتوانند نسخه رسمی آن را از سورسفورج یا آخرین نسخه آن را از GitHub دریافت نمایند.
OpenCV یک کتابخانه ی متن بازبرای بینایی کامپیوتر است.این کتابخانه به زبان C و C++ نوشته شده است و تحت لینوکس و ویندوز و مکینتاش قابل اجراست.همچنین، برای واسط هایی چون Matlab,Ruby,Python وغیره ، توسعه های فعالی دارد.
بسیاری از دانشمندان علوم رایانه و برنامه نویسان برنامه های کاربردی، از برخی نقش های بینایی کامپوتر آگاهند.اما تعداد کمی از همه کاربردهای بینایی کامپیوتر اطلاع دارند.برای مثال،خیلی ها ازکاربرد آنها در نظارت تصویری آگاهی دارند.همچنین، بسیاری نیز از افزایش استفاده آن برای تصاویر و ویدیو در وب باخبرند. اما شمار اندکی ، کاربرد های بینایی ماشین در واسط های بازی را دیده اند.هنوز تعداد کمی درک می کنند که تصاویر فضایی و تصاویرنقشه خیابان ها(مثلا در(Google’ s Street View ، استفاده زیادی در از روش های تنظیم دوربین وتکنیک های چسباندن تصویر می کنند.برخی افراد از کاربرد های آن در کنترل امنیت، وسایل نقلیه بدون سرنشین، یا تحلیل های پزشکی اگاهند.اما تعداد کمی می دانند که بینایی ماشین تا چه حد در تولید می تواند استفاده شود.به طور کلی در تولید انبوه و خ.دکار هر چیزی ، بایستی در نقاطی از خط تولید، محصول را با استفاده از تکنیک های بینایی ماشین مورد بازرسی قرار داد.
از زمان انتشار نسخه ی آلفا در ژانویه 1999 ، OpenCV در بسیاری از کاربرد ها، محصولات و تلاش های تحقیقاتی مورد استفاده قرار گرفته است.این کاربردها شامل چسباندن تصاویرماهواره ای و نقشه های وب به یکدیگر، تنظیم تصویر اسکن شده، کاهش نویز تصاویر پزشکی، تحلیل شی در سامانه های تشخیص اختلال و امنیت، نظارت خودکار و سامانه های امنیت، سامانه های بازرسی صنعتی، تنظیم دوربینف کاربرد های نظامی و وسیایل نقلیه هوایی، زمینی وزیرآبی بدون سرنشین است.حتی از آن می توانید در تشخیص موزیک و صوت نیز استفاده کرد به این روش که از تکنیک های تشخیص بینایی برای تصاویر طیف نگار صدا استفاده شود. OpenCV یک جز کلیدی سامانه بینایی ربات دانشگاه استنفورد، بنام استنلی بود که در مسابقات بزرگ ربات صحرایی برنده دو میلیون دلار جایزه از دارپا شد.
آشنایی کلی با OpenCV ؟
مقدمه
یکی از مشکلات توسعه دهندگان نرم افزار های بصری انجام محاسبات مختلف بر روی تصاویر است. به دلیل حجم بالای اطلاعات، پردازش آنها نیاز به برنامه نویسی بهینه دارد. شرکت Intel پروژه ای را با نام OpenCV آغاز کرد تا کتابخانه های بهینه برای انجام بلادرنگ محاسبات بصری، جهت توسعه دهندگان این دسته نرم افزار ها فراهم آورد.
OpenCV چیست ؟
OpenCV یک کتابخانه بازمتن با لایسنس BSD برای توسعه دهندگان نرم افزارهای بصری و پردازش تصویر است که در سال 2000 توسط شرکت Intel پا به دنیای کامپیوتر نهاد.
در حال حاضر ورژن های مختلفی از این کتابخانه موجود می باشد که معروف ترین آنها ورژن ۲.۴ و جدیدترین آنها ورژن 3.1 است که آخرین ورژن پایدار محسوب می شود.
این کتابخانه با زبان C/C++ نوشته شده است ولی تقریبا در تمام زبان های برنامه نویسی معروف ازجمله Python قابل دستری است.
چه نرم افزارهایی از OpenCV استفاده می کنند ؟
نرم افزارهای بسیار زیادی از OpenCV استفاده می کنند اما با توجه به صفحه ی ویکی پدیا می توان به موارد زیر اشاره کرد.
- 2D and 3D feature toolkits
- Egomotion estimation
- Facial recognition system
- Gesture recognition
- Human–computer interaction (HCI)
- Mobile robotics
- Motion understanding
- Object identification
- Segmentation and recognition
- Stereopsis stereo vision: depth perception from 2 cameras
- Structure from motion (SFM)
- Motion tracking
- Augmented reality
OpenCV بر روی چه سیستم عامل هایی اجرا می شود ؟
OpenCV در سیستم عامل های مختلف اجرا می شود که از مهمترین آنها می توان به این موارد اشاره کرد.
Desktop: Windows, Linux, OS X, FreeBSD, NetBSD, OpenBSD
Mobile: Android, iOS, Maemo, BlackBerry 10
OpenCV چیست ؟
ساختار کتابخانه :
- core: شامل تعریف ساختارها و کلاس های پایه ای جهت نگهداری داده به صورت خلوت و غیر خلوت و همچنین توابع پایه ای می باشد.
- imgproc : ماژول پردازش تصویر که شامل فیلتر های خطی و غیر خطی ،تبدیلات هندسی (تغییر اندازه ،تبدیل آفاین ،تبدیل پرسپکتیو) ،تبدیل فضای رنگی و هیستوگرام و غیره می باشد.
- video: ماژول های تحلیل ویدیو که شامل تخمین حرکت ،استخراج پشت زمینه و الگوریتم های مختلف ردگیری می باشد.
- calib3d: الگوریتم های مربوط به هندسه چند دوربین , کالیبره کردن یک یا چند دوربین ،تخمین موقعیت اشیاء ،الگوریتم های مربوط به استریو و ساختارهای احیا 3 بعدی اشیاء می باشد.
- feature2d: شامل توابع مربوط به استخراج انواع key point ها و descriptor ها و توابع مربوط مقایسه descriptor ها می باشد.
- bjdetect: کلیه توابع مربوط به آموزش و شناسایی اشیاء در این بخش می باشد.
-
highgui : کلیه توابع مربوط به رابط کاربری ،پخش و ضبط فیلم و توابع مربوط به codec ها در این بخش می باشد.
-
gpu : توابع و الگوریتم های مربوط به موازی سازی در این بخش می باشد.
OpenCV چیست؟
OpenCV یک کتابخانه متن باز برای زیبایی کامپیوتر است.
این کتابخانه به زبان C و ++C نوشته شده و تحت لینوکس ، ویندوز و مکینتاش قابل اجراست.
همچنین برای واسط هایی چون Matlab , Ruby , Python و . . . قابل توسعه های فعالی دارد.
هدف از طراحی OpenCV پردازش کارا به خصوص برای کاربرد های بی درنگ است.
OpenCV می تواند با پردازنده های چند هسته ای نیز کار کند.
در صورتی که تمایل دارید از بهینه سازی خودکار بیشتری روی معماری اینتل بهره ببرید می توانید کتابخانه های IPP یا ( Integrated Performance Primitives ) اینتل که شامل روتین های بهینه شده سطح پایین در بسیاری از زمینه های الگوریتمی هستند را خریداری کنید.
OpenCV به صورت خودکار IPP مناسب را در زمان اجرا در صورتی که کتابخانه نصب باشد به کار میگیرد.
یکی از اهداف OpenCV فراهم کردن یک زیربنای بینایی کامپیوتر با کاربری ساده است به طوری که افراد بتوانند برنامه های بینایی نسبتا پیچیده ی خود را به سرعت بسازند.
کتابخانه OpenCV شامل بیش از ۵۰۰ توابع پیرامون موضوعات مختلف بینایی، از بررسی محصول کارخانه گرفته تا تصویر برداری پزشکی، امنیت، واسط کاربر، تنظیم دوربین، رباتیک و بینایی دو چشمی ( استریو ) است.
از انجا که همواره قرابت زیادی بین بینایی کامپیوتر و یادگیری ماشین وجود داشته است OpenCV شامل یک کتابخانه ی یادگیری ماشین همه منظوره ( MLL ) نیز هست. ( Machine Learning Library )
این زیر کتابخانه روی بحث تشخیص الگوی اماری و دسته بندی تمرکز دارد.
چه کسانی از OpenCV استفاده می کنند؟
بسیاری از دانشمندان علوم رایانه و برنامه نویسان برنامه های کاربردی، از برخی نقش های بینایی کامپیوتر اگاهند.اما تعداد کمی از همه ی کاربرد های بینایی کامپیوتر اطلاع دارند.برای مثال خیلی ها از کاربرد ان در نظارت تصویری آگاهی دارند.همچنین بسیاری نیز از افزایش استفاده ان برای تصاویر و ویدیو در وب باخبرند.اما شمار اندکی کاربرد های بینایی ماشین در واسط های بازی دیده اند.
هنوز تعداد کمی درک می کنند که تصاویر فضایی و تصاویر نقشه خیابان ها ( مثلا در Google’s Street View ) استفاده زیادی از روش های تنظیم دوربین و تکنیک های چسباندن تصویر می کنند.
برخی افراد از کاربرد های ان در کنترل امنیت، وسایل نقلیه، بدون سرنشین یا تحلیل های پزشکی اگاهند.اما تعداد کمی می دانند که بینایی ماشین تا چه حد در تولید می تواند استفاده شود.
به طور کلی در تولید انبوه و خودکار هر چیزی، باید در نقاطی از خط تولید، محصول را با استفاده از تکنیک های ماشین مورد بررسی قرار داد.
OpenCV چیست و چرا از آن باید استفاده کنیم ؟
OpenCV یا Open Source Computer Vsion در حقیقت یک کتابخانه متن باز است که می توانید به برنامه خودتون اضافه کنید و از قابلیت ها آن استفاده کنید. این کتابخانه برای کارهای پردازش تصویر و بینایی ماشین نوشته شده است. اگر برنامه شما به زبان های C ، ++C ، پایتون ، #C و یا جاوا هست از این کتابخانه میتونید استفاده کنید.
در کد زیر با استفاده از قابلیتی که این کتابخانه به ما داده، میتونیم یک تصویر رو بخونیم
IplImage* img = cvLoadImage( "test.jpg" );
و نمایش بدیم.
cvShowImage("Example1", img);
خوب پرسشی که پیش میاید این است که چه برتری نسبت به MATLAB که از آن هم برای پردازش تصویر استفاده میشود دارد؟
دلیل اول سرعت هست که برای کارهای Real Time این کتابخانه بهینه شده ست.
دلیل دوم: از این کتابخانه می توان در Embedded System و موبایلها استفاده کرد و با آن اپلیکیشن نوشت. در Embedded System هایی که توانایی نصب linux روی آنها هست به راحتی می تونیم از این کتابخانه استفاده کنیم و با ابزارهای جانبی مثل وبکم و Kinect ارتباط برقرار کنیم.