Мазмуну:

Жашыруун бөлүм менен жүздү таануу күзгүсү: 15 кадам (сүрөттөр менен)
Жашыруун бөлүм менен жүздү таануу күзгүсү: 15 кадам (сүрөттөр менен)

Video: Жашыруун бөлүм менен жүздү таануу күзгүсү: 15 кадам (сүрөттөр менен)

Video: Жашыруун бөлүм менен жүздү таануу күзгүсү: 15 кадам (сүрөттөр менен)
Video: Жигит үйлөнө турган кызын текшерди 2024, Июль
Anonim
Беттин таануу күзгүсү жашыруун бөлүм менен
Беттин таануу күзгүсү жашыруун бөлүм менен
Беттин таануу күзгүсү жашыруун бөлүм менен
Беттин таануу күзгүсү жашыруун бөлүм менен
Беттин таануу күзгүсү жашыруун бөлүм менен
Беттин таануу күзгүсү жашыруун бөлүм менен

Окуяларда, кинолордо жана ушул сыяктуу нерселерде колдонулган дайыма жаратуучу жашыруун бөлүмдөр мени дайыма кызыктырып келген. Ошентип, мен Жашыруун Бөлмөнүн Конкурсун көргөндө, мен бул идеяны өзүм эксперимент кылууну чечтим жана туура адам караса, жашыруун каптал тартмасын ачкан кадимки күзгү жасоону чечтим.

Raspberry Pi, python программалоо жана 8-класстагы дүкөн классын колдонуу менен, биз бул керектүү түзмөктү туура колдонуучу гана кире ала турган нерселерди ачыкка жашыруу үчүн түзө алабыз.

Мен маалыматымды жана ресурстарымды алган бул адамдарга/платформаларга өзгөчө ыраазычылык билдиргим келет:

TeCoEd - Youtube каналы

PiMyLifeUp тартып Emmet

Hackster.ioдогу MJRoBot (профиль)

Gaven MacDonald - Youtube каналы

Такер Шеннон Thingiverseде (профиль)

Жабдуулар

Frame Supplies:

  • Wood Plank (Бул тактанын өлчөмдөрү 42 "7,5" 5/16 "болгон)
  • Карандаш Сүрөт Frame (айнек менен)
  • Paint Spray
  • Бир тараптуу чагылдыруучу чаптама
  • Айнек тазалагыч жана чүпүрөк
  • MDF жыгач

Бетти таануу үчүн материалдар:

  • Raspberry Pi (мен Pi 3 B+ колдонгом, бирок башка жолдор бар)
  • Камера модулу
  • Stepper Motor

Куралдар:

  • Стол Араа
  • Jig Saw
  • SandpaperWood
  • GlueTape
  • Ченөө
  • Кайчы
  • Спрей Бөтөлкө
  • 3D принтер
  • Супер клей

1 -кадам: Куту алкагынын кесилиши

Box Frame үчүн кыскартуулар
Box Frame үчүн кыскартуулар
Box Frame үчүн кыскартуулар
Box Frame үчүн кыскартуулар
Box Frame үчүн кыскартуулар
Box Frame үчүн кыскартуулар
Box Frame үчүн кыскартуулар
Box Frame үчүн кыскартуулар

Мен экинчи кол дүкөндөн сүрөт алкагын сатып алдым. Жөн гана эскертүү, раманы түзгөн тактайлардын туурасы кеминде 1 1/2 дюйм экенин текшериңиз. Ушуну менен сиз башка жыгач тактайлар менен иштей ала турган жерди жабышыңыз керек. Ошондой эле айнекти текшериңиз Капыстан эле тоңуп калганын сатып алдым, анан тунук айнек үчүн башка кадр сатып алууга туура келди.

  • Кадрды портрет багытында коюңуз. Чеканын үстүндөгү жана астындагы кошумча ½”менен айнек тешиктин капталынын узун капталдарын (LS) өлчөңүз. (б.а. айнек тешикти өлчөөнүн узун жагына дюйм кошуңуз. Муну жазыңыз жана LSM (Long Side Measurement) белгисин коюңуз.
  • Ошо сыяктуу эле, тешиктин үстү жагын ченеп, кошумча 1”кошуңуз. Муну жазыңыз жана SSM (Short Side Measurement) деп белгилеңиз.
  • Тактаңызды алыңыз жана стол араа менен эки LSM x 2”жана эки SSM x 2” кесип алыңыз.
  • LSM кесимдеринин бирин алыңыз жана ылдый жагынан 1 дюйм жана сол жана оң тарабынан”” болгон 2”x1” тик бурчтукту өлчөңүз (3 -сүрөттө көрсөтүлгөндөй).
  • Тешикти кесүү үчүн пейзажды колдонуңуз. Андан кийин четтерин тегиздөө үчүн кумду колдонуңуз.

2 -кадам: Тартманы кесүү

Тартма үчүн кыскартуулар
Тартма үчүн кыскартуулар
Тартма үчүн кыскартуулар
Тартма үчүн кыскартуулар
Тартма үчүн кыскартуулар
Тартма үчүн кыскартуулар
Тартма үчүн кыскартуулар
Тартма үчүн кыскартуулар

Эми биз суурманы курууга киришебиз (жашыруун бөлүк).

  • 4 "x 1" эки капталын кесиңиз, 3 ⅜ "x 1" (арткы жээк), 4 ¼ "x 1 ¼" (алдыңкы четине) жана 4 "x 3 ⅜" (платформа).
  • Биринчи 4 "x 1" жагын платформанын 4 "тарабына чаптаңыз. Мен кагаздын бүктөлгөн жуптарын платформанын астына койдум, андыктан ал бир аз көтөрүлдү, ошентип ал LS тактайында кесилген тешикке сүйрөлбөйт. 30 мүнөт кургатуу үчүн коюңуз.
  • Ошо сыяктуу эле, 3 ⅜”x 1” платформасынын 3 ⅜”четине чаптаңыз. 30 мүнөт кургатуу үчүн коюңуз. Андан кийин экинчисин 4”x 1” жагын биринчисинин карама -каршы жагына чаптаңыз. 30 мүнөт кургатуу үчүн коюңуз.
  • Азырынча алдыңкы четин бөлүп коюңуз. Бул суурмага жабыштырылган акыркы нерсе болот.
  • Бүткөндөн кийин, ал LSM тактайына оюп койгон тешикке туура келерин текшериңиз. Болбосо, тартма оңой эле кирип -чыкмайынча тешикти кум менен сүргүлө, эч кандай сүйрөө жок.

3 -кадам: Кадрды бирге коюу

Кадрды бирге коюу
Кадрды бирге коюу
Кадрды бирге коюу
Кадрды бирге коюу
Кадрды бирге коюу
Кадрды бирге коюу

Бардык бөлүктөрү бүткөндөн кийин биз кадрды толугу менен чогулта баштайбыз.

  • Ар бир жагында ½”айнек тешик менен борборлоштурулган LSM планкасын чаптаңыз. Анын тешиктен алыс жайгашкан ½”менен чапталганын текшериңиз (1 -сүрөттө көрсөтүлгөндөй). 30 мүнөт кургатуу үчүн коюңуз.
  • Биринчи SSM тактайын чети жабыштырылган LSM тактайдын ичине тийип, чаптаңыз. (Түз чапталганын текшерүү үчүн сызгычты колдонуңуз). 30 мүнөт кургатуу үчүн коюңуз.
  • Башка LSM тарабын алыңыз жана биринчисине окшош клей. Тешиктен ½”алыс экенин жана жаңы эле тиркелген SSM тактайдын ичине чапталганын текшериңиз. 30 мүнөт кургатуу үчүн коюңуз.
  • Акыркы SSMди жогорку четине чаптаңыз. Сизде эки тарапта тең эки LSM бар болгондуктан, аларды канчалык түз бекиткениңизге жараша, SSMдин капталдарын сыйпаш үчүн ылдый жактарын кумдап салышыңыз керек болот (кээде менин кесүүм өчүп калат). 30 мүнөт кургатуу үчүн коюңуз.
  • Тартманын түбү менен алкактын ортосундагы кичинекей боштукту өлчөгүлө. Бул өлчөө менен MDF жыгачынын кесиндисин 4 дюймга кесиңиз. Бул бөлүктү суурмага жакын кылгыңыз келет, бирок ага тийбейт. Бул суурманы эң аз сүрүлүү менен колдоого арналган.
  • Баары бүткөндөн кийин, мен бардык бөлүктөрү дал келгендей кылып рамканы боёгом.

4 -кадам: Күзгү үчүн

Күзгү үчүн
Күзгү үчүн
Күзгү үчүн
Күзгү үчүн
Күзгү үчүн
Күзгү үчүн
Күзгү үчүн
Күзгү үчүн

Мен Amazonдон сатып алган бир жактуу пленка 10 $ тегерегинде болчу. Эгер сизди кызыктырса, сапаты бир аз кымбатыраак. Мен колдонгон чагылдырат, бирок сиз муну үйдө көрө турган кадимки күзгү эмес деп айта аласыз. Кымбатыраактары ошол көрүнүшкө ээ болот.

  • Стаканды эки жагы айнек тазалагыч менен тазалаңыз.
  • Бир тараптуу клейди ачып, үстүнө айнекти коюңуз. Желимди кескиле, ошондо айнектин ар бир тарабында кеминде ½”ашыкча болот.
  • Стаканды четке коюп, бир жагын суу менен чылап коюңуз. Андан кийин желим пальтону бир жактуу клейден тазалап, жаңы ачылган жагын суу менен чачыңыз.
  • Стакандын нымдуу жагын клейдин нымдуу жагына коюңуз. 30 мүнөт отуруп көрөлү.
  • Оодарыңыз жана баш бармагыңызды желим менен айнектин ортосундагы көбүктөрдү тегиздөө үчүн колдонуңуз. Андан кийин ашыкча жабышчаакты четинен кесип алыңыз.

5 -кадам: Raspbian Stretch орнотуңуз

Бул менин Raspberry Pi чөйрөсүнө биринчи жолу кирип жаткандыгымдан, OSти орнотуу боюнча көрсөтмөлөрдү издей баштадым. Акыры мен TeCoEd тарабынан Youtubeтан түз үйрөткүчтү таптым, ал Stretchти SD картага орнотуу процессин басып өттү (ошондой эле эң сонун киришүү менен). Бул үйрөткүчкө шилтеме:

Негизи, сиз эмне кылышыңыз керек:

  • SD картаны форматтаңыз, дискти тандоо >> Диск куралдары >> Формат. Raspian Stretch үчүн ZIP файлын жүктөп алыңыз (бул жерде:
  • OS сүрөтүн SD картага жаркылдатыңыз. Муну аягына чыгаруу үчүн TeCoEd Win32 Disk Imager программасын колдонгон. Мен бир аз жөнөкөй көрүнгөн balenaEtcherди орнотуп бүттүм. (Бул жерде balenaEtcher үчүн жүктөө шилтемеси:
  • Бир жолу balenaEtcherде "Файлдан Flashти" тандап, мурда жүктөлгөн ZIP файлын тандаңыз. Андан кийин, каалаган SD картаны тандаңыз (эгер автоматтык түрдө тандалбаса). Андан кийин ширелүү флеш баскычын басып, сыйкырдын болушун күтө туруңуз.

SD картага орнотулгандан кийин, аны Raspberry Piге салып, жалпы Pi орнотуу процессинен өтсөңүз болот.

6 -кадам: OpenCV орнотуу

Эми бетке таанууга багытталган бөлүктөргө өтөлү. Жүздөрдү таануу үчүн, биз компьютердин көрүүсү менен иштөө үчүн көптөгөн куралдарды камтыган OpenCV китепканасын жүктөп алышыбыз керек.

OpenCV орнотуу мен үчүн программалык камсыздоонун эң оор бөлүгү болгон. Бирок көптөгөн көрсөтмөлөрдү аткаргандан кийин, мен акыры PiMyLifeUp Эмметтин окуу куралын таптым, ал бул жердеги трюкту жасады:

Мен бул кадамдарды басып өтпөйм, анткени сиз аларды шилтемеден аткарууга ылайыктуу болосуз (берилген түшүндүрмөлөр жана сайттан оңой көчүрүү жана чаптоо мүмкүнчүлүгү менен).

7 -кадам: Камераны иштетүү/сыноо

Камераны иштетүү/сыноо
Камераны иштетүү/сыноо
Камераны иштетүү/сыноо
Камераны иштетүү/сыноо

OpenCV орнотулгандан кийин, менин калган сапарымды Hackster.ioдогу MJRoBotтун окуу куралын колдонуу менен аяктадым:

Баштоодон мурун, мен бул сценарийлердин түпкү жаратуучусу эмесмин, бирок аягында алардын бөлүктөрүн өзгөрткөнүмдү эске салгым келет.

Баштоо үчүн, биз экранда видео тартууга ынануу үчүн камераны сынап көрүшүбүз керек. Мен MJRoBotтун 3 -кадамында берилген сценарийди иштетүүгө бир сааттай убактымды жумшадым. Жашоо каалагандай, биз Raspberry Piдеги камераны иштетишибиз керек (берилген көрсөтмөлөрдү окуу жакшы болот окшойт … ммм жок). Ошентип, Камераны туура портуна туташтыргандан кийин, төмөнкү кадамдарды аткарыңыз:

  • Командалык терминалды ачыңыз жана sudo raspi-config териңиз
  • "Камераны иштетүүнү" тандаңыз (муну түзмөктөрдүн биринен табууга болот)
  • "Кирүү" баскычын басыңыз
  • "Бүтүрүү" бөлүмүнө өтүңүз, ошондо сизден кайра жүктөө сунушталат

Андан кийин бул кадамдарды аткарыңыз:

  • Малинанын башкы менюсуна өтүңүз (жогорку сол)
  • Тандоолор
  • Raspberry Pi конфигурациясы
  • Интерфейстер
  • Андан кийин Камерадан "Иштетилгенди" тандаңыз
  • Андан кийин "макул"

Эми сиз бул скриптти MJRoBotтун үйрөткүчүнөн камераны сыноо үчүн ийгиликтүү иштете алышыңыз керек (эсиңизде болсун, бул коддун баары жана дагы тереңирээк сүрөттөмө MJRobotтун үйрөткүчүнүн жогорудагы шилтемесинен табылган):

np катары numpy импорттоо

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 (кадр, -1) # Камераны тигинен боз = cv2.cvtColor (кадр, cv2. COLOR_BGR2GRAY) cv2.imshow ('кадр', кадр) cv2.imshow ('боз', боз) k = cv2.waitKey (30) & 0xff if k == 27: # break EAPти токтотуу үчүн cap.release () cv2.destroyAllWindows ()

Мурунку код эки түстү көрсөтүшү керек, бири түстүү, экинчиси боз масштабда. Эгер сиз буга чейин жетишкен болсоңуз, мен сизди жакшы сэндвичке татыктуу деп ойлойм.

8 -кадам: маалыматтарды жана окутуу маалыматтарын чогултуу

Маалыматтарды жана окутуу маалыматтарын чогултуу
Маалыматтарды жана окутуу маалыматтарын чогултуу
Маалыматтарды жана окутуу маалыматтарын чогултуу
Маалыматтарды жана окутуу маалыматтарын чогултуу
Маалыматтарды жана окутуу маалыматтарын чогултуу
Маалыматтарды жана окутуу маалыматтарын чогултуу

Берилген үйрөтмөдө автор жакында бериле турган коддун процесстери жөнүндө бир топ тереңирээк маалымат берет, бирок бул күзгү кантип жасалгандыгы боюнча көрсөтмөлөр болгондуктан, мен тарыхты да, татаал механиканы да тереңирээк түшүндүрбөйм. Бирок мен сиздин жашооңуздун бир айын ушул эки нерсени окуп чыгууну сунуштайм, анткени алар сиздин акылыңызга жакшы кызмат кылат.

Мунун баары иштей электе дагы үчкө жакын скрипт иштеши керек. Биринчиси маалыматтарды чогултуу үчүн, экинчиси аны үйрөтүү үчүн жана акыркысы чындыгында таануу үчүн. Маалыматтарды чогултуу үчүн жүздүн чыныгы сүрөттөрү тартылып, машыгуу үчүн белгилүү бир жерде сакталышы керек. Бул коддун жаратуучусу мунун баарын жасоону абдан жөнөкөй кылды, андыктан мен баш ооруну болтурбоо үчүн бул көрсөтмөлөрдү аткарууну сунуштайм.

Буйрук сабын ачыңыз жана жаңы каталогду кызыктуу деп атаңыз (меники FaceRec деп аталат)

mkdir FaceRec

Эми, каталогду FaceRecке өзгөртүп, анын маалымат топтомун атоону унутпаңыз

cd 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) жүздөр = 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 (саноо) + ".jpg", боз [y: y +h, x: x+w]) cv2.imshow ('image', img) k = cv2.waitKey (100) & 0xff # k == 27: break elif count> = 30 болсо, видеодон чыгуу үчүн 'ESC' баскычын басыңыз: # 30 бет үлгүсүн алыңыз жана видеону токтотуңуз k print ("\ n [INFO] Программадан чыгуу жана тазалоо материалдары") cam.release () cv2.destroyAllWindows ()

Бул учурда, Pi'ге жаздык орнотконуңузга ишениңиз. Болбосо, буйрукту аткарыңыз:

жаздык орнотуу

Бул аяктагандан кийин, сизди акыркы скриптте колдонула турган.yaml файлы менен камсыз кылган окуу скриптин (экинчи скрипт) иштете аласыз

cv2import numpy катары PILден импорттоо Image импорттоо os # Path сүрөтүнүн маалымат базасы үчүн жол = 'берилиштер' таануучу = cv2.face. LBPHFaceRecognizer_create () детектор = cv2. CascadeClassifier ("haarcascade_frontalface_default.xml"); getImagesAndLabels (жол) сүрөттөрүн алуу жана белгилөө үчүн # функция: imagePaths = [os.path.join (path, f) for f in os.listdir (path)] faceSamples = idP = imagePath үчүн 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 (жол) таануучу.тренинг (жүздөр, np.array (ids)) # Моделди машыктыруучуга/тренерге сактаңыз ("\ n [INFO] {0} жүзү үйрөтүлгөн. Программадан чыгууда".формат (len (np.unique (ids)))))

Бул сценарийлердин эң сонун жери - системага бир нече жүздү киргизсе болот, эгер каалашса, бир нече адам күзгүнүн ичине кире алат.

Төмөндө менде Data Capture сценарийи жана Окутуу сценарийи бар.

9 -кадам: Бетти таануу убактысы

Бет таануу убактысы
Бет таануу убактысы
Бет таануу убактысы
Бет таануу убактысы

Акыр -аягы, биз таануучу сценарийди иштете алабыз. Бул скриптке мотор процессинин иштеши үчүн кошумча код кошулду, андыктан мен ал бөлүктөрдү бир аз кылдат түшүндүрүп берем. Мен аны бөлүктөргө бөлөм, бирок эгер сиз ошону кааласаңыз, бүт сценарийди кадамдын аягына коём.

Биз керек болгон бардык модулдарды импорттоп, анан GPIO режимин GPIO. BCMге коюу менен баштайбыз

np катары numpy импорттоо

импорттоо импорттоо убактысын импорттоо 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)

Кийинки эки өзгөрмө - бул моторду айдоо үчүн колдонула турган тизмектер. Мен бул маалыматты Гэвен Макдональддын укмуш видеосунан үйрөндүм, аны көрүүнү сунуштайм, анткени ал кодду эле эмес, чыныгы моторду да тереңирээк изилдейт (бул жерден табылган: https://www.youtube.com/embed/Dc16mKFA7Fo). Негизи, ар бир ырааттуулук алдыдагы openComp жана closeComp функцияларында салынган фор-циклдерди колдонуу аркылуу кайталанат. Эгерде сиз жакшылап карасаңыз, seq2 seq1ге такыр карама -каршы келет. Ооба, сен ойлодуң. Бири моторду алдыга жылдыруу үчүн, экинчиси артка карай.

seq1 =

seq2 =

OpenComp функциябыздан баштап, биз 1024 жолу кайталануучу цикл түзөбүз. MacDonald's видеосуна ылайык 512 кайталоо мотордун толук айлануусун камсыздайт жана мен болжол менен эки айлануу жакшы узундукта экенин байкадым, бирок муну адамдын өлчөмүнө жараша туураласа болот. Кийинки for-loop сегк1 жана seq2де табылган 8 массивди эсепке алуу үчүн 8 кайталануудан турат. Акыр-аягы, акыркы цикл бул массивдердин ар биринде табылган төрт нерсе үчүн төрт жолу кайталанат, ошондой эле моторубуз туташкан 4 GPIO казыгы. Бул жердеги сызык GPIO пинин тандайт, андан кийин аны кайталоого жараша аны күйгүзөт же өчүрөт. Кийинки линия биздин мотор такыр айланбашы үчүн бир аз буфердик убакытты камсыздайт. Мотор суурманы жылдыруу үчүн айланып чыккандан кийин, ал кыймылга өтүүдөн мурун 5 секунд уктайт. Бул убакытты бул жерден туураласа болот же таймер эмес скрипт менен алдыга жылдыруу үчүн баскычты колдонууга мүмкүндүк берген комментарийленген кодду иштете аласыз.

мен үчүн диапазондо (1024):

жарым аралыктагы диапазондо (8): диапазондо пин үчүн (4): GPIO.output (ControlPin [pin], seq1 [halfstep] [pin]) time.sleep (.001) '' 'while 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). Анан калган баалуулуктарды None деп койдум, анткени менде маалымат топтомунда башка жүздөр жок болчу.

аттар = ['Эч ким', 'Даниел', 'Эч ким', 'Эч ким', 'Эч ким', 'Эч ким']

Биздин акыркы бир нече код линиялары thicc for-loopдо ишке ашырылат. Мен ишенимди бүтүн сан (intConfidence) катары сактоо үчүн өзгөрмөнү ишенич сапка айлана электе түздүм. Анан мен if-операторун колдонуп, ишенимдин 30дан жогору экендигин жана идентификаторун (компьютер кимди аныктап жатканын, бул учурда "Даниел") менин атымга барабар экенин текшерем. Бул тастыкталгандан кийин openComp функциясы чакырылат, ал моторду кыймылдатат (5 секунддан кийин иштейт), андан кийин моторду карама -каршы багытта жылдырган жана thicc илмегине өтүүдөн мурун тазалоону аткарган closeCompко өтөт.

эгер intConfidence> 30 жана id == 'Даниел':

openComp () closeComp ()

Мен бул жерден тапкан ката, кээде closeComp кайтып келгенден кийин, коду улана берет, бирок шарттуу if-оператору буферде дагы эле видео түрмөгүн окуп жаткандай болуп кайра эле чындык болуп чыгат. Бул ар дайым боло бербесе дагы, мен эч качан андай болбошун камсыздоонун жолун таба элекмин, андыктан кимдир бирөөнүн идеясы болсо, комментарийлерде мага билдирип коюңуз.

Бул жерде бүт скрипт бир жерде (жана анын астында гана жүктөлүп турат):

cv2 импорттоо

имп numpy катары np импорт os импорттоо убактысы импорттоо 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 орнотуу жана моторду туташтыруу

Raspberry Pi'ди алкакка орнотуу өтө жөнөкөй эле. Мен кичинекей 90 градустук чыканакты ойлоп таптым, анын бир бети тешик, экинчиси толугу менен жалпак. Булардын экөөнү 3D басып чыгаргандан кийин, аны Raspberry Piге орнотуучу тешиктерине бурамалар менен бекитсе болот (мен GPIO казыктарынын эки жагындагы эки тешикти колдондум).

Андан кийин мен 3D басылган чыканактардын карама -каршы бетине супер клейди колдонуп, пининин үстүндөгү суурманын жогору жагына жабыштырдым. Клейди кургатып жибергенден кийин, мен эки бураманын жардамы менен Пиди оңой жана ыңгайлуу абалга келтире алдым. Төмөндө шилтеме үчүн.stl бар.

Эми мотор драйверин PIге IN1, IN2, IN3, IN4 менен GPIO 14, 15, 18, 23 туташуу менен туташтырыңыз. Акыр -аягы, контроллер тактасынын 5v жана Ground казыктарын Pi'дин 5v өндүрүшүнө жана Ground казыктарына туташтырыңыз.

Бул жерде кээ бир маалымат үчүн Pi's Pinout шилтемеси бар:

11 -кадам: Камераны орнотуу

Камераны орнотуу
Камераны орнотуу
Камераны орнотуу
Камераны орнотуу
Камераны орнотуу
Камераны орнотуу

Камераны орнотуу Pi караганда бир аз күчтүү болчу, бирок бул ыкма ишти аткарды. Ар бир учунда 2 тешиги бар жука устунду иштеп чыккандан жана баскандан кийин, аны орнотуу тешиги аркылуу устунду Rasberry Piге бекиттим. Андан кийин камераны башка бурама менен нурдун карама -каршы жагына бекиңиз. Та-да! Бул сонун чымын окшойт.

12-кадам: Тартманы жылдыруу-механизмин түзүү жана орнотуу

Тартма-жылдыруу-механизмин түзүү жана орнотуу
Тартма-жылдыруу-механизмин түзүү жана орнотуу
Тартма-жылдыруу-механизмин түзүү жана орнотуу
Тартма-жылдыруу-механизмин түзүү жана орнотуу
Тартма-жылдыруу-механизмин түзүү жана орнотуу
Тартма-жылдыруу-механизмин түзүү жана орнотуу

Бул кадам жасоочу жамааттын ар дайым кайрымдуу белектеринин аркасында оңой жасалган. Thingiverseден тез издегенден кийин, мен TucksProjects тарабынан түзүлгөн сызыктуу кыймылдаткычты таба алдым (бул жерден табылды: https://www.thingiverse.com/thing:2987762). Болгону аны SD картага чаап, принтерге жумушту жасоо гана калды.

Мен Fusion 360ка кирдим жана моторумдун огу TucksProjects тарабынан берилгенге өтө чоң болгондуктан, штурмду оңдоп койдум. Менде төмөндө.stl бар. Басып чыгаруу аяктагандан кийин, биз аны кыймылдаткычтын валына коюп, андан кийин моторду жана корпустун капталын 2 бурама менен бекитүү менен чогултушубуз керек (текчени жабуудан мурун ортосуна салып койгонуңузга ишениңиз). Мен тартма менен каркастын ортосуна туура келиши үчүн стеллаждын бир дюймун кесүүгө туура келди.

Эми механизмди кадрга жана суурмага бекитүү гана калды. "БУТ КАНТИП THiS кылабыз?" сен сурап жатасың … ооба, муну мага айт: Супер клей. Жогорудагы сүрөттөрдө көрүнүп тургандай, жөн эле механизмди алкактын түбүнө каратып коюп, суурма жылдырган жыгачтын үстүнө түртүп коюңуз. Бул жерде стеллажды/механизмди мүмкүн болушунча кадрга параллель алууга аракет кылуу абдан маанилүү, анткени механизм жылганда тартманы бурчка эмес, түз түртөт. Клей кургатылган соң, стойканын четине дагы бир клей коюп, суурманы ордуна коюп, кургатыңыз. Аяктагандан кийин бизде жашыруун суурманы ичине жана сыртына жылдыруучу бекем механизм бар.

13 -кадам: Күзгүнүн артында картонду кошуу

Күзгүнүн артына картонду кошуу
Күзгүнүн артына картонду кошуу
Күзгүнүн артына картонду кошуу
Күзгүнүн артына картонду кошуу
Күзгүнүн артына картонду кошуу
Күзгүнүн артына картонду кошуу

Бул эки тараптуу тасманы күзгүгө окшоштуруу үчүн, айнектин артына картонду коюу биздин максатка ылайыктуу экенин түшүндүм. Колдонулган картон кадр менен келген, бирок ылайыктуу кесилген ар бир бөлүк иштейт. Бул ошондой эле камеранын светодиодунан, мотордун контролерунан же күзгүнүн башка жагында Pi көрсөтүлүшүнөн эч кандай жарык бербейт. Баары өз ордуна келгенде, картон менен камеранын картонго отурган жерин белгилеңиз. Андан кийин, устара менен тик бурчтукту кескиле, ошондо камера өз ордунда болгондо карап чыга алат.

14 -кадам: Акыркы бөлүктү кийүү

Акыркы бөлүктү коюу
Акыркы бөлүктү коюу
Акыркы бөлүктү коюу
Акыркы бөлүктү коюу

Акыркы нерсе - мурда тартылган суурманын алдыңкы бөлүгүн кийүү. Моторду суурма чыгып калгандай кылып жылдырыңыз. Андан кийин алдыңкы бөлүгүн жабыштырып, суурманын ортосун карагыла (бардык жагынан кичине илинип турушу керек. Андан кийин дубалга илип койсоңуз болот).

15 -кадам: Финал

Финал
Финал
Финал
Финал

Мына сага! Бир нече жакшыртуулар бар, мисалы, баскычты кошуу, жакшы эки тараптуу тасманы сатып алуу жана коддогу катаны оңдоо, бирок баары бир ишти бүтүрөт: күзгүгө окшош, ал алдын ала аныкталган нерсени тааныйт колдонуучунун жүзү жана ал татынакай кичинекей суурманы ачат. Адаттагыдай эле мен төмөндөгү комментарийлерде сиздин ойлоруңузду, суроолоруңузду жана эскерүүлөрүңүздү уккум келет.

Жалпы баа: 10/10

Комментарийлер: #Кайра Трайтпамбы … эгер мен бул көрсөтмөнү аткарбасам;)

Secret Compartment Challenge
Secret Compartment Challenge
Secret Compartment Challenge
Secret Compartment Challenge

Жашыруун Бөлүм Чакырыкта Башкы сыйлык

Сунушталууда: