فهرست مطالب:

آینه تشخیص چهره با محفظه مخفی: 15 مرحله (همراه با تصاویر)
آینه تشخیص چهره با محفظه مخفی: 15 مرحله (همراه با تصاویر)

تصویری: آینه تشخیص چهره با محفظه مخفی: 15 مرحله (همراه با تصاویر)

تصویری: آینه تشخیص چهره با محفظه مخفی: 15 مرحله (همراه با تصاویر)
تصویری: 😉 وقتی شوهرش سرکاره، ربات مرد تمام خواسته های زن را برآورده می کند 2024, جولای
Anonim
آینه تشخیص چهره با محفظه مخفی
آینه تشخیص چهره با محفظه مخفی
آینه تشخیص چهره با محفظه مخفی
آینه تشخیص چهره با محفظه مخفی
آینه تشخیص چهره با محفظه مخفی
آینه تشخیص چهره با محفظه مخفی

من همیشه شیفته بخشهای مخفی همیشه خلاقانه ای بودم که در داستانها ، فیلمها و موارد مشابه استفاده می شد. بنابراین ، وقتی مسابقه بخش محرمانه را دیدم ، تصمیم گرفتم خودم با این ایده آزمایش کنم و یک آینه معمولی بسازم که وقتی شخص مناسب به آن نگاه می کند ، کشوی جانبی مخفی را باز می کند.

با استفاده از Raspberry Pi ، برخی از دانش برنامه نویسی پایتون و کلاس تجاری کلاس 8 ، می توانیم این دستگاه تند را برای پنهان کردن اشیاء در دید مستقیم ایجاد کنیم که فقط کاربر صحیح به آن دسترسی خواهد داشت.

من می خواهم از این افراد/سیستم عامل هایی که اطلاعات و منابع خود را نیز از آنها دریافت کرده ام تشکر ویژه کنم:

TeCoEd - کانال یوتیوب

Emmet از PiMyLifeUp

MJRoBot در Hackster.io (مشخصات)

Gaven MacDonald - کانال یوتیوب

تاکر شنون در Thingiverse (مشخصات)

تدارکات

لوازم فریم:

  • تخته چوب (ابعاد این تخته 42 اینچ در 7.5 اینچ در 5/16 اینچ بود)
  • قاب تصویر مداد (با شیشه)
  • رنگ اسپری
  • چسب انعکاسی یک طرفه
  • شیشه پاک کن و پارچه
  • ام دی اف چوب

وسایل تشخیص چهره:

  • Raspberry Pi (من از Pi 3 B+ استفاده کردم اما گزینه های دیگری نیز وجود دارد)
  • ماژول دوربین
  • استپر موتور

ابزارها:

  • اره رومیزی
  • جیگ اره
  • کاغذ سنباده چوب
  • GlueTape
  • اندازه گرفتن
  • قیچی
  • بطری اسپری
  • پرینتر سه بعدی
  • چسب فوق العاده

مرحله 1: برش هایی برای قاب جعبه

برش هایی برای قاب جعبه
برش هایی برای قاب جعبه
برش هایی برای قاب جعبه
برش هایی برای قاب جعبه
برش هایی برای قاب جعبه
برش هایی برای قاب جعبه
برش هایی برای قاب جعبه
برش هایی برای قاب جعبه

قاب عکس را از فروشگاه دست دوم خریدم. فقط یک هشدار ، مطمئن شوید که تخته های تشکیل دهنده قاب حداقل 1 1/2 اینچ عرض دارند. این به این دلیل است که می توانید تخته های چوبی دیگر را با فضای کافی برای کار روی آن بچسبانید. همچنین ، مطمئن شوید که شیشه در قاب کاملاً واضح است. من به طور تصادفی یک مات خریدم و سپس مجبور شدم قاب دیگری را فقط برای شیشه شفاف بخرم. زیرا از قاب من استفاده می شود ، اندازه قاب جعبه ممکن است متفاوت باشد.

  • قاب را در جهت عمودی قرار دهید. اضلاع بلند (LS) طرف سوراخ شیشه ای روی قاب را با یک ½”اضافی در بالا و پایین اندازه گیری کنید. (یعنی یک اینچ به قسمت بلند اندازه گیری سوراخ شیشه اضافه کنید. این را ضبط کرده و برچسب LSM (Long Side Measurement) را بزنید.
  • به همین ترتیب ، قسمت بالای سوراخ را اندازه بگیرید و 1 اینچ دیگر اضافه کنید. این را ضبط کرده و برچسب SSM (Short Side Measurement) را بزنید.
  • تخته خود را بگیرید و با یک اره رومیزی ، دو LSM x 2”و دو SSM x 2” برش دهید.
  • یکی از برش های LSM را بردارید و یک مستطیل 2”x1” اندازه بگیرید که از پایین 1 اینچ و از سمت چپ و راست ½ اینچ است (همانطور که در تصویر 3 نشان داده شده است).
  • برای برش سوراخ از اره منبت کاری اره مویی استفاده کنید. سپس از سنباده برای سایش لبه ها استفاده کنید.

مرحله 2: برش های کشو

برش های کشو
برش های کشو
برش های کشو
برش های کشو
برش های کشو
برش های کشو
برش های کشو
برش های کشو

اکنون ما شروع به ساخت کشو (a.k.a Secret Compartment) می کنیم.

  • دو ضلع 4 اینچ در 1 اینچ ، یک 3 اینچ در 1 اینچ (لبه پشتی) ، یک اینچ 4 اینچ در 1 اینچ (لبه جلو) و یک سکوی 4 اینچ در اینچ 3 اینچ را برش دهید.
  • طرف اول 4 اینچ در 1 اینچ را در امتداد ضلع 4 اینچ سکو بچسبانید. من چند کاغذ تا شده را در زیر سکو قرار دادم تا کمی بلند شود ، به این ترتیب سوراخی را که در تخته LS بریده بودم کش نمی آورد. بگذارید به مدت 30 دقیقه خشک شود.
  • به طور مشابه ، 3 ⅜ "x 1" را در امتداد لبه 3 ⅜ "سکو قرار دهید. بگذارید به مدت 30 دقیقه خشک شود. سپس ضلع دوم 4 x 1 اینچ را در طرف مقابل قسمت اول بچسبانید. بگذارید به مدت 30 دقیقه خشک شود.
  • لبه جلویی را فعلا کنار بگذارید. این آخرین چیزی است که روی کشو چسبانده شده است.
  • پس از اتمام کار ، بررسی کنید که آیا آن را در سوراخی که در تخته LSM مشاهده کرده اید جا می دهد یا خیر. در غیر این صورت ، سوراخ را سنباده بزنید تا کشو به راحتی داخل و خارج شود و هیچ کششی وجود ندارد.

مرحله 3: چیدمان قاب با هم

کنار هم قرار دادن قاب
کنار هم قرار دادن قاب
کنار هم قرار دادن قاب
کنار هم قرار دادن قاب
کنار هم قرار دادن قاب
کنار هم قرار دادن قاب

با تمام قطعات کامل ، می توانیم کل قاب را جمع آوری کنیم.

  • تخته LSM را که در وسط آن سوراخ شیشه قرار دارد با ½ اینچ در هر طرف بچسبانید. مطمئن شوید که با ½”دور از سوراخ چسبانده شده است (همانطور که در تصویر 1 نشان داده شده است). بگذارید به مدت 30 دقیقه خشک شود.
  • اولین تخته SSM را با لبه ای که داخل تخته LSM که به تازگی چسبیده بود لمس کنید ، بچسبانید. (از خط کش برای اطمینان از چسبندگی مستقیم آن استفاده کنید). بگذارید به مدت 30 دقیقه خشک شود.
  • طرف دیگر LSM را بگیرید و شبیه به مورد اول بچسبانید. اطمینان حاصل کنید که "from" از سوراخ دور است و SSM که تازه متصل شده است در داخل تخته چسبانده شده است. بگذارید به مدت 30 دقیقه خشک شود.
  • آخرین SSM را در لبه بالایی بچسبانید. از آنجا که شما دو LSM در هر دو طرف دارید ، بسته به اینکه آنها را مستقیماً چسبانده اید ، ممکن است لازم باشد کناره های SSM را سنباده بزنید تا مطمئن شوید که مناسب است (برش من گاهی خاموش است). بگذارید به مدت 30 دقیقه خشک شود.
  • فضای کوچک بین پایین کشو و قاب را اندازه بگیرید. یک قطعه چوب MDF را با این اندازه گیری ، در 4 اینچ برش دهید. شما می خواهید این قطعه را نزدیک کشو کنید اما به آن دست نمی زنید. منظور این است که کشو را با حداقل اصطکاک پشتیبانی می کند.
  • پس از اتمام کار ، من اسپری قاب را رنگ آمیزی کردم تا همه قطعات با هم مطابقت داشته باشند.

مرحله 4: برای آینه

برای آینه
برای آینه
برای آینه
برای آینه
برای آینه
برای آینه
برای آینه
برای آینه

چسب فیلم یک طرفه ای که از آمازون خریدم حدود 10 دلار بود. موارد با کیفیت تری وجود دارد که در صورت تمایل کمی گران تر هستند. چیزی که من استفاده می کنم منعکس کننده است اما می توانید بگویید که این یک آینه معمولی نیست که در خانه می بینید. گران قیمت ترین آنها ظاهر شما را به دست می آورند.

  • شیشه را با شیشه پاک کن در هر دو طرف تمیز کنید.
  • چسب یک طرفه را باز کنید و شیشه را روی آن قرار دهید. چسب را جدا کنید تا حداقل ½ اینچ اضافی در هر طرف شیشه وجود داشته باشد.
  • لیوان را کنار بگذارید و یک طرف آن را با آب خیس کنید. سپس لایه پلاستیکی را از چسب یک طرفه جدا کرده و قسمت تازه نمایان شده را با آب اسپری کنید.
  • قسمت مرطوب شیشه را در قسمت مرطوب چسب قرار دهید. بگذارید 30 دقیقه بماند.
  • ورق بزنید و از انگشت شست خود استفاده کنید تا هرگونه حباب بین چسب و شیشه صاف شود. سپس چسب اضافی را از اطراف لبه ها برش دهید.

مرحله 5: Raspbian Stretch را نصب کنید

این اولین باری بود که وارد محیط Raspberry Pi می شدم و به دنبال دستورالعمل هایی درباره نحوه نصب سیستم عامل بودم. من سرانجام یک آموزش مستقیم در Youtube توسط TeCoEd پیدا کردم که مراحل نصب Stretch را بر روی کارت SD (با یک معرفی نسبتاً دوست داشتنی) نیز طی کرد. در اینجا پیوند آن آموزش وجود دارد:

در اصل ، تنها کاری که باید انجام دهید این است:

  • با انتخاب Drive >> Drive Tools >> Format ، کارت SD را فرمت کنید. فایل ZIP را برای Raspian Stretch بارگیری کنید (در اینجا یافت می شود:
  • تصویر سیستم عامل را روی کارت SD فلش کنید. TeCoEd برای تکمیل این کار از Win32 Disk Imager استفاده کرد. در نهایت برنامه balenaEtcher را نصب کردم که کمی ساده تر به نظر می رسید. (این هم لینک دانلود balenaEtcher:
  • هنگامی که در balenaEtcher "Flash From File" را انتخاب کرده و فایل ZIP را که قبلاً بارگیری کرده اید انتخاب کنید. در مرحله بعد ، کارت SD موردنظر را انتخاب کنید (در صورت انتخاب خودکار). سپس دکمه فلاش آبدار را فشار دهید و منتظر بمانید تا جادو اتفاق بیفتد.

پس از نصب بر روی کارت SD می توانید آن را در Raspberry Pi وارد کرده و مراحل تنظیم عمومی Pi را طی کنید.

مرحله 6: OpenCV را نصب کنید

اکنون به قسمتهای بیشتر جهت گرا-تشخیص چهره بپردازید. برای تشخیص چهره ، باید کتابخانه OpenCV را که شامل تعداد زیادی ابزار برای کار با بینایی رایانه است بارگیری کنیم.

نصب OpenCV سخت ترین بخش نرم افزار برای من بود. اما پس از پیروی از دستورالعمل های متعدد ، سرانجام یک آموزش توسط Emmet از PiMyLifeUp پیدا کردم که ترفندی را که در اینجا یافت می شود انجام داد:

من این مراحل را طی نخواهم کرد زیرا با پیوند آنها (با توضیحات داده شده و توانایی کپی و چسباندن مستقیم از سایت با سهولت بیشتر) مناسب تر خواهید بود.

مرحله 7: دوربین را فعال/آزمایش کنید

فعال/تست دوربین
فعال/تست دوربین
فعال/تست دوربین
فعال/تست دوربین

پس از نصب OpenCV بقیه سفر من با استفاده از آموزش MJRoBot در Hackster.io به پایان رسید در اینجا یافت شد:

قبل از شروع کار ، می خواهم به شما یادآوری کنم که من خالق اصلی این اسکریپت ها نیستم ، اما در نهایت قسمت هایی از آنها را تغییر دادم.

برای شروع باید دوربین را آزمایش کنیم تا مطمئن شویم می توانیم روی صفحه فیلم ضبط کنیم. من حدود یک ساعت تلاش کردم تا اسکریپت ارائه شده در مرحله 3 MJRoBot را اجرا کنم. همانطور که زندگی می خواهد ، ما واقعاً باید دوربین را در رزبری پای فعال کنیم (به نظر می رسد که ایده خوبی است که دستورالعمل های ارائه شده را بخوانید … میلی متر نه). پس از اتصال دوربین به پورت صحیح آن ، مراحل زیر را دنبال کنید:

  • یک ترمینال فرمان را باز کنید و sudo raspi-config را تایپ کنید
  • "فعال کردن دوربین" را انتخاب کنید (این ممکن است در زیر گزینه دستگاه ها یافت شود)
  • "Enter" را بزنید
  • به "پایان" بروید و از شما درخواست راه اندازی مجدد می شود

سپس این مراحل را دنبال کنید:

  • به منوی اصلی تمشک (بالا سمت چپ) بروید
  • اولویت ها
  • پیکربندی رزبری پای
  • رابط ها
  • سپس در Camera ، "Enabled" را انتخاب کنید
  • سپس "OK"

اکنون باید بتوانید این اسکریپت را از آموزش 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. تلنگر (قاب ، -1) # تلنگر دوربین به صورت عمودی خاکستری = cv2.cvtColor (قاب ، cv2. COLOR_BGR2GRAY) cv2.imshow ("قاب" ، قاب) cv2.imshow ("خاکستری" ، خاکستری) k = cv2.waitKey (30) & 0xff if k == 27: # برای خروج از break cap.release () cv2.destroyAllWindows () "ESC" را فشار دهید

کد قبلی باید دو پنجره را نشان دهد ، یکی رنگی و دیگری رنگ خاکستری. اگر تا اینجا پیش رفتید فکر می کنم شما سزاوار یک ساندویچ خوب هستید.

مرحله 8: جمع آوری داده ها و آموزش داده ها

جمع آوری داده ها و داده های آموزشی
جمع آوری داده ها و داده های آموزشی
جمع آوری داده ها و داده های آموزشی
جمع آوری داده ها و داده های آموزشی
جمع آوری داده ها و داده های آموزشی
جمع آوری داده ها و داده های آموزشی

در آموزش ارائه شده ، نویسنده در مورد فرایندهای کد که به زودی ارائه می شود ، بسیار بیشتر توضیح می دهد ، اما از آنجا که این دستورالعمل ها در مورد نحوه ساخت این آینه است ، من به تاریخ و مکانیک پیچیده نمی پردازم. اما توصیه می کنم یک ماه از عمر خود را در مورد این دو مورد مطالعه کنید زیرا می توانند به خوبی به ذهن شما خدمت کنند.

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

یک خط فرمان باز کنید و یک فهرست جدید ایجاد کنید که نام آن را سرگرم کننده قرار دهد (من با FaceRec خود تماس گرفتم)

mkdir FaceRec

اکنون ، دایرکتوری را به FaceRec تغییر دهید و یک دایرکتوری فرعی را مطمئن شوید که نام آن را مجموعه داده قرار دهد

cd FaceRec

مجموعه داده mkdir

در حالی که ما در این زمینه هستیم ، می توانیم دایرکتوری فرعی دیگر را به نام trainer بسازیم

مربی mkdir

اکنون می توانید دستورالعمل های اولین اسکریپت را که عکس های یک کاربر را ضبط می کند اجرا کرده و دنبال کنید. (فقط یک سر به بالا بزنید ، مطمئن شوید که شناسه کاربر را به صورت 1 ، 2 ، 3 و غیره وارد کنید)

import cv2import os cam = cv2. VideoCapture (0) cam.set (3، 640) # set video width cam.set (4، 480) # set height video 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) چهره = face_detector.detectMultiScale (خاکستری 1.3 2) count + = 1 # تصویر گرفته شده را در پوشه مجموعه داده cv2.imwrite ("مجموعه داده/کاربر" + str (face_id) + '.' + str (تعداد) + ".jpg" ، خاکستری [y: y +h، x: x+w]) cv2.imshow ('image'، img) k = cv2.waitKey (100) & 0xff # برای خروج از ویدیو 'ESC' را فشار دهید اگر k == 27: break elif count> = 30: # 30 نمونه صورت بگیرید و فیلم brea را متوقف کنید k print ("\ n [INFO] خروج از برنامه و موارد پاکسازی") cam.release () cv2.destroyAllWindows ()

در این مرحله مطمئن شوید که بالش را روی Pi نصب کرده اید. اگر نه ، دستور را اجرا کنید:

بالش نصب پیپ

پس از اتمام آن می توانید اسکریپت آموزشی (اسکریپت دوم) را اجرا کنید که یک فایل.yaml را که در اسکریپت نهایی استفاده می شود به طور یکپارچه در اختیار شما قرار می دهد

import cv2import numpy as np from PIL import Image import os # Path for face image path path = 'dataset' nasizer = cv2.face. LBPHFaceRecognizer_create () detector = cv2. CascadeClassifier ("haarcascade_frontalface_default.xml")؛ # تابع برای به دست آوردن تصاویر و برچسب گذاری داده ها getImagesAndLabels (path): imagePaths = [os.path.join (path، f) for f in os.listdir (path)] faceSamples = ids = for imagePath in imagePaths: PIL_img = Image.open (imagePath).convert ('L') # تبدیل آن به مقیاس خاکستری img_numpy = np.array (PIL_img، 'uint8') id = int (os.path.split (imagePath) [-1]. تقسیم (".") [1]) چهره = detector.detectMultiScale (img_numpy) برای (x ، y ، w ، h) در صورت: faceSamples.append (img_numpy [y: y+h، x: x+w]) ids.append (id) return faceSamples ، ids print ("\ n [INFO] چهره های آموزشی. چند ثانیه طول می کشد. منتظر بمانید …") چهره ها ، ids = getImagesAndLabels (path) nasizer.train (face، np.array (ids)) # مدل را در trainer/trainer.yml ճանաչط کنید. بنویسید ('trainer/trainer.yml') # nasizer.save () در Mac کار کرده است ، اما نه در Pi # شماره چهره های آموزش دیده را چاپ کنید و برنامه را چاپ کنید ("\ n [INFO] {0} چهره های آموزش دیده. خروج از برنامه".format (len (np.unique (ids))))

نکته جالب در مورد این مجموعه اسکریپت ها این است که می توان چندین چهره را در سیستم وارد کرد به این معنی که در صورت تمایل چندین نفر می توانند به قسمت داخلی آینه دسترسی داشته باشند.

در پایین من اسکریپت Data Capture و Training را برای بارگیری در اختیار دارم.

مرحله 9: زمان تشخیص چهره

زمان تشخیص چهره
زمان تشخیص چهره
زمان تشخیص چهره
زمان تشخیص چهره

در نهایت ، می توانیم اسکریپت تشخیص دهنده را اجرا کنیم. کد بیشتری به این اسکریپت اضافه شد تا عملکرد موتور فعال شود بنابراین من آن قسمتها را کمی دقیق تر توضیح می دهم. من آن را به چند بخش تقسیم می کنم ، اما اگر شما دنبال آن هستید ، کل اسکریپت را در انتهای مرحله قرار می دهم.

ما ابتدا با وارد کردن تمام ماژول های مورد نیاز خود و سپس تنظیم حالت GPIO بر روی GPIO. BCM شروع می کنیم.

وارد کردن numpy به عنوان np

import os import time import RPi. GPIO as GPIO GPIO.setwarnings (False) GPIO.setmode (GPIO. BCM)

این لیست بعدی با نام ControlPin مجموعه ای از اعداد است که نشان دهنده پین های خروجی است که برای موتور پله ای ما استفاده می شود.

ControlPin = [14 ، 15 ، 18 ، 23]

حلقه for این پین ها را به عنوان خروجی تنظیم می کند و سپس از خاموش بودن آنها اطمینان حاصل می کند. من هنوز تعدادی کد در اینجا دارم که اجازه می دهد کشو با فشار یک دکمه بسته شود اما تصمیم گرفتم به جای آن از تایمر استفاده کنم.

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؟v=Dc16mKFA7Fo) به در اصل ، هر دنباله با استفاده از حلقه های تو در تو در توابع 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 ایجاد می کنیم که 1024 بار تکرار می شود. با توجه به ویدئوی مک دونالد 512 ، چرخش کامل موتور را فراهم می کند و من متوجه شدم که حدود دو چرخش طول خوبی دارد ، اما این بسته به اندازه فرد قابل تنظیم است. حلقه بعدی شامل 8 تکرار است تا 8 آرایه موجود در seq1 و seq2 را در نظر بگیرد. و در نهایت ، آخرین حلقه برای چهار مورد برای چهار مورد موجود در هر یک از این آرایه ها و همچنین 4 پین GPIO که موتور ما به آنها متصل شده است ، چهار بار تکرار می شود. خط زیر در اینجا پین GPIO را انتخاب می کند و بسته به نوع تکرار آن ، آن را روشن یا خاموش می کند. خط بعد از آن مقداری زمان بافر ایجاد می کند تا مبادا موتور ما اصلاً بچرخد. پس از چرخاندن موتور برای بیرون کشیدن کشو ، قبل از حرکت 5 ثانیه می خوابد. این زمان را می توان در اینجا تنظیم کرد یا می توانید کد کامنت گذاری شده را که به شما امکان می دهد از یک دکمه برای ارسال اسکریپت به جای تایمر استفاده کنید ، فعال کنید.

برای i در محدوده (1024):

برای نیم قدم در محدوده (8): برای پین در محدوده (4): GPIO.output (ControlPin [pin]، seq1 [halfstep] [pin]) time.sleep (.001) "" "while True: if GPIO.input (2) == GPIO. LOW: break؛ "" time.sleep (5)

عملکرد closeComp به روشی مشابه کار می کند. پس از حرکت مجدد موتور ، من آخرین پین های GPIO خود را روی پایین تنظیم می کنم تا مطمئن شویم که انرژی خود را هدر نمی دهیم و سپس سه ثانیه زمان دیگر را قبل از حرکت اضافه می کنم.

برای i در محدوده (1024):

برای نیمه قدم در محدوده (8): برای پین در محدوده (4): GPIO.output (ControlPin [pin] ، seq2 [halfstep] [pin]) time.sleep (.001) چاپ ("محفظه بسته") GPIO.output (ControlPin [0] ، 0) GPIO.output (ControlPin [3] ، 0) time.sleep (3)

قسمت عمده قسمت بعدی برای راه اندازی دوربین و شروع تشخیص چهره استفاده می شود. باز هم ، دستورالعمل های MKRoBot بیشتر به قسمت ها مربوط می شود ، اما در حال حاضر ، من فقط قطعاتی را که برای آینه استفاده می شود نشان می دهم.

ابتدا نام لیست ها را طوری تغییر دادم که نام من در نمایه ای که هنگام جمع آوری داده ها به آن اختصاص داده بودم (در مورد من 1) باشد. و سپس بقیه مقادیر را روی None قرار دادم زیرا دیگر چهره ای در مجموعه داده نداشتم.

names = ['هیچکدام' ، 'دانیال' ، 'هیچکدام' ، 'هیچکدام' ، 'هیچکدام' ، 'هیچکدام']

چند خط آخر کد ما در thicc for-loop پیاده سازی شده است. من یک متغیر برای ذخیره اطمینان به عنوان یک عدد صحیح (intConfidence) ایجاد کردم قبل از اینکه اطمینان متغیر به یک رشته تبدیل شود. سپس من از دستور if استفاده می کنم تا مطمئن شوم که آیا اطمینان بیشتر از 30 است و آیا شناسه (رایانه ای که شخص را تشخیص می دهد ، در این مورد "Daniel") برابر با نام من است.پس از تأیید این مورد ، تابع openComp فراخوانی می شود که (همانطور که در قبل توضیح داده شد) موتور را حرکت می دهد ، پس از 5 ثانیه روشن می شود و سپس به بستن Comp می پردازد که موتور را در جهت مخالف حرکت می دهد و قبل از انجام حلقه thicc پاکسازی می کند.

اگر intConfidence> 30 و id == 'Daniel':

openComp () closeComp ()

اشکالی که من در اینجا پیدا کردم این است که گاهی اوقات پس از بازگشت closeComp ، کد همچنان ادامه می یابد ، اما دستور if شرطی دوباره درست می شود انگار که در حال خواندن خوراک ویدیویی است که هنوز در بافر است. اگرچه هر بار این اتفاق نمی افتد اما من هنوز راهی پیدا نکرده ام که مطمئن شوم هرگز اتفاق نمی افتد ، بنابراین اگر کسی ایده ای دارد ، فقط در نظرات به من اطلاع دهید.

در اینجا کل اسکریپت همه در یک مکان است (و دقیقاً در زیر این قسمت قابل بارگیری است):

واردات cv2

import 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 و اتصال موتور

نصب Pi و اتصال موتور
نصب Pi و اتصال موتور
نصب Pi و اتصال موتور
نصب Pi و اتصال موتور
نصب Pi و اتصال موتور
نصب Pi و اتصال موتور

نصب رزبری پای روی قاب نسبتاً ساده بود. من یک آرنج کوچک 90 درجه طراحی کردم که یک صورت آن سوراخ داشت و طرف دیگر آن کاملاً صاف بود. پس از چاپ سه بعدی دو مورد از آنها ، می توانید آنها را با پیچ به رزبری پای در سوراخ های نصب آن متصل کنید (من از دو سوراخ در هر طرف پین GPIO استفاده کردم).

سپس از چسب فوق العاده در روی مخالف آرنج های پرینت سه بعدی استفاده کردم تا Pi را درست بالای کشو روی قاب بچسبانم. پس از خشک شدن چسب ، من توانستم Pi را به سادگی و به راحتی فقط با دو پیچ بردارم یا در جای خود قرار دهم. من.stl برای آرنج که در زیر پیوند خورده است را دارم.

اکنون به سادگی راننده موتور را به ترتیب با IN1 ، IN2 ، IN3 ، IN4 به GPIO 14 ، 15 ، 18 ، 23 متصل کنید. در نهایت ، پایه های 5v و Ground برد کنترلر را به خروجی 5v و پایه های Pi از وصل کنید.

در اینجا پیوندی به Pi's Pinout برای مرجع وجود دارد:

مرحله 11: نصب دوربین

نصب دوربین
نصب دوربین
نصب دوربین
نصب دوربین
نصب دوربین
نصب دوربین

نصب دوربین کمی قوی تر از Pi بود اما روش کار را تمام کرد. پس از طراحی و چاپ یک تیر نازک با 2 سوراخ در هر انتها ، آن را از طریق سوراخ نصب آن به رزبری پای متصل کردم. سپس کافی است دوربین را با یک پیچ دیگر به انتهای مقابل تیر متصل کنید. تا-دا! خیلی زیبا به نظر می رسد

مرحله دوازدهم: ایجاد و نصب مکانیسم کشو-حرکت

ایجاد و نصب کشو-مکانیسم حرکت
ایجاد و نصب کشو-مکانیسم حرکت
ایجاد و نصب کشو-مکانیسم حرکت
ایجاد و نصب کشو-مکانیسم حرکت
ایجاد و نصب کشو-مکانیسم حرکت
ایجاد و نصب کشو-مکانیسم حرکت

این مرحله به لطف هدایای خیرخواهانه جامعه سازندگان آسان شد. پس از جستجوی سریع در Thingiverse ، توانستم محرک خطی ایجاد شده توسط TucksProjects را پیدا کنم (در اینجا پیدا شده است: https://www.thingiverse.com/thing:2987762). تنها کاری که باید انجام دهید این بود که آن را روی یک کارت SD بکشید و اجازه دهید چاپگر کار را انجام دهد.

در نهایت وارد Fusion 360 شدم و اسپور را ویرایش کردم ، زیرا محور موتور من برای موتور ارائه شده توسط TucksProjects بسیار بزرگ بود. من.stl را برای آن در زیر دارم. پس از اتمام چاپ ، ما فقط باید آن را با قرار دادن خار بر روی محور موتور ، سپس با اتصال دو طرف موتور و قسمت های محفظه (قبل از بستن قفسه بین آنها قرار دهید) مونتاژ کنید. در نهایت مجبور شدم یک اینچ قفسه را برش دهم تا بین کشو و قاب جا بگیرد.

اکنون تنها چیزی که باقی می ماند اتصال مکانیسم به قاب و کشو است. "چگونه می توانیم tHiS انجام دهیم؟" شما می پرسید … بله ، آن را با من بگویید: Super Glue. همانطور که در تصاویر بالا نشان داده شده است ، کافی است مکانیزم را در قسمت پایین قاب قرار دهید و آن را به سمت تکه چوبی که کشو روی آن می لغزد بالا بیاورید. در اینجا بسیار مهم است که سعی کنید قفسه/مکانیسم را تا حد امکان با موازات موازی کنید تا وقتی مکانیسم حرکت می کند کشو را مستقیم و نه زاویه دار فشار دهد. بعد از خشک شدن چسب ، مقداری چسب دیگر را روی لبه قفسه قرار دهید و کشو را در موقعیت خود قرار دهید و بگذارید خشک شود. پس از اتمام کار ، ما یک مکانیزم قوی برای کشیدن کشوی مخفی خود به داخل و خارج داریم.

مرحله 13: افزودن مقوا در پشت آینه

افزودن مقوا در پشت آینه
افزودن مقوا در پشت آینه
افزودن مقوا در پشت آینه
افزودن مقوا در پشت آینه
افزودن مقوا در پشت آینه
افزودن مقوا در پشت آینه

برای اینکه این فیلم دو طرفه بیشتر شبیه به آینه باشد ، متوجه شدم که مقصود از قرار دادن مقوا در پشت شیشه به خوبی انجام می شود. مقوایی که استفاده می شود با قاب همراه است اما هر قطعه ای که مناسب آن باشد برش می دهد. این همچنین باعث می شود هیچ نوری از LED دوربین ، کنترل کننده موتور یا نشانگر Pi در طرف دیگر آینه نباشد. با همه چیز در جای خود از یک مداد برای نشان دادن محل نشستن دوربین روی مقوا استفاده کنید. سپس با استفاده از تیغ یک مستطیل را برش دهید تا دوربین بتواند هنگامی که در جای خود قرار دارد ، به آن نگاه کند.

مرحله 14: قرار دادن قطعه نهایی

قرار دادن قطعه نهایی
قرار دادن قطعه نهایی
قرار دادن قطعه نهایی
قرار دادن قطعه نهایی

آخرین کاری که باید انجام دهید این است که قسمت جلوی کشو را که قبلاً کنار گذاشته شده بود بگذارید. موتور را حرکت دهید تا کشو بیرون بیاید. سپس قسمت جلویی را بچسبانید تا قطعه کشو در مرکز قرار گیرد (باید از هر طرف کمی آویزان باشد. سپس می توانید آن را فقط روی دیوار آویزان کنید.

مرحله 15: پایانی

پایانی
پایانی
پایانی
پایانی

آنجا شما آن را دارید! چندین پیشرفت وجود دارد مانند افزودن آن دکمه ، خرید فیلم بهتر دو طرفه و رفع این اشکال در کد ، اما در کل ، کار به پایان می رسد: مانند یک آینه به نظر می رسد ، از پیش تعیین شده را تشخیص می دهد صورت کاربر و آن کشوی کوچک زیبا را باز می کند. مثل همیشه دوست دارم افکار ، سوالات و خاطرات شما را در نظرات زیر بشنوم.

امتیاز کلی: 10/10

نظرات: #آیا دوباره امتحان نمی کنم … مگر اینکه بتوانم این دستورالعمل را دنبال کنم ؛)

چالش بخش محرمانه
چالش بخش محرمانه
چالش بخش محرمانه
چالش بخش محرمانه

جایزه بزرگ در چالش بخش مخفی

توصیه شده: