diff --git a/.github/workflows/pull_request.yml b/.github/workflows/pull_request.yml index 34e613aa6..131863e97 100644 --- a/.github/workflows/pull_request.yml +++ b/.github/workflows/pull_request.yml @@ -44,3 +44,27 @@ jobs: - name: Test run: npm run test working-directory: ./web + + docker_tests_on_aarch64: + runs-on: ubuntu-latest + steps: + - name: Check out code + uses: actions/checkout@v2 + - name: Set up QEMU + uses: docker/setup-qemu-action@v1 + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v1 + - name: Build and run tests + run: make run_tests PLATFORM="linux/arm64/v8" ARCH="aarch64" + + docker_tests_on_amd64: + runs-on: ubuntu-latest + steps: + - name: Check out code + uses: actions/checkout@v2 + - name: Set up QEMU + uses: docker/setup-qemu-action@v1 + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v1 + - name: Build and run tests + run: make run_tests PLATFORM="linux/amd64" ARCH="amd64" diff --git a/Makefile b/Makefile index fb1a1447f..68e950c2c 100644 --- a/Makefile +++ b/Makefile @@ -3,7 +3,7 @@ default_target: amd64_frigate COMMIT_HASH := $(shell git log -1 --pretty=format:"%h"|tail -1) version: - echo "VERSION='0.10.0-$(COMMIT_HASH)'" > frigate/version.py + echo "VERSION='0.11.0-$(COMMIT_HASH)'" > frigate/version.py web: docker build --tag frigate-web --file docker/Dockerfile.web web/ @@ -59,4 +59,16 @@ armv7_frigate: version web armv7_all: armv7_wheels armv7_ffmpeg armv7_frigate -.PHONY: web +run_tests: + # PLATFORM: linux/arm64/v8 linux/amd64 or linux/arm/v7 + # ARCH: aarch64 amd64 or armv7 + @cat docker/Dockerfile.base docker/Dockerfile.$(ARCH) > docker/Dockerfile.test + @sed -i "s/FROM frigate-web as web/#/g" docker/Dockerfile.test + @sed -i "s/COPY --from=web \/opt\/frigate\/build web\//#/g" docker/Dockerfile.test + @sed -i "s/FROM frigate-base/#/g" docker/Dockerfile.test + @echo "" >> docker/Dockerfile.test + @echo "RUN python3 -m unittest" >> docker/Dockerfile.test + @docker buildx build --platform=$(PLATFORM) --tag frigate-base --build-arg NGINX_VERSION=1.0.2 --build-arg FFMPEG_VERSION=1.0.0 --build-arg ARCH=$(ARCH) --build-arg WHEELS_VERSION=1.0.3 --file docker/Dockerfile.test . + @rm docker/Dockerfile.test + +.PHONY: web run_tests diff --git a/docker/Dockerfile.dev b/docker/Dockerfile.dev index 41a3296c9..ba36d92e9 100644 --- a/docker/Dockerfile.dev +++ b/docker/Dockerfile.dev @@ -22,3 +22,5 @@ RUN pip3 install pylint black # Install Node 14 RUN curl -sL https://deb.nodesource.com/setup_14.x | bash - \ && apt-get install -y nodejs + +RUN npm install -g npm@latest diff --git a/docs/docs/configuration/advanced.md b/docs/docs/configuration/advanced.md index 18521b7d5..790b494f7 100644 --- a/docs/docs/configuration/advanced.md +++ b/docs/docs/configuration/advanced.md @@ -43,6 +43,11 @@ If you are storing your database on a network share (SMB, NFS, etc), you may get This may need to be in a custom location if network storage is used for the media folder. +```yaml +database: + path: /path/to/frigate.db +``` + ### `model` If using a custom model, the width and height will need to be specified. diff --git a/docs/docs/configuration/camera_specific.md b/docs/docs/configuration/camera_specific.md index b737a5605..465e0a5ce 100644 --- a/docs/docs/configuration/camera_specific.md +++ b/docs/docs/configuration/camera_specific.md @@ -19,6 +19,34 @@ output_args: rtmp: -c:v libx264 -an -f flv ``` +### JPEG Stream Cameras + +Cameras using a live changing jpeg image will need input parameters as below + +```yaml +input_args: +- -r +- 5 # << enter FPS here +- -stream_loop +- -1 +- -f +- image2 +- -avoid_negative_ts +- make_zero +- -fflags +- nobuffer +- -flags +- low_delay +- -strict +- experimental +- -fflags +- +genpts+discardcorrupt +- -use_wallclock_as_timestamps +- 1 +``` + +Outputting the stream will have the same args and caveats as per [MJPEG Cameras](#mjpeg-cameras) + ### RTMP Cameras The input parameters need to be adjusted for RTMP cameras @@ -61,8 +89,8 @@ cameras: roles: - detect detect: - width: 640 - height: 480 + width: 896 + height: 672 fps: 7 ``` diff --git a/docs/docs/configuration/index.md b/docs/docs/configuration/index.md index 5ce361198..5d8638745 100644 --- a/docs/docs/configuration/index.md +++ b/docs/docs/configuration/index.md @@ -159,8 +159,23 @@ detect: enabled: True # Optional: Number of frames without a detection before frigate considers an object to be gone. (default: 5x the frame rate) max_disappeared: 25 - # Optional: Frequency for running detection on stationary objects (default: 10x the frame rate) - stationary_interval: 50 + # Optional: Configuration for stationary object tracking + stationary: + # Optional: Frequency for running detection on stationary objects (default: shown below) + # When set to 0, object detection will never be run on stationary objects. If set to 10, it will be run on every 10th frame. + interval: 0 + # Optional: Number of frames without a position change for an object to be considered stationary (default: 10x the frame rate or 10s) + threshold: 50 + # Optional: Define a maximum number of frames for tracking a stationary object (default: not set, track forever) + # This can help with false positives for objects that should only be stationary for a limited amount of time. + # It can also be used to disable stationary object tracking. For example, you may want to set a value for person, but leave + # car at the default. + max_frames: + # Optional: Default for all object types (default: not set, track forever) + default: 3000 + # Optional: Object specific values + objects: + person: 1000 # Optional: Object configuration # NOTE: Can be overridden at the camera level @@ -223,7 +238,15 @@ motion: # NOTE: Can be overridden at the camera level record: # Optional: Enable recording (default: shown below) + # WARNING: Frigate does not currently support limiting recordings based + # on available disk space automatically. If using recordings, + # you must specify retention settings for a number of days that + # will fit within the available disk space of your drive or Frigate + # will crash. enabled: False + # Optional: Number of minutes to wait between cleanup runs (default: shown below) + # This can be used to reduce the frequency of deleting recording segments from disk if you want to minimize i/o + expire_interval: 60 # Optional: Retention settings for recording retain: # Optional: Number of days to retain recordings regardless of events (default: shown below) @@ -264,7 +287,7 @@ record: # here, the segments will already be gone by the time this mode is applied. # For example, if the camera retain mode is "motion", the segments without motion are # never stored, so setting the mode to "all" here won't bring them back. - mode: active_objects + mode: motion # Optional: Per object retention days objects: person: 15 @@ -377,7 +400,7 @@ cameras: # camera. front_steps: # Required: List of x,y coordinates to define the polygon of the zone. - # NOTE: Coordinates can be generated at https://www.image-map.net/ + # NOTE: Presence in a zone is evaluated only based on the bottom center of the objects bounding box. coordinates: 545,1077,747,939,788,805 # Optional: List of objects that can trigger this zone (default: all tracked objects) objects: diff --git a/docs/docs/configuration/nvdec.md b/docs/docs/configuration/nvdec.md index 52e56cd1f..69889241b 100644 --- a/docs/docs/configuration/nvdec.md +++ b/docs/docs/configuration/nvdec.md @@ -97,15 +97,3 @@ processes: | 0 N/A N/A 12827 C ffmpeg 417MiB | +-----------------------------------------------------------------------------+ ``` - -To further improve performance, you can set ffmpeg to skip frames in the output, -using the fps filter: - -```yaml -output_args: - - -filter:v - - fps=fps=5 -``` - -This setting, for example, allows Frigate to consume my 10-15fps camera streams on -my relatively low powered Haswell machine with relatively low cpu usage. diff --git a/docs/docs/configuration/objects.mdx b/docs/docs/configuration/objects.mdx index fd42a4399..1d236bf42 100644 --- a/docs/docs/configuration/objects.mdx +++ b/docs/docs/configuration/objects.mdx @@ -5,7 +5,11 @@ title: Objects import labels from "../../../labelmap.txt"; -By default, Frigate includes the following object models from the Google Coral test data. Note that `car` is listed twice because `truck` has been renamed to `car` by default. These object types are frequently confused. +Frigate includes the object models listed below from the Google Coral test data. + +Please note: + - `car` is listed twice because `truck` has been renamed to `car` by default. These object types are frequently confused. + - `person` is the only tracked object by default. See the [full configuration reference](https://docs.frigate.video/configuration/index#full-configuration-reference) for an example of expanding the list of tracked objects.