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

بنابراین، ما سعی کرده‌ایم با ساخت یک دستگاه مرتب‌سازی میوه هوشمند، اتوماسیون را نیز در نظر بگیریم. سیستم OpenCV Fruit Sorting از پردازش تصویر و ماژول‌های TensorFlow برای تشخیص میوه، شناسایی دسته آن و سپس برچسب زدن آن در میوه استفاده می‌کند. فرض کنید یک کشاورز انبوه میوه‌هایی مانند موز، سیب، پرتقال و غیره را از باغ خود جمع کرده است و می‌خواهد آنها را مرتب کند. دستگاه، میوه‌های مختلف را تشخیص داده و آنها را مطابق انتخاب ما مرتب می‌کند. همچنین می‌تواند تعداد میوه‌هایی را که مرتب شده‌اند را حساب کند.

در پروژه مرتب‌سازی میوه‌ها در Raspberry Pi ما در حال ساخت دستگاه مرتب‌سازی پرتقال هستیم که برای آن به دوربین raspberry pi نیاز خواهیم داشت. با استفاده از TensorFlow و OpenCV سعی خواهیم کرد که رنگ پرتقال را تشخیص دهیم. سپس یک موتور servo متصل به Raspberry Pi، پرتقال را مرتب کرده و آن را به یک سبد منتقل می‌کند. بنابراین می‌خواهیم مؤلفه‌های زیر را برای پروژه مرتب‌سازی میوه‌ها در Raspberry Pi جمع‌آوری کنیم.

ابزار موردنیاز مرتب سازی میوه ها در Raspberry Pi با OpenCV

با فرض اینکه شما آخرین سیستم عامل Raspbian OS و Python را در صفحه Raspberry Pi خود نصب کرده‌اید، ترمینال Linux را باز کرده و سپس با استفاده از syntax زیر، ماژول‌ها و کتابخانه‌های مورد نیاز را نصب کنید.

sudo  apt-get update

sudo apt-get upgrade

sudo nano /etc/dphys-swapfile

Then change the line CONF_SWAPSIZE=100 to  CONF_SWAPSIZE=1024

sudo /etc/init.d/dphys-swapfile stop

sudo /etc/init.d/dphys-swapfile start

sudo pip3 install opencv

sudo pip3 install numpy

wget https://bootstrap.pypa.io/get-pip.py

pip3 install dlib

pip3 install tensorflow

برنامه نویسی مرتب سازی میوه ها

اکنون به دایرکتوری بروید که پوشه TensorFlow را دانلود کرده و سپس پوشه object_detection را باز کنید.

tensorflow1/models/research/object_detection

 اکنون پوشه data را باز کنید و فایلی با نام fruit.pbtxt ایجاد کنید. در اینجا لیستی از میوه‌هایی که باید تشخیص داده شود را تهیه کنید. (شکل زیر)

برای مرتب‌سازی میوه‌ها در Raspberry Pi به پوشه Object_detection برگردید و سپس یک فایل جدید با نام fruitshort.py ایجاد کنید. تغییراتی در کد ایجاد کرده و سعی کنید آنرا درک کنید. اول از همه، کتابخانه‌های مورد نیاز را در کد وارد خواهیم کرد. در اینجا ما از مجموعه کتابخانه‌ها و ماژول‌های Tensor استفاده می‌کنیم. (شکل زیر)

  • os
  • cv2
  • Numpy
  • PiCamera
  • tensorflow
  • argparse
  • sys
  • datetime
  • gpiozero import Servo
  • Time

قسمت بعدی کد مرتب‌سازی میوه‌ها در Raspberry Pi ، شامل مسیر مدل تشخیص شی Tensorflow و مسیر مدل label تشخیص شی است. در اینجا فایل label تشخیص شی را با fr.pbtxt که قبلاً ایجاد کرده بودیم تغییر می‌دهیم. (شکل زیر)

در قسمت بعدی کد مرتب‌سازی میوه‌ها در Raspberry Pi ، یک متغیر name ایجاد کرده‌ایم که نتایج خروجی جسم شناسایی شده توسط دوربین را ذخیره می‌کند. پس از آن، ما دو متغیر رشته دیگر به نام‌های substring1 و substring2 داریم که در آن نام میوه‌ها را دسته‌بندی می‌کنیم. سپس نام Substring را در نتیجه خروجی شیء شناسایی شده حساب می‌کنیم تا تعداد دقیق میوه‌ها را توسط دوربین بدست آوریم.

در مرحله بعد، شرط (if) بررسی می‌کند که تعداد پرتقال‌های تشخیص داده شده از 1 بیشتر است. اگر بله، آنگاه محور servo را حرکت می‌کند تا آن میوه را از سایرین جدا کند و عدد میوه را نیز حساب کند. در قطعه بعدی کد، داده های تعداد کل میوه ها را با یک نشانگر زمانی در یک فایل متنی ذخیره می کنیم.

اتصالات و آزمایش

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

آزمایش مرتب‌سازی میوه ها در Raspberry Pi با OpenCV

Raspberry Pi را روشن کنید و سپس کد پایتون را که ایجاد کرده‌ایم اجرا کنید. پس از آن، دوربین را در نزدیکی میوه‌هایی که روی تسمه نقاله متحرک قرار داده شده، قرار دهید. وقتی میوه‌ای به نام پرتقال شناسایی شد، servo حرکت می‌کند تا آن را در یک سبد ریخته و آن را از میوه‌های دیگر جدا نگه دارد.

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