پروژه بینایی ماشین با پایتون و opencv (دسته بندی و شمارش اشیا بر اساس رنگ)

25 بازدید
۱۴۰۴-۰۹-۲۲
7 دقیقه
  • نویسنده: یاسر عزیز زاده
  • درباره نویسنده: ---

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

اما قضیه از چه قرار است؟

یک پروژه بینایی ماشین که شما هم بعد از خواندن مقاله بگوئید که چقدر میتواند کاربردی باشد یا که نه!

با هم در محیط ژوپیتر نوت بوک یک فایل پایتون ایجاد میکنیم و با استفاده پکیج پردازش تصویر و بینایی ماشین بسیار محبوب opencv سعی میکنیم اشیا را بر اساس رنگشان دسته بندی و تعدادشان را شمارش کنیم و در صفحه، نمایش دهیم.

رنگ اشیا و تعدادشان را میتوانیم برای نمایش در یک lcd کوچک از طریق پورت سریال به آردوینو بفرستیم تا به نحوی نتیجه کارمان را در دنیای خارج از کامپیوترمان هم ببینیم. فکر نمیکنم در این مطلب این را هم بتوانیم جا دهیم شاید در یک مقاله جداگانه انجامش دادیم. اگر بنظرتان جالب آمد در کامنت ها بگوئید.

اگر نمیدانید چطور باید ژوپیتر نوت بوک را روی سیستم تان نصب کنید به مقاله زیر مراجعه کنید:

https://sisoog.com/ai-environment-setup-anaconda-numpy-tensorflow-jupyter/

حالا نیاز داریم که ماژول opencv را نصب کنیم. من از نسخه پایتون 3.9.12 و نسخه نامپای 1.21.5 استفاده میکنم. نسخه opencv سازگار با این دو، نسخه 4.5.2.54 است.

با زدن کد پایین در محیط دستوری ماژول نصب خواهد شد:

اگر روی لپتاپ کد میزنید احتمال قوی دوربین لپتاپ تان کار میکند پس مشکلی از بابت دریافت تصاویر بصورت ریل-تایم نخواهید داشت.

اگر روی کامپیوتر کد میزنید و وبکم دارید شما هم مثل مورد بالا مشکلی نخواهید داشت.

اگر با لپتاپ کار میکنید و وبکم دستگاه تان هم به هر دلیلی کار نمیکند و کامپیوترتان هم وبکم ندارد؛ اما موبایل اندرویدی دارید میتوانید نرم افزارهایی از اینترنت پیدا کنید که دوربین موبایل را با دستگاه ویندوزی به اشتراک میگذارد.

نرم افزار نمونه(من هم از این استفاده میکنم): 

https://soft98.ir/internet/1871-droidcam.html

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

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

هیچ بهانه ای قابل قبول نیست و هیچ کمبودی نباید ما را از کار کردن جا بزارد.

من از ژوپیتر نوت بوک برای کد زدن استفاده خواهم کرد. اما اگر ترجیح شما محیط دیگری است مشکلی نیست.

برای وارد شدن به محیط ژوپیتر کافی است در محیط دستوری ویندوز، دستور زیر را وارد کنید:

اگر از محیط دستوری ویندوز استفاده میکنید دقت کنید هنگام نصب مفسر پایتون گزینه add to path را فعال کرده باشید در غیر این صورت اگرچه پایتون را نصب کرده اید اما نخواهید توانست به صورت بالا  از ژوپیتر استفاده کنید.

با زدن دستور بالا یک سرور محلی روی سیستم تان اجرا خواهد شد و بطور خودکار محیط ژوپیتر روی مرورگر پیش فرض تان در یک صفحه بالا خواهد آمد چیزی شبیه به تصویر پایین:

 

پروژه بینایی ماشین با پایتون و opencv (دسته بندی و شمارش اشیا بر اساس رنگ)

روی new بزنید و python 3 را کلیک کنید.

پروژه بینایی ماشین با پایتون و opencv (دسته بندی و شمارش اشیا بر اساس رنگ)

در محیط باز شده با کلیک روی عبارت Untitled برای پروژه خود یک نام انتخاب کنید. دقت کنید پس از وارد کردن نام دلخواه از پسوند ipynb. استفاده کنید.

کار را با وارد کردن ماژول های مورد نیاز شروع میکنیم.

دقت کنید که هر تکه کد را در یک بلوک جداگانه بنویسید. برای اضافه کردن بلوک در محیط ژوپیتر از علامت + در نوار ابزار استفاده کنید.

ماژول های opencv و numpy را وارد پروژه کردیم. بلوک را با زدن دکمه ترکیبی شیفت/اینتر اجرا کنید اگر اروری رخ نداد به درستی وارد پروژه شده اند.

حالا دوربین یا وبکم را برای دریافت تصاویر ریل-تایم آماده میکنیم.

✅نکته

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

اما کسانی که میخواهند از دوربین موبایل شان به عنوان منبع دریافت تصویر استفاده کنند بایستی بعد از اجرای نرم افزار مربوطه در موبایل که لینک دانلودش را در بالا گذاشتم؛ یک آدرس وب را که در صفحه اصلی مشاهده میکنند را به عنوان پارامتر به متود راه اندازی دوربین بجای عدد صفر بدهند این کار را بصورت زیر انجام دهید و با خط اول کد عوض کنید:

شاید برای شما مفید باشد:
کارت داده برداری (DAQ) چیست؟ | از مفهوم تا کاربردها

فرض میکنیم میخواهیم روی دو رنگ سفید و سبز کار کنیم. که البته شما میتوانید به سلیقه خودتان روی رنگ های دیگر هم کار کنید.

ممکن است اشیا شامل طیف مختلفی از رنگ سبز یا سفید باشند یعنی یکی سبز پررنگ باشد دیگری کمی کمرنگ تر. که بصورت زیر تعریفشان خواهیم کرد.هر رنگ شامل یک آستانه بالا و یک آستانه پایین است.برای این کار از متود array در نامپای استفاده میکنیم.

از سیستم رنگی HSV برای تعریف رنگ ها استفاده میکنیم.

(سیستم های رنگی مختلفی وجود دارند مانند: RGB,BGR,HSV و …)اگر علاقه مند به اطلاعات بیشتر بودید به این مقاله یک سر بزنید: 

https://snowball.digital/blog/color-systems-cmyk-pantone-rgb-and-ral-explained

بلوک کد تعریف طیف رنگ ها:

میتوانیم شروع کنیم به نوشتن قسمت اصلی کد:کل الگوریتم قرار است داخل یک حلقه بینهایت (کسایی که الکترونیکی هستند: منظورم همان super loop است که در برنامه نویسی میکرو ها هم استفاده میشود)اجرا شود که فقط یک شرط خروج خواهد داشت که خواهیم توانست با فشردن یک کلید روی کیبورد فرایند را متوقف کنیم.

کل کد را داخل یک بلوک میاورم. و جلوی هر خط توضیحات مربوطه را مینویسم. 

شاید برای شما مفید باشد:
طراحی خط انتقال و کنترل امپدانس در آلتیوم - ویدئو آموزشی

کد ما آمده استفاده است با اجرا کردن بلوک میتوانید بصورت زنده کارکرد را ببینید.

یک پس زمینه با رنگ دلخواه مانند سیاه یا قرمز یا … ایجاد کنید و چند شی سفید رنگ(تکه های سفید کاغذ مثال خوبی است) رویش قرار دهید و دوربین را بصورت ثابت رویش بگیرید نتیجه را مشاهده خواهید کرد.

همچنین میتوانید اندازه شیی که تشخیص میدهید را داخل کد تنظیم کنید مثلا اشیا با اندازه بزرگتر از x را تشخیص دهید و کوچکتر ها را صرف نظر کنید.

این خط را داخل کد اصلی پیدا کنید و عدد 300 را تغییر دهید تا نتیجه را ببینید:

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

پروژه بینایی ماشین با پایتون و opencv (دسته بندی و شمارش اشیا بر اساس رنگ)

میز من قرمز رنگ است و تعدادی تکه کاغذ سفید روی میز قرار دادم و نتیجه اجرای کد در تصویر بالا قابل مشاهده است.

یک مثال هم برای کسانی که به دوربین دسترسی ندارند و یا به هر دلیلی میخواهند از تصاویر موجود در حافظه کامپیوترشان استفاده کنند کد به شکل زیر باید تغییر کند.

تصویر نمونه(دانلود و استفاده کنید.): 

پروژه بینایی ماشین با پایتون و opencv (دسته بندی و شمارش اشیا بر اساس رنگ)

نتیجه بعد از اجرای کد:
پروژه بینایی ماشین با پایتون و opencv (دسته بندی و شمارش اشیا بر اساس رنگ)

همانطور که در مثال میبینید اشیا سفید فارغ از شکل شی تشخیص و شمارش شده اند درحالی که از اشیا قرمز رنگ صرف نظر شده است.

حالا هر طور که دوست دارید پارامتر ها را تغییر دهید و نتایج جدید را مشاهده کنید.

برای ذخیره کردن تصویر خروجی از کد زیر استفاده کنید.

شاید برای شما مفید باشد:
راه‌اندازی ال‌سی‌دی 3.2 اینچ با استفاده از STM32 و emwin

دیدید که فقط از روش های پردازش تصویر استفاده کردیم. حالا اگر مسئله پیچیده تر شود و نتوان دیگر فقط با روش پردازش تصویر کار را انجام داد چه؟
مثلا اگر بخواهیم اشیا را بر اساس چیزی که هستند دسته بندی کنیم چه؟آن موقع میرویم سراغ هوش مصنوعی و چیزهایی مثل میوه یا حیوانات را دسته بندی میکنیم.

مطلب به پایان رسید نظرات تان را بنویسید اگر ایده جدیدی به سرتان زده یا …

اطلاعات
25
0
0
اشتراک و حمایت
profile نویسنده: یاسر عزیز زاده متخصص الکترونیک

مقالات بیشتر

slide

پالت | بازار خرید و فروش قطعات الکترونیک

قطعات اضافه و بدون استفاده همیشه یکی از سرباره‌‌های شرکتها و طراحان حوزه برق و الکترونیک بوده و هست. پالت سامانه‌ای است که بصورت تخصصی اجازه خرید و فروش قطعات مازاد الکترونیک را فراهم می‌کند. فروش در پالت
family

آیسی | موتور جستجوی قطعات الکترونیک

سامانه آی سی سیسوگ (Isee) قابلیتی جدید و کاربردی از سیسوگ است. در این سامانه سعی شده است که جستجو، انتخاب و خرید مناسب تر قطعات برای کاربران تسهیل شود. جستجو در آیسی
family

سیسوگ‌شاپ | فروشگاه محصولات Quectel

فروشگاه سیسوگ مجموعه ای متمرکز بر تکنولوژی های مبتنی بر IOT و ماژول های M2M نظیر GSM، GPS، LTE، NB-IOT، WiFi، BT و ... جایی که با تعامل فنی و سازنده، بهترین راهکارها انتخاب می شوند. برو به فروشگاه سیسوگ
family

سیسوگ فروم | محلی برای پاسخ پرسش‌های شما

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

سیکار | اولین مرجع متن باز ECU در ایران

بررسی و ارائه اطلاعات مربوط به ECU (واحد کنترل الکترونیکی) و نرم‌افزارهای متن باز مرتبط با آن برو به سیکار
become a writer
نویسنده شو !

سیسوگ با افتخار فضایی برای اشتراک گذاری دانش شماست. برای ما مقاله بنویسید.

ارسال مقاله
become a writer
نویسنده شو !

سیسوگ با افتخار فضایی برای اشتراک گذاری دانش شماست. برای ما مقاله بنویسید.

ارسال مقاله

خانواده سیسوگ

سیسوگ‌شاپ

فروشگاه محصولات Quectel

پالت
سیسوگ فروم

محلی برای پاسخ پرسش‌های شما

سیسوگ جابز
سیسوگ
سیسوگ فروم
سی‌کار

اولین مرجع متن باز ECU در ایران

سیسوگ مگ
آی‌سی

موتور جستجوی قطعات الکترونیکی

سیسوگ آکادمی
پالت

بازار خرید و فروش قطعات الکترونیک

دیدگاه ها

become a writer
نویسنده شو !

سیسوگ با افتخار فضایی برای اشتراک گذاری دانش شماست. برای ما مقاله بنویسید.

ارسال مقاله
become a writer
نویسنده شو !

سیسوگ با افتخار فضایی برای اشتراک گذاری دانش شماست. برای ما مقاله بنویسید.

ارسال مقاله