دستگاه مرتب سازی گوجه فرنگی با رزبری پای
محتویات
مرتب سازی دستی اقلام یکی از طاقت فرساترین و وقت گیرترین کارهاست. مرتبسازی دستی، چه میوهها یا سبزیجات یا هر چیز دیگری، نیروی انسانی و زمان زیادی را میطلبد. بنابراین در این آموزش سعی کرده ایم یک دستگاه مرتب سازی گوجه فرنگی بسازیم که گوجه قرمز و سبز را تشخیص می دهد. این سیستم مرتبسازی گوجهفرنگی مبتنی بر رزبری پای است و از ماژول TensorFlow استفاده میکند که با استفاده از Edge Impulse آموزش داده شده تا گوجهها را شناسایی کرده و آنها را بر اساس رنگ مرتب کنند.
استودیوی Edge Impulse یک پلتفرم یادگیری ماشین است که به توسعه دهندگان این امکان را می دهد تا مدل های آموزش دیده با یادگیری ماشین را در فضای ابری تولید کنند و آنها را روی میکروکنترلرها (مانند آردوینو و STM32) یا رایانه های تک بردی مانند Raspberry Pi مستقر کنند. ما چند مدل سفارشی را با استفاده از Tensorflow برای تشخیص ماسک صورت با رزبری پای آموزش دادهایم.
شروع کار با Edge Impulse
برای آموزش یک مدل یادگیری ماشین با Edge Impulse در Raspberry Pi، یک حساب 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 روی Raspberry Pi اجرا میشود، برای جمعآوری تصاویر باید مدل Pi camera را به Pi متصل کنیم. اتصال دوربین به رزبری پای را مطابق تصویر زیر انجام دهید:
ایجاد مجموعه داده
همانطور که قبلا ذکر شد، ما از Edge Impulse Studio برای آموزش مدل طبقه بندی تصاویر خود استفاده می کنیم. برای آن، ما باید مجموعه داده ای را جمع آوری کنیم که دارای نمونه هایی از اشیاء است که می خواهیم با استفاده از دوربین Pi طبقه بندی کنیم. از آنجایی که هدف این است که گوجه فرنگی قرمز و گوجه سبز را از هم جدا کنید، باید چند نمونه تصویر از گوجه قرمز و گوجه سبز جمع آوری کنید تا بتواند بین این دو تمایز قائل شود.
میتوانید نمونهها را با استفاده از تلفن همراه یا برد Raspberry Pi جمعآوری کنید، یا میتوانید مجموعه دادهای را به Edge Impulse Studio وارد کنید. ساده ترین راه برای بارگذاری نمونه ها در Edge Impulse استفاده از تلفن همراه است. برای این کار باید موبایل خود را به Edge Impulse وصل کنید.
برای اتصال تلفن همراه خود، روی «Device» و سپس روی «Connect a New Device» کلیک کنید.
اکنون در پنجره بعدی بر روی “Use your Mobile Phone” کلیک کنید و یک کد QR ظاهر می شود. با استفاده از Google Lens یا سایر برنامههای اسکنر کد QR، کد QR را با تلفن همراه خود اسکن کنید. با این کار گوشی شما به استودیوی Edge Impulse متصل می شود.
با اتصال تلفن خود به Edge Impulse Studio، اکنون می توانید نمونه های خود را بارگیری کنید. برای بارگیری نمونه ها، روی «Data acquisition» کلیک کنید. اکنون در صفحه Data acquisition، نام برچسب را وارد کرده و «Camera» را به عنوان سنسور انتخاب کنید. روی “Start sampling” کلیک کنید.
با این کار تصویر گوجه فرنگی در ابر Edge Impulse ذخیره می شود. 50 تا 60 عکس از زوایای مختلف بگیرید. پس از بارگذاری نمونه ها، اکنون برچسب را روی “Green Tomato” تنظیم کنید و 50 تا 60 تصویر دیگر را جمع آوری کنید. به غیر از نمونههای گوجهفرنگی سبز و قرمز، برای موقعیتهای نامشخص نمونههایی را نیز جمعآوری کنید تا در قاب چیزی نباشد.
این نمونه ها برای آموزش ماژول است که در مراحل بعدی داده های تست را جمع آوری می کنیم. داده های آزمون باید حداقل 20 درصد داده های آموزشی باشد.
آموزش مدل تشخیص گوجه سبز و قرمز
همانطور که مجموعه داده ما آماده است، اکنون یک impulse برای داده های خود ایجاد می کنیم. برای آن به صفحه “Create impulse” بروید.
اکنون در صفحه «Create impulse»، روی «Add a processing block» کلیک کنید و سپس روی دکمه «Add» در کنار بلوک «Image» کلیک کنید تا یک بلوک پردازشی اضافه کنید که دادههای تصویر را عادی میکند و عمق رنگ را کاهش میدهد. پس از آن، بر روی بلوک “Transfer Learning (images)” کلیک کنید تا یک مدل از پیش آموزش دیده در نظر گرفته شده برای طبقه بندی تصویر را بگیرید، که بر روی آن، آموزش انتقال را انجام می دهیم تا آن را برای کار تشخیص گوجه فرنگی تنظیم کنیم. سپس بر روی “Save Impulse” کلیک کنید.
در مرحله بعد، به زیر آیتم “images” زیر آیتم منوی “Impulse design” بروید و سپس روی تب “Generate Features” کلیک کنید و سپس دکمه سبز “Generate features” را بزنید.
پس از آن، بر روی زیر آیتم “Transfer Learning” در زیر آیتم “Impulse design” کلیک کنید و دکمه “Start training” را در پایین صفحه بزنید. در اینجا از MobileNetV2 پیش فرض استفاده کردیم. در صورت تمایل می توانید از مدل های آموزشی مختلف استفاده کنید.
آموزش مدل کمی زمان می برد. پس از آموزش مدل، عملکرد آموزشی را نشان می دهد. برای من دقت 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 اجرا کنید. اگر سؤالی دارید، لطفاً آنها را در بخش نظرات مطرح کنید یا از انجمن ما برای شروع بحث در مورد آن استفاده کنید.
موارد موجود در فایل : سورس
برای دانلود فایل ها باید حساب کاربری داشته باشید ثبت نام / ورود