Raspberry Pi Güvenlik Kamerası: 11 Adım (Resimli)
Raspberry Pi Güvenlik Kamerası: 11 Adım (Resimli)
Anonim
Raspberry Pi Güvenlik Kamerası
Raspberry Pi Güvenlik Kamerası

Bu, bir Raspberry Pi kullanarak IoT, hareketle etkinleştirilen bir güvenlik kamerasının nasıl oluşturulacağı konusunda adım adım talimat verilen bir kitaptır. Kullanıcının kameranın hassasiyetini ve kayıt süresini ayarlamasına, manuel olarak bir kaydı başlatmasına/durdurmasına ve/veya yerel olarak kaydedilecek bir resim çekmesine olanak tanıyan bir şişe web sunucusu ve formunun nasıl oluşturulacağını öğreneceksiniz.

Gereçler

  • Ahududu Pi 3
  • Pi kamera
  • PIR hareket sensörü
  • hafıza kartı
  • Güç kaynağı

Adım 1: Donanımı Birleştirin

Donanımı Birleştirin
Donanımı Birleştirin
Donanımı Birleştirin
Donanımı Birleştirin
Donanımı Birleştirin
Donanımı Birleştirin
Donanımı Birleştirin
Donanımı Birleştirin

Pi kapalıyken, mikro SD kartı Pi'ye takın. Kamera modülü şerit kablosunu Pi üzerindeki kamera modülü bağlantı noktasına takın. Ardından, PRI hareket dedektörünün 3 pinini (VCC, OUT ve GND etiketli) Pi'nin GPIO pinlerine bağlayın. VCC'yi 5.5V güce, GND'yi toprağa ve OUT'u Pi üzerindeki pin 11'e bağlayın.

2. Adım: Pi'nizin İnternete Bağlı Olduğundan Emin Olun

Pi'nizin İnternete Bağlı Olduğundan Emin Olun
Pi'nizin İnternete Bağlı Olduğundan Emin Olun

Şimdi bir güç kaynağına bağlayarak Pi'yi açın ve ping komutunu kullanarak internete bağlı olduğunuzu doğrulayın. Pi'nizi internete nasıl bağlayacağınızı bilmiyorsanız buraya tıklayın.

sudo ping www.google.com

Başarılı olursanız, verilerin google tarafından alındığını görmelisiniz.

Ek olarak, IP adresinizi görmek için ifconfig'i kullanabilirsiniz.

sudo ifconfig

3. Adım: Kamerayı Kurun

Konfigürasyon arayüzünü açmak için aşağıdaki komutu kullanın ve "arayüz seçenekleri"nde kamerayı etkinleştirin.

sudo raspi yapılandırması

Yeniden başlattıktan sonra, düzgün şekilde bağlandığından emin olmak için kameranızın durumunu görüntüleyebilirsiniz.

vcgencmd get_camera

Son olarak, picamera modülünü kurun.

pip kurulum picamera

Adım 4: Flask'ı kurun

Python için matara ve matara dinlenme modülünü kurun:

sudo apt-get kurulum python-dev python-pip

python -m pip yükleme şişesi şişesi-huzurlu

Ardından, form oluşturmak için kullanılan bir python flask modülü kuracağız.

pip yükleme şişesi-wtf

Adım 5: Bir Form Sınıfı Oluşturun

Tüm dosyalarınızı depolamak için iotProject adında bir dizin oluşturun.

sudo mkdir iotProject

"camControl.py" adlı bir python dosyası oluşturun.

sudo nano camControl.py

Bu dosyada, kullanıcının kamera ayarlarını değiştirebilmesi, manuel olarak bir kaydı başlatabilmesi/durdurabilmesi ve video çekebilmesi için metin kutuları ve bir açılır menü içeren bir web formu oluşturmamıza izin veren form sınıfımızı oluşturacağız.

flask_wtf'den FlaskForm'u wtforms.validators'dan içe aktar DataRequired'ı wtforms'dan içe aktar SubmitField'i wtforms'dan içe aktar, IntegerField, BooleanField, SelectField

sınıf camFrame(FlaskForm):

videoDuration = IntegerField('Kayıt Süresi (saniye olarak)')

duyarlılık = IntegerField('Hareket Duyarlılığı (2500-10000 aralığı)\nSayı ne kadar yüksekse, kamera o kadar az hassastır', validators=[validators. NumberRange(min=2500, maks=10000, mesaj='Değer Aralık Dışı')])

options = SelectField('Seçenekler', seçimler=[('yok', 'İşlem yok'), ('kayıt', 'Kaydı Başlat'), ('durdur', 'Kaydı Durdur'), ('resim', 'Fotoğraf Çek')])

gönder= GönderField('Gönder')

Adım 6: Bir Flask Şablonu Oluşturun

Bir Flask Şablonu Oluşturun
Bir Flask Şablonu Oluşturun

Kullanıcı arabirimini oluşturmak için, az önce oluşturduğunuz formu kullanan bir Flask şablonu tasarlamanız gerekir. Bu dosya html ile yazılacak ve formunuzla aynı dizinde olması gereken şablonlar adlı bir klasörde saklanacaktır.

Templates klasörünüzün içinde index.html adlı bir dosya oluşturun. Bu dosya içinde yukarıda gösterilen kodu çoğaltın.

7. Adım: Şablonu Oluşturun

Şimdi şablonu oluşturan bir dosya oluşturma zamanı. appCam.py adlı bir dosya oluşturun (artık şablonlar klasöründe olmadığınızdan emin olun). Şablonda kullanılan herhangi bir dinamik içerik, render_template() çağrısında adlandırılmış bir argüman olarak kullanılmalıdır.

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

uygulama = Şişe(_name_)

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

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

parser.add_argument('dur', type=int, help='Hareket algılandığında videonun süresi') parser.add_argument('sens', type=int, help='Bir kaydı tetiklemek için gereken hareket düzeyi') ayrıştırıcı.add_argument('opt', type=str, help='Manuel olarak bir video kaydedin veya bir görüntü yakalayın')

sınıf Güncellemesi(Kaynak):

#Stuff for wtforms def post(self): args = parser.parse_args() #rc.input(args['dur'], args['sens'], args['opt']) #yazdığınız metin dosyasına paralel çalışan kamerayla konuşur 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() return {'dur': args['dur'], 'sens': args['sense'], 'opt':args['opt']}

@app.route('/', yöntemler=['GET', 'POST'])

def index(): """Kontrolör ana sayfası""" form = camControl.camFrame() #bu bir form if request.method == 'POST': print(request.form) args = [i for i istekte bulunur.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') #write sens cameraSettingsFile.write(args[2][1] + '\n') #write opt cameraSettingsFile.close() imageDictionary = {"filename":"image.jpg"} return render_template('index.html', form=form, image = imageDictionary)

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

eğer _name_ == '_main_':

app.run(host='0.0.0.0', bağlantı noktası =80, hata ayıklama=Doğru, iş parçacıklı=Doğru)

8. Adım: Bir Kamera Operatörü Sınıfı Oluşturun

Şimdi camOperator.py adında bir dosya oluşturmak istiyoruz. İçinde, zaten mevcut olan PiCamera işlevlerini kullanarak kamerayı çalıştırma yöntemlerini içeren bir kamera sınıfı yapacağız. Bir sonraki adımda kameranın ve hareket sensörünün işlevselliğini birleştireceğimiz bu nesnenin bir örneğini kullanacağız.

Bu sınıfta tanımlanan yöntemler, kullanıcının sağladığı hassasiyet ve süre girişlerini kullanarak güvenlik kamerası üzerindeki "kayıt" ayarlarını değiştirirken, kullanıcı girişi yoksa bu değişkenler için varsayılan değerler oluşturur.

RPi. GPIO'yu GPIOimport time olarak içe aktar picamera'yı datetime'dan içe aktar datetime

GPIO.setmode(GPIO. BOARD)

GPIO.setup(11, GPIO. IN)

algılama = 0

sınıf kameraOperatör:

tanım _init_(kendi):

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

def record(self, dur):

#Denetleyici tarafından belirlenen süre için kayıtlar 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şlemi(self, dur, sens):

#Yakınlarda bir insan olup olmadığını sürekli kontrol eden kameranın ana çalışması, eğer bir insan yeterince uzun süre etrafta kalırsa kayda başlıyoruz! global algılama i = GPIO.input(11) if i == 0: #Hareket sensöründen çıkış DÜŞÜK olduğunda algılama=0 zaman.uyku(0.1) elif i == 1: #Hareket sensöründen çıkış YÜKSEK olduğunda yazdır(" hareket algılandı "+str(tespit)) if tespit >= sens*10: self.record(dur) print("KAYITLI") tespit = 0 time.sleep(0.1) tespit += 1

9. Adım: Kayıt Modülünü Oluşturun

Bu proje için gerekli olan son program rec.py adlı bir dosyaya yazılacaktır. Bu dosya kameraya ne zaman kayıt yapacağını, ne kadar süreyle kayıt yapacağını ve eğer/ne zaman fotoğraf çekeceğini söyler. Bunu, 5. adımdan itibaren metin dosyasına yazılan kullanıcı verilerini sürekli kontrol ederek ve okuyarak yapar. Dosya güncellendiyse hassasiyet ve süre değerlerini buna göre ayarlar ve daha sonra bir kayıt veya resim çekilirse içeriği kaydeder. pi,.h264 veya-j.webp

'''Şişe sunucusuyla paralel olarak çalışır, sunucu formları tarafından ayarlanan kontrol değişkenlerini okur. Formlar gönderildikten sonra sunucu kontrol değişkenleri ayrı bir dosyada ayarlanır. Kayıt modülü bu değişkenleri okur ve kamerayı bunlara göre günceller. ''' camOperator'ı datetime'dan import datetime import time'dan içe aktar

rc = camOperator.cameraOperator()

cameraSettingsFile = open("cameraSettings.txt", 'w') cameraSettingsFile.close() #burada ana döngü çalışmadan önce dosya içindeki içerikleri silmek için yazma modunda açıp kapatıyoruz

#İnsanların yakında olup olmadığını izleyen sürekli bir döngü. Eğer öyleyseler, o zaman

#kamera kayda başlar. Bu işlev, bu kamerayı kontrol eden şişe #sunucu ile paralel olarak çalışır. recordInProcess = False ise True: #check/record if (recordingInProcess == False): rc.operation(rc.dur, rc.sens) #sunucuya göre kameranın ayarlarını değiştirin cameraSettingsFile = open("cameraSettings.txt", 'r') settingsNum = 0 cameraSettingsFile.readlines() içindeki ayar için: if settingsNum == 0: #Süre değişikliği rc.dur = int(setting) elif settingsNum == 1: #Hassasiyet değişikliği rc.sens = int(setting) elif settingsNum == 2: #Eylem değişikliği rc.opt = ayar settingsNum += 1 cameraSettingsFile.close()

#bir eylem yürüt

# if rc.opt == "none": # devam if rc.opt == "rec\n" ve recordInProcess == False: print("Denetleyiciden kayıt komutu çalıştırılıyor") #Şu anki zamana göre video için ad oluştur videoAd = "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" ve recordInProcess == True: print("Denetleyiciden kayıt komutu durduruluyor") rc.cam.stop_recording() recordInProcess = False 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" elif rc.opt == "pic\n" ve recordInProcess == False: print("Denetleyiciden bir resim komutu yakala") pictureName = "snappedPic_ "+str(datetime.now()) resimAdı = resimAdı.replace(':', ') resimAdı = resimAdı.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"

Adım 10: Sunucuyu Başlatın

Sunucuyu Başlatın
Sunucuyu Başlatın

Pi'ye SSH ekleyin ve yukarıda gösterilen komut satırını kullanarak sunucuyu başlatın.

Adım 11: DENEYİN

DENEMEK!
DENEMEK!
DENEMEK!
DENEMEK!

IP adresini kullanarak web sayfasına erişin ve kamerayı uzaktan kontrol edebilmelisiniz!

Önerilen: