مطمئنا بارها شده که اسم پردازش تصویر رو شنیده باشید و شاید خیلیهاتون این تصور رو داشته باشید که کار کردن در این رشته بسیار کار سخت و پیچیدهای است. اما همیشه در واقعیت اونجوری که فکر میکنید نیست (البته با روشی که توضیح میدیم). اینم بگم کار کردن به صورت حرفهای در این رشته برخلاف اسم زیبایی که داره بسیار سخت و پیچیده است. و در مقاله نمیخوایم دقیقا وارد اصل داستان پردازش تصویر بشیم بلکه میخوایم روشی رو ارائه بدیم که بتونیم به راحتی توی پروژهها از پردازش تصویر استفاده کنیم.
روشی که میخوایم استفاده کنیم، استفاده از کتابخانه آماده opencv است که در این قسمت میخوایم از همین ابتدا به صورت کاملا عملی شروع کنیم و تصمیم گرفتیم که این کتابخانه رو روی سیستم عامل رزبین نصب کنیم البته بگم خیلی، سیستم عامل فرقی نداره ( چیزی که مهمه فرآیند نصبه). دلیل انتخاب رزبین هم این بوده که بین مهندسین الکترونیک مقبولیت بیشتری رو داره و میشه گفت کارکردن باهاش برای اول کار سادهتره.
و همینطور از زبان برنامهنویسی Python و سخت افزار RaspberryPi model3B در این آموزش و آموزشهای بعدی استفاده میکنیم.
نکتهای که قبل از نصب مهمه و باید اطلاع داشته باشیم. اینکه کتابخانه روی چه سیسم عاملهایی کار میکنه.
سیستم عاملهایی که از این کتابخانه پشتیبانی می کنند شامل:
نصب سیستم عاملی که مدنظرتون است، برای این کار به سایت 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
C
1
sudo raspi-configدستوربازکردنفضایحافظه
پس از اجرای دستور بالا باید طبق شکل زیر عمل کنیم تا فضای حافظه رو باز کنیم.
خب پس اینکه طبق شکل بالا عمل کردیم در نهایت گزینه Finish رو انتخاب میکنیم و سیستم رو ریست میکنیم (البته این فرایند به صورت خودکار اعمال میشه اما اگر به هر دلیلی نشد دستور sudo reboot رو اجرا میکنیم)
دقت کنید که حتما باید این فرایند انجام بگیره (از ما گفتن بود)
حالا برای اینکه ببینیم حافظه باز شده یا نه دستور زیر رو وارد میکنیم.
C++
1
df–hتستکردنفضایحافظه
پس از اینکه دستور رو وارد کردیم باید ببینیم که سایز دایرکتوری (dev/root) برابر با سایز حافظه خارجی باشه در غیر اینصورت عملیات باز کردن فضای حافظه به درستی انجام نشده است.
خب حالا چندتا نرم افزاری که برای این پروژه به کارمون نمییاد رو هم حذف میکنیم چون فقط حافظه رو اشغال کردند و با پاک کردن این نرمافزارها حدودا 1گیگابایت فضا خالی میشه (اگه پاک هم نکردید مشکلی نداره، یه وقت فکر نکنید که حتما باید این کارو انجام بدید).
C++
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 میکنیم.
C++
1
2
sudo apt-get update
sudo apt-get upgrade
سپس ابزار های توسعه که شامل Cmake هستند رو نصب میکنیم.
حال نوبت به نصب GTK میرسه که با دستور زیر نصب میشه.
C++
1
sudo apt-get install libgtk-3-dev
برای کاهش هشدارهای GTK از دستور زیر استفاده میکنیم.
C++
1
sudo apt-get install libcanberra-gtk*
برای بهینه سازی کتابخانه opencv از دستور زیر استفاده میکنیم.
C++
1
sudo apt-get install libatlas-base-dev gfortran
نصب هدرهای توسعه پایتون 3
C++
1
sudo apt-get install python3-dev
حالا نوبت به نصب opencv رسیده برای اینکه نصبش کنیم ابتدا به سایت خود opencv میریم تا آخرین نسخه ای که منتشر شده رو دانلود کنیم. برای دانلود ابتدا با دستور زیر وارد قسمت home دایرکتوری میشیم.
C++
1
~cd
و سپس ورژنی که مدنظرمون هست رو طبق دستورات زیر دانلود میکنیم.
(ورژن 4 در این آموزش مدنظر ما است opencv).
دقت کنید که انتخاب اسم فایل کاملا دلخواه است و در اینجا اسم ها رو با نام های opencv.zip و opencv_contrib.zip انتخاب کردیم.
همینطوری که میبینید فایل ها به صورت فشرده هستند و باید با دستور زیر فایلها رو از حالت فشرده خارج کنیم.
C++
1
2
unzip opencv.zip
unzip opencv_contrib.zip
با دستور زیر میتونیم اسم دایرکتوریها رو به اسم دلخواهی که مدنظرمونه تغییر بدیم.
C++
1
2
mv opencv-4.0.0opencv
mv opencv_contrib-4.0.0opencv_contrib
نکته ای که وجود داره اینکه میتونیم اسم دایرکتوری رو تغییر ندیم اما باید مسیر CMake path رو چک کنیم.
حال نوبت به تنظیم متغیر محلی پایتون 3 برای OpenCV4 رسیده که این کار رو با دستورات زیر انجام میدیم.
C++
1
2
wget https://bootstrap.pypa.io/get-pip.py
sudo python3 get-pip.py
اگر با متغییر های محلی در پایتون آشنایی ندارید توصیه میکنیم اینجا کلیک کنید.
متغیرهای محلی این اجازه رو به ما میدند که ورژن های مختلفی از نرم افزار پایتون و یا … رو به صورت ایزوله روی سیستم اجرا کنیم.
حالا میخوایم یک متغیر ایجاد کنیم ولی میتونید هر چقدر که نیاز داشتید برای پروژه های بعدیتون ایجاد کنید ( مسیر همینه)
C++
1
2
sudo pip install virtualenv virtualenvwrapper
sudo rm-rf~/get-pip.py~/.cache/pip
خب وقتش رسیده که فایل ~/.profile رو آپدیت کنیم. البته همینجوری که نمیشه آپدیت کرد نیاز به یک ادیتور متن مثل Nano یا Vi یا Vim برای این کار از دستور زیر استفاده میکنیم.
C++
1
Sudo nano~/.profile
بعدش خطوط زیر رو اضافه میکنیم که به دو روش میشه اینکار رو انجام داد.
روش اول:
C++
1
2
3
4
# virtualenv and virtualenvwrapper
exportWORKON_HOME=$HOME/.virtualenvs
exportVIRTUALENVWRAPPER_PYTHON=/usr/bin/python3
source/usr/local/bin/virtualenvwrapper.sh
روش دوم:
C++
1
2
3
4
echo-e"\n# virtualenv and virtualenvwrapper">>~/.profile
اگر مراحلی که گفتیم رو به درستی انجام داده باشیم باید به شکل های زیر برسیم.
اگر با همچین کادری مواجه شدیم به این معنیه که میتونیم از الگوریتمها استفاده کنیم ( یعنی تا این مرحله کارمون به درستی انجام شده).
اگر عملیاتی که از قبل انجام داده بودیم داخل متغیر محلی که تعریف کرده بودیم (متغیر cv) ریخته شده بود و همینطور اگر interpreter هم به پایتون 3 اشاره داشت. میشه گفت که تا این مرحله کارمون رو به درستی انجام دادیم.
نکته اساسی:
افزایش حجم swap
swap فضایی از هارده که مقدار کمی از سیستم عامل رو (OS) بهش اختصاص میدیم و این فضا خالی نگه داشته میشه تا در صورتی که فضای حافظه ram کم اومد و کار سنگینی انجام میداد سیستم هنگ نکنه. برای افزایش حجم swap هم باید دستورات زیر رو وارد کنیم.
C++
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 میرسه که این کار رو با دستور زیر انجام میدیم.
دقت کنید عددی که نوشته شده به تعداد هسته های سخت افزار اشاره میکنه که با چند هسته کامپایل کنه.
C++
1
make-j4
با این دستور هم opencv رو نصب میکنیم.
C++
1
2
sudo make install
sudo ldconfig
دقت کنید که پس از نصب، حجم swap رو به 100Mb باید برگردونیم.
حالا نوبت به آدرس دهی opencv به متغیر محلیه که ایجاد کردیم. دقت کنید آدرس رو حتما چک کنید که در چه آدرسی از سیستم نصب میشه چون اگر آدرس رو اشتباه وارد کنیم فرایند نصب به درستی انجام نخواهد شد (لطفا به مسیر نصب دقت کنید).
سلام و درود ممنون بایت اموزش خوبتان مشکلی دارم در مرحله build ایا باید کل دستوارت زیر را در nano قرار ده مستقما وارد نماییمم یا فقط 100 را به 2048 تغییر دهم و دستورات مابقی را در خود ترمینال باید
ریموت کنترل امروزه کاربرد زیادی پیدا کرده است؛ از ریموتهای درب بازکن تا ریموتهای دزدگیر و کنترل روشنایی همه از یک اصول اولیه پیروی میکنند و آنهم ارسال اطلاعات بهصورت بیسیم است....
امنیت همیشه و در همهی اعصار، مقولهی مهم و قابلتوجه ای بوده و همیشه نوع بشر به دنبال امنیت بیشتر، دست به ابداعات و اختراعات گوناگونی زده است. ریموت کنترل یکی از این اختراعات است. در این مقاله، به بررسی امنیت انواع ریموتهای کنترل خواهیم پرداخت....
سلام و درود ممنون بایت اموزش خوبتان مشکلی دارم در مرحله build ایا باید کل دستوارت زیر را در nano قرار ده مستقما وارد نماییمم یا فقط 100 را به 2048 تغییر دهم و دستورات مابقی را در خود ترمینال باید
سلام
ببخشید که این بخش خوب توضیح داده نشده
توی قسمت نانو فقط باید 100 به 2048 تغییر کنه و باقی دستورات رو باید در ترمینال وارد کنید.