
Мазмуну:
- Жабдуулар
- 1 -кадам: Куту алкагынын кесилиши
- 2 -кадам: Тартманы кесүү
- 3 -кадам: Кадрды бирге коюу
- 4 -кадам: Күзгү үчүн
- 5 -кадам: Raspbian Stretch орнотуңуз
- 6 -кадам: OpenCV орнотуу
- 7 -кадам: Камераны иштетүү/сыноо
- 8 -кадам: маалыматтарды жана окутуу маалыматтарын чогултуу
- 9 -кадам: Бетти таануу убактысы
- 10 -кадам: Pi орнотуу жана моторду туташтыруу
- 11 -кадам: Камераны орнотуу
- 12-кадам: Тартманы жылдыруу-механизмин түзүү жана орнотуу
- 13 -кадам: Күзгүнүн артында картонду кошуу
- 14 -кадам: Акыркы бөлүктү кийүү
- 15 -кадам: Финал
2025 Автор: John Day | [email protected]. Акыркы өзгөртүү: 2025-01-23 14:51



Окуяларда, кинолордо жана ушул сыяктуу нерселерде колдонулган дайыма жаратуучу жашыруун бөлүмдөр мени дайыма кызыктырып келген. Ошентип, мен Жашыруун Бөлмөнүн Конкурсун көргөндө, мен бул идеяны өзүм эксперимент кылууну чечтим жана туура адам караса, жашыруун каптал тартмасын ачкан кадимки күзгү жасоону чечтим.
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 -кадам: Куту алкагынын кесилиши




Мен экинчи кол дүкөндөн сүрөт алкагын сатып алдым. Жөн гана эскертүү, раманы түзгөн тактайлардын туурасы кеминде 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 орнотуу жана моторду туташтыруу



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
Комментарийлер: #Кайра Трайтпамбы … эгер мен бул көрсөтмөнү аткарбасам;)


Жашыруун Бөлүм Чакырыкта Башкы сыйлык
Сунушталууда:
LTE Pi HAT менен жүздү таануу Smart Lock: 4 кадам

LTE Pi HAT менен жүздү таануу Smart Lock: Бет таануу барган сайын кеңири колдонула баштады, биз аны акылдуу кулпу үчүн колдоно алабыз
Alexa үн таануу менен эски ноутбуктан Smart Magic Mirror күзгүсү: 6 кадам (сүрөттөр менен)

Эски ноутбуктан акылдуу сыйкырдуу күзгү Alexa үн таануу менен: Менин "Электрониканы кыскача" курсуна жазылыңыз: https://www.udemy.com/electronics-in-a-nutshell/?couponCode=TINKERSPARK Ошондой эле мени текшериңиз youtube каналы башка долбоорлор жана электроника боюнча сабактар үчүн: https://www.youtube.com/channel/UCelOO
ESP32 CAM жүздү таануу MQTT колдоосу менен - AI-Thinker: 4 кадам

ESP32 CAM жүздү таануу MQTT колдоосу менен | AI-Thinker: Саламатсызбы! Мен MQTTге маалыматтарды жөнөтө ала турган, жүздү таануу менен ESP CAMге ээ болуу үчүн долбоордун кодун бөлүшкүм келди. Ошентип, балким 7 сааттан кийин көптөгөн коддордун мисалдарын карап, эмне экенин издеп тапкандан кийин, менде финал бар
Реалдуу убакытта жүздү таануу: аягына чейин долбоор: 8 кадам (сүрөттөр менен)

Реалдуу убакытта жүздү таануу: аягына чейин долбоор: OpenCVди изилдөө боюнча менин акыркы үйрөткүчүмдө биз АВТОМАТТЫК КӨРҮНҮҮНҮН ОБJЕКТИН КӨЗДӨӨНҮ үйрөндүк. Эми биз PiCamды жүздөрдү реалдуу убакытта таануу үчүн колдонобуз, төмөндө көрүнүп тургандай: Бул долбоор фантастикалык " Ачык Булак Компьютер Көрүү Китепканасы " менен жасалган
Жүздү таануу+таануу: 8 кадам (сүрөттөр менен)

Жүздү таануу+таануу: Бул камерадан OpenCV менен жүздү таануунун жана таануунун чуркоосунун жөнөкөй мисалы. ЭСКЕРТҮҮ: Мен бул проектти сенсорлордун сынагы үчүн жасадым жана камераны сенсор катары таануу үчүн колдондум. Ошентип, биздин максатыбыз ушул сессияда 1. Анаконду орнотуу