جدول المحتويات:
- اللوازم
- الخطوة 1: تخفيضات لإطار الصندوق
- الخطوة 2: تخفيضات للدرج
- الخطوة 3: وضع الإطار معًا
- الخطوة 4: للمرآة
- الخطوة الخامسة: تثبيت Raspbian Stretch
- الخطوة السادسة: تثبيت OpenCV
- الخطوة 7: تمكين / اختبار الكاميرا
- الخطوة الثامنة: جمع البيانات وبيانات التدريب
- الخطوة 9: وقت التعرف على الوجه
- الخطوة 10: تركيب Pi وتوصيل المحرك
- الخطوة 11: تركيب الكاميرا
- الخطوة 12: إنشاء وتركيب آلية تحريك الدرج
- الخطوة 13: إضافة كرتون خلف المرآة
- الخطوة 14: وضع القطعة النهائية
- الخطوة 15: النهاية
فيديو: مرآة للتعرف على الوجه مع مقصورة سرية: 15 خطوة (بالصور)
2024 مؤلف: John Day | [email protected]. آخر تعديل: 2024-01-30 07:36
لطالما كنت مفتونًا بالمقصورات السرية الإبداعية دائمًا المستخدمة في القصص والأفلام وما شابه. لذلك ، عندما رأيت مسابقة المقصورة السرية ، قررت أن أجرب الفكرة بنفسي وأن أصنع مرآة ذات مظهر عادي تفتح درجًا جانبيًا سريًا عندما ينظر إليه الشخص المناسب.
من خلال استخدام Raspberry Pi ، وبعض المعرفة ببرمجة Python ، وفئة متجر من الدرجة الثامنة ، يمكننا إنشاء هذا الجهاز الأنيق لإخفاء الكائنات في مرأى من الجميع التي يمكن للمستخدم الصحيح فقط الوصول إليها.
أود أن أتقدم بشكر خاص إلى هؤلاء الأشخاص / المنصات حيث حصلت على معلوماتي ومواردي أيضًا:
TeCoEd - قناة يوتيوب
Emmet من PiMyLifeUp
MJRoBot على Hackster.io (ملف تعريف)
جافين ماكدونالد - قناة يوتيوب
تاكر شانون على Thingiverse (ملف تعريف)
اللوازم
لوازم الإطار:
- لوح خشب (كانت أبعاد هذا اللوح 42 × 7.5 × 5/16 بوصة)
- إطار صورة قلم رصاص (مع زجاج)
- رذاذ الطلاء
- طريقة واحدة لاصقة عاكسة
- منظف زجاج وخرقة
- خشب ام دي اف
لوازم التعرف على الوجه:
- Raspberry Pi (لقد استخدمت Pi 3 B + ولكن هناك خيارات أخرى)
- وحدة الكاميرا
- السائر المحركات
أدوات:
- منشار طاولة
- منشار الرقصة
- ورق الصنفرة
- شريط لاصق
- قياس
- مقص
- زجاجة رذاذ
- طابعة 3D
- صمغ ممتاز
الخطوة 1: تخفيضات لإطار الصندوق
اشتريت إطار صورة من متجر لبيع الأشياء المستعملة. مجرد تحذير ، تأكد من أن الألواح التي يتكون منها الإطار بعرض لا يقل عن 1 1/2 بوصة. وذلك حتى تتمكن من لصق ألواح أخرى من الخشب عليها مع وجود مساحة كافية للعمل بها. تأكد أيضًا من أن الزجاج الموجود في الإطار واضح تمامًا. اشتريت إطارًا مصنفرًا عن طريق الصدفة ثم اضطررت إلى شراء إطار آخر للزجاج الشفاف فقط. نظرًا لاستخدام إطاري ، فقد تختلف قياسات إطار الصندوق.
- ضع الإطار في اتجاه عمودي. قم بقياس الجوانب الطويلة (LS) لجانب فتحة الزجاج على الإطار باستخدام "إضافي في الأعلى والأسفل. (على سبيل المثال ، أضف شبرًا واحدًا إلى الجانب الطويل من قياس فتحة الزجاج. سجل ذلك وقم بتسمية LSM (قياس الجانب الطويل).
- وبالمثل ، قم بقياس الجانب العلوي للفتحة وإضافة 1 بوصة. سجل هذا وقم بتسمية SSM (قياس الجانب القصير).
- احصل على لوحتك ومنشار طاولة ، قم بقص قطعتين من LSM × 2 بوصة واثنين من SSM × 2 بوصة.
- خذ واحدة من قطع LSM وقم بقياس مستطيل 2 × 1 "1" من الأسفل و "من الجانبين الأيسر والأيمن (كما هو موضح في الصورة 3).
- استخدم المنشار لقطع الحفرة. ثم استخدم ورق الصنفرة لصنفرة الحواف.
الخطوة 2: تخفيضات للدرج
سنبدأ الآن في بناء الدرج (يُعرف أيضًا باسم المقصورة السرية).
- قم بقص جانبين مقاس 4 × 1 بوصة ، 3 × 1 بوصة (الحافة الخلفية) ، 4 × 1 “(الحافة الأمامية) ، و 4” × 3”(المنصة).
- ألصق أول جانب مقاس 4 × 1 بوصة بطول 4 بوصة من المنصة. وضعت ورقتين مطويتين أسفل جانب المنصة بحيث تم رفعها قليلاً ، وبهذه الطريقة لن تسحب الفتحة التي قطعتها في لوح LS. اضبطيها لتجف لمدة 30 دقيقة.
- وبالمثل ، قم بلصق 3”x 1” على طول حافة 3”من المنصة. اضبطيها لتجف لمدة 30 دقيقة. ثم قم بلصق الجانب الثاني مقاس 4 × 1 على الجانب المقابل للجانب الأول. اضبطيها لتجف لمدة 30 دقيقة.
- ضع الحافة الأمامية جانبًا في الوقت الحالي. سيكون آخر شيء يتم لصقه على الدرج.
- عند الانتهاء ، تحقق لمعرفة ما إذا كان يتناسب مع الفتحة التي قمت بتقطيعها في لوح LSM. إذا لم يكن الأمر كذلك ، فقم برمل الفتحة حتى ينزلق الدرج للداخل وللخارج بسهولة ، ولا يوجد سحب.
الخطوة 3: وضع الإطار معًا
مع اكتمال جميع الأجزاء ، يمكننا البدء في تجميع الإطار بالكامل.
- الصق لوح LSM المتمركز مع الفتحة الزجاجية بقطر "على كل جانب. تأكد من لصقها بـ "بعيدًا عن الفتحة (كما هو موضح في الصورة 1). اضبطيها لتجف لمدة 30 دقيقة.
- قم بلصق أول لوح SSM مع الحافة التي تلامس الجزء الداخلي من لوح LSM الذي تم لصقه للتو. (استخدم مسطرة للتأكد من لصقها بشكل مستقيم). اضبطيها لتجف لمدة 30 دقيقة.
- خذ الجانب الآخر من LSM والصمغ مشابهًا للجانب الأول. تأكد من أنها "بعيدًا عن الفتحة وأن SSM الذي تم توصيله للتو ملتصق على الجزء الداخلي من اللوح الخشبي. اضبطيها لتجف لمدة 30 دقيقة.
- الصق آخر SSM على الحافة العلوية. نظرًا لأن لديك اثنين من LSM على كلا الجانبين ، اعتمادًا على مدى استقامة إرفاقهما ، فقد تحتاج إلى صقل جوانب SSM لأسفل للتأكد من ملاءمتها (قطعتي أحيانًا معطلة). اضبطيها لتجف لمدة 30 دقيقة.
- قم بقياس المساحة الصغيرة بين الجزء السفلي من الدرج والإطار. قم بقص قطعة من خشب MDF بهذا القياس ، بمقدار 4 ". تريد أن تجعل هذه القطعة قريبة من الدرج ولكن لا تلمسها ، فهي تهدف إلى دعم الدرج بأقل قدر من الاحتكاك.
- عندما انتهيت من كل شيء ، قمت برش الإطار بحيث تتطابق جميع القطع.
الخطوة 4: للمرآة
كان اللاصق ذو الاتجاه الواحد الذي اشتريته من أمازون حوالي 10 دولارات. هناك منتجات ذات جودة أفضل تكون أغلى قليلاً إذا كنت مهتمًا. يعكس الشخص الذي أستخدمه ولكن يمكنك أن تقول إنه ليس مرآة عادية قد تراها في المنزل. الأغلى منها سوف تحصل على هذا المظهر.
- نظف الزجاج بمنظف الزجاج على كلا الجانبين.
- قم بفك المادة اللاصقة أحادية الاتجاه وضع الزجاج في الأعلى. قم بقطع المادة اللاصقة بحيث يكون هناك على الأقل بوصة فائض على كل جانب من الزجاج.
- ضع الزجاج جانبًا وقم بتبليل جانب واحد منه بالماء. ثم قشر الغلاف البلاستيكي عن اللاصق أحادي الاتجاه ورش الجانب المكشوف حديثًا بالماء.
- ضع الجانب المبلل من الزجاج على الجانب المبلل من اللاصق. دع الجلوس لمدة 30 دقيقة.
- اقلبها واستخدم إبهامك لتسطيح أي فقاعات بين اللاصق والزجاج. ثم قم بقص المادة اللاصقة الزائدة من حول الحواف.
الخطوة الخامسة: تثبيت Raspbian Stretch
هذه هي المرة الأولى التي أخوض فيها في بيئة Raspberry Pi ، وبدأت في البحث عن إرشادات حول كيفية تثبيت نظام التشغيل. لقد وجدت في النهاية برنامجًا تعليميًا مباشرًا على Youtube بواسطة TeCoEd والذي خضع لعملية تثبيت Stretch على بطاقة SD (مع مقدمة رائعة أيضًا). ها هو الرابط لهذا البرنامج التعليمي:
في الأساس ، كل ما عليك فعله هو:
- قم بتهيئة بطاقة SD عن طريق تحديد محرك الأقراص الخاص بك >> أدوات محرك الأقراص >> تهيئة. قم بتنزيل ملف ZIP لـ Raspian Stretch (موجود هنا:
- فلاش صورة نظام التشغيل على بطاقة SD. استخدم TeCoEd Win32 Disk Imager لإكمال ذلك. انتهى بي الأمر بتثبيت balenaEtcher الذي بدا أكثر وضوحًا. (هنا رابط تنزيل balenaEtcher:
- مرة واحدة في balenaEtcher حدد "Flash From File" واختر ملف ZIP الذي تم تنزيله مسبقًا. بعد ذلك ، حدد بطاقة SD المطلوبة (إذا لم يتم تحديدها تلقائيًا). ثم اضغط على زر الفلاش العصير وانتظر حدوث السحر.
بمجرد التثبيت على بطاقة SD ، يمكنك إدخالها في Raspberry Pi والانتقال إلى عملية إعداد Pi العامة.
الخطوة السادسة: تثبيت OpenCV
الآن ننتقل إلى الأجزاء الأكثر توجهاً نحو التعرف على الوجه. من أجل التعرف على الوجوه ، يجب علينا تنزيل مكتبة OpenCV التي تحتوي على عدد كبير من الأدوات للعمل مع رؤية الكمبيوتر.
كان تثبيت OpenCV هو الجزء الأكثر صعوبة في جانب البرنامج بالنسبة لي. ولكن بعد اتباع العديد من الإرشادات ، وجدت أخيرًا برنامجًا تعليميًا بواسطة Emmet من PiMyLifeUp قام بالحيلة الموجودة هنا:
لن أتصفح هذه الخطوات لأنك ستكون أكثر ملاءمة لك من خلال اتباعها من الرابط (مع التفسيرات المقدمة والقدرة على النسخ واللصق مباشرة من الموقع بسهولة أكبر).
الخطوة 7: تمكين / اختبار الكاميرا
بعد تثبيت OpenCV ، اكتملت بقية رحلتي باستخدام برنامج تعليمي بواسطة MJRoBot على Hackster.io موجود هنا:
قبل أن نبدأ ، أود أن أذكرك بأنني لست المنشئ الأصلي لهذه النصوص ولكن انتهى بي الأمر بتعديل أجزاء منها.
للبدء ، يجب علينا اختبار الكاميرا للتأكد من أنه يمكننا التقاط الفيديو على الشاشة. لقد قضيت حوالي ساعة في محاولة تشغيل البرنامج النصي المقدم في الخطوة 3 من MJRoBot. نظرًا لأن الحياة ستمتلكها ، فنحن في الواقع بحاجة إلى تمكين الكاميرا على Raspberry Pi (اتضح أنه قد يكون من الجيد قراءة الإرشادات المقدمة … mmm nah). لذلك بعد توصيل الكاميرا بمنفذها الصحيح ، اتبع الخطوات التالية:
- افتح محطة أوامر واكتب sudo raspi-config
- حدد "تمكين الكاميرا" (يمكن العثور على هذا ضمن خيار الأجهزة)
- هاهنا"
- انتقل إلى "إنهاء" وسيُطلب منك إعادة التشغيل
ثم اتبع هذه الخطوات:
- انتقل إلى قائمة Raspberry الرئيسية (أعلى اليسار)
- التفضيلات
- تكوين Raspberry Pi
- واجهات
- ثم في الكاميرا ، حدد "ممكّن"
- اذا حسنا"
الآن يجب أن تكون قادرًا على تشغيل هذا البرنامج النصي بنجاح من البرنامج التعليمي الخاص بـ MJRoBot لاختبار الكاميرا (تذكر أن كل هذا الرمز بالإضافة إلى وصف أكثر تفصيلاً موجود في الرابط المقدم أعلاه إلى البرنامج التعليمي لـ MJRobot):
استيراد numpy كـ np
import cv2 cap = cv2. VideoCapture (0) cap.set (3، 640) # set Width cap.set (4، 480) # set height while (True): ret، frame = cap.read () frame = cv2. flip (frame، -1) # قلب الكاميرا عموديًا رمادي = cv2.cvtColor (frame، cv2. COLOR_BGR2GRAY) cv2.imshow ('frame'، frame) cv2.imshow ('gray'، gray) k = cv2.waitKey (30) & 0xff إذا كان k == 27: # اضغط على "ESC" لإنهاء كسر الحد الأقصى.release () cv2.destroyAllWindows ()
يجب أن يعرض الكود السابق نافذتين ، أحدهما ملون والآخر باللون الرمادي. إذا وصلت إلى هذا الحد ، أعتقد أنك تستحق شطيرة لطيفة.
الخطوة الثامنة: جمع البيانات وبيانات التدريب
في البرنامج التعليمي المقدم ، يتعمق المؤلف كثيرًا في عمليات الشفرة التي سيتم توفيرها قريبًا ، ولكن نظرًا لأن هذه إرشادات حول كيفية صنع هذه المرآة ، فلن أتعمق في التاريخ أو الآليات المعقدة. ومع ذلك ، أوصيك بقضاء شهر من حياتك في القراءة عن هذين الأمرين لأنهما يمكن أن يخدما عقلك بشكل جيد.
هناك ما يقرب من ثلاثة نصوص أخرى يتم تشغيلها قبل أن نتمكن من تشغيل كل هذا. الأول لجمع البيانات ، والثاني لتدريبها والأخير هو في الواقع للتعرف عليها. يتطلب جمع البيانات التقاط صور حقيقية للوجه وتخزينها في مكان محدد للتدريب. جعل منشئ هذا الرمز من السهل جدًا تنفيذ كل هذا ، لذا أوصي باتباع هذه التعليمات لتجنب الصداع.
افتح سطر أوامر واجعل دليلًا جديدًا يسميه شيئًا ممتعًا (أطلقت عليه اسمي FaceRec)
مكدير الوجه
الآن ، قم بتغيير الدليل إلى FaceRec وقم بإنشاء دليل فرعي مع التأكد من تسميته لمجموعة البيانات
قرص مضغوط FaceRec
مجموعة بيانات mkdir
أثناء تواجدنا فيه ، يمكننا أيضًا إنشاء دليل فرعي آخر باسم المدرب
mkdir المدرب
يمكنك الآن تشغيل واتباع إرشادات النص الأول الذي سيلتقط صورًا للمستخدم. (فقط تنبيه ، تأكد من إدخال معرف المستخدم إما 1 ، 2 ، 3 إلخ.)
import cv2import os cam = cv2. VideoCapture (0) cam.set (3، 640) # set video width cam.set (4، 480) # set video height face_detector = cv2. CascadeClassifier ('haarcascade_frontalface_default.xml') # لكل منهما شخص ، أدخل معرف وجه رقمي واحد face_id = إدخال ('\ n أدخل معرف المستخدم ، اضغط ==>') طباعة ("\ n [INFO] تهيئة التقاط الوجه. انظر إلى الكاميرا وانتظر …") # تهيئة عدد الوجوه الفردي لأخذ العينات count = 0 while (True): ret، img = cam.read () img = cv2.flip (img، -1) # قلب صورة الفيديو عموديًا رمادي = cv2.cvtColor (img، cv2. COLOR_BGR2GRAY) faces = face_detector.detectMultiScale (رمادي ، 1.3 ، 5) لـ (x ، y ، w ، h) في الوجوه: cv2.rectangle (img ، (x ، y) ، (x + w ، y + h) ، (255 ، 0 ، 0) ، 2) count + = 1 # احفظ الصورة الملتقطة في مجلد مجموعات البيانات cv2.imwrite ("مجموعة البيانات / المستخدم." + str (face_id) + '.' + str (count) + ".jpg" ، رمادي [y: y + h، x: x + w]) cv2.imshow ('image'، img) k = cv2.waitKey (100) & 0xff # اضغط على "ESC" للخروج من الفيديو إذا كان k == 27: فاصل عدد elif> = 30: # خذ 30 عينة وجه وأوقف استراحة الفيديو k print ("\ n [INFO] الخروج من البرنامج وأشياء التنظيف") cam.release () cv2.destroyAllWindows ()
في هذه المرحلة ، تأكد من تثبيت وسادة على Pi. إذا لم يكن كذلك ، فقم بتشغيل الأمر:
وسادة تثبيت نقطة
بعد الانتهاء من ذلك ، يمكنك تشغيل البرنامج النصي للتدريب (البرنامج النصي الثاني) والذي سيزودك بسلاسة بملف.yaml الذي سيتم استخدامه في البرنامج النصي النهائي
استيراد cv2import numpy كـ np من PIL استيراد صورة os # مسار لقاعدة بيانات صورة الوجه = أداة التعرف على 'مجموعة البيانات' = cv2.face. LBPHFaceRecognizer_create () detector = cv2. CascadeClassifier ("haarcascade_frontalface_default.xml") ؛ # وظيفة للحصول على الصور وبيانات التسمية getImagesAndLabels (المسار): imagePaths = [os.path.join (المسار ، f) لـ f في os.listdir (المسار)] faceSamples = ids = لـ imagePath في imagePaths: PIL_img = Image.open (imagePath).convert ('L') # قم بتحويله إلى تدرج رمادي img_numpy = np.array (PIL_img، 'uint8') id = int (os.path.split (imagePath) [- 1]. Split (".") [1]) faces = detector.detectMultiScale (img_numpy) لـ (x، y، w، h) في الوجوه: faceSamples.append (img_numpy [y: y + h، x: x + w]) ids.append (المعرف) يُرجع الوجه ، العينات ، طباعة المعرفات ("\ n [INFO] وجوه التدريب. سيستغرق بضع ثوان. انتظر …") الوجوه ، معرفات = getImagesAndLabels (المسار) ، أداة التعرف. (الوجوه ، np.array (ids)) # احفظ النموذج في trainer / trainer. ("\ n [INFO] {0} وجوه تم تدريبها. الخروج من البرنامج".format (len (np.unique (ids))))
ما يميز هذه المجموعة من النصوص هو أنه يمكن إدخال وجوه متعددة في النظام مما يعني أن العديد من الأفراد يمكنهم الوصول إلى الأجزاء الداخلية من المرآة إذا رغبت في ذلك.
في الأسفل ، يتوفر لدي برنامج التقاط البيانات والبرنامج النصي للتدريب للتنزيل.
الخطوة 9: وقت التعرف على الوجه
أخيرًا ، يمكننا تشغيل برنامج التعرف على البرنامج النصي. تمت إضافة المزيد من التعليمات البرمجية إلى هذا البرنامج النصي لجعل العملية الحركية تعمل ، لذا سأشرح هذه الأجزاء بشكل أكثر شمولاً. سوف أقسمها إلى أقسام لكنني سأضع النص الكامل في نهاية الخطوة إذا كان هذا هو ما تبحث عنه.
سنبدأ باستيراد جميع الوحدات التي سنحتاجها ثم نضبط وضع GPIO على GPIO. BCM
استيراد numpy كـ np
استيراد وقت استيراد نظام التشغيل ، استيراد RPi. GPIO مثل GPIO GPIO.setwarnings (False) GPIO.setmode (GPIO. BCM)
القائمة التالية المسماة ControlPin عبارة عن مجموعة من الأرقام التي تمثل دبابيس الإخراج التي سيتم استخدامها لمحرك السائر الخاص بنا.
ControlPin = [14 ، 15 ، 18 ، 23]
تقوم حلقة for-loop بتعيين هذه المسامير على أنها مخرجات ثم تتأكد من إيقاف تشغيلها. لا يزال لدي بعض الكود هنا للسماح للدرج بالإغلاق بضغطة زر ولكني قررت استخدام مؤقت بدلاً من ذلك.
GPIO.setup (ControlPin ، GPIO. OUT)
GPIO.output (ControlPin ، 0) GPIO.setup (2، GPIO. IN، pull_up_down = GPIO. PUD_DOWN)
المتغيرين التاليين هما متواليتان سنستخدمهما لقيادة المحرك. لقد تعلمت هذه المعلومات من مقطع فيديو رائع بواسطة Gaven MacDonald ، أوصي بشدة بمشاهدته لأنه يتعمق ليس فقط في الكود ولكن المحرك الفعلي (موجود هنا: https://www.youtube.com/watch؟. في الأساس ، سيتم تكرار كل تسلسل من خلال استخدام حلقات for-loops المتداخلة في الدالتين openComp و closeComp القادمتين. إذا نظرت عن كثب فإن seq2 هو العكس تمامًا من seq1. نعم ، لقد خمنت ذلك. أحدهما لتحريك المحرك للأمام والآخر للخلف.
seq1 =
[1, 1, 0, 0], [0, 1, 0, 0], [0, 1, 1, 0], [0, 0, 1, 0], [0, 0, 1, 1], [0, 0, 0, 1], [1, 0, 0, 1],]
seq2 =
[0, 0, 1, 1], [0, 0, 1, 0], [0, 1, 1, 0], [0, 1, 0, 0], [1, 1, 0, 0], [1, 0, 0, 0], [1, 0, 0, 1],]
بدءًا من وظيفة openComp الخاصة بنا ، قمنا بإنشاء حلقة for-loop تتكرر 1024 مرة. وفقًا لـ MacDonald's video التكرار 512 سيوفر دورانًا كاملاً للمحرك ووجدت أن حوالي دورتين كانت بطول جيد ولكن يمكن تعديل ذلك اعتمادًا على حجم الفرد. تتكون الحلقة التالية من 8 تكرارات لحساب المصفوفات الثمانية الموجودة في seq1 و seq2. وأخيرًا ، تتكرر آخر حلقة للحلقة أربع مرات للعناصر الأربعة الموجودة في كل من هذه المصفوفات بالإضافة إلى دبابيس GPIO الأربعة التي تم توصيل محركنا بها. يحدد السطر الموجود أدناه دبوس GPIO ثم يقوم بتشغيله أو إيقاف تشغيله بناءً على التكرار الذي يتم تشغيله. يوفر السطر التالي بعض الوقت الاحتياطي لئلا يدور محركنا على الإطلاق. بعد أن يدور المحرك لتحريك الدرج للخارج ، فإنه ينام لمدة 5 ثوانٍ قبل الانتقال. يمكن تعديل هذا الوقت هنا أو يمكنك تمكين رمز التعليق الذي يسمح باستخدام زر الضغط لإعادة توجيه البرنامج النصي بدلاً من المؤقت.
لأني في النطاق (1024):
لنصف الخطوة في النطاق (8): للدبوس في النطاق (4): GPIO.output (ControlPin [pin]، seq1 [halfstep] [pin]) time.sleep (.001) '' بينما True: if GPIO.input (2) == GPIO. LOW: استراحة ؛ "" time.sleep (5)
تعمل وظيفة closeComp بطريقة مماثلة. بعد أن يتحرك المحرك للخلف ، شرعت في ضبط آخر دبابيس GPIO على مستوى منخفض للتأكد من أننا لا نهدر أي طاقة ، ثم أضفت ثلاث ثوانٍ أخرى من الوقت قبل الانتقال.
لأني في النطاق (1024):
لنصف الخطوة في النطاق (8): للدبوس في النطاق (4): GPIO.output (ControlPin [pin] ، seq2 [halfstep] [pin]) time.sleep (.001) print ("Compartment Closed") GPIO.output (ControlPin [0]، 0) GPIO.output (ControlPin [3]، 0) time.sleep [3)
يتم استخدام الجزء الأكبر من الجزء التالي لإعداد الكاميرا وبدء التعرف على الوجه. مرة أخرى ، تتطرق تعليمات MKRoBot إلى الأجزاء أكثر ولكن في الوقت الحالي ، أنا فقط أعرض الأجزاء المستخدمة في المرآة.
أولاً قمت بتغيير أسماء القائمة بحيث يكون اسمي في الفهرس الذي قمت بتعيينه له أثناء جمع البيانات (في حالتي 1). ثم قمت بتعيين باقي القيم على بلا حيث لم يعد لدي أي وجوه في مجموعة البيانات.
names = ['None'، 'Daniel'، 'None'، 'None'، 'None'، 'None']
يتم تنفيذ سطورنا القليلة الأخيرة من التعليمات البرمجية في thicc for-loop. لقد أنشأت متغيرًا لتخزين الثقة كعدد صحيح (intConfidence) قبل أن تتحول ثقة المتغير إلى سلسلة نصية. ثم أستخدم عبارة if للتحقق مما إذا كانت الثقة أكبر من 30 وما إذا كان المعرف (الشخص الذي يكتشفه الكمبيوتر ، في هذه الحالة ، "Daniel") يساوي اسمي.بعد تأكيد ذلك ، تُسمى الوظيفة openComp (كما هو موضح سابقًا) التي تحرك المحرك ، وتنطلق بعد 5 ثوانٍ ، ثم تتابع إغلاق Comp التي تحرك المحرك في الاتجاه المعاكس وتقوم ببعض التنظيف قبل متابعة حلقة thicc.
إذا كان intConfidence> 30 و id == 'Daniel':
openComp () closeComp ()
الخطأ الذي وجدته هنا هو أنه في بعض الأحيان بعد عودة closeComp ، تستمر الشفرة ولكن تم العثور على عبارة if الشرطية صحيحة مرة أخرى كما لو أنها تقرأ خلاصة الفيديو التي لا تزال في المخزن المؤقت. على الرغم من أن هذا لا يحدث في كل مرة لا أجد فيها طريقة لضمان عدم حدوث ذلك أبدًا ، لذا إذا كان لدى أي شخص أي أفكار ، فأخبرني بذلك في التعليقات.
إليك هذا البرنامج النصي بأكمله في مكان واحد (وأسفل هذا البرنامج قابل للتنزيل):
استيراد السيرة الذاتية 2
استيراد numpy مثل استيراد وقت استيراد نظام التشغيل np استيراد RPi. GPIO مثل GPIO GPIO.setwarnings (False) GPIO.setmode (GPIO. BCM) ControlPin = [14 ، 15 ، 18 ، 23] لـ i في النطاق (4): GPIO.setup (ControlPin ، GPIO. OUT) GPIO.output (ControlPin ، 0) GPIO.setup (2، GPIO. IN، pull_up_down = GPIO. PUD_DOWN) seq1 =
الخطوة 10: تركيب Pi وتوصيل المحرك
كان تركيب Raspberry Pi على الإطار بسيطًا إلى حد ما. لقد صممت كوعًا صغيرًا بزاوية 90 درجة مع وجود ثقب في وجه واحد والجانب الآخر مسطح تمامًا. بعد الطباعة ثلاثية الأبعاد لاثنين من هذه العناصر ، يمكن توصيلها بمسامير إلى Raspberry Pi على فتحات التثبيت الخاصة بها (استخدمت الفتحتين على كل جانب من دبابيس GPIO).
ثم شرعت في استخدام الغراء الفائق على الوجوه المعاكسة للأكواع المطبوعة ثلاثية الأبعاد للصق Pi أعلى الدرج الموجود بالإطار مباشرةً. بعد ترك الغراء يجف ، تمكنت من إزالة أو استبدال Pi في موضعه ببساطة وبشكل مريح باستخدام المسمارين فقط. لدي.stl الخاص بالمرفق المرتبط أدناه.
الآن ما عليك سوى توصيل محرك المحرك بـ PI مع توصيل IN1 و IN2 و IN3 و IN4 بـ GPIO 14 و 15 و 18 و 23 على التوالي. أخيرًا ، قم بتوصيل دبابيس 5 فولت والأرضي للوحة التحكم بإخراج 5 فولت ودبابيس الأرض في Pi.
إليك رابط إلى Pinout Pi لبعض المراجع:
الخطوة 11: تركيب الكاميرا
كان تركيب الكاميرا أقل قوة قليلاً من Pi لكن الطريقة أنجزت المهمة. بعد تصميم وطباعة شعاع رفيع بفتحتين على كل طرف ، قمت بتوصيل الحزمة بـ Rasberry Pi من خلال فتحة التثبيت الخاصة به. ثم قم فقط بتوصيل الكاميرا بالطرف المقابل للشعاع بمسمار آخر. تا دا! إنها ذبابة جميلة المظهر.
الخطوة 12: إنشاء وتركيب آلية تحريك الدرج
أصبحت هذه الخطوة سهلة بفضل الهدايا الخيرية من مجتمع المصنّعين. بعد بحث سريع عن Thingiverse ، تمكنت من العثور على مشغل خطي تم إنشاؤه بواسطة TucksProjects (موجود هنا: https://www.thingiverse.com/thing:2987762). كل ما بقي للقيام به هو صفعه على بطاقة SD والسماح للطابعة بالقيام بهذا العمل.
انتهى بي الأمر بالذهاب إلى Fusion 360 وقمت بتحرير الحافز نظرًا لأن عمود المحرك كان كبيرًا جدًا بالنسبة إلى المحرك الذي توفره TucksProjects. لدي.stl لذلك أدناه. بعد الانتهاء من الطباعة ، نحتاج فقط إلى تجميعها عن طريق وضع الحافز على عمود المحرك ، ثم ربط المحرك وجوانب العلبة ببراغي (تأكد من وضع الرف بينهما قبل إغلاقه). انتهى بي الأمر إلى قطع شبر واحد من الرف بحيث يتلاءم بين الدرج والإطار.
الآن كل ما تبقى هو إرفاق الآلية بالإطار والدرج. "كيف سنعمل؟" تسأل … نعم ، قلها معي: Super Glue. كما هو موضح في الصور أعلاه ، فقط ضع الآلية على الجزء السفلي من الإطار وادفعها لأعلى مقابل قطعة الخشب التي ينزلق عليها الدرج. من المهم هنا أن تحاول جعل الحامل / الآلية متوازية مع الإطار قدر الإمكان بحيث عندما تتحرك الآلية تدفع الدرج بشكل مستقيم وليس بزاوية. بعد أن يجف الغراء ، ضع المزيد من الغراء على حافة الرف وحرك الدرج في مكانه واتركه يجف. بمجرد الانتهاء ، لدينا آلية قوية لتحريك درجنا السري للداخل والخارج.
الخطوة 13: إضافة كرتون خلف المرآة
من أجل جعل هذا الفيلم ذو الاتجاهين يبدو أكثر شبهاً بالمرآة ، وجدت أنه يخدم غرضنا جيدًا لوضع الورق المقوى خلف الزجاج. الورق المقوى المستخدم هو الذي يأتي مع الإطار ولكن أي قطعة مقطوعة لتناسب ستعمل. يضمن هذا أيضًا عدم وجود ضوء من مؤشر LED للكاميرا أو وحدة التحكم في المحرك أو عروض Pi على الجانب الآخر من المرآة. مع وجود كل شيء في مكانه ، استخدم قلم رصاص لتحديد مكان الكاميرا على الورق المقوى. ثم استخدم ماكينة الحلاقة لقص مستطيل بحيث يمكن للكاميرا إلقاء نظرة خاطفة عليها عندما تكون في مكانها.
الخطوة 14: وضع القطعة النهائية
آخر شيء يجب فعله هو وضعه على الجزء الأمامي من الدرج الذي تم وضعه جانبًا في وقت سابق. حرّك المحرك بحيث يبرز الدرج للخارج. ثم الصق الجزء الأمامي بحيث تكون قطعة الدرج في المنتصف (يجب أن يكون هناك القليل من التعليق من جميع الجوانب. ثم يمكنك تعليقه على الحائط.
الخطوة 15: النهاية
ها أنت ذا! هناك العديد من التحسينات التي يمكن إجراؤها مثل إضافة زر الضغط هذا ، وشراء فيلم ثنائي الاتجاه أفضل وإصلاح هذا الخطأ في الكود ، ولكن بشكل عام ، فإنه ينجز المهمة: يبدو وكأنه مرآة ، فهو يتعرف على المحدد مسبقًا وجه المستخدم ويفتح هذا الدرج الصغير اللطيف. كما هو الحال دائمًا ، أود أن أسمع أفكارك وأسئلتك ومذكراتك في التعليقات أدناه.
التصنيف العام: 10/10
التعليقات: # WouldNotTryAgain… ما لم أتمكن من اتباع هذه التعليمات ؛)
الجائزة الكبرى في تحدي الحجرة السرية
موصى به:
هذه PNG هي مقصورة سرية: 4 خطوات
PNG عبارة عن مقصورة سرية: التحدي الخاص بك ، عزيزي القارئ ، هو معرفة الرسالة المخفية في صورة output.png التي وضعتها على github من أجلك. يمكنك استخدام كود MessageHider هناك لاستخراج الرسالة. إذا كنت مرتبكًا ، فيرجى التعليق أدناه وسأساعدك
التعرف على الوجه في الممارسة: 21 خطوة
التعرف على الوجه في الممارسة: هذا موضوع أنا مفتون به للغاية ، لدرجة أنه يجعلني أفقد النوم: رؤية الكمبيوتر ، واكتشاف الأشياء والأشخاص من خلال نموذج مدرب مسبقًا
قفل ذكي للتعرف على الوجه مع LTE Pi HAT: 4 خطوات
التعرف على الوجه Smart Lock مع LTE Pi HAT: أصبح التعرف على الوجه مستخدمًا على نطاق واسع ، يمكننا استخدامه لإنشاء قفل ذكي
مقدمة للتعرف على الصوت باستخدام Elechouse V3 و Arduino: 4 خطوات (بالصور)
مقدمة للتعرف على الصوت باستخدام Elechouse V3 و Arduino: مرحبًا بكم … لقد كانت تقنية التعرف على الصوت موجودة هنا خلال السنوات القليلة الماضية. ما زلنا نتذكر الإثارة الكبيرة التي شعرنا بها أثناء التحدث إلى أول جهاز iPhone مزود بنظام Siri. منذ ذلك الحين ، تطورت أجهزة الأوامر الصوتية إلى مستوى متقدم جدًا
إضافة ميكروفون إلى نظام Omnitech GPS للتعرف على الصوت: 4 خطوات
إضافة ميكروفون إلى نظام Omnitech GPS للتعرف على الصوت: أثناء العبث بوحدتي ، وجدت طريقة سهلة وسريعة لإضافة ميكروفون إلى وحدة الصم هذه. باستخدام ميكروفون ، ستتمكن من الاستفادة من التعرف على الصوت للتنقل. ستشمل كمية صغيرة من اللحام ولكن تقريبًا أي شخص