Mündəricat:

Raspberry Pi Təhlükəsizlik Kamerası: 11 Addım (Şəkillərlə birlikdə)
Raspberry Pi Təhlükəsizlik Kamerası: 11 Addım (Şəkillərlə birlikdə)

Video: Raspberry Pi Təhlükəsizlik Kamerası: 11 Addım (Şəkillərlə birlikdə)

Video: Raspberry Pi Təhlükəsizlik Kamerası: 11 Addım (Şəkillərlə birlikdə)
Video: Keşke Daha Önce Öğrenseydik Dediğimiz Zaman Kazandıran 14 Bilgisayar Tüyosu 2024, Noyabr
Anonim
Raspberry Pi Təhlükəsizlik Kamerası
Raspberry Pi Təhlükəsizlik Kamerası

Bu, Raspberry Pi istifadə edərək IoT, hərəkəti aktivləşdirilmiş təhlükəsizlik kamerasının necə yaradılacağı ilə bağlı addım -addım təlimatdır. İstifadəçiyə kameranın həssaslığını və qeyd müddətini tənzimləməyə, əl ilə yazmağa başlamağı/dayandırmağı və/və ya lokal olaraq saxlanılacaq bir şəkil çəkdirməyi təmin edən bir balon veb server və forma yaratmağı öyrənəcəksiniz.

Təchizat

  • Moruq Pi 3
  • Pi kamera
  • PIR hərəkət sensoru
  • SD kart
  • Enerji mənbəyi

Addım 1: Avadanlıq yığın

Avadanlıq yığın
Avadanlıq yığın
Avadanlıq yığın
Avadanlıq yığın
Avadanlıq yığın
Avadanlıq yığın
Avadanlıq yığın
Avadanlıq yığın

Pi söndürüldükdə, micro-SD kartı Pi-yə daxil edin. Kamera modulu lent kabelini Pi üzərindəki kamera modulu portuna daxil edin. Sonra, PRI hərəkət detektorunun 3 sancağını (etiketli VCC, OUT və GND) Pi'nin GPIO pinlərinə bağlayın. VCC -ni 5.5V gücə, GND -ni yerə və OUT -u Pi -də pin 11 -ə bağlayın.

Addım 2: Pi'nizin İnternetə bağlı olduğundan əmin olun

Pi'nizin İnternetə bağlı olduğundan əmin olun
Pi'nizin İnternetə bağlı olduğundan əmin olun

İndi Pi -ni bir enerji mənbəyinə qoşaraq açın və ping əmrindən istifadə edərək internetə qoşulduğunuzu yoxlayın. Pi -ni internetə necə bağlayacağınızı bilmirsinizsə, bura vurun.

sudo ping www.google.com

Uğurlu olsanız, məlumatların google tərəfindən alındığını görməlisiniz.

Əlavə olaraq, IP ünvanınızı görmək üçün ifconfig istifadə edə bilərsiniz.

sudo ifconfig

Addım 3: Kameranı qurun

Konfiqurasiya interfeysini açmaq üçün aşağıdakı əmri istifadə edin və kameranı "interfeys seçimlərində" aktiv edin.

sudo raspi-config

Yenidən başladıqdan sonra, kameranızın düzgün bağlandığından əmin olmaq üçün onun vəziyyətini göstərə bilərsiniz.

vcgencmd get_camera

Nəhayət, picamera modulunu quraşdırın.

pip picamera quraşdırın

Addım 4: Şüşəni quraşdırın

Python üçün balon və balaca istirahət modulunu quraşdırın:

sudo apt-get python-dev python-pip quraşdırın

python -m pip baloncuq -balaca quraşdır

Sonra, forma yaratmaq üçün istifadə olunan bir python flask modulu quraşdıracağıq.

pip flask-wtf quraşdırın

Addım 5: Form Sınıfı yaradın

Bütün fayllarınızı saxlamaq üçün iotProject adlı bir kataloq yaradın.

sudo mkdir iotProject

"CamControl.py" adlı bir python faylı yaradın.

sudo nano camControl.py

Bu faylda, istifadəçinin kameranın parametrlərini dəyişdirə bilməsi, əl ilə bir qeyd başlatması/dayandırması və video çəkməsi üçün mətn qutuları və açılan menyu ilə bir web formu yaratmağımıza imkan verən form sinifimizi yaradacağıq.

flask_wtf idxalından FlaskFormfromdan wtforms.validatorlar idxal DataRequired

sinif camFrame (FlaskForm):

videoDuration = IntegerField ('Qeyd müddəti (saniyə)')

həssaslıq = IntegerField ('Hərəkət Həssaslığı (2500-10000 aralığı) nSayı nə qədər çox olarsa, kamera o qədər həssas olmaz', doğrulayıcılar = [validators. NumberRange (min = 2500, max = 10000, mesaj = 'Dəyər Aralığında')]))

options = SelectField ('Seçimlər', seçimlər = [('heç biri', 'Əməliyyat yoxdur'), ('rec', 'Kayda Başla'), ('dayandır', 'Kaydı dayandır'), ('şəkil', 'Şəkil çək')])

təqdim = SubmitField ('Göndər')

Addım 6: Şüşə Şablon yaradın

Şüşə şablon yaradın
Şüşə şablon yaradın

İstifadəçi interfeysi yaratmaq üçün yeni yaratdığınız formanı istifadə edən bir Şüşə şablonu hazırlamalısınız. Bu fayl html -də yazılacaq və formalarınızla eyni qovluqda olmalı olan şablonlar adlı qovluqda saxlanılacaq.

Şablon qovluğunuzun içərisində index.html adlı bir fayl yaradın. Bu fayl içərisində yuxarıda göstərilən kodu təkrarlayın.

Addım 7: Şablonu göstərin

İndi şablonu göstərən bir fayl yaratmağın vaxtı gəldi. AppCam.py adlı bir fayl yaradın (şablonlar qovluğunda olmadığınızdan əmin olun). Şablonda istifadə olunan hər hansı bir dinamik məzmun render_template () çağırışında adlandırılmış bir arqument olaraq istifadə edilməlidir.

idxal camControlfrom qabdan idxal Flask, render_template, sorğu, flask_restful idxal Resource, Api, reqparse

app = Şüşə (_ adı_)

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

ayrıştırıcı = reqparse. RequestParser ()

parser.add_argument ('dur', type = int, help = 'Hərəkət aşkar edildikdə videonun müddəti') parser.add_argument ('sens', type = int, help = 'Bir qeydin tetiklenmesi üçün lazım olan hərəkət səviyyəsi') ayrıştırıcısı.add_argument ('opt', type = str, help = 'Videonu əl ilə yazın və ya şəkil çəkin')

sinif yeniləməsi (Mənbə):

Wtforms def post (self) üçün materiallar: args = parser.parse_args () #rc.input (args ['dur'], args ['sens'], args ['opt']) #mətn faylına yazın paralel işləyən kamera ilə danışır cameraSettingsFile = open ("cameraSettings.txt", 'w') cameraSettingsFile.write (args ['dur'] + '\ n') #wr dur dur cameraSettingsFile.write (args ['sens'] + '\ n') #write sens kameraSettingsFile.write (args ['opt'] + '\ n') #write opt cameraSettingsFile.close () return {'dur': args ['dur'], 'sens': args ['hissi'], 'seç': args ['opt']}

@app.route ('/', üsullar = ['GET', 'POST'])

def index (): "" "Nəzarətçi ana səhifəsi" "" form = camControl.camFrame () #bu, request.method == 'POST' olduğu təqdirdə bir formadır: 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 = açıq ("cameraSettings.txt ", 'w') cameraSettingsFile.write (args [0] [1] + '\ n') #write dur cameraSettingsFile.write (args [1] [1] + '\ n') #sensor kameraSettingsFile.write (yaz args [2] [1] + '\ n') #write opt cameraSettingsFile.close () imageDictionary = {"fayl adı": "image.jpg"} qayıt render_template ('index.html', forma = forma, görüntü = imageDictionary))

api.add_resource (Güncelleme, '/update/')

əgər _ adı_ == '_ əsas_' olarsa:

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

Addım 8: Kamera Operatoru Sınıfı yaradın

İndi camOperator.py adlı bir fayl yaratmaq istəyirik. İçərisində, artıq mövcud olan PiCamera funksiyalarından istifadə edərək kameranı idarə etmək üsulları ilə bir kamera sinfi təşkil edəcəyik. Növbəti addımda bu obyektin bir nümunəsini istifadə edəcəyik ki, burada kamera və hərəkət sensoru birləşsin.

Bu sinifdə təyin olunan üsullar, istifadəçi daxil olmadığı təqdirdə bu dəyişənlər üçün standart dəyərlər təyin edərkən, istifadəçinin təmin etdiyi həssaslıq və müddət girişlərindən istifadə edərək təhlükəsizlik kamerasındakı "qeyd" parametrlərini dəyişdirir.

RPi. GPIO -nu GPIOimport olaraq, datetime idetime datetime -dan picamera idxal edin

GPIO.setmode (GPIO. BOARD)

GPIO. quraşdırma (11, GPIO. IN)

aşkar = 0

sinif kamerası Operator:

def _init _ (özünü):

#konstruktor self.cam = picamera. PiCamera () self.data = self.dur = 10 self.sens = 2500 self.opt = "heç biri"

def rekord (özünü, 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 əməliyyatı (self, dur, sens):

#Bir insanın yaxınlıqda olub -olmadığını, bir insanın kifayət qədər uzun müddət qaldığını, yoxlamağa davam edən kameranın əsas işi. qlobal algılama i = GPIO.input (11), əgər i == 0: #Hərəkət sensöründən çıxma LOW algılandığında = 0 zaman.yuxu (0.1) elif i == 1: #Hərəkət sensöründən çıxışı YÜKSƏK çap edildikdə (" hərəkət algılandı " +str (algıla)) əgər algılarsa> = sens*10: self.record (dur) print (" QEYD EDİLDİ ") detect = 0 zaman.yuxu (0.1) algılama += 1

Addım 9: Qeyd Modulunu yaradın

Bu layihə üçün lazım olan son proqram rec.py adlı bir faylda yazılacaq. Bu fayl kameraya nə vaxt yazacağını, nə qədər yazacağını və nə vaxt şəkil çəkəcəyini bildirir. Mütəmadi olaraq 5 -ci addımdan mətn sənədinə yazılmış istifadəçi məlumatlarını yoxlayaraq oxuyaraq bunu edir. Fayl yenilənmişsə, həssaslıq və müddət dəyərlərini buna uyğun olaraq düzəldir və sonra bir qeyd və ya şəkil çəkilərsə məzmunu saxlayır. pi, ya.h264 ya da-j.webp

'' 'Şüşə serveri ilə paralel olaraq çalışır, server formaları tərəfindən təyin edilən nəzarət dəyişənlərini oxuyur. Formalar təqdim edildikdən sonra server nəzarət dəyişənləri ayrı bir faylda qurulur. Rec modulu bu dəyişənləri oxuyur və bunlara əsaslanaraq kameranı yeniləyir. '' 'datametime -dan idxal camOperator datetime idxal zamanı

rc = camOperator.cameraOperator ()

cameraSettingsFile = açıq ("cameraSettings.txt", 'w') cameraSettingsFile.close () #burada, əsas döngə başlamazdan əvvəl faylın içindəki məzmunu silmək üçün yazma rejimində açıb bağlayırıq.

#İnsanların yaxınlıqda olub olmadığını izləyən davamlı bir döngə. Əgər belədirsə, deməli

#kamera qeyd etməyə başlayır. Bu funksiya, bu kameranı idarə edən kolba #server ilə paralel olaraq çalışır. recordInProcess = Doğru olarkən Yanlış: #yoxlayın/qeyd edin ((yazmaInProcess == Yanlış): rc.operation (rc.dur, rc.sens) #kameranın parametrlərini serverə əsaslanaraq dəyişdirin cameraSettingsFile = open ("cameraSettings.txt"), 'r') settingSum = 0 kameraSettingsFile.readlines () üçün ayarlama (): əgər settingNum == 0: #Duration dəyişikliyi rc.dur = int (ayar) elif settingNum == 1: #Həssaslıq dəyişikliyi rc.sens = int (ayar) elif settingNum == 2: #Action change rc.opt = setting settingNum += 1 cameraSettingsFile.close ()

#bir hərəkət edin

# if rc.opt == "none": # Continue if rc.opt == "rec / n" and recordInProcess == False: print ("Controller -dən qeyd əmri işlədilir") # Cari vaxt videoName əsasında video üçün ad yaradın = "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" və recordInProcess == Doğru: print ("Controller -dən qeyd əmrinin dayandırılması") rc.cam.stop_recording () recordInProcess = Yanlış cameraSettingsFile = açıq ("cameraSettings.txt", 'w') cameraSettingsFile.write (str (rc.dur)+'\ n') cameraSettingsFile.write (str (rc.sens)+'\ n') cameraSettingsFile. yaz ("yox / n") rc.opt = "yox / n" elif rc.opt == "şəkil / n" və qeydInProcess == Yanlış: çap et ("Kontrolördən bir şəkil əmri çək") 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. yaz (str (rc.dur)+'\ n') cameraSettingsFile.write (str (rc.sens)+'\ n') cameraSettingsFile.write ("none / n") rc.opt = "none / n"

Addım 10: Serveri işə salın

Serveri işə salın
Serveri işə salın

SSH -ni pi -yə daxil edin və yuxarıda göstərilən əmr satırını istifadə edərək serveri işə salın.

Addım 11: SINAŞIN

DANIŞDIRIN!
DANIŞDIRIN!
DANIŞDIRIN!
DANIŞDIRIN!

IP ünvanından istifadə edərək veb səhifəsinə daxil olun və kameranı uzaqdan idarə edə biləcəksiniz!

Tövsiyə: