Talaan ng mga Nilalaman:

Raspberry Pi Security Camera: 11 Hakbang (na may Mga Larawan)
Raspberry Pi Security Camera: 11 Hakbang (na may Mga Larawan)

Video: Raspberry Pi Security Camera: 11 Hakbang (na may Mga Larawan)

Video: Raspberry Pi Security Camera: 11 Hakbang (na may Mga Larawan)
Video: On the traces of an Ancient Civilization? 🗿 What if we have been mistaken on our past? 2024, Nobyembre
Anonim
Camera ng Seguridad ng Raspberry Pi
Camera ng Seguridad ng Raspberry Pi

Ito ay isang hakbang-hakbang na itinuturo sa kung paano lumikha ng isang IoT, galaw na aktibo ng security camera gamit ang isang Raspberry Pi. Malalaman mo kung paano lumikha ng isang flask web server at form na nagbibigay-daan sa gumagamit na ayusin ang pagkasensitibo at oras ng pagrekord ng camera, manu-manong magsimula / huminto sa isang pagrekord, at / o kumuha ng larawan na mai-save sa isang lokal.

Mga gamit

  • Raspberry Pi 3
  • Pi camera
  • Sensor ng paggalaw ng PIR
  • SD card
  • Pinagkukunan ng lakas

Hakbang 1: Ipunin ang Hardware

Ipunin ang Hardware
Ipunin ang Hardware
Ipunin ang Hardware
Ipunin ang Hardware
Ipunin ang Hardware
Ipunin ang Hardware
Ipunin ang Hardware
Ipunin ang Hardware

Habang naka-off ang Pi, ipasok ang micro-SD card sa Pi. Ipasok ang module module ng camera ribbon cable sa port ng module ng camera sa Pi. Pagkatapos, ikonekta ang 3 mga pin (may label na VCC, OUT, at GND) ng detektor ng paggalaw ng PRI sa mga pin ng GPIO ng Pi. Ikonekta ang VCC sa 5.5V ng lakas, ang GND sa lupa, at ang OUT upang i-pin 11 sa Pi.

Hakbang 2: Tiyaking Nakakonekta ang Iyong Pi sa Internet

Tiyaking Nakakonekta ang iyong Pi sa Internet
Tiyaking Nakakonekta ang iyong Pi sa Internet

Ngayon, i-on ang Pi sa pamamagitan ng pagkonekta nito sa isang mapagkukunan ng kuryente at i-verify na nakakonekta ka sa internet gamit ang ping command. Kung hindi mo alam kung paano ikonekta ang iyong Pi sa internet, mag-click dito.

sudo ping www.google.com

Kung matagumpay ka, dapat mong makita na ang data ay natatanggap ng google.

Bilang karagdagan, maaari mong gamitin ang ifconfig upang makita ang iyong IP address.

sudo ifconfig

Hakbang 3: I-set up ang Camera

Gamitin ang sumusunod na utos upang buksan ang interface ng pagsasaayos, at paganahin ang camera sa "mga pagpipilian sa interfacing".

sudo raspi-config

Pagkatapos ng pag-reboot, maaari mong ipakita ang katayuan ng iyong camera upang matiyak na maayos itong konektado.

vcgencmd makakuha_camera

Panghuli, i-install ang module ng picamera.

pip install picamera

Hakbang 4: I-install ang Flask

I-install ang flask at flask-restful module para sa Python:

sudo apt-get install python-dev python-pip

python -m pip install flask flask-restful

Susunod, mag-i-install kami ng isang module ng python flask na ginamit para sa paglikha ng mga form.

pip install flask-wtf

Hakbang 5: Lumikha ng isang Klase sa Form

Gumawa ng isang direktoryo na tinatawag na iotProject upang maiimbak ang lahat ng iyong mga file sa.

sudo mkdir iotProject

Lumikha ng isang python file na pinangalanang "camControl.py".

sudo nano camControl.py

Sa file na ito lilikha kami ng aming klase ng form, na nagbibigay-daan sa amin upang lumikha ng isang form sa web na may mga kahon ng teksto at isang drop down na menu para mabago ng gumagamit ang mga setting ng camera, manu-manong magsimula / huminto sa isang pagrekord, at makakuha ng video.

mula sa flask_wtf import FlaskFormfrom wtforms.validators import DataRequired mula sa wtforms import SubmitField mula sa wtforms import validators, IntegerField, BooleanField, SelectField

klase camFrame (FlaskForm):

videoDuration = IntegerField ('Oras ng Pagre-record (sa mga segundo)')

pagkasensitibo = IntegerField ('Sensitivity ng Paggalaw (saklaw 2500-10000) n Ang mas mataas ang bilang, mas hindi gaanong sensitibo ang camera', validators = [validators. NumberRange (min = 2500, max = 10000, message = 'Value Out of Range')])

options = SelectField ('Mga Pagpipilian', mga pagpipilian = [('none', 'Walang aksyon'), ('rec', 'Start Recording'), ('stop', 'Stop Recording'), ('pic', 'Kumuha ng Larawan')])

isumite = KirimField ('Isumite')

Hakbang 6: Lumikha ng isang Template ng Flask

Lumikha ng isang Template ng Flask
Lumikha ng isang Template ng Flask

Upang likhain ang interface ng gumagamit, dapat kang magdisenyo ng isang template ng Flask na gumagamit ng form na ngayon mo lamang nilikha. Isusulat ang file na ito sa html, at maiimbak sa isang folder na tinatawag na mga template, na dapat ay nasa parehong direktoryo ng iyong form.

Sa loob ng iyong folder ng mga template, lumikha ng isang file na tinatawag na index.html. Sa loob ng file na ito, kopyahin ang code na ipinakita sa itaas.

Hakbang 7: Ibalik ang Template

Ngayon ay oras na upang lumikha ng isang file na naglalagay ng template. Lumikha ng isang file na pinangalanang appCam.py (tiyaking wala ka na sa folder ng mga template). Anumang mga dinamikong nilalaman na ginamit sa template ay dapat gamitin bilang isang pinangalanang argumento sa tawag na render_template ().

import camControlfrom flask import Flask, render_template, request, Response from flask_restful import Resource, Api, reqparse

app = Flask (_ name_)

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

parser = reqparse. RequestParser ()

parser.add_argument ('dur', type = int, help = 'Tagal ng video kapag nakita ang paggalaw') parser.add_argument ('sens', type = int, help = 'Antas ng paggalaw na kinakailangan upang mag-trigger ng isang recording') parser.add_argument ('opt', type = str, help = 'Manu-manong magrekord ng isang video o kumuha ng isang imahe')

pag-update sa klase (Mapagkukunan):

#Stuff para sa wtforms def post (sarili): args = parser.parse_args () # rc.input (args ['dur'], args ['sens'], args ['opt']) #write to the text file that pinag-uusapan ang camera na tumatakbo sa parallel cameraSettingsFile = open ("cameraSettings.txt", 'w') cameraSettingsFile.write (args ['dur'] + '\ n') #write dur cameraSettingsFile.write (args ['sens'] + '\ n') #write sens cameraSettingsFile.write (args ['opt'] + '\ n') #write opt cameraSettingsFile.close () ibalik ang '' dur ': args [' dur '],' sens ': args ['sense'], 'opt': args ['opt']}

@ app.route ('/', mga pamamaraan = ['GET', 'POST'])

def index (): "" "Controller home page" "" form = camControl.camFrame () #this is a form if request.method == 'POST': print (request.form) args = [i for i in request.form.items ()] # rc.input (int (args [0] [1]), int (args [1] [1]), args [2] [1]) cameraSettingsFile = bukas ("cameraSettings.txt ", 'w') cameraSettingsFile.write (args [0] [1] + '\ n') #write dur cameraSettingsFile.write (args [1] [1] + '\ n') #write sens cameraSettingsFile.write (args [2] [1] + '\ n') #write opt cameraSettingsFile.close () imageDictionary = {"filename": "image.jpg"} bumalik render_template ('index.html', form = form, image = imageDictionary)

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

kung _name_ == '_main_':

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

Hakbang 8: Lumikha ng isang Klase ng Operator ng Camera

Ngayon nais naming lumikha ng isang file na tinatawag na camOperator.py. Sa loob nito gagawa kami ng klase ng camera na may mga pamamaraan upang mapatakbo ang camera, na ginagamit ang magagamit na mga pagpapaandar ng PiCamera. Gumagamit kami ng isang halimbawa ng bagay na ito sa susunod na hakbang kung saan pagsamahin namin ang pag-andar ng camera at sensor ng paggalaw.

Ang mga pamamaraan na tinukoy sa klase na ito ay binabago ang mga setting ng "record" sa security camera gamit ang pagiging sensitibo at tagal ng mga input na ibinibigay ng gumagamit, habang nagtataguyod ng mga default na halaga para sa mga variable na ito kung ang pag-input ng gumagamit ay wala.

i-import ang RPi. GPIO bilang GPIOimport ang oras sa pag-import ng picamera mula sa datime na pag-import ng datime

GPIO.setmode (GPIO. BOARD)

GPIO.setup (11, GPIO. IN)

tuklasin = 0

class cameraOperator:

def _init _ (sarili):

#constructor self.cam = picamera. PiCamera () self.data = self.dur = 10 self.sens = 2500 self.opt = "none"

record ng def (sarili, dur):

#Records para sa ibinigay na tagal na itinakda ng controller videoName = str (datetime.now ()) videoName = videoName.replace (':', ') videoName = videoName.replace ('. ',') Self.cam.start_recording ('/ home / pi / iotProject / videos /' + videoName + '.h264') oras. tulog (dur) self.cam.stop_recording ()

operasyon ng def (sarili, dur, sens):

#Pangunahan ang pagpapatakbo ng camera na kung saan ay patuloy na suriin upang makita kung ang isang tao ay malapit, kung ang isang tao ay mananatili sa paligid ng sapat na haba, nagsisimula kaming mag-record! pandaigdigang tiktikan i = GPIO.input (11) kung i == 0: #Kapag ang output mula sa sensor ng paggalaw ay LOW detect = 0 time.s Sleep (0.1) elif i == 1: #Kapag ang output mula sa sensor ng paggalaw ay MATAAS na naka-print (" nakita ang paggalaw "+ str (tuklasin)) kung nakita> = sens * 10: self.record (dur) print (" NAREKord ") tuklasin = 0 oras. pagtulog (0.1) tuklasin + = 1

Hakbang 9: Lumikha ng Modyul ng Rekord

Ang huling program na kinakailangan para sa proyektong ito ay isusulat sa isang file na pinangalanang rec.py. Sinasabi ng file na ito sa camera kung kailan magtatala, kung gaano katagal mag-record, at kung / kailan kumuha ng larawan. Ginagawa ito sa pamamagitan ng patuloy na pagsuri at pagbabasa ng data ng gumagamit na nakasulat sa file ng teksto mula sa hakbang 5. Kung na-update ang file na inaayos nito ang pagkasensitibo at tagal ng mga halaga nang naaayon at pagkatapos, kung ang isang pagrekord o larawan ay kinukuha, nai-save ang nilalaman sa ang pi, alinman sa isang.h264 o-j.webp

'' 'Tumatakbo nang kahanay sa flask server, binabasa ang mga variable ng kontrol na itinakda ng mga form ng server. Ang mga variable ng control ng server ay nakatakda sa isang magkakahiwalay na file sa sandaling maisumite ang mga form. Binabasa ng module ng rec ang mga variable na ito at ina-update ang camera batay sa mga ito. '' 'i-import ang camOperator mula sa oras ng pag-import ng datime ng oras ng pag-import

rc = camOperator.cameraOperator ()

cameraSettingsFile = bukas ("cameraSettings.txt", 'w') cameraSettingsFile.close () #dito, binubuksan at isinasara namin ang mode ng pagsulat upang matanggal ang mga nilalaman sa loob ng file bago tumakbo ang pangunahing loop

# Isang tuluy-tuloy na loop na nanonood upang makita kung ang mga tao ay malapit. Kung sila ay, kung gayon

Ang camera ay nagsisimulang magrekord. Ang pagpapaandar na ito ay tumatakbo sa paralell kasama ang flask #server na kumokontrol sa camera na ito. recordingInProcess = Mali habang Totoo: # check / record if (recordingInProcess == Mali): rc.operation (rc.dur, rc.sens) # baguhin ang mga setting ng camera batay sa server cameraSettingsFile = bukas ("cameraSettings.txt", 'r') settingNum = 0 para sa pagtatakda sa cameraSettingsFile.readlines (): kung settingNum == 0: #Duration pagbabago rc.dur = int (setting) elif settingNum == 1: #Sensitivity baguhin rc.sens = int (setting) setting ng elifNum == 2: #Action pagbabago rc.opt = setting settingNum + = 1 cameraSettingsFile.close ()

# magpatupad ng isang aksyon

# if rc.opt == "none": # magpatuloy kung rc.opt == "rec / n" at recordingInProcess == Mali: i-print ("Pagpapatakbo ng record ng record mula sa controller") #Generate name for video based on current time videoName = "snappedVid _" + str (datetime.now ()) videoName = videoName.replace (':', ') videoName = videoName.replace ('. ',') rc.cam.start_recording ('/ home / pi / iotProject / videos / '+ videoName +'.h264 ') recordingInProcess = True elif rc.opt == "stop / n" at recordingInProcess == True: print ("Natigil ang command ng record mula sa controller") rc.cam.stop_recording () recordingInProcess = Maling cameraSettingsFile = bukas ("cameraSettings.txt", 'w') cameraSettingsFile.write (str (rc.dur) + '\ n') cameraSettingsFile.write (str (rc.sens) + '\ n') cameraSettingsFile. isulat ("none / n") rc.opt = "none / n" elif rc.opt == "pic / n" at recordingInProcess == Mali: i-print ("I-snap ang isang utos ng pic mula sa controller") pictureName = "snappedPic_ "+ str (datetime.now ()) pictureName = pictureName.replace (':', ') pictureName = pictureName.replace ('. ',') rc.cam.st art_preview () time.s Sleep (5) rc.cam.capture ('pictures /' + pictureName + '.jpg') rc.cam.stop_preview () cameraSettingsFile = bukas ("cameraSettings.txt", 'w') cameraSettingsFile. isulat (str (rc.dur) + '\ n') cameraSettingsFile.write (str (rc.sens) + '\ n') cameraSettingsFile.write ("none / n") rc.opt = "none / n"

Hakbang 10: Simulan ang Server

Simulan ang Server
Simulan ang Server

SSH papunta sa pi at simulan ang server gamit ang linya ng utos na ipinakita sa itaas.

Hakbang 11: TRY IT OUT

SUBUKAN!
SUBUKAN!
SUBUKAN!
SUBUKAN!

I-access ang webpage gamit ang IP address at dapat mong makontrol ang camera nang malayuan!

Inirerekumendang: