From bb55abeb02b11dfcce917a1731ef9f4c3eb2a5c6 Mon Sep 17 00:00:00 2001 From: Gabriel Augendre Date: Sun, 12 Mar 2023 10:52:52 +0100 Subject: [PATCH] Add script to download and prepare image --- requirements.txt | 2 ++ src/images/.gitkeep | 0 src/images/plant.jpg | Bin 12098 -> 0 bytes tasks.py | 34 ++++++++++++++++++++++++++++++++++ 4 files changed, 36 insertions(+) create mode 100644 src/images/.gitkeep delete mode 100644 src/images/plant.jpg diff --git a/requirements.txt b/requirements.txt index 1c938c5..a9807b1 100644 --- a/requirements.txt +++ b/requirements.txt @@ -2,3 +2,5 @@ mpremote invoke>=2.0.0 black pre-commit +requests +Pillow diff --git a/src/images/.gitkeep b/src/images/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/src/images/plant.jpg b/src/images/plant.jpg deleted file mode 100644 index d3679b1cd852e5154d61dc4e9c64098c64931031..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12098 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 diff --git a/tasks.py b/tasks.py index 7750b32..09a778c 100644 --- a/tasks.py +++ b/tasks.py @@ -1,6 +1,7 @@ import time from pathlib import Path +from PIL import Image from invoke import task, Context BASE_DIR = Path(__file__).parent.resolve(strict=True) @@ -39,8 +40,41 @@ def list(c: Context): @task +def download_image(c: Context): + import requests + import sys + + sys.path.insert(0, str(SRC_DIR)) + from secrets import HA_ACCESS_TOKEN, HA_BASE_URL, HA_PLANT_ID + + url = HA_BASE_URL + "/states/" + HA_PLANT_ID + headers = {"Authorization": "Bearer " + HA_ACCESS_TOKEN} + res = requests.get(url, headers=headers) + data = res.json() + image_url = data["attributes"]["entity_picture"] + image_path = SRC_DIR / "images" / "plant.jpg" + c.run(f"curl -o {image_path} {image_url}", pty=True, echo=True) + + # resize image_path to 128x128 with Pillow + image = Image.open(image_path) + image = image.resize((128, 128)) + + # crop image to 104x128, centered + left = int((image.width - 104) / 2) + top = 0 + right = left + 104 + bottom = top + 128 + image = image.crop((left, top, right, bottom)) + + # convert image to grayscale + image = image.convert("L") + image.save(image_path) + + +@task(pre=[download_image]) def initial_setup(c: Context, board_id: str): """Install dependencies and copy project files to the board.""" + wipe(c, board_id) with c.cd(SRC_DIR): if MICROPYTHON_DEPENDENCIES: deps = " ".join(MICROPYTHON_DEPENDENCIES)