مطمئنا بارها شده که اسم پردازش تصویر رو شنیده باشید و شاید خیلیهاتون این تصور رو داشتهباشید که کارکردن در این رشته بسیار کار سخت و پیچیدهای است. اما همیشه در واقعیت اونجوری که فکر میکنید نیست(البته با روشی که توضیح میدیم). اینم بگم کارکردن بهصورت حرفهای در این رشته برخلاف اسم زیبایی که داره بسیار سخت و پیچیده است. و در مقاله نمیخوایم دقیقا وارد اصل داستان پردازش تصویر بشیم بلکه میخوایم روشی رو ارائه بدیم که بتونیم بهراحتی توی پروژهها از پردازشتصویر استفادهکنیم. روشی که میخوایم استفادهکنیم، استفادهاز کتابخانه آماده 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 رو برای SSH پیشنهاد میکنیم و برای اجرای رابط گرافیکی روی نمایشگر PC از TighVNCViewer استفاده میکنیم. و برای جابهجایی فایلها بین سختافزار و PC نیازبه استفادهاز Flash نیست بلکه میتونیم از نرم افزار WinSCP استفادهکنیم. خب پساز اینکه تونستیم سختافزار رو به دو روشی که گفتیم(مستقیم و غیرمستقیم) اجرا کنیم. حالا باید در محیط CommandLine سیستمعامل رزبین دستوراتزیر رو بنویسیم. تا بتونیم آخرین ورژن کتابخانه opencv رو نصبکنیم.
- puttyچیست؟ نرمافزاری جهت اتصال به PC و سختافزار است که از اینطریق میتونیم بهصورت غیرمستقیم با محیط CommandLine سختافزار ارتباط برقرارکنیم.
- TighVNCViewerچیست؟ کاملا تعریقی مشابه با putty داره اما از این نرمافزار برای ارتباط گرافیکی با سختافزار بهصورت غیرمستقیم استفادهمیشه.
- WinSCP چیست؟ نرمافزاری جهت انتقال دیتا بین سختافزار و PC استفادهمیشه.
خب از اینجا به بعد کارمون میشه نصب نرمافزارهای جانبی و اصلی دقیقا مثل یک مهندس کامپیوتر امیدوارم که این نکته رو هم فراموش نکردهباشید که برای انجام این مراحل به اینترنت نیاز داریم.
مرحله اول نصب OPENCV
بازکردن فضای حافظه، برخلاف کامپیوترها با محدودیت فضای حافظه مواجه هستیم که باید فضای کل سیستم رو بازکنیم. برای اینکار طبق دستوراتزیر باید عملکنیم.
sudo raspi-config دستور باز کردن فضای حافظه
پساز اجرای دستوربالا باید طبقشکلزیر عملکنیم تا فضای حافظه رو بازکنیم.
خب پس اینکه طبق شکلبالا عمل کردیم درنهایت گزینه Finish رو انتخاب میکنیم و سیستم رو ریست میکنیم(البته این فرایند بهصورت خودکار اعمال میشه اما اگر به هردلیلی نشد دستور sudo reboot رو اجرا میکنیم) دقتکنید که حتما باید این فرایند انجامبگیره(از ما گفتن بود) حالا برای اینکه ببینیم حافظه بازشده یا نه دستور زیر رو وارد میکنیم.
df –h تست کردن فضای حافظه
پساز اینکه دستور رو وارد کردیم باید ببینیم که سایز دایرکتوری(dev/root) برابر با سایز حافظه خارجی باشه درغیراینصورت عملیات بازکردن فضای حافظه بهدرستی انجامنشدهاست. خب حالا چندتا نرمافزاری که برای این پروژه به کارمون نمییاد رو هم حذف میکنیم چون فقط حافظه رو اشغال کردند و با پاککردن این نرمافزارها حدودا 1گیگابایت فضا خالی میشه(اگه پاک هم نکردید مشکلینداره، یهوقت فکرنکنید که حتما باید این کارو انجامبدید).
sudo apt-get purge wolfram-engine sudo apt-get purge libreoffice* sudo apt-get clean sudo apt-get autoremove
مرحله دوم نصب OPENCV
ابتدا سیستم رو توسط دستورات زیر update و upgrade میکنیم.
sudo apt-get update sudo apt-get upgrade
سپس ابزارهای توسعه که شامل Cmake هستند رو نصب میکنیم.
sudo apt-get install build-essential cmake unzip pkg-config
حالا پساز نصب Cmake نوبت به نصب کتابخانههای جانبی opencv است.
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 میرسه که با دستور زیر نصب میشه.
sudo apt-get install libgtk-3-dev
برای کاهش هشدارهای GTK از دستور زیر استفاده میکنیم.
sudo apt-get install libcanberra-gtk*
برای بهینهسازی کتابخانه opencv از دستور زیر استفاده میکنیم.
sudo apt-get install libatlas-base-dev gfortran
نصب هدرهای توسعه پایتون۳
sudo apt-get install python3-dev
حالا نوبت به نصب opencv رسیده برای اینکه نصبش کنیم ابتدا به سایت خود opencv میریم تا آخرین نسخهای که منتشرشده رو دانلودکنیم. برای دانلود ابتدا با دستورزیر وارد قسمت home دایرکتوری میشیم.
~cd
و سپس ورژنی که مدنظرمون هست رو طبق دستوراتزیر دانلود میکنیم. (ورژن۴ در این آموزش مدنظر ما است opencv).
دقتکنید که انتخاب اسم فایل کاملا دلخواه است و در اینجا اسمها رو با نامهای opencv.zip و opencv_contrib.zip انتخاب کردیم.
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
همینطوری که میبینید فایل ها بهصورت فشرده هستند و باید با دستور زیر فایلها رو از حالت فشرده خارجکنیم.
unzip opencv.zip unzip opencv_contrib.zip
با دستور زیر میتونیم اسم دایرکتوریها رو به اسم دلخواهی که مدنظرمونه تغییربدیم.
mv opencv-4.0.0 opencv mv opencv_contrib-4.0.0 opencv_contrib
نکتهای که وجود داره اینکه میتونیم اسم دایرکتوری رو تغییرندیم اما باید مسیر CMake path رو چککنیم. حال نوبت به تنظیم متغیر محلی پایتون۳ برای OpenCV4 رسیده که اینکار رو با دستوراتزیر انجاممیدیم.
wget https://bootstrap.pypa.io/get-pip.py sudo python3 get-pip.py
اگر با متغیرهای محلی در پایتون آشنایی ندارید توصیه میکنیم اینجا کلیککنید. متغیرهای محلی این اجازه رو به ما میدند که ورژنهای مختلفی از نرمافزار پایتون و یا… رو بهصورت ایزوله روی سیستم اجراکنیم. حالا میخوایم یک متغیر ایجادکنیم ولی میتونید هرچقدر که نیازداشتید برای پروژههای بعدیتون ایجادکنید(مسیر همینه)
sudo pip install virtualenv virtualenvwrapper sudo rm -rf ~/get-pip.py ~/.cache/pip
خب وقتش رسیده که فایل ~/.profile رو آپدیت کنیم. البته همینجوری که نمیشه آپدیت کرد نیازبه یک ادیتور متن مثل Nano یا Vi یا Vim برای این کار از دستور زیر استفاده میکنیم.
Sudo nano ~/.profile
بعدش خطوط زیر رو اضافه میکنیم که به دو روش میشه اینکار رو انجامداد.
روش اول:
# virtualenv and virtualenvwrapper export WORKON_HOME=$HOME/.virtualenvs export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3 source /usr/local/bin/virtualenvwrapper.sh
روش دوم:
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 دربیاریم.
source ~/.profile
و فایل opencv رو باید داخل یک متغیر محلی بریزیم که با دستور زیر این کارو انجام میدیم.
mkvirtualenv cv -p python3
workon cv
درنهایت باید به شکلزیر برسیم.
برای انجام محاسبات ریاضی کتابخانه، نیازبه نصب ماژول numpy است که طبق دستورزیر این ماژول رو نصب میکنیم.
pip install numpy
سپس دستوراتزیر رو وارد میکنیم.
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 هم به پایتون۳ اشارهداشت. میشه گفت که تا این مرحله کارمون رو بهدرستی انجامدادیم.
نکته اساسی:
افزایش حجم swap swap فضایی از هارده که مقدارکمی از سیستمعامل رو (OS) بهش اختصاص میدیم و این فضا خالی نگهداشتهمیشه تا درصورتیکه فضای حافظه ram کم اومد و کارسنگینی انجام میداد سیستم هنگ نکنه. برای افزایش حجم swap هم باید دستوراتزیر رو واردکنیم.
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 میرسه که این کار رو با دستور زیر انجاممیدیم. دقتکنید عددی که نوشتهشده به تعداد هستههای سختافزار اشاره میکنه که با چند هسته کامپایل کنه.
make -j4
با این دستور هم opencv رو نصب میکنیم.
sudo make install sudo ldconfig
دقتکنید که پساز نصب، حجم swap رو به ۱۰۰Mb باید برگردونیم. حالا نوبت به آدرسدهی opencv به متغیر محلیه که ایجاد کردیم. دقتکنید آدرس رو حتما چککنید که در چه آدرسی از سیستم نصبمیشه چون اگر آدرس رو اشتباه وارد کنیم فرایند نصب به درستی انجام نخواهد شد(لطفا به مسیر نصب دقتکنید).
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 هست که ببینیم اصلا نصبشده یا نشده؟ برای اینکار باید دستورات زیر رو اجرا کنیم.
workon cv python
پساز اجرای دستوربالا، باید محیط IDE پایتون رو بازکنیم و دستوراتزیر رو اجراکنیم.
>>> import cv2 >>> cv2.__version__
اگر همهچیز درست باشه باید به خط زیر برسیم.
'4.0.0'
و درنهایت برای خارجشدن باید دستور زیر رو واردکنیم.
>>> exit()
خب خستهنباشید اینم از نصب آخرین ورژن کتابخانه opencv که بهراحتی برای پروژههای خودتون میتونید ازش استفادهکنید. تمامی دستورات رو میتونید از اینجا دانلودکنید.[download id=”undefined”] در قسمت بعد یک پروژه پردازش تصویر با این کتابخانه انجامخواهیمداد که شامل مواردزیر هستند:
- اضافهکردن تصویر
- شناسایی تصویر
- استفادهاز موتورهای شناسایی
با ما همراه باشید.
منبع: سیسوگ