תוכן עניינים:

מצלמת אבטחה של פטל פי: 11 שלבים (עם תמונות)
מצלמת אבטחה של פטל פי: 11 שלבים (עם תמונות)

וִידֵאוֹ: מצלמת אבטחה של פטל פי: 11 שלבים (עם תמונות)

וִידֵאוֹ: מצלמת אבטחה של פטל פי: 11 שלבים (עם תמונות)
וִידֵאוֹ: עשר הנשים הכי גבוהות בעולם┃טופטן 2024, נוֹבֶמבֶּר
Anonim
מצלמת אבטחה של Raspberry Pi
מצלמת אבטחה של Raspberry Pi

זהו מדריך שלב אחר שלב כיצד ליצור מצלמת אבטחה המופעלת בתנועה באמצעות IoT באמצעות פטל פטל. תלמד כיצד ליצור שרת אינטרנט וצורה המאפשרים למשתמש להתאים את הרגישות ואת זמן ההקלטה של המצלמה, להתחיל/לעצור באופן ידני הקלטה ו/או לצלם תמונה שתישמר באופן מקומי.

אספקה

  • פטל פי 3
  • מצלמת פי
  • חיישן תנועה PIR
  • כרטיס זיכרון
  • מקור כוח

שלב 1: הרכבת החומרה

הרכיבו את החומרה
הרכיבו את החומרה
הרכיבו את החומרה
הרכיבו את החומרה
הרכיבו את החומרה
הרכיבו את החומרה
הרכיבו את החומרה
הרכיבו את החומרה

בזמן שה- Pi כבוי, הכנס את כרטיס ה- micro-SD לתוך ה- Pi. הכנס את כבל הסרט של מודול המצלמה ליציאת מודול המצלמה בפי. לאחר מכן, חבר את 3 הפינים (שכותרתם VCC, OUT ו- GND) של גלאי התנועה PRI לסיכות ה- GPIO של ה- Pi. חבר את VCC לחשמל של 5.5V, ה- GND לקרקע ואת ה- OUT לסיכה 11 בפי.

שלב 2: ודא שה- Pi שלך מחובר לאינטרנט

ודא שה- Pi שלך מחובר לאינטרנט
ודא שה- Pi שלך מחובר לאינטרנט

כעת, הפעל את ה- Pi על ידי חיבורו למקור חשמל וודא שאתה מחובר לאינטרנט באמצעות הפקודה ping. אם אינך יודע כיצד לחבר את ה- Pi שלך לאינטרנט, לחץ כאן.

sudo ping www.google.com

אם אתה מצליח, אתה אמור לראות ש- Google מתקבלת נתונים.

בנוסף, תוכל להשתמש ב- ifconfig כדי לראות את כתובת ה- IP שלך.

sudo ifconfig

שלב 3: הגדר את המצלמה

השתמש בפקודה הבאה כדי לפתוח את ממשק התצורה, ולהפעיל את המצלמה ב"אפשרויות הממשק ".

sudo raspi-config

לאחר אתחול מחדש, תוכל להציג את מצב המצלמה שלך כדי לוודא שהיא מחוברת כראוי.

vcgencmd get_camera

לבסוף, התקן את מודול פיקמרה.

pip להתקין picamera

שלב 4: התקן את הבקבוק

התקן את הבקבוק והמודול הנינוח-בקבוק עבור Python:

sudo apt-get להתקין python-dev python-pip

python -m pip התקן את הבקבוקון -רגוע

לאחר מכן, נתקין מודול בקבוק פייתון המשמש ליצירת טפסים.

pip התקן flask-wtf

שלב 5: צור מחלקת טפסים

צור ספרייה בשם iotProject לאחסון כל הקבצים שלך.

sudo mkdir iotProject

צור קובץ פייתון בשם "camControl.py".

sudo nano camControl.py

בקובץ זה ניצור את מחלקת הטפסים שלנו, המאפשרת לנו ליצור טופס אינטרנט עם תיבות טקסט ותפריט נפתח כדי שהמשתמש יוכל לשנות את הגדרות המצלמה, להתחיל/לעצור הקלטה באופן ידני ולצלם וידאו.

מ- flask_wtf ייבוא FlaskFormfrom wtforms.validators ייבוא נתוניםנדרש מ wtforms ייבוא SubmitField ממאמת ייבוא wtforms, IntegerField, BooleanField, SelectField

class camFrame (FlaskForm):

videoDuration = IntegerField ('זמן הקלטה (בשניות)')

רגישות = IntegerField ('רגישות תנועה (טווח 2500-10000) n ככל שהמספר גבוה יותר, כך המצלמה פחות רגישה', validators = [validators. NumberRange (min = 2500, max = 10000, message = 'Value Out out Range')])

options = SelectField ('אפשרויות', בחירות = [('אין', 'אין פעולה'), ('rec', 'התחל להקליט'), ('עצור', 'עצור הקלטה'), ('תמונה', 'צלם תמונה'])

submit = SubmitField ('שלח')

שלב 6: צור תבנית בקבוק

צור תבנית בקבוק
צור תבנית בקבוק

כדי ליצור את ממשק המשתמש, עליך לעצב תבנית בקבוק המשתמשת בטופס שיצרת זה עתה. קובץ זה ייכתב ב- html, ויאוחסן בתיקייה בשם תבניות, שאמורה להיות באותה ספרייה כמו הטופס שלך.

בתוך תיקיית התבניות שלך, צור קובץ בשם index.html. בתוך קובץ זה, העתק את הקוד המוצג למעלה.

שלב 7: עיבד את התבנית

כעת הגיע הזמן ליצור קובץ המעבד את התבנית. צור קובץ בשם appCam.py (ודא שאתה כבר לא בתיקיית התבניות). כל תוכן דינמי המשמש בתבנית חייב לשמש כארגומנט בשם בקריאה render_template ().

ייבוא camControl מתוך בקבוק ייבוא בקבוק, render_template, בקשה, תגובה ממשאב ייבוא flask_restful, Api, reqparse

אפליקציה = בקבוק (_ שם_)

app.config ['SECRET_KEY'] = '13542' api = Api (אפליקציה)

parser = reqparse. RequestParser ()

parser.add_argument ('dur', type = int, help = 'משך הסרטון בעת זיהוי תנועה') parser.add_argument ('sens', type = int, help = 'רמת התנועה הנדרשת להפעלת הקלטה') מנתח.add_argument ('opt', type = str, help = 'הקלטת סרטון ידני או צילום תמונה')

עדכון מחלקה (משאב):

#Stuff for wtforms def post (self): args = parser.parse_args () #rc.input (args ['dur'], args ['sens'], args ['opt']) #כתוב לקובץ הטקסט מדבר עם המצלמה הפועלת במקביל 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 () החזר {'dur': args ['dur'], 'sens': args ['sense'], 'opt': args ['opt']}

@app.route ('/', method = ['GET', 'POST'])

def index (): "" "דף הבית של הבקר" "" form = camControl.camFrame () #זוהי טופס אם request.method == 'POST': print (request.form) args = [i for i בבקשה.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 במהלך cameraSettingsFile.write (args [1] [1] + '\ n') #write sens cameraSettingsFile.write (args [2] [1] + '\ n') #write opt cameraSettingsFile.close () imageDictionary = {"filename": "image.jpg"} החזר render_template ('index.html', form = form, image = imageDictionary)

api.add_resource (עדכון, '/עדכון/')

אם _name_ == '_ עיקר_':

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

שלב 8: צור כיתת מפעיל מצלמות

כעת אנו רוצים ליצור קובץ בשם camOperator.py. בה נכין שיעור מצלמות עם שיטות להפעלת המצלמה, תוך שימוש בפונקציות PiCamera שכבר זמינות. נשתמש במופע של אובייקט זה בשלב הבא בו נשלב את הפונקציונליות של המצלמה וחיישן התנועה.

השיטות המוגדרות במחלקה זו משנות את הגדרות "הרשומה" במצלמת האבטחה באמצעות תשומות הרגישות והמשך שהמשתמש מספק, תוך קביעת ערכי ברירת מחדל עבור משתנים אלה אם אין קלט משתמש.

ייבוא RPi. GPIO כ- GPIO ייבוא זמן מצלמה מייבוא תאריך זמן

GPIO.setmode (GPIO. BOARD)

GPIO.setup (11, GPIO. IN)

לזהות = 0

מצלמה בכיתה מפעיל:

def _init _ (עצמי):

#קונסטרוקטור self.cam = picamera. PiCamera () self.data = self.dur = 10 self.sens = 2500 self.opt = "אין"

שיא def (עצמי, dur):

#Records למשך הזמן הנתון שהוגדר על ידי הבקר 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 (עצמי, dur, sens):

#הפעלה ראשית של המצלמה שכל הזמן בודקת אם אדם נמצא בקרבת מקום, אם בן אדם נשאר מספיק זמן, אנחנו מתחילים להקליט! זיהוי גלובלי i = GPIO.input (11) אם i == 0: #כאשר הפלט מחיישן התנועה הוא LOW detect = 0 time.sleep (0.1) elif i == 1: #כאשר הפלט מחיישן התנועה הוא הדפסה גבוהה (" תנועה זוהתה " +str (זיהוי)) אם זיהוי> = sens*10: self.record (dur) הדפסה (" RECORDED ") detect = 0 time.sleep (0.1) detect += 1

שלב 9: צור את מודול הרשומה

התוכנית האחרונה הדרושה לפרויקט זה תיכתב בקובץ בשם rec.py. קובץ זה אומר למצלמה מתי לצלם, כמה זמן להקליט ואם/מתי לצלם. הוא עושה זאת על ידי בדיקה וקריאה מתמדת של נתוני המשתמש שנכתבו לקובץ הטקסט משלב 5. אם הקובץ עודכן הוא מתאים את ערכי הרגישות והמשך בהתאם, ולאחר מכן, אם מצולמים הקלטה או תמונה, הוא שומר את התוכן ל pi, בפורמט קובץ.h264 או.jpg.

'' 'פועל במקביל לשרת הבקבוקון, קריאת משתני בקרה שנקבעו על ידי צורות השרת. משתני בקרת השרת מוגדרים בקובץ נפרד לאחר שליחת הטפסים. מודול ה- rec קורא משתנים אלה ומעדכן את המצלמה בהתבסס עליהם. '' 'יבוא camOperator משעת ייבוא datetime של datetime

rc = camOperator.cameraOperator ()

cameraSettingsFile = open ("cameraSettings.txt", 'w') cameraSettingsFile.close () #כאן, אנו פותחים וסוגרים במצב כתיבה על מנת למחוק את התוכן בתוך הקובץ לפני הפעלת הלולאה הראשית.

#לולאה רציפה אשר צופה כדי לראות אם בני אדם נמצאים בקרבת מקום. אם הם כן, אז

#המצלמה מתחילה להקליט. פונקציה זו פועלת במקביל עם הבקבוק #שרת השולט במצלמה זו. recordingInProcess = False while True: #check/record if (recordingInProcess == False): rc.operation (rc.dur, rc.sens) #שנה את הגדרות המצלמה בהתבסס על השרת cameraSettingsFile = open ("cameraSettings.txt", 'r') settingNum = 0 להגדרה ב- cameraSettingsFile.readlines (): if settingNum == 0: #שינוי שינוי rc.dur = int (הגדרה) elif settingNum == 1: #שינוי רגישות rc.sens = int (הגדרה) elif settingNum == 2: #Action change rc.opt = setting settingNum += 1 cameraSettingsFile.close ()

#לבצע פעולה

# if rc.opt == "none": # המשך אם rc.opt == "rec / n" ו recordingInProcess == שקר: הדפס ("הפעלת פקודת רשומה מהבקר") # צור שם לסרטון המבוסס על שם וידאו בזמן אמת = "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: הדפס ("הפסקת פקודת הקלטה מבקר") rc.cam.stop_recording () recordingInProcess = False cameraSettingsFile = open ("cameraSettings.txt", 'w') cameraSettingsFile.write (str (rc.dur)+'\ n') cameraSettingsFile.write (str (rc.sens)+'\ n') cameraSettingsFile. כתוב ("none / n") rc.opt = "none / n" elif rc.opt == "pic / n" והקלטתInProcess == שקר: הדפס ("הצמד פקודת פיקוד מהבקר") pictureName = "snappedPic_ "+str (datetime.now ()) pictureName = pictureName.replace (':', ') pictureName = pictureName.replace ('. ',') rc.cam.st art_preview () time.sleep (5) rc.cam.capture ('images/' + pictureName + '.jpg') rc.cam.stop_preview () cameraSettingsFile = open ("cameraSettings.txt", 'w') cameraSettingsFile. לכתוב (str (rc.dur)+'\ n') cameraSettingsFile.write (str (rc.sens)+'\ n') cameraSettingsFile.write ("אין / n") rc.opt = "אין / n"

שלב 10: הפעל את השרת

הפעל את השרת
הפעל את השרת

SSH לתוך ה- pi והפעל את השרת באמצעות שורת הפקודה המוצגת למעלה.

שלב 11: נסה זאת

נסה את זה!
נסה את זה!
נסה את זה!
נסה את זה!

גש לדף האינטרנט באמצעות כתובת ה- IP ואתה אמור להיות מסוגל לשלוט במצלמה מרחוק!

מוּמלָץ: