विषयसूची:

रास्पबेरी पाई सुरक्षा कैमरा: 11 कदम (चित्रों के साथ)
रास्पबेरी पाई सुरक्षा कैमरा: 11 कदम (चित्रों के साथ)

वीडियो: रास्पबेरी पाई सुरक्षा कैमरा: 11 कदम (चित्रों के साथ)

वीडियो: रास्पबेरी पाई सुरक्षा कैमरा: 11 कदम (चित्रों के साथ)
वीडियो: Mark West — Building a Smart Security Camera with Raspberry Pi Zero, Java and AWS 2024, नवंबर
Anonim
रास्पबेरी पाई सुरक्षा कैमरा
रास्पबेरी पाई सुरक्षा कैमरा

यह रास्पबेरी पाई का उपयोग करके IoT, मोशन एक्टिवेटेड सुरक्षा कैमरा बनाने का चरण-दर-चरण निर्देश है। आप सीखेंगे कि कैसे एक फ्लास्क वेब सर्वर और फॉर्म बनाया जाए जो उपयोगकर्ता को कैमरे की संवेदनशीलता और रिकॉर्डिंग समय को समायोजित करने की अनुमति देता है, मैन्युअल रूप से एक रिकॉर्डिंग शुरू / बंद करता है, और / या एक तस्वीर लेता है जिसे स्थानीय रूप से सहेजा जाएगा।

आपूर्ति

  • रास्पबेरी पाई 3
  • पाई कैमरा
  • पीर मोशन सेंसर
  • एसडी कार्ड
  • शक्ति का स्रोत

चरण 1: हार्डवेयर को इकट्ठा करें

हार्डवेयर इकट्ठा करें
हार्डवेयर इकट्ठा करें
हार्डवेयर इकट्ठा करें
हार्डवेयर इकट्ठा करें
हार्डवेयर इकट्ठा करें
हार्डवेयर इकट्ठा करें
हार्डवेयर इकट्ठा करें
हार्डवेयर इकट्ठा करें

जबकि पाई बंद है, माइक्रो-एसडी कार्ड को पाई में डालें। पाई पर कैमरा मॉड्यूल पोर्ट में कैमरा मॉड्यूल रिबन केबल डालें। फिर, PRI मोशन डिटेक्टर के 3 पिन (VCC, OUT, और GND लेबल) को Pi के GPIO पिन से कनेक्ट करें। VCC को 5.5V पावर, GND को ग्राउंड से, और OUT को Pi पर 11 पिन करने के लिए कनेक्ट करें।

चरण 2: सुनिश्चित करें कि आपका पाई इंटरनेट से जुड़ा है

सुनिश्चित करें कि आपका पाई इंटरनेट से जुड़ा है
सुनिश्चित करें कि आपका पाई इंटरनेट से जुड़ा है

अब, पाई को एक शक्ति स्रोत से जोड़कर चालू करें और सत्यापित करें कि आप पिंग कमांड का उपयोग करके इंटरनेट से जुड़े हैं। यदि आप नहीं जानते कि अपने पाई को इंटरनेट से कैसे जोड़ा जाए, तो यहां क्लिक करें।

सुडो पिंग www.google.com

यदि आप सफल होते हैं, तो आप देखेंगे कि Google द्वारा डेटा प्राप्त किया जा रहा है।

इसके अतिरिक्त, आप अपना आईपी पता देखने के लिए ifconfig का उपयोग कर सकते हैं।

सुडो ifconfig

चरण 3: कैमरा सेट करें

कॉन्फ़िगरेशन इंटरफ़ेस खोलने के लिए निम्न आदेश का उपयोग करें, और कैमरे को "इंटरफ़ेसिंग विकल्प" में सक्षम करें।

सुडो रास्पि-कॉन्फ़िगरेशन

रिबूट करने के बाद, आप यह सुनिश्चित करने के लिए अपने कैमरे की स्थिति प्रदर्शित कर सकते हैं कि यह ठीक से जुड़ा हुआ है।

vcgencmd get_camera

अंत में, पिकामेरा मॉड्यूल स्थापित करें।

पिप पिकामेरा स्थापित करें

चरण 4: फ्लास्क स्थापित करें

पायथन के लिए फ्लास्क और फ्लास्क-रेस्टफुल मॉड्यूल स्थापित करें:

sudo apt-पायथन-देव स्थापित करें अजगर-पाइप

पायथन-एम पाइप फ्लास्क फ्लास्क-रेस्टफुल स्थापित करें

इसके बाद, हम फॉर्म बनाने के लिए उपयोग किए जाने वाले पायथन फ्लास्क मॉड्यूल को स्थापित करेंगे।

पाइप स्थापित फ्लास्क-wtf

चरण 5: एक फॉर्म क्लास बनाएं

अपनी सभी फाइलों को स्टोर करने के लिए iotProject नाम की एक डायरेक्टरी बनाएं।

सुडो एमकेडीआईआर आईओटीप्रोजेक्ट

"CamControl.py" नाम की एक अजगर फ़ाइल बनाएँ।

sudo nano camControl.py

इस फाइल में हम अपना फॉर्म क्लास बनाएंगे, जो हमें टेक्स्ट बॉक्स और एक ड्रॉप डाउन मेनू के साथ एक वेब फॉर्म बनाने की अनुमति देता है ताकि उपयोगकर्ता कैमरे की सेटिंग्स को बदल सके, रिकॉर्डिंग को मैन्युअल रूप से शुरू/बंद कर सके और वीडियो कैप्चर कर सके।

Flask_wtf आयात से FlaskForm से wtforms.validators आयात डेटा wtforms से आयात सबमिट फ़ील्ड से wtforms आयात सत्यापनकर्ता, इंटीजरफ़िल्ल्ड, बूलियनफ़िल्ल्ड, SelectField आयात करें

क्लास कैमफ्रेम (फ्लास्कफॉर्म):

videoDuration = IntegerField ('रिकॉर्डिंग समय (सेकंड में)')

संवेदनशीलता = पूर्णांक फ़ील्ड ('गति संवेदनशीलता (सीमा 2500-10000)\n संख्या जितनी अधिक होगी, कैमरा उतना ही कम संवेदनशील होगा', सत्यापनकर्ता = [सत्यापनकर्ता। संख्या श्रेणी (न्यूनतम = 2500, अधिकतम = 10000, संदेश = 'सीमा से बाहर मूल्य')])

विकल्प = चयन फ़ील्ड ('विकल्प', विकल्प = [('कोई नहीं', 'कोई कार्रवाई नहीं'), ('आरईसी', 'रिकॉर्डिंग शुरू करें'), ('रोकें', 'रिकॉर्डिंग रोकें'), ('तस्वीर', 'तस्वीर लें')])

सबमिट करें = सबमिट फ़ील्ड ('सबमिट करें')

चरण 6: फ्लास्क टेम्पलेट बनाएं

फ्लास्क टेम्प्लेट बनाएं
फ्लास्क टेम्प्लेट बनाएं

उपयोगकर्ता इंटरफ़ेस बनाने के लिए, आपको एक फ्लास्क टेम्पलेट डिज़ाइन करना होगा जो आपके द्वारा अभी बनाए गए फॉर्म का उपयोग करता है। यह फ़ाइल html में लिखी जाएगी, और टेम्प्लेट नामक फ़ोल्डर में संग्रहीत की जाएगी, जो आपके प्रपत्र के समान निर्देशिका में होनी चाहिए।

अपने टेम्प्लेट फोल्डर के अंदर, index.html नाम की एक फाइल बनाएं। इस फ़ाइल के भीतर, ऊपर दिखाए गए कोड को दोहराएं।

चरण 7: टेम्पलेट प्रस्तुत करें

अब एक फाइल बनाने का समय है जो टेम्पलेट को प्रस्तुत करता है। AppCam.py नाम की एक फ़ाइल बनाएँ (सुनिश्चित करें कि अब आप टेम्प्लेट फ़ोल्डर में नहीं हैं)। टेम्प्लेट में उपयोग की जाने वाली किसी भी गतिशील सामग्री को रेंडर_टेम्प्लेट () में कॉल में नामित तर्क के रूप में उपयोग किया जाना चाहिए।

फ्लास्क आयात फ्लास्क से कैमकंट्रोल आयात करें, रेंडर_टेम्पलेट, अनुरोध, फ्लास्क_रेस्टफुल आयात संसाधन से प्रतिक्रिया, एपीआई, रेकपर्स

ऐप = फ्लास्क (_name_)

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

पार्सर = reqparse. RequestParser ()

parser.add_argument('dur', type=int, help='वीडियो की अवधि जब गति का पता चलता है') parser.add_argument('sens', type=int, help='Recording को ट्रिगर करने के लिए आवश्यक गति का स्तर') पार्सर.add_argument('opt', type=str, help='मैन्युअल रूप से एक वीडियो रिकॉर्ड करें या एक इमेज कैप्चर करें')

वर्ग अद्यतन (संसाधन):

#Stuff for wtforms def post(self): args = parser.parse_args() #rc.input(args['dur'], args['sens'], args['opt']) # उस टेक्स्ट फाइल को लिखें जो समानांतर कैमरे में चल रहे कैमरे से बात करता हैसेटिंग्सफाइल = ओपन ("कैमरासेटिंग्स। टीएक्सटी", 'डब्ल्यू') कैमरासेटिंग्सफाइल.राइट (आर्ग्स ['ड्यूर'] + '\ n') # ड्यूर कैमरासेटिंग्सफाइल लिखें। + '\n') #लिखें सेंस कैमरासेटिंग्सफाइल.लिखें(args['opt'] + '\n') #write opt cameraSettingsFile.close() return {'dur': args['dur'], 'sens': args['sense'], 'opt':args['opt']}

@ app.route ('/', तरीके = ['प्राप्त करें', 'पोस्ट'])

डीईएफ़ इंडेक्स (): "" "कंट्रोलर होम पेज" "" फॉर्म = कैमकंट्रोल। कैमफ्रेम () # यह एक फॉर्म है अगर request.method == 'POST': प्रिंट (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') कैमरासेटिंग्सफाइल.लिखें (तर्क [0] [1] + '\ n') args[2][1] + '\n') #राइट कैमरासेटिंग्सफाइल.क्लोज () इमेज डिक्शनरी = {"फाइलनाम":"इमेज.जेपीजी"} रिटर्न रेंडर_टेम्पलेट ('इंडेक्स.एचटीएमएल', फॉर्म = फॉर्म, इमेज = इमेज डिक्शनरी)

api.add_resource (अपडेट करें, '/अपडेट/')

अगर _name_ == '_main_':

app.run (होस्ट = '0.0.0.0', पोर्ट = 80, डिबग = ट्रू, थ्रेडेड = ट्रू)

चरण 8: कैमरा ऑपरेटर क्लास बनाएं

अब हम camOperator.py नाम की एक फाइल बनाना चाहते हैं। इसमें हम पहले से उपलब्ध PiCamera फ़ंक्शंस का उपयोग करते हुए, कैमरे को संचालित करने के तरीकों के साथ एक कैमरा क्लास बनाएंगे। हम अगले चरण में इस ऑब्जेक्ट के एक उदाहरण का उपयोग करेंगे जहां हम कैमरे की कार्यक्षमता और गति संवेदक को जोड़ेंगे।

इस वर्ग में परिभाषित विधियां उपयोगकर्ता द्वारा प्रदान की जाने वाली संवेदनशीलता और अवधि इनपुट का उपयोग करके सुरक्षा कैमरे पर "रिकॉर्ड" सेटिंग्स को बदल देती हैं, जबकि उपयोगकर्ता इनपुट मौजूद नहीं होने पर इन चरों के लिए डिफ़ॉल्ट मान स्थापित करते हैं।

RPI. GPIO को GPIO के रूप में आयात करेंआयात समय डेटाटाइम आयात डेटाटाइम से पिकैमरा आयात करें

GPIO.सेटमोड (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="none"

डीईएफ़ रिकॉर्ड (स्वयं, ड्यूर):

# नियंत्रक द्वारा निर्धारित अवधि के लिए रिकॉर्ड 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()

डीईएफ़ ऑपरेशन (सेल्फ, ड्यूर, सेंस):

#कैमरे का मुख्य संचालन जो यह देखने के लिए लगातार जांच करता है कि कोई इंसान आस-पास है या नहीं, अगर कोई इंसान काफी देर तक आसपास रहता है, तो हम रिकॉर्डिंग शुरू कर देते हैं! ग्लोबल डिटेक्ट i = GPIO.input(11) अगर i == 0: # जब मोशन सेंसर से आउटपुट लो डिटेक्ट = 0 टाइम हो। स्लीप (0.1) elif i == 1: # जब मोशन सेंसर से आउटपुट हाई प्रिंट हो (" मोशन डिटेक्ट "+str(डिटेक्ट)) अगर डिटेक्ट>= सेंस*10: सेल्फ.रिकॉर्ड (ड्यूर) प्रिंट ("रिकॉर्डेड") डिटेक्ट = 0 टाइम। स्लीप (0.1) डिटेक्ट + = 1

चरण 9: रिकॉर्ड मॉड्यूल बनाएं

इस परियोजना के लिए आवश्यक अंतिम कार्यक्रम rec.py नामक फ़ाइल में लिखा जाएगा। यह फ़ाइल कैमरे को बताती है कि कब रिकॉर्ड करना है, कब तक रिकॉर्ड करना है और कब/कब तस्वीर लेनी है। यह चरण 5 से टेक्स्ट फ़ाइल में लिखे गए उपयोगकर्ता डेटा की लगातार जांच और पढ़ने के द्वारा ऐसा करता है। यदि फ़ाइल को अपडेट किया गया है तो यह संवेदनशीलता और अवधि मानों को तदनुसार समायोजित करता है और फिर, यदि कोई रिकॉर्डिंग या चित्र लिया जाता है, तो यह सामग्री को सहेजता है pi, या तो.h264 या-j.webp

'' 'फ्लास्क सर्वर के समानांतर चलता है, सर्वर फॉर्म द्वारा निर्धारित नियंत्रण चर को पढ़ता है। प्रपत्र जमा करने के बाद सर्वर नियंत्रण चर एक अलग फ़ाइल में सेट किए जाते हैं। आरई मॉड्यूल इन चरों को पढ़ता है और उनके आधार पर कैमरे को अपडेट करता है। ''' डेटाटाइम आयात डेटाटाइम आयात समय से कैमऑपरेटर आयात करें

आरसी = कैमऑपरेटर.कैमराऑपरेटर ()

CameraSettingsFile = open("cameraSettings.txt", 'w') cameraSettingsFile.close() # यहाँ, हम मुख्य लूप के चलने से पहले फ़ाइल के भीतर की सामग्री को हटाने के लिए राइट मोड में खोलते और बंद करते हैं

#एक निरंतर लूप जो यह देखने के लिए देखता है कि क्या मनुष्य आस-पास हैं। अगर वे हैं, तो

#कैमरा रिकॉर्डिंग शुरू करता है। यह फ़ंक्शन इस कैमरे को नियंत्रित करने वाले फ्लास्क #server के साथ समानांतर में चलता है। रिकॉर्डिंगइनप्रोसेस = गलत जबकि सही: # चेक/रिकॉर्ड अगर (रिकॉर्डिंगइनप्रोसेस == गलत): आरसी.ऑपरेशन (आरसी.डीयूआर, आरसी.सेंस), 'r') सेटिंगNum = 0 कैमरा सेटिंग में सेटिंग के लिए।) एलिफ सेटिंगनम == 2: #एक्शन चेंज आरसी.ऑप्ट = सेटिंग सेटिंगनम += 1 कैमरासेटिंग्सफाइल.क्लोज ()

#कार्रवाई निष्पादित करें

# if rc.opt == "none": # जारी रखें अगर rc.opt == "rec\n" और रिकॉर्डिंगइनप्रोसेस == गलत: प्रिंट ("कंट्रोलर से रिकॉर्ड कमांड चलाना") # वर्तमान समय के वीडियो के आधार पर वीडियो के लिए नाम जेनरेट करें = "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" और RecordingInProcess == True: Print("नियंत्रक से रिकॉर्ड कमांड रोकना") rc.cam.stop_recording() RecordingInProcess = झूठा कैमरासेटिंग्सफाइल = खुला ("कैमरासेटिंग्स.txt", 'डब्ल्यू') कैमरासेटिंग्सफाइल.लिखें (str(rc.dur)+'\n') कैमरासेटिंग्सफाइल.लिखें (str(rc.sens)+'\n') कैमरासेटिंग्सफाइल। write("none\n") rc.opt = "none\n" elif rc.opt == "pic\n" और RecordingInProcess == False: Print ("नियंत्रक से एक तस्वीर कमांड स्नैप करें") चित्रनाम = "snappedPic_ "+str(datetime.now ()) चित्रनाम = चित्रनाम.बदलें(':', ') चित्रनाम = चित्रनाम.बदलें('।', ') rc.cam.st art_preview() time.sleep(5) rc.cam.capture('Pictures/' + PicturesName + '.jpg') rc.cam.stop_preview() cameraSettingsFile = open("cameraSettings.txt", 'w') cameraSettingsFile. लिखें(str(rc.dur)+'\n') cameraSettingsFile.write(str(rc.sens)+'\n') cameraSettingsFile.write("none\n") rc.opt = "none\n"

चरण 10: सर्वर शुरू करें

सर्वर शुरू करें
सर्वर शुरू करें

SSH को pi में डालें और ऊपर दिखाए गए कमांड लाइन का उपयोग करके सर्वर शुरू करें।

चरण 11: इसे आज़माएं

कोशिश करके देखो!
कोशिश करके देखो!
कोशिश करके देखो!
कोशिश करके देखो!

आईपी पते का उपयोग करके वेबपेज तक पहुंचें और आपको दूर से कैमरे को नियंत्रित करने में सक्षम होना चाहिए!

सिफारिश की: