آموزش رزبری پای رزبری پای ماژول دوربین پردازش تصویر

پردازش تصویر OpenCV با رزبری پای – تکنیک‌های اندازه گیری و بهبود عملکرد

نوشته شده توسط آرش کدخدایی

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

 


اهداف اندازه گیری عملکرد


در پروژه‌های پردازش تصویر بسته به نوع حساسیت آن، در هر ثانیه عملیات‌های مختلفی انجام می‌گیرند. بنابراین لازم است کد بصورت بهینه از منابع سیستم استفاده کند تا با کندی یا حتی قطع شدن مواجه نشویم. بخصوص وقتی از رزبری پای استفاده میکنیم که منابع سیستم ما محدود هستند. به همین دلیل در این آموزش میخواهیم کدهای خود را بهبود عملکرد دهیم. برای اینکار از توابعی همچون cv2.getTickCount و cv2.getTickFrequency بهره خواهیم برد. البته این کار با ماژول تایم خود پایتون نیز امکان پذیر است ولی این توابع برای خود OpenCV بهینه شده‌اند.

 


اندازه گیری عملکرد با OpenCV


تابع cv2.getTickCount به ما تعداد چرخه‌های ساعت (clock-cycles) را می‌دهد. بدین معنی که در واقع زمان از شروع برنامه را به ما دهید. تابع cv2.getTickFrequency فرکانس چرخه‌های ساعت (تعداد چرخه های ساعت در ثانیه) را می‌دهد. با دقت به مثال زیر متوجه خواهید شد که چگونه می‌توان مدت زمان اجرای یک تابع یا یک تکه کد را اندازه گیری کرد:

حال به این مثال که می‌خواهیم در آن مدت زمان اجرای یک فیلترینگ را تست کنیم توجه کنید:

این فقط یک تست بود و زمان دریافتی خیلی ملاک نیست.

 


بهینه سازی پیش فرض در OpenCV


بسیاری از توابع OpenCV با SSE2, AVX و غیره جهت بهبود عملکرد ، بهینه می‌شوند. با این حال هنوز بعضی از کدها بهینه نشده‌اند. بنابراین اگر سیستم ما از این ویژگی‌ها پشتیبانی کند، باید از آنها بهره برداری کنیم. تقریبا تمام پردازنده‌های روزمره از آنها پشتیبانی می‌کنند. برای اطلاع از فعال بودن این قابلیت با تابع cv2.useOptimized() می‎توانید اطمینان حاصل پیدا کنید.

هماینطور که مشاهده می‌کنید، این قابلیت تقریبا سرعت توابع را دو برابر میکند.

 


تکنیک های بهینه سازی عملکرد


چندین تکنیک برای اجرای بهینه برنامه در پایتون وجود دارد. با انجام آنها برنامه مورد نظر بسیار روان‌تر و سریع‌تر اجرا خواهد شد.

  • اجتناب از به کار بردن حلقه بخصوص حلقه‌های تو در تو
  • الگوریتم‌ها و کدهای خود را برداری کنید. به این دلیل که OpenCV و Numpy برای توابع برداری بهینه شده‌اند.
  • از کش استفاده کنید.
  • هیچ موقع از آرایه‌ای کپی برداری نکنید این کار بشدت زمان بر می‌باشد.

حتی اگر باز هم برنامه شما کند بود از کتابخانه هایی همچون Cython برای تسریع استفاده کنید.

 

 

چنانچه در مراحل راه اندازی و انجام این پروژه با مشکل مواجه شدید، بدون هیچ نگرانی در انتهای همین پست، به صورت ثبت نظر سوالتان را مطرح کنید. من در سریع‌ترین زمان ممکن پاسخ رفع مشکل شما را خواهم داد. همچنین اگر ایرادی در کدها و یا مراحل اجرایی وجود دارند می‌توانید از همین طریق اطلاع رسانی کنید.

 


پروژه و دریافت بن ارسال رایگان


برای دریافت بن خرید از دانشجو کیت، کاربران بایستی با استفاده از وسایل این آموزش، پروژه را اجرا کرده و یا حتی مدار جدیدی تعریف کنید. سپس از اجرای کار فیلم گرفته و در شبکه‌های اجتماعی از جمله آپارات و اینستگرام، با هشتگ‌های دیجی_اسپارک دانشجوکیت digispark daneshjookit منتشر کنند. سپس از طریق بخش نظرات در ادامه همین آموزش، جهت دریافت بن خرید ارسال رایگان به ارزش ۱۲۰۰۰ تومان از دانشجو کیت، لینک را زیر همین پست ارسال کنید.

 

در پایان نظرات و پیشنهادات خود را با ما درمیان بگذارید و با اشتراک گذاری این آموزش در شبکه های اجتماعی , از وبسایت دیجی اسپارک حمایت کنید.

 

درباره نویسنده

آرش کدخدایی

یک تازه کار علاقه مند به تکنولوژی :)

تبادل نظر و رفع عیب با ثبت دیدگاه