فهرست مطالب:

شمارش شی Raspberry Pi: 5 مرحله
شمارش شی Raspberry Pi: 5 مرحله

تصویری: شمارش شی Raspberry Pi: 5 مرحله

تصویری: شمارش شی Raspberry Pi: 5 مرحله
تصویری: أرخص واصغر كمبيوتر في العالم -راسبيري باي - raspberry pi - ايه هو الراسبيري باي واستخدامه ومميزاته 2024, جولای
Anonim
شمارش اشیاء تمشک پای
شمارش اشیاء تمشک پای

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

با توجه به اینکه چارچوب ها و ابزارهای دید رایانه چقدر پیشرفته و قابل دسترسی هستند ، برنامه توصیف شده در این مقاله به خوبی مناسب است: استفاده از یک Raspberry PI ساده و یک چارچوب بینایی رایانه ای رایگان و منبع باز به نام OpenCV برای شمارش اشیاء در حال حرکت ، به طور دقیق تر اجسام در یک منطقه تحت نظارت خاص وارد و خارج می شوند.

مرحله 1: عمیق تر شدن: چگونه می توان حرکت جسم را در جریان تصویر تشخیص داد؟

عمیق تر شدن: چگونه می توان حرکت جسم را در جریان تصویر تشخیص داد؟
عمیق تر شدن: چگونه می توان حرکت جسم را در جریان تصویر تشخیص داد؟

اکنون وقت آن است که در زمینه پردازش تصویر عمیق تر عمل کنیم:

چگونه می توان تصاویر جریان وب کم را دریافت کرد و تشخیص داد که چیزی به آنجا منتقل شده است

شامل پنج مرحله است:

مرحله 1: برای برجسته کردن جسم در حرکت

همانطور که در فیزیک کلاسیک تعریف شده است ، یک مرجع برای استنباط اینکه چیزی در حال حرکت است یا در حالت ایستاده است ضروری است. در اینجا ، برای تعیین اینکه آیا چیزی جابجا شده است ، تقریباً یکسان است: هر فریم ضبط شده از جریان وب کم با یک قاب مرجع مقایسه می شود. اگر چیزی متفاوت است ، چیزی جابجا شده است. آنطور که به نظر می رسد ساده است.

این چارچوب مرجع باید در کامل ترین شرایط (برای مثال هیچ چیز متحرک) ضبط شود. در دنیای پردازش تصویر ، این مقایسه بین یک قاب گرفته شده و یک قاب مرجع شامل تکنیکی به نام تفریق پس زمینه است. تفریق پس زمینه شامل این است که اطلاعات رنگ پیکسل به پیکسل را از قاب ضبط شده و قاب مرجع کم کنید. بنابراین ، تصویر حاصله از این موفقیت فقط آنچه بین این دو فریم (یا آنچه حرکت کرده یا حرکت کرده است) متفاوت است و سایر موارد در تصویر سیاه خواهد بود (رنگ صفر در خاکستری) پیکسل مقیاس) مهم: شرایط روشنایی و کیفیت تصویر گرفته شده از دوربین وب (به دلیل کیفیت حسگرهای ضبط) می تواند در قاب به فریم کمی متفاوت باشد. این بدان معناست که "قسمت های مساوی" از قاب مرجع و فریم های دیگر پس از تفریق پس زمینه کاملاً سیاه نمی شوند. با وجود این رفتار ، در مراحل بعدی پردازش تصویر در این پروژه پیامدهای جدی وجود ندارد.

به منظور به حداقل رساندن زمان پردازش تصویر ، قبل از انجام فرعی سازی پس زمینه ، قاب گرفته شده و قاب مرجع به تصویر مقیاس خاکستری تبدیل می شوند. اما چرا؟ این یک مسئله کارآیی محاسباتی است: تصویری که چندین رنگ (تصویر رنگی) ارائه می دهد دارای سه اطلاعات در هر پیکسل است: اجزای رنگ قرمز ، آبی و سبز (استاندارد RGB قدیمی اما طلایی). بنابراین ، از نظر ریاضی ، هر پیکسل را می توان به عنوان یک آرایه سه ارزش تعریف کرد ، که هر یک نمایانگر یک جزء رنگی است. بنابراین ، با گسترش آن به کل تصویر ، تصویر نهایی در واقع ترکیبی از سه جزء تصویر است: اجزای تصویر قرمز ، آبی و سبز.

برای پردازش آن ، کار زیادی لازم است! با این حال ، در تصاویر مقیاس خاکستری ، هر پیکسل فقط یک اطلاعات رنگی دارد. بنابراین ، پردازش یک تصویر رنگی سه برابر کندتر از مورد تصویر در مقیاس خاکستری است (حداقل سه بار ، بسته به تکنیک مورد نظر). و موارد دیگر: برای برخی از اهداف (مانند این پروژه) ، پردازش همه رنگها ضروری یا مهم نیست. بنابراین ، ما به این نتیجه رسیدیم: استفاده از تصاویر در مقیاس خاکستری برای اهداف پردازش تصویر بسیار توصیه می شود. پس از تخلیه پس زمینه ، لازم است فیلتر Gaussian Blur اعمال شود.

فیلتر Gaussian Blur که روی تصویر کم شده در پس زمینه اعمال می شود ، تمام خطوط شیء متحرک متحرک را صاف می کند. مطمئناً در مراحل بعدی پردازش تصویر کمک کننده خواهد بود.

مرحله 2: دوتایی سازی

دوتایی سازی
دوتایی سازی

در بیشتر موارد پردازش تصویر ، دوتایی تقریباً یک مرحله اجباری پس از برجسته سازی اشیاء / ویژگی های یک تصویر است. دلیل: در یک تصویر باینری ، هر رنگ پیکسل فقط می تواند دو مقدار را در نظر بگیرد: 0x00 (سیاه) یا 0xFF (سفید). این امر به پردازش تصویر کمک زیادی می کند تا در مراحل بعدی به "قدرت محاسباتی" کمتری برای اعمال تکنیک های پردازش تصویر نیاز باشد. دوتایی شدن را می توان با مقایسه هر رنگ پیکسل تصویر در مقیاس خاکستری با یک آستانه مشخص انجام داد. اگر مقدار رنگ پیکسل بیشتر از آستانه باشد ، این رنگ پیکسل مقدار سفید (0xFF) را در نظر می گیرد و اگر مقدار رنگ پیکسل کمتر از آستانه باشد ، این رنگ پیکسل مقدار سیاه (0x00) را در نظر می گیرد. متأسفانه ، انتخاب مقدار آستانه چندان آسان نیست. این بستگی به عوامل محیطی مانند شرایط روشنایی دارد. انتخاب اشتباه مقدار آستانه می تواند تمام مراحل بعدی را خراب کند. بنابراین ، من اکیداً توصیه می کنم قبل از هرگونه اقدام دیگر ، آستانه ای را در پروژه برای پرونده خود تنظیم کنید. این مقدار آستانه باید اطمینان حاصل کند که جسم متحرک در تصویر باینری نشان داده می شود. در مورد من ، پس از انتخاب آستانه مناسب ، آنچه را که در شکل 5 می بینید به دست می آورد.

شکل 5 - تصویر باینری

مرحله 3: گشاد شدن

تا به حال ، امکان تشخیص اجسام متحرک ، برجسته سازی آنها و اعمال دوتایی وجود داشت ، که منجر به تصویری کاملاً واضح از جسم متحرک می شد (= تصویر کاملاً واضح از شی برای اهداف پردازش تصویر). آماده سازی برای شمارش اشیا تقریباً انجام شده است. "تقریبا" در اینجا به این معنی است که قبل از حرکت ، تعدادی تنظیمات خوب باید انجام شود. در این مرحله ، احتمال وجود "حفره" در اجسام (توده های سیاه پیکسل در جسم برجسته سفید) وجود دارد. این سوراخ ها می توانند هر چیزی باشند ، از شرایط نوری خاص گرفته تا قسمتی از شکل شی. هنگامی که سوراخ ها می توانند اجسام کاذب را در داخل اجسام واقعی "تولید کنند" (بسته به وسعت و مکان آنها) ، عواقب وجود حفره ها در یک تصویر می تواند برای شمارش اشیا فاجعه بار باشد. راهی برای از بین بردن این حفره ها استفاده از تکنیک پردازش تصویر به نام Dilate است. از این استفاده کنید و سوراخ ها برطرف می شوند.

مرحله 4: جستجوی خطوط (و Centroids آن)

جستجوی خطوط (و Centroids آن)
جستجوی خطوط (و Centroids آن)

در این مرحله ، ما اشیاء برجسته را داریم ، هیچ حفره ای در داخل آن وجود ندارد و آماده کار بعدی هستیم: جستجوی خطوط (و مرکزهای آن). در OpenCV منابعی برای تشخیص خطوط خودکار وجود دارد ، اما خطوط شناسایی شده باید عاقلانه انتخاب شوند (فقط برای انتخاب شی یا اشیاء واقعی). بنابراین ، معیار تشخیص خطوط ، مساحت جسم است که بر حسب پیکسل اندازه گیری می شود. اگر یک کانتور دارای مساحت بیشتری از حد مجاز (در نرم افزار پیکربندی شده است) باشد ، بنابراین باید شمارش شود. انتخاب محدوده/معیارهای این منطقه بسیار مهم است و انتخاب بد در اینجا به معنای شمارش اشتباه است. شما باید برخی از مقادیر محدوده مقدار منطقه را امتحان کنید و بررسی کنید که چه چیزی برای استفاده شما مناسب تر است. نگران نباشید ، پیدا کردن / تنظیم این محدودیت ها سخت نیست. هنگامی که همه اشیاء موجود در تصویر انتخاب شدند ، مرحله بعدی رسم یک مثلث روی آن است (این مثلث باید شامل یک جسم شناسایی شده داخل آن باشد). و مرکز این مستطیل… است. مرکز شیء! شاید فکر می کنید "مشکل اصلی این سانترید چیست؟" ، درست است؟ در اینجا پاسخ شما این است: مهم نیست که شکل جسم چقدر بزرگ یا چگونه باشد ، حرکت آن مانند مرکز است. به عبارت دیگر: این نقطه ساده به نام centroid نشان دهنده تمام حرکت جسم است. اکنون شمارش را بسیار ساده کرده است ، اینطور نیست؟ تصویر زیر را مشاهده کنید (شکل 6) ، جایی که مرکز جسم به عنوان یک نقطه سیاه نشان داده شده است.

مرحله 5: حرکت Centorid و شمارش اشیاء

اختتامیه بزرگ: مختصات مرکز شیء را با مختصات خطوط ورود و خروج مقایسه کنید و الگوریتم شمارش را که قبلاً توضیح داده شد اعمال کنید. و شمارش اجسام متحرک وجود خواهد داشت!

همانطور که در ابتدای این پست نشان داده شده است ، در اینجا پروژه در عمل آمده است:

توصیه شده: