Mục lục:

Camera an ninh Raspberry Pi: 11 bước (có hình ảnh)
Camera an ninh Raspberry Pi: 11 bước (có hình ảnh)

Video: Camera an ninh Raspberry Pi: 11 bước (có hình ảnh)

Video: Camera an ninh Raspberry Pi: 11 bước (có hình ảnh)
Video: Raspberry Pi Camera Module 3 - Giới thiệu và Hướng dẫn sử dụng 2024, Tháng mười một
Anonim
Camera an ninh Raspberry Pi
Camera an ninh Raspberry Pi

Đây là hướng dẫn từng bước về cách tạo IoT, camera an ninh kích hoạt chuyển động bằng Raspberry Pi. Bạn sẽ học cách tạo một máy chủ web bình và biểu mẫu cho phép người dùng điều chỉnh độ nhạy và thời gian ghi của máy ảnh, bắt đầu / dừng ghi theo cách thủ công và / hoặc chụp ảnh sẽ được lưu vào cục bộ.

Quân nhu

  • Raspberry Pi 3
  • Máy ảnh Pi
  • Cảm biến chuyển động PIR
  • thẻ SD
  • Nguồn năng lượng

Bước 1: Lắp ráp phần cứng

Lắp ráp phần cứng
Lắp ráp phần cứng
Lắp ráp phần cứng
Lắp ráp phần cứng
Lắp ráp phần cứng
Lắp ráp phần cứng
Lắp ráp phần cứng
Lắp ráp phần cứng

Khi Pi tắt, hãy lắp thẻ micro-SD vào Pi. Chèn cáp ruy-băng mô-đun máy ảnh vào cổng mô-đun máy ảnh trên Pi. Sau đó, kết nối 3 chân (có nhãn VCC, OUT và GND) của bộ dò chuyển động PRI với các chân GPIO của Pi. Kết nối VCC với nguồn điện 5,5V, GND với đất, và OUT với chân 11 trên Pi.

Bước 2: Đảm bảo rằng Pi của bạn được kết nối với Internet

Đảm bảo rằng Pi của bạn được kết nối với Internet
Đảm bảo rằng Pi của bạn được kết nối với Internet

Bây giờ, bật Pi bằng cách kết nối nó với nguồn điện và xác minh rằng bạn đã kết nối với Internet bằng lệnh ping. Nếu bạn không biết cách kết nối Pi của mình với internet, hãy nhấp vào đây.

sudo ping www.google.com

Nếu thành công, bạn sẽ thấy dữ liệu đó đang được google nhận.

Ngoài ra, bạn có thể sử dụng ifconfig để xem địa chỉ IP của mình.

sudo ifconfig

Bước 3: Thiết lập máy ảnh

Sử dụng lệnh sau để mở giao diện cấu hình và bật máy ảnh trong "tùy chọn giao diện".

sudo raspi-config

Sau khi khởi động lại, bạn có thể hiển thị trạng thái của máy ảnh để đảm bảo rằng nó được kết nối đúng cách.

vcgencmd get_camera

Cuối cùng, cài đặt mô-đun picamera.

pip cài đặt picamera

Bước 4: Cài đặt Flask

Cài đặt bình và mô-đun phục hồi bình cho Python:

sudo apt-get install python-dev python-pip

python -m pip cài đặt flask bình-yên

Tiếp theo, chúng tôi sẽ cài đặt một mô-đun bình python được sử dụng để tạo biểu mẫu.

pip cài đặt flask-wtf

Bước 5: Tạo lớp biểu mẫu

Tạo một thư mục có tên iotProject để lưu trữ tất cả các tệp của bạn.

sudo mkdir iotProject

Tạo một tệp python có tên "camControl.py".

sudo nano camControl.py

Trong tệp này, chúng tôi sẽ tạo lớp biểu mẫu, cho phép chúng tôi tạo biểu mẫu web với các hộp văn bản và menu thả xuống để người dùng có thể thay đổi cài đặt của máy ảnh, bắt đầu / dừng ghi và quay video theo cách thủ công.

from flask_wtf import FlaskFormfrom wtforms.validators import Data

lớp camFrame (FlaskForm):

videoDuration = IntegerField ('Thời gian ghi (tính bằng giây)')

độ nhạy = IntegerField ('Độ nhạy chuyển động (phạm vi 2500-10000) nSố càng cao, máy ảnh càng kém nhạy', validators = [validators. NumberRange (min = 2500, max = 10000, message = 'Value Out of Range')])

option = SelectField ('Options', options = [('none', 'No action'), ('rec', 'Start Recording'), ('stop', 'Stop Recording'), ('pic', 'Chụp ảnh')])

submit = SubmitField ('Gửi')

Bước 6: Tạo mẫu bình

Tạo mẫu bình
Tạo mẫu bình

Để tạo giao diện người dùng, bạn phải thiết kế một mẫu Flask sử dụng biểu mẫu mà bạn vừa tạo. Tệp này sẽ được viết bằng html và được lưu trữ trong một thư mục có tên là mẫu, phải nằm trong cùng thư mục với biểu mẫu của bạn.

Bên trong thư mục mẫu của bạn, hãy tạo một tệp có tên là index.html. Trong tệp này, sao chép mã được hiển thị ở trên.

Bước 7: Kết xuất mẫu

Bây giờ đã đến lúc tạo một tệp hiển thị mẫu. Tạo một tệp có tên appCam.py (đảm bảo rằng bạn không còn ở trong thư mục mẫu). Bất kỳ nội dung động nào được sử dụng trong mẫu phải được sử dụng làm đối số được đặt tên trong lệnh gọi tới 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 (ứng dụng)

parser = reqparse. RequestParser ()

parser.add_argument ('dur', type = int, help = 'Thời lượng video khi phát hiện chuyển động') parser.add_argument ('sens', type = int, help = 'Mức độ chuyển động cần thiết để kích hoạt ghi') phân tích cú pháp.add_argument ('opt', type = str, help = 'Quay video hoặc chụp ảnh theo cách thủ công')

Cập nhật lớp (Tài nguyên):

#Stuff cho wtforms def post (self): args = parser.parse_args () # rc.input (args ['dur'], args ['sens'], args ['opt']) # ghi vào tệp văn bản nói chuyện với camera chạy song song 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 ('/', method = ['GET', 'POST'])

def index (): "" "Trang chủ của bộ điều khiển" "" 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 = 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 (Cập nhật, '/ update /')

nếu _name_ == '_main_':

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

Bước 8: Tạo lớp vận hành máy ảnh

Bây giờ chúng ta muốn tạo một tệp có tên là camOperator.py. Trong đó, chúng tôi sẽ tạo một lớp máy ảnh với các phương pháp để vận hành máy ảnh, sử dụng các chức năng PiCamera đã có sẵn. Chúng tôi sẽ sử dụng một phiên bản của đối tượng này trong bước tiếp theo, nơi chúng tôi sẽ kết hợp chức năng của máy ảnh và cảm biến chuyển động.

Các phương thức được định nghĩa trong lớp này thay đổi cài đặt "ghi" trên camera an ninh bằng cách sử dụng đầu vào độ nhạy và thời lượng mà người dùng cung cấp, đồng thời thiết lập các giá trị mặc định cho các biến này nếu đầu vào của người dùng không có.

nhập RPi. GPIO dưới dạng GPIO nhập thời gian nhập picamera từ datetime nhập datetime

GPIO.setmode (GPIO. BOARD)

GPIO.setup (11, GPIO. IN)

phát hiện = 0

camera lớp học

def _init _ (bản thân):

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

bản ghi def (tự, dur):

#Records trong thời lượng nhất định được đặt bởi bộ điều khiển 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 ()

hoạt động def (self, dur, sens):

# Hoạt động chính của máy ảnh liên tục kiểm tra xem có người ở gần hay không, nếu có người ở xung quanh đủ lâu, chúng tôi bắt đầu ghi! toàn cầu phát hiện i = GPIO.input (11) if i == 0: #Khi đầu ra từ cảm biến chuyển động là LOW phát hiện = 0 time.sleep (0,1) elif i == 1: #Khi đầu ra từ cảm biến chuyển động là HIGH print (" chuyển động được phát hiện "+ str (phát hiện)) nếu phát hiện> = sens * 10: self.record (dur) print (" ĐÃ GHI ") phát hiện = 0 time.sleep (0,1) phát hiện + = 1

Bước 9: Tạo mô-đun bản ghi

Chương trình cuối cùng cần thiết cho dự án này sẽ được viết trong một tệp có tên rec.py. Tệp này cho máy ảnh biết khi nào cần ghi, thời gian ghi và nếu / khi nào chụp ảnh. Nó thực hiện điều này bằng cách liên tục kiểm tra và đọc dữ liệu người dùng được ghi vào tệp văn bản từ bước 5. Nếu tệp đã được cập nhật, nó sẽ điều chỉnh các giá trị độ nhạy và thời lượng cho phù hợp và sau đó, nếu ghi hoặc chụp ảnh, nó sẽ lưu nội dung vào pi, ở định dạng tệp.h264 hoặc.jpg.

'' 'Chạy song song với máy chủ bình, đọc các biến điều khiển do biểu mẫu máy chủ đặt. Các biến điều khiển máy chủ được đặt trong một tệp riêng biệt sau khi biểu mẫu được gửi. Mô-đun rec đọc các biến này và cập nhật máy ảnh dựa trên chúng. '' nhập camOperator từ thời gian nhập datetime datetime nhập

rc = camOperator.cameraOperator ()

cameraSettingsFile = open ("cameraSettings.txt", 'w') cameraSettingsFile.close () # tại đây, chúng tôi mở và đóng ở chế độ ghi để xóa nội dung trong tệp trước khi chạy vòng lặp chính

# Một vòng lặp liên tục theo dõi để xem liệu con người có ở gần hay không. Nếu đúng như vậy thì

# máy ảnh bắt đầu quay. Chức năng này chạy trong paralell với # máy chủ bình điều khiển máy ảnh này. recordInProcess = False trong khi True: # check / record if (recordInProcess == False): rc.operation (rc.dur, rc.sens) # thay đổi cài đặt của máy ảnh dựa trên máy chủ cameraSettingsFile = open ("cameraSettings.txt", 'r') settingNum = 0 để cài đặt trong cameraSettingsFile.readlines (): if settingNum == 0: #Duration change rc.dur = int (setting) elif settingNum == 1: #Sensibility change rc.sens = int (setting) elif settingNum == 2: #Action change rc.opt = setting settingNum + = 1 cameraSettingsFile.close ()

#execute một hành động

# if rc.opt == "none": # continue if rc.opt == "rec / n" and recordInProcess == False: print ("Chạy lệnh ghi từ bộ điều khiển") # Tạo tên cho video dựa trên videoName thời gian hiện tại = "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" and recordInProcess == True: print ("Dừng lệnh ghi từ bộ điều khiển") 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" và recordInProcess == Sai: print ("Chụp lệnh pic từ bộ điều khiển") 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"

Bước 10: Khởi động máy chủ

Khởi động máy chủ
Khởi động máy chủ

SSH vào số pi và khởi động máy chủ bằng dòng lệnh hiển thị ở trên.

Bước 11: DÙNG THỬ

HÃY THỬ ĐI!
HÃY THỬ ĐI!
HÃY THỬ ĐI!
HÃY THỬ ĐI!

Truy cập trang web bằng địa chỉ IP và bạn có thể điều khiển máy ảnh từ xa!

Đề xuất: