From 1dc6db2fecd7724fb0de377f5019b74b1f1751e3 Mon Sep 17 00:00:00 2001 From: previ Date: Sun, 17 Mar 2024 22:28:57 +0100 Subject: [PATCH 01/65] opencv 4.9 --- coderbot/cv/image.py | 2 +- requirements.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/coderbot/cv/image.py b/coderbot/cv/image.py index 3c602379..125383c3 100644 --- a/coderbot/cv/image.py +++ b/coderbot/cv/image.py @@ -36,7 +36,7 @@ class Image(): r_from = np.float32([[0, 0], [640, 0], [640, 480], [0, 480]]) r_dest = np.float32([[0, -120], [640, -120], [380, 480], [260, 480]]) - _aruco_dict = cv2.aruco.Dictionary_get(cv2.aruco.DICT_ARUCO_ORIGINAL) + _aruco_dict = cv2.aruco.getPredefinedDictionary(cv2.aruco.DICT_ARUCO_ORIGINAL) _aruco_parameters = cv2.aruco.DetectorParameters_create() _face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_frontalface_default.xml') diff --git a/requirements.txt b/requirements.txt index 139d980c..47877820 100644 --- a/requirements.txt +++ b/requirements.txt @@ -24,7 +24,7 @@ grpcio==1.62.1 numpy==1.26.4 Pillow==10.2.0 protobuf==4.25.2 -opencv-contrib-python==4.5.5.62 +opencv-contrib-python==4.9.0.80 tflite-runtime==2.11.0 pytesseract==0.3.10 picamera==1.13 From 55dcc69d6c35725fa693236961e2fbeda785d55c Mon Sep 17 00:00:00 2001 From: previ Date: Sun, 17 Mar 2024 22:37:26 +0100 Subject: [PATCH 02/65] tflite 2.14 --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index 47877820..047f1a7f 100644 --- a/requirements.txt +++ b/requirements.txt @@ -25,7 +25,7 @@ numpy==1.26.4 Pillow==10.2.0 protobuf==4.25.2 opencv-contrib-python==4.9.0.80 -tflite-runtime==2.11.0 +tflite-runtime==2.14.0 pytesseract==0.3.10 picamera==1.13 pyzbar==0.1.9 From 757524f5e918068c905582f3bb51634c35c26f50 Mon Sep 17 00:00:00 2001 From: previ Date: Sun, 17 Mar 2024 22:39:00 +0100 Subject: [PATCH 03/65] stub --- docker/stub/requirements.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docker/stub/requirements.txt b/docker/stub/requirements.txt index 70ff5c16..d119c6eb 100644 --- a/docker/stub/requirements.txt +++ b/docker/stub/requirements.txt @@ -20,7 +20,7 @@ grpcio==1.62.1 numpy==1.26.4 Pillow==10.2.0 protobuf==4.25.2 -opencv-contrib-python==4.5.5.62 -tflite-runtime==2.11.0 +opencv-contrib-python==4.9.0.80 +tflite-runtime==2.14.0 pytesseract==0.3.10 pyzbar==0.1.9 From 169119e76398439d75fe6b78c307cababb54300b Mon Sep 17 00:00:00 2001 From: previ Date: Sun, 17 Mar 2024 22:42:26 +0100 Subject: [PATCH 04/65] upgrade pip --- docker/Dockerfile | 3 ++- docker/stub/Dockerfile | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/docker/Dockerfile b/docker/Dockerfile index 40a5fafa..ca2a9c85 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -46,7 +46,8 @@ RUN install_packages \ ENV READTHEDOCS=True ADD requirements.txt /tmp/. -RUN pip install --no-cache-dir -r /tmp/requirements.txt +RUN pip install --upgrade pip && \ + pip install --no-cache-dir -r /tmp/requirements.txt RUN mkdir -p /coderbot && \ mkdir -p /coderbot/data && \ diff --git a/docker/stub/Dockerfile b/docker/stub/Dockerfile index 66281565..2d841524 100644 --- a/docker/stub/Dockerfile +++ b/docker/stub/Dockerfile @@ -39,7 +39,8 @@ RUN apt-get update -y && apt-get install -y \ tesseract-ocr-deu ADD docker/stub/requirements.txt /tmp/. -RUN pip install --no-cache-dir -r /tmp/requirements.txt +RUN pip install --upgrade pip && \ + pip install --no-cache-dir -r /tmp/requirements.txt RUN mkdir -p /coderbot && \ mkdir -p /coderbot/data && \ From b6f78a7a617bd0e76b5fe5bb02a61c34bcf53287 Mon Sep 17 00:00:00 2001 From: previ Date: Sun, 17 Mar 2024 22:51:25 +0100 Subject: [PATCH 05/65] DetectorParameters --- coderbot/cv/image.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/coderbot/cv/image.py b/coderbot/cv/image.py index 125383c3..dc8688c7 100644 --- a/coderbot/cv/image.py +++ b/coderbot/cv/image.py @@ -36,8 +36,9 @@ class Image(): r_from = np.float32([[0, 0], [640, 0], [640, 480], [0, 480]]) r_dest = np.float32([[0, -120], [640, -120], [380, 480], [260, 480]]) - _aruco_dict = cv2.aruco.getPredefinedDictionary(cv2.aruco.DICT_ARUCO_ORIGINAL) - _aruco_parameters = cv2.aruco.DetectorParameters_create() + _aruco_detector = cv2.aruco.DetectorParameters( + cv2.aruco.getPredefinedDictionary(cv2.aruco.DICT_ARUCO_ORIGINAL), + cv2.aruco.DetectorParameters()) _face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_frontalface_default.xml') @@ -254,7 +255,7 @@ def find_qr_code(self): def find_ar_code(self): gray = cv2.cvtColor(self._data, cv2.COLOR_BGR2GRAY) - corners, ids, rejectedImgPoints = cv2.aruco.detectMarkers(gray, self._aruco_dict, parameters=self._aruco_parameters) + corners, ids, rejectedImgPoints = self._aruco_detector.detectMarkers(gray) codes = [] positions = [] if ids is not None: From e8d937c97631a36b06a47b24203698a52e0cf00c Mon Sep 17 00:00:00 2001 From: previ Date: Sun, 17 Mar 2024 22:56:10 +0100 Subject: [PATCH 06/65] ArucoDetector --- coderbot/cv/image.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/coderbot/cv/image.py b/coderbot/cv/image.py index dc8688c7..5e095cb0 100644 --- a/coderbot/cv/image.py +++ b/coderbot/cv/image.py @@ -36,7 +36,7 @@ class Image(): r_from = np.float32([[0, 0], [640, 0], [640, 480], [0, 480]]) r_dest = np.float32([[0, -120], [640, -120], [380, 480], [260, 480]]) - _aruco_detector = cv2.aruco.DetectorParameters( + _aruco_detector = cv2.aruco.ArucoDetector( cv2.aruco.getPredefinedDictionary(cv2.aruco.DICT_ARUCO_ORIGINAL), cv2.aruco.DetectorParameters()) From db73a52ebc2784945c74773790d3b65e52cf6d69 Mon Sep 17 00:00:00 2001 From: previ Date: Sun, 17 Mar 2024 23:11:04 +0100 Subject: [PATCH 07/65] tflite-runtime --- docker/stub/requirements.txt | 2 +- requirements.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docker/stub/requirements.txt b/docker/stub/requirements.txt index d119c6eb..419b1eaf 100644 --- a/docker/stub/requirements.txt +++ b/docker/stub/requirements.txt @@ -21,6 +21,6 @@ numpy==1.26.4 Pillow==10.2.0 protobuf==4.25.2 opencv-contrib-python==4.9.0.80 -tflite-runtime==2.14.0 +tflite-runtime pytesseract==0.3.10 pyzbar==0.1.9 diff --git a/requirements.txt b/requirements.txt index 047f1a7f..d5798a6d 100644 --- a/requirements.txt +++ b/requirements.txt @@ -25,7 +25,7 @@ numpy==1.26.4 Pillow==10.2.0 protobuf==4.25.2 opencv-contrib-python==4.9.0.80 -tflite-runtime==2.14.0 +tflite-runtime pytesseract==0.3.10 picamera==1.13 pyzbar==0.1.9 From 677a354af0a9eabce8dca900c3ae14c342681b36 Mon Sep 17 00:00:00 2001 From: previ Date: Sun, 17 Mar 2024 23:27:15 +0100 Subject: [PATCH 08/65] opencv 4.9 --- docker/Dockerfile | 1 + docker/stub/Dockerfile | 1 + 2 files changed, 2 insertions(+) diff --git a/docker/Dockerfile b/docker/Dockerfile index ca2a9c85..3af53917 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -4,6 +4,7 @@ ENV QEMU_CPU=max ENV DEBIAN_FRONTEND=noninteractive RUN install_packages \ + patch \ libraspberrypi0 \ procps \ sudo \ diff --git a/docker/stub/Dockerfile b/docker/stub/Dockerfile index 2d841524..b262df75 100644 --- a/docker/stub/Dockerfile +++ b/docker/stub/Dockerfile @@ -3,6 +3,7 @@ FROM debian:bullseye-slim ENV DEBIAN_FRONTEND=noninteractive RUN apt-get update -y && apt-get install -y \ + patch \ procps \ sudo \ wget \ From a8f5339fc3fbb252ce544797e5c66a7db21965cb Mon Sep 17 00:00:00 2001 From: previ Date: Sun, 17 Mar 2024 23:46:40 +0100 Subject: [PATCH 09/65] opencv 4.9 --- docker/Dockerfile | 1 + 1 file changed, 1 insertion(+) diff --git a/docker/Dockerfile b/docker/Dockerfile index 3af53917..fa754e14 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -5,6 +5,7 @@ ENV DEBIAN_FRONTEND=noninteractive RUN install_packages \ patch \ + gcc \ libraspberrypi0 \ procps \ sudo \ From 353de87cae49e468895558f3a16a33e8e1579157 Mon Sep 17 00:00:00 2001 From: Roberto Date: Mon, 18 Mar 2024 11:33:40 +0100 Subject: [PATCH 10/65] build-essential --- docker/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker/Dockerfile b/docker/Dockerfile index fa754e14..e2317d1d 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -5,7 +5,7 @@ ENV DEBIAN_FRONTEND=noninteractive RUN install_packages \ patch \ - gcc \ + build-essential \ libraspberrypi0 \ procps \ sudo \ From dc7055f21dd78d7433d668b40484cf5ffcdd6a4c Mon Sep 17 00:00:00 2001 From: Roberto Date: Mon, 18 Mar 2024 16:53:32 +0100 Subject: [PATCH 11/65] python3-dev --- docker/Dockerfile | 1 + 1 file changed, 1 insertion(+) diff --git a/docker/Dockerfile b/docker/Dockerfile index e2317d1d..fd36371f 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -16,6 +16,7 @@ RUN install_packages \ portaudio19-dev \ python3 \ python3-pip \ + python3-dev \ libopenjp2-7-dev \ libtiff5 \ libatlas-base-dev \ From 03eccc32412ad5bcfb84269a611e8d490da78f92 Mon Sep 17 00:00:00 2001 From: previ Date: Sun, 24 Mar 2024 11:33:08 +0100 Subject: [PATCH 12/65] wip --- docker/Dockerfile | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/docker/Dockerfile b/docker/Dockerfile index fd36371f..7e7764ed 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -1,10 +1,9 @@ -FROM coderbot/rpi-debian:bullseye-20240227 +FROM balenalib/raspberrypi3-64:bullseye-20240304 ENV QEMU_CPU=max ENV DEBIAN_FRONTEND=noninteractive RUN install_packages \ - patch \ build-essential \ libraspberrypi0 \ procps \ @@ -26,7 +25,6 @@ RUN install_packages \ RUN install_packages \ libharfbuzz-bin \ libwebp6 \ - libjasper1 \ libilmbase25 \ libgstreamer1.0-0 \ libavcodec-extra58 \ From 95624a3d232c11b9ffb799f290e3bf8784d3f054 Mon Sep 17 00:00:00 2001 From: previ Date: Sun, 24 Mar 2024 11:44:54 +0100 Subject: [PATCH 13/65] add matrix build --- .github/workflows/build_backend.yml | 11 ++++- docker/Dockerfile | 4 +- docker/Dockerfile arm64 | 73 +++++++++++++++++++++++++++++ 3 files changed, 85 insertions(+), 3 deletions(-) create mode 100644 docker/Dockerfile arm64 diff --git a/.github/workflows/build_backend.yml b/.github/workflows/build_backend.yml index 0331b4c8..8e50d7b1 100644 --- a/.github/workflows/build_backend.yml +++ b/.github/workflows/build_backend.yml @@ -39,6 +39,13 @@ jobs: release-backend: needs: [test] runs-on: ubuntu-latest + strategy: + matrix: + architecture: + - arch: linux/arm/v7 + dockerfile: Dockerfile + - arch: linux/arm/v8 + dockerfile: Dockerfile.arm64 steps: - name: Docker meta id: meta @@ -75,10 +82,10 @@ jobs: with: push: true build-args: CODERBOT_VERSION=${{github.ref_name}}-${{github.sha}} - platforms: linux/arm/v7 + platforms: ${{ matrix.architecture.arch }} tags: ${{ steps.meta.outputs.tags }} context: . - file: docker/Dockerfile + file: docker/${{ matrix.architecture.dockerfile }} cache-from: type=registry,ref=ghcr.io/coderbotorg/backend:latest cache-to: type=inline diff --git a/docker/Dockerfile b/docker/Dockerfile index 7e7764ed..fd36371f 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -1,9 +1,10 @@ -FROM balenalib/raspberrypi3-64:bullseye-20240304 +FROM coderbot/rpi-debian:bullseye-20240227 ENV QEMU_CPU=max ENV DEBIAN_FRONTEND=noninteractive RUN install_packages \ + patch \ build-essential \ libraspberrypi0 \ procps \ @@ -25,6 +26,7 @@ RUN install_packages \ RUN install_packages \ libharfbuzz-bin \ libwebp6 \ + libjasper1 \ libilmbase25 \ libgstreamer1.0-0 \ libavcodec-extra58 \ diff --git a/docker/Dockerfile arm64 b/docker/Dockerfile arm64 new file mode 100644 index 00000000..7e7764ed --- /dev/null +++ b/docker/Dockerfile arm64 @@ -0,0 +1,73 @@ +FROM balenalib/raspberrypi3-64:bullseye-20240304 + +ENV QEMU_CPU=max +ENV DEBIAN_FRONTEND=noninteractive + +RUN install_packages \ + build-essential \ + libraspberrypi0 \ + procps \ + sudo \ + wget \ + unzip \ + xz-utils \ + ffmpeg \ + portaudio19-dev \ + python3 \ + python3-pip \ + python3-dev \ + libopenjp2-7-dev \ + libtiff5 \ + libatlas-base-dev \ + libhdf5-dev \ + alsa-utils \ + espeak +RUN install_packages \ + libharfbuzz-bin \ + libwebp6 \ + libilmbase25 \ + libgstreamer1.0-0 \ + libavcodec-extra58 \ + libavformat58 +RUN install_packages \ + libopencv-dev \ + zbar-tools \ + libzbar0 \ + sox \ + libsox-fmt-all \ + libopenblas-dev +RUN install_packages \ + avrdude \ + tesseract-ocr \ + tesseract-ocr-eng \ + tesseract-ocr-ita \ + tesseract-ocr-fra \ + tesseract-ocr-spa \ + tesseract-ocr-deu + +ENV READTHEDOCS=True +ADD requirements.txt /tmp/. +RUN pip install --upgrade pip && \ + pip install --no-cache-dir -r /tmp/requirements.txt + +RUN mkdir -p /coderbot && \ +mkdir -p /coderbot/data && \ +mkdir -p /coderbot/logs && \ +mkdir -p /coderbot/cnn_modules && \ +mkdir -p /coderbot/coderbot && \ +mkdir -p /coderbot/defaults && \ +mkdir -p /coderbot/sounds + +ADD coderbot /coderbot/coderbot/. +ADD defaults /coderbot/defaults/. +ADD sounds /coderbot/sounds/. + +ADD docker/scripts/*.sh /tmp/. +RUN /tmp/install_generic_cnn_models.sh +RUN /tmp/install_lib_firmware.sh +ADD docker/start.sh /coderbot/. + +ARG CODERBOT_VERSION +ENV CODERBOT_VERSION=${CODERBOT_VERSION} + +ENTRYPOINT /coderbot/start.sh From 54a588985aa1314c5f7de9bed1b7bfbbe98aa04c Mon Sep 17 00:00:00 2001 From: previ Date: Sun, 24 Mar 2024 11:47:59 +0100 Subject: [PATCH 14/65] arm64 --- docker/{Dockerfile arm64 => Dockerfile.arm64} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename docker/{Dockerfile arm64 => Dockerfile.arm64} (100%) diff --git a/docker/Dockerfile arm64 b/docker/Dockerfile.arm64 similarity index 100% rename from docker/Dockerfile arm64 rename to docker/Dockerfile.arm64 From 9062ef44beb719dad935d9b44bac87b41c7e6b49 Mon Sep 17 00:00:00 2001 From: previ Date: Sun, 24 Mar 2024 19:27:11 +0100 Subject: [PATCH 15/65] suffix --- .github/workflows/build_backend.yml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/build_backend.yml b/.github/workflows/build_backend.yml index 8e50d7b1..cdc4d526 100644 --- a/.github/workflows/build_backend.yml +++ b/.github/workflows/build_backend.yml @@ -56,15 +56,15 @@ jobs: # generate Docker tags based on the following events/attributes tags: | # always latest - type=raw,value=latest + type=raw,value=latest,suffix=-${{ matrix.architecture.tag }} # branch event - type=ref,event=branch + type=ref,event=branch,suffix=-${{ matrix.architecture.tag }} # tag event - type=ref,event=tag + type=ref,event=tag,suffix=-${{ matrix.architecture.tag }} # pull request event - type=ref,event=pr + type=ref,event=pr,suffix=-${{ matrix.architecture.tag }} # push event - type=sha,enable=true,prefix=git-,format=short + type=sha,enable=true,prefix=git-,format=short,suffix=-${{ matrix.architecture.tag }} - uses: actions/checkout@v3 # Checking out the repo - name: Set up QEMU uses: docker/setup-qemu-action@v2 @@ -78,7 +78,7 @@ jobs: username: ${{ github.actor }} password: ${{ secrets.GITHUB_TOKEN }} - name: Build and push - uses: docker/build-push-action@v3 + uses: docker/build-push-action@v5 with: push: true build-args: CODERBOT_VERSION=${{github.ref_name}}-${{github.sha}} From cc5ff09e04b17871efeb2c12955a3665e9119750 Mon Sep 17 00:00:00 2001 From: previ Date: Sun, 24 Mar 2024 20:04:59 +0100 Subject: [PATCH 16/65] arch tag --- .github/workflows/build_backend.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/build_backend.yml b/.github/workflows/build_backend.yml index cdc4d526..a4c2500e 100644 --- a/.github/workflows/build_backend.yml +++ b/.github/workflows/build_backend.yml @@ -44,8 +44,10 @@ jobs: architecture: - arch: linux/arm/v7 dockerfile: Dockerfile - - arch: linux/arm/v8 + tag: armv7 + - arch: linux/arm64 dockerfile: Dockerfile.arm64 + tag: arm64 steps: - name: Docker meta id: meta From dc5ea12399166dab331990fbe6856e4e452fdb77 Mon Sep 17 00:00:00 2001 From: previ Date: Sun, 24 Mar 2024 21:50:07 +0100 Subject: [PATCH 17/65] chache arch --- .github/workflows/build_backend.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build_backend.yml b/.github/workflows/build_backend.yml index a4c2500e..dce26943 100644 --- a/.github/workflows/build_backend.yml +++ b/.github/workflows/build_backend.yml @@ -88,7 +88,7 @@ jobs: tags: ${{ steps.meta.outputs.tags }} context: . file: docker/${{ matrix.architecture.dockerfile }} - cache-from: type=registry,ref=ghcr.io/coderbotorg/backend:latest + cache-from: type=registry,ref=ghcr.io/coderbotorg/backend:latest-${{ matrix.architecture.tag }} cache-to: type=inline release-stub: From 6121a0b0db342f5c7467de5aeb941c54268f9f4d Mon Sep 17 00:00:00 2001 From: previ Date: Tue, 26 Mar 2024 21:35:05 +0100 Subject: [PATCH 18/65] bump connexion --- coderbot/main.py | 30 ++++++++--------- docker/stub/requirements.txt | 5 +-- docker/stub/start.sh | 2 +- requirements.txt | 5 +-- stub/wifi/api.py | 19 +++++++++++ stub/wifi/main.py | 35 ++++++++++++++++++++ stub/wifi/openapi.yaml | 64 ++++++++++++++++++++++++++++++++++++ 7 files changed, 136 insertions(+), 24 deletions(-) create mode 100644 stub/wifi/api.py create mode 100644 stub/wifi/main.py create mode 100644 stub/wifi/openapi.yaml diff --git a/coderbot/main.py b/coderbot/main.py index edcb53d6..f5a93fb5 100644 --- a/coderbot/main.py +++ b/coderbot/main.py @@ -8,7 +8,9 @@ import picamera import connexion -from flask_cors import CORS +from connexion.options import SwaggerUIOptions +from connexion.middleware import MiddlewarePosition +from starlette.middleware.cors import CORSMiddleware from camera import Camera from motion import Motion @@ -22,29 +24,27 @@ # Logging configuration logger = logging.getLogger() logger.setLevel(os.environ.get("LOGLEVEL", "INFO")) -# sh = logging.StreamHandler() -# formatter = logging.Formatter('%(message)s') -# sh.setFormatter(formatter) -# logger.addHandler(sh) ## (Connexion) Flask app configuration # Serve a custom version of the swagger ui (Jinja2 templates) based on the default one # from the folder 'swagger-ui'. Clone the 'swagger-ui' repository inside the backend folder -options = {"swagger_ui": False} -connexionApp = connexion.App(__name__, options=options) - -# Connexion wraps FlaskApp, so app becomes connexionApp.app -app = connexionApp.app -# Access-Control-Allow-Origin -CORS(app) -app.debug = False +wagger_ui_options = SwaggerUIOptions(swagger_ui=True) +app = connexion.App(__name__, swagger_ui_options=swagger_ui_options) +app.add_middleware( + CORSMiddleware, + position=MiddlewarePosition.BEFORE_EXCEPTION, + allow_origins=["*"], + allow_credentials=True, + allow_methods=["*"], + allow_headers=["*"], +) app.prog_engine = ProgramEngine.get_instance() ## New API and web application # API v1 is defined in v1.yml and its methods are in api.py -connexionApp.add_api('v1.yml') +app.add_api('v1.yml') def button_pushed(): if app.bot_config.get('button_func') == "startstop": @@ -97,7 +97,7 @@ def run_server(): remove_doreset_file() - app.run(host="0.0.0.0", port=5000, debug=False, use_reloader=False, threaded=True) + app.run(host="0.0.0.0", port=5000) finally: if cam: cam.exit() diff --git a/docker/stub/requirements.txt b/docker/stub/requirements.txt index 419b1eaf..0cd2b156 100644 --- a/docker/stub/requirements.txt +++ b/docker/stub/requirements.txt @@ -1,9 +1,6 @@ # API framework -connexion==2.14.2 -Flask==2.2.5 -Flask-Cors==3.0.10 +connexion[uvicorn,flask,swagger-ui]==3.0.5 tinydb==4.8.0 -Werkzeug==2.2.3 # Misc utils setuptools==69.2.0 diff --git a/docker/stub/start.sh b/docker/stub/start.sh index ff2ed337..4e3d7508 100755 --- a/docker/stub/start.sh +++ b/docker/stub/start.sh @@ -2,4 +2,4 @@ export PYTHONPATH=./stub:./test:./coderbot cd /coderbot -python3 coderbot/main.py \ No newline at end of file +python3 coderbot/main.py & python3 wifi/main.py diff --git a/requirements.txt b/requirements.txt index d5798a6d..6ae7034a 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,9 +1,6 @@ # API framework -connexion==2.14.2 -Flask==2.2.5 -Flask-Cors==3.0.10 +connexion[uvicorn,flask,swagger-ui]==3.0.5 tinydb==4.8.0 -Werkzeug==2.2.3 # Misc utils setuptools==69.2.0 diff --git a/stub/wifi/api.py b/stub/wifi/api.py new file mode 100644 index 00000000..a6a86e9b --- /dev/null +++ b/stub/wifi/api.py @@ -0,0 +1,19 @@ +import logging + +def list_access_points(): + return {"ssids": [{"ssid": "my_wifi"}]} + +def connection_status(): + return {"wifi": "true", "internet": "true"} + +def connect(): + return "ok" + +def forget(): + return "ok" + +def sset_hotspot_ssid(): + return "ok" + +def set_hotspot_password(): + return "ok" \ No newline at end of file diff --git a/stub/wifi/main.py b/stub/wifi/main.py new file mode 100644 index 00000000..d341cb8f --- /dev/null +++ b/stub/wifi/main.py @@ -0,0 +1,35 @@ +#!/usr/bin/python + +import os +import logging +import logging.handlers +import connexion +from connexion.middleware import MiddlewarePosition +from starlette.middleware.cors import CORSMiddleware + +# Logging configuration +logger = logging.getLogger() +logger.setLevel(os.environ.get("LOGLEVEL", "INFO")) + +## (Connexion) Flask app configuration + +# Serve a custom version of the swagger ui (Jinja2 templates) based on the default one +# from the folder 'swagger-ui'. Clone the 'swagger-ui' repository inside the backend folder + +app = connexion.App(__name__) +app.add_middleware( + CORSMiddleware, + position=MiddlewarePosition.BEFORE_EXCEPTION, + allow_origins=["*"], + allow_credentials=True, + allow_methods=["*"], + allow_headers=["*"], +) + +## New API and web application + +# API v1 is defined in v1.yml and its methods are in api.py +app.add_api('v1.yml') + +if __name__ == "__main__": + app.run(host="0.0.0.0", port=9090) \ No newline at end of file diff --git a/stub/wifi/openapi.yaml b/stub/wifi/openapi.yaml new file mode 100644 index 00000000..352871d9 --- /dev/null +++ b/stub/wifi/openapi.yaml @@ -0,0 +1,64 @@ +openapi: "3.0.0" +info: + version: "1.0" + title: OpenAPI 3.0 definition of WiFi API + +servers: + - url: http://coderbot.local/v1 + +# Paths supported by the server application +paths: + /list_access_points: + get: + operationId: "api.list_access_points" + summary: "list Access Points" + responses: + 200: + description: "ok" + tags: + - Wifi + /connection_status: + get: + operationId: "api.connection_status" + summary: "connection Status" + responses: + 200: + description: "ok" + tags: + - Wifi + /connect: + post: + operationId: "api.connect" + summary: "connect" + responses: + 200: + description: "ok" + tags: + - Wifi + /forget: + post: + operationId: "api.forget" + summary: "forget" + responses: + 200: + description: "ok" + tags: + - Wifi + /sset_hotspot_ssid: + post: + operationId: "api.sset_hotspot_ssid" + summary: "sset_hotspot_ssid" + responses: + 200: + description: "ok" + tags: + - Wifi + /set_hotspot_password: + post: + operationId: "api.set_hotspot_password" + summary: "set_hotspot_password" + responses: + 200: + description: "ok" + tags: + - Wifi \ No newline at end of file From f1937c5ece16cca6028846a72ecd0f7ca8c06a15 Mon Sep 17 00:00:00 2001 From: previ Date: Tue, 26 Mar 2024 21:49:44 +0100 Subject: [PATCH 19/65] remove six --- coderbot/audio.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/coderbot/audio.py b/coderbot/audio.py index ed1a469e..f0397c5c 100644 --- a/coderbot/audio.py +++ b/coderbot/audio.py @@ -25,8 +25,7 @@ import audioop import pyaudio import alsaaudio - -from six.moves import queue +import queue # [END import_libraries] # Audio recording parameters From d1ef925b579dd194258fa1fb547cb08b1c44cb5c Mon Sep 17 00:00:00 2001 From: previ Date: Tue, 26 Mar 2024 21:52:15 +0100 Subject: [PATCH 20/65] fix --- coderbot/main.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/coderbot/main.py b/coderbot/main.py index f5a93fb5..012f3d08 100644 --- a/coderbot/main.py +++ b/coderbot/main.py @@ -29,7 +29,7 @@ # Serve a custom version of the swagger ui (Jinja2 templates) based on the default one # from the folder 'swagger-ui'. Clone the 'swagger-ui' repository inside the backend folder -wagger_ui_options = SwaggerUIOptions(swagger_ui=True) +swagger_ui_options = SwaggerUIOptions(swagger_ui=True) app = connexion.App(__name__, swagger_ui_options=swagger_ui_options) app.add_middleware( CORSMiddleware, From d736bffc3e4d91b87c5b8b286704a92b7952c6fc Mon Sep 17 00:00:00 2001 From: previ Date: Tue, 26 Mar 2024 22:11:14 +0100 Subject: [PATCH 21/65] change base image --- docker/Dockerfile | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/docker/Dockerfile b/docker/Dockerfile index fd36371f..12a6d55a 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -1,10 +1,9 @@ -FROM coderbot/rpi-debian:bullseye-20240227 +FROM balenalib/raspberrypi3:bullseye-20240304 ENV QEMU_CPU=max ENV DEBIAN_FRONTEND=noninteractive RUN install_packages \ - patch \ build-essential \ libraspberrypi0 \ procps \ From 1aa55c083a6c2e388a5a7c817263f0c379a80d1c Mon Sep 17 00:00:00 2001 From: previ Date: Tue, 26 Mar 2024 22:15:06 +0100 Subject: [PATCH 22/65] base image --- docker/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker/Dockerfile b/docker/Dockerfile index 12a6d55a..58354bfe 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -1,4 +1,4 @@ -FROM balenalib/raspberrypi3:bullseye-20240304 +FROM balenalib/raspberrypi3:bullseye-20240227 ENV QEMU_CPU=max ENV DEBIAN_FRONTEND=noninteractive From 0984d164bdfb0367459e7d4253113316f5469312 Mon Sep 17 00:00:00 2001 From: previ Date: Wed, 27 Mar 2024 22:47:55 +0100 Subject: [PATCH 23/65] fix stub, remove jasper --- docker/Dockerfile | 3 +-- docker/stub/Dockerfile | 1 - docker/stub/start.sh | 2 +- stub/wifi/{openapi.yaml => v1.yml} | 0 4 files changed, 2 insertions(+), 4 deletions(-) rename stub/wifi/{openapi.yaml => v1.yml} (100%) diff --git a/docker/Dockerfile b/docker/Dockerfile index 58354bfe..e6e083f8 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -1,4 +1,4 @@ -FROM balenalib/raspberrypi3:bullseye-20240227 +FROM coderbot/raspberrypi3:bullseye-20240227 ENV QEMU_CPU=max ENV DEBIAN_FRONTEND=noninteractive @@ -25,7 +25,6 @@ RUN install_packages \ RUN install_packages \ libharfbuzz-bin \ libwebp6 \ - libjasper1 \ libilmbase25 \ libgstreamer1.0-0 \ libavcodec-extra58 \ diff --git a/docker/stub/Dockerfile b/docker/stub/Dockerfile index b262df75..2d841524 100644 --- a/docker/stub/Dockerfile +++ b/docker/stub/Dockerfile @@ -3,7 +3,6 @@ FROM debian:bullseye-slim ENV DEBIAN_FRONTEND=noninteractive RUN apt-get update -y && apt-get install -y \ - patch \ procps \ sudo \ wget \ diff --git a/docker/stub/start.sh b/docker/stub/start.sh index 4e3d7508..3800bdc9 100755 --- a/docker/stub/start.sh +++ b/docker/stub/start.sh @@ -2,4 +2,4 @@ export PYTHONPATH=./stub:./test:./coderbot cd /coderbot -python3 coderbot/main.py & python3 wifi/main.py +python3 coderbot/main.py & python3 stub/wifi/main.py diff --git a/stub/wifi/openapi.yaml b/stub/wifi/v1.yml similarity index 100% rename from stub/wifi/openapi.yaml rename to stub/wifi/v1.yml From 57313e6082b8462ca1ab39871ba41deac8296170 Mon Sep 17 00:00:00 2001 From: previ Date: Wed, 27 Mar 2024 23:35:56 +0100 Subject: [PATCH 24/65] wip --- docker/Dockerfile.arm64 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker/Dockerfile.arm64 b/docker/Dockerfile.arm64 index 7e7764ed..6d022e69 100644 --- a/docker/Dockerfile.arm64 +++ b/docker/Dockerfile.arm64 @@ -1,4 +1,4 @@ -FROM balenalib/raspberrypi3-64:bullseye-20240304 +FROM coderbot/raspberrypi3-64:bullseye-20240304 ENV QEMU_CPU=max ENV DEBIAN_FRONTEND=noninteractive From ac99246f20d5376eb53012b765f5b81ade01f534 Mon Sep 17 00:00:00 2001 From: previ Date: Wed, 27 Mar 2024 23:42:31 +0100 Subject: [PATCH 25/65] wip --- docker/Dockerfile | 2 +- docker/Dockerfile.arm64 | 2 +- docker/stub/requirements.txt | 2 +- requirements.txt | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/docker/Dockerfile b/docker/Dockerfile index e6e083f8..d6822b51 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -1,4 +1,4 @@ -FROM coderbot/raspberrypi3:bullseye-20240227 +FROM balenalib/raspberrypi3:bookworm-20240227 ENV QEMU_CPU=max ENV DEBIAN_FRONTEND=noninteractive diff --git a/docker/Dockerfile.arm64 b/docker/Dockerfile.arm64 index 6d022e69..ecde3d5f 100644 --- a/docker/Dockerfile.arm64 +++ b/docker/Dockerfile.arm64 @@ -1,4 +1,4 @@ -FROM coderbot/raspberrypi3-64:bullseye-20240304 +FROM balenalib/raspberrypi3-64:bookworm-20240304 ENV QEMU_CPU=max ENV DEBIAN_FRONTEND=noninteractive diff --git a/docker/stub/requirements.txt b/docker/stub/requirements.txt index 0cd2b156..34cb272a 100644 --- a/docker/stub/requirements.txt +++ b/docker/stub/requirements.txt @@ -17,7 +17,7 @@ grpcio==1.62.1 numpy==1.26.4 Pillow==10.2.0 protobuf==4.25.2 -opencv-contrib-python==4.9.0.80 +opencv-contrib-python-headless==4.9.0.80 tflite-runtime pytesseract==0.3.10 pyzbar==0.1.9 diff --git a/requirements.txt b/requirements.txt index 6ae7034a..32259bfc 100644 --- a/requirements.txt +++ b/requirements.txt @@ -21,7 +21,7 @@ grpcio==1.62.1 numpy==1.26.4 Pillow==10.2.0 protobuf==4.25.2 -opencv-contrib-python==4.9.0.80 +opencv-contrib-python-headless==4.9.0.80 tflite-runtime pytesseract==0.3.10 picamera==1.13 From b99dd267fa61bdb7c01e7b392c461d0eb9f74ebd Mon Sep 17 00:00:00 2001 From: previ Date: Wed, 27 Mar 2024 23:54:20 +0100 Subject: [PATCH 26/65] wip --- docker/Dockerfile | 3 +-- docker/Dockerfile.arm64 | 1 - 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/docker/Dockerfile b/docker/Dockerfile index d6822b51..fd5b2a01 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -5,7 +5,6 @@ ENV DEBIAN_FRONTEND=noninteractive RUN install_packages \ build-essential \ - libraspberrypi0 \ procps \ sudo \ wget \ @@ -17,7 +16,7 @@ RUN install_packages \ python3-pip \ python3-dev \ libopenjp2-7-dev \ - libtiff5 \ + libtiff5-dev \ libatlas-base-dev \ libhdf5-dev \ alsa-utils \ diff --git a/docker/Dockerfile.arm64 b/docker/Dockerfile.arm64 index ecde3d5f..3918e4ae 100644 --- a/docker/Dockerfile.arm64 +++ b/docker/Dockerfile.arm64 @@ -5,7 +5,6 @@ ENV DEBIAN_FRONTEND=noninteractive RUN install_packages \ build-essential \ - libraspberrypi0 \ procps \ sudo \ wget \ From 8980e486a102a86c8a3ab5b652f433a6ef83b7e8 Mon Sep 17 00:00:00 2001 From: previ Date: Thu, 28 Mar 2024 00:03:06 +0100 Subject: [PATCH 27/65] wip --- docker/Dockerfile | 1 - 1 file changed, 1 deletion(-) diff --git a/docker/Dockerfile b/docker/Dockerfile index fd5b2a01..0fcfed2e 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -4,7 +4,6 @@ ENV QEMU_CPU=max ENV DEBIAN_FRONTEND=noninteractive RUN install_packages \ - build-essential \ procps \ sudo \ wget \ From 6fe300331ee83c0280c3f1163b6c838def210cf2 Mon Sep 17 00:00:00 2001 From: previ Date: Thu, 28 Mar 2024 00:06:56 +0100 Subject: [PATCH 28/65] wip --- docker/Dockerfile | 1 - 1 file changed, 1 deletion(-) diff --git a/docker/Dockerfile b/docker/Dockerfile index e6e083f8..c2b978a4 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -4,7 +4,6 @@ ENV QEMU_CPU=max ENV DEBIAN_FRONTEND=noninteractive RUN install_packages \ - build-essential \ libraspberrypi0 \ procps \ sudo \ From 9ef6dcdf0c18b815a003f52846dad18eeb528391 Mon Sep 17 00:00:00 2001 From: previ Date: Thu, 28 Mar 2024 00:17:51 +0100 Subject: [PATCH 29/65] wip --- docker/stub/requirements.txt | 2 +- requirements.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docker/stub/requirements.txt b/docker/stub/requirements.txt index 0cd2b156..34cb272a 100644 --- a/docker/stub/requirements.txt +++ b/docker/stub/requirements.txt @@ -17,7 +17,7 @@ grpcio==1.62.1 numpy==1.26.4 Pillow==10.2.0 protobuf==4.25.2 -opencv-contrib-python==4.9.0.80 +opencv-contrib-python-headless==4.9.0.80 tflite-runtime pytesseract==0.3.10 pyzbar==0.1.9 diff --git a/requirements.txt b/requirements.txt index 6ae7034a..32259bfc 100644 --- a/requirements.txt +++ b/requirements.txt @@ -21,7 +21,7 @@ grpcio==1.62.1 numpy==1.26.4 Pillow==10.2.0 protobuf==4.25.2 -opencv-contrib-python==4.9.0.80 +opencv-contrib-python-headless==4.9.0.80 tflite-runtime pytesseract==0.3.10 picamera==1.13 From 5990241aa0b2146c00dca95391ccdd04fb9d931a Mon Sep 17 00:00:00 2001 From: previ Date: Thu, 28 Mar 2024 23:02:48 +0100 Subject: [PATCH 30/65] schemathesis==3.24.3 --- .github/workflows/build_backend.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build_backend.yml b/.github/workflows/build_backend.yml index dce26943..6f6611fe 100644 --- a/.github/workflows/build_backend.yml +++ b/.github/workflows/build_backend.yml @@ -27,7 +27,7 @@ jobs: mkdir -p schemathesis python3 -m venv schemathesis . schemathesis/bin/activate - pip install schemathesis + pip install schemathesis==3.24.3 st run --endpoint 'activities' --hypothesis-max-examples=10 --request-timeout=20 http://localhost:5000/api/v1/openapi.json #st run --endpoint 'media' --hypothesis-max-examples=10 --request-timeout=20 http://localhost:5000/api/v1/openapi.json st run --endpoint 'control/speak' --hypothesis-max-examples=10 --request-timeout=20 http://localhost:5000/api/v1/openapi.json From ed98daa7a642a8185e50c8af4c2eac471c1127fd Mon Sep 17 00:00:00 2001 From: previ Date: Thu, 28 Mar 2024 23:03:23 +0100 Subject: [PATCH 31/65] schemathesis==3.24.3 --- .github/workflows/build_backend.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build_backend.yml b/.github/workflows/build_backend.yml index dce26943..365fc86d 100644 --- a/.github/workflows/build_backend.yml +++ b/.github/workflows/build_backend.yml @@ -27,7 +27,7 @@ jobs: mkdir -p schemathesis python3 -m venv schemathesis . schemathesis/bin/activate - pip install schemathesis + pip install schemathesis==3.24.3 st run --endpoint 'activities' --hypothesis-max-examples=10 --request-timeout=20 http://localhost:5000/api/v1/openapi.json #st run --endpoint 'media' --hypothesis-max-examples=10 --request-timeout=20 http://localhost:5000/api/v1/openapi.json st run --endpoint 'control/speak' --hypothesis-max-examples=10 --request-timeout=20 http://localhost:5000/api/v1/openapi.json From 96c9dc8b0db59615d80953116bb7d59c0e08aae0 Mon Sep 17 00:00:00 2001 From: previ Date: Thu, 28 Mar 2024 23:20:12 +0100 Subject: [PATCH 32/65] libtiff5-dev --- docker/Dockerfile.arm64 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker/Dockerfile.arm64 b/docker/Dockerfile.arm64 index 3918e4ae..20c864c7 100644 --- a/docker/Dockerfile.arm64 +++ b/docker/Dockerfile.arm64 @@ -16,7 +16,7 @@ RUN install_packages \ python3-pip \ python3-dev \ libopenjp2-7-dev \ - libtiff5 \ + libtiff5-dev \ libatlas-base-dev \ libhdf5-dev \ alsa-utils \ From b6d1675b444fc067083e41aa1a09a1c302b3b45e Mon Sep 17 00:00:00 2001 From: previ Date: Thu, 28 Mar 2024 23:27:44 +0100 Subject: [PATCH 33/65] cmake==3.28.4 --- requirements.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/requirements.txt b/requirements.txt index 32259bfc..fe36a8b0 100644 --- a/requirements.txt +++ b/requirements.txt @@ -21,6 +21,7 @@ grpcio==1.62.1 numpy==1.26.4 Pillow==10.2.0 protobuf==4.25.2 +cmake==3.28.4 opencv-contrib-python-headless==4.9.0.80 tflite-runtime pytesseract==0.3.10 From 38edb1d91b678b69b0118e1b6b69393494d9b8b5 Mon Sep 17 00:00:00 2001 From: previ Date: Thu, 28 Mar 2024 23:33:45 +0100 Subject: [PATCH 34/65] upgrade deps --- docker/Dockerfile.arm64 | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docker/Dockerfile.arm64 b/docker/Dockerfile.arm64 index 20c864c7..6d62d977 100644 --- a/docker/Dockerfile.arm64 +++ b/docker/Dockerfile.arm64 @@ -23,11 +23,11 @@ RUN install_packages \ espeak RUN install_packages \ libharfbuzz-bin \ - libwebp6 \ - libilmbase25 \ + webp6 \ + libilmbase-dev \ libgstreamer1.0-0 \ - libavcodec-extra58 \ - libavformat58 + libavcodec-extra59 \ + libavformat59 RUN install_packages \ libopencv-dev \ zbar-tools \ From 6dbbc9224c23846205a4266a4a027e2a6acfa25c Mon Sep 17 00:00:00 2001 From: previ Date: Thu, 28 Mar 2024 23:41:42 +0100 Subject: [PATCH 35/65] update deps --- docker/Dockerfile.arm64 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker/Dockerfile.arm64 b/docker/Dockerfile.arm64 index 6d62d977..97bfc759 100644 --- a/docker/Dockerfile.arm64 +++ b/docker/Dockerfile.arm64 @@ -23,7 +23,7 @@ RUN install_packages \ espeak RUN install_packages \ libharfbuzz-bin \ - webp6 \ + webp \ libilmbase-dev \ libgstreamer1.0-0 \ libavcodec-extra59 \ From b66e3ffbae6b3bee6ae4e89f66b19255400385f8 Mon Sep 17 00:00:00 2001 From: previ Date: Thu, 28 Mar 2024 23:51:16 +0100 Subject: [PATCH 36/65] bump deps --- docker/Dockerfile | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docker/Dockerfile b/docker/Dockerfile index 0fcfed2e..ab2d2494 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -22,11 +22,11 @@ RUN install_packages \ espeak RUN install_packages \ libharfbuzz-bin \ - libwebp6 \ - libilmbase25 \ + lwebp \ + libilmbase-dev \ libgstreamer1.0-0 \ - libavcodec-extra58 \ - libavformat58 + libavcodec-extra59 \ + libavformat59 RUN install_packages \ libopencv-dev \ zbar-tools \ From ebf89708c4d200ab63149eae864887c2cca844a1 Mon Sep 17 00:00:00 2001 From: previ Date: Thu, 28 Mar 2024 23:59:54 +0100 Subject: [PATCH 37/65] bump deps --- docker/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker/Dockerfile b/docker/Dockerfile index ab2d2494..6443fd5b 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -22,7 +22,7 @@ RUN install_packages \ espeak RUN install_packages \ libharfbuzz-bin \ - lwebp \ + webp \ libilmbase-dev \ libgstreamer1.0-0 \ libavcodec-extra59 \ From 6f56b6b0a341408551c66e33a0468c586ec2af00 Mon Sep 17 00:00:00 2001 From: previ Date: Fri, 29 Mar 2024 00:09:13 +0100 Subject: [PATCH 38/65] bump deps --- requirements.txt | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/requirements.txt b/requirements.txt index fe36a8b0..3ced7d94 100644 --- a/requirements.txt +++ b/requirements.txt @@ -21,8 +21,7 @@ grpcio==1.62.1 numpy==1.26.4 Pillow==10.2.0 protobuf==4.25.2 -cmake==3.28.4 -opencv-contrib-python-headless==4.9.0.80 +opencv-contrib-python-headless==4.8.1.78 tflite-runtime pytesseract==0.3.10 picamera==1.13 From d11db6d49e482daeca57255e2fd9bbe578ea2752 Mon Sep 17 00:00:00 2001 From: previ Date: Fri, 29 Mar 2024 00:19:50 +0100 Subject: [PATCH 39/65] --break-system-packages --- docker/Dockerfile | 2 +- docker/Dockerfile.arm64 | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docker/Dockerfile b/docker/Dockerfile index 6443fd5b..a387174c 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -46,7 +46,7 @@ RUN install_packages \ ENV READTHEDOCS=True ADD requirements.txt /tmp/. RUN pip install --upgrade pip && \ - pip install --no-cache-dir -r /tmp/requirements.txt + pip install --no-cache-dir --break-system-packages -r /tmp/requirements.txt RUN mkdir -p /coderbot && \ mkdir -p /coderbot/data && \ diff --git a/docker/Dockerfile.arm64 b/docker/Dockerfile.arm64 index 97bfc759..39ad54df 100644 --- a/docker/Dockerfile.arm64 +++ b/docker/Dockerfile.arm64 @@ -47,7 +47,7 @@ RUN install_packages \ ENV READTHEDOCS=True ADD requirements.txt /tmp/. RUN pip install --upgrade pip && \ - pip install --no-cache-dir -r /tmp/requirements.txt + pip install --no-cache-dir --break-system-packages -r /tmp/requirements.txt RUN mkdir -p /coderbot && \ mkdir -p /coderbot/data && \ From 8c55e1ab0943bd246e1cbd82abdbaba5b5ddb105 Mon Sep 17 00:00:00 2001 From: previ Date: Fri, 29 Mar 2024 00:30:57 +0100 Subject: [PATCH 40/65] --break-system-packages --- docker/Dockerfile | 2 +- docker/Dockerfile.arm64 | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docker/Dockerfile b/docker/Dockerfile index a387174c..d1dc78d3 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -45,7 +45,7 @@ RUN install_packages \ ENV READTHEDOCS=True ADD requirements.txt /tmp/. -RUN pip install --upgrade pip && \ +RUN pip install --break-system-packages --upgrade pip && \ pip install --no-cache-dir --break-system-packages -r /tmp/requirements.txt RUN mkdir -p /coderbot && \ diff --git a/docker/Dockerfile.arm64 b/docker/Dockerfile.arm64 index 39ad54df..fdc1d216 100644 --- a/docker/Dockerfile.arm64 +++ b/docker/Dockerfile.arm64 @@ -46,7 +46,7 @@ RUN install_packages \ ENV READTHEDOCS=True ADD requirements.txt /tmp/. -RUN pip install --upgrade pip && \ +RUN pip install --break-system-packages --upgrade pip && \ pip install --no-cache-dir --break-system-packages -r /tmp/requirements.txt RUN mkdir -p /coderbot && \ From 0736f4b440ef559d9e5561b0427221e8b95b6cae Mon Sep 17 00:00:00 2001 From: previ Date: Sun, 31 Mar 2024 11:19:24 +0200 Subject: [PATCH 41/65] add cmake --- docker/Dockerfile | 1 + 1 file changed, 1 insertion(+) diff --git a/docker/Dockerfile b/docker/Dockerfile index d1dc78d3..3a379bda 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -4,6 +4,7 @@ ENV QEMU_CPU=max ENV DEBIAN_FRONTEND=noninteractive RUN install_packages \ + cmake \ procps \ sudo \ wget \ From 35269d5178898455124469b4dcb58a6e7f3977f7 Mon Sep 17 00:00:00 2001 From: previ Date: Sun, 31 Mar 2024 12:01:56 +0200 Subject: [PATCH 42/65] ninja-build --- docker/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker/Dockerfile b/docker/Dockerfile index 3a379bda..bbaba474 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -4,7 +4,7 @@ ENV QEMU_CPU=max ENV DEBIAN_FRONTEND=noninteractive RUN install_packages \ - cmake \ + cmake ninja-build \ procps \ sudo \ wget \ From 714f2ae883f7d5c309f0f258984595b0c67483ca Mon Sep 17 00:00:00 2001 From: previ Date: Sun, 31 Mar 2024 12:14:51 +0200 Subject: [PATCH 43/65] restore build-essential --- docker/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker/Dockerfile b/docker/Dockerfile index bbaba474..179d82ae 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -4,7 +4,7 @@ ENV QEMU_CPU=max ENV DEBIAN_FRONTEND=noninteractive RUN install_packages \ - cmake ninja-build \ + build-essential \ procps \ sudo \ wget \ From a6da5f08f729a659e16378dc321771f74579590d Mon Sep 17 00:00:00 2001 From: previ Date: Sun, 31 Mar 2024 18:30:35 +0200 Subject: [PATCH 44/65] pattern in name openapi def --- coderbot/v1.yml | 40 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 39 insertions(+), 1 deletion(-) diff --git a/coderbot/v1.yml b/coderbot/v1.yml index a3c8872f..ad32ac72 100644 --- a/coderbot/v1.yml +++ b/coderbot/v1.yml @@ -170,6 +170,10 @@ paths: required: true schema: type: string + minLength: 1 + maxLength: 128 + pattern: '^[a-zA-ZA-zÀ-ú0-9-_ ]+$' + tags: - Program management responses: @@ -184,6 +188,9 @@ paths: required: true schema: type: string + minLength: 1 + maxLength: 128 + pattern: '^[a-zA-ZA-zÀ-ú0-9-_ ]+$' responses: 200: description: "ok" @@ -200,6 +207,9 @@ paths: required: true schema: type: string + minLength: 1 + maxLength: 128 + pattern: '^[a-zA-ZA-zÀ-ú0-9-_ ]+$' requestBody: description: Program object required: true @@ -225,6 +235,9 @@ paths: required: true schema: type: string + minLength: 1 + maxLength: 128 + pattern: '^[a-zA-ZA-zÀ-ú0-9-_ ]+$' requestBody: description: Program object required: true @@ -248,6 +261,9 @@ paths: required: true schema: type: string + minLength: 1 + maxLength: 128 + pattern: '^[a-zA-ZA-zÀ-ú0-9-_ ]+$' responses: 200: description: "ok" @@ -264,6 +280,9 @@ paths: required: true schema: type: string + minLength: 1 + maxLength: 128 + pattern: '^[a-zA-ZA-zÀ-ú0-9-_ ]+$' responses: 200: description: "ok" @@ -304,6 +323,9 @@ paths: required: true schema: type: string + minLength: 1 + maxLength: 128 + pattern: '^[a-zA-ZA-zÀ-ú0-9-_ ]+$' - name: default in: query schema: @@ -323,6 +345,9 @@ paths: required: true schema: type: string + minLength: 1 + maxLength: 128 + pattern: '^[a-zA-ZA-zÀ-ú0-9-_ ]+$' requestBody: description: Update Activity required: true @@ -346,6 +371,9 @@ paths: required: true schema: type: string + minLength: 1 + maxLength: 128 + pattern: '^[a-zA-ZA-zÀ-ú0-9-_ ]+$' responses: 200: description: "ok" @@ -386,6 +414,9 @@ paths: required: true schema: type: string + minLength: 1 + maxLength: 128 + pattern: '^[a-zA-ZA-zÀ-ú0-9-_ ]+$' tags: - Music extensions responses: @@ -586,6 +617,9 @@ paths: required: true schema: type: string + minLength: 1 + maxLength: 128 + pattern: '^[a-zA-ZA-zÀ-ú0-9-_ ]+$' tags: - CNN Models responses: @@ -600,6 +634,9 @@ paths: required: true schema: type: string + minLength: 1 + maxLength: 128 + pattern: '^[a-zA-ZA-zÀ-ú0-9-_ ]+$' tags: - CNN Models responses: @@ -686,9 +723,9 @@ components: properties: name: type: string - pattern: '^[a-zA-ZA-zÀ-ú0-9-_ ]+$' minLength: 1 maxLength: 128 + pattern: '^[a-zA-ZA-zÀ-ú0-9-_ ]+$' code: type: string minLength: 1 @@ -709,6 +746,7 @@ components: type: string minLength: 1 maxLength: 128 + pattern: '^[a-zA-ZA-zÀ-ú0-9-_ ]+$' description: type: string minLength: 0 From e50d48a080cb2d1adb107a09f2a0511fe093f3d3 Mon Sep 17 00:00:00 2001 From: previ Date: Mon, 1 Apr 2024 23:22:53 +0100 Subject: [PATCH 45/65] picamera2 --- coderbot/api.py | 3 +- coderbot/camera.py | 25 +++++++------- coderbot/cv/camera.py | 77 ++++++++++++++++++++----------------------- coderbot/cv/image.py | 11 +++++-- coderbot/main.py | 6 ++-- requirements.txt | 1 - 6 files changed, 61 insertions(+), 62 deletions(-) diff --git a/coderbot/api.py b/coderbot/api.py index 88052aff..193e07ff 100644 --- a/coderbot/api.py +++ b/coderbot/api.py @@ -9,7 +9,6 @@ import urllib import connexion -import picamera from flask import Response, request, send_file from werkzeug.datastructures import Headers @@ -213,7 +212,7 @@ def getPhoto(name): try: media_file = cam.get_photo_file(name) return send_file(media_file, mimetype=mimetype.get(name[:-3], 'image/jpeg'), max_age=0) - except picamera.exc.PiCameraError as e: + except Exception as e: logging.error("Error: %s", str(e)) return 503 except FileNotFoundError: diff --git a/coderbot/camera.py b/coderbot/camera.py index 8866b9fd..360c2e60 100644 --- a/coderbot/camera.py +++ b/coderbot/camera.py @@ -60,22 +60,23 @@ def get_instance(cls): def __init__(self): logging.info("starting camera") + cfg = config.Config.get() cam_props = {"width":640, "height":512, - "cv_image_factor": config.Config.get().get("cv_image_factor"), - "exposure_mode": config.Config.get().get("camera_exposure_mode"), - "framerate": config.Config.get().get("camera_framerate"), - "bitrate": config.Config.get().get("camera_jpeg_bitrate"), - "jpeg_quality": int(config.Config.get().get("camera_jpeg_quality"))} + "cv_image_factor": cfg.get("cv_image_factor"), + "exposure_mode": cfg.get("camera_exposure_mode"), + "framerate": cfg.get("camera_framerate"), + "bitrate": cfg.get("camera_jpeg_bitrate"), + "jpeg_quality": int(cfg.get("camera_jpeg_quality"))} self._camera = camera.Camera(props=cam_props) self.recording = False self.video_start_time = time.time() + 8640000 self._image_time = 0 - self._cv_image_factor = int(config.Config.get().get("cv_image_factor", 4)) - self._image_refresh_timeout = float(config.Config.get().get("camera_refresh_timeout", 0.1)) - self._color_object_size_min = int(config.Config.get().get("camera_color_object_size_min", 80)) / (self._cv_image_factor * self._cv_image_factor) - self._color_object_size_max = int(config.Config.get().get("camera_color_object_size_max", 32000)) / (self._cv_image_factor * self._cv_image_factor) - self._path_object_size_min = int(config.Config.get().get("camera_path_object_size_min", 80)) / (self._cv_image_factor * self._cv_image_factor) - self._path_object_size_max = int(config.Config.get().get("camera_path_object_size_max", 32000)) / (self._cv_image_factor * self._cv_image_factor) + self._cv_image_factor = int(cfg.get("cv_image_factor", 4)) + self._image_refresh_timeout = float(cfg.get("camera_refresh_timeout", 0.1)) + self._color_object_size_min = int(cfg.get("camera_color_object_size_min", 80)) / (self._cv_image_factor * self._cv_image_factor) + self._color_object_size_max = int(cfg.get("camera_color_object_size_max", 32000)) / (self._cv_image_factor * self._cv_image_factor) + self._path_object_size_min = int(cfg.get("camera_path_object_size_min", 80)) / (self._cv_image_factor * self._cv_image_factor) + self._path_object_size_max = int(cfg.get("camera_path_object_size_max", 32000)) / (self._cv_image_factor * self._cv_image_factor) self.load_photo_metadata() if not self._photos: self._photos = [] @@ -86,7 +87,7 @@ def __init__(self): self.save_photo_metadata() self._cnn_classifiers = {} - cnn_model = config.Config.get().get("cnn_default_model", "") + cnn_model = cfg.get("cnn_default_model", "") if cnn_model != "": try: self._cnn_classifiers[cnn_model] = CNNManager.get_instance().load_model(cnn_model) diff --git a/coderbot/cv/camera.py b/coderbot/cv/camera.py index f2b1b68f..1bf5263b 100644 --- a/coderbot/cv/camera.py +++ b/coderbot/cv/camera.py @@ -25,7 +25,9 @@ import logging from threading import Condition import numpy as np -import picamera +from picamera2 import Picamera2 +from picamera2.encoders import Encoder, MJPEGEncoder, H264Encoder +from picamera2.outputs import FileOutput, FfmpegOutput class Camera(object): @@ -34,29 +36,21 @@ class Camera(object): VIDEO_FILE_EXT = ".mp4" VIDEO_FILE_EXT_H264 = '.h264' - class StreamingOutputMJPEG(object): + class StreamingOutputMJPEG(io.BufferedIOBase): def __init__(self): self.frame = None - self.buffer = io.BytesIO() self.condition = Condition() def write(self, buf): - if buf.startswith(b'\xff\xd8'): - # New frame, copy the existing buffer's content and notify all - # clients it's available - self.buffer.truncate() - with self.condition: - self.frame = self.buffer.getvalue() - self.condition.notify_all() - self.buffer.seek(0) - return self.buffer.write(buf) + with self.condition: + self.frame = buf + self.condition.notify_all() - class StreamingOutputBGR(object): + class StreamingOutputBGR(io.BufferedIOBase): def __init__(self, resolution): self.frame = None self.condition = Condition() self.resolution = resolution - self.count = 0 def write(self, buf): with self.condition: @@ -64,18 +58,21 @@ def write(self, buf): self.frame = frame.reshape(self.resolution[1], self.resolution[0], 4) self.frame = np.delete(self.frame, 3, 2) self.condition.notify_all() - return len(buf) def __init__(self, props): logging.info("camera init") - self.camera = picamera.PiCamera() + self.camera = Picamera2() + self.camera.configure(self.camera.create_video_configuration(main={"size": (props.get('width', 640), props.get('height', 512))})) self.camera.resolution = (props.get('width', 640), props.get('height', 512)) - self.out_rgb_resolution = (int(self.camera.resolution[0] / int(props.get('cv_image_factor', 4))), int(self.camera.resolution[1] / int(props.get('cv_image_factor', 4)))) + self.out_rgb_resolution = (int(props.get('width', 640) / int(props.get('cv_image_factor', 4))), int(props.get('height', 512) / int(props.get('cv_image_factor', 4)))) self.camera.framerate = float(props.get('framerate', 20)) self.camera.exposure_mode = props.get('exposure_mode', "auto") self.output_mjpeg = self.StreamingOutputMJPEG() - self.output_bgr = self.StreamingOutputBGR(self.out_rgb_resolution) - self.h264_encoder = None + self.encoder_streaming = MJPEGEncoder(10000000) + self.encoder_streaming.output = [FileOutput(self.output_mjpeg)] + self.encoder_h264 = H264Encoder() + #self.output_bgr = self.StreamingOutputBGR(self.out_rgb_resolution) + #self.h264_encoder = None self.recording = None self.video_filename = None self._jpeg_quality = props.get('jpeg_quality', 20) @@ -83,31 +80,27 @@ def __init__(self, props): def video_rec(self, filename): self.video_filename = filename[:filename.rfind(".")] - self.camera.start_recording(self.video_filename + self.VIDEO_FILE_EXT_H264, format="h264", quality=23, splitter_port=2) + output = FfmpegOutput(output_filename=filename) + self.encoder_h264.output = [output] + self.camera.start_encoder(self.encoder_h264, output) + #self.camera.start_recording(self.encoder_h264, FfmpegOutput(output_filename=filename)) + #self.camera.start_recording(self.video_filename + self.VIDEO_FILE_EXT_H264, format="h264", quality=23, splitter_port=2) def video_stop(self): - logging.debug("video_stop") - self.camera.stop_recording(2) - - # pack in mp4 container - params = " -loglevel quiet -stats -framerate " + str(self.camera.framerate) + \ - " -i " + self.video_filename + self.VIDEO_FILE_EXT_H264 + \ - " -c copy " + self.video_filename + self.VIDEO_FILE_EXT - - os.system(self.FFMPEG_CMD + params) - # remove h264 file - os.remove(self.video_filename + self.VIDEO_FILE_EXT_H264) + logging.info("video_stop") + self.camera.stop_encoder(encoders=[self.encoder_h264]) + #self.camera.stop_recording() def grab_start(self): - logging.debug("grab_start") - self.camera.start_recording(self.output_mjpeg, format="mjpeg", splitter_port=0, bitrate=self._jpeg_bitrate) - self.camera.start_recording(self.output_bgr, format="bgra", splitter_port=1, resize=self.out_rgb_resolution) + logging.info("grab_start") + self.camera.start() + self.camera.start_encoder(self.encoder_streaming) + #self.camera.start_recording(self.output_mjpeg, format="mjpeg", splitter_port=0, bitrate=self._jpeg_bitrate) + #self.camera.start_recording(self.output_bgr, format="bgra", splitter_port=1, resize=self.out_rgb_resolution) def grab_stop(self): - logging.debug("grab_stop") - - self.camera.stop_recording(0) - self.camera.stop_recording(1) + logging.info("grab_stop") + self.camera.stop_encoder(encoders=[self.encoder_streaming]) def get_image_jpeg(self): with self.output_mjpeg.condition: @@ -115,9 +108,11 @@ def get_image_jpeg(self): return self.output_mjpeg.frame def get_image_bgr(self): - with self.output_bgr.condition: - self.output_bgr.condition.wait() - return self.output_bgr.frame + buf = self.camera.capture_buffer() + frame_from_buf = np.frombuffer(buf, dtype=np.uint8) + frame = frame_from_buf.reshape(self.camera.resolution[1], self.camera.resolution[0], 4) + frame = np.delete(frame, 3, 2) + return frame def set_overlay_text(self, text): try: diff --git a/coderbot/cv/image.py b/coderbot/cv/image.py index 5e095cb0..f8d3ce52 100644 --- a/coderbot/cv/image.py +++ b/coderbot/cv/image.py @@ -36,9 +36,14 @@ class Image(): r_from = np.float32([[0, 0], [640, 0], [640, 480], [0, 480]]) r_dest = np.float32([[0, -120], [640, -120], [380, 480], [260, 480]]) - _aruco_detector = cv2.aruco.ArucoDetector( - cv2.aruco.getPredefinedDictionary(cv2.aruco.DICT_ARUCO_ORIGINAL), - cv2.aruco.DetectorParameters()) + try: + _aruco_detector = cv2.aruco.ArucoDetector( + cv2.aruco.getPredefinedDictionary(cv2.aruco.DICT_ARUCO_ORIGINAL), + cv2.aruco.DetectorParameters()) + except AttributeError: + _aruco_dict = cv2.aruco.Dictionary_get(cv2.aruco.DICT_ARUCO_ORIGINAL) + _aruco_parameters = cv2.aruco.DetectorParameters_create() + _face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_frontalface_default.xml') diff --git a/coderbot/main.py b/coderbot/main.py index 012f3d08..f7959571 100644 --- a/coderbot/main.py +++ b/coderbot/main.py @@ -5,7 +5,6 @@ import os import logging import logging.handlers -import picamera import connexion from connexion.options import SwaggerUIOptions @@ -78,10 +77,11 @@ def run_server(): logging.warning("Audio not present") try: + logging.info("starting camera") cam = Camera.get_instance() Motion.get_instance() - except picamera.exc.PiCameraError: - logging.warning("Camera not present") + except Exception as e: + logging.warning("Camera not present", str(e)) CNNManager.get_instance() EventManager.get_instance("coderbot") diff --git a/requirements.txt b/requirements.txt index 3ced7d94..0d917d84 100644 --- a/requirements.txt +++ b/requirements.txt @@ -24,5 +24,4 @@ protobuf==4.25.2 opencv-contrib-python-headless==4.8.1.78 tflite-runtime pytesseract==0.3.10 -picamera==1.13 pyzbar==0.1.9 From 0afc19952ab05e28decb762c0bcf2a59020b2982 Mon Sep 17 00:00:00 2001 From: previ Date: Tue, 2 Apr 2024 23:03:45 +0100 Subject: [PATCH 46/65] wip mocking picamera2 --- data/media/VIDvideo_test_thumb.jpg | 0 stub/picamera/__init__.py | 3 -- stub/picamera2/__init__.py | 2 ++ stub/{picamera => picamera2}/camera.py | 2 +- stub/picamera2/encoders.py | 10 ++++++ stub/{picamera => picamera2}/exc.py | 0 stub/picamera2/outputs.py | 10 ++++++ test-reports/test_report.txt | 7 ++++ test/camera_test.py | 34 ++++++++++---------- test/{picamera_mock.py => picamera2_mock.py} | 19 ++++++++++- 10 files changed, 65 insertions(+), 22 deletions(-) create mode 100644 data/media/VIDvideo_test_thumb.jpg delete mode 100755 stub/picamera/__init__.py create mode 100755 stub/picamera2/__init__.py rename stub/{picamera => picamera2}/camera.py (51%) create mode 100644 stub/picamera2/encoders.py rename stub/{picamera => picamera2}/exc.py (100%) create mode 100644 stub/picamera2/outputs.py create mode 100644 test-reports/test_report.txt rename test/{picamera_mock.py => picamera2_mock.py} (87%) diff --git a/data/media/VIDvideo_test_thumb.jpg b/data/media/VIDvideo_test_thumb.jpg new file mode 100644 index 00000000..e69de29b diff --git a/stub/picamera/__init__.py b/stub/picamera/__init__.py deleted file mode 100755 index 031aa673..00000000 --- a/stub/picamera/__init__.py +++ /dev/null @@ -1,3 +0,0 @@ -from picamera.exc import PiCameraError -from picamera.camera import PiCamera - diff --git a/stub/picamera2/__init__.py b/stub/picamera2/__init__.py new file mode 100755 index 00000000..cfa6446f --- /dev/null +++ b/stub/picamera2/__init__.py @@ -0,0 +1,2 @@ +from picamera2.camera import Picamera2 + diff --git a/stub/picamera/camera.py b/stub/picamera2/camera.py similarity index 51% rename from stub/picamera/camera.py rename to stub/picamera2/camera.py index e2fc5123..df212b74 100755 --- a/stub/picamera/camera.py +++ b/stub/picamera2/camera.py @@ -1,4 +1,4 @@ -from picamera_mock import PiCameraMock as PiCamera +from picamera2_mock import Picamera2Mock as Picamera2 class array(object): def __init(self): diff --git a/stub/picamera2/encoders.py b/stub/picamera2/encoders.py new file mode 100644 index 00000000..b3250080 --- /dev/null +++ b/stub/picamera2/encoders.py @@ -0,0 +1,10 @@ +class Encoder(): + pass + +class MJPEGEncoder(Encoder): + def __init__(self, bitrate): + pass + +class H264Encoder(Encoder): + def __init__(self, bitrate=100000): + pass diff --git a/stub/picamera/exc.py b/stub/picamera2/exc.py similarity index 100% rename from stub/picamera/exc.py rename to stub/picamera2/exc.py diff --git a/stub/picamera2/outputs.py b/stub/picamera2/outputs.py new file mode 100644 index 00000000..1810b172 --- /dev/null +++ b/stub/picamera2/outputs.py @@ -0,0 +1,10 @@ +class Output(): + pass + +class FileOutput(Output): + def __init__(self, outout): + pass + +class FfmpegOutput(Output): + def __init__(video_filename): + pass \ No newline at end of file diff --git a/test-reports/test_report.txt b/test-reports/test_report.txt new file mode 100644 index 00000000..368bd514 --- /dev/null +++ b/test-reports/test_report.txt @@ -0,0 +1,7 @@ +WARNING:root:tensorflow not available (for training) +WARNING:root:tensorflow not available (for inference) +.. +---------------------------------------------------------------------- +Ran 2 tests in 0.610s + +OK diff --git a/test/camera_test.py b/test/camera_test.py index 523f2c4b..08d19a68 100755 --- a/test/camera_test.py +++ b/test/camera_test.py @@ -1,7 +1,7 @@ import unittest import time import os -import picamera_mock +import picamera2_mock import picamera import camera import config @@ -9,33 +9,33 @@ class CameraTest(unittest.TestCase): def setUp(self): config.Config.read() - picamera.PiCamera = picamera_mock.PiCameraMock + picamera.Picamera2 = picamera2_mock.Picamera2Mock self.cam = camera.Camera.get_instance() def tearDown(self): self.cam.exit() camera.Camera._instance = None - def test_take_picture_jpeg(self): - pic = self.cam.get_image_jpeg() - self.assertTrue(pic is not None) + # def test_take_picture_jpeg(self): + # pic = self.cam.get_image_jpeg() + # self.assertTrue(pic is not None) def test_take_picture_bgr(self): pic = self.cam.get_image() self.assertTrue(pic is not None) - def test_video_rec(self): - video_filename = "video_test" - self.cam.video_rec(video_filename) - time.sleep(5) - self.cam.video_stop() - v = open("data/media/VID" + video_filename + ".mp4") - t = open("data/media/VID" + video_filename + "_thumb.jpg") - self.assertTrue(v is not None and t is not None) - v.close() - t.close() - os.remove("data/media/VID" + video_filename + ".mp4") - os.remove("data/media/VID" + video_filename + "_thumb.jpg") + # def test_video_rec(self): + # video_filename = "video_test" + # self.cam.video_rec(video_filename) + # time.sleep(5) + # self.cam.video_stop() + # v = open("data/media/VID" + video_filename + ".mp4") + # t = open("data/media/VID" + video_filename + "_thumb.jpg") + # self.assertTrue(v is not None and t is not None) + # v.close() + # t.close() + # os.remove("data/media/VID" + video_filename + ".mp4") + # os.remove("data/media/VID" + video_filename + "_thumb.jpg") def test_find_color(self): color = 'ff0000' diff --git a/test/picamera_mock.py b/test/picamera2_mock.py similarity index 87% rename from test/picamera_mock.py rename to test/picamera2_mock.py index 546b9167..9e875f63 100755 --- a/test/picamera_mock.py +++ b/test/picamera2_mock.py @@ -9,7 +9,7 @@ logger = logging.getLogger() -class PiCameraMock(object): +class Picamera2Mock(object): """Implements PiCamera mock class PiCamera is the library used to access the integrated Camera, this mock class emulates the capture functions in order to test the streamer loop. """ @@ -27,6 +27,11 @@ def __init__(self): self.images["mjpeg"] = image_jpeg self.images["bgra"] = cv2.cvtColor(numpy.array(PILImage.open(io.BytesIO(image_jpeg))), cv2.COLOR_RGB2BGRA) + def configure(self, configuration): + pass + + def create_video_configuration(self, main): + return {} class ImageRecorder(threading.Thread): def __init__(self, buffer, image): @@ -45,6 +50,9 @@ def __init__(self, buffer, video): self.buffer = buffer self.video = video + def start(self): + pass + def start_recording(self, buffer, format, splitter_port, quality=None, bitrate=None, resize=None): """mock start_recording""" print(format) @@ -69,6 +77,15 @@ def stop_recording(self, splitter_port): f.write(recorder.video) f.close() + def start_encoder(self, encoder): + pass + + def stop_encoder(self, encoders): + pass + + def capture_buffer(self): + return self.images["bgra"] + def close(): """mock close""" pass From a7bfef4c5ea52a06d6a866f5f136cba995e91352 Mon Sep 17 00:00:00 2001 From: previ Date: Tue, 2 Apr 2024 23:04:16 +0100 Subject: [PATCH 47/65] wip mocking picamera2rm --- data/media/VIDvideo_test_thumb.jpg | 0 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 data/media/VIDvideo_test_thumb.jpg diff --git a/data/media/VIDvideo_test_thumb.jpg b/data/media/VIDvideo_test_thumb.jpg deleted file mode 100644 index e69de29b..00000000 From d54fb150202142b71ee480564fca6f7cf44edad2 Mon Sep 17 00:00:00 2001 From: previ Date: Tue, 2 Apr 2024 23:04:43 +0100 Subject: [PATCH 48/65] wip mocking picamera2rm --- test-reports/test_report.txt | 7 ------- 1 file changed, 7 deletions(-) delete mode 100644 test-reports/test_report.txt diff --git a/test-reports/test_report.txt b/test-reports/test_report.txt deleted file mode 100644 index 368bd514..00000000 --- a/test-reports/test_report.txt +++ /dev/null @@ -1,7 +0,0 @@ -WARNING:root:tensorflow not available (for training) -WARNING:root:tensorflow not available (for inference) -.. ----------------------------------------------------------------------- -Ran 2 tests in 0.610s - -OK From 370ce5694b13a764df71db0c8c6e8ecf5298678e Mon Sep 17 00:00:00 2001 From: previ Date: Tue, 2 Apr 2024 23:19:42 +0100 Subject: [PATCH 49/65] wip mocking picamera2rm --- coderbot/v1.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/coderbot/v1.yml b/coderbot/v1.yml index a3c8872f..4e75ccf2 100644 --- a/coderbot/v1.yml +++ b/coderbot/v1.yml @@ -502,12 +502,13 @@ paths: type: string minLength: 1 maxLength: 256 + pattern: '^[a-zA-ZA-zÀ-ú0-9-_ ]+$' description: text to be "spoken" locale: type: string minLength: 1 maxLength: 2 - pattern: '^[a-zA-ZA-zÀ-ú0-9-_ ]+$' + pattern: '^[a-zA-Z]+$' description: locale of text to be "spoken" required: - text From 732efd72f82290a9f31d6769d1d05c1b2cda8e7a Mon Sep 17 00:00:00 2001 From: previ Date: Tue, 2 Apr 2024 23:27:35 +0100 Subject: [PATCH 50/65] wip mocking picamera2rm --- coderbot/v1.yml | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/coderbot/v1.yml b/coderbot/v1.yml index 4e75ccf2..74a78a14 100644 --- a/coderbot/v1.yml +++ b/coderbot/v1.yml @@ -170,6 +170,9 @@ paths: required: true schema: type: string + pattern: '^[a-zA-ZA-zÀ-ú0-9-_ ]+$' + minLength: 1 + maxLength: 128 tags: - Program management responses: @@ -184,6 +187,9 @@ paths: required: true schema: type: string + pattern: '^[a-zA-ZA-zÀ-ú0-9-_ ]+$' + minLength: 1 + maxLength: 128 responses: 200: description: "ok" @@ -200,6 +206,9 @@ paths: required: true schema: type: string + pattern: '^[a-zA-ZA-zÀ-ú0-9-_ ]+$' + minLength: 1 + maxLength: 128 requestBody: description: Program object required: true @@ -225,6 +234,9 @@ paths: required: true schema: type: string + pattern: '^[a-zA-ZA-zÀ-ú0-9-_ ]+$' + minLength: 1 + maxLength: 128 requestBody: description: Program object required: true @@ -248,6 +260,9 @@ paths: required: true schema: type: string + pattern: '^[a-zA-ZA-zÀ-ú0-9-_ ]+$' + minLength: 1 + maxLength: 128 responses: 200: description: "ok" @@ -264,6 +279,9 @@ paths: required: true schema: type: string + pattern: '^[a-zA-ZA-zÀ-ú0-9-_ ]+$' + minLength: 1 + maxLength: 128 responses: 200: description: "ok" @@ -304,6 +322,9 @@ paths: required: true schema: type: string + pattern: '^[a-zA-ZA-zÀ-ú0-9-_ ]+$' + minLength: 1 + maxLength: 128 - name: default in: query schema: @@ -323,6 +344,9 @@ paths: required: true schema: type: string + pattern: '^[a-zA-ZA-zÀ-ú0-9-_ ]+$' + minLength: 1 + maxLength: 128 requestBody: description: Update Activity required: true @@ -346,6 +370,9 @@ paths: required: true schema: type: string + pattern: '^[a-zA-ZA-zÀ-ú0-9-_ ]+$' + minLength: 1 + maxLength: 128 responses: 200: description: "ok" @@ -386,6 +413,9 @@ paths: required: true schema: type: string + pattern: '^[a-zA-ZA-zÀ-ú0-9-_ ]+$' + minLength: 1 + maxLength: 128 tags: - Music extensions responses: @@ -587,6 +617,9 @@ paths: required: true schema: type: string + pattern: '^[a-zA-ZA-zÀ-ú0-9-_ ]+$' + minLength: 1 + maxLength: 128 tags: - CNN Models responses: @@ -601,6 +634,7 @@ paths: required: true schema: type: string + pattern: '^[a-zA-ZA-zÀ-ú0-9-_ ]+$' tags: - CNN Models responses: @@ -680,6 +714,7 @@ components: properties: name: type: string + pattern: '^[a-zA-ZA-zÀ-ú0-9-_ ]+$' tag: type: string Program: @@ -710,6 +745,7 @@ components: type: string minLength: 1 maxLength: 128 + pattern: '^[a-zA-ZA-zÀ-ú0-9-_ ]+$' description: type: string minLength: 0 From 50347107771a64d06e1e7cb5e12faf3418b04876 Mon Sep 17 00:00:00 2001 From: previ Date: Wed, 3 Apr 2024 09:06:41 +0200 Subject: [PATCH 51/65] python3-picamera2 --- docker/Dockerfile | 3 ++- docker/Dockerfile.arm64 | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/docker/Dockerfile b/docker/Dockerfile index 179d82ae..4103a143 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -20,7 +20,8 @@ RUN install_packages \ libatlas-base-dev \ libhdf5-dev \ alsa-utils \ - espeak + espeak \ + python3-picamera2 RUN install_packages \ libharfbuzz-bin \ webp \ diff --git a/docker/Dockerfile.arm64 b/docker/Dockerfile.arm64 index fdc1d216..ff358d6c 100644 --- a/docker/Dockerfile.arm64 +++ b/docker/Dockerfile.arm64 @@ -20,7 +20,8 @@ RUN install_packages \ libatlas-base-dev \ libhdf5-dev \ alsa-utils \ - espeak + espeak \ + python3-picamera2 RUN install_packages \ libharfbuzz-bin \ webp \ From faa8d75a10596dfb2d56f6b3a8a43100a0019834 Mon Sep 17 00:00:00 2001 From: previ Date: Wed, 3 Apr 2024 23:21:44 +0200 Subject: [PATCH 52/65] picamera2 in pip --- docker/Dockerfile | 3 +-- docker/Dockerfile.arm64 | 4 ++-- requirements.txt | 2 +- 3 files changed, 4 insertions(+), 5 deletions(-) diff --git a/docker/Dockerfile b/docker/Dockerfile index 4103a143..179d82ae 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -20,8 +20,7 @@ RUN install_packages \ libatlas-base-dev \ libhdf5-dev \ alsa-utils \ - espeak \ - python3-picamera2 + espeak RUN install_packages \ libharfbuzz-bin \ webp \ diff --git a/docker/Dockerfile.arm64 b/docker/Dockerfile.arm64 index ff358d6c..63252b63 100644 --- a/docker/Dockerfile.arm64 +++ b/docker/Dockerfile.arm64 @@ -1,4 +1,4 @@ -FROM balenalib/raspberrypi3-64:bookworm-20240304 +FROM balenalib/raspberrypi3-64:bookworm-20240401 ENV QEMU_CPU=max ENV DEBIAN_FRONTEND=noninteractive @@ -21,7 +21,7 @@ RUN install_packages \ libhdf5-dev \ alsa-utils \ espeak \ - python3-picamera2 + libcap-dev RUN install_packages \ libharfbuzz-bin \ webp \ diff --git a/requirements.txt b/requirements.txt index 32259bfc..ad24be84 100644 --- a/requirements.txt +++ b/requirements.txt @@ -24,5 +24,5 @@ protobuf==4.25.2 opencv-contrib-python-headless==4.9.0.80 tflite-runtime pytesseract==0.3.10 -picamera==1.13 +picamera2==0.3.17 pyzbar==0.1.9 From df7995e00f0d42a6baa2cb8f1bb4058d40929f2e Mon Sep 17 00:00:00 2001 From: previ Date: Fri, 5 Apr 2024 22:03:29 +0200 Subject: [PATCH 53/65] picamera2 --- docker/Dockerfile | 5 +++++ docker/Dockerfile.arm64 | 8 ++++++-- requirements.txt | 1 - 3 files changed, 11 insertions(+), 3 deletions(-) diff --git a/docker/Dockerfile b/docker/Dockerfile index 179d82ae..0c2619bd 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -3,6 +3,11 @@ FROM balenalib/raspberrypi3:bookworm-20240227 ENV QEMU_CPU=max ENV DEBIAN_FRONTEND=noninteractive +RUN install_packages gnupg + +RUN echo "deb http://archive.raspberrypi.org/debian/ bookworm main" > /etc/apt/sources.list.d/raspi.list \ + && apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 82B129927FA3303E + RUN install_packages \ build-essential \ procps \ diff --git a/docker/Dockerfile.arm64 b/docker/Dockerfile.arm64 index 63252b63..36b50231 100644 --- a/docker/Dockerfile.arm64 +++ b/docker/Dockerfile.arm64 @@ -3,6 +3,11 @@ FROM balenalib/raspberrypi3-64:bookworm-20240401 ENV QEMU_CPU=max ENV DEBIAN_FRONTEND=noninteractive +RUN install_packages gnupg + +RUN echo "deb http://archive.raspberrypi.org/debian/ bookworm main" > /etc/apt/sources.list.d/raspi.list \ + && apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 82B129927FA3303E + RUN install_packages \ build-essential \ procps \ @@ -20,8 +25,7 @@ RUN install_packages \ libatlas-base-dev \ libhdf5-dev \ alsa-utils \ - espeak \ - libcap-dev + espeak RUN install_packages \ libharfbuzz-bin \ webp \ diff --git a/requirements.txt b/requirements.txt index ad24be84..bf8caa37 100644 --- a/requirements.txt +++ b/requirements.txt @@ -24,5 +24,4 @@ protobuf==4.25.2 opencv-contrib-python-headless==4.9.0.80 tflite-runtime pytesseract==0.3.10 -picamera2==0.3.17 pyzbar==0.1.9 From 76e6f765eabe9ef3f615712149d0215bd60f994d Mon Sep 17 00:00:00 2001 From: previ Date: Fri, 5 Apr 2024 22:07:26 +0200 Subject: [PATCH 54/65] python-picamera2 --- docker/Dockerfile | 3 ++- docker/Dockerfile.arm64 | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/docker/Dockerfile b/docker/Dockerfile index 0c2619bd..4b97bf9e 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -25,7 +25,8 @@ RUN install_packages \ libatlas-base-dev \ libhdf5-dev \ alsa-utils \ - espeak + espeak \ + python-picamera2 RUN install_packages \ libharfbuzz-bin \ webp \ diff --git a/docker/Dockerfile.arm64 b/docker/Dockerfile.arm64 index 36b50231..245ec79d 100644 --- a/docker/Dockerfile.arm64 +++ b/docker/Dockerfile.arm64 @@ -25,7 +25,8 @@ RUN install_packages \ libatlas-base-dev \ libhdf5-dev \ alsa-utils \ - espeak + espeak \ + python-picamera2 RUN install_packages \ libharfbuzz-bin \ webp \ From ef0479bbda9d8a565d18547a6b491f4163bc974e Mon Sep 17 00:00:00 2001 From: previ Date: Fri, 5 Apr 2024 22:13:36 +0200 Subject: [PATCH 55/65] python3-picamera2 --- docker/Dockerfile | 2 +- docker/Dockerfile.arm64 | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docker/Dockerfile b/docker/Dockerfile index 4b97bf9e..5bd9c22a 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -26,7 +26,7 @@ RUN install_packages \ libhdf5-dev \ alsa-utils \ espeak \ - python-picamera2 + python3-picamera2 RUN install_packages \ libharfbuzz-bin \ webp \ diff --git a/docker/Dockerfile.arm64 b/docker/Dockerfile.arm64 index 245ec79d..e1f9a79f 100644 --- a/docker/Dockerfile.arm64 +++ b/docker/Dockerfile.arm64 @@ -26,7 +26,7 @@ RUN install_packages \ libhdf5-dev \ alsa-utils \ espeak \ - python-picamera2 + python3-picamera2 RUN install_packages \ libharfbuzz-bin \ webp \ From d3f04c7a80657ddf6357d6346fca1d3aee158cfd Mon Sep 17 00:00:00 2001 From: previ Date: Fri, 5 Apr 2024 23:21:16 +0200 Subject: [PATCH 56/65] python3-libcamera --- docker/Dockerfile | 1 + docker/Dockerfile.arm64 | 1 + 2 files changed, 2 insertions(+) diff --git a/docker/Dockerfile b/docker/Dockerfile index 5bd9c22a..5dc6321f 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -26,6 +26,7 @@ RUN install_packages \ libhdf5-dev \ alsa-utils \ espeak \ + python3-libcamera \ python3-picamera2 RUN install_packages \ libharfbuzz-bin \ diff --git a/docker/Dockerfile.arm64 b/docker/Dockerfile.arm64 index e1f9a79f..363e6a04 100644 --- a/docker/Dockerfile.arm64 +++ b/docker/Dockerfile.arm64 @@ -26,6 +26,7 @@ RUN install_packages \ libhdf5-dev \ alsa-utils \ espeak \ + python3-libcamera \ python3-picamera2 RUN install_packages \ libharfbuzz-bin \ From 5bbbff79112631a9db5565d695bb41484f19b1a8 Mon Sep 17 00:00:00 2001 From: previ Date: Sat, 6 Apr 2024 23:22:43 +0200 Subject: [PATCH 57/65] wip --- docker/Dockerfile | 8 +++++++- docker/Dockerfile.arm64 | 8 +++++++- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/docker/Dockerfile b/docker/Dockerfile index c2b978a4..e55cab2e 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -3,6 +3,11 @@ FROM coderbot/raspberrypi3:bullseye-20240227 ENV QEMU_CPU=max ENV DEBIAN_FRONTEND=noninteractive +RUN install_packages gnupg + +RUN echo "deb http://archive.raspberrypi.org/debian/ bullseye main" > /etc/apt/sources.list.d/raspi.list \ + && apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 82B129927FA3303E + RUN install_packages \ libraspberrypi0 \ procps \ @@ -20,7 +25,8 @@ RUN install_packages \ libatlas-base-dev \ libhdf5-dev \ alsa-utils \ - espeak + espeak \ + python3-picamera2 RUN install_packages \ libharfbuzz-bin \ libwebp6 \ diff --git a/docker/Dockerfile.arm64 b/docker/Dockerfile.arm64 index 6d022e69..bc1d1f91 100644 --- a/docker/Dockerfile.arm64 +++ b/docker/Dockerfile.arm64 @@ -3,6 +3,11 @@ FROM coderbot/raspberrypi3-64:bullseye-20240304 ENV QEMU_CPU=max ENV DEBIAN_FRONTEND=noninteractive +RUN install_packages gnupg + +RUN echo "deb http://archive.raspberrypi.org/debian/ bullseye main" > /etc/apt/sources.list.d/raspi.list \ + && apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 82B129927FA3303E + RUN install_packages \ build-essential \ libraspberrypi0 \ @@ -21,7 +26,8 @@ RUN install_packages \ libatlas-base-dev \ libhdf5-dev \ alsa-utils \ - espeak + espeak \ + python3-picamera2 RUN install_packages \ libharfbuzz-bin \ libwebp6 \ From cd40200fa2db2e881afae11b469dba920ed21f4b Mon Sep 17 00:00:00 2001 From: previ Date: Sat, 6 Apr 2024 23:25:11 +0200 Subject: [PATCH 58/65] wip --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index 0d917d84..bf8caa37 100644 --- a/requirements.txt +++ b/requirements.txt @@ -21,7 +21,7 @@ grpcio==1.62.1 numpy==1.26.4 Pillow==10.2.0 protobuf==4.25.2 -opencv-contrib-python-headless==4.8.1.78 +opencv-contrib-python-headless==4.9.0.80 tflite-runtime pytesseract==0.3.10 pyzbar==0.1.9 From 050adf4600a2f0694dc38cf43a0ae09dcbc8f772 Mon Sep 17 00:00:00 2001 From: previ Date: Sat, 6 Apr 2024 23:32:59 +0200 Subject: [PATCH 59/65] wip --- .github/workflows/build_backend.yml | 3 --- docker/Dockerfile | 5 ----- docker/Dockerfile.arm64 | 5 ----- 3 files changed, 13 deletions(-) diff --git a/.github/workflows/build_backend.yml b/.github/workflows/build_backend.yml index 365fc86d..203f92c1 100644 --- a/.github/workflows/build_backend.yml +++ b/.github/workflows/build_backend.yml @@ -42,9 +42,6 @@ jobs: strategy: matrix: architecture: - - arch: linux/arm/v7 - dockerfile: Dockerfile - tag: armv7 - arch: linux/arm64 dockerfile: Dockerfile.arm64 tag: arm64 diff --git a/docker/Dockerfile b/docker/Dockerfile index 01d8ee13..4103a143 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -3,11 +3,6 @@ FROM balenalib/raspberrypi3:bookworm-20240227 ENV QEMU_CPU=max ENV DEBIAN_FRONTEND=noninteractive -RUN install_packages gnupg - -RUN echo "deb http://archive.raspberrypi.org/debian/ bullseye main" > /etc/apt/sources.list.d/raspi.list \ - && apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 82B129927FA3303E - RUN install_packages \ build-essential \ procps \ diff --git a/docker/Dockerfile.arm64 b/docker/Dockerfile.arm64 index f34e1dce..4793edba 100644 --- a/docker/Dockerfile.arm64 +++ b/docker/Dockerfile.arm64 @@ -3,11 +3,6 @@ FROM balenalib/raspberrypi3-64:bookworm-20240401 ENV QEMU_CPU=max ENV DEBIAN_FRONTEND=noninteractive -RUN install_packages gnupg - -RUN echo "deb http://archive.raspberrypi.org/debian/ bullseye main" > /etc/apt/sources.list.d/raspi.list \ - && apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 82B129927FA3303E - RUN install_packages \ build-essential \ procps \ From b72b64784efa98ab8b1c0bdd8407f9b4dd3c807a Mon Sep 17 00:00:00 2001 From: previ Date: Sun, 7 Apr 2024 10:39:41 +0200 Subject: [PATCH 60/65] bullseye-20240401 --- docker/Dockerfile | 2 +- docker/Dockerfile.arm64 | 7 ++++++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/docker/Dockerfile b/docker/Dockerfile index 4103a143..ae3dd1bc 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -1,4 +1,4 @@ -FROM balenalib/raspberrypi3:bookworm-20240227 +FROM balenalib/raspberrypi3:bullseye-20240401 ENV QEMU_CPU=max ENV DEBIAN_FRONTEND=noninteractive diff --git a/docker/Dockerfile.arm64 b/docker/Dockerfile.arm64 index 4793edba..c5f5e37f 100644 --- a/docker/Dockerfile.arm64 +++ b/docker/Dockerfile.arm64 @@ -1,8 +1,13 @@ -FROM balenalib/raspberrypi3-64:bookworm-20240401 +FROM balenalib/raspberrypi3-64:bullseye-20240401 ENV QEMU_CPU=max ENV DEBIAN_FRONTEND=noninteractive +RUN install_packages gnupg + +RUN echo "deb http://archive.raspberrypi.org/debian/ bullseye main" > /etc/apt/sources.list.d/raspi.list \ + && apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 82B129927FA3303E + RUN install_packages \ build-essential \ procps \ From 3dc0579b5531b7b12d5d117e1339751ed1ce1381 Mon Sep 17 00:00:00 2001 From: previ Date: Sun, 7 Apr 2024 10:52:25 +0200 Subject: [PATCH 61/65] libavcodec-extra58 --- docker/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker/Dockerfile b/docker/Dockerfile index ae3dd1bc..4e843341 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -27,7 +27,7 @@ RUN install_packages \ webp \ libilmbase-dev \ libgstreamer1.0-0 \ - libavcodec-extra59 \ + libavcodec-extra58 \ libavformat59 RUN install_packages \ libopencv-dev \ From 75d68da1c3d27e68aa811ac66d07353bd1cc3a00 Mon Sep 17 00:00:00 2001 From: previ Date: Sun, 7 Apr 2024 10:53:04 +0200 Subject: [PATCH 62/65] libavcodec-extra58 --- docker/Dockerfile.arm64 | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docker/Dockerfile.arm64 b/docker/Dockerfile.arm64 index c5f5e37f..43ac29f3 100644 --- a/docker/Dockerfile.arm64 +++ b/docker/Dockerfile.arm64 @@ -29,11 +29,11 @@ RUN install_packages \ python3-picamera2 RUN install_packages \ libharfbuzz-bin \ - webp \ - libilmbase-dev \ + libwebp6 \ + libilmbase25 \ libgstreamer1.0-0 \ - libavcodec-extra59 \ - libavformat59 + libavcodec-extra58 \ + libavformat58 RUN install_packages \ libopencv-dev \ zbar-tools \ From e47293de2680945e3777103bf9e7780d682fbf46 Mon Sep 17 00:00:00 2001 From: previ Date: Sun, 7 Apr 2024 14:45:07 +0200 Subject: [PATCH 63/65] wip --- docker/Dockerfile.arm64 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker/Dockerfile.arm64 b/docker/Dockerfile.arm64 index 43ac29f3..6a5c52ac 100644 --- a/docker/Dockerfile.arm64 +++ b/docker/Dockerfile.arm64 @@ -52,7 +52,7 @@ RUN install_packages \ ENV READTHEDOCS=True ADD requirements.txt /tmp/. -RUN pip install --break-system-packages --upgrade pip && \ +RUN pip install --upgrade pip && \ pip install --no-cache-dir --break-system-packages -r /tmp/requirements.txt RUN mkdir -p /coderbot && \ From 0d8fb94a9bc01eb4192515604e11a1f0c3a5c86f Mon Sep 17 00:00:00 2001 From: previ Date: Sun, 7 Apr 2024 19:12:59 +0200 Subject: [PATCH 64/65] libraspberrypi0 --- docker/Dockerfile | 1 + docker/Dockerfile.arm64 | 1 + 2 files changed, 2 insertions(+) diff --git a/docker/Dockerfile b/docker/Dockerfile index 4e843341..a48d4ab7 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -4,6 +4,7 @@ ENV QEMU_CPU=max ENV DEBIAN_FRONTEND=noninteractive RUN install_packages \ + libraspberrypi0 \ build-essential \ procps \ sudo \ diff --git a/docker/Dockerfile.arm64 b/docker/Dockerfile.arm64 index 6a5c52ac..90db705c 100644 --- a/docker/Dockerfile.arm64 +++ b/docker/Dockerfile.arm64 @@ -9,6 +9,7 @@ RUN echo "deb http://archive.raspberrypi.org/debian/ bullseye main" > /etc/apt/s && apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 82B129927FA3303E RUN install_packages \ + libraspberrypi0 \ build-essential \ procps \ sudo \ From 585835f1c19e7a5081a812f84eb517a51217a606 Mon Sep 17 00:00:00 2001 From: previ Date: Sun, 16 Jun 2024 14:13:06 +0100 Subject: [PATCH 65/65] fix init CoderBot --- coderbot/api.py | 11 +---------- coderbot/coderbot.py | 4 +++- coderbot/main.py | 12 ++++++++++-- coderbot/program.py | 13 +++++++------ 4 files changed, 21 insertions(+), 19 deletions(-) diff --git a/coderbot/api.py b/coderbot/api.py index 193e07ff..a5021a8c 100644 --- a/coderbot/api.py +++ b/coderbot/api.py @@ -26,16 +26,7 @@ BUTTON_PIN = 16 -config = Config.read() -bot = CoderBot.get_instance(motor_trim_factor=float(config.get('move_motor_trim', 1.0)), - motor_max_power=int(config.get('motor_max_power', 100)), - motor_min_power=int(config.get('motor_min_power', 0)), - hw_version=config.get('hardware_version'), - pid_params=(float(config.get('pid_kp', 1.0)), - float(config.get('pid_kd', 0.1)), - float(config.get('pid_ki', 0.01)), - float(config.get('pid_max_speed', 200)), - float(config.get('pid_sample_time', 0.01)))) +bot = CoderBot.get_instance() audio_device = Audio.get_instance() cam = Camera.get_instance() diff --git a/coderbot/coderbot.py b/coderbot/coderbot.py index 37877506..d445a1b3 100644 --- a/coderbot/coderbot.py +++ b/coderbot/coderbot.py @@ -157,8 +157,10 @@ def exit(self): s.cancel() @classmethod - def get_instance(cls, motor_trim_factor=1.0, motor_max_power=100, motor_min_power=0, hw_version="5", pid_params=(0.8, 0.1, 0.01, 200, 0.01)): + def get_instance(cls, motor_trim_factor=1.0, motor_max_power=100, motor_min_power=0, hw_version="5", pid_params=(0.8, 0.1, 0.01, 200, 0.01), from_defaults=True): if not cls.the_bot: + if from_defaults: + raise ValueError("incorrect CoderBot initialisation") cls.the_bot = CoderBot(motor_trim_factor=motor_trim_factor, motor_max_power= motor_max_power, motor_min_power=motor_min_power, hw_version=hw_version, pid_params=pid_params) return cls.the_bot diff --git a/coderbot/main.py b/coderbot/main.py index f7959571..ad8d742c 100644 --- a/coderbot/main.py +++ b/coderbot/main.py @@ -66,8 +66,16 @@ def run_server(): try: try: app.bot_config = Config.read() - - bot = CoderBot.get_instance() + bot = CoderBot.get_instance(motor_trim_factor=float(app.bot_config.get('move_motor_trim', 1.0)), + motor_max_power=int(app.bot_config.get('motor_max_power', 100)), + motor_min_power=int(app.bot_config.get('motor_min_power', 0)), + hw_version=app.bot_config.get('hardware_version'), + pid_params=(float(app.bot_config.get('pid_kp', 1.0)), + float(app.bot_config.get('pid_kd', 0.1)), + float(app.bot_config.get('pid_ki', 0.01)), + float(app.bot_config.get('pid_max_speed', 200)), + float(app.bot_config.get('pid_sample_time', 0.01))), + from_defaults=False) try: audio_device = Audio.get_instance() diff --git a/coderbot/program.py b/coderbot/program.py index d76395fd..bc66fc3e 100644 --- a/coderbot/program.py +++ b/coderbot/program.py @@ -87,12 +87,13 @@ def __init__(self): for filename in filenames: if PROGRAM_PREFIX in filename: program_name = filename[len(PROGRAM_PREFIX):-len(PROGRAM_SUFFIX)] - logging.info("adding program %s in path %s as default %r", program_name, dirname, ("default" in dirname)) - with open(os.path.join(dirname, filename), "r") as f: - program_dict = json.load(f) - program_dict["default"] = "default" in dirname - program = Program.from_dict(program_dict) - self.save(program) + if self._programs.search(query.name == program_name) == []: + logging.info("adding program %s in path %s as default %r", program_name, dirname, ("default" in dirname)) + with open(os.path.join(dirname, filename), "r") as f: + program_dict = json.load(f) + program_dict["default"] = "default" in dirname + program = Program.from_dict(program_dict) + self.save(program) @classmethod def get_instance(cls):