aboutsummaryrefslogtreecommitdiff
path: root/main.py
diff options
context:
space:
mode:
Diffstat (limited to 'main.py')
-rwxr-xr-xmain.py156
1 files changed, 78 insertions, 78 deletions
diff --git a/main.py b/main.py
index 698fa4f..2d89586 100755
--- a/main.py
+++ b/main.py
@@ -1,24 +1,21 @@
+"""AutoSafe
+Modular Road-Safety Toolkit
+"""
+#pylint: disable=C0103,C0111
+import argparse
+import time
import overpy
-import sys
import simplejson as sjson
-import json
-import time
-from threading import Thread
from scipy.spatial import distance as dist
from imutils.video import VideoStream
from imutils import face_utils
-from threading import Thread
-import numpy as np
-import playsound
-import argparse
+#import playsound
import imutils
import dlib
import cv2
-from uber_rides.session import Session
-from uber_rides.client import UberRidesClient
-import signal
-import argparse
+#from uber_rides.session import Session
+#from uber_rides.client import UberRidesClient
import tweepy
import requests
@@ -29,7 +26,7 @@ import requests
# Defining Variables #
######################
-radius = str(100) # Radius for maxspeed function. taken as a string because gets concatenated in the function
+radius = str(100) # Radius for maxspeed function. taken as a string because gets concatenated
################
# Dummy Values #
@@ -81,37 +78,37 @@ def get_api(cfg):
auth.set_access_token(cfg['access_token'], cfg['access_token_secret'])
return tweepy.API(auth)
-def tweet():
- cfg = {
- "consumer_key" : "knQFpTnjuSvr6OxYwebt3wyrd",
- "consumer_secret" : "Mhex3oRkmaF7lD3hoMvHpAD6ctW0ugKYCopTlhc0JzOLOMIZ0w",
- "access_token" : "2846631344-wEozinvHfEIFxFVy51I6te8SrN5OTFtU00wxsiz",
- "access_token_secret" : "Nfx1U8a2TjAQXFLBrJIyy2p36sjBGAWFIthLc1cIoI56U"
- }
+def tweetMe():
+ cfg = {
+ "consumer_key":"knQFpTnjuSvr6OxYwebt3wyrd",
+ "consumer_secret":"Mhex3oRkmaF7lD3hoMvHpAD6ctW0ugKYCopTlhc0JzOLOMIZ0w",
+ "access_token":"2846631344-wEozinvHfEIFxFVy51I6te8SrN5OTFtU00wxsiz",
+ "access_token_secret":"Nfx1U8a2TjAQXFLBrJIyy2p36sjBGAWFIthLc1cIoI56U"
+ }
api = get_api(cfg)
headers = {
'Accept': 'application/json',
- 'user-key': 'a530c1424d9abe5442fa22f77ce03d25',
+ 'user-key': 'a530c1424d9abe5442fa22f77ce03d25',
}
params = (
('lat', '28.546519'),
('lon', '77.179248'),
)
-
- response = requests.get('https://developers.zomato.com/api/v2.1/geocode', headers=headers, params=params)
+ url = 'https://developers.zomato.com/api/v2.1/geocode'
+ response = requests.get(url, headers=headers, params=params)
loc = response.json()['location']['title']
- tweet = ("Stay Alert! Sudden braking at: ", loc )
- status = api.update_status(status=tweet)
+ tweet = ("Stay Alert! Sudden braking at: ", loc)
+ status = api.update_status(status=tweet)
+ print(status)
################################
# Fetching Details from Zomato #
################################
-res = []
-
def getRes():
+ res = []
headers = {
'Accept': 'application/json',
'user-key': 'a530c1424d9abe5442fa22f77ce03d25',
@@ -121,8 +118,8 @@ def getRes():
('lat', '28.546519'),
('lon', '77.179248'),
)
-
- response = requests.get('https://developers.zomato.com/api/v2.1/geocode', headers=headers, params=params)
+ url = 'https://developers.zomato.com/api/v2.1/geocode'
+ response = requests.get(url, headers=headers, params=params)
res = response.json()['popularity']['nearby_res']
return res
@@ -133,12 +130,12 @@ def getDetails(res):
}
url = "https://developers.zomato.com/api/v2.1/restaurant?res_id=" + str(res[0])
newResponse = requests.get(url, headers=headers)
- newRes = []
+ #newRes = []
resName = newResponse.json()['name']
resAddress = newResponse.json()['location']['address']
print("You are feeling sleepy, why don't you take a break?\n")
- print("Your nearest eatery is " + resName,"\n")
- print(resName + " is at " + resAddress,"\n")
+ print("Your nearest eatery is " + resName, "\n")
+ print(resName + " is at " + resAddress, "\n")
def zomato():
res = getRes()
@@ -149,22 +146,22 @@ def zomato():
############################
def drunk():
- print("Your Location Appears to be around places which sells \n alcohol, please take the breathalyser test ")
+ print("Your appear to be around places which sell \n alcohol, take the breathalyser test")
- bac_raw = str(open("./files/bac.txt","r").read())
+ bac_raw = str(open("./files/bac.txt", "r").read())
bac = float(float(bac_raw)/100)
print(bac)
- if(bac >= 0.08):
+ if bac >= 0.08:
print("Please Do Not Drive!\n")
print("I can call a cab if you want\n")
print("")
answer = input("Say No, to disagree, else I'll book the cab: \n")
- if(answer=="no"):
+ if answer == "no":
print("You are not fit to drive")
print("Text message to emergency contact sent")
print("Your cab has been booked, thank you for not driving")
print("have a safe journey!")
-
+
def sound_alarm():
print('You Sleep You Lose')
@@ -175,7 +172,7 @@ def eye_aspect_ratio(eye):
A = dist.euclidean(eye[1], eye[5])
B = dist.euclidean(eye[2], eye[4])
C = dist.euclidean(eye[0], eye[3])
-
+
ear = (A + B) / (2.0 * C)
return ear
@@ -185,9 +182,8 @@ shape_predictor = "./files/shape_predictor_68_face_landmarks.dat"
EYE_AR_THRESH = 0.2 # If the EAR goes < this for 48 frames, it is counted as drowsiness
EYE_AR_CONSEC_FRAMES = 24
-
-COUNTER = 0
-ALERT = False
+
+
########################
@@ -195,6 +191,10 @@ ALERT = False
########################
def sleepiness():
+
+ COUNTER = 0
+ #ALERT = False
+
print("Initialising Facial Landmark Predictor...")
detector = dlib.get_frontal_face_detector()
predictor = dlib.shape_predictor(shape_predictor)
@@ -209,17 +209,17 @@ def sleepiness():
frame = vs.read()
frame = imutils.resize(frame, width=450)
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
-
+
rects = detector(gray, 0)
for rect in rects:
shape = predictor(gray, rect)
shape = face_utils.shape_to_np(shape)
-
+
leftEye = shape[lStart:lEnd]
rightEye = shape[rStart:rEnd]
leftEAR = eye_aspect_ratio(leftEye)
rightEAR = eye_aspect_ratio(rightEye)
-
+
ear = (leftEAR + rightEAR) / 2.0
leftEyeHull = cv2.convexHull(leftEye)
@@ -229,41 +229,39 @@ def sleepiness():
if ear < EYE_AR_THRESH:
COUNTER += 1
-
+
# if the eyes were closed for a sufficient number of
# then sound the alarm
if COUNTER >= EYE_AR_CONSEC_FRAMES:
# if the alarm is not on, turn it on
if not ALARM_ON:
ALARM_ON = True
-
+
# draw an alarm on the frame
cv2.putText(frame, "Sleepiness Detected!", (10, 30),
- cv2.FONT_HERSHEY_SIMPLEX, 0.7, (0, 0, 255), 2)
+ cv2.FONT_HERSHEY_SIMPLEX, 0.7, (0, 0, 255), 2)
print("Sleepiness Detected!")
- print("\a");print("\a");print("\a");print("\a");print("\a")
- print("\a");print("\a");print("\a");print("\a");print("\a")
- print("\a");print("\a");print("\a");print("\a");print("\a")
+ print("\n \n \n")
zomato()
time.sleep(5)
exit()
-
+
else:
COUNTER = 0
ALARM_ON = False
cv2.putText(frame, "Ratio: {:.2f}".format(ear), (300, 30),
cv2.FONT_HERSHEY_SIMPLEX, 0.7, (0, 0, 255), 2)
-
+
cv2.imshow("Frame", frame)
key = cv2.waitKey(1) & 0xFF
-
+
# breaks loop on q
if key == ord("q"):
break
-
+
cv2.destroyAllWindows()
vs.stop()
@@ -278,7 +276,7 @@ def maxspeed(coordinates, radius):
#######################
# Query for Open Maps #
- #######################
+ #######################
result = api.query("""
way(around:""" + radius + """,""" + lat + """,""" + lon + """) ["maxspeed"];
@@ -288,36 +286,37 @@ def maxspeed(coordinates, radius):
results_list = []
for way in result.ways:
- road = {}
- road["name"] = way.tags.get("name", "n/a")
- road["speed_limit"] = way.tags.get("maxspeed", "n/a")
- nodes = []
- for node in way.nodes:
- nodes.append((node.lat, node.lon))
- road["nodes"] = nodes
- results_list.append(road)
- return results_list
+ road = {}
+ road["name"] = way.tags.get("name", "n/a")
+ road["speed_limit"] = way.tags.get("maxspeed", "n/a")
+ nodes = []
+ for node in way.nodes:
+ nodes.append((node.lat, node.lon))
+ road["nodes"] = nodes
+ results_list.append(road)
+ return results_list
-############################################################################################################################
-# Gives data to the function and gets json in return. This json is then parsed. Then the double quotes are stripped off it #
-############################################################################################################################
+#########################################################################
+# Gives data to the function and gets json in return. #
+#This json is then parsed. Then the double quotes are stripped off it #
+#########################################################################
def speedlim():
speedLimit = sjson.dumps(maxspeed((str(glat), str(glng)), radius)[0]['speed_limit']).strip('\"')
- while(True):
- carSpeedDummy = open("./files/carSpeed.txt","r")
+ while True:
+ carSpeedDummy = open("./files/carSpeed.txt", "r")
carSpeed = carSpeedDummy.read()
#print(carSpeed)
#carSpeed = 29
- while(int(carSpeed) > int(speedLimit)):
- carSpeedDummy = open("./files/carSpeed.txt","r")
+ while int(carSpeed) > int(speedLimit):
+ carSpeedDummy = open("./files/carSpeed.txt", "r")
carSpeed = carSpeedDummy.read()
print("Over The Speed Limit")
time.sleep(5)
- while(int(carSpeed) <= int(speedLimit)):
- carSpeedDummy = open("./files/carSpeed.txt","r")
+ while int(carSpeed) <= int(speedLimit):
+ carSpeedDummy = open("./files/carSpeed.txt", "r")
carSpeed = carSpeedDummy.read()
print("Under the Speed Limit")
time.sleep(5)
@@ -327,16 +326,17 @@ def speedlim():
##################
def brakes():
- while(True):
- tweet()
+ while True:
+ tweetMe()
#####################################################
# Using Argument Parse to run one command at a time #
#####################################################
parser = argparse.ArgumentParser()
-FUNCTION_MAP = {'overspeed' : speedlim, 'sleep-detector' : sleepiness, 'sudden-braking' : brakes, 'drunk' : drunk }
+FUNCTION_MAP = {'overspeed' : speedlim, 'sleep-detector' : sleepiness,
+ 'sudden-braking' : brakes, 'drunk' : drunk}
parser.add_argument('function', choices=list(FUNCTION_MAP))
args = parser.parse_args()
-func = FUNCTION_MAP[args.function]
-func()
+FUNC = FUNCTION_MAP[args.function]
+FUNC()