كاميرا أمان Raspberry Pi: 11 خطوة (بالصور)
كاميرا أمان Raspberry Pi: 11 خطوة (بالصور)
Anonim
كاميرا مراقبة Raspberry Pi
كاميرا مراقبة Raspberry Pi

هذه خطوة بخطوة قابلة للتوجيه حول كيفية إنشاء IoT ، وكاميرا أمان تنشيط الحركة باستخدام Raspberry Pi. سوف تتعلم كيفية إنشاء خادم ويب flask ونموذج يسمح للمستخدم بضبط حساسية الكاميرا ووقت التسجيل ، و / أو بدء / إيقاف التسجيل يدويًا ، و / أو التقاط صورة سيتم حفظها محليًا.

اللوازم

  • Raspberry Pi 3
  • كاميرا بي
  • مستشعر الحركة PIR
  • بطاقة الذاكرة
  • مصدر الطاقة

الخطوة 1: قم بتجميع الأجهزة

قم بتجميع الأجهزة
قم بتجميع الأجهزة
قم بتجميع الأجهزة
قم بتجميع الأجهزة
قم بتجميع الأجهزة
قم بتجميع الأجهزة
قم بتجميع الأجهزة
قم بتجميع الأجهزة

أثناء إيقاف تشغيل Pi ، أدخل بطاقة micro-SD في Pi. أدخل كبل شريط وحدة الكاميرا في منفذ وحدة الكاميرا على Pi. بعد ذلك ، قم بتوصيل المسامير الثلاثة (المسمى VCC و OUT و GND) الخاصة بكاشف الحركة PRI بدبابيس GPIO الخاصة بـ Pi. قم بتوصيل VCC إلى 5.5V من الطاقة ، و GND بالأرض ، و OUT إلى دبوس 11 على Pi.

الخطوة 2: تأكد من أن Pi الخاص بك متصل بالإنترنت

تأكد من أن Pi الخاص بك متصل بالإنترنت
تأكد من أن Pi الخاص بك متصل بالإنترنت

الآن ، قم بتشغيل Pi عن طريق توصيله بمصدر طاقة وتحقق من أنك متصل بالإنترنت باستخدام الأمر ping. إذا كنت لا تعرف كيفية توصيل Pi بالإنترنت ، فانقر هنا.

sudo ping www.google.com

إذا كنت ناجحًا ، يجب أن ترى أن البيانات يتم تلقيها عن طريق google.

بالإضافة إلى ذلك ، يمكنك استخدام ifconfig لرؤية عنوان IP الخاص بك.

sudo ifconfig

الخطوة الثالثة: إعداد الكاميرا

استخدم الأمر التالي لفتح واجهة التكوين ، وتمكين الكاميرا في "خيارات الواجهة".

sudo raspi-config

بعد إعادة التشغيل ، يمكنك عرض حالة الكاميرا للتأكد من توصيلها بشكل صحيح.

vcgencmd get_camera

أخيرًا ، قم بتثبيت وحدة picamera.

نقطة تثبيت picamera

الخطوة 4: تثبيت Flask

قم بتثبيت وحدة القارورة والوحدة المريحة للقارورة في بايثون:

sudo apt-get install python-dev python-pip

بيثون- m pip تثبيت قارورة قارورة مريحة

بعد ذلك ، سنقوم بتثبيت وحدة قارورة Python المستخدمة لإنشاء النماذج.

تثبيت الأنابيب flask-wtf

الخطوة 5: إنشاء فئة النموذج

أنشئ دليلًا يسمى iotProject لتخزين جميع ملفاتك بتنسيق.

sudo mkdir iotProject

قم بإنشاء ملف python يسمى "camControl.py".

sudo نانو camControl.py

في هذا الملف ، سننشئ فئة النموذج الخاصة بنا ، والتي تتيح لنا إنشاء نموذج ويب مع مربعات نصية وقائمة منسدلة ليتمكن المستخدم من تغيير إعدادات الكاميرا ، وبدء / إيقاف التسجيل يدويًا ، والتقاط الفيديو.

من flask_wtf استيراد FlaskFormfrom wtforms.validators استيراد DataRequired من wtforms استيراد SubmitField من مدققي استيراد wtforms ، IntegerField ، BooleanField ، SelectField

فئة camFrame (FlaskForm):

videoDuration = IntegerField ("وقت التسجيل (بالثواني)")

الحساسية = IntegerField ("حساسية الحركة (النطاق 2500-10000)) n كلما زاد الرقم ، قلت حساسية الكاميرا" ،

المدققون = [validators. NumberRange (min = 2500 ، max = 10000 ، message = 'Value Out of Range')])

options = SelectField ('Options'، options = [('none'، 'No action')، ('rec'، 'Start Recording')، ('stop'، 'Stop Recording)،

("صورة" ، "التقاط صورة")])

Submit = SubmitField ('Submit')

الخطوة 6: إنشاء قالب Flask

قم بإنشاء قالب قارورة
قم بإنشاء قالب قارورة

لإنشاء واجهة المستخدم ، يجب عليك تصميم قالب Flask الذي يستخدم النموذج الذي أنشأته للتو. سيتم كتابة هذا الملف بلغة html ، وتخزينه في مجلد يسمى القوالب ، والذي يجب أن يكون في نفس الدليل مثل النموذج الخاص بك.

داخل مجلد القوالب ، قم بإنشاء ملف يسمى index.html. داخل هذا الملف ، قم بتكرار الرمز الموضح أعلاه.

الخطوة 7: تقديم النموذج

حان الوقت الآن لإنشاء ملف يعرض القالب. قم بإنشاء ملف باسم appCam.py (تأكد من أنك لم تعد في مجلد القوالب). يجب استخدام أي محتوى ديناميكي مستخدم في القالب كوسيطة مسماة في استدعاء render_template ().

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

التطبيق = قارورة (_ name_)

app.config ['SECRET_KEY'] = '13542' api = Api (التطبيق)

المحلل اللغوي = 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']) # اكتب في الملف النصي الذي يتحدث إلى الكاميرا التي تعمل في كاميرا متوازيةSettingsFile = open ("cameraSettings.txt"، 'w') cameraSettingsFile.write (args ['dur'] + '\ n') # اكتب 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 ('/'، methods = ['GET'، 'POST'])

def index (): "" "الصفحة الرئيسية لوحدة التحكم" "" form = camControl.camFrame () # هذا هو نموذج 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 (تحديث ، '/ تحديث /')

إذا _name_ == "_الرئيسية_":

app.run (المضيف = '0.0.0.0' ، المنفذ = 80 ، التصحيح = صحيح ، مترابط = صحيح)

الخطوة 8: إنشاء فئة مشغل الكاميرا

نريد الآن إنشاء ملف يسمى camOperator.py. سننشئ فيه فصلًا للكاميرا مع طرق لتشغيل الكاميرا ، باستخدام وظائف PiCamera المتوفرة بالفعل. سنستخدم مثيلًا لهذا الكائن في الخطوة التالية حيث سنجمع بين وظيفة الكاميرا ومستشعر الحركة.

تقوم الطرق المحددة في هذه الفئة بتغيير إعدادات "التسجيل" على الكاميرا الأمنية باستخدام مدخلات الحساسية والمدة التي يوفرها المستخدم ، مع تحديد القيم الافتراضية لهذه المتغيرات في حالة عدم وجود مدخلات المستخدم.

استيراد RPi. GPIO كصورة استيراد وقت الاستيراد من GPIO من تاريخ استيراد ووقت وتاريخ

GPIO.setmode (GPIO. BOARD)

GPIO.setup (11 ، GPIO. IN)

كشف = 0

فئة الكاميرا

def _init _ (ذاتي):

#constructor self.cam = picamera. PiCamera () self.data = self.dur = 10 self.sens = 2500 self.opt = "لا شيء"

سجل def (self، dur):

# تسجيلات للمدة المحددة بواسطة وحدة التحكم videoName = str (datetime.now ()) videoName = videoName.replace (':'، ') videoName = videoName.replace ('. '،') self.cam.start_recording ('.'، ') self.cam.start_recording (': '،') '/ home / pi / iotProject / videos /' + videoName + '.h264') time.sleep (dur) self.cam.stop_recording ()

عملية def (self، dur، sens):

# التشغيل الرئيسي للكاميرا التي تتحقق باستمرار لمعرفة ما إذا كان هناك إنسان في الجوار ، إذا بقي الإنسان لفترة كافية ، نبدأ في التسجيل! الاكتشاف الشامل i = GPIO.input (11) إذا كان i == 0: # عندما يكون الإخراج من مستشعر الحركة منخفضًا = 0 time.sleep (0.1) elif i == 1: # عندما يكون الإخراج من مستشعر الحركة طباعة عالية (" تم الكشف عن الحركة "+ str (اكتشف)) إذا اكتشف> = sens * 10: self.record (dur) print (" RECORDED ") اكتشف = 0 time.sleep (0.1) اكتشف + = 1

الخطوة 9: إنشاء وحدة التسجيل

سيتم كتابة البرنامج الأخير المطلوب لهذا المشروع في ملف يسمى rec.py. يخبر هذا الملف الكاميرا بموعد التسجيل ، ومدة التسجيل ، وما إذا / متى تلتقط صورة. يقوم بذلك عن طريق التحقق المستمر من بيانات المستخدم المكتوبة في الملف النصي وقراءتها من الخطوة 5. إذا تم تحديث الملف ، فإنه يضبط قيم الحساسية والمدة وفقًا لذلك ، وبعد ذلك ، إذا تم التقاط تسجيل أو صورة ، فإنه يحفظ المحتوى في pi ، إما بتنسيق ملف.h264 أو.jpg.

'' 'يعمل بالتوازي مع خادم القارورة ، ويقرأ متغيرات التحكم التي تم تعيينها بواسطة نماذج الخادم. يتم تعيين متغيرات التحكم في الخادم في ملف منفصل بمجرد إرسال النماذج. تقرأ وحدة rec هذه المتغيرات وتقوم بتحديث الكاميرا بناءً عليها. '' استيراد camOperator من وقت استيراد التاريخ والوقت

rc = camOperator.cameraOperator ()

cameraSettingsFile = open ("cameraSettings.txt"، 'w') cameraSettingsFile.close () # هنا ، نفتح ونغلق في وضع الكتابة لحذف المحتويات داخل الملف قبل تشغيل الحلقة الرئيسية

# حلقة مستمرة تراقب لترى ما إذا كان البشر في الجوار. إذا كانوا كذلك ، إذن

# تبدأ الكاميرا في التسجيل. تعمل هذه الوظيفة بالتوازي مع القارورة #server التي تتحكم في هذه الكاميرا. RegistrationInProcess = False while True: # check / Record if (registrationInProcess == False): rc.operation (rc.dur، rc.sens) # تغيير إعدادات الكاميرا بناءً على كاميرا الخادم ServerSettingsFile = open ("cameraSettings.txt" ، 'r') settingNum = 0 للإعداد في cameraSettingsFile.readlines (): if settingNum == 0: #Duration change rc.dur = int (setting) elif settingNum == 1: # تغيير الحساسية rc.sens = int (الإعداد) إعداد elifNum == 2: #Action change rc.opt = setting settingNum + = 1 cameraSettingsFile.close ()

# تنفيذ إجراء

# if rc.opt == "none": # متابعة إذا rc.opt == "rec / n" and registrationInProcess == False: print ("تشغيل أمر التسجيل من وحدة التحكم") #Generate name للفيديو استنادًا إلى الوقت الحالي videoName = "snappedVid _" + str (datetime.now ()) videoName = videoName.replace (':'، ') videoName = videoName.replace ('. '،') rc.cam.start_recording ('/ home / pi / iotProject / videos / '+ videoName +'.h264 ') registrationInProcess = True elif rc.opt == "stop / n" and registrationInProcess == True: print ("إيقاف أمر التسجيل من وحدة التحكم") rc.cam.stop_recording () التسجيل في العملية = False cameraSettingsFile = open ("cameraSettings.txt"، 'w') cameraSettingsFile.write (str (rc.dur) + '\ n') cameraSettingsFile.write (str (rc.sens) + '\ n') cameraSettingsFile. اكتب ("لا شيء / n") rc.opt = "بلا / n" elif rc.opt == "pic / n" وتسجيل InProcess == خطأ: طباعة ("التقط أمر الموافقة المسبقة عن علم من وحدة التحكم") اسم الصورة = "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') ملف إعدادات الكاميرا. write (str (rc.dur) + '\ n') cameraSettingsFile.write (str (rc.sens) + '\ n') cameraSettingsFile.write ("none / n") rc.opt = "none / n"

الخطوة 10: ابدأ تشغيل الخادم

ابدأ الخادم
ابدأ الخادم

SSH في pi وابدأ تشغيل الخادم باستخدام سطر الأوامر الموضح أعلاه.

الخطوة 11: جربها بنفسك

حاول!
حاول!
حاول!
حاول!

قم بالوصول إلى صفحة الويب باستخدام عنوان IP ويجب أن تكون قادرًا على التحكم في الكاميرا عن بُعد!

موصى به: