From da90523cd71ca3fef4900b157198e30df6ef7f94 Mon Sep 17 00:00:00 2001 From: Navan Chauhan Date: Fri, 24 May 2019 23:19:44 +0530 Subject: [PATCH] Update main.py --- main.py | 167 +++++++++++++++++++++++++++----------------------------- 1 file changed, 80 insertions(+), 87 deletions(-) diff --git a/main.py b/main.py index 76b0721..2d89586 100755 --- a/main.py +++ b/main.py @@ -1,24 +1,21 @@ +"""AutoSafe +Modular Road-Safety Toolkit -import overpy -import sys -import simplejson as sjson -import json +""" +#pylint: disable=C0103,C0111 +import argparse import time -from threading import Thread +import overpy +import simplejson as sjson 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,11 +26,7 @@ import requests # Defining Variables # ###################### -radius = str(100) # Radius for maxspeed function. taken as a string because gets concatenated in the function -consumer_key = "" -consumer_secret = "" -access_token = "" -access_token_secret = "" +radius = str(100) # Radius for maxspeed function. taken as a string because gets concatenated ################ # Dummy Values # @@ -85,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" : consumer_key, - "consumer_secret" : consumer_secret, - "access_token" : access_token, - "access_token_secret" : access_token_secret - } +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', @@ -125,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 @@ -137,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() @@ -153,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') @@ -179,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 @@ -189,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 + + ######################## @@ -199,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) @@ -213,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) @@ -233,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() @@ -282,7 +276,7 @@ def maxspeed(coordinates, radius): ####################### # Query for Open Maps # - ####################### + ####################### result = api.query(""" way(around:""" + radius + """,""" + lat + """,""" + lon + """) ["maxspeed"]; @@ -292,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) @@ -331,19 +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 } -parser.add_argument('function', choices=FUNCTION_MAP.keys()) +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()