جدول المحتويات:

هل هذه يد؟ (كاميرا Raspberry Pi + الشبكة العصبية) الجزء 1/2: 16 خطوة (بالصور)
هل هذه يد؟ (كاميرا Raspberry Pi + الشبكة العصبية) الجزء 1/2: 16 خطوة (بالصور)

فيديو: هل هذه يد؟ (كاميرا Raspberry Pi + الشبكة العصبية) الجزء 1/2: 16 خطوة (بالصور)

فيديو: هل هذه يد؟ (كاميرا Raspberry Pi + الشبكة العصبية) الجزء 1/2: 16 خطوة (بالصور)
فيديو: 205 الكمبيوتر الصغير Raspberry P الجزء الثاني استخدامات خرافية 2024, شهر نوفمبر
Anonim
هل هذه يد؟ (كاميرا Raspberry Pi + الشبكة العصبية) الجزء 1/2
هل هذه يد؟ (كاميرا Raspberry Pi + الشبكة العصبية) الجزء 1/2
هل هذه يد؟ (كاميرا Raspberry Pi + الشبكة العصبية) الجزء 1/2
هل هذه يد؟ (كاميرا Raspberry Pi + الشبكة العصبية) الجزء 1/2
هل هذه يد؟ (كاميرا Raspberry Pi + الشبكة العصبية) الجزء 1/2
هل هذه يد؟ (كاميرا Raspberry Pi + الشبكة العصبية) الجزء 1/2

قبل أيام ، أصبت في معصمي الأيمن في صالة الألعاب الرياضية. بعد ذلك في كل مرة استخدمت فيها فأرة الكمبيوتر ، كان ذلك يسبب الكثير من الألم بسبب زاوية معصم شديدة الانحدار.

عندها ضربتني "ألن يكون رائعًا لو تمكنا من تحويل أي سطح إلى لوحة تعقب" ولا أعرف السبب ولكن لسبب ما فكرت بها ، فيلم HER ، سأدعكم يظنون ذلك يا رفاق خارج. لقد كانت فكرة مثيرة ولكن لم أكن أعرف ما إذا كان بإمكاني فعل ذلك ، قررت أن أجربها.

هذا المقال يجسد ما خرج منه.

قبل أن نبدأ لدي إخلاء-

في نهاية هذا المقال ، لم أتمكن من تحويل أي سطح إلى لوحة تتبع لكنني لم أتعلم الكثير وأضفت أدوات كبيرة إلى ترسانتي. أتمنى أن يحدث هذا لك أيضًا"

هيا بنا نبدأ.

الخطوة 1: الفيديو

Image
Image

هذا فيديو صغير مدته 5 دقائق يغطي جميع الخطوات. إلق نظرة.

الخطوة 2: الأجهزة

المعدات
المعدات

قمت بإعداد raspberry pi مع كاميرا raspberry pi على ارتفاع حوالي 45 سم. هذا يعطينا مساحة مراقبة حوالي 25x25 سم تحت الكاميرا.

تتوفر كاميرا Raspberry Pi وكاميرا Raspberry Pi بسهولة ، ما عليك سوى البحث في google وستكون قادرًا على العثور على متجر محلي.

ألقِ نظرة على هذا الرابط أو أحد قائمة تشغيل Raspberry pi الخاصة بي للحصول على جهاز مقطوع الرأس وتشغيله.

بعد هذا الإعداد ، نحتاج إلى جزء من الكود الذي يقرر ما إذا كان هناك يد في المنطقة التي تراقبها الكاميرا ، وإذا كان الأمر كذلك ، فأين هي.

الخطوة 3: جزء من التعليمات البرمجية

قطعة من الكود
قطعة من الكود
قطعة من الكود
قطعة من الكود

جزء من الكود الذي يتيح لنا تحديد ما إذا كان هناك يد في مجال الاهتمام يستخدم شيئًا يسمى الشبكة العصبية. تندرج تحت فئة البرمجة حيث لا نحدد القواعد لاتخاذ القرار ولكننا نعرض بيانات كافية للشبكة العصبية بحيث تحدد القواعد من تلقاء نفسها.

في حالتنا ، بدلاً من ترميز شكل اليد ، نعرض صور الشبكة العصبية الملتقطة من raspberry pi التي تحتوي على يد ولا تحتوي على يد. تسمى هذه المرحلة تدريب الشبكة العصبية وتسمى الصور المستخدمة مجموعة بيانات التدريب.

الخطوة الرابعة: الحصول على الصور

الحصول على الصور
الحصول على الصور

قمت بتسجيل الدخول عن بعد إلى raspberry pi والتقطت مجموعة من الصور باستخدام الأمر التالي.

sudo raspistill -w 640 -h 480 -rot 90 -t 250000 -t1 5000 -o frame٪ 04d.jpg

لقد التقطت 80 صورة باليد و 80 صورة لا تحتوي على يد. 160 صورة ليست كافية لتدريب شبكة عصبية بشكل صحيح ولكن يجب أن تكون كافية لإثبات المفهوم.

إلى جانب 160 صورة ، التقطت 20 صورة أخرى لاختبار شبكتنا بمجرد تدريبها.

بمجرد أن أصبحت مجموعة البيانات جاهزة ، بدأت في كتابة التعليمات البرمجية للشبكة العصبية.

الخطوة 5: الأدوات واللغة المستخدمة

الأدوات واللغة المستخدمة
الأدوات واللغة المستخدمة
الأدوات واللغة المستخدمة
الأدوات واللغة المستخدمة

لقد كتبت شبكتي العصبية في مكتبة التعلم العميق بيثون المسماة Keras وتم كتابة الكود على دفتر ملاحظات jupyter من Anaconda navigator.

الخطوة 6: إعداد مجموعة البيانات للتدريب

تحضير مجموعة البيانات للتدريب
تحضير مجموعة البيانات للتدريب
تحضير مجموعة البيانات للتدريب
تحضير مجموعة البيانات للتدريب
تحضير مجموعة البيانات للتدريب
تحضير مجموعة البيانات للتدريب
تحضير مجموعة البيانات للتدريب
تحضير مجموعة البيانات للتدريب

أولاً (الصورة رقم 1) قمت بتضمين جميع المكتبات اللازمة لهذا المشروع ، والتي تشمل PIL و matplotlib و numpy و os و Keras. في الخلية الثانية من دفتر ملاحظات python (الصورة رقم 2) ، أحدد المسارات لمجموعة البيانات وأطبع عدد العينات. نحتاج الآن إلى تحميل جميع الصور في مصفوفة عددية ، ومن ثم في الخلية الثالثة (الصورة رقم 2) قمت بإنشاء مصفوفة عددية مكونة من 82 (عدد عينة اليد) +75 (عدد العينات غير اليدوية) أي 157 × 100 × 100 × 3. 157 هو العدد الإجمالي للصور التي أمتلكها ، و 100 × 100 هو بُعد الصورة الذي تم تغيير حجمه و 3 لطبقات اللون الأحمر والأخضر والأزرق في الصورة.

في الخلية الرابعة والخامسة ، نقوم بتحميل الصور التي تحتوي على يد متبوعة بالصور التي لا تحتوي على يد في المصفوفة المعقدة. في الخلية السادسة ، نقسم كل قيمة على 255 وبالتالي نطاق القيمة المحددة من 0 إلى 1. (الصورة رقم 3)

أنا آسف إذا كانت الصور المرفقة ليست جيدة بما فيه الكفاية. هنا رابط إلى مستودع GITHUB لتلقي نظرة على الكود. لا تنس استبدال أسماء مسار الدليل بالمسار:).

تتحرك على طول.

بعد ذلك ، نحتاج إلى تسمية كل صورة ، لذلك ، نقوم بإنشاء مصفوفة متعددة الأبعاد ذات بعد واحد بطول 157. تم تعيين أول 82 إدخالًا على 1 وتم تعيين 75 إدخالًا المتبقية على 0 لنقل الشبكة العصبية التي تكون أول 82 صورة من فئة واحدة والمتبقية من فئة أخرى. (الصورة رقم 4)

لنقم الآن بإنشاء شبكة عصبية.

الخطوة 7: الشبكة العصبية

الشبكة العصبية
الشبكة العصبية
الشبكة العصبية
الشبكة العصبية

في الخلية التاسعة ، نحدد شبكتنا العصبية. يحتوي على ثلاثة تكرارات لطبقة الالتفاف متبوعة بطبقات maxpool مع 8 و 12 و 16 مرشح التفاف على التوالي. بعد ذلك لدينا شبكتان عصبيتان كثيفتان. إرفاق صورتين لهذه الخطوة. الأول هو لقطة من الكود الذي ينشئ شبكة عصبية والثاني هو التمثيل التصويري للشبكة العصبية بأبعاد الإخراج والعمليات المشروحة.

الخطوة 8: تدريب الشبكة العصبية

تدريب الشبكة العصبية
تدريب الشبكة العصبية

في الخلية العاشرة ، قمنا بتكوين مُحسِّن الشبكة العصبية على "adam" ووظيفة الخسارة إلى "binary_crossentropy". يلعبون دورًا رئيسيًا في كيفية تحديث أوزان الشبكة. أخيرًا ، عندما نشغل الخلية الحادية عشرة ، تبدأ الشبكة العصبية في التدريب. أثناء تدريب الشبكة ، انظر إلى وظيفة الخسارة وتأكد من تناقصها.

الخطوة 9: اختبار الشبكة العصبية

اختبار الشبكة العصبية
اختبار الشبكة العصبية

بمجرد تدريب الشبكة العصبية ، نحتاج إلى إعداد مجموعة بيانات الاختبار. نكرر الإجراء الذي تم إجراؤه لإعداد مجموعة التدريب في الخلايا الثالثة والرابعة والخامسة والسادسة على بيانات الاختبار لإنشاء مجموعة اختبار. نقوم أيضًا بإعداد ملصق لمجموعة الاختبار ولكن هذه المرة نقوم بتشغيل نموذج على مجموعة البيانات هذه للحصول على تنبؤات وليس للتدريب.

الخطوة 10: النتيجة والجزء التالي…

النتيجة والجزء التالي…
النتيجة والجزء التالي…

لقد حصلت على دقة اختبار بنسبة 88 ٪ ، لكنني أخذت هذا مع قليل من الملح لأن مجموعة البيانات المستخدمة لتدريب واختبار هذا النموذج صغيرة جدًا جدًا وغير كافية لتدريب هذا النموذج بشكل صحيح.

على أي حال أتمنى أن تكون قد استمتعت بهذا المقال. نيتي من وراء هذا التمرين لم تكتمل بعد واحترس من الجزء الثاني. سوف أقوم بتحميله في أقرب وقت ممكن.

في الجزء التالي ، سنقوم بتدريب شبكة عصبية أخرى تخبرنا عن موقع اليد في صورة يتم اكتشافها يدويًا.

نرحب بجميع الاستفسارات.

إذا كان أي شخص مهتمًا باستخدام مجموعة البيانات الصغيرة الخاصة بي ، فأعلمني بذلك في التعليقات. سأجعلها متاحة.

شكرا للقراءة. سأراك قريبًا مع الجزء الثاني حتى ذلك الحين لماذا لا تنشئ وتدرب شبكة عصبية.

تحرير: - الخطوات التالية للجزء الثاني.

الخطوة 11: اكتشاف الكائن

كشف الكائن
كشف الكائن

في الخطوات السابقة أنشأنا NN يخبرنا ما إذا كانت صورة الاختبار تحتوي على يد أم لا. حسنا ماذا بعد؟ إذا صنفت NN الصورة على أنها تحتوي على يد ، فنحن نرغب في معرفة موقع اليد. وهذا ما يسمى بالكشف عن الأشياء في أدبيات الرؤية الحاسوبية. لذلك دعونا ندرب NN التي تفعل الشيء نفسه تمامًا.

الخطوة 12: الفيديو

Image
Image

فيديو مدته 3 دقائق يشرح كل الخطوات المتبقية. إلق نظرة.

الخطوة 13: وضع العلامات

الوسم
الوسم
الوسم
الوسم
الوسم
الوسم

إذا كنت تريد شبكة عصبية لإخراج موقع اليد ، فنحن بحاجة إلى تدريبها بهذه الطريقة ، على عكس الشبكة العصبية السابقة حيث تم تصنيف كل صورة إما باليد وبدون يد. هذه المرة ، ستحتوي جميع الصور ذات اليد على أربعة تسميات تتوافق مع الإحداثيات القطرية للمربع المحيط حول اليد في تلك الصورة.

تحتوي الصورة المرفقة لملف csv على تسمية لكل صورة. يرجى ملاحظة أنه يتم تسوية الإحداثيات بأبعاد الصورة ، أي إذا كان الإحداثي العلوي X عند 320 بكسل في الصورة بعرض 640 بكسل ، فسنسميها 0.5.

الخطوة 14: وسم واجهة المستخدم الرسومية

وضع العلامات على واجهة المستخدم الرسومية
وضع العلامات على واجهة المستخدم الرسومية
وضع العلامات على واجهة المستخدم الرسومية
وضع العلامات على واجهة المستخدم الرسومية
وضع العلامات على واجهة المستخدم الرسومية
وضع العلامات على واجهة المستخدم الرسومية
وضع العلامات على واجهة المستخدم الرسومية
وضع العلامات على واجهة المستخدم الرسومية

قد تتساءل كيف تمكنت من تصنيف جميع الصور البالغ عددها 82 ، حسنًا ، لقد كتبت واجهة مستخدم رسومية بلغة الثعبان ساعدتني في هذه المهمة. بمجرد تحميل الصورة في واجهة المستخدم الرسومية. تركت النقر على الإحداثيات العلوية والنقر بزر الماوس الأيمن عند الإحداثيات السفلية لمربع الإحاطة المحتمل حول اليد. تتم كتابة هذه الإحداثيات بعد ذلك في ملف بعد النقر فوق الزر التالي لتحميل الصورة التالية. كررت هذا الإجراء لجميع صور القطار البالغ عددها 82 وصور الاختبار الأربع. بمجرد أن أصبحت الملصقات جاهزة ، حان وقت التدريب.

الخطوة 15: المكتبات المطلوبة

المكتبات المطلوبة
المكتبات المطلوبة
المكتبات المطلوبة
المكتبات المطلوبة
المكتبات المطلوبة
المكتبات المطلوبة

نحتاج أولاً إلى تحميل جميع المكتبات اللازمة. الذي يتضمن

  • PIL لمعالجة الصور ،
  • matplotlib للتآمر ،
  • numpy لعملية المصفوفة ،
  • os للوظائف المعتمدة على نظام التشغيل و
  • كراس للشبكة العصبية.

الخطوة 16: الخلايا المتبقية

الخلايا المتبقية
الخلايا المتبقية
الخلايا المتبقية
الخلايا المتبقية
الخلايا المتبقية
الخلايا المتبقية
الخلايا المتبقية
الخلايا المتبقية

في الخلايا الثانية والثالثة والرابعة والخامسة ، نقوم بتحميل الصور في مصفوفة عددية وإنشاء مصفوفة رباعية الأبعاد من ملف csv لتعمل كتسميات. في الخلية رقم 6 نقوم بإنشاء شبكتنا العصبية. تتطابق بنيتها المعمارية مع الشبكة العصبية المستخدمة في التصنيف باستثناء بُعد طبقة الإخراج وهو 4 وليس 1. يأتي الاختلاف الآخر من دالة الخسارة المستخدمة والتي تعني الخطأ التربيعي المتوسط. في الخلية رقم 8 ، بدأنا تدريب شبكتنا العصبية بمجرد أن تدربت على تشغيل هذا النموذج في مجموعة اختبار للحصول على تنبؤات للمربع المحيط على إحداثيات متراكبة للمربع المحيط بدت دقيقة جدًا.

شكرا للقراءة.

موصى به: