diff --git a/server/nightr/app.py b/server/nightr/app.py index f1f534e..3eecf5e 100644 --- a/server/nightr/app.py +++ b/server/nightr/app.py @@ -34,18 +34,24 @@ strategies = { @app.route("/", methods=["GET", "POST"]) def probabilities(): - phone_data = request.get_json(force=True) - context = Context(**phone_data) - logger.debug("phone_data:\n%s", json.dumps(phone_data, indent=2)) - logger.debug("Context: %s", context) + if request.method == "GET": + logger.warning("GET request: using default context parameters") + context = Context() + else: + phone_data = request.get_json(force=True) + logger.debug("phone_data:\n%s", json.dumps(phone_data, indent=2)) + context = Context(**phone_data["data"]) + + #logger.debug("Context: %s", context) predictions: List[dict] = [] for name, strategy in strategies.items(): try: + logger.debug("Executing %s..", name) start = timeit.default_timer() prediction = strategy(context) stop = timeit.default_timer() - logger.debug("Execution time for %s: %ss", name, stop - start) + logger.debug("Execution time for %s: %ss", name, round(stop - start, 3 )) except Exception as e: logger.warning("Strategy '%s' failed:", name) logger.exception(e) diff --git a/server/nightr/gray.png b/server/nightr/gray.png new file mode 100644 index 0000000..0a0f09f Binary files /dev/null and b/server/nightr/gray.png differ diff --git a/server/nightr/strategies/miloStrats.py b/server/nightr/strategies/miloStrats.py index 593c981..3fc4c43 100644 --- a/server/nightr/strategies/miloStrats.py +++ b/server/nightr/strategies/miloStrats.py @@ -1,8 +1,6 @@ from datetime import datetime -from pathlib import Path -import requests -import cv2 +import requests from pytz import timezone from ..util import Context, Prediction @@ -12,12 +10,11 @@ def camImgStrat(context : Context) -> Prediction: """ The contents of the camera image """ - img = cv2.imread(str(Path(__file__).parent.joinpath("night.jpg")), 0) + img = context.image average = img.mean(axis=0).mean(axis=0) p = Prediction() p.weight = 0.7 - - if average < 100: + if average < 100: p.probability = 1.0 p.reasons.append('Image was dark') else: diff --git a/server/nightr/util.py b/server/nightr/util.py index 5b2bc3c..ce7d143 100644 --- a/server/nightr/util.py +++ b/server/nightr/util.py @@ -1,16 +1,30 @@ +import base64 from dataclasses import dataclass, field +from pathlib import Path from typing import List, Dict +import cv2 +import numpy as np + @dataclass class Context: battery: float = 1.0 position: Dict[str, float] = field(default_factory=lambda: {'latitude': 53.0, 'longitude': 9.0}) + image: np.ndarray = None # App settings in_australia: bool = False flat_earth: bool = False + def __post_init__(self): + if self.image is None: # no image given + self.image = cv2.imread(str(Path(__file__).parent.joinpath("gray.png"))) + else: + img_original = base64.b64decode(self.image) + img_as_np = np.frombuffer(img_original, dtype=np.uint8) + self.image = cv2.imdecode(img_as_np, flags=1) + @dataclass class Prediction: