Raspberry Pi xavfsizlik kamerasi: 11 qadam (rasmlar bilan)
Raspberry Pi xavfsizlik kamerasi: 11 qadam (rasmlar bilan)
Anonim
Raspberry Pi xavfsizlik kamerasi
Raspberry Pi xavfsizlik kamerasi

Bu asta -sekin Raspberry Pi yordamida IoT, harakatlanuvchi xavfsizlik kamerasini yaratish bo'yicha ko'rsatma. Siz kameraning sezgirligi va yozish vaqtini sozlash, qo'lda yozishni boshlash/to'xtatish va/yoki mahalliy sifatida saqlanadigan rasmni olish imkonini beradigan kolbadagi veb -server va shaklni yaratishni o'rganasiz.

Ta'minotlar

  • Raspberry Pi 3
  • Pi kamera
  • PIR harakat sensori
  • SD -karta
  • Quvvat manbai

1 -qadam: Uskuna yig'ing

Uskunani yig'ing
Uskunani yig'ing
Uskunani yig'ing
Uskunani yig'ing
Uskunani yig'ing
Uskunani yig'ing
Uskunani yig'ing
Uskunani yig'ing

Pi o'chirilgan bo'lsa, micro-SD-kartani Pi-ga joylashtiring. Kamera modulining tasma kabelini Pi -dagi kamera moduli portiga joylashtiring. Keyin, PRI harakat detektorining 3 pinini (VCC, OUT va GND deb belgilangan) Pi GPIO pinlariga ulang. VCC -ni 5,5V kuchga, GND -ni erga va OUT -ni Pi -11 -piniga ulang.

2 -qadam: Sizning Pi Internetga ulanganligiga ishonch hosil qiling

Sizning Pi Internetga ulanganligiga ishonch hosil qiling
Sizning Pi Internetga ulanganligiga ishonch hosil qiling

Endi Pi -ni quvvat manbaiga ulab yoqing va ping buyrug'i yordamida Internetga ulanganligingizni tasdiqlang. Agar siz Pi -ni Internetga qanday ulashni bilmasangiz, bu erni bosing.

sudo ping www.google.com

Agar muvaffaqiyat qozongan bo'lsangiz, ma'lumotlar Google tomonidan qabul qilinayotganini ko'rishingiz kerak.

Bundan tashqari, ifconfig yordamida IP -manzilingizni ko'rishingiz mumkin.

sudo ifconfig

3 -qadam: Kamerani sozlash

Konfiguratsiya interfeysini ochish uchun quyidagi buyruqni ishlating va kamerani "interfeys imkoniyatlari" da yoqing.

sudo raspi-config

Qayta ishga tushirilgandan so'ng, siz to'g'ri ulanganligini tekshirish uchun kamerangiz holatini ko'rsatishingiz mumkin.

vcgencmd get_camera

Nihoyat, pikamera modulini o'rnating.

pikamera o'rnatish

4 -qadam: Shishani o'rnating

Python uchun kolba va kolbaga qulay modulni o'rnating:

sudo apt-get python-dev python-pip ni o'rnating

python -m pip kolbasini o'rnating

Keyinchalik, biz formalar yaratish uchun ishlatiladigan piton kolbasi modulini o'rnatamiz.

pip flask-wtf ni o'rnating

5 -qadam: Formalar sinfini yarating

Barcha fayllaringizni saqlash uchun iotProject nomli katalog yarating.

sudo mkdir iotProject

"CamControl.py" nomli python faylini yarating.

sudo nano camControl.py

Bu faylda biz formalar sinfini yaratamiz, bu bizga matn qutilari va ochiladigan menyudan iborat veb -shaklni yaratishga imkon beradi, buning uchun foydalanuvchi kamera sozlamalarini o'zgartirishi, qo'lda yozishni boshlashi/to'xtatishi va video yozib olishi mumkin.

flask_wtf import dan FlaskFormfrom dan wtforms.validators import DataRequired wtforms import SubmitField dan wtforms import validatorlari, IntegerField, BooleanField, SelectField

sinf camFrame (FlaskForm):

videoDuration = IntegerField ('Yozish vaqti (soniyalarda)')

sezuvchanlik = IntegerField ('Harakat sezuvchanligi (diapazoni 2500-10000) nRaqam qanchalik baland bo'lsa, kamera shunchalik sezgir emas', validatorlar = [validators. NumberRange (min = 2500, max = 10000, xabar = 'Qiymat chegaradan tashqarida')]))

variantlar = SelectField ('Tanlovlar', tanlovlar = [('hech biri', 'Hech qanday harakat'), ('rek', 'Yozishni boshlash'), ('to'xtatish', 'Yozishni to'xtatish'), ("rasm", "Rasmga olish")])

yuborish = SubmitField ("Yuborish")

6 -qadam: Shabloni shablonini yarating

Shisha shablonini yarating
Shisha shablonini yarating

Foydalanuvchi interfeysini yaratish uchun siz hozirgina yaratgan shaklni ishlatadigan Flask shablonini yaratishingiz kerak. Bu fayl html -da yoziladi va sizning shaklingiz bilan bir xil katalogda bo'lishi kerak bo'lgan andozalar nomli papkada saqlanadi.

Andoza papkasining ichida index.html nomli fayl yarating. Ushbu fayl ichida yuqorida ko'rsatilgan kodni takrorlang.

7 -qadam: shablonni ko'rsatish

Endi shablonni ko'rsatadigan faylni yaratish vaqti keldi. AppCam.py nomli fayl yarating (endi andozalar papkasida yo'qligingizga ishonch hosil qiling). Andoza ishlatilgan har qanday dinamik tarkib render_template () ga qo'ng'iroqda nomlangan argument sifatida ishlatilishi kerak.

import camControlfrom dan flask import Flask, render_template, request, flask_restful import dan javob Resource, Api, reqparse

app = Flask (_ nomi_)

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

parser = reqparse. RequestParser ()

parser.add_argument ('dur', type = int, help = 'Harakat aniqlanganda video davomiyligi') parser.add_argument ('sens', type = int, help = 'Yozuvni ishga tushirish uchun zarur bo'lgan harakat darajasi').add_argument ('opt', type = str, help = 'Videoni qo'lda yozib olish yoki rasmga olish')

sinf yangilanishi (manba):

#Wtforms def post (self) uchun narsalar: args = parser.parse_args () #rc.input (args ['dur'], args ['sens'], args ['opt']) #matnli faylga yozing parallel ishlaydigan kameraSettingsFile = open ("cameraSettings.txt", 'w') cameraSettingsFile.write (args ['dur'] + '\ n') #write dur cameraSettingsFile.write (args ['sens'] + '\ n') #write sensor cameraSettingsFile.write (args ['opt'] + '\ n') #write opt cameraSettingsFile.close () return {'dur': args ['dur'], 'sens': args ['his'], 'opt': args ['opt']}

@app.route ('/', usullar = ['OLISH', 'POST'])

def index (): "" "Nazoratchining bosh sahifasi" "" form = camControl.camFrame () #bu formadir, agar 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') #sensor kameraSettingsFile.write (yozish) args [2] [1] + '\ n') #write opt cameraSettingsFile.close () imageDictionary = {"fayl nomi": "image.jpg"} qaytish render_template ('index.html', form = shakl, image = imageDictionary))

api.add_resource (Yangilash, '/update/')

agar _name_ == "_main_" bo'lsa:

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

8 -qadam: Kamera operatorlari sinfini yarating

Endi biz camOperator.py nomli fayl yaratmoqchimiz. Unda biz PiCamera -ning mavjud funktsiyalaridan foydalangan holda kamerani ishlatish usullarini o'z ichiga olgan kamera sinfini yaratamiz. Keyingi bosqichda biz ushbu ob'ektning misolini ishlatamiz, u erda biz kamera va harakat sensori funksiyalarini birlashtiramiz.

Bu sinfda aniqlangan usullar xavfsizlik kamerasidagi "yozib olish" parametrlarini foydalanuvchi taqdim etadigan sezgirlik va davomiylik ma'lumotlari yordamida o'zgartiradi, shu bilan birga, agar foydalanuvchi kiritmagan bo'lsa, bu o'zgaruvchilar uchun standart qiymatlarni o'rnatadi.

RPi. GPIO -ni GPIOimporti sifatida import pikamerini datetime import datetime -dan import qilish

GPIO.setmode (GPIO. BOARD)

GPIO. sozlash (11, GPIO. IN)

aniqlash = 0

sinf kamerasi operatori:

def _init _ (o'zi):

#konstruktor self.cam = picamera. PiCamera () self.data = self.dur = 10 self.sens = 2500 self.opt = "yo'q"

def rekord (self, dur):

#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 operatsiyasi (o'z -o'zidan, dur, sezgi):

#Odamning yonida yoki yo'qligini, odam etarlicha tursa, biz yozishni boshlaymiz! global aniqlash i = GPIO.input (11) if i == 0: #Harakat sensori chiqqani LOW aniqlanganda = 0 vaqt. uyqu (0.1) elif i == 1: #Harakat sensori chiqishi yuqori bosilganda (" harakat aniqlandi " +str (aniqlash)) if if>> sens*10: self.record (dur) print (" RECORDED ") detect = 0 time.sleep (0.1) detect += 1

9 -qadam: Yozish modulini yarating

Ushbu loyiha uchun zarur bo'lgan oxirgi dastur rec.py nomli faylga yoziladi. Bu fayl kameraga qachon yozish, qancha vaqt yozish va qachon/qachon suratga olish kerakligini aytadi. Bu 5 -bosqichdan boshlab matnli faylga yozilgan foydalanuvchi ma'lumotlarini doimiy ravishda tekshirish va o'qish orqali amalga oshiriladi. Agar fayl yangilangan bo'lsa, u sezgirlik va davomiylik qiymatlarini mos ravishda o'zgartiradi, so'ngra yozuv yoki rasm olingan bo'lsa, u tarkibni saqlaydi. pi.h264 yoki-j.webp

'' 'Kolba serveri bilan parallel ravishda ishlaydi, server shakllari tomonidan o'rnatilgan boshqaruv o'zgaruvchilari o'qiladi. Shakllar yuborilgandan so'ng, serverni boshqarish o'zgaruvchilari alohida faylga o'rnatiladi. Rec moduli bu o'zgaruvchilarni o'qiydi va ular asosida kamerani yangilaydi. "" CamOperator -ni datetime -dan import qilish -import qilish

rc = camOperator.cameraOperator ()

cameraSettingsFile = ochiq ("cameraSettings.txt", 'w') cameraSettingsFile.close () #bu erda, asosiy tsikl ishga tushgunga qadar fayl ichidagi tarkibni o'chirish uchun yozish rejimida ochamiz va yopamiz.

#Odamlar yaqin yoki yo'qligini kuzatadigan uzluksiz tsikl. Agar ular bo'lsa, demak

#kamera yozishni boshlaydi. Bu funksiya ushbu kamerani boshqaruvchi #server kolbasi bilan parallel ishlaydi. recordInProcess = False rost bo'lsa: #tekshiring/yozing, agar (recordInProcess == False): rc.operation (rc.dur, rc.sens) #kamera sozlamalarini server kamerasi asosida o'zgartiring cameraSettingsFile = open ("cameraSettings.txt"), 'r') settingNum = 0 cameraSettingsFile.readlines () ga sozlash uchun (): agar settingNum == 0: #Duraning o'zgarishi rc.dur = int (sozlama) elif settingNum == 1: #Sensitivlik o'zgarishi rc.sens = int) elif settingNum == 2: #Action change rc.opt = settingsNum += 1 cameraSettingsFile.close ()

#harakatni bajaring

# if rc.opt == "none": # Continue if rc.opt == "rec / n" and recordInProcess == False: print ("Controllerdan yozib olish buyrug'ini ishga tushirish") # Hozirgi vaqtga qarab video nomini yarating videoName = "snappedVid _"+str (datetime.now ()) videoName = videoName.replace (':', ') videoName = videoName.replace ('. ',') rc.cam.start_recording ('/home/pi/iotProject) /videos/' + videoName +'.h264 ') recordInProcess = Haqiqiy elif rc.opt == "stop / n" va recordInProcess == To'g'ri: chop etish ("Tekshirgichdan yozib olish buyrug'ini to'xtatish") rc.cam.stop_recording () recordInProcess = Soxta kameraSettingsFile = ochiq ("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 ("Tekshirgichdan rasm buyrug'ini olish") pictureName = "snappedPic_ "+str (datetime.now ()) PictureName = PictureName.replace (':', ') PictureName = PictureName.replace ('. ',') rc.cam.st art_preview () time.sleep (5) rc.cam.capture ('rasmlar/' + rasm nomi + '.jpg') rc.cam.stop_preview () cameraSettingsFile = ochiq ("cameraSettings.txt", "w ') cameraSettingsFile. yozish (str (rc.dur)+'\ n') cameraSettingsFile.write (str (rc.sens)+'\ n') cameraSettingsFile.write ("none / n") rc.opt = "none / n"

10 -qadam: Serverni ishga tushiring

Serverni ishga tushiring
Serverni ishga tushiring

SSH -ni pi -ga joylashtiring va serverni yuqorida ko'rsatilgan buyruq satri yordamida ishga tushiring.

11 -qadam: KO'RING

KO'RING!
KO'RING!
KO'RING!
KO'RING!

IP -manzil yordamida veb -sahifaga kiring va siz kamerani masofadan boshqarishingiz mumkin!

Tavsiya: