مطمئنا بارها شده که اسم پردازش تصویر رو شنیده باشید و شاید خیلیهاتون این تصور رو داشته باشید که کار کردن در این رشته بسیار کار سخت و پیچیدهای است. اما همیشه در واقعیت اونجوری که فکر میکنید نیست (البته با روشی که توضیح میدیم). اینم بگم کار کردن به صورت حرفهای در این رشته برخلاف اسم زیبایی که داره بسیار سخت و پیچیده است. و در مقاله نمیخوایم دقیقا وارد اصل داستان پردازش تصویر بشیم بلکه میخوایم روشی رو ارائه بدیم که بتونیم به راحتی توی پروژهها از پردازش تصویر استفاده کنیم.
شاید برای شما مفید باشد: آموزش رزبری پای از 0 تا 100 از مقدماتی تا پیشرفته
روشی که میخوایم استفاده کنیم، استفاده از کتابخانه آماده opencv است که در این قسمت میخوایم از همین ابتدا به صورت کاملا عملی شروع کنیم و تصمیم گرفتیم که این کتابخانه رو روی سیستم عامل رزبین نصب کنیم البته بگم خیلی، سیستم عامل فرقی نداره ( چیزی که مهمه فرآیند نصبه). دلیل انتخاب رزبین هم این بوده که بین مهندسین الکترونیک مقبولیت بیشتری رو داره و میشه گفت کارکردن باهاش برای اول کار سادهتره.
و همینطور از زبان برنامهنویسی Python و سخت افزار RaspberryPi model3B در این آموزش و آموزشهای بعدی استفاده میکنیم.
نکتهای که قبل از نصب مهمه و باید اطلاع داشته باشیم. اینکه کتابخانه روی چه سیسم عاملهایی کار میکنه.
سیستم عاملهایی که از این کتابخانه پشتیبانی می کنند شامل:
Windows, Linux, macOS, FreeBSD, NetBSD, OpenBSD
و همینطور برای موبایلها از سیستم عاملهای زیر پشتیبانی میکنه:
Android, iOS, Maemo,[20] BlackBerry 10
مقدمات نصب کتابخانه opencv
مرحله اول
نصب سیستم عاملی که مدنظرتون است، برای این کار به سایت RaspberryPi، قسمت Download میریم و سیستمعامل مربوطه رو دانلود میکنیم.
مرحله دوم
برای رایت کردن ایمیجی(فایل سیستم عامل) که دانلود کردیم میتونیم از نرم افزارهای زیادی استفاده کنیم که بهترینهاشون Etcher , Win32DiskImage هستند.
مرحله سوم
اجرای سیستمعامل روی یک نمایشگر، میتونیم از طریق اتصال یک lcd به سخت افزار این کار رو انجام بدیم (روش مستقیم). البته برای راحتی کار میتونیم SSH بزنیم و بدون اتصال به یک نمایشگر به طور غیرمستقیم از طریق PC به عنوان نمایشگر استفاده کنیم (روش غیرمستقیم).
SSH چیست؟
SSH (اس اس اچ) مخفف عبارت «Secure Shell» (پوسته امن) است. SSH رو میتونیم بگیم که، پروتکل طراحی شده برای برقراری اتصال امن میان کاربر (Client) و سرور (Server) هست.
اجرای روش غیرمستقیم
putty چیست؟
نرم افزاری جهت اتصال به PC و سخت افزار است که از این طریق میتونیم به صورت غیرمستقیم با محیط CommandLine سخت افزار ارتباط برقرار کنیم.
TighVNCViewer چیست؟
کاملا تعریقی مشابه با putty داره اما از این نرم افزار برای ارتباط گرافیکی با سخت افزار به صورت غیرمستقیم استفاده میشه.
WinSCP چیست؟
نرم افزاری جهت انتقال دیتا بین سخت افزار و PC استفاده میشه.
خب از اینجا به بعد کارمون میشه نصب نرم افزار های جانبی و اصلی دقیقا مثل یک مهندس کامپیوتر
امیدوارم که این نکته رو هم فراموش نکرده باشید که برای انجام این مراحل به اینترنت نیاز داریم.
مرحله اول نصب OPENCV
1 | sudo raspi-config دستور باز کردن فضای حافظه |
خب پس اینکه طبق شکل بالا عمل کردیم در نهایت گزینه Finish رو انتخاب میکنیم و سیستم رو ریست میکنیم (البته این فرایند به صورت خودکار اعمال میشه اما اگر به هر دلیلی نشد دستور sudo reboot رو اجرا میکنیم)
دقت کنید که حتما باید این فرایند انجام بگیره (از ما گفتن بود)
حالا برای اینکه ببینیم حافظه باز شده یا نه دستور زیر رو وارد میکنیم.
1 | df –h تست کردن فضای حافظه |
پس از اینکه دستور رو وارد کردیم باید ببینیم که سایز دایرکتوری (dev/root) برابر با سایز حافظه خارجی باشه در غیر اینصورت عملیات باز کردن فضای حافظه به درستی انجام نشده است.
خب حالا چندتا نرم افزاری که برای این پروژه به کارمون نمییاد رو هم حذف میکنیم چون فقط حافظه رو اشغال کردند و با پاک کردن این نرمافزارها حدودا 1گیگابایت فضا خالی میشه (اگه پاک هم نکردید مشکلی نداره، یه وقت فکر نکنید که حتما باید این کارو انجام بدید).
1 2 3 4 | sudo apt-get purge wolfram-engine sudo apt-get purge libreoffice* sudo apt-get clean sudo apt-get autoremove |
مرحله دوم نصب OPENCV
ابتدا سیستم رو توسط دستورات زیر update و upgrade میکنیم.
1 2 | sudo apt-get update sudo apt-get upgrade |
سپس ابزار های توسعه که شامل Cmake هستند رو نصب میکنیم.
1 | sudo apt-get install build-essential cmake unzip pkg-config |
حالا پس از نصب Cmake نوبت به نصب کتابخانههای جانبی opencv است.
1 2 3 | sudo apt-get install libjpeg-dev libpng-dev libtiff-dev sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev sudo apt-get install libxvidcore-dev libx264-dev |
حال نوبت به نصب GTK میرسه که با دستور زیر نصب میشه.
1 | sudo apt-get install libgtk-3-dev |
برای کاهش هشدارهای GTK از دستور زیر استفاده میکنیم.
1 | sudo apt-get install libcanberra-gtk* |
برای بهینه سازی کتابخانه opencv از دستور زیر استفاده میکنیم.
1 | sudo apt-get install libatlas-base-dev gfortran |
نصب هدرهای توسعه پایتون 3
1 | sudo apt-get install python3-dev |
حالا نوبت به نصب opencv رسیده برای اینکه نصبش کنیم ابتدا به سایت خود opencv میریم تا آخرین نسخه ای که منتشر شده رو دانلود کنیم. برای دانلود ابتدا با دستور زیر وارد قسمت home دایرکتوری میشیم.
1 | ~cd |
(ورژن 4 در این آموزش مدنظر ما است opencv).
دقت کنید که انتخاب اسم فایل کاملا دلخواه است و در اینجا اسم ها رو با نام های opencv.zip و opencv_contrib.zip انتخاب کردیم.
1 2 | wget -O opencv.zip https://github.com/opencv/opencv/archive/4.0.0.zip wget -O opencv_contrib.zip https://github.com/opencv/opencv_contrib/archive/4.0.0.zip |
همینطوری که میبینید فایل ها به صورت فشرده هستند و باید با دستور زیر فایلها رو از حالت فشرده خارج کنیم.
1 2 | unzip opencv.zip unzip opencv_contrib.zip |
با دستور زیر میتونیم اسم دایرکتوریها رو به اسم دلخواهی که مدنظرمونه تغییر بدیم.
1 2 | mv opencv-4.0.0 opencv mv opencv_contrib-4.0.0 opencv_contrib |
نکته ای که وجود داره اینکه میتونیم اسم دایرکتوری رو تغییر ندیم اما باید مسیر CMake path رو چک کنیم.
حال نوبت به تنظیم متغیر محلی پایتون 3 برای OpenCV4 رسیده که این کار رو با دستورات زیر انجام میدیم.
1 2 | wget https://bootstrap.pypa.io/get-pip.py sudo python3 get-pip.py |
اگر با متغییر های محلی در پایتون آشنایی ندارید توصیه میکنیم اینجا کلیک کنید.
متغیرهای محلی این اجازه رو به ما میدند که ورژن های مختلفی از نرم افزار پایتون و یا … رو به صورت ایزوله روی سیستم اجرا کنیم.
حالا میخوایم یک متغیر ایجاد کنیم ولی میتونید هر چقدر که نیاز داشتید برای پروژه های بعدیتون ایجاد کنید ( مسیر همینه)
1 2 | sudo pip install virtualenv virtualenvwrapper sudo rm -rf ~/get-pip.py ~/.cache/pip |
خب وقتش رسیده که فایل ~/.profile رو آپدیت کنیم. البته همینجوری که نمیشه آپدیت کرد نیاز به یک ادیتور متن مثل Nano یا Vi یا Vim برای این کار از دستور زیر استفاده میکنیم.
1 | Sudo nano ~/.profile |
بعدش خطوط زیر رو اضافه میکنیم که به دو روش میشه اینکار رو انجام داد.
روش اول:
1 2 3 4 | # virtualenv and virtualenvwrapper export WORKON_HOME=$HOME/.virtualenvs export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3 source /usr/local/bin/virtualenvwrapper.sh |
روش دوم:
1 2 3 4 | echo -e "\n# virtualenv and virtualenvwrapper" >> ~/.profile echo "export WORKON_HOME=$HOME/.virtualenvs" >> ~/.profile echo "export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3" >> ~/.profile echo "source /usr/local/bin/virtualenvwrapper.sh" >> ~/.profile |
حالا پس از اضافه کردن دستورات به ~/.profile لازمه که فایل رو به صورت Source در بیاریم.
1 | source ~/.profile |
و فایل opencv رو باید داخل یک متغیر محلی بریزیم که با دستور زیر این کارو انجام میدیم.
1 | mkvirtualenv cv -p python3 |
1 | workon cv |
در نهایت باید به شکل زیر برسیم.
برای انجام محاسبات ریاضی کتابخانه، نیاز به نصب ماژول numpy است که طبق دستور زیر این ماژول رو نصب میکنیم.
1 | pip install numpy |
سپس دستورات زیر رو وارد میکنیم.
1 2 3 4 5 6 7 8 9 10 11 12 13 | cd ~/opencv mkdir build cd build cmake -D CMAKE_BUILD_TYPE=RELEASE \ -D CMAKE_INSTALL_PREFIX=/usr/local \ -D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib/modules \ -D ENABLE_NEON=ON \ -D ENABLE_VFPV3=ON \ -D BUILD_TESTS=OFF \ -D OPENCV_ENABLE_NONFREE=ON \ -D INSTALL_PYTHON_EXAMPLES=OFF \ -D BUILD_EXAMPLES=OFF .. |
اگر مراحلی که گفتیم رو به درستی انجام داده باشیم باید به شکل های زیر برسیم.
اگر با همچین کادری مواجه شدیم به این معنیه که میتونیم از الگوریتمها استفاده کنیم ( یعنی تا این مرحله کارمون به درستی انجام شده).
اگر عملیاتی که از قبل انجام داده بودیم داخل متغیر محلی که تعریف کرده بودیم (متغیر cv) ریخته شده بود و همینطور اگر interpreter هم به پایتون 3 اشاره داشت. میشه گفت که تا این مرحله کارمون رو به درستی انجام دادیم.
نکته اساسی:
swap فضایی از هارده که مقدار کمی از سیستم عامل رو (OS) بهش اختصاص میدیم و این فضا خالی نگه داشته میشه تا در صورتی که فضای حافظه ram کم اومد و کار سنگینی انجام میداد سیستم هنگ نکنه. برای افزایش حجم swap هم باید دستورات زیر رو وارد کنیم.
1 2 3 4 5 6 7 8 9 | sudo nano /etc/dphys-swapfile # CONF_SWAPSIZE=100 CONF_SWAPSIZE=2048 افزایش حجم swap برای کار کردن با 4 هسته سخت افزار sudo /etc/init.d/dphys-swapfile stop sudo /etc/init.d/dphys-swapfile start ریست swap |
حالا نوبت به کامپایل opencv میرسه که این کار رو با دستور زیر انجام میدیم.
دقت کنید عددی که نوشته شده به تعداد هسته های سخت افزار اشاره میکنه که با چند هسته کامپایل کنه.
1 | make -j4 |
با این دستور هم opencv رو نصب میکنیم.
1 2 | sudo make install sudo ldconfig |
دقت کنید که پس از نصب، حجم swap رو به 100Mb باید برگردونیم.
حالا نوبت به آدرس دهی opencv به متغیر محلیه که ایجاد کردیم. دقت کنید آدرس رو حتما چک کنید که در چه آدرسی از سیستم نصب میشه چون اگر آدرس رو اشتباه وارد کنیم فرایند نصب به درستی انجام نخواهد شد (لطفا به مسیر نصب دقت کنید).
1 2 3 | cd ~/.virtualenvs/cv/lib/python3.5/site-packages/ ln -s /usr/local/python/cv2/python-3.5/cv2.cpython-35m-arm-linux-gnueabihf.so cv2.so cd ~ |
پس از انجام فرایندی که گفتیم حالا نوبت به تست opencv هست که ببینیم اصلا نصب شده یا نشده؟ برای این کار باید دستورات زیر رو اجرا کنیم.
1 2 | workon cv python |
پس از اجرای دستور بالا، باید محیط IDE پایتون رو باز کنیم و دستورات زیر رو اجرا کنیم.
1 2 | >>> import cv2 >>> cv2.__version__ |
اگر همه چیز درست باشه باید به خط زیر برسیم.
1 | '4.0.0' |
و در نهایت برای خارج شدن باید دستور زیر رو وارد کنیم.
1 | >>> exit() |
خب خسته نباشید اینم از نصب آخرین ورژن کتابخانه opencv که به راحتی برای پروژه های خودتون میتونید ازش استفاده کنید.
تمامی دستورات رو میتونید از اینجا دانلود کنید.[download id=”undefined”]
در قسمت بعد یک پروژه پردازش تصویر با این کتابخانه انجام خواهیم داد که شامل موارد زیر هستند
- اضافه کردن تصویر
- شناسایی تصویر
- استفاده از موتورهای شناسایی
با سیسوگ همراه باشید.
سلام وقت شما به خیر
در نصب opencv من تمام مراحل را بدون ایراد پشت سر میگذارم ولی هنگام کامپایل آن و اجرای کد make -je به ارور no targets specified and no makefile found برمیخورم.
ممنون میشم راهنمایی کنید
سلام و درود ممنون بایت اموزش خوبتان مشکلی دارم در مرحله build ایا باید کل دستوارت زیر را در nano قرار ده مستقما وارد نماییمم یا فقط 100 را به 2048 تغییر دهم و دستورات مابقی را در خود ترمینال باید
سلام
ببخشید که این بخش خوب توضیح داده نشده
توی قسمت نانو فقط باید 100 به 2048 تغییر کنه و باقی دستورات رو باید در ترمینال وارد کنید.