فصل اول - معرفی

معرفی اُ سی وی

اُ سی وی1 یک کتابخانه از توابع برنامه‌نویسی است و هدف اصلی آن بینایی کامپیوتر بی‌درنگ است. این کتابخانه توسط شرکت اینتل (مرکز تحقیقات روسیه) توسعه داده شد و در حال حاضر توسط شرکت‌های Willow Garage و Itseez پشتیبانی می‌شود. استفاده از این کتابخانه تحت مجوز متن باز بی اس دی، آزاد (و مجانی) است. بیشتر تمرکز این کتابخانه روی پردازش تصاویر به صورت بی‌درنگ است. اگر روی سیستمتان برنامه Integrated Performance Primitives ‫2 را نصب داشته باشید، اُ سی وی می‌تواند از آن جهت بهبود عملکرد خودش استفاده کند و سرعت و کار کردش را بهبود بخشد.

تاریخچه

پروژه اُ سی وی به صورت رسمی در سال 1999 به منظور حل مشکل کاربردهای شدیداً پردازنده‌ای3 به عنوان قسمتی از سری پروژه‌هایی شامل ردیابی اشعه بی‌درنگ و دیواره‌های نمایشگر سه بعدی، شروع شد. مهم‌ترین شرکت کنندگان در این پروژه شامل تعدادی متخصصان بهینه سازی در اینتل روسیه و همچنین تیم کتابخانهٔ کارایی4 اینتل بودند. در روزهای ابتدایی، هدف پروژه به صورت زیر تشریح شده بود:

  • پیشرفت تحقیقات بینایی کامپیوتر به واسطهٔ ارائهٔ نه تنها یک کد آزاد، بلکه یک کد بهینه برای کارهای ساده زیربنایی در بینایی کامپیوتر.

  • انتشار علم بینایی کامپیوتر به واسطهٔ ارائهٔ یک زیربنای مشترک که توسعه دهندگان بتوانند روی آن برنامه بسازند و بنابراین قابلیت خوانایی و انتقال دهی کد افزایش یابد.

  • ارتقا کاربردهای تجاری مبتنی بر بینایی کامپیوتر به واسطه ساخت کدهای آزاد، قابل حمل و بهینه شده.

اولین نسخه آلفای اُ سی وی در کنفرانس بینایی کامپیوتر و کشف الگوی IEEE در سال 2000 به عموم معرفی شد و 5 نسخه بتا بین سال‌های 2001 و 2005 منتشر شد. نسخه 1.0 در 2006 انتشار یافت. در اواسط 2008، Willow Garage از اُ سی وی حمایت کرد و هم اکنون در حال توسعه فعال است. یک نسخه 1.1 به عنوان "پیش انتشار" در اکتبر 2008 منتشر شد.

نسخه دوم اُ سی وی در اکتبر 2009 منتشر شد. اُ سی وی 2 تغییرهای چشم گیری در رابط ++C داشت که عموماً به هدف ارائه الگوهای آسانتر و نوع امنتر5 و توابع جدید و پیاده سازی بهتر توابع قبلی برای کارایی بهتر (مخصوصاً روی پردازنده‌های چند هسته‌ای) بود. در حال حاضر نسخه‌های رسمی هر شش ماه یک بار منتشر می‌شود و توسعهٔ این کتابخانه توسط یک تیم مستقل روسی که از سوی شرکت‌های تجاری حمایت می‌شود، انجام می‌گیرد.

در آگوست 2012 حمایت از اُ سی وی از طریق یک سازمان غیر انتفاعی به نام OpenCV.org شکل گرفت. این سازمان شامل یک سایت برای کاربران و یک سایت برای توسعه دهندگان است.

کاربردها

زمینه‌های کاربرد اُ سی وی شامل موارد زیر است:

  • تخمین Egomotion ‫6

  • سیستم تشخیص چهره7

  • تشخیص اشاره8

  • تعامل انسان کامپیوتر (HCI)‫9

  • رباتیک موبایل10

  • درک حرکت11

  • شناسایی شیء12

  • تقسیم بندی و تشخیص13

  • چشم انداز عمق استریو14: ادراک عمق از دو دوربین

  • ساختار از حرکت (SFM)‫15

  • ردیابی حرکت16

  • واقعیت افزوده17

برای پشتیبانی از برخی از موارد بالا، اُ سی وی یک کتابخانه یادگیری ماشین آماری، که شامل موارد زیر است را در بر دارد:

  • بوستینگ18 (الگوریتم متا)
  • یادگیری درخت تصمیم گیری19
  • درختان افزایش گرادیان20
  • الگوریتم بیشینه سازی امید ریاضی 21
  • الگوریتم K نزدیک‌ترین همسایه22
  • دسته بند کننده ناَیو بیز23
  • شبکه‌های عصبی مصنوعی24
  • جنگل تصادفی25
  • ماشین برداری پشتیبان (SVM)‫26

زبان برنامه‌نویسی

اُ سی وی 2 با ++C نوشته شده است و رابط اصلی آن همین ++C است ولی همچنان می‌توانید از رابط C باقی مانده (از نسخه اول) در آن استفاده کنید. در حال حاظر رابط‌های کاملی برای زبان‌های Python، Java و MATLAB/OCTAVE (از نسخه 2.5 به بعد) وجود دارد. APIهای این رابط‌ها را می‌توانید در مستندات آنلاین پیدا کنید. به منظور تشویق توسعه دهندگان زبان‌های دیگر از جمله C#، Ch و Ruby به استفاده از این کتابخانه، رابط‌هایی برای آنها نیز توسعه داده شده است.

در حال حاضر تمامی توسعه‌ها و الگوریتم‌های جدید در ++C توسعه می‌یابند.

سیستم‌عامل‌ها

تا این لحظه اُ سی وی روی سیستم‌عامل‌های Windows، Android، Maemo، FreeBSD، OpenBSD، IOS، BlackBerry، Linux و OS X قابل اجرا است. کاربر می‌تواند برای استفاده در هر کدام از این سیستم‌عامل‌ها، نسخه‌های رسمی را از SourceForge دریافت کند.


  1. OpenCV ↩

  2. برنامه‌ای جهت استفاده بهینه‌تر از توانایی پردازنده‌های شرکت اینتل. ↩

  3. CPU Intensive ↩

  4. Performance Library ↩

  5. Type safe ↩

  6. Egomotion estimation ↩

  7. Facial recognition system ↩

  8. Gesture recognition ↩

  9. Human-computer interaction ↩

  10. Mobile robotics ↩

  11. Motion understanding ↩

  12. Object identification ↩

  13. Segmentation and Recognition ↩

  14. Stereopsis Stereo vision ↩

  15. Structure From Motion ↩

  16. Motion tracking ↩

  17. Augmented reality ↩

  18. Boosting ↩

  19. Decision tree ↩

  20. Gradient boosting trees ↩

  21. Expectation-maximization algorithm ↩

  22. K nearest neighbor ↩

  23. Naïve Bayes classifier ↩

  24. Artificial Neural Networks ↩

  25. Random forest ↩

  26. Support Vector Machine ↩