يمكن لنموذج TinyML الذي يقوم بتشغيل Wio Terminal تحديد ما إذا كان الحيوان أو الإنسان يقترب حتى في الظلام وتنبيه المعسكر.
الأشياء المستخدمة في هذا المشروع
مكونات الأجهزة
تطبيقات البرمجيات والخدمات عبر الإنترنت
Arduino Software (IDE)
Edge Impulse
قصة
المشكلة
أحب التخييم لكنني لست "من عشاق التخييم" ، فأنا عادة ما أخيم مرة أو مرتين في السنة مع عائلتي. ولكن هناك عددًا من المتحمسين للتخييم الذين يذهبون إلى أعماق الغابة. في حين أن التخييم في أعماق الغابة مليء بالمغامرات ، فهناك خطر من الحيوانات البرية مثل الدب والذئب وما إلى ذلك. هناك أجهزة لتتبع الحيوانات البرية باستخدام الكاميرا ولكن المشكلة تكمن في أن الكاميرا لا تعمل في الظلام. وفي معظم الحالات ، تهاجم الحيوانات البرية المعسكر في الليل.
كيف يمكننا حلها؟
نحتاج إلى جهاز يمكن أن يعمل في الظلام وينبه المعسكر عند اقتراب أي حيوان بري. لا يمكننا استخدام الكاميرا العادية لهذا الغرض. نحتاج إلى شيء يمكن أن يعمل بدون ضوء مثل الكاميرا الحرارية.
الحل هو العربة
تقديم العربة المجهزة بكاميرا Grove MLX90640 IR الحرارية ومحطة Wio من Seeed. يتنبأ نموذج tinyML يعمل على محطة Wio إذا كان هناك أي حيوان أو إنسان يقترب. إذا تم الكشف عنها ، يتم إرسال البيانات إلى موضوع AWS IoT.
لقد قمت ببناء نموذج ML باستخدام Edge Impulse Studio. اعتبارًا من كتابة هذا المشروع (نوفمبر 2021) ، لا يدعم EI تغذية الكاميرا الحرارية لجمع البيانات خارج الصندوق ، لذلك يتم جمع البيانات من محطة Wio وإعادة توجيهها إلى Edge Impulse لبناء النموذج. عملية جمع البيانات مستوحاة من مشروع نافين على الهاكر.
إنشاء مشروع الذكاء العاطفي
توجه إلى حساب EI الخاص بك وقم بإنشاء مشروع جديد. انتقل إلى علامة التبويب "المفاتيح" وأضف مفتاح HMAC جديدًا. انسخ المفتاح في مكان ما ، ستحتاج إليه لاحقًا.
جمع البيانات
تحمل الكاميرا الحرارية بالأشعة تحت الحمراء مجموعة 32x24 من المستشعرات الحرارية (MLX90640) ، ويمكنها الكشف عن درجة حرارة الأشياء من على بعد أقدام بدقة ± 1.5 ℃. من أجل الحصول على الصورة الحرارية بسهولة ، يتم استخدام بروتوكول I2C للحصول على صورة منخفضة الدقة من الكاميرا. ستكون البيانات عبارة عن مصفوفة من 32 × 24 وهي 768 قيمة درجة حرارة. MLX90640 متصل بمحطة Wio عبر منفذ I2C وقد أدخلت بطاقة SD لالتقاط القراءات في ملف CSV. تُستخدم الأزرار الثلاثة الموجودة على Wio Terminal لتسمية الفئات الثلاثة
أ- الحيوان ، ب- الإنسان ، ج- الخلفية
استخدم البرنامج WIO_Camper_Data_Collector.ino لجمع البيانات. قم بتحميل هذا البرنامج وابدأ في جمع البيانات.
بعد جمع البيانات ، قم بإزالة بطاقة SD من Wio Terminal وإدخالها في جهاز الكمبيوتر الخاص بك. يجب أن تشاهد ملفات CVS على النحو التالي.
يحتوي ملف ach على 768 قيمة مفصولة بفواصل.
انسخ جميع الملفات إلى الدليل المسمى خام ضمن بيانات المجلد. ثم قم بتشغيل برنامج imager.py الذي سينشئ عرضًا مرئيًا للبيانات ضمن مجلد / data / visual.
python3 imager.py
هذه الخطوة اختيارية. يساعدك على عرض بيانات csv بتنسيق صورة ولكن لا علاقة له بتدريب النموذج.
إعادة توجيه البياناتهذا حقا جزء مثير للاهتمام. يدعم معيد توجيه البيانات Edge Impulse البيانات الأولية للسلاسل الزمنية فقط. لكن بيانات الكاميرا الحرارية ليست سلسلة زمنية. بدلاً من ذلك ، فهي عبارة عن مصفوفة من 32 × 24 بها 768 قيمة منفصلة. سننظر في هذا على أنه بيانات سلسلة زمنية 768 أحادية القناة بفاصل 1 ميكروثانية. ستساعدك الصورة أدناه على تصور ما أتحدث عنه
ستلاحظ أن صورة واحدة (768 قيمة) يتم تمثيلها على أنها بيانات سلسلة زمنية بفاصل 1 مللي ثانية. أنت تعرف الآن كيف نريد تنسيق بياناتنا قبل تحميلها إلى Edge Impulse. لنفعلها اذا.
افتح data-formatter.py والصق مفتاح HMAC الذي حصلت عليه مسبقًا. ثم قم بتشغيل البرنامج.
python3 data-formatter.py
سيقوم هذا البرنامج بإنشاء ملف json لكل ملف من ملفات cvs وتخزينها في مجلد / data / formatted_data. يمكنك أن ترى أدناه أن القيم يتم تمثيلها على أنها بيانات سلاسل زمنية بفاصل زمني قدره 1 ثانية. فقط قناة بيانات المستشعر هي درجة الحرارة.
نظرًا لأنك أعددت البيانات ، سنستخدم Edge Impulse CLI لتحميل البيانات. تحتاج إلى تثبيت CLI. اتبع هذا البرنامج التعليمي لإعداد CLI.
القرص المضغوط في مجلد formatted_data وتنفيذ الأمر أدناه.
edge-impulse-uploader --category split *.json
يجب أن يؤدي هذا إلى تحميل جميع بيانات json إلى مشروع Edge Impulse الخاص بك ضمن صفحة "الحصول على البيانات".
بناء النموذج
نظرًا لأننا قمنا بجمع البيانات ، فلنقم ببناء نموذجنا وتدريبه. انتقل إلى صفحة "إنشاء الدافع".
انقر فوق "إضافة كتلة إدخال" ، اختر "بيانات السلاسل الزمنية". قم بتعيين كل من حجم النافذة وحجم زيادة النافذة على 768 مللي ثانية. هل تتذكر أن بيانات json الخاصة بنا تحتوي على 768 قيمة بفاصل 1 مللي ثانية؟
بعد ذلك ، انقر فوق "إضافة كتلة معالجة" ، واختر "بيانات أولية".
ثم ، انقر فوق "إضافة كتلة تعلم" ، واختر التصنيف (Keras) واحفظ الدافع.
انتقل إلى صفحة "البيانات الأولية" ، واحتفظ بالإعدادات الافتراضية وانتقل إلى "NN Classifier" ، واضبط دورة التدريب ومعدل التعلم. حاول ألا تفرط في النموذج. إذا كان نموذجك لا يعمل بشكل جيد ، فحاول جمع المزيد من البيانات وإعادة التدريب.
قم بتنزيل مكتبة Arduino
انتقل إلى صفحة "النشر" ، واختر "Arduino" وابني. سيؤدي هذا إلى تنزيل المكتبة كملف مضغوط. قم باستيراد هذه المكتبة إلى Arduino IDE. أفترض أن اسم مشروعك هو "camper" وأن ملف مكتبة arduino الخاص بك يجب أن يكون camper_inferencing.h
قم بإعداد AWS IoT
في المرحلة الأولى من هذا المشروع ، أقوم بإرسال البيانات إلى AWS IoT باستخدام اتصال WiFi. لجعل محطة Wio متصلة بشبكة wifi ، تحتاج إلى تحديث البرامج الثابتة للجهاز. العملية بسيطة للغاية. اتبع هذه التعليمات.
للاتصال بـ AWS ، تحتاج إلى إنشاء "شيء" والاتصال بـ "الشيء" باستخدام الشهادات. كتب Seeed studio برنامج بيثون فائدة سيخلق جميع الموارد من أجلك. اتبع هذا. لدي مشروع آخر شرحت فيه إعداد AWS. يمكنك الرجوع إلى هذا المشروع.
سيخرج create_thing.py الشهادة والمفتاح الخاص على الجهاز. انسخها والصقها في ملف cogfig.h.
#ifndef _CONFIG_H_
#define _CONFIG_H_
// TODO ADD YOUR CONFIGURATION HERE
// WiFi and MQTT configuration
static auto constexpr WIFI_SSID = "";
static auto constexpr WIFI_PASSWORD = "";
// DHCP client id
static auto constexpr CLIENT_ID = "CLIENTID";
// hostname of your MQTT ATS endpoint
static auto constexpr HOST_ADDRESS = "xxxxxxx-ats.iot.us-east-1.amazonaws.com";
static auto constexpr TOPIC_NAME = "camper";
static auto constexpr ALERT_TOPIC_NAME = "camper_alerts";
// "AWS root CA1 and CA2 (RSA)", see
// https://docs.aws.amazon.com/iot/latest/developerguide/managing-device-certs.html#server-authentication
static auto constexpr aws_root_ca_pem = "CA_Root_Certificate";
// certificate and private key for the thing. See README.md for details
// and use the create_thing.py script to create certificate and key.
// "The certificate for this thing"
auto constexpr certificate_pem_crt = "";
auto constexpr private_pem_key= "";
#endif
تحتاج أيضًا إلى إدخال بيانات اعتماد wifi وعنوان مضيف AWS IoT. بعد إجراء التغيير ، قم بتحميل برنامج WIO_Camper_Inference.ino إلى محطة wio.
سيرسل الجهاز البيانات كل دقيقة إلى موضوع AWS IoT ، كما سيصدر الجهاز رنينًا عند اكتشاف حيوان أو إنسان.
نظرًا لوجود البيانات في AWS ، يمكنك فعل الكثير من هنا. مثل إرسال البيانات إلى dynamodb ، قم بتشغيل بعض التحليلات ، واستخدم Amazon Pinpoint لإرسال إشعار الدفع إلى الهاتف المحمول ، وإرسال رسالة نصية إلى هاتفك.
المرحلة الثانية
كما يمكنك أن تتخيل ، فإن الاعتماد على wifi ليس حلاً جيدًا هنا لأن الجهاز سيكون خارج شبكة wifi المنزلية في الغالب. لدي خطط قليلة
بدلاً من إرسال محطة wio للبيانات مباشرة إلى AWS ، يمكنني إنشاء تطبيق جوال يتصل بمحطة Wio عبر البلوتوث وإرسال البيانات إلى تطبيق الهاتف المحمول. سيقوم تطبيق الهاتف المحمول بعد ذلك بإرسال البيانات إلى AWS باستخدام cognito. لقد فعلت شيئًا مشابهًا في مشروع صديقي.
يمكنني إزالة تبعية wifi أو الاتصال الخلوي تمامًا وإرسال البيانات إلى شبكة LoRa (TTN أو Helium) مباشرةً من الجهاز. ستقوم TTN أو Helium بتفويض الرسالة إلى AWS IoT. لقد أنجزت مشروعًا مشابهًا من قبل
جميع الاكواد هنـــــــــــــــــــــــــــــــــــا