Мазмуну:

Raspberry Pi коопсуздук камерасы: 11 кадам (сүрөттөр менен)
Raspberry Pi коопсуздук камерасы: 11 кадам (сүрөттөр менен)

Video: Raspberry Pi коопсуздук камерасы: 11 кадам (сүрөттөр менен)

Video: Raspberry Pi коопсуздук камерасы: 11 кадам (сүрөттөр менен)
Video: Ал чатырда бийлеп жатат. 💃💃 - Parkour Climb and Jump GamePlay 🎮📱 🇰🇬 2024, Ноябрь
Anonim
Raspberry Pi коопсуздук камерасы
Raspberry Pi коопсуздук камерасы

Бул Raspberry Pi аркылуу IoT, кыймылдын активдештирилген коопсуздук камерасын кантип түзүү керектиги боюнча этап -этабы менен. Сиз колдонуучунун камеранын сезгичтигин жана жазуу убактысын жөнгө салууга, жазууну кол менен баштоого/токтотууга жана/же жергиликтүү түрдө сактала турган сүрөткө тартууга мүмкүнчүлүк берген колбада веб -серверди жана форманы кантип түзүүнү үйрөнөсүз.

Жабдуулар

  • Raspberry Pi 3
  • Pi камерасы
  • PIR кыймыл сенсору
  • SD карта
  • Кубат булагы

1 -кадам: Аппараттык жабдууну чогултуу

Аппаратты чогултуп алыңыз
Аппаратты чогултуп алыңыз
Аппаратты чогултуп алыңыз
Аппаратты чогултуп алыңыз
Аппаратты чогултуп алыңыз
Аппаратты чогултуп алыңыз
Аппаратты чогултуп алыңыз
Аппаратты чогултуп алыңыз

Пи өчүрүлгөндө, микро-SD картаны Пи-ге салыңыз. Камера модулунун лентасын кабелди Piдеги камера модулунун портуна салыңыз. Андан кийин, PRI кыймыл детекторунун 3 казыгын (VCC, OUT жана GND деп белгиленген) Pi GPIO казыктарына туташтырыңыз. VCCди 5.5V кубатына, GNDди жерге жана OUTту Пи 11ге туташтырыңыз.

2 -кадам: Сиздин Пи Интернетке туташканын текшериңиз

Сиздин Pi Интернетке туташкандыгын текшериңиз
Сиздин Pi Интернетке туташкандыгын текшериңиз

Эми, Пиди кубат булагына туташтырып күйгүзүңүз жана ping буйругу менен интернетке туташканыңызды ырастаңыз. Эгерде сиз Пиңизди интернетке кантип туташтырууну билбесеңиз, бул жерди басыңыз.

sudo ping www.google.com

Эгер ийгиликтүү болсоңуз, анда маалымат Google тарабынан кабыл алынганын көрүшүңүз керек.

Кошумча катары, сиз IP дарегиңизди көрүү үчүн ifconfig колдоно аласыз.

sudo ifconfig

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

Конфигурация интерфейсин ачуу үчүн төмөнкү буйрукту колдонуңуз жана камераны "интерфейс параметрлеринде" иштетиңиз.

sudo raspi-config

Кайра жүктөөдөн кийин, камераңыздын туура туташкандыгын текшерүү үчүн анын статусун көрсөтө аласыз.

vcgencmd get_camera

Акырында, пикамера модулун орнотуңуз.

пикамераны орнотуу

4 -кадам: Колбаны орнотуңуз

Python үчүн колбаны жана идишке эс алуучу модулду орнотуңуз:

sudo apt-get python-dev python-pip орнотуу

python -m пип колбаны колбаса -тынч

Андан кийин, формаларды түзүү үчүн колдонулган питон колбасынын модулун орнотобуз.

pip flask-wtf орнотуу

5 -кадам: Форма классын түзүңүз

Бардык файлдарыңызды сактоо үчүн iotProject деп аталган каталог түзүңүз.

sudo mkdir iotProject

"CamControl.py" аттуу питон файлын түзүңүз.

Sudo нано camControl.py

Бул файлда биз өзүбүздүн класс классты түзөбүз, ал бизге текст кутучалары бар веб -форма түзүүгө жана колдонуучунун камеранын жөндөөлөрүн өзгөртүүгө, жазууну кол менен баштоого/токтотууга жана видеого тартууга мүмкүнчүлүк берүүчү менюсун ачат.

flask_wtf импорттон FlaskFormfrom wtforms.validators импорттоо DataRequired

class camFrame (FlaskForm):

videoDuration = IntegerField ('Жазуу убактысы (секундада)')

сезимталдык = IntegerField ('Кыймылдын сезгичтиги (диапазону 2500-10000) nСанар канчалык жогору болсо, камера ошончолук сезимтал эмес', валидаторлор = [validators. NumberRange (min = 2500, max = 10000, билдирүү = 'Маанисинен тышкары')])

options = SelectField ('Options', choices = [('none', 'Action'), ('rec', 'Start Recording'), ('stop', 'Stop Stop'), ('сүрөт', 'Сүрөткө тартуу')])

тапшыруу = SubmitField ('Жөнөтүү')

6 -кадам: Колба шаблонун түзүү

Колбача шаблонун түзүү
Колбача шаблонун түзүү

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

Калыптар папкаңыздын ичинде index.html деп аталган файлды түзүңүз. Бул файлдын ичинде жогоруда көрсөтүлгөн кодду кайталаңыз.

7 -кадам: Калыпты түзүңүз

Эми шаблонду көрсөтүүчү файлды түзүүгө убакыт келди. AppCam.py аттуу файлды түзүңүз (мындан ары шаблондор папкасында жок экениңизди текшериңиз). Калыпта колдонулган ар кандай динамикалык мазмун render_template () чакыруусунда аталган аргумент катары колдонулушу керек.

import camControlfrom колбадан импорттоо Колбасы, render_template, суроо, flask_restful импорттун жообу Resource, Api, reqparse

app = Flask (_ name_)

app.config ['SECRET_KEY'] = '13542' api = Api (app)

талдоочу = reqparse. RequestParser ()

parser.add_argument ('dur', type = int, help = 'Кыймыл аныкталганда видеонун узактыгы') parser.add_argument ('sens', type = int, help = 'Жазууну иштетүү үчүн керектүү кыймылдын деңгээли') талдоочу.add_argument ('opt', type = str, help = 'Кол менен видео жаздыруу же сүрөт тартуу')

класс жаңыртуусу (булак):

Wtforms def post үчүн посттор (өзүнчө): args = parser.parse_args () #rc.input (args ['dur'], args ['sens'], args ['opt']) #текст файлына жазуу параллелдүү иштеп жаткан камера менен сүйлөшөт cameraSettingsFile = open ("cameraSettings.txt", 'w') cameraSettingsFile.write (args ['dur'] + '\ n') #wr Dur dur cameraSettingsFile.write (args ['sens'] + '\ n') #write sens cameraSettingsFile.write (args ['opt'] + '\ n') #write opt cameraSettingsFile.close () return {'dur': args ['dur'], 'sens': args ['сезим'], 'тандоо': args ['тандоо']}

@app.route ('/', ыкмалар = ['Get', 'POST'])

def index (): "" "Контроллердин башкы бети" "" form = camControl.camFrame () #бул форма, эгер request.method == 'POST': print (request.form) args = [i for i in request in.form.items ()] #rc.input (int (args [0] [1]), int (args [1] [1]), args [2] [1]) cameraSettingsFile = open ("cameraSettings.txt ", 'w') cameraSettingsFile.write (args [0] [1] + '\ n') #write dur cameraSettingsFile.write (args [1] [1] + '\ n') #wriss sensor cameraSettingsFile.write (args [2] [1] + '\ n') #write opt cameraSettingsFile.close () imageDictionary = {"файл аты": "image.jpg"} кайтуу render_template ('index.html', форма = форма, image = imageDictionary))

api.add_resource (Жаңыртуу, '/update/')

эгер _name_ == '_main_':

app.run (host = '0.0.0.0', port = 80, debug = True, threaded = True)

8 -кадам: Камера операторунун классын түзүү

Эми биз camOperator.py аттуу файлды түзгүбүз келет. Анда биз буга чейин жеткиликтүү PiCamera функцияларын колдонуп, камераны иштетүү ыкмалары менен камера классын түзөбүз. Биз бул объекттин мисалын кийинки кадамда колдонобуз, анда камеранын жана кыймыл сенсорунун функционалдуулугун бириктиребиз.

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

RPi. GPIO импорттоо GPIO импорттоо убактысын импорттоо datetime импорттук датадан

GPIO.setmode (GPIO. BOARD)

GPIO.setup (11, GPIO. IN)

аныктоо = 0

класс камера Оператор:

def _init _ (өзүн):

#конструктор self.cam = picamera. PiCamera () self.data = self.dur = 10 self.sens = 2500 self.opt = "none"

def рекорд (өзүн, дур):

#Рекорддор көзөмөлдөөчү тарабынан коюлган videoName = str (datetime.now ()) videoName = videoName.replace (':', ') videoName = videoName.replace ('. ',') Self.cam.start_recording ('/home/pi/iotProject/videos/' + videoName + '.h264') time.sleep (dur) self.cam.stop_recording ()

def операциясы (өзүн, дур, сезим):

#Камеранын негизги иштеши, адамдын жанында экенин текшерет, эгерде адам жетишерлик көп отурса, биз жазууну баштайбыз! глобалдык аныктоо i = GPIO.input (11) if i == 0: #Кыймыл сенсорунан чыгаруу LOW аныкталса = 0 убакыт. кыймыл аныкталды " +str (аныктоо)) if detect> = sens*10: self.record (dur) print (" RECORDED ") detect = 0 time.sleep (0.1) detect += 1

9 -кадам: Жазуу модулун түзүңүз

Бул долбоор үчүн керектүү акыркы программа rec.py аттуу файлга жазылат. Бул файл камерага качан жазуу керек, канча убакыт жазуу керек жана качан/качан сүрөткө тартуу керектигин айтат. Ал муну 5 -кадамдан баштап тексттик файлга жазылган колдонуучу маалыматын дайыма текшерүү жана окуу аркылуу жасайт. Эгерде файл жаңыртылган болсо, ал ошого жараша сезгичтигин жана узактыгын баалайт, андан кийин жазуу же сүрөт тартылган болсо, ал мазмунду сактайт. pi, же.h264 же-j.webp

'' 'Колбанын серверине параллелдүү түрдө иштейт, сервердин формалары тарабынан коюлган башкаруу өзгөрмөлөрүн окуйт. Формалар тапшырылгандан кийин серверди башкаруунун өзгөрмөлөрү өзүнчө файлга коюлат. Rec модулу бул өзгөрмөлөрдү окуйт жана алардын негизинде камераны жаңыртат. '' 'импорттоо убактысынан camOperator импорттоо датасы импорттук убактысы

rc = camOperator.cameraOperator ()

cameraSettingsFile = open ("cameraSettings.txt", 'w') cameraSettingsFile.close () #бул жерде, негизги цикл иштей электе файлдын ичиндегилерди жок кылуу үчүн, жазуу режиминде ачабыз жана жабабыз.

#Үзгүлтүксүз цикл, адамдардын жанында экенин көрөт. Эгер алар болсо, анда

#камера жазууну баштайт. Бул функция бул камераны көзөмөлдөгөн #server колбасына параллель иштейт. recordInProcess = Туура, жалган болсо: #текшерүү/жазуу эгер ((жазууInProcess == False): rc.operation (rc.dur, rc.sens) #камеранын жөндөөлөрүн сервердин негизинде өзгөртүү камераSettingsFile = open ("cameraSettings.txt", 'r') settingNum = 0 cameraSettingsFile.readlines ичинде орнотуу үчүн (): if settingNum == 0: #Duration өзгөртүү rc.dur = int (жөндөө) elif settingNum == 1: #Сезгичтик rc.sens = int (жөндөө)) elif settingNum == 2: #Action change rc.opt = setting settingNum += 1 cameraSettingsFile.close ()

#аракетти аткарыңыз

# if rc.opt == "none": # Continue if rc.opt == "rec / n" and recordingInProcess == False: print ("Controllerден жазуу буйругун иштетүү") # Учурдагы убакытка жараша видео үчүн аталышты жаратуу videoName = "snappedVid _"+str (datetime.now ()) videoName = videoName.replace (':', ') videoName = videoName.replace ('. ',') rc.cam.start_recording ('/home/pi/iotProject /videos/' + videoName +'.h264 ') recordInProcess = True elif rc.opt == "stop / n" and recordInProcess == True: print ("Controller'ден жазуу буйругун токтотуу") rc.cam.stop_recording () recordInProcess = Жалган cameraSettingsFile = ачык ("cameraSettings.txt", 'w') cameraSettingsFile.write (str (rc.dur)+'\ n') cameraSettingsFile.write (str (rc.sens)+'\ n') cameraSettingsFile. write ("none / n") rc.opt = "none / n" elif rc.opt == "pic / n" and recordInProcess == False: print ("Controllerден pic командасын алуу") pictureName = "snappedPic_ "+str (datetime.now ()) pictureName = pictureName.replace (':', ') pictureName = pictureName.replace ('. ',') rc.cam.st art_preview () time.sleep (5) rc.cam.capture ('pictures/' + pictureName + '.jpg') rc.cam.stop_preview () cameraSettingsFile = open ("cameraSettings.txt", 'w') cameraSettingsFile. write (str (rc.dur)+'\ n') cameraSettingsFile.write (str (rc.sens)+'\ n') cameraSettingsFile.write ("none / n") rc.opt = "none / n"

10 -кадам: Серверди баштаңыз

Серверди баштаңыз
Серверди баштаңыз

SSHди piге киргизиңиз жана серверди жогоруда көрсөтүлгөн буйрук сабын колдонуп баштаңыз.

11 -кадам: СЫНАП КӨРҮҢҮЗ

СЫНАП КӨРҮҢҮЗ!
СЫНАП КӨРҮҢҮЗ!
СЫНАП КӨРҮҢҮЗ!
СЫНАП КӨРҮҢҮЗ!

IP дарегин колдонуп веб -баракчага кириңиз жана камераны алыстан башкара билиңиз!

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