Saltar al contenido principal

Placas Compatibles por la Comunidad

Acerca de las Placas Compatibles por la Comunidad​

Existen muchas SBC (computadoras de placa única) que tienen una comunidad apasionada detrás de ellas, como el Jetson Nano por ejemplo. Estas SBC a menudo tienen hardware dedicado que puede acelerar enormemente las cargas de trabajo de IA y video de SecureVu, pero este hardware requiere marcos de trabajo muy específicos para interactuar con él.

Esto significa que sería muy difícil para los mantenedores de SecureVu dar soporte a estas diferentes placas, especialmente dado que la base de usuarios es relativamente pequeña.

El marco de soporte para placas comunitarias permite que un usuario de la comunidad sea el propietario del código para agregar soporte para una SBC u otro detector, proporcionando el código, el mantenimiento y el soporte al usuario.

Comenzar​

  1. Sigue los pasos de la documentación principal de contribución.
  2. Crea un nuevo tipo de compilación bajo docker/
  3. Haz que la compilación funcione como se espera; todos los cambios específicos de la placa deben realizarse dentro del archivo Docker específico de la placa.

Estructura Requerida​

Cada placa tendrá diferentes requisitos de compilación, se ejecutará en diferentes arquitecturas, etc., sin embargo hay un conjunto de archivos que todas las placas necesitarán.

Archivo Bake .hcl​

El archivo board.hcl es lo que permite que la compilación de placas comunitarias se construya usando la compilación principal como caché. Esto permite una base limpia y tiempos de compilación más rápidos. Para obtener más información sobre el formato y las opciones disponibles en el archivo Bake, consulta la documentación oficial de Buildx Bake

Archivo Make de la Placa​

El archivo board.mk es lo que permite que los objetivos Make automatizados y configurables se incluyan en el archivo Make principal. A continuación se muestra el formato general para este archivo:

BOARDS += board # Replace `board` with the board suffix ex: rpi

local-rpi: version
docker buildx bake --load --file=docker/board/board.hcl --set board.tags=securevu:latest-board bake-target # Replace `board` with the board suffix ex: rpi. Bake target is the target in the board.hcl file ex: board

build-rpi: version
docker buildx bake --file=docker/board/board.hcl --set board.tags=$(IMAGE_REPO):${GITHUB_REF_NAME}-$(COMMIT_HASH)-board bake-target # Replace `board` with the board suffix ex: rpi. Bake target is the target in the board.hcl file ex: board

push-rpi: build-rpi
docker buildx bake --push --file=docker/board/board.hcl --set board.tags=$(IMAGE_REPO):${GITHUB_REF_NAME}-$(COMMIT_HASH)-board bake-target # Replace `board` with the board suffix ex: rpi. Bake target is the target in the board.hcl file ex: board

Dockerfile​

El Dockerfile es lo que orquesta la compilación; esto variará considerablemente dependiendo de la placa, pero algunas partes son necesarias para que todo funcione. A continuación se muestran las partes requeridas del Dockerfile:

# syntax=docker/dockerfile:1.4

# https://askubuntu.com/questions/972516/debian-frontend-environment-variable
ARG DEBIAN_FRONTEND=noninteractive

# All board-specific work should be done with `deps` as the base
FROM deps AS board-deps

# do stuff specific
# to the board

# set workdir
WORKDIR /opt/securevu/

# copies base files from the main securevu build
COPY --from=rootfs / /

Otros Cambios Requeridos​

CI/CD​

Las imágenes para cada placa se compilarán para cada lanzamiento de SecureVu, esto se realiza en el archivo .github/workflows/ci.yml. El flujo de trabajo de compilación de la placa deberá agregarse aquí.

- name: Build and push board build
uses: docker/bake-action@v3
with:
push: true
targets: board # this is the target in the board.hcl file
files: docker/board/board.hcl # this should be updated with the actual board type
# the tags should be updated with the actual board types as well
# the community board builds should never push to cache, but it can pull from cache
set: |
board.tags=ghcr.io/${{ steps.lowercaseRepo.outputs.lowercase }}:${{ github.ref_name }}-${{ env.SHORT_SHA }}-board
*.cache-from=type=gha

Archivo de Propietarios de Código​

El archivo CODEOWNERS debe actualizarse para incluir docker/board junto con @user para cada usuario que sea propietario del código de esta placa.

Documentación

Como mínimo, la documentación de installation, object_detectors, hardware_acceleration_video y ffmpeg-presets debe actualizarse (si aplica) para reflejar la configuración de esta placa comunitaria.