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​
- Sigue los pasos de la documentación principal de contribución.
- Crea un nuevo tipo de compilación bajo
docker/ - 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.