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

دستگاه مرتب سازی گوجه فرنگی با رزبری پای

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

استودیوی Edge Impulse یک پلتفرم یادگیری ماشین است که به توسعه دهندگان این امکان را می دهد تا مدل های آموزش دیده با یادگیری ماشین را در فضای ابری تولید کنند و آنها را روی میکروکنترلرها (مانند آردوینو و STM32) یا رایانه های تک بردی مانند Raspberry Pi مستقر کنند. ما چند مدل سفارشی را با استفاده از Tensorflow برای تشخیص ماسک صورت با رزبری پای آموزش داده‌ایم.

شروع کار با Edge Impulse

برای آموزش یک مدل یادگیری ماشین با Edge Impulse در Raspberry Pi، یک حساب Edge Impulse ایجاد کنید، حساب خود را تأیید کنید و سپس یک پروژه جدید را شروع کنید.

شروع کار با Edge Impulse

نصب Edge Impulse روی رزبری پای

اکنون برای استفاده از Edge Impulse در رزبری پای، ابتدا باید Edge Impulse و وابستگی‌های آن را روی Raspberry Pi نصب کنید. برای نصب Edge Impulse روی Raspberry از دستورات زیر استفاده کنید:

curl -sL https://deb.nodesource.com/setup_12.x | sudo bash -
sudo apt install -y gcc g++ make build-essential nodejs sox gstreamer1.0-tools gstreamer1.0-plugins-good gstreamer1.0-plugins-base gstreamer1.0-plugins-base-apps
sudo npm install edge-impulse-linux -g --unsafe-perm

اکنون از دستور زیر برای اجرای Edge Impulse استفاده کنید:

edge-impulse-linux

از شما خواسته می شود که به حساب Edge Impulse خود وارد شوید. سپس از شما خواسته می شود که یک پروژه را انتخاب کنید و در نهایت یک میکروفون و دوربین را برای اتصال به پروژه انتخاب کنید.

نصب Edge Impulse روی رزبری پای

اکنون که Edge Impulse روی Raspberry Pi اجرا می‌شود، برای جمع‌آوری تصاویر باید مدل Pi camera را به Pi متصل کنیم. اتصال دوربین به رزبری پای را مطابق تصویر زیر انجام دهید:

اتصال دوربین به رزبری پای

ایجاد مجموعه داده

همانطور که قبلا ذکر شد، ما از Edge Impulse Studio برای آموزش مدل طبقه بندی تصاویر خود استفاده می کنیم. برای آن، ما باید مجموعه داده ای را جمع آوری کنیم که دارای نمونه هایی از اشیاء است که می خواهیم با استفاده از دوربین Pi طبقه بندی کنیم. از آنجایی که هدف این است که گوجه فرنگی قرمز و گوجه سبز را از هم جدا کنید، باید چند نمونه تصویر از گوجه قرمز و گوجه سبز جمع آوری کنید تا بتواند بین این دو تمایز قائل شود.

می‌توانید نمونه‌ها را با استفاده از تلفن همراه یا برد Raspberry Pi جمع‌آوری کنید، یا می‌توانید مجموعه داده‌ای را به Edge Impulse Studio وارد کنید. ساده ترین راه برای بارگذاری نمونه ها در Edge Impulse استفاده از تلفن همراه است. برای این کار باید موبایل خود را به Edge Impulse وصل کنید.

برای اتصال تلفن همراه خود، روی «Device» و سپس روی «Connect a New Device» کلیک کنید.

ایجاد مجموعه داده در Edge Impulse Studio

اکنون در پنجره بعدی بر روی “Use your Mobile Phone” کلیک کنید و یک کد QR ظاهر می شود. با استفاده از Google Lens یا سایر برنامه‌های اسکنر کد QR، کد QR را با تلفن همراه خود اسکن کنید. با این کار گوشی شما به استودیوی Edge Impulse متصل می شود.

اگر در مورد این مطلب سوالی دارید در قسمت نظرات بپرسید

دریافت داده ها در Edge Impulse

با اتصال تلفن خود به Edge Impulse Studio، اکنون می توانید نمونه های خود را بارگیری کنید. برای بارگیری نمونه ها، روی «Data acquisition» کلیک کنید. اکنون در صفحه Data acquisition، نام برچسب را وارد کرده و «Camera» را به عنوان سنسور انتخاب کنید. روی “Start sampling” کلیک کنید.

دریافت داده ها از دوربین موبایل

با این کار تصویر گوجه فرنگی در ابر Edge Impulse ذخیره می شود. 50 تا 60 عکس از زوایای مختلف بگیرید. پس از بارگذاری نمونه ها، اکنون برچسب را روی “Green Tomato” تنظیم کنید و 50 تا 60 تصویر دیگر را جمع آوری کنید. به غیر از نمونه‌های گوجه‌فرنگی سبز و قرمز، برای موقعیت‌های نامشخص نمونه‌هایی را نیز جمع‌آوری کنید تا در قاب چیزی نباشد.

نمونه گوجه سبز و قرمز در Edge

این نمونه ها برای آموزش ماژول است که در مراحل بعدی داده های تست را جمع آوری می کنیم. داده های آزمون باید حداقل 20 درصد داده های آموزشی باشد.

آموزش مدل تشخیص گوجه سبز و قرمز

همانطور که مجموعه داده ما آماده است، اکنون یک impulse برای داده های خود ایجاد می کنیم. برای آن به صفحه “Create impulse” بروید.

آموزش مدل تشخیص گوجه سبز و قرمز

اکنون در صفحه «Create impulse»، روی «Add a processing block» کلیک کنید و سپس روی دکمه «Add» در کنار بلوک «Image» کلیک کنید تا یک بلوک پردازشی اضافه کنید که داده‌های تصویر را عادی می‌کند و عمق رنگ را کاهش می‌دهد. پس از آن، بر روی بلوک “Transfer Learning (images)” کلیک کنید تا یک مدل از پیش آموزش دیده در نظر گرفته شده برای طبقه بندی تصویر را بگیرید، که بر روی آن، آموزش انتقال را انجام می دهیم تا آن را برای کار تشخیص گوجه فرنگی تنظیم کنیم. سپس بر روی “Save Impulse” کلیک کنید.

گزینه Save Impulse

در مرحله بعد، به زیر آیتم “images” زیر آیتم منوی “Impulse design” بروید و سپس روی تب “Generate Features” کلیک کنید و سپس دکمه سبز “Generate features” را بزنید.

generate تصویر در edge impulse

پس از آن، بر روی زیر آیتم “Transfer Learning” در زیر آیتم “Impulse design” کلیک کنید و دکمه “Start training” را در پایین صفحه بزنید. در اینجا از MobileNetV2 پیش فرض استفاده کردیم. در صورت تمایل می توانید از مدل های آموزشی مختلف استفاده کنید.

انتقال یادگیری در edge impulse

آموزش مدل کمی زمان می برد. پس از آموزش مدل، عملکرد آموزشی را نشان می دهد. برای من دقت 75 درصد و ضرر 0.58 بود. اکنون می توانیم مدل آموزش دیده خود را آزمایش کنیم. برای این کار، روی تب «Live classification» در منوی سمت چپ کلیک کنید و سپس می توانید از دوربین Raspberry Pi برای گرفتن نمونه تصاویر استفاده کنید.

استقرار مدل آموزش دیده در رزبری پای

هنگامی که فرآیند آموزش کامل شد، می‌توانیم مدل طبقه‌بندی تصویر Edge impulse را در Raspberry Pi مستقر کنیم. دو راه برای انجام این کار وجود دارد، یکی استفاده از دستور edge impulse در لینوکس است. این به طور خودکار مدل آموزش دیده را با شتاب کامل سخت افزاری کامپایل می کند، مدل را در Raspberry Pi دانلود می کند و سپس بدون نوشتن هیچ کدی شروع به طبقه بندی می کند و راه دیگر دانلود فایل مدل و سپس استفاده از مثال Python SDK برای طبقه بندی تصاویر است.

روش اول بسیار ساده است، به پنجره Terminal بروید و دستور زیر را وارد کنید:

edge-impulse-linux-runner

اگر دستور edge-impulse-linux از قبل اجرا شده است، Control-C را بزنید تا متوقف شود و سپس دستور بالا را وارد کنید. و اگر قبلاً پروژه ای را اختصاص داده اید و می خواهید آن را برای شروع یک پروژه جدید پاک کنید، از دستور زیر استفاده کنید:

edge-impulse-runner --clean

این کار Raspberry Pi را به Edge Impulse Cloud متصل می کند و مدل آموزش دیده را دانلود می کند و یک جریان ویدیویی راه اندازی می کند. نتایج در پنجره ترمینال نشان داده خواهد شد.

استقرار مدل آموزش دیده در رزبری پای

همچنین می توانید با استفاده از آدرس IP رزبری پای، جریان ویدئو را در مرورگر باز کنید. اما از آنجایی که هدف ما ساختن یک ماشین مرتب‌سازی گوجه‌فرنگی قرمز و سبز است، باید از روش دوم استفاده کنیم که از مثال پایتون SDK است. دانلود فایل مدل از طریق:

edge-impulse-linux-runner --download modelfile.eim

اکنون این مخزن را شبیه سازی کنید تا نمونه های پایتون را برای طبقه بندی اشیا، تشخیص صدا و … دریافت کنید:

git clone https://github.com/edgeimpulse/linux-sdk-python

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

python3 classify.py modelfile.eim

که در آن modefile.eim نام فایل مدل آموزش دیده است. مطمئن شوید که این فایل در همان پوشه کد قرار دارد.

هنگامی که کد را اجرا می کنید، احتمالات اشیاء شناسایی شده را همانطور که در تصویر زیر نشان داده شده است چاپ می کند:

نمایش نتیجه شناسایی قرمز و سبز

حالا باید تغییراتی در کد ایجاد کنیم تا بتوانیم سرووها را طبق تشخیص جابجا کنیم. برچسب و امتیاز پیش‌بینی در برچسب‌ها و متغیرهای امتیاز ذخیره می‌شوند، بنابراین ما این مقادیر امتیاز را در یک آرایه ذخیره می‌کنیم و سپس این سه مقدار را به سه مقدار مختلف اختصاص می‌دهیم تا بتوانیم به راحتی آنها را با هم مقایسه کنیم و سرووها را بر اساس آن جابه‌جا کنیم. کد کامل با تمامی تغییرات نیز در فایل انتهای مطلب آورده شده است.

 for label in labels:
          score = res['result']['classification'][label] 
          print('%s: %.2f\t' % (label, score), end='')
          data.append(score)
          print('', flush=True)
          Green = round(data[0],2)
          Red = round(data[1],2)
          Uncertain = round(data[2],2)
          if (Green >=0.45 and framee_count%10 ==0):
                        while(Green >=0.35):
                            pwm1.ChangeDutyCycle(12.0)
                            time.sleep(0.500)
                            pwm1.ChangeDutyCycle(2.0) #close
                            time.sleep(0.250)
                            pwm.ChangeDutyCycle(7.0)
                            time.sleep(0.450)
                            pwm.ChangeDutyCycle(2.0)
                            Green=0.01                        
                    if (Red >=0.50 and framee_count%10 ==0):
                        while(Red >=0.50):
                            pwm1.ChangeDutyCycle(7.0)
                            time.sleep(0.500)
                            pwm1.ChangeDutyCycle(2.0)
                            time.sleep(0.250)
                            pwm.ChangeDutyCycle(7.0)
                            time.sleep(0.450)
                            pwm.ChangeDutyCycle(2.0)
                            Red=0.01

مدار ماشین مرتب سازی گوجه با رزبری پای

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

مدار ماشین مرتب سازی گوجه با رزبری پای

همانطور که در نمودار مدار نشان داده شده است سروو اول به GPIO 25 و سروو دوم به GPIO 17 رزبری پای متصل است. هر دو سروو توسط پین های 5 ولت و GND برد Raspberry Pi تغذیه می شوند.

قطعات مورد نیاز

  • رزبری پای
  • ماژول دوربین Pi
  • 2× سروو موتور

ساختن اسکلت ماشین مرتب سازی

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

ساختن اسکلت ماشین مرتب سازی 

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

موارد موجود در فایل : سورس

5 (1 نفر)

برای دریافت مطالب جدید کانال تلگرام یا پیج اینستاگرام ما را دنبال کنید.

محمد رحیمی

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

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

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *