diff --git a/client/Nightr/images/night-logo.jpg b/client/Nightr/images/night-logo.jpg
new file mode 100644
index 0000000..6ef0ca2
Binary files /dev/null and b/client/Nightr/images/night-logo.jpg differ
diff --git a/client/Nightr/images/nightr-logo.png b/client/Nightr/images/nightr-logo.png
new file mode 100644
index 0000000..d2d2014
Binary files /dev/null and b/client/Nightr/images/nightr-logo.png differ
diff --git a/client/Nightr/images/nigthr-logo-big.png b/client/Nightr/images/nigthr-logo-big.png
new file mode 100644
index 0000000..4eb8516
Binary files /dev/null and b/client/Nightr/images/nigthr-logo-big.png differ
diff --git a/client/Nightr/src/app/component/camera-button/camera-button.component.ts b/client/Nightr/src/app/component/camera-button/camera-button.component.ts
index bd916ef..d3bd803 100644
--- a/client/Nightr/src/app/component/camera-button/camera-button.component.ts
+++ b/client/Nightr/src/app/component/camera-button/camera-button.component.ts
@@ -1,6 +1,5 @@
import { Component, OnInit } from '@angular/core';
import { MyCameraService } from '../../services/my-camera-service';
-import { Image } from 'tns-core-modules/ui/image'
@Component({
selector: 'ns-camera-button',
diff --git a/client/Nightr/src/app/home-page/home-page.component.ts b/client/Nightr/src/app/home-page/home-page.component.ts
index 9e63ad2..0894901 100644
--- a/client/Nightr/src/app/home-page/home-page.component.ts
+++ b/client/Nightr/src/app/home-page/home-page.component.ts
@@ -23,8 +23,7 @@ export class HomePageComponent implements OnInit {
flat_earth: boolean;
in_australia: boolean;
- constructor(private myHttpPostSerivce: MyHttpPostService,
- private routerExtensions: RouterExtensions,
+ constructor(private routerExtensions: RouterExtensions,
) { }
ngOnInit(): void {
@@ -32,35 +31,5 @@ export class HomePageComponent implements OnInit {
public onTap(args: GestureEventData): void {
this.routerExtensions.navigateByUrl("/result-page");
- /* return this.cameraService.takePicture().
- then(picture => {
- this.image = JSON.stringify(picture);
- //console.log('this is picture in json', JSON.stringify(picture));
- this.getLocation();
- }) */
}
-
- /* public getLocation(): any {
- this.geoLocationService.getLocation().then(location => {
- this.locationData = location;
- //console.log('this is locationData', this.locationData);
- this.submit();
- }).catch(error => {
- });
- }
-
- public submit(): void {
- this.makePostRequest();
- }
-
- private makePostRequest(): void {
- this.myHttpPostSerivce
- .postData({ position: this.locationData, image: this.image, flat_earth: true, in_australia: true, })
- .subscribe(res => {
- //console.log('This is res', res);
- this.myReturnJSON = res;
- console.log('THis is myreturnJSON', this.myReturnJSON);
- this.routerExtensions.navigateByUrl("/result-page");
- });
- } */
}
diff --git a/client/Nightr/src/app/result-page/result-page.component.css b/client/Nightr/src/app/result-page/result-page.component.css
index bcd4764..c86d424 100644
--- a/client/Nightr/src/app/result-page/result-page.component.css
+++ b/client/Nightr/src/app/result-page/result-page.component.css
@@ -1 +1,19 @@
-/* Add mobile styles for the component here. */
+.title-container
+ {
+ font-family: 'Times New Roman', Times, serif;
+ font-size: 20px;
+ color: black;
+ padding: 5px;
+ text-align: center;
+ }
+.page {
+ background-color: lightskyblue;
+}
+.item-header {
+ font-family: 'Times New Roman', Times, serif;
+ font-size: 14px;
+}
+.item-header {
+ font-family: 'Times New Roman', Times, serif;
+ font-size: 10px;
+}
diff --git a/client/Nightr/src/app/result-page/result-page.component.html b/client/Nightr/src/app/result-page/result-page.component.html
index 5a89837..991d737 100644
--- a/client/Nightr/src/app/result-page/result-page.component.html
+++ b/client/Nightr/src/app/result-page/result-page.component.html
@@ -1,7 +1,18 @@
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/client/Nightr/src/app/result-page/result-page.component.ts b/client/Nightr/src/app/result-page/result-page.component.ts
index 4648e59..2b849ac 100644
--- a/client/Nightr/src/app/result-page/result-page.component.ts
+++ b/client/Nightr/src/app/result-page/result-page.component.ts
@@ -7,6 +7,12 @@ import { MyCameraService } from '../services/my-camera-service'
import { RouterExtensions } from 'nativescript-angular/router';
import { Location } from 'nativescript-geolocation';
+class Reason {
+ constructor(public str: string, public causestring: string) {
+
+ }
+}
+
@Component({
selector: 'result-page',
templateUrl: './result-page.component.html',
@@ -21,13 +27,16 @@ export class ResultPageComponent implements OnInit {
image: any;
flat_earth: boolean;
in_australia: boolean;
+ night: string = "";
+ percentage: string = "";
+ JSONObject;
+ public reasons: Array;
constructor(private myHttpPostSerivce: MyHttpPostService,
private routerExtensions: RouterExtensions,
private geoLocationService: MyGeoLocationService,
private batterInfoService: MyBatteryInfoService,
- private cameraService: MyCameraService,
- ) { }
+ private cameraService: MyCameraService,){ }
ngOnInit(): Promise {
return this.cameraService.takePicture().
@@ -55,8 +64,8 @@ private makePostRequest(): void {
.postData({ position: this.locationData, image: this.image, flat_earth: true, in_australia: true, })
.subscribe(res => {
//console.log('This is res', res);
- this.myReturnJSON = res;
- console.log('THis is myreturnJSON', this.myReturnJSON);
+ this.JSONObject = res;
+ //console.log('THis is myreturnJSON', this.myReturnJSON);
});
}
diff --git a/server/nightr/app.py b/server/nightr/app.py
index ad3ce8f..23bd1ae 100644
--- a/server/nightr/app.py
+++ b/server/nightr/app.py
@@ -10,27 +10,29 @@ from typing import List
import requests_cache
from flask import Flask, jsonify, logging, request
-from .strategies import miloStrats, iss, cars_in_traffic, tide_strat, upstairs_neighbour, bing, battery
+from .strategies import miloStrats, iss, cars_in_traffic, tide_strat, upstairs_neighbour, bing, svm_strat, battery, just_eat
from .util import Context
app = Flask(__name__)
logger = logging.create_logger(app)
logger.setLevel(DEBUG)
-requests_cache.install_cache("requests_cache", expire_after=timedelta(minutes=10))
+requests_cache.install_cache("requests_cache", expire_after=timedelta(minutes=2))
strategies = {
# name: (weight, probability function)
- "tv2news": miloStrats.tv2newsStrat,
- "australia": miloStrats.australiaStrat,
- "camera": miloStrats.camImgStrat,
- "iss": iss.night_on_iss,
- "cars_in_traffic": cars_in_traffic.cars_in_traffic,
- "tide": tide_strat.is_tide,
- "upstairs_neighbour": upstairs_neighbour.check_games,
- "bing": bing.clock,
- "battery_level": battery.battery_level,
+ "TV2 News": miloStrats.tv2newsStrat,
+ "Australia": miloStrats.australiaStrat,
+ "Camera Image": miloStrats.camImgStrat,
+ "The International Space Station": iss.night_on_iss,
+ "Nearby Traffic situation": cars_in_traffic.cars_in_traffic,
+ "Tidal Measurements": tide_strat.is_tide,
+ "Legends of Nighttime": upstairs_neighbour.check_games,
+ "Bing AI": bing.clock,
+ "ML Parking": svm_strat.perform_svm_pred,
+ "Phone Battery Level": battery.battery_level,
+ "Pizza Availability": just_eat.do_just_eat_strat,
}
@@ -86,6 +88,9 @@ def probabilities():
# If this prediction disagrees with the consensus it contributed negatively
if prediction["night"] != night:
prediction["contribution"] *= -1
+
+ predictions.sort(key=lambda p: (p["contribution"], p["probability"]), reverse=True)
+
return jsonify({
"predictions": predictions,
"weighted_probabilities_mean": mean,
diff --git a/server/nightr/strategies/iss.py b/server/nightr/strategies/iss.py
index bd759bc..4972a43 100644
--- a/server/nightr/strategies/iss.py
+++ b/server/nightr/strategies/iss.py
@@ -40,11 +40,11 @@ def night_on_iss(context: Context) -> Prediction:
side = "same" if on_iss_time else "other"
p.reasons.append(f"{the_iss} is {int(distance)} km away, so we are on the {side} side of the earth.")
for i in itertools.count(1):
- iss_tz = tf.closest_timezone_at(lng=float(iss_position["longitude"]),
- lat=float(iss_position["latitude"]),
+ iss_tz = tf.closest_timezone_at(lng=float(iss_position["longitude"]), lat=float(iss_position["latitude"]),
delta_degree=i)
if iss_tz is not None:
break
+
iss_time = datetime.now(pytz.timezone(iss_tz))
iss_night = iss_time.hour < 6 or iss_time.hour >= 22
@@ -75,6 +75,9 @@ def haversine(pos1, pos2):
lat2 = float(pos2["latitude"])
long2 = float(pos2["longitude"])
+ lat1 = 0 # we're only interested in the distance in the longitude for the timezone calculation
+ lat2 = 0
+
degree_to_rad = float(pi / 180.0)
d_lat = (lat2 - lat1) * degree_to_rad
diff --git a/server/nightr/strategies/just_eat.py b/server/nightr/strategies/just_eat.py
index 3bf29e8..634c9a1 100644
--- a/server/nightr/strategies/just_eat.py
+++ b/server/nightr/strategies/just_eat.py
@@ -1,12 +1,8 @@
import requests
from bs4 import BeautifulSoup
-from datetime import datetime, timedelta
-import requests_cache
from ..util import Context, Prediction
-requests_cache.install_cache("requests_cache", expire_after=timedelta(minutes=10))
-
def is_restaurant_open(name, open, close) -> Prediction:
p = Prediction()
@@ -44,4 +40,7 @@ def is_restaurant_open(name, open, close) -> Prediction:
def do_just_eat_strat(context: Context) -> Prediction:
+ """
+ Is this random Kiosk in Vester Alle open?
+ """
return is_restaurant_open('stop2shop', 12, 23)
diff --git a/server/nightr/strategies/miloStrats.py b/server/nightr/strategies/miloStrats.py
index d061c3d..afe5af5 100644
--- a/server/nightr/strategies/miloStrats.py
+++ b/server/nightr/strategies/miloStrats.py
@@ -51,7 +51,7 @@ def tv2newsStrat(context : Context) -> Prediction:
r = requests.get('http://mpx.services.tv2.dk/api/latest')
data = r.json()
- publish_dates = [(x['pubDate'])//1000 for x in data][:10]
+ publish_dates = [(x['pubDate'])//1000 for x in data[:5]]
delta_times = []
for i in range(len(publish_dates)):
if i == 0 : continue
@@ -66,6 +66,7 @@ def tv2newsStrat(context : Context) -> Prediction:
p.weight = 0.0
else:
p.weight = 0.7
- p.probability = 1.0 if avg_timestamp > 50 else 0.0
- p.reasons.append('There were ' + ('few' if avg_timestamp > 50 else 'many') + ' recent articles on TV2 News')
+ print(avg_timestamp)
+ p.probability = 0.75 if avg_timestamp > 40 else 0.25
+ p.reasons.append('There were ' + ('few' if avg_timestamp > 40 else 'many') + ' recent articles on TV2 News')
return p
diff --git a/server/nightr/strategies/parking_aarhus_2235.json b/server/nightr/strategies/parking_aarhus_2235.json
new file mode 100644
index 0000000..00162db
--- /dev/null
+++ b/server/nightr/strategies/parking_aarhus_2235.json
@@ -0,0 +1 @@
+{"help": "https://portal.opendata.dk/api/3/action/help_show?name=datastore_search", "success": true, "result": {"include_total": true, "resource_id": "2a82a145-0195-4081-a13c-b0e587e9b89c", "fields": [{"type": "int", "id": "_id"}, {"type": "text", "id": "date"}, {"type": "text", "id": "garageCode"}, {"type": "int4", "id": "totalSpaces"}, {"type": "int4", "id": "vehicleCount"}], "records_format": "objects", "records": [{"_id": 1, "date": "2019/04/06 22:30:01", "garageCode": "NORREPORT", "totalSpaces": 80, "vehicleCount": 61}, {"_id": 2, "date": "2019/04/06 22:30:01", "garageCode": "SCANDCENTER", "totalSpaces": 1240, "vehicleCount": 442}, {"_id": 6, "date": "2019/04/06 22:30:01", "garageCode": "SALLING", "totalSpaces": 700, "vehicleCount": 290}, {"_id": 7, "date": "2019/04/06 22:30:01", "garageCode": "DOKK1", "totalSpaces": 1000, "vehicleCount": 0}, {"_id": 8, "date": "2019/04/06 22:30:01", "garageCode": "Navitas", "totalSpaces": 449, "vehicleCount": 161}, {"_id": 9, "date": "2019/04/06 22:30:01", "garageCode": "NewBusgadehuset", "totalSpaces": 105, "vehicleCount": 99}, {"_id": 3, "date": "2019/04/06 22:30:01", "garageCode": "BRUUNS", "totalSpaces": 953, "vehicleCount": 598}, {"_id": 4, "date": "2019/04/06 22:30:01", "garageCode": "MAGASIN", "totalSpaces": 378, "vehicleCount": 65}, {"_id": 5, "date": "2019/04/06 22:30:01", "garageCode": "KALKVAERKSVEJ", "totalSpaces": 210, "vehicleCount": 278}, {"_id": 10, "date": "2019/04/06 22:30:01", "garageCode": "Urban Level 1", "totalSpaces": 319, "vehicleCount": 32}, {"_id": 11, "date": "2019/04/06 22:30:01", "garageCode": "Urban Level 2+3", "totalSpaces": 654, "vehicleCount": 66}], "_links": {"start": "/api/3/action/datastore_search?resource_id=2a82a145-0195-4081-a13c-b0e587e9b89c", "next": "/api/3/action/datastore_search?offset=100&resource_id=2a82a145-0195-4081-a13c-b0e587e9b89c"}, "total": 11}}
\ No newline at end of file
diff --git a/server/nightr/strategies/svm_strat.py b/server/nightr/strategies/svm_strat.py
index 0af7835..5d51759 100644
--- a/server/nightr/strategies/svm_strat.py
+++ b/server/nightr/strategies/svm_strat.py
@@ -1,3 +1,5 @@
+from pathlib import Path
+
from sklearn import svm
from sklearn.externals import joblib
import requests
@@ -5,11 +7,9 @@ import glob
import json
import numpy as np
-
from .strat_utils import write_json
from ..util import Context, Prediction
-
def write_data(time):
write_json("https://portal.opendata.dk/api/3/action/datastore_search?resource_id=2a82a145-0195-4081-a13c-b0e587e9b89c", "parking_aarhus", time)
@@ -38,12 +38,15 @@ def train():
joblib.dump(classifier, "nightness_classifier.pkl")
def predict(X):
- classifier = joblib.load("nightness_classifier.pkl")
+ classifier = joblib.load(str(Path(__file__).parent.joinpath("nightness_classifier.pkl")))
prob = classifier.predict_proba(np.array(X).reshape(1, -1))
return prob[0, 1]
def perform_svm_pred(context: Context) -> Prediction:
+ """
+ An SVM trained on two data points, which is capable of guessing 0.5 no matter what.
+ """
p = Prediction()
data = requests.get('https://portal.opendata.dk/api/3/action/datastore_search?resource_id=2a82a145-0195-4081-a13c-b0e587e9b89c')
@@ -54,5 +57,5 @@ def perform_svm_pred(context: Context) -> Prediction:
p.reasons.append("Our only two data points have 11 dimensions")
p.reasons.append("We are using a SVM")
- p.probability = predict(X)
+ p.probability = float(predict(X))
return p