Daftar Isi:

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

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

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

Ini adalah petunjuk langkah demi langkah tentang cara membuat IoT, kamera keamanan yang diaktifkan gerakan menggunakan Raspberry Pi. Anda akan belajar cara membuat server web flask dan formulir yang memungkinkan pengguna untuk menyesuaikan sensitivitas kamera dan waktu perekaman, memulai/menghentikan perekaman secara manual, dan/atau mengambil gambar yang akan disimpan ke lokal.

Perlengkapan

  • Raspberry Pi 3
  • kamera pi
  • Sensor gerak PIR
  • kartu SD
  • Sumber daya

Langkah 1: Pasang Perangkat Keras

Merakit Perangkat Keras
Merakit Perangkat Keras
Merakit Perangkat Keras
Merakit Perangkat Keras
Merakit Perangkat Keras
Merakit Perangkat Keras
Merakit Perangkat Keras
Merakit Perangkat Keras

Saat Pi dimatikan, masukkan kartu micro-SD ke dalam Pi. Masukkan kabel pita modul kamera ke port modul kamera di Pi. Kemudian, sambungkan 3 pin (berlabel VCC, OUT, dan GND) dari detektor gerakan PRI ke pin GPIO Pi. Hubungkan VCC ke daya 5.5V, GND ke ground, dan OUT ke pin 11 pada Pi.

Langkah 2: Pastikan Pi Anda Terhubung ke Internet

Pastikan Pi Anda Terhubung ke Internet
Pastikan Pi Anda Terhubung ke Internet

Sekarang, nyalakan Pi dengan menghubungkannya ke sumber listrik dan verifikasi bahwa Anda terhubung ke internet menggunakan perintah ping. Jika Anda tidak tahu cara menghubungkan Pi Anda ke internet, klik di sini.

sudo ping www.google.com

Jika Anda berhasil, Anda akan melihat bahwa data sedang diterima oleh google.

Selain itu, Anda dapat menggunakan ifconfig untuk melihat alamat IP Anda.

sudo ifconfig

Langkah 3: Siapkan Kamera

Gunakan perintah berikut untuk membuka antarmuka konfigurasi, dan aktifkan kamera di "opsi antarmuka".

sudo raspi-config

Setelah mem-boot ulang, Anda dapat menampilkan status kamera Anda untuk memastikan bahwa itu terhubung dengan benar.

vcgencmd get_camera

Terakhir, instal modul picamera.

pip menginstal picamera

Langkah 4: Instal Flask

Instal modul flask dan flask-restful untuk Python:

sudo apt-get install python-dev python-pip

python -m pip install flask flask-restful

Selanjutnya, kita akan menginstal modul labu python yang digunakan untuk membuat formulir.

pip install flask-wtf

Langkah 5: Buat Kelas Formulir

Buat direktori bernama iotProject untuk menyimpan semua file Anda.

sudo mkdir proyek iot

Buat file python bernama "camControl.py".

sudo nano camControl.py

Dalam file ini kami akan membuat kelas formulir kami, yang memungkinkan kami untuk membuat formulir web dengan kotak teks dan menu tarik-turun bagi pengguna untuk dapat mengubah pengaturan kamera, memulai/menghentikan perekaman secara manual, dan merekam video.

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

kelas camFrame (FlaskForm):

videoDuration = IntegerField('Waktu Perekaman (dalam detik)')

sensitivitas = IntegerField('Sensitivitas Gerak (kisaran 2500-10000)\nSemakin tinggi angkanya, semakin tidak sensitif kamera', validators=[validators. NumberRange(min=2500, max=10000, message='Value Out of Range')])

options = SelectField('Options', options=[('none', 'No action'), ('rec', 'Start Recording'), ('stop', 'Stop Recording'), ('foto', 'Ambil Gambar')])

kirim= KirimField('Kirim')

Langkah 6: Buat Template Flask

Buat Template Labu
Buat Template Labu

Untuk membuat antarmuka pengguna, Anda harus mendesain template Flask yang menggunakan formulir yang baru saja Anda buat. File ini akan ditulis dalam html, dan disimpan dalam folder bernama templates, yang seharusnya berada di direktori yang sama dengan formulir Anda.

Di dalam folder template Anda, buat file bernama index.html. Dalam file ini, meniru kode yang ditunjukkan di atas.

Langkah 7: Render Template

Sekarang saatnya membuat file yang merender template. Buat file bernama appCam.py (pastikan Anda tidak lagi berada di folder template). Konten dinamis apa pun yang digunakan dalam template harus digunakan sebagai argumen bernama dalam panggilan ke render_template().

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

aplikasi = Labu(_nama_)

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

parser = reqparse. RequestParser()

parser.add_argument('dur', type=int, help='Durasi video saat gerakan terdeteksi') parser.add_argument('sens', type=int, help='Tingkat gerakan yang diperlukan untuk memicu rekaman') parser.add_argument('opt', type=str, help='Rekam video atau ambil gambar secara manual')

Pembaruan kelas (Sumber Daya):

#Stuff untuk wtforms def post(self): args = parser.parse_args() #rc.input(args['dur'], args['sens'], args['opt']) #tulis ke file teks yang berbicara dengan kamera yang berjalan secara paralel 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('/', metode=['GET', 'POST'])

def index(): """Halaman utama pengontrol""" form = camControl.camFrame() #ini adalah formulir 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 = open("cameraSettings.txt ", 'w') cameraSettingsFile.write(args[0][1] + '\n') #write selama 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(Pembaruan, '/update/')

jika _name_ == '_main_':

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

Langkah 8: Buat Kelas Operator Kamera

Sekarang kita ingin membuat file bernama camOperator.py. Di dalamnya kita akan membuat kelas kamera dengan metode untuk mengoperasikan kamera, memanfaatkan fungsi PiCamera yang sudah tersedia. Kami akan menggunakan instance objek ini pada langkah berikutnya di mana kami akan menggabungkan fungsionalitas kamera dan sensor gerak.

Metode yang didefinisikan dalam kelas ini mengubah pengaturan "rekam" pada kamera keamanan menggunakan input sensitivitas dan durasi yang diberikan pengguna, sambil menetapkan nilai default untuk variabel ini jika input pengguna tidak ada.

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

GPIO.setmode(GPIO. PAPAN)

GPIO.setup(11, GPIO. IN)

mendeteksi = 0

kamera kelasOperator:

def _init_(sendiri):

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

catatan def (diri, dur):

#Records untuk durasi yang diberikan diatur oleh controller 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):

#Pengoperasian utama kamera yang terus-menerus memeriksa untuk melihat apakah ada manusia di dekatnya, jika manusia tinggal cukup lama, kami mulai merekam! deteksi global i = GPIO.input(11) jika i == 0: #Ketika output dari sensor gerak RENDAH deteksi=0 waktu.sleep(0.1) elif i == 1: #Ketika output dari sensor gerak TINGGI print(" gerakan terdeteksi "+str(deteksi)) jika mendeteksi >= sens*10: self.record(dur) print("RECORDED") detect = 0 waktu.sleep(0.1) detect += 1

Langkah 9: Buat Modul Rekam

Program terakhir yang diperlukan untuk proyek ini akan ditulis dalam file bernama rec.py. File ini memberi tahu kamera kapan harus merekam, berapa lama merekam, dan jika/kapan mengambil gambar. Ini dilakukan dengan terus-menerus memeriksa dan membaca data pengguna yang ditulis ke file teks dari langkah 5. Jika file telah diperbarui, ia menyesuaikan nilai sensitivitas dan durasi yang sesuai dan kemudian, jika rekaman atau gambar diambil, ia menyimpan konten ke pi, baik dalam format file.h264 atau.jpg.

'''Berjalan secara paralel dengan server labu, membaca variabel kontrol yang ditetapkan oleh formulir server. Variabel kontrol server diatur dalam file terpisah setelah formulir dikirimkan. Modul rec membaca variabel-variabel ini dan memperbarui kamera berdasarkan variabel tersebut. ''' import camOperator dari datetime import datetime import time

rc = camOperator.cameraOperator()

cameraSettingsFile = open("cameraSettings.txt", 'w') cameraSettingsFile.close() #di sini, kita membuka dan menutup dalam mode tulis untuk menghapus konten di dalam file sebelum loop utama berjalan

#Sebuah loop terus menerus yang mengawasi untuk melihat apakah manusia berada di dekatnya. Jika ya, maka

#kamera mulai merekam. Fungsi ini berjalan secara paralel dengan labu #server yang mengontrol kamera ini. recordingInProcess = False while True: #check/record if (recordingInProcess == False): rc.operation(rc.dur, rc.sens) #ubah pengaturan kamera berdasarkan server cameraSettingsFile = open("cameraSettings.txt", 'r') settingNum = 0 untuk setting 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()

#melakukan tindakan

# if rc.opt == "none": # lanjutkan jika rc.opt == "rec\n" dan recordingInProcess == False: print("Running record command from controller") #Hasilkan nama untuk video berdasarkan nama video waktu saat ini = "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" and recordingInProcess == True: print("Stopping record command from controller") rc.cam.stop_recording() recordingInProcess = Salah cameraSettingsFile = buka("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 recordingInProcess == 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 = open("cameraSettings.txt", 'w') cameraSettingsFile. write(str(rc.dur)+'\n') cameraSettingsFile.write(str(rc.sens)+'\n') cameraSettingsFile.write("none\n") rc.opt = "none\n"

Langkah 10: Mulai Server

Mulai Server
Mulai Server

SSH ke pi dan mulai server menggunakan baris perintah yang ditunjukkan di atas.

Langkah 11: COBALAH

COBALAH!
COBALAH!
COBALAH!
COBALAH!

Akses halaman web menggunakan alamat IP dan Anda harus dapat mengontrol kamera dari jarak jauh!

Direkomendasikan: