Guest User

mdc

a guest
Oct 27th, 2016
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.52 KB | None | 0 0
  1. import threading
  2.  
  3. import thread
  4. from twilio.rest import TwilioRestClient
  5. from datetime import datetime
  6. import time
  7. from cv2 import *
  8. from PIL import ImageGrab
  9. import mail2
  10. import sms_send
  11. import cv2.cv as cv
  12. import Tkinter as tk
  13. from email import encoders
  14. from email.mime.base import MIMEBase
  15.  
  16. import smtplib
  17. from email.mime.multipart import MIMEMultipart
  18.  
  19. accountSid = 'AC41cefe6de8ff58ed08d88cc9740815a9'
  20. authToken = "3bad46b919771702c608bbd2d8284b44"
  21. twilioClient = TwilioRestClient(accountSid, authToken)
  22. myTwilioNumber = "+19287234071"
  23. destCellPhone = "+919910222142"
  24.  
  25. class MotionDetectorAdaptative():
  26. def onChange(self, val):
  27. self.threshold = val
  28.  
  29. def __init__(self, threshold=25, doRecord=True, showWindows=True):
  30.  
  31. self.writer = None
  32. self.font = None
  33. self.doRecord = doRecord
  34. self.show = showWindows
  35. self.frame = None
  36.  
  37.  
  38. self.capture = cv.CaptureFromCAM(0)
  39. self.frame = cv.QueryFrame(self.capture)
  40. if doRecord:
  41. self.Recorder()
  42.  
  43. self.gray_frame = cv.CreateImage(cv.GetSize(self.frame), cv.IPL_DEPTH_8U, 1)
  44. self.average_frame = cv.CreateImage(cv.GetSize(self.frame), cv.IPL_DEPTH_32F, 3)
  45. self.absdiff_frame = None
  46. self.previous_frame = None
  47.  
  48. self.surface = self.frame.width * self.frame.height
  49. self.currentsurface = 0
  50. self.currentcontours = None
  51. self.threshold = threshold
  52. self.isRecording = False
  53. self.trigger_time = 0
  54.  
  55. if showWindows:
  56. cv.NamedWindow("Image")
  57.  
  58. def send(self):
  59. fromaddr = "rmdasec@gmail.com"
  60. toaddr = "aneeshkhanna10@gmail.com"
  61. msg = MIMEMultipart()
  62. msg['From'] = fromaddr
  63. msg['To'] = toaddr
  64. msg['Subject'] = "Security Alert"
  65.  
  66. filename = "pic.jpg"
  67. attachment = open('C:\Users\Puzzled\PycharmProjects\untitled\pic.jpg', "rb")
  68. part = MIMEBase('application', 'octet-stream')
  69. part.set_payload((attachment).read())
  70. encoders.encode_base64(part)
  71. part.add_header('Content-Disposition', "attachment; filename= %s" % filename)
  72. msg.attach(part)
  73. server = smtplib.SMTP('smtp.gmail.com', 587)
  74. server.starttls()
  75. server.login(fromaddr, "Uditisatraitor")
  76.  
  77. text = msg.as_string()
  78. server.sendmail(fromaddr, toaddr, text)
  79. server.close()
  80.  
  81. def Recorder(self): # Create the recorder
  82. codec = cv.CV_FOURCC('I', 'Y', 'U', 'V')
  83. filename = time.strftime("%m-%d-%H-%M-%S") + '.avi'
  84. ## self.writer = cv.CreateVideoWriter(datetime.now().strftime("%b-%d_%H_%M_%S") + ".avi", codec, 15,
  85. # cv.GetSize(self.frame), 1)
  86. self.writer = cv.CreateVideoWriter(filename, codec, 10.0, cv.GetSize(self.frame), 1)
  87.  
  88. self.font = cv.InitFont(cv.CV_FONT_HERSHEY_SIMPLEX, 1, 1, 0, 2, 8) # Creates a font
  89.  
  90. def run(self):
  91. started = time.time()
  92. while True:
  93.  
  94. currentframe = cv.QueryFrame(self.capture)
  95. instant = time.time()
  96.  
  97. self.processImage(currentframe)
  98.  
  99. if not self.isRecording:
  100. if self.somethingHasMoved():
  101.  
  102.  
  103. self.trigger_time = instant
  104. if instant > started + 10:
  105. print "Something is moving !"
  106. time.sleep(0.4)
  107. ImageGrab.grab().save("pic.jpg", "JPEG")
  108. if self.doRecord:
  109. self.isRecording = True
  110.  
  111.  
  112. cv.DrawContours(currentframe, self.currentcontours, (0, 0, 255), (0, 255, 0), 1, 2, cv.CV_FILLED)
  113. else:
  114. if instant >= self.trigger_time + 10:
  115. t = threading.Thread(target=mail2.send())
  116. t.start()
  117. #myMessage = twilioClient.messages.create(body="Motion has been detected at your premise",from_=myTwilioNumber, to=destCellPhone)
  118. print "Stop recording"
  119. self.isRecording = False
  120. else:
  121. cv.PutText(currentframe, datetime.now().strftime("%b %d, %H:%M:%S"), (25, 30), self.font,
  122. 0)
  123. cv.WriteFrame(self.writer, currentframe)
  124.  
  125. if self.show:
  126. cv.ShowImage("Image", currentframe)
  127.  
  128. c = cv.WaitKey(1) % 0x100
  129. if c == 27 or c == 10:
  130. break
  131.  
  132. def processImage(self, curframe):
  133.  
  134. cv.Smooth(curframe, curframe)
  135.  
  136. if not self.absdiff_frame:
  137. self.absdiff_frame = cv.CloneImage(curframe)
  138. self.previous_frame = cv.CloneImage(curframe)
  139. cv.Convert(curframe, self.average_frame)
  140. else:
  141. cv.RunningAvg(curframe, self.average_frame, 0.05)
  142.  
  143. cv.Convert(self.average_frame, self.previous_frame)
  144.  
  145. cv.AbsDiff(curframe, self.previous_frame, self.absdiff_frame)
  146.  
  147. cv.CvtColor(self.absdiff_frame, self.gray_frame, cv.CV_RGB2GRAY)
  148. cv.Threshold(self.gray_frame, self.gray_frame, 50, 255, cv.CV_THRESH_BINARY)
  149.  
  150. cv.Dilate(self.gray_frame, self.gray_frame, None, 15)
  151. cv.Erode(self.gray_frame, self.gray_frame, None, 10)
  152.  
  153. def somethingHasMoved(self):
  154.  
  155. storage = cv.CreateMemStorage(0)
  156. contours = cv.FindContours(self.gray_frame, storage, cv.CV_RETR_EXTERNAL, cv.CV_CHAIN_APPROX_SIMPLE)
  157.  
  158. self.currentcontours = contours
  159.  
  160. while contours:
  161. self.currentsurface += cv.ContourArea(contours)
  162. contours = contours.h_next()
  163.  
  164. avg = (self.currentsurface * 100) / self.surface
  165. self.currentsurface = 0
  166.  
  167. if avg > 8:
  168.  
  169. return True
  170. else:
  171. return False
  172.  
  173.  
  174. if __name__ == "__main__":
  175.  
  176. failure_max = 3
  177. passwords = [('admin', 'admin'), ('new', 'help')]
  178.  
  179.  
  180. def make_entry(parent, caption, width=None, **options):
  181. tk.Label(parent, text=caption).pack(side=tk.TOP)
  182. entry = tk.Entry(parent, **options)
  183. if width:
  184. entry.config(width=width)
  185. entry.pack(side=tk.TOP, padx=10, fill=tk.BOTH)
  186. return entry
  187.  
  188.  
  189. def enter(event):
  190. check_password()
  191.  
  192.  
  193. def check_password(failures=[]):
  194. """ Collect 1's for every failure and quit program in case of failure_max failures """
  195. print(user.get(), password.get())
  196. if (user.get(), password.get()) in passwords:
  197. root.destroy()
  198. detect = MotionDetectorAdaptative(doRecord=True)
  199. detect.run()
  200.  
  201. print('Logged in')
  202.  
  203. return
  204. failures.append(1)
  205. if sum(failures) >= failure_max:
  206. root.destroy()
  207.  
  208. raise SystemExit('Unauthorized login attempt')
  209. else:
  210. root.title('Try again. Attempt %i/%i' % (sum(failures) + 1, failure_max))
  211.  
  212.  
  213. root = tk.Tk()
  214. root.geometry('300x160')
  215. root.title('Enter your information')
  216. # frame for window margin
  217. parent = tk.Frame(root, padx=10, pady=10)
  218. parent.pack(fill=tk.BOTH, expand=True)
  219. # entrys with not shown text
  220. user = make_entry(parent, "User name:", 16, show='*')
  221. password = make_entry(parent, "Password:", 16, show="*")
  222. # button to attempt to login
  223. b = tk.Button(parent, borderwidth=4, text="Login", width=10, pady=8, command=check_password)
  224. b.pack(side=tk.BOTTOM)
  225. password.bind('<Return>', enter)
  226.  
  227. user.focus_set()
  228.  
  229. parent.mainloop()
Add Comment
Please, Sign In to add comment