Mục lục:
- Quân nhu
- Bước 1: Lắp ráp phần cứng
- Bước 2: Đảm bảo rằng Pi của bạn được kết nối với Internet
- Bước 3: Thiết lập máy ảnh
- Bước 4: Cài đặt Flask
- Bước 5: Tạo lớp biểu mẫu
- Bước 6: Tạo mẫu bình
- Bước 7: Kết xuất mẫu
- Bước 8: Tạo lớp vận hành máy ảnh
- Bước 9: Tạo mô-đun bản ghi
- Bước 10: Khởi động máy chủ
- Bước 11: DÙNG THỬ
Video: Camera an ninh Raspberry Pi: 11 bước (có hình ảnh)
2024 Tác giả: John Day | [email protected]. Sửa đổi lần cuối: 2024-01-30 13:31
Đâ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
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
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 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ủ
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Ử
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:
Camera an ninh Raven Pi: 7 bước (có hình ảnh)
Camera an ninh Raven Pi: Con quạ nhựa này đang tận hưởng một cuộc sống mới sau một chiếc camera an ninh thực tế nhưng đáng sợ, Raven Pi. Nó có Raspberry Pi trong bụng và một Camera Pi được gắn ở cổ, quay video HD bất cứ khi nào phát hiện chuyển động. Đồng thời, ngay lập tức
Mạng trạm cảm biến để kiểm soát ánh sáng và an ninh: 5 bước (có hình ảnh)
Mạng lưới trạm cảm biến để kiểm soát ánh sáng và an ninh: Với mạng lưới trạm cảm biến này được định cấu hình ở chế độ chính / phụ, bạn sẽ có thể thực hiện việc kiểm soát ánh sáng và an ninh trong nhà của mình. Các trạm cảm biến này (Node01, Node02 trong dự án này) được kết nối với một trạm chủ (Node00) được kết nối với yo
Camera an ninh tầm nhìn ban đêm nguồn mở chuyên nghiệp DIY: 10 bước (có hình ảnh)
Tự làm Camera an ninh nhìn đêm nguồn mở chuyên nghiệp: Trong hướng dẫn mới này, chúng ta sẽ cùng nhau tạo camera giám sát video mã nguồn mở Raspberry Pi của mình. tất cả đều được kết nối với xe Jeed của chúng tôi
Camera an ninh IOT của WoodThing: 8 bước (có hình ảnh)
Camera an ninh IOT của WoodThing: Đây là một camera IP mạnh mẽ dựa trên Raspberry PI. Nó chạy hệ điều hành motionEyeOS, vì vậy có thể được sử dụng để quản lý nhiều camera IP từ xa cũng như cho phép bạn gắn thêm tối đa bốn cam web USB chi phí thấp. Các tính năng: Hỗ trợ USB, cảm biến chuyển động với s
VHS Library Pi Camera an ninh: 3 bước (có hình ảnh)
Camera an ninh VHS Library Pi: Đây là hộp thư viện video VHS cũ hiện đang cung cấp một ngôi nhà hoàn hảo cho camera an ninh Raspberry Pi. Hộp đựng có Pi Zero và máy ảnh nhìn ra gáy của cuốn sách giả. Đó là một công trình thực sự đơn giản với giao diện thế giới cũ