Anuraj Sinha
Published © GPL3+

Real Time Based Security system using BOLT

You may have seen lots of securities systems but this one is Heuristic with live face, audio and fingerprint recognition for home security.

IntermediateFull instructions provided2 hours768
Real Time Based Security system using BOLT

Things used in this project

Hardware components

Bolt WiFi Module
Bolt IoT Bolt WiFi Module
×1
Buzzer
Buzzer
×1
Solderless Breadboard Half Size
Solderless Breadboard Half Size
×1
Jumper wires (generic)
Jumper wires (generic)
×1
LED (generic)
LED (generic)
×1
Webcam, Logitech® HD Pro
Webcam, Logitech® HD Pro
×1
Desktop Microphone, Unidirectional
Desktop Microphone, Unidirectional
×1

Software apps and online services

Bolt Cloud
Bolt IoT Bolt Cloud
OpenCV
OpenCV – Open Source Computer Vision Library OpenCV
Windows 10
Microsoft Windows 10
python ide

Story

Read more

Schematics

Circuit connection

Code

First UI_Code

Python
# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file '1st_page.ui'
#
# Created by: PyQt5 UI code generator 5.13.0
#
# WARNING! All changes made in this file will be lost!

from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import QApplication, QWidget, QInputDialog, QLineEdit,QFileDialog
from PyQt5.QtGui import QIcon
from OtherWindow import Ui_OtherWindow
import os
import shutil
from PyQt5.QtWidgets import QMessageBox


class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(496, 204)
        MainWindow.setStyleSheet("background-color:lightgreen;\n"
"border-width: 2px;\n"
"border-radius: 10px;\n"
"")
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.pushButton = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton.setGeometry(QtCore.QRect(120, 50, 271, 41))
        self.pushButton.setStyleSheet("background-color:grey;\n"
"color:white;\n"
"border-style: outset;\n"
"border-width: 2px;\n"
"border-radius: 10px;\n"
"border-color: black;\n"
"font: bold 14px;\n"
"padding: 4px;")
        self.pushButton.setObjectName("pushButton")
        self.pushButton_2 = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton_2.setGeometry(QtCore.QRect(100, 130, 93, 28))
        self.pushButton_2.setStyleSheet("background-color:black;\n"
"color:red;\n"
"border-style: outset;\n"
"border-width: 2px;\n"
"border-radius: 10px;\n"
"border-color: black;\n"
"font: bold 14px;\n"
"padding: 4px;")
        self.pushButton_2.setObjectName("pushButton_2")
        self.pushButton_3 = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton_3.setGeometry(QtCore.QRect(320, 130, 93, 28))
        self.pushButton_3.setStyleSheet("background-color:black;\n"
"color:red;\n"
"border-style: outset;\n"
"border-width: 2px;\n"
"border-radius: 10px;\n"
"border-color: black;\n"
"font: bold 14px;\n"
"padding: 4px;")
        self.pushButton_3.setObjectName("pushButton_3")
        MainWindow.setCentralWidget(self.centralwidget)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.pushButton.setText(_translate("MainWindow", "Welcome to the world of Security"))
        self.pushButton_2.setText(_translate("MainWindow", "Lock"))
        self.pushButton_3.setText(_translate("MainWindow", "Unlock"))
        self.pushButton_2.clicked.connect(self.pushButton2_handler)
        self.pushButton_3.clicked.connect(self.pushButton3_handler)
        
#handling locking button and going to other window
    def pushButton2_handler(self):
        path1 = 'E:/bolt/Python-8sem-project'
        files = os.listdir(path1)
        flag = 0
        for name in files:
                if (name == "Locker"):
                        flag = flag+1
        if (flag == 1):
                self.window = QtWidgets.QMainWindow()
                self.press = 1
                self.ui = Ui_OtherWindow(self.press)
                self.ui.setupUi(self.window)
                self.window.show()
        else:
                msg = QMessageBox()
                msg.setWindowTitle("Warning!!")
                msg.setText("System Already Locked")
                x = msg.exec_()

#handling unlocking button and going to other window
    def pushButton3_handler(self):
        path1 = 'E:/bolt/Python-8sem-project'
        files = os.listdir(path1)
        flag = 0
        for name in files:
                if (name == "Locker"):
                        flag = flag+1
        if (flag == 0):
                self.window = QtWidgets.QMainWindow()
                self.press = 2
                self.ui = Ui_OtherWindow(self.press)
                self.ui.setupUi(self.window)
                self.window.show()
        else:
                msg = QMessageBox()
                msg.setWindowTitle("Warning!!")
                msg.setText("System already Un-Locked")
                x = msg.exec_()

if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    MainWindow = QtWidgets.QMainWindow()
    ui = Ui_MainWindow()
    ui.setupUi(MainWindow)
    MainWindow.show()
    sys.exit(app.exec_())

Second_UI codepyt

Python
# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'OtherWindow.ui'
#
# Created by: PyQt5 UI code generator 5.13.0
#
# WARNING! All changes made in this file will be lost!


from PyQt5 import QtCore, QtGui, QtWidgets
import cv2
import os, sys
import ntpath
from pydub import AudioSegment
import scipy.io.wavfile
from PyQt5.QtCore import pyqtSlot
from PyQt5.QtGui import QImage, QPixmap
from PyQt5.QtWidgets import QDialog, QApplication
from PyQt5.uic import loadUi
from PyQt5.QtWidgets import QMessageBox


class Ui_OtherWindow(object):
    def setupUi(self, OtherWindow):
        OtherWindow.setObjectName("OtherWindow")
        OtherWindow.resize(793, 600)
        OtherWindow.setStyleSheet("background-color:grey;\n"
"border-width: 2px;\n"
"border-radius: 10px;\n"
"")
        self.centralwidget = QtWidgets.QWidget(OtherWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.label = QtWidgets.QLabel(self.centralwidget)
        self.label.setGeometry(QtCore.QRect(20, 100, 151, 31))
        self.label.setStyleSheet("background-color:maroon;\n"
"color:white;\n"
"border-style: outset;\n"
"border-width: 2px;\n"
"border-radius: 10px;\n"
"border-color: black;\n"
"font: bold 14px;\n"
"padding: 4px;")
        self.label.setObjectName("label")
        self.label_2 = QtWidgets.QLabel(self.centralwidget)
        self.label_2.setGeometry(QtCore.QRect(320, 40, 301, 201))
        self.label_2.setStyleSheet("border-width: 2px;\n"
"border-radius: 10px;\n"
"")
        self.label_2.setText("")
        self.label_2.setObjectName("label_2")
        self.label_3 = QtWidgets.QLabel(self.centralwidget)
        self.label_3.setGeometry(QtCore.QRect(310, 260, 171, 41))
        self.label_3.setStyleSheet("color:white;\n"
"border-width: 2px;\n"
"border-radius: 10px;\n"
"border-color: black;\n"
"font: bold 14px;\n"
"padding: 4px;\n"
"")
        self.label_3.setText("")
        self.label_3.setObjectName("label_3")
        self.pushButton = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton.setGeometry(QtCore.QRect(360, 540, 93, 28))
        self.pushButton.setStyleSheet("background-color:maroon;\n"
"color:white;\n"
"border-style: outset;\n"
"border-width: 2px;\n"
"border-radius: 10px;\n"
"border-color: black;\n"
"font: bold 14px;\n"
"padding: 4px;")
        self.pushButton.setObjectName("pushButton")
        self.label_4 = QtWidgets.QLabel(self.centralwidget)
        self.label_4.setGeometry(QtCore.QRect(520, 260, 111, 41))
        self.label_4.setStyleSheet("color:white;\n"
"border-width: 2px;\n"
"border-radius: 10px;\n"
"border-color: black;\n"
"font: bold 14px;\n"
"padding: 4px;\n"
"")
        self.label_4.setText("")
        self.label_4.setObjectName("label_4")
        self.label_6 = QtWidgets.QLabel(self.centralwidget)
        self.label_6.setGeometry(QtCore.QRect(20, 370, 151, 31))
        self.label_6.setStyleSheet("background-color:maroon;\n"
"color:white;\n"
"border-style: outset;\n"
"border-width: 2px;\n"
"border-radius: 10px;\n"
"border-color: black;\n"
"font: bold 14px;\n"
"padding: 4px;\n"
"")
        self.label_6.setObjectName("label_6")
        self.label_7 = QtWidgets.QLabel(self.centralwidget)
        self.label_7.setGeometry(QtCore.QRect(370, 480, 151, 31))
        self.label_7.setStyleSheet("color:white;\n"
"border-width: 2px;\n"
"border-radius: 10px;\n"
"border-color: black;\n"
"font: bold 14px;\n"
"padding: 4px;")
        self.label_7.setText("")
        self.label_7.setObjectName("label_7")
        self.label_5 = QtWidgets.QLabel(self.centralwidget)
        self.label_5.setGeometry(QtCore.QRect(194, 340, 591, 121))
        self.label_5.setText("")
        self.label_5.setScaledContents(True)
        self.label_5.setObjectName("label_5")
        self.label_2.raise_()
        self.label_4.raise_()
        self.label.raise_()
        self.label_3.raise_()
        self.pushButton.raise_()
        self.label_6.raise_()
        self.label_7.raise_()
        self.label_5.raise_()
        OtherWindow.setCentralWidget(self.centralwidget)
        self.statusbar = QtWidgets.QStatusBar(OtherWindow)
        self.statusbar.setObjectName("statusbar")
        OtherWindow.setStatusBar(self.statusbar)

        self.retranslateUi(OtherWindow)
        QtCore.QMetaObject.connectSlotsByName(OtherWindow)

    def retranslateUi(self, OtherWindow):
        _translate = QtCore.QCoreApplication.translate
        OtherWindow.setWindowTitle(_translate("OtherWindow", "MainWindow"))
        self.label.setText(_translate("OtherWindow", "Image"))
        self.pushButton.setText(_translate("OtherWindow", "Verify"))
        self.label_6.setText(_translate("OtherWindow", "Sound Pattern"))
        self.pushButton.clicked.connect(self.one)

#To capture image and process it and used for locking and unlocking file
    def one(self):
        self.label.setText("Image Processing")
        cap = cv2.VideoCapture(0)
        count = 0
        while (cap.isOpened()):
                if count < 30:
                        ret, frame = cap.read()
                        self.displayImage(frame,1)
                        cv2.waitKey()
                        count=count + 1
                else:
                        break
        cap.release()
        cv2.imwrite(filename='cmp.jpg', img=frame)
        #os.system('python recognize_faces_image.py --encodings encodings.pickle --image cmp.jpg')
        #res = []
        #f = open("a.txt", "r")
        #for x in f:
        #        res.append(x)
        #f.close()
        #a=int(res[1])
        a = 1
        if (a==1):
                self.label_3.setText("Image Verified")
                #self.label_4.setText(res[0])
                #os.remove("a.txt")
                os.remove("cmp.jpg")
                self.audio()
        else:
                self.label_3.setText("Image Not Verified")
                self.label_4.setText(res[0])
                msg = QMessageBox()
                msg.setWindowTitle("Warning!!")
                msg.setText("Access not Granted")
                x = msg.exec_()
                os.remove("a.txt")
                os.remove("cmp.jpg")
                ver = 2
                f = open("del.txt","w+")
                f.write("%s \n" % ver)
                f.close()
                sys.exit(app.exec_())

#Displaying the image
    def displayImage(self, img, window=1):
        qformat = QImage.Format_Indexed8
        if len(img.shape) == 3:
                if (img.shape[2]) == 4:
                        qformat = QImage.Format_RGBA888
                else:
                        qformat = QImage.Format_RGB888
        img = QImage(img, img.shape[1], img.shape[0], qformat)
        img = img.rgbSwapped()
        self.label_2.setPixmap(QPixmap.fromImage(img))
        self.label_2.setAlignment(QtCore.Qt.AlignHCenter | QtCore.Qt.AlignVCenter)

#Verifying audio
    def audio(self):
        os.system('python recognize-from-microphone.py --s 5')
        os.system('python file_select.py')
        self.label_5.setPixmap(QtGui.QPixmap("a.jpg"))
        #os.remove('a.jpg')
        res = []
        f = open("a.txt", "r")
        for x in f:
                res.append(x)
        f.close()
        a=int(res[1])
        if (a==1):
                self.label_7.setText("Audio Verified, ")
                os.remove("a.txt")
                if(self.press == 1):
                        ver = 1
                        f = open("del.txt","w+")
                        f.write("%s \n" % ver)
                        f.close()
                        self.lock()
                else:
                        ver = 0
                        f = open("del.txt","w+")
                        f.write("%s \n" % ver)
                        f.close()
                        self.unlock()
        else:
                self.label_7.setText("Audio Not Verified, ")
                msg = QMessageBox()
                msg.setWindowTitle("Warning!!")
                msg.setText("Access not Granted")
                x = msg.exec_()
                os.remove("a.txt")
                ver = 2
                f = open("del.txt","w+")
                f.write("%s \n" % ver)
                f.close()
                sys.exit()

#Locking the file
    def lock(self):
        msg = QMessageBox()
        msg.setWindowTitle("Attention!!")
        msg.setText("Locking Folder")
        x = msg.exec_()
        from subprocess import Popen
        p = Popen("lock.bat", cwd=r"E:/bolt/Python-8sem-project")
        stdout, stderr = p.communicate()
        sys.exit()

#Unlocking the file
    def unlock(self):
        msg = QMessageBox()
        msg.setWindowTitle("Attention!!")
        msg.setText("Unlocking Folder")
        x = msg.exec_()
        from subprocess import Popen
        p = Popen("unlock.bat", cwd=r"E:/bolt/Python-8sem-project")
        stdout, stderr = p.communicate()
        sys.exit()

#Reading input from first window whether to lock or unlock
    def __init__(self, press):
        self.press = press

if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    OtherWindow = QtWidgets.QOtherWindow()
    ui = Ui_OtherWindow()
    ui.setupUi(OtherWindow)
    OtherWindow.show()
    sys.exit(app.exec_())

Credits

Anuraj Sinha
1 project • 1 follower
Contact

Comments

Please log in or sign up to comment.