Isi kandungan:

Kamera Keselamatan Raspberry Pi: 11 Langkah (dengan Gambar)
Kamera Keselamatan Raspberry Pi: 11 Langkah (dengan Gambar)

Video: Kamera Keselamatan Raspberry Pi: 11 Langkah (dengan Gambar)

Video: Kamera Keselamatan Raspberry Pi: 11 Langkah (dengan Gambar)
Video: Raspberry Pi Tutorial 11 - Camera Setup 2024, November
Anonim
Kamera Keselamatan Raspberry Pi
Kamera Keselamatan Raspberry Pi

Ini adalah langkah demi langkah yang dapat dipelajari mengenai cara membuat IoT, kamera keselamatan yang diaktifkan gerakan menggunakan Raspberry Pi. Anda akan belajar bagaimana membuat pelayan web dan bentuk labu yang membolehkan pengguna menyesuaikan kepekaan dan masa rakaman kamera, memulakan / menghentikan rakaman secara manual, dan / atau mengambil gambar yang akan disimpan ke dalam negara.

Bekalan

  • Raspberry Pi 3
  • Kamera Pi
  • Sensor gerakan PIR
  • Kad SD
  • Sumber kuasa

Langkah 1: Pasang Perkakasan

Pasang Perkakasan
Pasang Perkakasan
Pasang Perkakasan
Pasang Perkakasan
Pasang Perkakasan
Pasang Perkakasan
Pasang Perkakasan
Pasang Perkakasan

Semasa Pi dimatikan, masukkan kad micro-SD ke dalam Pi. Masukkan kabel pita modul kamera ke port modul kamera pada Pi. Kemudian, sambungkan 3 pin (berlabel VCC, OUT, dan GND) pengesan gerakan PRI ke pin GPIO Pi. Sambungkan VCC ke kuasa 5.5V, GND ke ground, dan OUT ke pin 11 pada Pi.

Langkah 2: Pastikan Pi Anda Disambungkan ke Internet

Pastikan Pi Anda Disambungkan ke Internet
Pastikan Pi Anda Disambungkan ke Internet

Sekarang, hidupkan Pi dengan menghubungkannya ke sumber kuasa dan sahkan bahawa anda tersambung ke internet menggunakan arahan ping. Sekiranya anda tidak tahu cara menyambungkan Pi ke internet, klik di sini.

sudo ping www.google.com

Sekiranya anda berjaya, anda harus melihat bahawa data diterima oleh google.

Selain itu, anda boleh menggunakan ifconfig untuk melihat alamat IP anda.

sudo ifconfig

Langkah 3: Sediakan Kamera

Gunakan perintah berikut untuk membuka antara muka konfigurasi, dan aktifkan kamera dalam "pilihan antara muka".

sudo raspi-config

Selepas reboot, anda dapat memaparkan status kamera anda untuk memastikan kamera disambungkan dengan betul.

vcgencmd get_camera

Akhir sekali, pasang modul picamera.

pip memasang picamera

Langkah 4: Pasang Kelalang

Pasang modul termos dan rehat termos untuk Python:

sudo apt-get install python-dev python-pip

python -m pip memasang termos-termos

Seterusnya, kami akan memasang modul python flask yang digunakan untuk membuat borang.

pip pasang kelalang-wtf

Langkah 5: Buat Kelas Tingkatan

Buat direktori bernama iotProject untuk menyimpan semua fail anda.

sudo mkdir iotProjek

Buat fail python bernama "camControl.py".

sudo nano camControl.py

Dalam fail ini, kami akan membuat kelas borang kami, yang memungkinkan kami membuat borang web dengan kotak teks dan menu drop-down untuk pengguna dapat mengubah pengaturan kamera, memulai / menghentikan rakaman secara manual, dan menangkap video.

dari flask_wtf import FlaskFormfrom wtforms.validators import Data Diperlukan dari wtforms import SubmitField dari wtforms import validator, IntegerField, BooleanField, SelectField

kelas camFrame (FlaskForm):

videoDuration = IntegerField ('Masa Rakaman (dalam beberapa saat)')

kepekaan = IntegerField ('Sensitiviti Gerak (julat 2500-10000) n Semakin tinggi bilangannya, semakin kurang sensitif kamera', validator = [validators. NumberRange (min = 2500, max = 10000, message = 'Value Out of Range')]))

pilihan = SelectField ('Pilihan', pilihan = [('tidak ada', 'Tidak ada tindakan'), ('rec', 'Start Recording'), ('stop', 'Stop Recording'), ('gambar', 'Ambil Gambar')])

hantar = SubmitField ('Kirim')

Langkah 6: Buat Templat Kelalang

Buat Templat Kelalang
Buat Templat Kelalang

Untuk membuat antara muka pengguna, anda mesti merancang templat Flask yang menggunakan bentuk yang baru anda buat. Fail ini akan ditulis dalam html, dan disimpan dalam folder yang disebut templat, yang harus berada dalam direktori yang sama dengan bentuk anda.

Di dalam folder templat anda, buat fail bernama index.html. Di dalam fail ini, replikasi kod yang ditunjukkan di atas.

Langkah 7: Render Templat

Kini tiba masanya untuk membuat fail yang membuat templat. Buat fail bernama appCam.py (pastikan anda tidak lagi berada di folder templat). Sebarang kandungan dinamik yang digunakan dalam templat mesti digunakan sebagai argumen bernama dalam panggilan ke render_template ().

import camControldari flask import Flask, render_template, request, Response dari flask_restful import Resource, Api, reqparse

aplikasi = Kelalang (_ nama_)

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

parser = reqparse. RequestParser ()

parser.add_argument ('dur', type = int, help = 'Durasi video ketika pergerakan dikesan') parser.add_argument ('sens', type = int, help = 'Tahap pergerakan yang diperlukan untuk mencetuskan rakaman') parser.add_argument ('opt', type = str, help = 'Merakam video secara manual atau menangkap gambar')

Kemas kini kelas (Sumber):

#Stuff for wtforms def post (self): args = parser.parse_args () # rc.input (args ['dur'], args ['sens'], args ['opt']) #write ke fail teks yang bercakap dengan kamera yang berjalan selari 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 ('/', kaedah = ['DAPATKAN', 'POST'])

def index (): "" "Halaman utama pengawal" "" form = camControl.camFrame () # ini adalah bentuk jika 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 = terbuka ("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 (Kemas kini, '/ kemas kini /')

jika _nama_ == '_main_':

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

Langkah 8: Buat Kelas Operator Kamera

Sekarang kita mahu membuat fail bernama camOperator.py. Di dalamnya kita akan membuat kelas kamera dengan kaedah untuk mengoperasikan kamera, menggunakan fungsi PiCamera yang sudah tersedia. Kami akan menggunakan contoh objek ini pada langkah seterusnya di mana kami akan menggabungkan fungsi kamera dan sensor gerakan.

Kaedah yang ditentukan dalam kelas ini mengubah tetapan "rekod" pada kamera keselamatan menggunakan input kepekaan dan durasi yang disediakan oleh pengguna, sambil menetapkan nilai lalai untuk pemboleh ubah ini jika input pengguna tidak ada.

import RPi. GPIO sebagai GPIOimport import picamera dari datetime import datetime

GPIO.setmode (GPIO. BOARD)

GPIO.setup (11, GPIO. IN)

mengesan = 0

kamera kelasOperator:

def _init _ (diri):

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

rekod def (diri, dur):

#Rekod untuk jangka masa tertentu yang ditetapkan oleh pengawal 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 ()

operasi def (diri, dur, sens):

# Operasi utama kamera yang sentiasa memeriksa untuk melihat sama ada manusia berada di dekatnya, jika manusia tinggal cukup lama, kita mula merakam! global mengesan i = GPIO.input (11) if i == 0: #Apabila output dari sensor gerakan RENDAH mengesan = 0 waktu.sleep (0.1) elif i == 1: #Apabila output dari sensor gerakan dicetak TINGGI (" gerakan dikesan "+ str (deteksi)) jika mengesan> = sens * 10: self.record (dur) print (" RECORDED ") detect = 0 time.sleep (0.1) mengesan + = 1

Langkah 9: Buat Modul Rekod

Program terakhir yang diperlukan untuk projek ini akan ditulis dalam fail bernama rec.py. Fail ini memberitahu kamera kapan hendak merakam, berapa lama untuk merakam, dan jika / kapan hendak mengambil gambar. Ia melakukannya dengan sentiasa memeriksa dan membaca data pengguna yang ditulis ke fail teks dari langkah 5. Jika fail telah diperbaharui, ia akan menyesuaikan nilai sensitiviti dan jangka masa yang sesuai dan kemudian, jika rakaman atau gambar diambil, ia menyimpan kandungannya ke pi, sama ada dalam format fail.h264 atau.jpg.

'' Berjalan selari dengan pelayan termos, membaca pemboleh ubah kawalan yang ditetapkan oleh borang pelayan. Pemboleh ubah kawalan pelayan ditetapkan dalam fail berasingan setelah borang dihantar. Modul rec membaca pemboleh ubah ini dan mengemas kini kamera berdasarkannya. '' 'import camOperator dari datetime import datetime time import

rc = camOperator.cameraOperator ()

cameraSettingsFile = buka ("cameraSettings.txt", 'w') cameraSettingsFile.close () #di sini, kita buka dan tutup dalam mod penulisan untuk menghapus kandungan dalam fail sebelum gelung utama berjalan

# Gelung berterusan yang memerhatikan untuk melihat apakah manusia berada berdekatan. Sekiranya mereka, maka

#kamera mula merakam. Fungsi ini berjalan selari dengan termos #server yang mengawal kamera ini. perekamanInProcess = False while True: # check / record if (recordingInProcess == False): rc.operation (rc.dur, rc.sens) # ubah tetapan kamera berdasarkan server serverSettingsFile = open ("cameraSettings.txt", 'r') settingNum = 0 untuk pengaturan di cameraSettingsFile.readlines (): if settingNum == 0: #Duration change rc.dur = int (setting) elif settingNum == 1: #Sensitivity change rc.sens = int (setting) elif settingNum == 2: #Action change rc.opt = setting settingNum + = 1 cameraSettingsFile.close ()

#laksanakan tindakan

# if rc.opt == "none": # teruskan jika rc.opt == "rec / n" dan recordingInProcess == False: print ("Running record command from controller") #Menjana nama untuk video berdasarkan videoName masa semasa = "snappedVid _" + str (datetime.now ()) videoName = videoName.replace (':', ') videoName = videoName.replace ('. ',') rc.cam.start_recording ('/ rumah / pi / iotProject / videos / '+ videoName +'.h264 ') rakamanInProcess = True elif rc.opt == "stop / n" dan rakamanInProcess == Benar: cetak ("Menghentikan arahan rakaman dari pengawal") rc.cam.stop_recording () rakamanInProcess = False cameraSettingsFile = open ("cameraSettings.txt", 'w') cameraSettingsFile.write (str (rc.dur) + '\ n') cameraSettingsFile.write (str (rc.sens) + '\ n') cameraSettingsFile. tulis ("none / n") rc.opt = "none / n" elif rc.opt == "pic / n" dan rakamanInProcess == False: print ("Snap a pic command from the controller") 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 = terbuka ("cameraSettings.txt", 'w') cameraSettingsFile. tulis (str (rc.dur) + '\ n') cameraSettingsFile.write (str (rc.sens) + '\ n') cameraSettingsFile.write ("none / n") rc.opt = "none / n"

Langkah 10: Mulakan Pelayan

Mulakan Pelayan
Mulakan Pelayan

SSH ke dalam pi dan mulakan pelayan menggunakan baris arahan yang ditunjukkan di atas.

Langkah 11: Cubalah

CUBALAH!
CUBALAH!
CUBALAH!
CUBALAH!

Akses laman web menggunakan alamat IP dan anda seharusnya dapat mengawal kamera dari jauh!

Disyorkan: