مقدمه‌ای بر OpenCV

نصب OpenCV-Python در فدورا

۸ دقیقه مطالعهOpenCV 5.xبه‌روزرسانی:

اهداف#

در این آموزش

  • یاد خواهیم گرفت که چگونه OpenCV-Python را در سیستم فدورا (Fedora) خود راه‌اندازی کنیم. مراحل زیر برای فدورا ۱۸ (۶۴ بیتی) و فدورا ۱۹ (۳۲ بیتی) آزمایش شده‌اند.

مقدمه#

کتابخانه OpenCV-Python را می‌توان در فدورا به دو روش نصب کرد: ۱) نصب از باینری‌های از پیش ساخته‌شده موجود در مخازن فدورا، ۲) کامپایل از روی سورس کد. در این بخش، هر دو روش را بررسی خواهیم کرد.

مورد مهم دیگر، کتابخانه‌های اضافی مورد نیاز است. OpenCV-Python تنها به Numpy نیاز دارد (علاوه بر سایر وابستگی‌ها که بعداً خواهیم دید). اما در این آموزش‌ها، از Matplotlib نیز برای برخی رسم‌های آسان و مناسب استفاده می‌کنیم (که به نظر من در مقایسه با OpenCV بسیار بهتر است). کتابخانه Matplotlib اختیاری است، اما اکیداً توصیه می‌شود. مشابهاً با IPython (یک ترمینال تعاملی پایتون) نیز آشنا خواهیم شد که استفاده از آن نیز بسیار توصیه می‌شود.

نصب OpenCV-Python از باینری‌های از پیش ساخته‌شده#

تمام بسته‌ها را با دستور زیر در ترمینال با دسترسی ریشه (root) نصب کنید:

$ yum install numpy opencv*

محیط Python IDLE (یا IPython) را باز کرده و کدهای زیر را در ترمینال پایتون وارد نمایید:

>>> import cv2 as cv
>>> print( cv.__version__ )

اگر نتایج بدون هیچ خطایی چاپ شوند، تبریک می‌گوییم !!! شما OpenCV-Python را با موفقیت نصب کرده‌اید.

این روش بسیار ساده است، اما مشکلی دارد: مخازن Yum ممکن است همیشه حاوی آخرین نسخه OpenCV نباشند. برای مثال، در زمان نگارش این آموزش، مخزن yum نسخه 2.4.5 را دارد در حالی که آخرین نسخه OpenCV نسخه 2.4.6 است. از منظر API پایتون، آخرین نسخه همواره پشتیبانی بسیار بهتری خواهد داشت. همچنین ممکن است بسته به درایورها، بسته‌های ffmpeg و gstreamer موجود و غیره، مشکلاتی در پشتیبانی از دوربین، پخش ویدیو و موارد دیگر وجود داشته باشد.

بنابراین اولویت شخصی من روش بعدی است، یعنی کامپایل از سورس کد. همچنین اگر در مقطعی بخواهید در توسعه OpenCV مشارکت کنید، به این روش نیاز خواهید داشت.

نصب OpenCV از سورس کد#

کامپایل از سورس ممکن است در ابتدا کمی پیچیده به نظر برسد، اما زمانی که یک بار در آن موفق شوید، هیچ چیز پیچیده‌ای نخواهد بود.

ابتدا برخی وابستگی‌ها را نصب خواهیم کرد. برخی اجباری و برخی اختیاری هستند. در صورت عدم تمایل می‌توانید وابستگی‌های اختیاری را رها کنید.

وابستگی‌های اجباری#

ما به CMake برای پیکربندی نصب، GCC برای کامپایل، و Python-devel و Numpy برای ایجاد افزونه‌های پایتون و غیره نیاز داریم:

yum install cmake
yum install python-devel numpy
yum install gcc gcc-c++

سپس به پشتیبانی از GTK برای قابلیت‌های رابط کاربری گرافیکی، پشتیبانی از دوربین (libdc1394, v4l)، و پشتیبانی چندرسانه‌ای (ffmpeg, gstreamer) و غیره نیاز داریم:

yum install gtk2-devel
yum install libdc1394-devel
yum install ffmpeg-devel
yum install gstreamer-plugins-base-devel

وابستگی‌های اختیاری#

وابستگی‌های فوق برای نصب OpenCV در سیستم فدورای شما کافی هستند. اما بسته به نیازهای خود ممکن است به وابستگی‌های بیشتری احتیاج داشته باشید. فهرستی از این وابستگی‌های اختیاری در زیر آورده شده است. می‌توانید آن‌ها را نصب کنید یا نادیده بگیرید، تصمیم با خودتان است :)

کتابخانه OpenCV همراه با فایل‌های پشتیبانی برای فرمت‌های تصویری مانند PNG، JPEG، JPEG2000، TIFF، WebP و غیره ارائه می‌شود. اما این فایل‌ها ممکن است کمی قدیمی باشند. اگر می‌خواهید آخرین کتابخانه‌ها را دریافت کنید، می‌توانید فایل‌های توسعه این فرمت‌ها را نصب نمایید:

yum install libpng-devel
yum install libjpeg-turbo-devel
yum install jasper-devel
yum install openexr-devel
yum install libtiff-devel
yum install libwebp-devel

چندین تابع OpenCV با استفاده از کتابخانه بلوک‌های ساختمانی نخ‌بندی اینتل (TBB یا Threading Building Blocks) موازی‌سازی شده‌اند. اما اگر می‌خواهید آن را فعال کنید، ابتدا باید TBB را نصب نمایید (همچنین هنگام پیکربندی نصب با CMake، ارسال آرگومان ‎-D WITH_TBB=ON‎ را فراموش نکنید. جزئیات بیشتر در زیر آمده است):

yum install tbb-devel

کتابخانه OpenCV از کتابخانه دیگری به نام Eigen برای بهینه‌سازی عملیات ریاضی استفاده می‌کند. بنابراین اگر Eigen در سیستم شما نصب باشد، می‌توانید از آن بهره ببرید (همچنین هنگام پیکربندی نصب با CMake، ارسال آرگومان ‎-D WITH_EIGEN=ON‎ را فراموش نکنید. جزئیات بیشتر در زیر آمده است):

yum install eigen3-devel

اگر می‌خواهید مستندات را بسازید ( بله، می‌توانید نسخه آفلاین مستندات کامل و رسمی OpenCV را در سیستم خود به صورت HTML با قابلیت جستجوی کامل بسازید تا در صورت بروز هرگونه سوال نیازی به دسترسی همیشگی به اینترنت نداشته باشید، و ضمناً بسیار سریع است!!! )، باید Doxygen (ابزار تولید مستندات) را نصب کنید:

yum install doxygen

دریافت سورس OpenCV#

سپس باید OpenCV را دانلود کنیم. می‌توانید آخرین نگارش منتشرشده OpenCV را از سایت سورس‌فورج دانلود کرده و سپس فایل را استخراج نمایید.

یا می‌توانید آخرین سورس را از مخزن گیت‌هاب OpenCV دانلود کنید (اگر می‌خواهید در توسعه OpenCV مشارکت داشته باشید، این گزینه را انتخاب کنید؛ این روش همیشه OpenCV شما را به‌روز نگه می‌دارد). برای این منظور، ابتدا باید Git را نصب نمایید:

yum install git
git clone https://github.com/opencv/opencv.git

این دستور پوشه‌ای به نام OpenCV در دایرکتوری خانگی (یا دایرکتوری مشخص‌شده توسط شما) ایجاد می‌کند. فرآیند کلون کردن ممکن است بسته به اتصال اینترنت شما مدتی طول بکشد.

اکنون یک پنجره ترمینال باز کرده و به پوشه OpenCV دانلودشده بروید. یک پوشه جدید به نام build بسازید و وارد آن شوید:

mkdir build
cd build

پیکربندی و نصب#

اکنون تمام وابستگی‌های مورد نیاز را نصب کرده‌ایم؛ بیایید OpenCV را نصب کنیم. نصب باید با CMake پیکربندی شود. CMake مشخص می‌کند کدام ماژول‌ها باید نصب شوند، مسیر نصب کجاست، از چه کتابخانه‌های اضافی استفاده شود، آیا مستندات و مثال‌ها کامپایل شوند یا خیر، و موارد دیگر. دستور زیر معمولاً برای پیکربندی استفاده می‌شود (از داخل پوشه build اجرا شود):

cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local ..

این دستور مشخص می‌کند که حالت بیلد "Release Mode" و مسیر نصب usr/local/ است. به علامت ‎-D‎ قبل از هر گزینه و دو نقطه ‎..‎ در انتهای دستور توجه کنید. به طور خلاصه، ساختار دستور به این صورت است:

cmake [-D <flag>] [-D <flag>] ..

می‌توانید به تعداد دلخواه فلگ تعیین کنید، اما قبل از هر فلگ باید یک ‎-D‎ قرار گیرد.

بنابراین در این آموزش، ما OpenCV را با پشتیبانی از TBB و Eigen نصب می‌کنیم. همچنین مستندات را بیلد می‌کنیم، اما از تست‌های کارایی (Performance tests) و بیلد نمونه‌ها صرف‌نظر می‌کنیم. همچنین ماژول‌های مربوط به GPU را غیرفعال می‌کنیم (از آنجا که از OpenCV-Python استفاده می‌کنیم، به ماژول‌های مرتبط با GPU نیازی نداریم که این کار باعث صرفه‌جویی در زمان می‌شود).

(تمام دستورات زیر را می‌توان در یک خط دستور یکپارچه cmake انجام داد، اما برای درک بهتر در اینجا تفکیک شده‌اند.)

  • فعال‌سازی پشتیبانی از TBB و Eigen:

    cmake -D WITH_TBB=ON -D WITH_EIGEN=ON ..
  • فعال‌سازی مستندات و غیرفعال‌سازی تست‌ها و نمونه‌ها:

    cmake -D BUILD_DOCS=ON -D BUILD_TESTS=OFF -D BUILD_PERF_TESTS=OFF -D BUILD_EXAMPLES=OFF ..
  • غیرفعال‌سازی تمام ماژول‌های مربوط به GPU:

    cmake -D WITH_OPENCL=OFF -D BUILD_opencv_gpu=OFF -D BUILD_opencv_gpuarithm=OFF -D BUILD_opencv_gpubgsegm=OFF -D BUILD_opencv_gpucodec=OFF -D BUILD_opencv_gpufeatures2d=OFF -D BUILD_opencv_gpufilters=OFF -D BUILD_opencv_gpuimgproc=OFF -D BUILD_opencv_gpulegacy=OFF -D BUILD_opencv_gpuoptflow=OFF -D BUILD_opencv_gpustereo=OFF -D BUILD_opencv_gpuwarping=OFF ..
  • تنظیم مسیر نصب و حالت بیلد:

    cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local ..

هر بار که دستور cmake را وارد می‌کنید، وضعیت پیکربندی حاصل چاپ می‌شود. در پیکربندی نهایی که به دست می‌آورید، مطمئن شوید که فیلدهای زیر پر شده باشند (در زیر برخی از بخش‌های مهم پیکربندی آمده است). این فیلدها باید در سیستم شما نیز به شکل مناسب تکمیل شده باشند، در غیر این صورت مشکلی پیش آمده است. بنابراین بررسی کنید که آیا مراحل بالا را به درستی انجام داده‌اید یا خیر:

...
--   GUI:
--     GTK+ 2.x:                    YES (ver 2.24.19)
--     GThread :                    YES (ver 2.36.3)

--   Video I/O:
--     DC1394 2.x:                  YES (ver 2.2.0)
--     FFMPEG:                      YES
--       codec:                     YES (ver 54.92.100)
--       format:                    YES (ver 54.63.104)
--       util:                      YES (ver 52.18.100)
--       swscale:                   YES (ver 2.2.100)
--       gentoo-style:              YES
--     GStreamer:
--       base:                      YES (ver 0.10.36)
--       video:                     YES (ver 0.10.36)
--       app:                       YES (ver 0.10.36)
--       riff:                      YES (ver 0.10.36)
--       pbutils:                   YES (ver 0.10.36)

--     V4L/V4L2:                    Using libv4l (ver 1.0.0)

--   Other third-party libraries:
--     Use Eigen:                   YES (ver 3.1.4)
--     Use TBB:                     YES (ver 4.0 interface 6004)

--   Python:
--     Interpreter:                 /usr/bin/python2 (ver 2.7.5)
--     Libraries:                   /lib/libpython2.7.so (ver 2.7.5)
--     numpy:                       /usr/lib/python2.7/site-packages/numpy/core/include (ver 1.7.1)
--     packages path:               lib/python2.7/site-packages

...

فلگ‌ها و تنظیمات بسیار دیگری نیز وجود دارند که بررسی بیشتر آن‌ها بر عهده شماست.

اکنون فایل‌ها را با استفاده از دستور make بیلد کرده و با دستور make install نصب نمایید. دستور make install باید به عنوان کاربر ریشه (root) اجرا شود:

make
su
make install

مراحل نصب پایان یافت. تمام فایل‌ها در پوشه ‎/usr/local/‎ نصب شده‌اند. اما برای استفاده از آن، پایتون شما باید بتواند ماژول OpenCV را پیدا کند. برای این کار دو گزینه در اختیار دارید:

  1. انتقال ماژول به هر پوشه‌ای در مسیر Python (Python Path): مسیر پایتون را می‌توان با وارد کردن import sys; print(sys.path) در ترمینال پایتون پیدا کرد. این دستور مسیرهای متعددی را چاپ می‌کند. فایل ‎/usr/local/lib/python2.7/site-packages/cv2.so‎ را به هر یک از این پوشه‌ها منتقل کنید. به عنوان مثال:

    su mv /usr/local/lib/python2.7/site-packages/cv2.so /usr/lib/python2.7/site-packages

اما هر بار که OpenCV را نصب می‌کنید باید این کار را انجام دهید.

  1. افزودن ‎/usr/local/lib/python2.7/site-packages‎ به PYTHON_PATH: این کار فقط یک بار باید انجام شود. کافی است فایل ‎~/.bashrc‎ را باز کرده و خط زیر را به آن اضافه کنید، سپس خارج شده و دوباره وارد سیستم شوید:

    export PYTHONPATH=$PYTHONPATH:/usr/local/lib/python2.7/site-packages

بدین ترتیب نصب OpenCV به پایان می‌رسد. ترمینال را باز کرده و دستور 'import cv2 as cv' را امتحان کنید.

برای بیلد مستندات، کافی است دستورات زیر را وارد کنید:

make doxygen

سپس فایل opencv/build/doc/doxygen/html/index.html را باز کرده و در مرورگر نشانه‌گذاری (بوکمارک) کنید.

تمرین‌ها#

  1. کتابخانه OpenCV را از سورس کد در سیستم فدورای خود کامپایل کنید.