mirror of
https://github.com/blakeblackshear/frigate.git
synced 2026-07-21 11:19:02 +03:00
Compare commits
61
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
93016c662f | ||
|
|
c08fa15724 | ||
|
|
f3543cfee2 | ||
|
|
74d14cb8ca | ||
|
|
99d48ecbc3 | ||
|
|
c8f55ac41f | ||
|
|
047ae19191 | ||
|
|
d1f28eb8e1 | ||
|
|
b5d2f86a9b | ||
|
|
15c223d0e5 | ||
|
|
e0d6365f62 | ||
|
|
fb9604fbcc | ||
|
|
e2a1208c90 | ||
|
|
3655b9269d | ||
|
|
3c5eb1aee5 | ||
|
|
e20b324e0a | ||
|
|
ca0e53f671 | ||
|
|
a2e98dc89b | ||
|
|
b54cb219f8 | ||
|
|
edeb47a08e | ||
|
|
f34e2200b5 | ||
|
|
57d344a441 | ||
|
|
225c5f0d71 | ||
|
|
5d960aa282 | ||
|
|
bfc2859c8e | ||
|
|
d2aa2a0558 | ||
|
|
bd2382dc45 | ||
|
|
aa9dbbb48d | ||
|
|
a1094615e1 | ||
|
|
59780203a3 | ||
|
|
525cc5b663 | ||
|
|
29bcb7f47a | ||
|
|
2522a10afb | ||
|
|
f94aa0ff2c | ||
|
|
32429688ff | ||
|
|
4ae3c97865 | ||
|
|
1be7c561d7 | ||
|
|
50a5e40410 | ||
|
|
d7e10dffc6 | ||
|
|
8fb413ce7c | ||
|
|
bb3991f62b | ||
|
|
a4ece9dae3 | ||
|
|
f862ef5d0c | ||
|
|
f74df040bb | ||
|
|
1d5c2466a8 | ||
|
|
0a293aebab | ||
|
|
1de7519d1a | ||
|
|
c3f596327e | ||
|
|
90344540b3 | ||
|
|
7167cf57c5 | ||
|
|
e47e82f4be | ||
|
|
a43d294bd1 | ||
|
|
9f95a5f31f | ||
|
|
592c245dcd | ||
|
|
914ff4f1e5 | ||
|
|
9589c5fc24 | ||
|
|
3620ef27db | ||
|
|
5cf2ae0121 | ||
|
|
17d2bc240a | ||
|
|
6fd7f862f5 | ||
|
|
5d038b5c75 |
@@ -39,14 +39,14 @@ jobs:
|
||||
STABLE_TAG=${BASE}:stable
|
||||
PULL_TAG=${BASE}:${BUILD_TAG}
|
||||
docker run --rm -v $HOME/.docker/config.json:/config.json quay.io/skopeo/stable:latest copy --authfile /config.json --multi-arch all docker://${PULL_TAG} docker://${VERSION_TAG}
|
||||
for variant in standard-arm64 tensorrt tensorrt-jp6 rk rocm; do
|
||||
for variant in standard-arm64 tensorrt tensorrt-jp6 rk rocm synaptics; do
|
||||
docker run --rm -v $HOME/.docker/config.json:/config.json quay.io/skopeo/stable:latest copy --authfile /config.json --multi-arch all docker://${PULL_TAG}-${variant} docker://${VERSION_TAG}-${variant}
|
||||
done
|
||||
|
||||
# stable tag
|
||||
if [[ "${BUILD_TYPE}" == "stable" ]]; then
|
||||
docker run --rm -v $HOME/.docker/config.json:/config.json quay.io/skopeo/stable:latest copy --authfile /config.json --multi-arch all docker://${PULL_TAG} docker://${STABLE_TAG}
|
||||
for variant in standard-arm64 tensorrt tensorrt-jp6 rk rocm; do
|
||||
for variant in standard-arm64 tensorrt tensorrt-jp6 rk rocm synaptics; do
|
||||
docker run --rm -v $HOME/.docker/config.json:/config.json quay.io/skopeo/stable:latest copy --authfile /config.json --multi-arch all docker://${PULL_TAG}-${variant} docker://${STABLE_TAG}-${variant}
|
||||
done
|
||||
fi
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
The MIT License
|
||||
|
||||
Copyright (c) 2025 Frigate LLC (Frigate™)
|
||||
Copyright (c) 2026 Frigate, Inc. (Frigate™)
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
|
||||
@@ -40,7 +40,7 @@ If you would like to make a donation to support development, please use [Github
|
||||
This project is licensed under the **MIT License**.
|
||||
|
||||
- **Code:** The source code, configuration files, and documentation in this repository are available under the [MIT License](LICENSE). You are free to use, modify, and distribute the code as long as you include the original copyright notice.
|
||||
- **Trademarks:** The "Frigate" name, the "Frigate NVR" brand, and the Frigate logo are **trademarks of Frigate LLC** and are **not** covered by the MIT License.
|
||||
- **Trademarks:** The "Frigate" name, the "Frigate NVR" brand, and the Frigate logo are **trademarks of Frigate, Inc.** and are **not** covered by the MIT License.
|
||||
|
||||
Please see our [Trademark Policy](TRADEMARK.md) for details on acceptable use of our brand assets.
|
||||
|
||||
@@ -67,7 +67,7 @@ Please see our [Trademark Policy](TRADEMARK.md) for details on acceptable use of
|
||||
### Built-in mask and zone editor
|
||||
|
||||
<div>
|
||||
<img width="800" alt="Multi-camera scrubbing" src="https://github.com/blakeblackshear/frigate/assets/569905/d7885fc3-bfe6-452f-b7d0-d957cb3e31f5">
|
||||
<img width="800" alt="Built-in mask and zone editor" src="https://github.com/blakeblackshear/frigate/assets/569905/d7885fc3-bfe6-452f-b7d0-d957cb3e31f5">
|
||||
</div>
|
||||
|
||||
## Translations
|
||||
@@ -80,4 +80,4 @@ We use [Weblate](https://hosted.weblate.org/projects/frigate-nvr/) to support la
|
||||
|
||||
---
|
||||
|
||||
**Copyright © 2025 Frigate LLC.**
|
||||
**Copyright © 2026 Frigate, Inc.**
|
||||
|
||||
+2
-2
@@ -41,7 +41,7 @@
|
||||
|
||||
**代码部分**:本代码库中的源代码、配置文件和文档均遵循 [MIT 许可证](LICENSE)。您可以自由使用、修改和分发这些代码,但必须保留原始版权声明。
|
||||
|
||||
**商标部分**:“Frigate”名称、“Frigate NVR”品牌以及 Frigate 的 Logo 为 **Frigate LLC 的商标**,**不在** MIT 许可证覆盖范围内。
|
||||
**商标部分**:“Frigate”名称、“Frigate NVR”品牌以及 Frigate 的 Logo 为 **Frigate, Inc. 的商标**,**不在** MIT 许可证覆盖范围内。
|
||||
有关品牌资产的规范使用详情,请参阅我们的[《商标政策》](TRADEMARK.md)。
|
||||
|
||||
## 截图
|
||||
@@ -87,4 +87,4 @@ Bilibili:https://space.bilibili.com/3546894915602564
|
||||
|
||||
---
|
||||
|
||||
**Copyright © 2025 Frigate LLC.**
|
||||
**Copyright © 2026 Frigate, Inc.**
|
||||
|
||||
+4
-4
@@ -6,7 +6,7 @@ This document outlines the policy regarding the use of the trademarks associated
|
||||
|
||||
## 1. Our Trademarks
|
||||
|
||||
The following terms and visual assets are trademarks (the "Marks") of **Frigate LLC**:
|
||||
The following terms and visual assets are trademarks (the "Marks") of **Frigate, Inc.**:
|
||||
|
||||
- **Frigate™**
|
||||
- **Frigate NVR™**
|
||||
@@ -14,7 +14,7 @@ The following terms and visual assets are trademarks (the "Marks") of **Frigate
|
||||
- **The Frigate Logo**
|
||||
|
||||
**Note on Common Law Rights:**
|
||||
Frigate LLC asserts all common law rights in these Marks. The absence of a federal registration symbol (®) does not constitute a waiver of our intellectual property rights.
|
||||
Frigate, Inc. asserts all common law rights in these Marks. The absence of a federal registration symbol (®) does not constitute a waiver of our intellectual property rights.
|
||||
|
||||
## 2. Interaction with the MIT License
|
||||
|
||||
@@ -25,7 +25,7 @@ The software in this repository is licensed under the [MIT License](LICENSE).
|
||||
- The **Code** is free to use, modify, and distribute under the MIT terms.
|
||||
- The **Brand (Trademarks)** is **NOT** licensed under MIT.
|
||||
|
||||
You may not use the Marks in any way that is not explicitly permitted by this policy or by written agreement with Frigate LLC.
|
||||
You may not use the Marks in any way that is not explicitly permitted by this policy or by written agreement with Frigate, Inc.
|
||||
|
||||
## 3. Acceptable Use
|
||||
|
||||
@@ -40,7 +40,7 @@ You may use the Marks without prior written permission in the following specific
|
||||
You may **NOT** use the Marks in the following ways:
|
||||
|
||||
- **Commercial Products:** You may not use "Frigate" in the name of a commercial product, service, or app (e.g., selling an app named _"Frigate Viewer"_ is prohibited).
|
||||
- **Implying Affiliation:** You may not use the Marks in a way that suggests your project is official, sponsored by, or endorsed by Frigate LLC.
|
||||
- **Implying Affiliation:** You may not use the Marks in a way that suggests your project is official, sponsored by, or endorsed by Frigate, Inc.
|
||||
- **Confusing Forks:** If you fork this repository to create a derivative work, you **must** remove the Frigate logo and rename your project to avoid user confusion. You cannot distribute a modified version of the software under the name "Frigate".
|
||||
- **Domain Names:** You may not register domain names containing "Frigate" that are likely to confuse users (e.g., `frigate-official-support.com`).
|
||||
|
||||
|
||||
@@ -48,7 +48,7 @@ onnxruntime == 1.22.*
|
||||
transformers == 4.45.*
|
||||
# Generative AI
|
||||
google-generativeai == 0.8.*
|
||||
ollama == 0.5.*
|
||||
ollama == 0.6.*
|
||||
openai == 1.65.*
|
||||
# push notifications
|
||||
py-vapid == 1.9.*
|
||||
|
||||
@@ -55,7 +55,7 @@ function setup_homekit_config() {
|
||||
|
||||
if [[ ! -f "${config_path}" ]]; then
|
||||
echo "[INFO] Creating empty HomeKit config file..."
|
||||
echo '{}' > "${config_path}"
|
||||
echo 'homekit: {}' > "${config_path}"
|
||||
fi
|
||||
|
||||
# Convert YAML to JSON for jq processing
|
||||
@@ -70,12 +70,14 @@ function setup_homekit_config() {
|
||||
jq '
|
||||
# Keep only the homekit section if it exists, otherwise empty object
|
||||
if has("homekit") then {homekit: .homekit} else {homekit: {}} end
|
||||
' "${temp_json}" > "${cleaned_json}" 2>/dev/null || echo '{"homekit": {}}' > "${cleaned_json}"
|
||||
' "${temp_json}" > "${cleaned_json}" 2>/dev/null || {
|
||||
echo '{"homekit": {}}' > "${cleaned_json}"
|
||||
}
|
||||
|
||||
# Convert back to YAML and write to the config file
|
||||
yq eval -P "${cleaned_json}" > "${config_path}" 2>/dev/null || {
|
||||
echo "[WARNING] Failed to convert cleaned config to YAML, creating minimal config"
|
||||
echo '{"homekit": {}}' > "${config_path}"
|
||||
echo 'homekit: {}' > "${config_path}"
|
||||
}
|
||||
|
||||
# Clean up temp files
|
||||
|
||||
@@ -22,6 +22,11 @@ sys.path.remove("/opt/frigate")
|
||||
|
||||
yaml = YAML()
|
||||
|
||||
# Check if arbitrary exec sources are allowed (defaults to False for security)
|
||||
ALLOW_ARBITRARY_EXEC = os.environ.get(
|
||||
"GO2RTC_ALLOW_ARBITRARY_EXEC", "false"
|
||||
).lower() in ("true", "1", "yes")
|
||||
|
||||
FRIGATE_ENV_VARS = {k: v for k, v in os.environ.items() if k.startswith("FRIGATE_")}
|
||||
# read docker secret files as env vars too
|
||||
if os.path.isdir("/run/secrets"):
|
||||
@@ -109,14 +114,26 @@ if LIBAVFORMAT_VERSION_MAJOR < 59:
|
||||
elif go2rtc_config["ffmpeg"].get("rtsp") is None:
|
||||
go2rtc_config["ffmpeg"]["rtsp"] = rtsp_args
|
||||
|
||||
for name in go2rtc_config.get("streams", {}):
|
||||
|
||||
def is_restricted_source(stream_source: str) -> bool:
|
||||
"""Check if a stream source is restricted (echo, expr, or exec)."""
|
||||
return stream_source.strip().startswith(("echo:", "expr:", "exec:"))
|
||||
|
||||
|
||||
for name in list(go2rtc_config.get("streams", {})):
|
||||
stream = go2rtc_config["streams"][name]
|
||||
|
||||
if isinstance(stream, str):
|
||||
try:
|
||||
go2rtc_config["streams"][name] = go2rtc_config["streams"][name].format(
|
||||
**FRIGATE_ENV_VARS
|
||||
)
|
||||
formatted_stream = stream.format(**FRIGATE_ENV_VARS)
|
||||
if not ALLOW_ARBITRARY_EXEC and is_restricted_source(formatted_stream):
|
||||
print(
|
||||
f"[ERROR] Stream '{name}' uses a restricted source (echo/expr/exec) which is disabled by default for security. "
|
||||
f"Set GO2RTC_ALLOW_ARBITRARY_EXEC=true to enable arbitrary exec sources."
|
||||
)
|
||||
del go2rtc_config["streams"][name]
|
||||
continue
|
||||
go2rtc_config["streams"][name] = formatted_stream
|
||||
except KeyError as e:
|
||||
print(
|
||||
"[ERROR] Invalid substitution found, see https://docs.frigate.video/configuration/restream#advanced-restream-configurations for more info."
|
||||
@@ -124,15 +141,33 @@ for name in go2rtc_config.get("streams", {}):
|
||||
sys.exit(e)
|
||||
|
||||
elif isinstance(stream, list):
|
||||
for i, stream in enumerate(stream):
|
||||
filtered_streams = []
|
||||
for i, stream_item in enumerate(stream):
|
||||
try:
|
||||
go2rtc_config["streams"][name][i] = stream.format(**FRIGATE_ENV_VARS)
|
||||
formatted_stream = stream_item.format(**FRIGATE_ENV_VARS)
|
||||
if not ALLOW_ARBITRARY_EXEC and is_restricted_source(formatted_stream):
|
||||
print(
|
||||
f"[ERROR] Stream '{name}' item {i + 1} uses a restricted source (echo/expr/exec) which is disabled by default for security. "
|
||||
f"Set GO2RTC_ALLOW_ARBITRARY_EXEC=true to enable arbitrary exec sources."
|
||||
)
|
||||
continue
|
||||
|
||||
filtered_streams.append(formatted_stream)
|
||||
except KeyError as e:
|
||||
print(
|
||||
"[ERROR] Invalid substitution found, see https://docs.frigate.video/configuration/restream#advanced-restream-configurations for more info."
|
||||
)
|
||||
sys.exit(e)
|
||||
|
||||
if filtered_streams:
|
||||
go2rtc_config["streams"][name] = filtered_streams
|
||||
else:
|
||||
print(
|
||||
f"[ERROR] Stream '{name}' was removed because all sources were restricted (echo/expr/exec). "
|
||||
f"Set GO2RTC_ALLOW_ARBITRARY_EXEC=true to enable arbitrary exec sources."
|
||||
)
|
||||
del go2rtc_config["streams"][name]
|
||||
|
||||
# add birdseye restream stream if enabled
|
||||
if config.get("birdseye", {}).get("restream", False):
|
||||
birdseye: dict[str, Any] = config.get("birdseye")
|
||||
|
||||
@@ -18,6 +18,10 @@ proxy_set_header X-Forwarded-User $http_x_forwarded_user;
|
||||
proxy_set_header X-Forwarded-Groups $http_x_forwarded_groups;
|
||||
proxy_set_header X-Forwarded-Email $http_x_forwarded_email;
|
||||
proxy_set_header X-Forwarded-Preferred-Username $http_x_forwarded_preferred_username;
|
||||
proxy_set_header X-Auth-Request-User $http_x_auth_request_user;
|
||||
proxy_set_header X-Auth-Request-Groups $http_x_auth_request_groups;
|
||||
proxy_set_header X-Auth-Request-Email $http_x_auth_request_email;
|
||||
proxy_set_header X-Auth-Request-Preferred-Username $http_x_auth_request_preferred_username;
|
||||
proxy_set_header X-authentik-username $http_x_authentik_username;
|
||||
proxy_set_header X-authentik-groups $http_x_authentik_groups;
|
||||
proxy_set_header X-authentik-email $http_x_authentik_email;
|
||||
|
||||
@@ -50,7 +50,7 @@ cameras:
|
||||
|
||||
### Configuring Minimum Volume
|
||||
|
||||
The audio detector uses volume levels in the same way that motion in a camera feed is used for object detection. This means that frigate will not run audio detection unless the audio volume is above the configured level in order to reduce resource usage. Audio levels can vary widely between camera models so it is important to run tests to see what volume levels are. The Debug view in the Frigate UI has an Audio tab for cameras that have the `audio` role assigned where a graph and the current levels are is displayed. The `min_volume` parameter should be set to the minimum the `RMS` level required to run audio detection.
|
||||
The audio detector uses volume levels in the same way that motion in a camera feed is used for object detection. This means that Frigate will not run audio detection unless the audio volume is above the configured level in order to reduce resource usage. Audio levels can vary widely between camera models so it is important to run tests to see what volume levels are. The Debug view in the Frigate UI has an Audio tab for cameras that have the `audio` role assigned where a graph and the current levels are is displayed. The `min_volume` parameter should be set to the minimum the `RMS` level required to run audio detection.
|
||||
|
||||
:::tip
|
||||
|
||||
|
||||
@@ -188,10 +188,10 @@ go2rtc:
|
||||
# example for connectin to a Reolink camera that supports two way talk
|
||||
your_reolink_camera_twt:
|
||||
- "ffmpeg:http://reolink_ip/flv?port=1935&app=bcs&stream=channel0_main.bcs&user=username&password=password#video=copy#audio=copy#audio=opus"
|
||||
- "rtsp://username:password@reolink_ip/Preview_01_sub
|
||||
- "rtsp://username:password@reolink_ip/Preview_01_sub"
|
||||
your_reolink_camera_twt_sub:
|
||||
- "ffmpeg:http://reolink_ip/flv?port=1935&app=bcs&stream=channel0_ext.bcs&user=username&password=password"
|
||||
- "rtsp://username:password@reolink_ip/Preview_01_sub
|
||||
- "rtsp://username:password@reolink_ip/Preview_01_sub"
|
||||
# example for connecting to a Reolink NVR
|
||||
your_reolink_camera_via_nvr:
|
||||
- "ffmpeg:http://reolink_nvr_ip/flv?port=1935&app=bcs&stream=channel3_main.bcs&user=username&password=password" # channel numbers are 0-15
|
||||
@@ -227,6 +227,12 @@ cameras:
|
||||
|
||||
### Unifi Protect Cameras
|
||||
|
||||
:::note
|
||||
|
||||
Unifi G5s cameras and newer need a Unifi Protect server to enable rtsps stream, it's not posible to enable it in standalone mode.
|
||||
|
||||
:::
|
||||
|
||||
Unifi protect cameras require the rtspx stream to be used with go2rtc.
|
||||
To utilize a Unifi protect camera, modify the rtsps link to begin with rtspx.
|
||||
Additionally, remove the "?enableSrtp" from the end of the Unifi link.
|
||||
@@ -252,6 +258,10 @@ ffmpeg:
|
||||
|
||||
TP-Link VIGI cameras need some adjustments to the main stream settings on the camera itself to avoid issues. The stream needs to be configured as `H264` with `Smart Coding` set to `off`. Without these settings you may have problems when trying to watch recorded footage. For example Firefox will stop playback after a few seconds and show the following error message: `The media playback was aborted due to a corruption problem or because the media used features your browser did not support.`.
|
||||
|
||||
### Wyze Wireless Cameras
|
||||
|
||||
Some community members have found better performance on Wyze cameras by using an alternative firmware known as [Thingino](https://thingino.com/).
|
||||
|
||||
## USB Cameras (aka Webcams)
|
||||
|
||||
To use a USB camera (webcam) with Frigate, the recommendation is to use go2rtc's [FFmpeg Device](https://github.com/AlexxIT/go2rtc?tab=readme-ov-file#source-ffmpeg-device) support:
|
||||
|
||||
@@ -94,18 +94,19 @@ This list of working and non-working PTZ cameras is based on user feedback. If y
|
||||
The FeatureList on the [ONVIF Conformant Products Database](https://www.onvif.org/conformant-products/) can provide a starting point to determine a camera's compatibility with Frigate's autotracking. Look to see if a camera lists `PTZRelative`, `PTZRelativePanTilt` and/or `PTZRelativeZoom`. These features are required for autotracking, but some cameras still fail to respond even if they claim support. If they are missing, autotracking will not work (though basic PTZ in the WebUI might). Avoid cameras with no database entry unless they are confirmed as working below.
|
||||
|
||||
| Brand or specific camera | PTZ Controls | Autotracking | Notes |
|
||||
| ---------------------------- | :----------: | :----------: | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --- |
|
||||
| ---------------------------- | :----------: | :----------: | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||
| Amcrest | ✅ | ✅ | ⛔️ Generally, Amcrest should work, but some older models (like the common IP2M-841) don't support autotracking |
|
||||
| Amcrest ASH21 | ✅ | ❌ | ONVIF service port: 80 |
|
||||
| Amcrest IP4M-S2112EW-AI | ✅ | ❌ | FOV relative movement not supported. |
|
||||
| Amcrest IP5M-1190EW | ✅ | ❌ | ONVIF Port: 80. FOV relative movement not supported. |
|
||||
| Annke CZ504 | ✅ | ✅ | Annke support provide specific firmware ([V5.7.1 build 250227](https://github.com/pierrepinon/annke_cz504/raw/refs/heads/main/digicap_V5-7-1_build_250227.dav)) to fix issue with ONVIF "TranslationSpaceFov" |
|
||||
| Axis Q-6155E | ✅ | ❌ | ONVIF service port: 80; Camera does not support MoveStatus. |
|
||||
| Ctronics PTZ | ✅ | ❌ | |
|
||||
| Dahua | ✅ | ✅ | Some low-end Dahuas (lite series, picoo series (commonly), among others) have been reported to not support autotracking. These models usually don't have a four digit model number with chassis prefix and options postfix (e.g. DH-P5AE-PV vs DH-SD49825GB-HNR). |
|
||||
| Dahua DH-SD2A500HB | ✅ | ❌ | |
|
||||
| Dahua DH-SD49825GB-HNR | ✅ | ✅ | |
|
||||
| Dahua DH-P5AE-PV | ❌ | ❌ | |
|
||||
| Foscam | ✅ | ❌ | In general support PTZ, but not relative move. There are no official ONVIF certifications and tests available on the ONVIF Conformant Products Database | |
|
||||
| Foscam | ✅ | ❌ | In general support PTZ, but not relative move. There are no official ONVIF certifications and tests available on the ONVIF Conformant Products Database |
|
||||
| Foscam R5 | ✅ | ❌ | |
|
||||
| Foscam SD4 | ✅ | ❌ | |
|
||||
| Hanwha XNP-6550RH | ✅ | ❌ | |
|
||||
|
||||
@@ -39,7 +39,7 @@ For object classification:
|
||||
|
||||
:::note
|
||||
|
||||
A tracked object can only have a single sub label. If you are using Face Recognition and you configure an object classification model for `person` using the sub label type, your sub label may not be assigned correctly as it depends on which enrichment completes its analysis first. Consider using the `attribute` type instead.
|
||||
A tracked object can only have a single sub label. If you are using Triggers or Face Recognition and you configure an object classification model for `person` using the sub label type, your sub label may not be assigned correctly as it depends on which enrichment completes its analysis first. This could also occur with `car` objects that are assigned a sub label for a delivery carrier. Consider using the `attribute` type instead.
|
||||
|
||||
:::
|
||||
|
||||
@@ -89,9 +89,9 @@ Creating and training the model is done within the Frigate UI using the `Classif
|
||||
|
||||
### Step 1: Name and Define
|
||||
|
||||
Enter a name for your model, select the object label to classify (e.g., `person`, `dog`, `car`), choose the classification type (sub label or attribute), and define your classes. Include a `none` class for objects that don't fit any specific category.
|
||||
Enter a name for your model, select the object label to classify (e.g., `person`, `dog`, `car`), choose the classification type (sub label or attribute), and define your classes. Frigate will automatically include a `none` class for objects that don't fit any specific category.
|
||||
|
||||
For example: To classify your two cats, create a model named "Our Cats" and create two classes, "Charlie" and "Leo". Create a third class, "none", for other neighborhood cats that are not your own.
|
||||
For example: To classify your two cats, create a model named "Our Cats" and create two classes, "Charlie" and "Leo". A third class, "none", will be created automatically for other neighborhood cats that are not your own.
|
||||
|
||||
### Step 2: Assign Training Examples
|
||||
|
||||
|
||||
@@ -48,15 +48,29 @@ Using Ollama on CPU is not recommended, high inference times make using Generati
|
||||
|
||||
:::
|
||||
|
||||
[Ollama](https://ollama.com/) allows you to self-host large language models and keep everything running locally. It provides a nice API over [llama.cpp](https://github.com/ggerganov/llama.cpp). It is highly recommended to host this server on a machine with an Nvidia graphics card, or on a Apple silicon Mac for best performance.
|
||||
[Ollama](https://ollama.com/) allows you to self-host large language models and keep everything running locally. It is highly recommended to host this server on a machine with an Nvidia graphics card, or on a Apple silicon Mac for best performance.
|
||||
|
||||
Most of the 7b parameter 4-bit vision models will fit inside 8GB of VRAM. There is also a [Docker container](https://hub.docker.com/r/ollama/ollama) available.
|
||||
|
||||
Parallel requests also come with some caveats. You will need to set `OLLAMA_NUM_PARALLEL=1` and choose a `OLLAMA_MAX_QUEUE` and `OLLAMA_MAX_LOADED_MODELS` values that are appropriate for your hardware and preferences. See the [Ollama documentation](https://github.com/ollama/ollama/blob/main/docs/faq.md#how-does-ollama-handle-concurrent-requests).
|
||||
Parallel requests also come with some caveats. You will need to set `OLLAMA_NUM_PARALLEL=1` and choose a `OLLAMA_MAX_QUEUE` and `OLLAMA_MAX_LOADED_MODELS` values that are appropriate for your hardware and preferences. See the [Ollama documentation](https://docs.ollama.com/faq#how-does-ollama-handle-concurrent-requests).
|
||||
|
||||
### Model Types: Instruct vs Thinking
|
||||
|
||||
Most vision-language models are available as **instruct** models, which are fine-tuned to follow instructions and respond concisely to prompts. However, some models (such as certain Qwen-VL or minigpt variants) offer both **instruct** and **thinking** versions.
|
||||
|
||||
- **Instruct models** are always recommended for use with Frigate. These models generate direct, relevant, actionable descriptions that best fit Frigate's object and event summary use case.
|
||||
- **Thinking models** are fine-tuned for more free-form, open-ended, and speculative outputs, which are typically not concise and may not provide the practical summaries Frigate expects. For this reason, Frigate does **not** recommend or support using thinking models.
|
||||
|
||||
Some models are labeled as **hybrid** (capable of both thinking and instruct tasks). In these cases, Frigate will always use instruct-style prompts and specifically disables thinking-mode behaviors to ensure concise, useful responses.
|
||||
|
||||
**Recommendation:**
|
||||
Always select the `-instruct` or documented instruct/tagged variant of any model you use in your Frigate configuration. If in doubt, refer to your model provider’s documentation or model library for guidance on the correct model variant to use.
|
||||
|
||||
|
||||
|
||||
### Supported Models
|
||||
|
||||
You must use a vision capable model with Frigate. Current model variants can be found [in their model library](https://ollama.com/library). Note that Frigate will not automatically download the model you specify in your config, you must download the model to your local instance of Ollama first i.e. by running `ollama pull llava:7b` on your Ollama server/Docker container. Note that the model specified in Frigate's config must match the downloaded model tag.
|
||||
You must use a vision capable model with Frigate. Current model variants can be found [in their model library](https://ollama.com/search?c=vision). Note that Frigate will not automatically download the model you specify in your config, you must download the model to your local instance of Ollama first i.e. by running `ollama pull qwen3-vl:2b-instruct` on your Ollama server/Docker container. Note that the model specified in Frigate's config must match the downloaded model tag.
|
||||
|
||||
:::note
|
||||
|
||||
@@ -197,7 +211,7 @@ You are also able to define custom prompts in your configuration.
|
||||
genai:
|
||||
provider: ollama
|
||||
base_url: http://localhost:11434
|
||||
model: llava
|
||||
model: qwen3-vl:8b-instruct
|
||||
|
||||
objects:
|
||||
prompt: "Analyze the {label} in these images from the {camera} security camera. Focus on the actions, behavior, and potential intent of the {label}, rather than just describing its appearance."
|
||||
|
||||
@@ -39,9 +39,10 @@ You are also able to define custom prompts in your configuration.
|
||||
genai:
|
||||
provider: ollama
|
||||
base_url: http://localhost:11434
|
||||
model: llava
|
||||
model: qwen3-vl:8b-instruct
|
||||
|
||||
objects:
|
||||
genai:
|
||||
prompt: "Analyze the {label} in these images from the {camera} security camera. Focus on the actions, behavior, and potential intent of the {label}, rather than just describing its appearance."
|
||||
object_prompts:
|
||||
person: "Examine the main person in these images. What are they doing and what might their actions suggest about their intent (e.g., approaching a door, leaving an area, standing still)? Do not describe the surroundings or static details."
|
||||
|
||||
@@ -16,12 +16,13 @@ Review summaries provide structured JSON responses that are saved for each revie
|
||||
```
|
||||
- `title` (string): A concise, direct title that describes the purpose or overall action (e.g., "Person taking out trash", "Joe walking dog").
|
||||
- `scene` (string): A narrative description of what happens across the sequence from start to finish, including setting, detected objects, and their observable actions.
|
||||
- `shortSummary` (string): A brief 2-sentence summary of the scene, suitable for notifications. This is a condensed version of the scene description.
|
||||
- `confidence` (float): 0-1 confidence in the analysis. Higher confidence when objects/actions are clearly visible and context is unambiguous.
|
||||
- `other_concerns` (list): List of user-defined concerns that may need additional investigation.
|
||||
- `potential_threat_level` (integer): 0, 1, or 2 as defined below.
|
||||
```
|
||||
|
||||
This will show in multiple places in the UI to give additional context about each activity, and allow viewing more details when extra attention is required. Frigate's built in notifications will also automatically show the title and description when the data is available.
|
||||
This will show in multiple places in the UI to give additional context about each activity, and allow viewing more details when extra attention is required. Frigate's built in notifications will automatically show the title and `shortSummary` when the data is available, while the full `scene` description is available in the UI for detailed review.
|
||||
|
||||
### Defining Typical Activity
|
||||
|
||||
@@ -30,40 +31,43 @@ Each installation and even camera can have different parameters for what is cons
|
||||
<details>
|
||||
<summary>Default Activity Context Prompt</summary>
|
||||
|
||||
```
|
||||
### Normal Activity Indicators (Level 0)
|
||||
- Known/verified people in any zone at any time
|
||||
- People with pets in residential areas
|
||||
- Deliveries or services during daytime/evening (6 AM - 10 PM): carrying packages to doors/porches, placing items, leaving
|
||||
- Services/maintenance workers with visible tools, uniforms, or service vehicles during daytime
|
||||
- Activity confined to public areas only (sidewalks, streets) without entering property at any time
|
||||
```yaml
|
||||
review:
|
||||
genai:
|
||||
activity_context_prompt: |
|
||||
### Normal Activity Indicators (Level 0)
|
||||
- Known/verified people in any zone at any time
|
||||
- People with pets in residential areas
|
||||
- Deliveries or services during daytime/evening (6 AM - 10 PM): carrying packages to doors/porches, placing items, leaving
|
||||
- Services/maintenance workers with visible tools, uniforms, or service vehicles during daytime
|
||||
- Activity confined to public areas only (sidewalks, streets) without entering property at any time
|
||||
|
||||
### Suspicious Activity Indicators (Level 1)
|
||||
- **Testing or attempting to open doors/windows/handles on vehicles or buildings** — ALWAYS Level 1 regardless of time or duration
|
||||
- **Unidentified person in private areas (driveways, near vehicles/buildings) during late night/early morning (11 PM - 5 AM)** — ALWAYS Level 1 regardless of activity or duration
|
||||
- Taking items that don't belong to them (packages, objects from porches/driveways)
|
||||
- Climbing or jumping fences/barriers to access property
|
||||
- Attempting to conceal actions or items from view
|
||||
- Prolonged loitering: remaining in same area without visible purpose throughout most of the sequence
|
||||
### Suspicious Activity Indicators (Level 1)
|
||||
- **Testing or attempting to open doors/windows/handles on vehicles or buildings** — ALWAYS Level 1 regardless of time or duration
|
||||
- **Unidentified person in private areas (driveways, near vehicles/buildings) during late night/early morning (11 PM - 5 AM)** — ALWAYS Level 1 regardless of activity or duration
|
||||
- Taking items that don't belong to them (packages, objects from porches/driveways)
|
||||
- Climbing or jumping fences/barriers to access property
|
||||
- Attempting to conceal actions or items from view
|
||||
- Prolonged loitering: remaining in same area without visible purpose throughout most of the sequence
|
||||
|
||||
### Critical Threat Indicators (Level 2)
|
||||
- Holding break-in tools (crowbars, pry bars, bolt cutters)
|
||||
- Weapons visible (guns, knives, bats used aggressively)
|
||||
- Forced entry in progress
|
||||
- Physical aggression or violence
|
||||
- Active property damage or theft in progress
|
||||
### Critical Threat Indicators (Level 2)
|
||||
- Holding break-in tools (crowbars, pry bars, bolt cutters)
|
||||
- Weapons visible (guns, knives, bats used aggressively)
|
||||
- Forced entry in progress
|
||||
- Physical aggression or violence
|
||||
- Active property damage or theft in progress
|
||||
|
||||
### Assessment Guidance
|
||||
Evaluate in this order:
|
||||
### Assessment Guidance
|
||||
Evaluate in this order:
|
||||
|
||||
1. **If person is verified/known** → Level 0 regardless of time or activity
|
||||
2. **If person is unidentified:**
|
||||
- Check time: If late night/early morning (11 PM - 5 AM) AND in private areas (driveways, near vehicles/buildings) → Level 1
|
||||
- Check actions: If testing doors/handles, taking items, climbing → Level 1
|
||||
- Otherwise, if daytime/evening (6 AM - 10 PM) with clear legitimate purpose (delivery, service worker) → Level 0
|
||||
3. **Escalate to Level 2 if:** Weapons, break-in tools, forced entry in progress, violence, or active property damage visible (escalates from Level 0 or 1)
|
||||
1. **If person is verified/known** → Level 0 regardless of time or activity
|
||||
2. **If person is unidentified:**
|
||||
- Check time: If late night/early morning (11 PM - 5 AM) AND in private areas (driveways, near vehicles/buildings) → Level 1
|
||||
- Check actions: If testing doors/handles, taking items, climbing → Level 1
|
||||
- Otherwise, if daytime/evening (6 AM - 10 PM) with clear legitimate purpose (delivery, service worker) → Level 0
|
||||
3. **Escalate to Level 2 if:** Weapons, break-in tools, forced entry in progress, violence, or active property damage visible (escalates from Level 0 or 1)
|
||||
|
||||
The mere presence of an unidentified person in private areas during late night hours is inherently suspicious and warrants human review, regardless of what activity they appear to be doing or how brief the sequence is.
|
||||
The mere presence of an unidentified person in private areas during late night hours is inherently suspicious and warrants human review, regardless of what activity they appear to be doing or how brief the sequence is.
|
||||
```
|
||||
|
||||
</details>
|
||||
@@ -108,6 +112,17 @@ review:
|
||||
- animals in the garden
|
||||
```
|
||||
|
||||
### Preferred Language
|
||||
|
||||
By default, review summaries are generated in English. You can configure Frigate to generate summaries in your preferred language by setting the `preferred_language` option:
|
||||
|
||||
```yaml
|
||||
review:
|
||||
genai:
|
||||
enabled: true
|
||||
preferred_language: Spanish
|
||||
```
|
||||
|
||||
## Review Reports
|
||||
|
||||
Along with individual review item summaries, Generative AI provides the ability to request a report of a given time period. For example, you can get a daily report while on a vacation of any suspicious activity or other concerns that may require review.
|
||||
|
||||
@@ -3,78 +3,65 @@ id: hardware_acceleration_video
|
||||
title: Video Decoding
|
||||
---
|
||||
|
||||
import CommunityBadge from '@site/src/components/CommunityBadge';
|
||||
|
||||
# Video Decoding
|
||||
|
||||
It is highly recommended to use a GPU for hardware acceleration video decoding in Frigate. Some types of hardware acceleration are detected and used automatically, but you may need to update your configuration to enable hardware accelerated decoding in ffmpeg.
|
||||
It is highly recommended to use an integrated or discrete GPU for hardware acceleration video decoding in Frigate.
|
||||
|
||||
Depending on your system, these parameters may not be compatible. More information on hardware accelerated decoding for ffmpeg can be found here: https://trac.ffmpeg.org/wiki/HWAccelIntro
|
||||
Some types of hardware acceleration are detected and used automatically, but you may need to update your configuration to enable hardware accelerated decoding in ffmpeg. To verify that hardware acceleration is working:
|
||||
- Check the logs: A message will either say that hardware acceleration was automatically detected, or there will be a warning that no hardware acceleration was automatically detected
|
||||
- If hardware acceleration is specified in the config, verification can be done by ensuring the logs are free from errors. There is no CPU fallback for hardware acceleration.
|
||||
|
||||
:::info
|
||||
|
||||
## Raspberry Pi 3/4
|
||||
Frigate supports presets for optimal hardware accelerated video decoding:
|
||||
|
||||
Ensure you increase the allocated RAM for your GPU to at least 128 (`raspi-config` > Performance Options > GPU Memory).
|
||||
If you are using the HA Add-on, you may need to use the full access variant and turn off _Protection mode_ for hardware acceleration.
|
||||
**AMD**
|
||||
|
||||
```yaml
|
||||
# if you want to decode a h264 stream
|
||||
ffmpeg:
|
||||
hwaccel_args: preset-rpi-64-h264
|
||||
- [AMD](#amd-based-cpus): Frigate can utilize modern AMD integrated GPUs and AMD discrete GPUs to accelerate video decoding.
|
||||
|
||||
# if you want to decode a h265 (hevc) stream
|
||||
ffmpeg:
|
||||
hwaccel_args: preset-rpi-64-h265
|
||||
```
|
||||
**Intel**
|
||||
|
||||
:::note
|
||||
- [Intel](#intel-based-cpus): Frigate can utilize most Intel integrated GPUs and Arc GPUs to accelerate video decoding.
|
||||
|
||||
If running Frigate through Docker, you either need to run in privileged mode or
|
||||
map the `/dev/video*` devices to Frigate. With Docker Compose add:
|
||||
**Nvidia GPU**
|
||||
|
||||
```yaml
|
||||
services:
|
||||
frigate:
|
||||
...
|
||||
devices:
|
||||
- /dev/video11:/dev/video11
|
||||
```
|
||||
- [Nvidia GPU](#nvidia-gpus): Frigate can utilize most modern Nvidia GPUs to accelerate video decoding.
|
||||
|
||||
Or with `docker run`:
|
||||
**Raspberry Pi 3/4**
|
||||
|
||||
```bash
|
||||
docker run -d \
|
||||
--name frigate \
|
||||
...
|
||||
--device /dev/video11 \
|
||||
ghcr.io/blakeblackshear/frigate:stable
|
||||
```
|
||||
- [Raspberry Pi](#raspberry-pi-34): Frigate can utilize the media engine in the Raspberry Pi 3 and 4 to slightly accelerate video decoding.
|
||||
|
||||
`/dev/video11` is the correct device (on Raspberry Pi 4B). You can check
|
||||
by running the following and looking for `H264`:
|
||||
**Nvidia Jetson** <CommunityBadge />
|
||||
|
||||
```bash
|
||||
for d in /dev/video*; do
|
||||
echo -e "---\n$d"
|
||||
v4l2-ctl --list-formats-ext -d $d
|
||||
done
|
||||
```
|
||||
- [Jetson](#nvidia-jetson): Frigate can utilize the media engine in Jetson hardware to accelerate video decoding.
|
||||
|
||||
Or map in all the `/dev/video*` devices.
|
||||
**Rockchip** <CommunityBadge />
|
||||
|
||||
- [RKNN](#rockchip-platform): Frigate can utilize the media engine in RockChip SOCs to accelerate video decoding.
|
||||
|
||||
**Other Hardware**
|
||||
|
||||
Depending on your system, these presets may not be compatible, and you may need to use manual hwaccel args to take advantage of your hardware. More information on hardware accelerated decoding for ffmpeg can be found here: https://trac.ffmpeg.org/wiki/HWAccelIntro
|
||||
|
||||
:::
|
||||
|
||||
## Intel-based CPUs
|
||||
|
||||
Frigate can utilize most Intel integrated GPUs and Arc GPUs to accelerate video decoding.
|
||||
|
||||
:::info
|
||||
|
||||
**Recommended hwaccel Preset**
|
||||
|
||||
| CPU Generation | Intel Driver | Recommended Preset | Notes |
|
||||
| -------------- | ------------ | ------------------- | ------------------------------------ |
|
||||
| gen1 - gen5 | i965 | preset-vaapi | qsv is not supported |
|
||||
| gen6 - gen7 | iHD | preset-vaapi | qsv is not supported |
|
||||
| gen8 - gen12 | iHD | preset-vaapi | preset-intel-qsv-\* can also be used |
|
||||
| gen13+ | iHD / Xe | preset-intel-qsv-\* | |
|
||||
| Intel Arc GPU | iHD / Xe | preset-intel-qsv-\* | |
|
||||
| CPU Generation | Intel Driver | Recommended Preset | Notes |
|
||||
| -------------- | ------------ | ------------------- | ------------------------------------------- |
|
||||
| gen1 - gen5 | i965 | preset-vaapi | qsv is not supported, may not support H.265 |
|
||||
| gen6 - gen7 | iHD | preset-vaapi | qsv is not supported |
|
||||
| gen8 - gen12 | iHD | preset-vaapi | preset-intel-qsv-\* can also be used |
|
||||
| gen13+ | iHD / Xe | preset-intel-qsv-\* | |
|
||||
| Intel Arc GPU | iHD / Xe | preset-intel-qsv-\* | |
|
||||
|
||||
:::
|
||||
|
||||
@@ -195,15 +182,17 @@ telemetry:
|
||||
|
||||
If you are passing in a device path, make sure you've passed the device through to the container.
|
||||
|
||||
## AMD/ATI GPUs (Radeon HD 2000 and newer GPUs) via libva-mesa-driver
|
||||
## AMD-based CPUs
|
||||
|
||||
VAAPI supports automatic profile selection so it will work automatically with both H.264 and H.265 streams.
|
||||
Frigate can utilize modern AMD integrated GPUs and AMD GPUs to accelerate video decoding using VAAPI.
|
||||
|
||||
:::note
|
||||
### Configuring Radeon Driver
|
||||
|
||||
You need to change the driver to `radeonsi` by adding the following environment variable `LIBVA_DRIVER_NAME=radeonsi` to your docker-compose file or [in the `config.yml` for HA Add-on users](advanced.md#environment_vars).
|
||||
|
||||
:::
|
||||
### Via VAAPI
|
||||
|
||||
VAAPI supports automatic profile selection so it will work automatically with both H.264 and H.265 streams.
|
||||
|
||||
```yaml
|
||||
ffmpeg:
|
||||
@@ -264,7 +253,7 @@ processes:
|
||||
|
||||
:::note
|
||||
|
||||
`nvidia-smi` may not show `ffmpeg` processes when run inside the container [due to docker limitations](https://github.com/NVIDIA/nvidia-docker/issues/179#issuecomment-645579458).
|
||||
`nvidia-smi` will not show `ffmpeg` processes when run inside the container [due to docker limitations](https://github.com/NVIDIA/nvidia-docker/issues/179#issuecomment-645579458).
|
||||
|
||||
:::
|
||||
|
||||
@@ -300,12 +289,63 @@ If you do not see these processes, check the `docker logs` for the container and
|
||||
|
||||
These instructions were originally based on the [Jellyfin documentation](https://jellyfin.org/docs/general/administration/hardware-acceleration.html#nvidia-hardware-acceleration-on-docker-linux).
|
||||
|
||||
## Raspberry Pi 3/4
|
||||
|
||||
Ensure you increase the allocated RAM for your GPU to at least 128 (`raspi-config` > Performance Options > GPU Memory).
|
||||
If you are using the HA Add-on, you may need to use the full access variant and turn off _Protection mode_ for hardware acceleration.
|
||||
|
||||
```yaml
|
||||
# if you want to decode a h264 stream
|
||||
ffmpeg:
|
||||
hwaccel_args: preset-rpi-64-h264
|
||||
|
||||
# if you want to decode a h265 (hevc) stream
|
||||
ffmpeg:
|
||||
hwaccel_args: preset-rpi-64-h265
|
||||
```
|
||||
|
||||
:::note
|
||||
|
||||
If running Frigate through Docker, you either need to run in privileged mode or
|
||||
map the `/dev/video*` devices to Frigate. With Docker Compose add:
|
||||
|
||||
```yaml
|
||||
services:
|
||||
frigate:
|
||||
...
|
||||
devices:
|
||||
- /dev/video11:/dev/video11
|
||||
```
|
||||
|
||||
Or with `docker run`:
|
||||
|
||||
```bash
|
||||
docker run -d \
|
||||
--name frigate \
|
||||
...
|
||||
--device /dev/video11 \
|
||||
ghcr.io/blakeblackshear/frigate:stable
|
||||
```
|
||||
|
||||
`/dev/video11` is the correct device (on Raspberry Pi 4B). You can check
|
||||
by running the following and looking for `H264`:
|
||||
|
||||
```bash
|
||||
for d in /dev/video*; do
|
||||
echo -e "---\n$d"
|
||||
v4l2-ctl --list-formats-ext -d $d
|
||||
done
|
||||
```
|
||||
|
||||
Or map in all the `/dev/video*` devices.
|
||||
|
||||
:::
|
||||
|
||||
# Community Supported
|
||||
|
||||
## NVIDIA Jetson (Orin AGX, Orin NX, Orin Nano\*, Xavier AGX, Xavier NX, TX2, TX1, Nano)
|
||||
## NVIDIA Jetson
|
||||
|
||||
A separate set of docker images is available that is based on Jetpack/L4T. They come with an `ffmpeg` build
|
||||
with codecs that use the Jetson's dedicated media engine. If your Jetson host is running Jetpack 6.0+ use the `stable-tensorrt-jp6` tagged image. Note that the Orin Nano has no video encoder, so frigate will use software encoding on this platform, but the image will still allow hardware decoding and tensorrt object detection.
|
||||
A separate set of docker images is available for Jetson devices. They come with an `ffmpeg` build with codecs that use the Jetson's dedicated media engine. If your Jetson host is running Jetpack 6.0+ use the `stable-tensorrt-jp6` tagged image. Note that the Orin Nano has no video encoder, so frigate will use software encoding on this platform, but the image will still allow hardware decoding and tensorrt object detection.
|
||||
|
||||
You will need to use the image with the nvidia container runtime:
|
||||
|
||||
|
||||
@@ -15,7 +15,7 @@ The jsmpeg live view will use more browser and client GPU resources. Using go2rt
|
||||
| ------ | ------------------------------------- | ---------- | ---------------------------- | --------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||
| jsmpeg | same as `detect -> fps`, capped at 10 | 720p | no | no | Resolution is configurable, but go2rtc is recommended if you want higher resolutions and better frame rates. jsmpeg is Frigate's default without go2rtc configured. |
|
||||
| mse | native | native | yes (depends on audio codec) | yes | iPhone requires iOS 17.1+, Firefox is h.264 only. This is Frigate's default when go2rtc is configured. |
|
||||
| webrtc | native | native | yes (depends on audio codec) | yes | Requires extra configuration, doesn't support h.265. Frigate attempts to use WebRTC when MSE fails or when using a camera's two-way talk feature. |
|
||||
| webrtc | native | native | yes (depends on audio codec) | yes | Requires extra configuration. Frigate attempts to use WebRTC when MSE fails or when using a camera's two-way talk feature. |
|
||||
|
||||
### Camera Settings Recommendations
|
||||
|
||||
@@ -127,7 +127,8 @@ WebRTC works by creating a TCP or UDP connection on port `8555`. However, it req
|
||||
```
|
||||
|
||||
- For access through Tailscale, the Frigate system's Tailscale IP must be added as a WebRTC candidate. Tailscale IPs all start with `100.`, and are reserved within the `100.64.0.0/10` CIDR block.
|
||||
- Note that WebRTC does not support H.265.
|
||||
|
||||
- Note that some browsers may not support H.265 (HEVC). You can check your browser's current version for H.265 compatibility [here](https://github.com/AlexxIT/go2rtc?tab=readme-ov-file#codecs-madness).
|
||||
|
||||
:::tip
|
||||
|
||||
|
||||
@@ -157,7 +157,7 @@ A TensorFlow Lite model is provided in the container at `/edgetpu_model.tflite`
|
||||
|
||||
#### YOLOv9
|
||||
|
||||
[YOLOv9](https://github.com/dbro/frigate-detector-edgetpu-yolo9/releases/download/v1.0/yolov9-s-relu6-best_320_int8_edgetpu.tflite) models that are compiled for Tensorflow Lite and properly quantized are supported, but not included by default. To provide your own model, bind mount the file into the container and provide the path with `model.path`. Note that the model may require a custom label file (eg. [use this 17 label file](https://raw.githubusercontent.com/dbro/frigate-detector-edgetpu-yolo9/refs/heads/main/labels-coco17.txt) for the model linked above.)
|
||||
YOLOv9 models that are compiled for TensorFlow Lite and properly quantized are supported, but not included by default. [Download the model](https://github.com/dbro/frigate-detector-edgetpu-yolo9/releases/download/v1.0/yolov9-s-relu6-best_320_int8_edgetpu.tflite), bind mount the file into the container, and provide the path with `model.path`. Note that the linked model requires a 17-label [labelmap file](https://raw.githubusercontent.com/dbro/frigate-detector-edgetpu-yolo9/refs/heads/main/labels-coco17.txt) that includes only 17 COCO classes.
|
||||
|
||||
<details>
|
||||
<summary>YOLOv9 Setup & Config</summary>
|
||||
@@ -178,7 +178,7 @@ model:
|
||||
labelmap_path: /config/labels-coco17.txt
|
||||
```
|
||||
|
||||
Note that the labelmap uses a subset of the complete COCO label set that has only 17 objects.
|
||||
Note that due to hardware limitations of the Coral, the labelmap is a subset of the COCO labels and includes only 17 object classes.
|
||||
|
||||
</details>
|
||||
|
||||
@@ -477,7 +477,7 @@ After placing the downloaded onnx model in your config/model_cache folder, you c
|
||||
detectors:
|
||||
ov:
|
||||
type: openvino
|
||||
device: GPU
|
||||
device: CPU
|
||||
|
||||
model:
|
||||
model_type: dfine
|
||||
@@ -569,10 +569,10 @@ When using Docker Compose:
|
||||
```yaml
|
||||
services:
|
||||
frigate:
|
||||
---
|
||||
devices:
|
||||
- /dev/dri
|
||||
- /dev/kfd
|
||||
...
|
||||
devices:
|
||||
- /dev/dri
|
||||
- /dev/kfd
|
||||
```
|
||||
|
||||
For reference on recommended settings see [running ROCm/pytorch in Docker](https://rocm.docs.amd.com/projects/install-on-linux/en/develop/how-to/3rd-party/pytorch-install.html#using-docker-with-pytorch-pre-installed).
|
||||
@@ -600,9 +600,9 @@ When using Docker Compose:
|
||||
```yaml
|
||||
services:
|
||||
frigate:
|
||||
|
||||
environment:
|
||||
HSA_OVERRIDE_GFX_VERSION: "10.0.0"
|
||||
...
|
||||
environment:
|
||||
HSA_OVERRIDE_GFX_VERSION: "10.0.0"
|
||||
```
|
||||
|
||||
Figuring out what version you need can be complicated as you can't tell the chipset name and driver from the AMD brand name.
|
||||
@@ -1508,17 +1508,17 @@ COPY --from=build /dfine/output/dfine_${MODEL_SIZE}_obj2coco.onnx /dfine-${MODEL
|
||||
EOF
|
||||
```
|
||||
|
||||
### Download RF-DETR Model
|
||||
### Downloading RF-DETR Model
|
||||
|
||||
RF-DETR can be exported as ONNX by running the command below. You can copy and paste the whole thing to your terminal and execute, altering `MODEL_SIZE=Nano` in the first line to `Nano`, `Small`, or `Medium` size.
|
||||
|
||||
```sh
|
||||
docker build . --build-arg MODEL_SIZE=Nano --output . -f- <<'EOF'
|
||||
docker build . --build-arg MODEL_SIZE=Nano --rm --output . -f- <<'EOF'
|
||||
FROM python:3.11 AS build
|
||||
RUN apt-get update && apt-get install --no-install-recommends -y libgl1 && rm -rf /var/lib/apt/lists/*
|
||||
COPY --from=ghcr.io/astral-sh/uv:0.8.0 /uv /bin/
|
||||
WORKDIR /rfdetr
|
||||
RUN uv pip install --system rfdetr[onnxexport] torch==2.8.0 onnxscript
|
||||
RUN uv pip install --system rfdetr[onnxexport] torch==2.8.0 onnx==1.19.1 onnxscript
|
||||
ARG MODEL_SIZE
|
||||
RUN python3 -c "from rfdetr import RFDETR${MODEL_SIZE}; x = RFDETR${MODEL_SIZE}(resolution=320); x.export(simplify=True)"
|
||||
FROM scratch
|
||||
|
||||
@@ -11,7 +11,7 @@ This adds features including the ability to deep link directly into the app.
|
||||
|
||||
In order to install Frigate as a PWA, the following requirements must be met:
|
||||
|
||||
- Frigate must be accessed via a secure context (localhost, secure https, etc.)
|
||||
- Frigate must be accessed via a secure context (localhost, secure https, VPN, etc.)
|
||||
- On Android, Firefox, Chrome, Edge, Opera, and Samsung Internet Browser all support installing PWAs.
|
||||
- On iOS 16.4 and later, PWAs can be installed from the Share menu in Safari, Chrome, Edge, Firefox, and Orion.
|
||||
|
||||
@@ -22,3 +22,7 @@ Installation varies slightly based on the device that is being used:
|
||||
- Desktop: Use the install button typically found in right edge of the address bar
|
||||
- Android: Use the `Install as App` button in the more options menu for Chrome, and the `Add app to Home screen` button for Firefox
|
||||
- iOS: Use the `Add to Homescreen` button in the share menu
|
||||
|
||||
## Usage
|
||||
|
||||
Once setup, the Frigate app can be used wherever it has access to Frigate. This means it can be setup as local-only, VPN-only, or fully accessible depending on your needs.
|
||||
|
||||
@@ -185,10 +185,35 @@ In this configuration:
|
||||
- `front_door` stream is used by Frigate for viewing, recording, and detection. The `#backchannel=0` parameter prevents go2rtc from establishing the audio output backchannel, so it won't block two-way talk access.
|
||||
- `front_door_twoway` stream is used for two-way talk functionality. This stream can be used by Frigate's WebRTC viewer when two-way talk is enabled, or by other applications (like Home Assistant Advanced Camera Card) that need access to the camera's audio output channel.
|
||||
|
||||
## Security: Restricted Stream Sources
|
||||
|
||||
For security reasons, the `echo:`, `expr:`, and `exec:` stream sources are disabled by default in go2rtc. These sources allow arbitrary command execution and can pose security risks if misconfigured.
|
||||
|
||||
If you attempt to use these sources in your configuration, the streams will be removed and an error message will be printed in the logs.
|
||||
|
||||
To enable these sources, you must set the environment variable `GO2RTC_ALLOW_ARBITRARY_EXEC=true`. This can be done in your Docker Compose file or container environment:
|
||||
|
||||
```yaml
|
||||
environment:
|
||||
- GO2RTC_ALLOW_ARBITRARY_EXEC=true
|
||||
```
|
||||
|
||||
:::warning
|
||||
|
||||
Enabling arbitrary exec sources allows execution of arbitrary commands through go2rtc stream configurations. Only enable this if you understand the security implications and trust all sources of your configuration.
|
||||
|
||||
:::
|
||||
|
||||
## Advanced Restream Configurations
|
||||
|
||||
The [exec](https://github.com/AlexxIT/go2rtc/tree/v1.9.10#source-exec) source in go2rtc can be used for custom ffmpeg commands. An example is below:
|
||||
|
||||
:::warning
|
||||
|
||||
The `exec:`, `echo:`, and `expr:` sources are disabled by default for security. You must set `GO2RTC_ALLOW_ARBITRARY_EXEC=true` to use them. See [Security: Restricted Stream Sources](#security-restricted-stream-sources) for more information.
|
||||
|
||||
:::
|
||||
|
||||
NOTE: The output will need to be passed with two curly braces `{{output}}`
|
||||
|
||||
```yaml
|
||||
|
||||
@@ -20,7 +20,7 @@ Here are some of the cameras I recommend:
|
||||
- <a href="https://amzn.to/4fwoNWA" target="_blank" rel="nofollow noopener sponsored">Loryta(Dahua) IPC-T549M-ALED-S3</a> (affiliate link)
|
||||
- <a href="https://amzn.to/3YXpcMw" target="_blank" rel="nofollow noopener sponsored">Loryta(Dahua) IPC-T54IR-AS</a> (affiliate link)
|
||||
- <a href="https://amzn.to/3AvBHoY" target="_blank" rel="nofollow noopener sponsored">Amcrest IP5M-T1179EW-AI-V3</a> (affiliate link)
|
||||
- <a href="https://amzn.to/4ltOpaC" target="_blank" rel="nofollow noopener sponsored">HIKVISION DS-2CD2387G2P-LSU/SL ColorVu 8MP Panoramic Turret IP Camera</a> (affiliate link)
|
||||
- <a href="https://www.bhphotovideo.com/c/product/1705511-REG/hikvision_colorvu_ds_2cd2387g2p_lsu_sl_8mp_network.html" target="_blank" rel="nofollow noopener">HIKVISION DS-2CD2387G2P-LSU/SL ColorVu 8MP Panoramic Turret IP Camera</a> (affiliate link)
|
||||
|
||||
I may earn a small commission for my endorsement, recommendation, testimonial, or link to any products or services from this website.
|
||||
|
||||
@@ -38,9 +38,11 @@ If the EQ13 is out of stock, the link below may take you to a suggested alternat
|
||||
|
||||
:::
|
||||
|
||||
| Name | Coral Inference Speed | Coral Compatibility | Notes |
|
||||
| ------------------------------------------------------------------------------------------------------------- | --------------------- | ------------------- | ----------------------------------------------------------------------------------------- |
|
||||
| Beelink EQ13 (<a href="https://amzn.to/4jn2qVr" target="_blank" rel="nofollow noopener sponsored">Amazon</a>) | 5-10ms | USB | Dual gigabit NICs for easy isolated camera network. Easily handles several 1080p cameras. |
|
||||
| Name | Capabilities | Notes |
|
||||
| ------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------- | --------------------------------------------------- |
|
||||
| Beelink EQ13 (<a href="https://amzn.to/4jn2qVr" target="_blank" rel="nofollow noopener sponsored">Amazon</a>) | Can run object detection on several 1080p cameras with low-medium activity | Dual gigabit NICs for easy isolated camera network. |
|
||||
| Intel 1120p ([Amazon](https://www.amazon.com/Beelink-i3-1220P-Computer-Display-Gigabit/dp/B0DDCKT9YP) | Can handle a large number of 1080p cameras with high activity | |
|
||||
| Intel 125H ([Amazon](https://www.amazon.com/MINISFORUM-Pro-125H-Barebone-Computer-HDMI2-1/dp/B0FH21FSZM) | Can handle a significant number of 1080p cameras with high activity | Includes NPU for more efficient detection in 0.17+ |
|
||||
|
||||
## Detectors
|
||||
|
||||
@@ -125,10 +127,16 @@ In real-world deployments, even with multiple cameras running concurrently, Frig
|
||||
|
||||
### Google Coral TPU
|
||||
|
||||
:::warning
|
||||
|
||||
The Coral is no longer recommended for new Frigate installations, except in deployments with particularly low power requirements or hardware incapable of utilizing alternative AI accelerators for object detection. Instead, we suggest using one of the numerous other supported object detectors. Frigate will continue to provide support for the Coral TPU for as long as practicably possible given its still one of the most power-efficient devices for executing object detection models.
|
||||
|
||||
:::
|
||||
|
||||
Frigate supports both the USB and M.2 versions of the Google Coral.
|
||||
|
||||
- The USB version is compatible with the widest variety of hardware and does not require a driver on the host machine. However, it does lack the automatic throttling features of the other versions.
|
||||
- The PCIe and M.2 versions require installation of a driver on the host. Follow the instructions for your version from https://coral.ai
|
||||
- The PCIe and M.2 versions require installation of a driver on the host. https://github.com/jnicolson/gasket-builder should be used.
|
||||
|
||||
A single Coral can handle many cameras using the default model and will be sufficient for the majority of users. You can calculate the maximum performance of your Coral based on the inference speed reported by Frigate. With an inference speed of 10, your Coral will top out at `1000/10=100`, or 100 frames per second. If your detection fps is regularly getting close to that, you should first consider tuning motion masks. If those are already properly configured, a second Coral may be needed.
|
||||
|
||||
|
||||
@@ -94,6 +94,10 @@ $ python -c 'print("{:.2f}MB".format(((1280 * 720 * 1.5 * 20 + 270480) / 1048576
|
||||
|
||||
The shm size cannot be set per container for Home Assistant add-ons. However, this is probably not required since by default Home Assistant Supervisor allocates `/dev/shm` with half the size of your total memory. If your machine has 8GB of memory, chances are that Frigate will have access to up to 4GB without any additional configuration.
|
||||
|
||||
## Extra Steps for Specific Hardware
|
||||
|
||||
The following sections contain additional setup steps that are only required if you are using specific hardware. If you are not using any of these hardware types, you can skip to the [Docker](#docker) installation section.
|
||||
|
||||
### Raspberry Pi 3/4
|
||||
|
||||
By default, the Raspberry Pi limits the amount of memory available to the GPU. In order to use ffmpeg hardware acceleration, you must increase the available memory by setting `gpu_mem` to the maximum recommended value in `config.txt` as described in the [official docs](https://www.raspberrypi.org/documentation/computers/config_txt.html#memory-options).
|
||||
@@ -106,14 +110,107 @@ The Hailo-8 and Hailo-8L AI accelerators are available in both M.2 and HAT form
|
||||
|
||||
#### Installation
|
||||
|
||||
For Raspberry Pi 5 users with the AI Kit, installation is straightforward. Simply follow this [guide](https://www.raspberrypi.com/documentation/accessories/ai-kit.html#ai-kit-installation) to install the driver and software.
|
||||
:::warning
|
||||
|
||||
For other installations, follow these steps for installation:
|
||||
The Raspberry Pi kernel includes an older version of the Hailo driver that is incompatible with Frigate. You **must** follow the installation steps below to install the correct driver version, and you **must** disable the built-in kernel driver as described in step 1.
|
||||
|
||||
1. Install the driver from the [Hailo GitHub repository](https://github.com/hailo-ai/hailort-drivers). A convenient script for Linux is available to clone the repository, build the driver, and install it.
|
||||
2. Copy or download [this script](https://github.com/blakeblackshear/frigate/blob/dev/docker/hailo8l/user_installation.sh).
|
||||
3. Ensure it has execution permissions with `sudo chmod +x user_installation.sh`
|
||||
4. Run the script with `./user_installation.sh`
|
||||
:::
|
||||
|
||||
1. **Disable the built-in Hailo driver (Raspberry Pi only)**:
|
||||
|
||||
:::note
|
||||
|
||||
If you are **not** using a Raspberry Pi, skip this step and proceed directly to step 2.
|
||||
|
||||
:::
|
||||
|
||||
If you are using a Raspberry Pi, you need to blacklist the built-in kernel Hailo driver to prevent conflicts. First, check if the driver is currently loaded:
|
||||
|
||||
```bash
|
||||
lsmod | grep hailo
|
||||
```
|
||||
|
||||
If it shows `hailo_pci`, unload it:
|
||||
|
||||
```bash
|
||||
sudo rmmod hailo_pci
|
||||
```
|
||||
|
||||
Now blacklist the driver to prevent it from loading on boot:
|
||||
|
||||
```bash
|
||||
echo "blacklist hailo_pci" | sudo tee /etc/modprobe.d/blacklist-hailo_pci.conf
|
||||
```
|
||||
|
||||
Update initramfs to ensure the blacklist takes effect:
|
||||
|
||||
```bash
|
||||
sudo update-initramfs -u
|
||||
```
|
||||
|
||||
Reboot your Raspberry Pi:
|
||||
|
||||
```bash
|
||||
sudo reboot
|
||||
```
|
||||
|
||||
After rebooting, verify the built-in driver is not loaded:
|
||||
|
||||
```bash
|
||||
lsmod | grep hailo
|
||||
```
|
||||
|
||||
This command should return no results. If it still shows `hailo_pci`, the blacklist did not take effect properly and you may need to check for other Hailo packages installed via apt that are loading the driver.
|
||||
|
||||
2. **Run the installation script**:
|
||||
|
||||
Download the installation script:
|
||||
|
||||
```bash
|
||||
wget https://raw.githubusercontent.com/blakeblackshear/frigate/dev/docker/hailo8l/user_installation.sh
|
||||
```
|
||||
|
||||
Make it executable:
|
||||
|
||||
```bash
|
||||
sudo chmod +x user_installation.sh
|
||||
```
|
||||
|
||||
Run the script:
|
||||
|
||||
```bash
|
||||
./user_installation.sh
|
||||
```
|
||||
|
||||
The script will:
|
||||
|
||||
- Install necessary build dependencies
|
||||
- Clone and build the Hailo driver from the official repository
|
||||
- Install the driver
|
||||
- Download and install the required firmware
|
||||
- Set up udev rules
|
||||
|
||||
3. **Reboot your system**:
|
||||
|
||||
After the script completes successfully, reboot to load the firmware:
|
||||
|
||||
```bash
|
||||
sudo reboot
|
||||
```
|
||||
|
||||
4. **Verify the installation**:
|
||||
|
||||
After rebooting, verify that the Hailo device is available:
|
||||
|
||||
```bash
|
||||
ls -l /dev/hailo0
|
||||
```
|
||||
|
||||
You should see the device listed. You can also verify the driver is loaded:
|
||||
|
||||
```bash
|
||||
lsmod | grep hailo_pci
|
||||
```
|
||||
|
||||
#### Setup
|
||||
|
||||
@@ -302,7 +399,7 @@ services:
|
||||
shm_size: "512mb" # update for your cameras based on calculation above
|
||||
devices:
|
||||
- /dev/bus/usb:/dev/bus/usb # Passes the USB Coral, needs to be modified for other versions
|
||||
- /dev/apex_0:/dev/apex_0 # Passes a PCIe Coral, follow driver instructions here https://coral.ai/docs/m2/get-started/#2a-on-linux
|
||||
- /dev/apex_0:/dev/apex_0 # Passes a PCIe Coral, follow driver instructions here https://github.com/jnicolson/gasket-builder
|
||||
- /dev/video11:/dev/video11 # For Raspberry Pi 4B
|
||||
- /dev/dri/renderD128:/dev/dri/renderD128 # AMD / Intel GPU, needs to be updated for your hardware
|
||||
- /dev/accel:/dev/accel # Intel NPU
|
||||
@@ -368,6 +465,7 @@ There are important limitations in HA OS to be aware of:
|
||||
|
||||
- Separate local storage for media is not yet supported by Home Assistant
|
||||
- AMD GPUs are not supported because HA OS does not include the mesa driver.
|
||||
- Intel NPUs are not supported because HA OS does not include the NPU firmware.
|
||||
- Nvidia GPUs are not supported because addons do not support the nvidia runtime.
|
||||
|
||||
:::
|
||||
|
||||
@@ -5,7 +5,7 @@ title: Updating
|
||||
|
||||
# Updating Frigate
|
||||
|
||||
The current stable version of Frigate is **0.16.2**. The release notes and any breaking changes for this version can be found on the [Frigate GitHub releases page](https://github.com/blakeblackshear/frigate/releases/tag/v0.16.2).
|
||||
The current stable version of Frigate is **0.17.0**. The release notes and any breaking changes for this version can be found on the [Frigate GitHub releases page](https://github.com/blakeblackshear/frigate/releases/tag/v0.17.0).
|
||||
|
||||
Keeping Frigate up to date ensures you benefit from the latest features, performance improvements, and bug fixes. The update process varies slightly depending on your installation method (Docker, Home Assistant Addon, etc.). Below are instructions for the most common setups.
|
||||
|
||||
@@ -33,21 +33,21 @@ If you’re running Frigate via Docker (recommended method), follow these steps:
|
||||
2. **Update and Pull the Latest Image**:
|
||||
|
||||
- If using Docker Compose:
|
||||
- Edit your `docker-compose.yml` file to specify the desired version tag (e.g., `0.16.2` instead of `0.15.2`). For example:
|
||||
- Edit your `docker-compose.yml` file to specify the desired version tag (e.g., `0.17.0` instead of `0.16.3`). For example:
|
||||
```yaml
|
||||
services:
|
||||
frigate:
|
||||
image: ghcr.io/blakeblackshear/frigate:0.16.2
|
||||
image: ghcr.io/blakeblackshear/frigate:0.17.0
|
||||
```
|
||||
- Then pull the image:
|
||||
```bash
|
||||
docker pull ghcr.io/blakeblackshear/frigate:0.16.2
|
||||
docker pull ghcr.io/blakeblackshear/frigate:0.17.0
|
||||
```
|
||||
- **Note for `stable` Tag Users**: If your `docker-compose.yml` uses the `stable` tag (e.g., `ghcr.io/blakeblackshear/frigate:stable`), you don’t need to update the tag manually. The `stable` tag always points to the latest stable release after pulling.
|
||||
- If using `docker run`:
|
||||
- Pull the image with the appropriate tag (e.g., `0.16.2`, `0.16.2-tensorrt`, or `stable`):
|
||||
- Pull the image with the appropriate tag (e.g., `0.17.0`, `0.17.0-tensorrt`, or `stable`):
|
||||
```bash
|
||||
docker pull ghcr.io/blakeblackshear/frigate:0.16.2
|
||||
docker pull ghcr.io/blakeblackshear/frigate:0.17.0
|
||||
```
|
||||
|
||||
3. **Start the Container**:
|
||||
@@ -105,8 +105,8 @@ If an update causes issues:
|
||||
1. Stop Frigate.
|
||||
2. Restore your backed-up config file and database.
|
||||
3. Revert to the previous image version:
|
||||
- For Docker: Specify an older tag (e.g., `ghcr.io/blakeblackshear/frigate:0.15.2`) in your `docker run` command.
|
||||
- For Docker Compose: Edit your `docker-compose.yml`, specify the older version tag (e.g., `ghcr.io/blakeblackshear/frigate:0.15.2`), and re-run `docker compose up -d`.
|
||||
- For Docker: Specify an older tag (e.g., `ghcr.io/blakeblackshear/frigate:0.16.3`) in your `docker run` command.
|
||||
- For Docker Compose: Edit your `docker-compose.yml`, specify the older version tag (e.g., `ghcr.io/blakeblackshear/frigate:0.16.3`), and re-run `docker compose up -d`.
|
||||
- For Home Assistant: Reinstall the previous addon version manually via the repository if needed and restart the addon.
|
||||
4. Verify the old version is running again.
|
||||
|
||||
|
||||
@@ -134,31 +134,13 @@ Now you should be able to start Frigate by running `docker compose up -d` from w
|
||||
|
||||
This section assumes that you already have an environment setup as described in [Installation](../frigate/installation.md). You should also configure your cameras according to the [camera setup guide](/frigate/camera_setup). Pay particular attention to the section on choosing a detect resolution.
|
||||
|
||||
### Step 1: Add a detect stream
|
||||
### Step 1: Start Frigate
|
||||
|
||||
First we will add the detect stream for the camera:
|
||||
At this point you should be able to start Frigate and a basic config will be created automatically.
|
||||
|
||||
```yaml
|
||||
mqtt:
|
||||
enabled: False
|
||||
### Step 2: Add a camera
|
||||
|
||||
cameras:
|
||||
name_of_your_camera: # <------ Name the camera
|
||||
enabled: True
|
||||
ffmpeg:
|
||||
inputs:
|
||||
- path: rtsp://10.0.10.10:554/rtsp # <----- The stream you want to use for detection
|
||||
roles:
|
||||
- detect
|
||||
```
|
||||
|
||||
### Step 2: Start Frigate
|
||||
|
||||
At this point you should be able to start Frigate and see the video feed in the UI.
|
||||
|
||||
If you get an error image from the camera, this means ffmpeg was not able to get the video feed from your camera. Check the logs for error messages from ffmpeg. The default ffmpeg arguments are designed to work with H264 RTSP cameras that support TCP connections.
|
||||
|
||||
FFmpeg arguments for other types of cameras can be found [here](../configuration/camera_specific.md).
|
||||
You can click the `Add Camera` button to use the camera setup wizard to get your first camera added into Frigate.
|
||||
|
||||
### Step 3: Configure hardware acceleration (recommended)
|
||||
|
||||
@@ -173,7 +155,7 @@ services:
|
||||
frigate:
|
||||
...
|
||||
devices:
|
||||
- /dev/dri/renderD128:/dev/dri/renderD128 # for intel hwaccel, needs to be updated for your hardware
|
||||
- /dev/dri/renderD128:/dev/dri/renderD128 # for intel & amd hwaccel, needs to be updated for your hardware
|
||||
...
|
||||
```
|
||||
|
||||
@@ -202,7 +184,7 @@ services:
|
||||
...
|
||||
devices:
|
||||
- /dev/bus/usb:/dev/bus/usb # passes the USB Coral, needs to be modified for other versions
|
||||
- /dev/apex_0:/dev/apex_0 # passes a PCIe Coral, follow driver instructions here https://coral.ai/docs/m2/get-started/#2a-on-linux
|
||||
- /dev/apex_0:/dev/apex_0 # passes a PCIe Coral, follow driver instructions here https://github.com/jnicolson/gasket-builder
|
||||
...
|
||||
```
|
||||
|
||||
|
||||
@@ -245,6 +245,12 @@ To load a preview gif of a review item:
|
||||
https://HA_URL/api/frigate/notifications/<review-id>/review_preview.gif
|
||||
```
|
||||
|
||||
To load the thumbnail of a review item:
|
||||
|
||||
```
|
||||
https://HA_URL/api/frigate/notifications/<review-id>/<camera>/review_thumbnail.webp
|
||||
```
|
||||
|
||||
<a name="streams"></a>
|
||||
|
||||
## RTSP stream
|
||||
|
||||
@@ -280,7 +280,7 @@ Topic with current state of notifications. Published values are `ON` and `OFF`.
|
||||
|
||||
## Frigate Camera Topics
|
||||
|
||||
### `frigate/<camera_name>/<role>/status`
|
||||
### `frigate/<camera_name>/status/<role>`
|
||||
|
||||
Publishes the current health status of each role that is enabled (`audio`, `detect`, `record`). Possible values are:
|
||||
|
||||
|
||||
@@ -38,3 +38,7 @@ This is a fork (with fixed errors and new features) of [original Double Take](ht
|
||||
## [Periscope](https://github.com/maksz42/periscope)
|
||||
|
||||
[Periscope](https://github.com/maksz42/periscope) is a lightweight Android app that turns old devices into live viewers for Frigate. It works on Android 2.2 and above, including Android TV. It supports authentication and HTTPS.
|
||||
|
||||
## [Scrypted - Frigate bridge plugin](https://github.com/apocaliss92/scrypted-frigate-bridge)
|
||||
|
||||
[Scrypted - Frigate bridge](https://github.com/apocaliss92/scrypted-frigate-bridge) is an plugin that allows to ingest Frigate detections, motion, videoclips on Scrypted as well as provide templates to export rebroadcast configurations on Frigate.
|
||||
|
||||
@@ -15,13 +15,11 @@ There are three model types offered in Frigate+, `mobiledet`, `yolonas`, and `yo
|
||||
|
||||
Not all model types are supported by all detectors, so it's important to choose a model type to match your detector as shown in the table under [supported detector types](#supported-detector-types). You can test model types for compatibility and speed on your hardware by using the base models.
|
||||
|
||||
| Model Type | Description |
|
||||
| ----------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||
| `mobiledet` | Based on the same architecture as the default model included with Frigate. Runs on Google Coral devices and CPUs. |
|
||||
| `yolonas` | A newer architecture that offers slightly higher accuracy and improved detection of small objects. Runs on Intel, NVidia GPUs, and AMD GPUs. |
|
||||
| `yolov9` | A leading SOTA (state of the art) object detection model with similar performance to yolonas, but on a wider range of hardware options. Runs on Intel, NVidia GPUs, AMD GPUs, Hailo, MemryX\*, Apple Silicon\*, and Rockchip NPUs. |
|
||||
|
||||
_\* Support coming in 0.17_
|
||||
| Model Type | Description |
|
||||
| ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
|
||||
| `mobiledet` | Based on the same architecture as the default model included with Frigate. Runs on Google Coral devices and CPUs. |
|
||||
| `yolonas` | A newer architecture that offers slightly higher accuracy and improved detection of small objects. Runs on Intel, NVidia GPUs, and AMD GPUs. |
|
||||
| `yolov9` | A leading SOTA (state of the art) object detection model with similar performance to yolonas, but on a wider range of hardware options. Runs on Intel, NVidia GPUs, AMD GPUs, Hailo, MemryX, Apple Silicon, and Rockchip NPUs. |
|
||||
|
||||
### YOLOv9 Details
|
||||
|
||||
@@ -39,7 +37,7 @@ If you have a Hailo device, you will need to specify the hardware you have when
|
||||
|
||||
#### Rockchip (RKNN) Support
|
||||
|
||||
For 0.16, YOLOv9 onnx models will need to be manually converted. First, you will need to configure Frigate to use the model id for your YOLOv9 onnx model so it downloads the model to your `model_cache` directory. From there, you can follow the [documentation](/configuration/object_detectors.md#converting-your-own-onnx-model-to-rknn-format) to convert it. Automatic conversion is coming in 0.17.
|
||||
For 0.16, YOLOv9 onnx models will need to be manually converted. First, you will need to configure Frigate to use the model id for your YOLOv9 onnx model so it downloads the model to your `model_cache` directory. From there, you can follow the [documentation](/configuration/object_detectors.md#converting-your-own-onnx-model-to-rknn-format) to convert it. Automatic conversion is available in 0.17 and later.
|
||||
|
||||
## Supported detector types
|
||||
|
||||
@@ -55,7 +53,7 @@ Currently, Frigate+ models support CPU (`cpu`), Google Coral (`edgetpu`), OpenVi
|
||||
| [Hailo8/Hailo8L/Hailo8R](/configuration/object_detectors#hailo-8) | `hailo8l` | `yolov9` |
|
||||
| [Rockchip NPU](/configuration/object_detectors#rockchip-platform)\* | `rknn` | `yolov9` |
|
||||
|
||||
_\* Requires manual conversion in 0.16. Automatic conversion coming in 0.17._
|
||||
_\* Requires manual conversion in 0.16. Automatic conversion available in 0.17 and later._
|
||||
|
||||
## Improving your model
|
||||
|
||||
|
||||
@@ -0,0 +1,73 @@
|
||||
---
|
||||
id: cpu
|
||||
title: High CPU Usage
|
||||
---
|
||||
|
||||
High CPU usage can impact Frigate's performance and responsiveness. This guide outlines the most effective configuration changes to help reduce CPU consumption and optimize resource usage.
|
||||
|
||||
## 1. Hardware Acceleration for Video Decoding
|
||||
|
||||
**Priority: Critical**
|
||||
|
||||
Video decoding is one of the most CPU-intensive tasks in Frigate. While an AI accelerator handles object detection, it does not assist with decoding video streams. Hardware acceleration (hwaccel) offloads this work to your GPU or specialized video decode hardware, significantly reducing CPU usage and enabling you to support more cameras on the same hardware.
|
||||
|
||||
### Key Concepts
|
||||
|
||||
**Resolution & FPS Impact:** The decoding burden grows exponentially with resolution and frame rate. A 4K stream at 30 FPS requires roughly 4 times the processing power of a 1080p stream at the same frame rate, and doubling the frame rate doubles the decode workload. This is why hardware acceleration becomes critical when working with multiple high-resolution cameras.
|
||||
|
||||
**Hardware Acceleration Benefits:** By using dedicated video decode hardware, you can:
|
||||
|
||||
- Significantly reduce CPU usage per camera stream
|
||||
- Support 2-3x more cameras on the same hardware
|
||||
- Free up CPU resources for motion detection and other Frigate processes
|
||||
- Reduce system heat and power consumption
|
||||
|
||||
### Configuration
|
||||
|
||||
Frigate provides preset configurations for common hardware acceleration scenarios. Set up `hwaccel_args` based on your hardware in your [configuration](../configuration/reference) as described in the [getting started guide](../guides/getting_started).
|
||||
|
||||
### Troubleshooting Hardware Acceleration
|
||||
|
||||
If hardware acceleration isn't working:
|
||||
|
||||
1. Check Frigate logs for FFmpeg errors related to hwaccel
|
||||
2. Verify the hardware device is accessible inside the container
|
||||
3. Ensure your camera streams use H.264 or H.265 codecs (most common)
|
||||
4. Try different presets if the automatic detection fails
|
||||
5. Check that your GPU drivers are properly installed on the host system
|
||||
|
||||
## 2. Detector Selection and Configuration
|
||||
|
||||
**Priority: Critical**
|
||||
|
||||
Choosing the right detector for your hardware is the single most important factor for detection performance. The detector is responsible for running the AI model that identifies objects in video frames. Different detector types have vastly different performance characteristics and hardware requirements, as detailed in the [hardware documentation](../frigate/hardware).
|
||||
|
||||
### Understanding Detector Performance
|
||||
|
||||
Frigate uses motion detection as a first-line check before running expensive object detection, as explained in the [motion detection documentation](../configuration/motion_detection). When motion is detected, Frigate creates a "region" (the green boxes in the debug viewer) and sends it to the detector. The detector's inference speed determines how many detections per second your system can handle.
|
||||
|
||||
**Calculating Detector Capacity:** Your detector has a finite capacity measured in detections per second. With an inference speed of 10ms, your detector can handle approximately 100 detections per second (1000ms / 10ms = 100).If your cameras collectively require more than this capacity, you'll experience delays, missed detections, or the system will fall behind.
|
||||
|
||||
### Choosing the Right Detector
|
||||
|
||||
Different detectors have vastly different performance characteristics, see the expected performance for object detectors in [the hardware docs](../frigate/hardware)
|
||||
|
||||
### Multiple Detector Instances
|
||||
|
||||
When a single detector cannot keep up with your camera count, some detector types (`openvino`, `onnx`) allow you to define multiple detector instances to share the workload. This is particularly useful with GPU-based detectors that have sufficient VRAM to run multiple inference processes.
|
||||
|
||||
For detailed instructions on configuring multiple detectors, see the [Object Detectors documentation](../configuration/object_detectors).
|
||||
|
||||
|
||||
**When to add a second detector:**
|
||||
|
||||
- Skipped FPS is consistently > 0 even during normal activity
|
||||
|
||||
### Model Selection and Optimization
|
||||
|
||||
The model you use significantly impacts detector performance. Frigate provides default models optimized for each detector type, but you can customize them as described in the [detector documentation](../configuration/object_detectors).
|
||||
|
||||
**Model Size Trade-offs:**
|
||||
|
||||
- Smaller models (320x320): Faster inference, Frigate is specifically optimized for a 320x320 size model.
|
||||
- Larger models (640x640): Slower inference, can sometimes have higher accuracy on very large objects that take up a majority of the frame.
|
||||
@@ -1,6 +1,6 @@
|
||||
---
|
||||
id: dummy-camera
|
||||
title: Troubleshooting Detection
|
||||
title: Analyzing Object Detection
|
||||
---
|
||||
|
||||
When investigating object detection or tracking problems, it can be helpful to replay an exported video as a temporary "dummy" camera. This lets you reproduce issues locally, iterate on configuration (detections, zones, enrichment settings), and capture logs and clips for analysis.
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
---
|
||||
id: edgetpu
|
||||
title: Troubleshooting EdgeTPU
|
||||
title: EdgeTPU Errors
|
||||
---
|
||||
|
||||
## USB Coral Not Detected
|
||||
@@ -68,8 +68,7 @@ The USB Coral can become stuck and need to be restarted, this can happen for a n
|
||||
|
||||
The most common reason for the PCIe Coral not being detected is that the driver has not been installed. This process varies based on what OS and kernel that is being run.
|
||||
|
||||
- In most cases [the Coral docs](https://coral.ai/docs/m2/get-started/#2-install-the-pcie-driver-and-edge-tpu-runtime) show how to install the driver for the PCIe based Coral.
|
||||
- For some newer Linux distros (for example, Ubuntu 22.04+), https://github.com/jnicolson/gasket-builder can be used to build and install the latest version of the driver.
|
||||
- In most cases https://github.com/jnicolson/gasket-builder can be used to build and install the latest version of the driver.
|
||||
|
||||
## Attempting to load TPU as pci & Fatal Python error: Illegal instruction
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
---
|
||||
id: gpu
|
||||
title: Troubleshooting GPU
|
||||
title: GPU Errors
|
||||
---
|
||||
|
||||
## OpenVINO
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
---
|
||||
id: memory
|
||||
title: Memory Troubleshooting
|
||||
title: Memory Usage
|
||||
---
|
||||
|
||||
Frigate includes built-in memory profiling using [memray](https://bloomberg.github.io/memray/) to help diagnose memory issues. This feature allows you to profile specific Frigate modules to identify memory leaks, excessive allocations, or other memory-related problems.
|
||||
@@ -36,7 +36,6 @@ Frigate processes are named using a module-based naming scheme. Common module na
|
||||
- `frigate.output` - Output processing
|
||||
- `frigate.audio_manager` - Audio processing
|
||||
- `frigate.embeddings` - Embeddings processing
|
||||
- `frigate.embeddings_manager` - Embeddings manager
|
||||
|
||||
You can also specify the full process name (including camera-specific identifiers) if you want to profile a specific camera:
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
---
|
||||
id: recordings
|
||||
title: Troubleshooting Recordings
|
||||
title: Recordings Errors
|
||||
---
|
||||
|
||||
## I have Frigate configured for motion recording only, but it still seems to be recording even with no motion. Why?
|
||||
|
||||
@@ -170,7 +170,7 @@ const config: Config = {
|
||||
],
|
||||
},
|
||||
],
|
||||
copyright: `Copyright © ${new Date().getFullYear()} Frigate LLC`,
|
||||
copyright: `Copyright © ${new Date().getFullYear()} Frigate, Inc.`,
|
||||
},
|
||||
},
|
||||
plugins: [
|
||||
|
||||
+20
-3
@@ -129,10 +129,27 @@ const sidebars: SidebarsConfig = {
|
||||
Troubleshooting: [
|
||||
"troubleshooting/faqs",
|
||||
"troubleshooting/recordings",
|
||||
"troubleshooting/gpu",
|
||||
"troubleshooting/edgetpu",
|
||||
"troubleshooting/memory",
|
||||
"troubleshooting/dummy-camera",
|
||||
{
|
||||
type: "category",
|
||||
label: "Troubleshooting Hardware",
|
||||
link: {
|
||||
type: "generated-index",
|
||||
title: "Troubleshooting Hardware",
|
||||
description: "Troubleshooting Problems with Hardware",
|
||||
},
|
||||
items: ["troubleshooting/gpu", "troubleshooting/edgetpu"],
|
||||
},
|
||||
{
|
||||
type: "category",
|
||||
label: "Troubleshooting Resource Usage",
|
||||
link: {
|
||||
type: "generated-index",
|
||||
title: "Troubleshooting Resource Usage",
|
||||
description: "Troubleshooting issues with resource usage",
|
||||
},
|
||||
items: ["troubleshooting/cpu", "troubleshooting/memory"],
|
||||
},
|
||||
],
|
||||
Development: [
|
||||
"development/contributing",
|
||||
|
||||
Vendored
+5
-5
@@ -1,12 +1,12 @@
|
||||
# COPYRIGHT AND TRADEMARK NOTICE
|
||||
|
||||
The images, logos, and icons contained in this directory (the "Brand Assets") are
|
||||
proprietary to Frigate LLC and are NOT covered by the MIT License governing the
|
||||
proprietary to Frigate, Inc. and are NOT covered by the MIT License governing the
|
||||
rest of this repository.
|
||||
|
||||
1. TRADEMARK STATUS
|
||||
The "Frigate" name and the accompanying logo are common law trademarks™ of
|
||||
Frigate LLC. Frigate LLC reserves all rights to these marks.
|
||||
Frigate, Inc. Frigate, Inc. reserves all rights to these marks.
|
||||
|
||||
2. LIMITED PERMISSION FOR USE
|
||||
Permission is hereby granted to display these Brand Assets strictly for the
|
||||
@@ -17,9 +17,9 @@ rest of this repository.
|
||||
3. RESTRICTIONS
|
||||
You may NOT:
|
||||
a. Use these Brand Assets to represent a derivative work (fork) as an official
|
||||
product of Frigate LLC.
|
||||
product of Frigate, Inc.
|
||||
b. Use these Brand Assets in a way that implies endorsement, sponsorship, or
|
||||
commercial affiliation with Frigate LLC.
|
||||
commercial affiliation with Frigate, Inc.
|
||||
c. Modify or alter the Brand Assets.
|
||||
|
||||
If you fork this repository with the intent to distribute a modified or competing
|
||||
@@ -27,4 +27,4 @@ version of the software, you must replace these Brand Assets with your own
|
||||
original content.
|
||||
|
||||
ALL RIGHTS RESERVED.
|
||||
Copyright (c) 2025 Frigate LLC.
|
||||
Copyright (c) 2026 Frigate, Inc.
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
from typing import Union
|
||||
from typing import Optional, Union
|
||||
|
||||
from pydantic import BaseModel, Field
|
||||
from pydantic.json_schema import SkipJsonSchema
|
||||
@@ -16,5 +16,5 @@ class ExportRecordingsBody(BaseModel):
|
||||
source: PlaybackSourceEnum = Field(
|
||||
default=PlaybackSourceEnum.recordings, title="Playback source"
|
||||
)
|
||||
name: str = Field(title="Friendly name", default=None, max_length=256)
|
||||
name: Optional[str] = Field(title="Friendly name", default=None, max_length=256)
|
||||
image_path: Union[str, SkipJsonSchema[None]] = None
|
||||
|
||||
@@ -1935,7 +1935,7 @@ async def label_clip(request: Request, camera_name: str, label: str):
|
||||
try:
|
||||
event = event_query.get()
|
||||
|
||||
return await event_clip(request, event.id)
|
||||
return await event_clip(request, event.id, 0)
|
||||
except DoesNotExist:
|
||||
return JSONResponse(
|
||||
content={"success": False, "message": "Event not found"}, status_code=404
|
||||
|
||||
@@ -388,7 +388,7 @@ class WebPushClient(Communicator):
|
||||
else:
|
||||
title = base_title
|
||||
|
||||
message = payload["after"]["data"]["metadata"]["scene"]
|
||||
message = payload["after"]["data"]["metadata"]["shortSummary"]
|
||||
else:
|
||||
zone_names = payload["after"]["data"]["zones"]
|
||||
formatted_zone_names = []
|
||||
|
||||
@@ -28,6 +28,7 @@ from frigate.util.builtin import (
|
||||
get_ffmpeg_arg_list,
|
||||
)
|
||||
from frigate.util.config import (
|
||||
CURRENT_CONFIG_VERSION,
|
||||
StreamInfoRetriever,
|
||||
convert_area_to_pixels,
|
||||
find_config_file,
|
||||
@@ -76,11 +77,12 @@ logger = logging.getLogger(__name__)
|
||||
|
||||
yaml = YAML()
|
||||
|
||||
DEFAULT_CONFIG = """
|
||||
DEFAULT_CONFIG = f"""
|
||||
mqtt:
|
||||
enabled: False
|
||||
|
||||
cameras: {} # No cameras defined, UI wizard should be used
|
||||
cameras: {{}} # No cameras defined, UI wizard should be used
|
||||
version: {CURRENT_CONFIG_VERSION}
|
||||
"""
|
||||
|
||||
DEFAULT_DETECTORS = {"cpu": {"type": "cpu"}}
|
||||
@@ -753,8 +755,7 @@ class FrigateConfig(FrigateBaseModel):
|
||||
if new_config and f.tell() == 0:
|
||||
f.write(DEFAULT_CONFIG)
|
||||
logger.info(
|
||||
"Created default config file, see the getting started docs \
|
||||
for configuration https://docs.frigate.video/guides/getting_started"
|
||||
"Created default config file, see the getting started docs for configuration: https://docs.frigate.video/guides/getting_started"
|
||||
)
|
||||
|
||||
f.seek(0)
|
||||
|
||||
@@ -86,7 +86,11 @@ class ObjectDescriptionProcessor(PostProcessorApi):
|
||||
and data["id"] not in self.early_request_sent
|
||||
):
|
||||
if data["has_clip"] and data["has_snapshot"]:
|
||||
event: Event = Event.get(Event.id == data["id"])
|
||||
try:
|
||||
event: Event = Event.get(Event.id == data["id"])
|
||||
except DoesNotExist:
|
||||
logger.error(f"Event {data['id']} not found")
|
||||
return
|
||||
|
||||
if (
|
||||
not camera_config.objects.genai.objects
|
||||
|
||||
@@ -92,7 +92,7 @@ class ReviewDescriptionProcessor(PostProcessorApi):
|
||||
|
||||
pixels_per_image = width * height
|
||||
tokens_per_image = pixels_per_image / 1250
|
||||
prompt_tokens = 3500
|
||||
prompt_tokens = 3800
|
||||
response_tokens = 300
|
||||
available_tokens = context_size - prompt_tokens - response_tokens
|
||||
max_frames = int(available_tokens / tokens_per_image)
|
||||
|
||||
@@ -8,6 +8,9 @@ class ReviewMetadata(BaseModel):
|
||||
scene: str = Field(
|
||||
description="A comprehensive description of the setting and entities, including relevant context and plausible inferences if supported by visual evidence."
|
||||
)
|
||||
shortSummary: str = Field(
|
||||
description="A brief 2-sentence summary of the scene, suitable for notifications. Should capture the key activity and context without full detail."
|
||||
)
|
||||
confidence: float = Field(
|
||||
description="A float between 0 and 1 representing your overall confidence in this analysis."
|
||||
)
|
||||
|
||||
@@ -139,8 +139,31 @@ class ONNXModelRunner(BaseModelRunner):
|
||||
ModelTypeEnum.dfine.value,
|
||||
]
|
||||
|
||||
def __init__(self, ort: ort.InferenceSession):
|
||||
@staticmethod
|
||||
def is_concurrent_model(model_type: str | None) -> bool:
|
||||
"""Check if model requires thread locking for concurrent inference.
|
||||
|
||||
Some models (like JinaV2) share one runner between text and vision embeddings
|
||||
called from different threads, requiring thread synchronization.
|
||||
"""
|
||||
if not model_type:
|
||||
return False
|
||||
|
||||
# Import here to avoid circular imports
|
||||
from frigate.embeddings.types import EnrichmentModelTypeEnum
|
||||
|
||||
return model_type == EnrichmentModelTypeEnum.jina_v2.value
|
||||
|
||||
def __init__(self, ort: ort.InferenceSession, model_type: str | None = None):
|
||||
self.ort = ort
|
||||
self.model_type = model_type
|
||||
|
||||
# Thread lock to prevent concurrent inference (needed for JinaV2 which shares
|
||||
# one runner between text and vision embeddings called from different threads)
|
||||
if self.is_concurrent_model(model_type):
|
||||
self._inference_lock = threading.Lock()
|
||||
else:
|
||||
self._inference_lock = None
|
||||
|
||||
def get_input_names(self) -> list[str]:
|
||||
return [input.name for input in self.ort.get_inputs()]
|
||||
@@ -150,6 +173,10 @@ class ONNXModelRunner(BaseModelRunner):
|
||||
return self.ort.get_inputs()[0].shape[3]
|
||||
|
||||
def run(self, input: dict[str, Any]) -> Any | None:
|
||||
if self._inference_lock:
|
||||
with self._inference_lock:
|
||||
return self.ort.run(None, input)
|
||||
|
||||
return self.ort.run(None, input)
|
||||
|
||||
|
||||
@@ -576,5 +603,6 @@ def get_optimized_runner(
|
||||
),
|
||||
providers=providers,
|
||||
provider_options=options,
|
||||
)
|
||||
),
|
||||
model_type=model_type,
|
||||
)
|
||||
|
||||
@@ -203,7 +203,9 @@ class EmbeddingMaintainer(threading.Thread):
|
||||
# post processors
|
||||
self.post_processors: list[PostProcessorApi] = []
|
||||
|
||||
if any(c.review.genai.enabled_in_config for c in self.config.cameras.values()):
|
||||
if self.genai_client is not None and any(
|
||||
c.review.genai.enabled_in_config for c in self.config.cameras.values()
|
||||
):
|
||||
self.post_processors.append(
|
||||
ReviewDescriptionProcessor(
|
||||
self.config, self.requestor, self.metrics, self.genai_client
|
||||
@@ -244,7 +246,9 @@ class EmbeddingMaintainer(threading.Thread):
|
||||
)
|
||||
self.post_processors.append(semantic_trigger_processor)
|
||||
|
||||
if any(c.objects.genai.enabled_in_config for c in self.config.cameras.values()):
|
||||
if self.genai_client is not None and any(
|
||||
c.objects.genai.enabled_in_config for c in self.config.cameras.values()
|
||||
):
|
||||
self.post_processors.append(
|
||||
ObjectDescriptionProcessor(
|
||||
self.config,
|
||||
@@ -629,7 +633,7 @@ class EmbeddingMaintainer(threading.Thread):
|
||||
|
||||
camera, frame_name, _, _, motion_boxes, _ = data
|
||||
|
||||
if not camera or len(motion_boxes) == 0:
|
||||
if not camera or len(motion_boxes) == 0 or camera not in self.config.cameras:
|
||||
return
|
||||
|
||||
camera_config = self.config.cameras[camera]
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
import io
|
||||
import logging
|
||||
import os
|
||||
import threading
|
||||
|
||||
import numpy as np
|
||||
from PIL import Image
|
||||
@@ -53,6 +54,11 @@ class JinaV2Embedding(BaseEmbedding):
|
||||
self.tokenizer = None
|
||||
self.image_processor = None
|
||||
self.runner = None
|
||||
|
||||
# Lock to prevent concurrent calls (text and vision share this instance)
|
||||
self._call_lock = threading.Lock()
|
||||
|
||||
# download the model and tokenizer
|
||||
files_names = list(self.download_urls.keys()) + [self.tokenizer_file]
|
||||
if not all(
|
||||
os.path.exists(os.path.join(self.download_path, n)) for n in files_names
|
||||
@@ -200,37 +206,40 @@ class JinaV2Embedding(BaseEmbedding):
|
||||
def __call__(
|
||||
self, inputs: list[str] | list[Image.Image] | list[str], embedding_type=None
|
||||
) -> list[np.ndarray]:
|
||||
self.embedding_type = embedding_type
|
||||
if not self.embedding_type:
|
||||
raise ValueError(
|
||||
"embedding_type must be specified either in __init__ or __call__"
|
||||
)
|
||||
# Lock the entire call to prevent race conditions when text and vision
|
||||
# embeddings are called concurrently from different threads
|
||||
with self._call_lock:
|
||||
self.embedding_type = embedding_type
|
||||
if not self.embedding_type:
|
||||
raise ValueError(
|
||||
"embedding_type must be specified either in __init__ or __call__"
|
||||
)
|
||||
|
||||
self._load_model_and_utils()
|
||||
processed = self._preprocess_inputs(inputs)
|
||||
batch_size = len(processed)
|
||||
self._load_model_and_utils()
|
||||
processed = self._preprocess_inputs(inputs)
|
||||
batch_size = len(processed)
|
||||
|
||||
# Prepare ONNX inputs with matching batch sizes
|
||||
onnx_inputs = {}
|
||||
if self.embedding_type == "text":
|
||||
onnx_inputs["input_ids"] = np.stack([x[0] for x in processed])
|
||||
onnx_inputs["pixel_values"] = np.zeros(
|
||||
(batch_size, 3, 512, 512), dtype=np.float32
|
||||
)
|
||||
elif self.embedding_type == "vision":
|
||||
onnx_inputs["input_ids"] = np.zeros((batch_size, 16), dtype=np.int64)
|
||||
onnx_inputs["pixel_values"] = np.stack([x[0] for x in processed])
|
||||
else:
|
||||
raise ValueError("Invalid embedding type")
|
||||
# Prepare ONNX inputs with matching batch sizes
|
||||
onnx_inputs = {}
|
||||
if self.embedding_type == "text":
|
||||
onnx_inputs["input_ids"] = np.stack([x[0] for x in processed])
|
||||
onnx_inputs["pixel_values"] = np.zeros(
|
||||
(batch_size, 3, 512, 512), dtype=np.float32
|
||||
)
|
||||
elif self.embedding_type == "vision":
|
||||
onnx_inputs["input_ids"] = np.zeros((batch_size, 16), dtype=np.int64)
|
||||
onnx_inputs["pixel_values"] = np.stack([x[0] for x in processed])
|
||||
else:
|
||||
raise ValueError("Invalid embedding type")
|
||||
|
||||
# Run inference
|
||||
outputs = self.runner.run(onnx_inputs)
|
||||
if self.embedding_type == "text":
|
||||
embeddings = outputs[2] # text embeddings
|
||||
elif self.embedding_type == "vision":
|
||||
embeddings = outputs[3] # image embeddings
|
||||
else:
|
||||
raise ValueError("Invalid embedding type")
|
||||
# Run inference
|
||||
outputs = self.runner.run(onnx_inputs)
|
||||
if self.embedding_type == "text":
|
||||
embeddings = outputs[2] # text embeddings
|
||||
elif self.embedding_type == "vision":
|
||||
embeddings = outputs[3] # image embeddings
|
||||
else:
|
||||
raise ValueError("Invalid embedding type")
|
||||
|
||||
embeddings = self._postprocess_outputs(embeddings)
|
||||
return [embedding for embedding in embeddings]
|
||||
embeddings = self._postprocess_outputs(embeddings)
|
||||
return [embedding for embedding in embeddings]
|
||||
|
||||
@@ -101,6 +101,7 @@ When forming your description:
|
||||
Your response MUST be a flat JSON object with:
|
||||
- `title` (string): A concise, direct title that describes the primary action or event in the sequence, not just what you literally see. Use spatial context when available to make titles more meaningful. When multiple objects/actions are present, prioritize whichever is most prominent or occurs first. Use names from "Objects in Scene" based on what you visually observe. If you see both a name and an unidentified object of the same type but visually observe only one person/object, use ONLY the name. Examples: "Joe walking dog", "Person taking out trash", "Vehicle arriving in driveway", "Joe accessing vehicle", "Person leaving porch for driveway".
|
||||
- `scene` (string): A narrative description of what happens across the sequence from start to finish, in chronological order. Start by describing how the sequence begins, then describe the progression of events. **Describe all significant movements and actions in the order they occur.** For example, if a vehicle arrives and then a person exits, describe both actions sequentially. **Only describe actions you can actually observe happening in the frames provided.** Do not infer or assume actions that aren't visible (e.g., if you see someone walking but never see them sit, don't say they sat down). Include setting, detected objects, and their observable actions. Avoid speculation or filling in assumed behaviors. Your description should align with and support the threat level you assign.
|
||||
- `shortSummary` (string): A brief 2-sentence summary of the scene, suitable for notifications. Should capture the key activity and context without full detail. This should be a condensed version of the scene description above.
|
||||
- `confidence` (float): 0-1 confidence in your analysis. Higher confidence when objects/actions are clearly visible and context is unambiguous. Lower confidence when the sequence is unclear, objects are partially obscured, or context is ambiguous.
|
||||
- `potential_threat_level` (integer): 0, 1, or 2 as defined in "Normal Activity Patterns for This Property" above. Your threat level must be consistent with your scene description and the guidance above.
|
||||
{get_concern_prompt()}
|
||||
@@ -192,6 +193,8 @@ Input format: Each event is a JSON object with:
|
||||
- "title", "scene", "confidence", "potential_threat_level" (0-2), "other_concerns", "camera", "time", "start_time", "end_time"
|
||||
- "context": array of related events from other cameras that occurred during overlapping time periods
|
||||
|
||||
**Note: Use the "scene" field for event descriptions in the report. Ignore any "shortSummary" field if present.**
|
||||
|
||||
Report Structure - Use this EXACT format:
|
||||
|
||||
# Security Summary - {time_range}
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
import logging
|
||||
from typing import Any, Optional
|
||||
|
||||
from httpx import TimeoutException
|
||||
from httpx import RemoteProtocolError, TimeoutException
|
||||
from ollama import Client as ApiClient
|
||||
from ollama import ResponseError
|
||||
|
||||
@@ -68,7 +68,12 @@ class OllamaClient(GenAIClient):
|
||||
f"Ollama tokens used: eval_count={result.get('eval_count')}, prompt_eval_count={result.get('prompt_eval_count')}"
|
||||
)
|
||||
return result["response"].strip()
|
||||
except (TimeoutException, ResponseError, ConnectionError) as e:
|
||||
except (
|
||||
TimeoutException,
|
||||
ResponseError,
|
||||
RemoteProtocolError,
|
||||
ConnectionError,
|
||||
) as e:
|
||||
logger.warning("Ollama returned an error: %s", str(e))
|
||||
return None
|
||||
|
||||
|
||||
@@ -139,9 +139,11 @@ class OutputProcess(FrigateProcess):
|
||||
if CameraConfigUpdateEnum.add in updates:
|
||||
for camera in updates["add"]:
|
||||
jsmpeg_cameras[camera] = JsmpegCamera(
|
||||
cam_config, self.stop_event, websocket_server
|
||||
self.config.cameras[camera], self.stop_event, websocket_server
|
||||
)
|
||||
preview_recorders[camera] = PreviewRecorder(
|
||||
self.config.cameras[camera]
|
||||
)
|
||||
preview_recorders[camera] = PreviewRecorder(cam_config)
|
||||
preview_write_times[camera] = 0
|
||||
|
||||
if (
|
||||
|
||||
@@ -42,11 +42,10 @@ def get_latest_version(config: FrigateConfig) -> str:
|
||||
"https://api.github.com/repos/blakeblackshear/frigate/releases/latest",
|
||||
timeout=10,
|
||||
)
|
||||
response = request.json()
|
||||
except (RequestException, JSONDecodeError):
|
||||
return "unknown"
|
||||
|
||||
response = request.json()
|
||||
|
||||
if request.ok and response and "tag_name" in response:
|
||||
return str(response.get("tag_name").replace("v", ""))
|
||||
else:
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
# COPYRIGHT AND TRADEMARK NOTICE
|
||||
|
||||
The images, logos, and icons contained in this directory (the "Brand Assets") are
|
||||
proprietary to Frigate LLC and are NOT covered by the MIT License governing the
|
||||
proprietary to Frigate, Inc. and are NOT covered by the MIT License governing the
|
||||
rest of this repository.
|
||||
|
||||
1. TRADEMARK STATUS
|
||||
The "Frigate" name and the accompanying logo are common law trademarks™ of
|
||||
Frigate LLC. Frigate LLC reserves all rights to these marks.
|
||||
Frigate, Inc. Frigate, Inc. reserves all rights to these marks.
|
||||
|
||||
2. LIMITED PERMISSION FOR USE
|
||||
Permission is hereby granted to display these Brand Assets strictly for the
|
||||
@@ -17,9 +17,9 @@ rest of this repository.
|
||||
3. RESTRICTIONS
|
||||
You may NOT:
|
||||
a. Use these Brand Assets to represent a derivative work (fork) as an official
|
||||
product of Frigate LLC.
|
||||
product of Frigate, Inc.
|
||||
b. Use these Brand Assets in a way that implies endorsement, sponsorship, or
|
||||
commercial affiliation with Frigate LLC.
|
||||
commercial affiliation with Frigate, Inc.
|
||||
c. Modify or alter the Brand Assets.
|
||||
|
||||
If you fork this repository with the intent to distribute a modified or competing
|
||||
@@ -30,4 +30,4 @@ For full usage guidelines, strictly see the TRADEMARK.md file in the
|
||||
repository root.
|
||||
|
||||
ALL RIGHTS RESERVED.
|
||||
Copyright (c) 2025 Frigate LLC.
|
||||
Copyright (c) 2026 Frigate, Inc.
|
||||
|
||||
@@ -132,5 +132,9 @@
|
||||
},
|
||||
"count_one": "{{count}} Classe",
|
||||
"count_other": "{{count}} Classes"
|
||||
},
|
||||
"attributes": {
|
||||
"label": "Atributs de classificació",
|
||||
"all": "Tots els atributs"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -54,7 +54,7 @@
|
||||
},
|
||||
"renameCategory": {
|
||||
"title": "Reanomena la classe",
|
||||
"desc": "Introduïu un nom nou per {{name}}. Se us requerirà que torneu a entrenar el model per al canvi de nom a afectar."
|
||||
"desc": "Introduïu un nom nou per {{name}}. Se us requerirà que torneu a entrenar el model per al canvi de nom afectar."
|
||||
},
|
||||
"description": {
|
||||
"invalidName": "Nom no vàlid. Els noms només poden incloure lletres, números, espais, apòstrofs, guions baixos i guions."
|
||||
@@ -116,7 +116,8 @@
|
||||
"classesUnique": "Els noms de classe han de ser únics",
|
||||
"stateRequiresTwoClasses": "Els models d'estat requereixen almenys 2 classes",
|
||||
"objectLabelRequired": "Seleccioneu una etiqueta d'objecte",
|
||||
"objectTypeRequired": "Seleccioneu un tipus de classificació"
|
||||
"objectTypeRequired": "Seleccioneu un tipus de classificació",
|
||||
"noneNotAllowed": "La classe 'none' no està permesa"
|
||||
},
|
||||
"states": "Estats"
|
||||
},
|
||||
@@ -172,7 +173,9 @@
|
||||
"states": "Estats"
|
||||
},
|
||||
"details": {
|
||||
"scoreInfo": "La puntuació representa la confiança mitjana de la classificació en totes les deteccions d'aquest objecte."
|
||||
"scoreInfo": "La puntuació representa la confiança mitjana de la classificació en totes les deteccions d'aquest objecte.",
|
||||
"none": "Cap",
|
||||
"unknown": "Desconegut"
|
||||
},
|
||||
"edit": {
|
||||
"title": "Edita el model de classificació",
|
||||
|
||||
@@ -100,13 +100,15 @@
|
||||
"updatedSublabel": "Subetiqueta actualitzada amb èxit.",
|
||||
"updatedLPR": "Matrícula actualitzada amb èxit.",
|
||||
"regenerate": "El {{provider}} ha sol·licitat una nova descripció. En funció de la velocitat del vostre proveïdor, la nova descripció pot trigar un temps a regenerar-se.",
|
||||
"audioTranscription": "S'ha sol·licitat correctament la transcripció d'àudio. Depenent de la velocitat del vostre servidor Frigate, la transcripció pot trigar una estona a completar-se."
|
||||
"audioTranscription": "S'ha sol·licitat correctament la transcripció d'àudio. Depenent de la velocitat del vostre servidor Frigate, la transcripció pot trigar una estona a completar-se.",
|
||||
"updatedAttributes": "Els atributs s'han actualitzat correctament."
|
||||
},
|
||||
"error": {
|
||||
"regenerate": "No s'ha pogut contactar amb {{provider}} per obtenir una nova descripció: {{errorMessage}}",
|
||||
"updatedSublabelFailed": "No s'ha pogut actualitzar la subetiqueta: {{errorMessage}}",
|
||||
"updatedLPRFailed": "No s'ha pogut actualitzar la matrícula: {{errorMessage}}",
|
||||
"audioTranscription": "Error en demanar la transcripció d'audio {{errorMessage}}"
|
||||
"audioTranscription": "Error en demanar la transcripció d'audio {{errorMessage}}",
|
||||
"updatedAttributesFailed": "No s'han pogut actualitzar els atributs: {{errorMessage}}"
|
||||
}
|
||||
},
|
||||
"title": "Revisar detalls de l'element",
|
||||
@@ -162,7 +164,12 @@
|
||||
},
|
||||
"score": {
|
||||
"label": "Puntuació"
|
||||
}
|
||||
},
|
||||
"editAttributes": {
|
||||
"title": "Edita els atributs",
|
||||
"desc": "Seleccioneu els atributs de classificació per a aquesta {{label}}"
|
||||
},
|
||||
"attributes": "Atributs de classificació"
|
||||
},
|
||||
"searchResult": {
|
||||
"tooltip": "S'ha identificat {{type}} amb una confiança del {{confidence}}%",
|
||||
|
||||
@@ -15,7 +15,8 @@
|
||||
"max_speed": "Velocitat màxima",
|
||||
"recognized_license_plate": "Matrícula reconeguda",
|
||||
"has_clip": "Té Clip",
|
||||
"has_snapshot": "Té instantània"
|
||||
"has_snapshot": "Té instantània",
|
||||
"attributes": "Atributs"
|
||||
},
|
||||
"searchType": {
|
||||
"thumbnail": "Miniatura",
|
||||
|
||||
@@ -484,7 +484,7 @@
|
||||
"users": {
|
||||
"table": {
|
||||
"username": "Usuari",
|
||||
"password": "Contrasenya",
|
||||
"password": "Restableix la contrasenya",
|
||||
"deleteUser": "Suprimir usuari",
|
||||
"noUsers": "No s'han trobat usuaris.",
|
||||
"changeRole": "Canviar la funció d’usuari",
|
||||
@@ -595,7 +595,7 @@
|
||||
"title": "Gestió d'usuaris",
|
||||
"desc": "Gestioneu els comptes d'usuari d'aquesta instància de Frigate."
|
||||
},
|
||||
"updatePassword": "Actualitzar contrasenya"
|
||||
"updatePassword": "Restableix la contrasenya"
|
||||
},
|
||||
"frigatePlus": {
|
||||
"snapshotConfig": {
|
||||
@@ -696,7 +696,7 @@
|
||||
"title": "Classificació d'ocells",
|
||||
"desc": "La classificació d’ocells identifica ocells coneguts mitjançant un model TensorFlow quantitzat. Quan es reconeix un ocell conegut, el seu nom comú s’afegeix com a subetiqueta. Aquesta informació es mostra a la interfície d’usuari, als filtres i també a les notificacions."
|
||||
},
|
||||
"title": "Parmàmetres complementaris",
|
||||
"title": "Configuració dels enriquiments",
|
||||
"toast": {
|
||||
"error": "No s'han pogut guardar els canvis de configuració: {{errorMessage}}",
|
||||
"success": "Els paràmetres complementaris s'han desat. Reinicia Frigate per aplicar els canvis."
|
||||
@@ -805,7 +805,7 @@
|
||||
"documentTitle": "Disparadors",
|
||||
"management": {
|
||||
"title": "Activadors",
|
||||
"desc": "Gestionar els disparadors de {{camera}}. Usa les tipus de miniatures per disparar miniatures similars a l'objecte a seguir seleccionat, i el tipus de descripció per disparar en cas de descripcions similars a l'especificada."
|
||||
"desc": "Gestionar els disparadors de {{camera}}. Usa els tipus de miniatures per disparar miniatures similars a l'objecte a seguir seleccionat, i el tipus de descripció per disparar en cas de descripcions similars a l'especificada."
|
||||
},
|
||||
"addTrigger": "Afegir disaprador",
|
||||
"semanticSearch": {
|
||||
|
||||
@@ -190,7 +190,10 @@
|
||||
"review_description_events_per_second": "Descripció de la revisió",
|
||||
"object_description": "Descripció de l'objecte",
|
||||
"object_description_speed": "Velocitat de la descripció de l'objecte",
|
||||
"object_description_events_per_second": "Descripció de l'objecte"
|
||||
"object_description_events_per_second": "Descripció de l'objecte",
|
||||
"classification": "{{name}} Classificació",
|
||||
"classification_speed": "Velocitat de classificació de {{name}}",
|
||||
"classification_events_per_second": "{{name}} Esdeveniments de classificació per segon"
|
||||
},
|
||||
"infPerSecond": "Inferències per segon",
|
||||
"averageInf": "Temps mitjà d'inferència"
|
||||
|
||||
@@ -1,34 +1,47 @@
|
||||
{
|
||||
"documentTitle": "Klasifikační modely",
|
||||
"documentTitle": "Klasifikační modely - Frigate",
|
||||
"button": {
|
||||
"deleteClassificationAttempts": "Odstrániť Klasifikačné obrazy",
|
||||
"renameCategory": "Premenovať triedu",
|
||||
"deleteCategory": "Zmazať triedu",
|
||||
"deleteImages": "Zmazať obrázok",
|
||||
"trainModel": "Trenovací model",
|
||||
"addClassification": "Pridať klasifikáciu",
|
||||
"deleteModels": "Zmazať modeli",
|
||||
"editModel": "Upraviť model"
|
||||
"renameCategory": "Přejmenovat třídu",
|
||||
"deleteCategory": "Smazat třídu",
|
||||
"deleteImages": "Smazat obrázek",
|
||||
"trainModel": "Trénovat model",
|
||||
"addClassification": "Přidat klasifikaci",
|
||||
"deleteModels": "Smazat modely",
|
||||
"editModel": "Upravit model"
|
||||
},
|
||||
"details": {
|
||||
"scoreInfo": "Skóre predstavuje priemernú istotu klasifikácie naprieč detekciami tohoto objektu."
|
||||
"scoreInfo": "Skóre predstavuje priemernú istotu klasifikácie naprieč detekciami tohoto objektu.",
|
||||
"none": "Nic",
|
||||
"unknown": "Neznámý"
|
||||
},
|
||||
"tooltip": {
|
||||
"trainingInProgress": "Model se práve trénuje",
|
||||
"noNewImages": "Žiadne nové obrázky na trénovanie. Najskôr klasifikujte viac obrazkov v datasete.",
|
||||
"noChanges": "Od posledného treningu nedošlo k žiadnym zmenám v datasete.",
|
||||
"modelNotReady": "Model nieje pripravený na trénovanie."
|
||||
"trainingInProgress": "Model se právě trénuje",
|
||||
"noNewImages": "Žádné obrázky pro trénování. Nejdříve klasifikujte obrázky pro dataset.",
|
||||
"noChanges": "Od posledního trénování nedošlo k žádné změně.",
|
||||
"modelNotReady": "Model není připravený na trénování."
|
||||
},
|
||||
"toast": {
|
||||
"success": {
|
||||
"deletedImage": "Zmazať obrazky",
|
||||
"deletedModel_one": "Úspešne odstranený {{count}} model",
|
||||
"deletedModel_few": "Úspešne odstranené {{count}} modely",
|
||||
"deletedModel_other": "Úspěšne ostranených {{count}} modelov",
|
||||
"deletedCategory": "Zmazať triedu",
|
||||
"deletedImage": "Smazat obrázky",
|
||||
"deletedModel_one": "Úspěšně odstraněný {{count}} model",
|
||||
"deletedModel_few": "Úspěšně odstraněné {{count}} modely",
|
||||
"deletedModel_other": "Úspěšně odstraněných {{count}} modelů",
|
||||
"deletedCategory": "Smazat třídu",
|
||||
"categorizedImage": "Obrázek úspěšně klasifikován",
|
||||
"trainedModel": "Úspěšně vytrénovaný model.",
|
||||
"trainingModel": "Trénování modelu bylo úspěšně zahájeno."
|
||||
"trainingModel": "Trénování modelu bylo úspěšně zahájeno.",
|
||||
"updatedModel": "Konfigurace modelu úspěšně aktualizována.",
|
||||
"renamedCategory": "Třída úspěšně přejmenována na {{name}}"
|
||||
},
|
||||
"error": {
|
||||
"deleteImageFailed": "Chyba při mazání: {{errorMessage}}",
|
||||
"deleteCategoryFailed": "Chyba při mazání třídy: {{errorMessage}}",
|
||||
"deleteModelFailed": "Chyba při mazání modelu: {{errorMessage}}",
|
||||
"categorizeFailed": "Chyba při mazání obrázku: {{errorMessage}}"
|
||||
}
|
||||
},
|
||||
"train": {
|
||||
"titleShort": "Nedávný"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -43,6 +43,7 @@
|
||||
"label": "Detail",
|
||||
"noDataFound": "Žádná detailní data k prohlédnutí",
|
||||
"aria": "Přepnout detailní zobrazení",
|
||||
"trackedObject_other": "{{count}} objektů"
|
||||
"trackedObject_other": "{{count}} objektů",
|
||||
"trackedObject_one": "{{count}} objektů"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -38,7 +38,8 @@
|
||||
"train": {
|
||||
"title": "Nedávná rozpoznání",
|
||||
"empty": "Nejsou zde žádné předchozí pokusy o rozpoznání obličeje",
|
||||
"aria": "Vybrat trénink"
|
||||
"aria": "Vybrat poslední rozpoznávání",
|
||||
"titleShort": "Nedávný"
|
||||
},
|
||||
"description": {
|
||||
"addFace": "Přidejte novou kolekci do Knihovny obličejů nahráním prvního obrázku.",
|
||||
@@ -76,7 +77,7 @@
|
||||
"deletedName_one": "{{count}} obličej byl úspěšně odstraněn.",
|
||||
"deletedName_few": "{{count}} tváře byly úspěšně odstraněny.",
|
||||
"deletedName_other": "{{count}} tváře byly úspěšně odstraněny.",
|
||||
"updatedFaceScore": "Úspěšně aktualizováno skóre obličeje.",
|
||||
"updatedFaceScore": "Úspěšně aktualizováno skóre obličeje na {{name}} ({{score}}).",
|
||||
"addFaceLibrary": "{{name}} byl(a) úspěšně přidán(a) do Knihovny obličejů!"
|
||||
},
|
||||
"error": {
|
||||
|
||||
@@ -26,7 +26,8 @@
|
||||
"min_score": "Minimální Skóre",
|
||||
"recognized_license_plate": "Rozpoznaná SPZ",
|
||||
"has_clip": "Má Klip",
|
||||
"has_snapshot": "Má Snímek"
|
||||
"has_snapshot": "Má Snímek",
|
||||
"attributes": "Atributy"
|
||||
},
|
||||
"tips": {
|
||||
"desc": {
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
"masksAndZones": "Editor masky a zón - Frigate",
|
||||
"motionTuner": "Ladění detekce pohybu - Frigate",
|
||||
"object": "Ladění - Frigate",
|
||||
"general": "Nastavení rozhraní- Frigate",
|
||||
"general": "Nastavení rozhraní - Frigate",
|
||||
"frigatePlus": "Frigate+ nastavení - Frigate",
|
||||
"enrichments": "Nastavení obohacení - Frigate",
|
||||
"cameraManagement": "Správa kamer - Frigate",
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"noRecordingsFoundForThisTime": "Ingen optagelser fundet i det angivet tidsrum",
|
||||
"noRecordingsFoundForThisTime": "Ingen optagelser fundet i det angivne tidsrum",
|
||||
"noPreviewFound": "Ingen forhåndsvisning fundet",
|
||||
"cameraDisabled": "Kamera er deaktiveret",
|
||||
"noPreviewFoundFor": "Ingen forhåndsvisning fundet for {{cameraName}}",
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
{
|
||||
"documentTitle": "Klassifikationsmodeller",
|
||||
"details": {
|
||||
"scoreInfo": "Scoren repræsenterer den gennemsnitlige klassifikationssikkerhed på tværs af alle registreringer af dette objekt."
|
||||
"scoreInfo": "Scoren repræsenterer den gennemsnitlige klassifikationssikkerhed på tværs af alle registreringer af dette objekt.",
|
||||
"unknown": "Ukendt"
|
||||
},
|
||||
"description": {
|
||||
"invalidName": "Ugyldigt navn. Navne må kun indeholde bogstaver, tal, mellemrum, apostroffer, understregninger og bindestreger."
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
"24hours": "24 Stunden",
|
||||
"month_one": "{{time}} Monat",
|
||||
"month_other": "{{time}} Monate",
|
||||
"d": "{{time}} Tag",
|
||||
"d": "{{time}} Tg.",
|
||||
"day_one": "{{time}} Tag",
|
||||
"day_other": "{{time}} Tage",
|
||||
"m": "{{time}} Min",
|
||||
@@ -37,12 +37,12 @@
|
||||
"30minutes": "30 Minuten",
|
||||
"1hour": "1 Stunde",
|
||||
"lastWeek": "Letzte Woche",
|
||||
"h": "{{time}} Stunde",
|
||||
"h": "{{time}} Std.",
|
||||
"ago": "vor {{timeAgo}}",
|
||||
"untilRestart": "Bis zum Neustart",
|
||||
"justNow": "Gerade",
|
||||
"pm": "nachmittags",
|
||||
"mo": "{{time}}Monat",
|
||||
"mo": "{{time}} Mon.",
|
||||
"formattedTimestamp": {
|
||||
"12hour": "d. MMM, hh:mm:ss aaa",
|
||||
"24hour": "dd. MMM, hh:mm:ss aaa"
|
||||
@@ -82,7 +82,7 @@
|
||||
"12hour": "d. MMM yyyy",
|
||||
"24hour": "d. MMM yyyy"
|
||||
},
|
||||
"inProgress": "In Bearbeitung",
|
||||
"inProgress": "Im Gange",
|
||||
"invalidStartTime": "Ungültige Startzeit",
|
||||
"invalidEndTime": "Ungültige Endzeit"
|
||||
},
|
||||
|
||||
@@ -132,5 +132,9 @@
|
||||
},
|
||||
"count_one": "{{count}} Klasse",
|
||||
"count_other": "{{count}} Klassen"
|
||||
},
|
||||
"attributes": {
|
||||
"label": "Klassifizierungsattribute",
|
||||
"all": "Alle Attribute"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
"title": "Latenz:",
|
||||
"value": "{{seconds}} Sekunden",
|
||||
"short": {
|
||||
"title": "Lazenz",
|
||||
"title": "Latenz",
|
||||
"value": "{{seconds}} s"
|
||||
}
|
||||
},
|
||||
|
||||
@@ -1,7 +1,9 @@
|
||||
{
|
||||
"documentTitle": "Klassifizierungsmodelle - Fregatte",
|
||||
"details": {
|
||||
"scoreInfo": "Die Punktzahl gibt die durchschnittliche Konfidenz aller Erkennungen dieses Objekts wieder."
|
||||
"scoreInfo": "Die Punktzahl gibt die durchschnittliche Konfidenz aller Erkennungen dieses Objekts wieder.",
|
||||
"none": "Keiner",
|
||||
"unknown": "Unbekannt"
|
||||
},
|
||||
"button": {
|
||||
"deleteClassificationAttempts": "Lösche klassifizierte Bilder",
|
||||
@@ -17,7 +19,7 @@
|
||||
"trainingInProgress": "Modell wird gerade trainiert",
|
||||
"noNewImages": "Keine weiteren Bilder zum trainieren. Bitte klassifiziere weitere Bilder im Datensatz.",
|
||||
"noChanges": "Keine Veränderungen des Datensatzes seit dem letzten Training.",
|
||||
"modelNotReady": "Modell ist nicht bereit zum Training"
|
||||
"modelNotReady": "Modell ist nicht bereit für das Training"
|
||||
},
|
||||
"toast": {
|
||||
"success": {
|
||||
@@ -130,7 +132,7 @@
|
||||
"classesTip": "Über Klassen lernen",
|
||||
"classesStateDesc": "Definieren Sie die verschiedenen Zustände, in denen sich Ihr Kamerabereich befinden kann. Beispiel: „offen” und „geschlossen” für ein Garagentor.",
|
||||
"classesObjectDesc": "Definieren Sie die verschiedenen Kategorien, in die erkannte Objekte klassifiziert werden sollen. Beispiel: „Lieferant“, „Bewohner“, „Fremder“ für die Klassifizierung von Personen.",
|
||||
"classPlaceholder": "Eingabe Klassenbezeichnung...",
|
||||
"classPlaceholder": "Klassenbezeichnung eingeben...",
|
||||
"errors": {
|
||||
"nameRequired": "Modellname ist erforderlich",
|
||||
"nameLength": "Der Modellname darf maximal 64 Zeichen lang sein",
|
||||
@@ -139,7 +141,8 @@
|
||||
"classesUnique": "Klassenname muss eindeutig sein",
|
||||
"stateRequiresTwoClasses": "Gebietsmodelle erfordern mindestens zwei Klassen",
|
||||
"objectLabelRequired": "Bitte wähle eine Objektbeschriftung",
|
||||
"objectTypeRequired": "Bitte wählen Sie einen Klassifizierungstyp aus"
|
||||
"objectTypeRequired": "Bitte wählen Sie einen Klassifizierungstyp aus",
|
||||
"noneNotAllowed": "Die Klasse „none“ ist nicht zulässig"
|
||||
}
|
||||
},
|
||||
"step2": {
|
||||
|
||||
@@ -18,13 +18,15 @@
|
||||
"updatedSublabel": "Unterkategorie erfolgreich aktualisiert.",
|
||||
"updatedLPR": "Nummernschild erfolgreich aktualisiert.",
|
||||
"regenerate": "Eine neue Beschreibung wurde von {{provider}} angefordert. Je nach Geschwindigkeit des Anbieters kann es einige Zeit dauern, bis die neue Beschreibung generiert ist.",
|
||||
"audioTranscription": "Die Audio-Transkription wurde erfolgreich angefordert. Je nach Geschwindigkeit Ihres Frigate-Servers kann die Transkription einige Zeit in Anspruch nehmen."
|
||||
"audioTranscription": "Die Audio-Transkription wurde erfolgreich angefordert. Je nach Geschwindigkeit Ihres Frigate-Servers kann die Transkription einige Zeit in Anspruch nehmen.",
|
||||
"updatedAttributes": "Attribute erfolgreich aktualisiert."
|
||||
},
|
||||
"error": {
|
||||
"regenerate": "Der Aufruf von {{provider}} für eine neue Beschreibung ist fehlgeschlagen: {{errorMessage}}",
|
||||
"updatedSublabelFailed": "Untekategorie konnte nicht aktualisiert werden: {{errorMessage}}",
|
||||
"updatedLPRFailed": "Aktualisierung des Kennzeichens fehlgeschlagen: {{errorMessage}}",
|
||||
"audioTranscription": "Die Anforderung der Audio Transkription ist fehlgeschlagen: {{errorMessage}}"
|
||||
"audioTranscription": "Die Anforderung der Audio Transkription ist fehlgeschlagen: {{errorMessage}}",
|
||||
"updatedAttributesFailed": "Attribute konnten nicht aktualisiert werden: {{errorMessage}}"
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -72,7 +74,12 @@
|
||||
},
|
||||
"score": {
|
||||
"label": "Ergebnis"
|
||||
}
|
||||
},
|
||||
"editAttributes": {
|
||||
"title": "Attribute bearbeiten",
|
||||
"desc": "Wählen Sie Klassifizierungsattribute für dieses {{label}} aus"
|
||||
},
|
||||
"attributes": "Klassifizierungsattribute"
|
||||
},
|
||||
"documentTitle": "Erkunde - Frigate",
|
||||
"generativeAI": "Generative KI",
|
||||
@@ -254,7 +261,7 @@
|
||||
"faceOrLicense_plate": "{{attribute}} erkannt für {{label}}",
|
||||
"other": "{{label}} erkannt als {{attribute}}"
|
||||
},
|
||||
"gone": "{{label}} hat verlassen",
|
||||
"gone": "{{label}} hat sich entfernt",
|
||||
"heard": "{{label}} wurde gehört",
|
||||
"external": "{{label}} erkannt",
|
||||
"header": {
|
||||
|
||||
@@ -44,7 +44,7 @@
|
||||
"deleteFace": "Lösche Gesicht"
|
||||
},
|
||||
"train": {
|
||||
"title": "Kürzliche Erkennungen",
|
||||
"title": "Neueste Erkennungen",
|
||||
"aria": "Wähle aktuelle Erkennungen",
|
||||
"empty": "Es gibt keine aktuellen Versuche zur Gesichtserkennung",
|
||||
"titleShort": "frisch"
|
||||
|
||||
@@ -25,7 +25,8 @@
|
||||
"max_speed": "Maximalgeschwindigkeit",
|
||||
"time_range": "Zeitraum",
|
||||
"labels": "Labels",
|
||||
"sub_labels": "Unterlabels"
|
||||
"sub_labels": "Unterlabels",
|
||||
"attributes": "Attribute"
|
||||
},
|
||||
"toast": {
|
||||
"error": {
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
"camera": "Kameraeinstellungen - Frigate",
|
||||
"masksAndZones": "Masken- und Zoneneditor – Frigate",
|
||||
"object": "Debug - Frigate",
|
||||
"general": "UI-Einstellungen – Frigate",
|
||||
"general": "UI-Einstellungen - Frigate",
|
||||
"frigatePlus": "Frigate+ Einstellungen – Frigate",
|
||||
"classification": "Klassifizierungseinstellungen – Frigate",
|
||||
"motionTuner": "Bewegungserkennungs-Optimierer – Frigate",
|
||||
@@ -490,7 +490,7 @@
|
||||
},
|
||||
"users": {
|
||||
"addUser": "Benutzer hinzufügen",
|
||||
"updatePassword": "Passwort aktualisieren",
|
||||
"updatePassword": "Passwort zurücksetzen",
|
||||
"toast": {
|
||||
"success": {
|
||||
"deleteUser": "Benutzer {{user}} wurde erfolgreich gelöscht",
|
||||
@@ -514,7 +514,7 @@
|
||||
"changeRole": "Benutzerrolle ändern",
|
||||
"deleteUser": "Benutzer löschen",
|
||||
"noUsers": "Keine Benutzer gefunden.",
|
||||
"password": "Passwort",
|
||||
"password": "Passwort zurücksetzen",
|
||||
"username": "Benutzername",
|
||||
"actions": "Aktionen",
|
||||
"role": "Rolle"
|
||||
@@ -599,7 +599,8 @@
|
||||
"currentPasswordRequired": "Aktuelles Passwort wird benötigt",
|
||||
"incorrectCurrentPassword": "Aktuelles Passwort ist falsch",
|
||||
"passwordVerificationFailed": "Passwort konnte nicht überprüft werden",
|
||||
"multiDeviceWarning": "Alle anderen Geräte, auf denen Sie angemeldet sind, müssen sich innerhalb von {{refresh_time}} erneut anmelden. Sie können auch alle Benutzer dazu zwingen, sich sofort erneut zu authentifizieren, indem Sie Ihr JWT-Geheimnis rotieren."
|
||||
"multiDeviceWarning": "Alle anderen Geräte, auf denen Sie angemeldet sind, müssen sich innerhalb von {{refresh_time}} erneut anmelden.",
|
||||
"multiDeviceAdmin": "Sie können auch alle Benutzer dazu zwingen, sich sofort erneut zu authentifizieren, indem Sie Ihr JWT-Geheimnis ändern."
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -704,8 +705,8 @@
|
||||
},
|
||||
"enrichments": {
|
||||
"birdClassification": {
|
||||
"title": "Vogel Klassifizierung",
|
||||
"desc": "Die Vogelklassifizierung identifiziert bekannte Vögel mithilfe eines quantisierten Tensorflow-Modells. Wenn ein bekannter Vogel erkannt wird, wird sein allgemeiner Name als sub_label hinzugefügt. Diese Informationen sind in der Benutzeroberfläche, in Filtern und in Benachrichtigungen enthalten."
|
||||
"title": "Vogelerkennung",
|
||||
"desc": "Die Vogelerkennung identifiziert Vögelarten mithilfe eines quantisierten Tensorflowmodells. Wenn eine Vogelart erkannt wird, wird ihr Name als sub_label hinzugefügt. Diese Informationen sind in der Benutzeroberfläche, in Filtern und in Benachrichtigungen enthalten."
|
||||
},
|
||||
"title": "Anreicherungseinstellungen",
|
||||
"unsavedChanges": "Ungesicherte geänderte Verbesserungseinstellungen",
|
||||
@@ -729,7 +730,7 @@
|
||||
"desc": "Die Größe des für die Einbettung der semantischen Suche verwendeten Modells.",
|
||||
"large": {
|
||||
"title": "groß",
|
||||
"desc": "Bei der Verwendung von <em>groß</em> wird das gesamte Jina-Modell verwendet und automatisch auf der GPU ausgeführt, falls zutreffend."
|
||||
"desc": "Bei der Verwendung von <em>groß</em> wird das gesamte Jina-Modell verwendet und automatisch auf der GPU ausgeführt, falls möglich."
|
||||
}
|
||||
},
|
||||
"title": "Semantische Suche",
|
||||
@@ -738,7 +739,7 @@
|
||||
},
|
||||
"faceRecognition": {
|
||||
"title": "Gesichtserkennung",
|
||||
"desc": "Die Gesichtserkennung ermöglicht es, Personen Namen zuzuweisen, und wenn ihr Gesicht erkannt wird, ordnet Frigate den Namen der Person als Untertitel zu. Diese Informationen sind in der Benutzeroberfläche, den Filtern und in den Benachrichtigungen enthalten.",
|
||||
"desc": "Die Gesichtserkennung ermöglicht es, Personen Namen zuzuweisen. Wenn ein Gesicht erkannt wird, ordnet Frigate den Namen der Person als Untertitel zu. Diese Informationen sind in der Benutzeroberfläche, den Filtern und in den Benachrichtigungen enthalten.",
|
||||
"readTheDocumentation": "Lies die Dokumentation",
|
||||
"modelSize": {
|
||||
"label": "Modellgröße",
|
||||
@@ -1095,7 +1096,7 @@
|
||||
}
|
||||
},
|
||||
"step3": {
|
||||
"description": "Konfigurieren Sie Stream-Rollen und fügen Sie zusätzliche Streams für Ihre Kamera hinzu",
|
||||
"description": "Konfigurieren Sie Stream-Rollen und fügen Sie zusätzliche Streams für Ihre Kamera hinzu.",
|
||||
"validationTitle": "Stream Validierung",
|
||||
"connectAllStreams": "Verbinde alle Streams",
|
||||
"reconnectionSuccess": "Wiederverbindung erfolgreich.",
|
||||
@@ -1208,7 +1209,8 @@
|
||||
"audioCodecRequired": "Ein Audiostream ist erforderlich, um die Audioerkennung zu unterstützen.",
|
||||
"restreamingWarning": "Die Reduzierung der Verbindungen zur Kamera für den Aufzeichnungsstream kann zu einer geringfügigen Erhöhung der CPU-Auslastung führen.",
|
||||
"brands": {
|
||||
"reolink-rtsp": "Reolink RTSP wird nicht empfohlen. Aktivieren Sie HTTP in den Firmware-Einstellungen der Kamera und starten Sie den Assistenten neu."
|
||||
"reolink-rtsp": "Reolink RTSP wird nicht empfohlen. Aktivieren Sie HTTP in den Firmware-Einstellungen der Kamera und starten Sie den Assistenten neu.",
|
||||
"reolink-http": "Für Reolink-HTTP-Streams sollten sie FFmpeg verwenden, um eine bessere Kompatibilität zu gewährleisten. Aktivieren Sie für diesen Stream die Option „Stream-Kompatibilitätsmodus verwenden“."
|
||||
},
|
||||
"dahua": {
|
||||
"substreamWarning": "Substream 1 ist auf eine niedrige Auflösung festgelegt. Viele Kameras von Dahua / Amcrest / EmpireTech unterstützen zusätzliche Substreams, die in den Kameraeinstellungen aktiviert werden müssen. Es wird empfohlen, diese Streams zu überprüfen und zu nutzen, sofern sie verfügbar sind."
|
||||
@@ -1224,7 +1226,7 @@
|
||||
"addCamera": "Neue Kamera hinzufügen",
|
||||
"editCamera": "Kamera bearbeiten:",
|
||||
"selectCamera": "Wähle eine Kamera",
|
||||
"backToSettings": "Zurück zu Kamera-Einstellungen",
|
||||
"backToSettings": "Zurück zu Kameraeinstellungen",
|
||||
"streams": {
|
||||
"title": "Kameras aktivieren / deaktivieren",
|
||||
"desc": "Deaktiviere eine Kamera vorübergehend, bis Frigate neu gestartet wird. Deaktivierung einer Kamera stoppt die Verarbeitung der Streams dieser Kamera durch Frigate vollständig. Erkennung, Aufzeichnung und Debugging sind dann nicht mehr verfügbar. <br /> <em>Hinweis: Dies deaktiviert nicht die go2rtc restreams.</em>"
|
||||
|
||||
@@ -178,7 +178,10 @@
|
||||
"review_description_events_per_second": "Bewertungsbeschreibung",
|
||||
"object_description": "Objekt Beschreibung",
|
||||
"object_description_speed": "Objektbeschreibung Geschwindigkeit",
|
||||
"object_description_events_per_second": "Objektbeschreibung"
|
||||
"object_description_events_per_second": "Objektbeschreibung",
|
||||
"classification": "{{name}} Klassifizierung",
|
||||
"classification_speed": "{{name}} Klassifizierungsgeschwindigkeit",
|
||||
"classification_events_per_second": "{{name}} Klassifizierungsereignisse pro Sekunde"
|
||||
},
|
||||
"title": "Optimierungen",
|
||||
"infPerSecond": "Rückschlüsse pro Sekunde",
|
||||
|
||||
@@ -68,7 +68,14 @@
|
||||
"formattedTimestampFilename": {
|
||||
"12hour": "dd-MM-yy-h-mm-ss-a",
|
||||
"24hour": "dd-MM-yy-HH-mm-ss"
|
||||
}
|
||||
},
|
||||
"d": "{{time}}η",
|
||||
"h": "{{time}}ω",
|
||||
"m": "{{time}}λ",
|
||||
"s": "{{time}}δ",
|
||||
"inProgress": "Σε εξέλιξη",
|
||||
"invalidStartTime": "Μη έγκυρη ώρα έναρξης",
|
||||
"invalidEndTime": "Μη έγκυρη ώρα λήξης"
|
||||
},
|
||||
"menu": {
|
||||
"live": {
|
||||
@@ -100,7 +107,8 @@
|
||||
"yes": "Ναι",
|
||||
"no": "Όχι",
|
||||
"download": "Κατέβασμα",
|
||||
"info": "Πληροφορίες"
|
||||
"info": "Πληροφορίες",
|
||||
"history": "Ιστορία"
|
||||
},
|
||||
"unit": {
|
||||
"speed": {
|
||||
@@ -120,6 +128,54 @@
|
||||
}
|
||||
},
|
||||
"label": {
|
||||
"back": "Επιστροφή"
|
||||
"back": "Επιστροφή",
|
||||
"hide": "Απόκρυψη {{item}}",
|
||||
"show": "Εμφάνιση {{item}}",
|
||||
"ID": "ID",
|
||||
"none": "Κανένα",
|
||||
"all": "Όλα"
|
||||
},
|
||||
"toast": {
|
||||
"save": {
|
||||
"title": "Αποθήκευση",
|
||||
"error": {
|
||||
"title": "Αποτυχία αποθήκευσης αλλαγών διαμόρφωσης: {{errorMessage}}",
|
||||
"noMessage": "Αποτυχία αποθήκευσης αλλαγών διαμόρφωσης"
|
||||
}
|
||||
}
|
||||
},
|
||||
"role": {
|
||||
"admin": "Διαχειριστής",
|
||||
"desc": "Οι διαχειριστές έχουν πλήρη πρόσβαση σε όλες τις λειτουργίες του περιβάλλοντος χρήστη Frigate. Οι θεατές έχουν περιορισμένη πρόσβαση στην προβολή καμερών, στην αναθεώρηση στοιχείων και σε ιστορικό υλικό στο περιβάλλον χρήστη.",
|
||||
"viewer": "Θεατής"
|
||||
},
|
||||
"pagination": {
|
||||
"previous": {
|
||||
"title": "Προηγούμενο",
|
||||
"label": "Μετάβαση στην προηγούμενη σελίδα"
|
||||
},
|
||||
"next": {
|
||||
"title": "Επόμενο",
|
||||
"label": "Μετάβαση στην επόμενη σελίδα"
|
||||
},
|
||||
"more": "Περισσότερες σελίδες"
|
||||
},
|
||||
"accessDenied": {
|
||||
"documentTitle": "Πρόσβαση απορρίφθηκε - Frigate",
|
||||
"title": "Πρόσβαση απορρίφθηκε",
|
||||
"desc": "Δεν έχετε άδεια να δείτε αυτή τη σελίδα."
|
||||
},
|
||||
"notFound": {
|
||||
"documentTitle": "Δεν βρέθηκε - Frigate",
|
||||
"title": "404",
|
||||
"desc": "Η σελίδα δεν βρέθηκε"
|
||||
},
|
||||
"list": {
|
||||
"two": "{{0}} και {{1}}",
|
||||
"many": "{{items}} και {{last}}",
|
||||
"separatorWithSpace": ", "
|
||||
},
|
||||
"field": {
|
||||
"internalID": "Το εσωτερικό ID που χρησιμοποίησε η Fregate στη διαμόρφωση και τη βάση δεδομένων"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -46,5 +46,10 @@
|
||||
"toast": {
|
||||
"success": "Επιτυχής έναρξη εξαγωγής. Δείτε το αρχείο στον φάκελο /exports."
|
||||
}
|
||||
},
|
||||
"search": {
|
||||
"saveSearch": {
|
||||
"label": "Αποθήκευση αναζήτησης"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -42,5 +42,11 @@
|
||||
"noImageFound": "Δεν βρέθηκε εικόνα για αυτό το χρονικό σημείο."
|
||||
},
|
||||
"trackedObjectsCount_one": "{{count}} παρακολουθούμενο αντικείμενο ",
|
||||
"trackedObjectsCount_other": "{{count}} παρακολουθούμενα αντικείμενα "
|
||||
"trackedObjectsCount_other": "{{count}} παρακολουθούμενα αντικείμενα ",
|
||||
"itemMenu": {
|
||||
"downloadVideo": {
|
||||
"label": "Λήψη βίντεο",
|
||||
"aria": "Λήψη βίντεο"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -13,5 +13,10 @@
|
||||
"error": {
|
||||
"renameExportFailed": "Αποτυχία μετονομασίας εξαγωγής:{{errorMessage}}"
|
||||
}
|
||||
},
|
||||
"tooltip": {
|
||||
"shareExport": "Κοινή χρήση εξαγωγής",
|
||||
"downloadVideo": "Λήψη βίντεο",
|
||||
"deleteExport": "Διαγραφή εξαγωγής"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"description": {
|
||||
"addFace": "Οδηγός για την προσθήκη μιας νέας συλλογής στη Βιβλιοθήκη Προσώπων.",
|
||||
"addFace": "Προσθέστε μια νέα συλλογή στη Βιβλιοθήκη Προσώπων ανεβάζοντας την πρώτη σας εικόνα.",
|
||||
"placeholder": "Εισαγάγετε ένα όνομα για αυτήν τη συλλογή",
|
||||
"invalidName": "Μη έγκυρο όνομα. Τα ονόματα μπορούν να περιλαμβάνουν γράμματα, αριθμούς, κενό διάστημα, απόστροφο, παύλα, κάτω παύλα."
|
||||
},
|
||||
@@ -27,7 +27,8 @@
|
||||
},
|
||||
"documentTitle": "Βιβλιοθήκη προσώπων - Frigate",
|
||||
"uploadFaceImage": {
|
||||
"title": "Μεταφόρτωση Εικόνας Προσώπου"
|
||||
"title": "Μεταφόρτωση Εικόνας Προσώπου",
|
||||
"desc": "Ανεβάστε μια εικόνα για να σαρώσετε πρόσωπα και να τα συμπεριλάβετε στο {{pageToggle}}"
|
||||
},
|
||||
"steps": {
|
||||
"nextSteps": "Επόμενα βήματα",
|
||||
|
||||
@@ -7,9 +7,11 @@
|
||||
"masksAndZones": "Ρυθμίσεις Μασκών και Ζωνών - Frigate",
|
||||
"motionTuner": "Ρύθμιση Κίνησης - Frigate",
|
||||
"object": "Επίλυση σφαλμάτων - Frigate",
|
||||
"general": "Γενικές ρυθμίσεις - Frigate",
|
||||
"general": "Ρυθμίσεις UI - Frigate",
|
||||
"frigatePlus": "Ρυθμίσεις Frigate+ - Frigate",
|
||||
"notifications": "Ρυθμίσεις Ειδοποιήσεων"
|
||||
"notifications": "Ρυθμίσεις Ειδοποιήσεων",
|
||||
"cameraManagement": "Διαχείριση καμερών - Frigate",
|
||||
"cameraReview": "Ρυθμίσεις αξιολόγησης κάμερας - Frigate"
|
||||
},
|
||||
"masksAndZones": {
|
||||
"zones": {
|
||||
|
||||
@@ -101,7 +101,8 @@
|
||||
"show": "Show {{item}}",
|
||||
"ID": "ID",
|
||||
"none": "None",
|
||||
"all": "All"
|
||||
"all": "All",
|
||||
"other": "Other"
|
||||
},
|
||||
"list": {
|
||||
"two": "{{0}} and {{1}}",
|
||||
|
||||
@@ -9,7 +9,11 @@
|
||||
"empty": {
|
||||
"alert": "There are no alerts to review",
|
||||
"detection": "There are no detections to review",
|
||||
"motion": "No motion data found"
|
||||
"motion": "No motion data found",
|
||||
"recordingsDisabled": {
|
||||
"title": "Recordings must be enabled",
|
||||
"description": "Review items can only be created for a camera when recordings are enabled for that camera."
|
||||
}
|
||||
},
|
||||
"timeline": "Timeline",
|
||||
"timeline.aria": "Select timeline",
|
||||
|
||||
@@ -166,6 +166,9 @@
|
||||
"tips": {
|
||||
"descriptionSaved": "Successfully saved description",
|
||||
"saveDescriptionFailed": "Failed to update the description: {{errorMessage}}"
|
||||
},
|
||||
"title": {
|
||||
"label": "Title"
|
||||
}
|
||||
},
|
||||
"itemMenu": {
|
||||
|
||||
@@ -86,7 +86,14 @@
|
||||
"otherProcesses": {
|
||||
"title": "Other Processes",
|
||||
"processCpuUsage": "Process CPU Usage",
|
||||
"processMemoryUsage": "Process Memory Usage"
|
||||
"processMemoryUsage": "Process Memory Usage",
|
||||
"series": {
|
||||
"go2rtc": "go2rtc",
|
||||
"recording": "recording",
|
||||
"review_segment": "review segment",
|
||||
"embeddings": "embeddings",
|
||||
"audio_detector": "audio detector"
|
||||
}
|
||||
}
|
||||
},
|
||||
"storage": {
|
||||
|
||||
@@ -24,5 +24,36 @@
|
||||
"clapping": "Käteplagin",
|
||||
"finger_snapping": "Sõrmede naksutamine",
|
||||
"hands": "Käed",
|
||||
"camera": "Kaamera"
|
||||
"camera": "Kaamera",
|
||||
"speech": "Kõne",
|
||||
"babbling": "Lobisemine",
|
||||
"yell": "Karjumine",
|
||||
"bellow": "Röökimine",
|
||||
"whoop": "Kisamine",
|
||||
"whispering": "Sosistamine",
|
||||
"laughter": "Naermine",
|
||||
"snicker": "Itsitamine",
|
||||
"sigh": "Ohkamine",
|
||||
"crying": "Nutmine",
|
||||
"singing": "Laulmine",
|
||||
"choir": "Koorilaulmine",
|
||||
"yodeling": "Joodeldamine",
|
||||
"chant": "Skandeerimine",
|
||||
"mantra": "Mantra lugemine",
|
||||
"child_singing": "Lastelaul",
|
||||
"whistling": "Vilistamine",
|
||||
"gasp": "Hingeldamine",
|
||||
"pant": "Ähkimine",
|
||||
"door": "Uks",
|
||||
"mouse": "Hiir",
|
||||
"keyboard": "Klahvistik",
|
||||
"sink": "Kraanikauss",
|
||||
"blender": "Kannmikser",
|
||||
"clock": "Kell",
|
||||
"scissors": "Käärid",
|
||||
"hair_dryer": "Föön",
|
||||
"toothbrush": "Hambahari",
|
||||
"vehicle": "Sõiduk",
|
||||
"bark": "Puukoor",
|
||||
"goat": "Kits"
|
||||
}
|
||||
|
||||
@@ -39,21 +39,144 @@
|
||||
"minute_other": "{{time}} minutit",
|
||||
"s": "{{time}} sek",
|
||||
"second_one": "{{time}} sekund",
|
||||
"second_other": "{{time}} sekundit"
|
||||
"second_other": "{{time}} sekundit",
|
||||
"formattedTimestampHourMinute": {
|
||||
"24hour": "HH:mm",
|
||||
"12hour": "hh:mm aaa"
|
||||
},
|
||||
"formattedTimestampHourMinuteSecond": {
|
||||
"24hour": "HH:mm:ss",
|
||||
"12hour": "hh:mm:ss aaa"
|
||||
},
|
||||
"formattedTimestampFilename": {
|
||||
"12hour": "yy-MM-dd-hh-mm-ss-a",
|
||||
"24hour": "yy-MM-dd-HH-mm-ss"
|
||||
},
|
||||
"formattedTimestamp": {
|
||||
"12hour": "MMM d, hh:mm:ss aaa",
|
||||
"24hour": "MMM d, HH:mm:ss"
|
||||
},
|
||||
"formattedTimestamp2": {
|
||||
"12hour": "dd.MM hh:mm:ssa",
|
||||
"24hour": "d MMM HH:mm:ss"
|
||||
},
|
||||
"formattedTimestampMonthDayHourMinute": {
|
||||
"12hour": "MMM d, hh:mm aaa",
|
||||
"24hour": "MMM d, HH:mm"
|
||||
},
|
||||
"formattedTimestampMonthDayYear": {
|
||||
"12hour": "MMM d, yyyy",
|
||||
"24hour": "MMM d, yyyy"
|
||||
},
|
||||
"inProgress": "Töös",
|
||||
"invalidStartTime": "Vigane algusaeg",
|
||||
"invalidEndTime": "Vigane lõpuaeg",
|
||||
"formattedTimestampMonthDayYearHourMinute": {
|
||||
"12hour": "dd. MMM yyyy, hh:mm aaa",
|
||||
"24hour": "dd. MMM yyyy, HH:mm"
|
||||
},
|
||||
"formattedTimestampMonthDay": "dd. MMM"
|
||||
},
|
||||
"menu": {
|
||||
"user": {
|
||||
"setPassword": "Lisa salasõna"
|
||||
"setPassword": "Lisa salasõna",
|
||||
"logout": "Logi välja",
|
||||
"title": "Kasutaja",
|
||||
"account": "Kasutajakonto",
|
||||
"current": "Praegune kasutaja: {{user}}",
|
||||
"anonymous": "anonüümne"
|
||||
},
|
||||
"live": {
|
||||
"allCameras": "Kõik kaamerad"
|
||||
"allCameras": "Kõik kaamerad",
|
||||
"title": "Otseülekanne",
|
||||
"cameras": {
|
||||
"title": "Kaamerad",
|
||||
"count_one": "{{count}} kaamera",
|
||||
"count_other": "{{count}} kaamerat"
|
||||
}
|
||||
},
|
||||
"settings": "Seadistused",
|
||||
"language": {
|
||||
"withSystem": {
|
||||
"label": "Kasuta keele jaoks süsteemi seadistusi"
|
||||
},
|
||||
"en": "English (inglise keel)",
|
||||
"es": "Español (hispaania keel)",
|
||||
"zhCN": "简体中文 (hiina keel lihtsustatud hieroglüüfidega)",
|
||||
"hi": "हिन्दी (hindi keel)",
|
||||
"fr": "Français (prantsuse keel)",
|
||||
"ar": "العربية (araabia keel)",
|
||||
"pt": "Português (portugali keel)",
|
||||
"ptBR": "Português brasileiro (Brasiilia portugali keel)",
|
||||
"ru": "Русский (vene keel)",
|
||||
"de": "Deutsch (saksa keel)",
|
||||
"ja": "日本語 (jaapani keel)",
|
||||
"tr": "Türkçe (türgi keel)",
|
||||
"it": "Italiano (itaalia keel)",
|
||||
"nl": "Nederlands (hollandi keel)",
|
||||
"sv": "Svenska (rootsi keel)",
|
||||
"cs": "Čeština (tšehhi keel)",
|
||||
"nb": "Norsk Bokmål (norra bokmål)",
|
||||
"ko": "한국어 (korea keel)",
|
||||
"vi": "Tiếng Việt (vietnami keel)",
|
||||
"fa": "فارسی (pärsia keel)",
|
||||
"pl": "Polski (poola keel)",
|
||||
"uk": "Українська (ukraina keel)",
|
||||
"he": "עברית (heebrea keel)",
|
||||
"el": "Ελληνικά (kreeka keel)",
|
||||
"ro": "Română (rumeenia keel)",
|
||||
"hu": "Magyar (ungari keel)",
|
||||
"fi": "Suomi (soome keel)",
|
||||
"da": "Dansk (taani keel)",
|
||||
"sk": "Slovenčina (slovaki keel)",
|
||||
"yue": "粵語 (kantoni keel)",
|
||||
"th": "ไทย (tai keel)",
|
||||
"ca": "Català (katalaani keel)",
|
||||
"sr": "Српски (serbia keel)",
|
||||
"sl": "Slovenščina (sloveeni keel)",
|
||||
"lt": "Lietuvių (leedu keel)",
|
||||
"bg": "Български (bulgaaria keel)",
|
||||
"gl": "Galego (galeegi keel)",
|
||||
"id": "Bahasa Indonesia (indoneesia keel)",
|
||||
"ur": "اردو (urdu keel)"
|
||||
},
|
||||
"system": "Süsteem",
|
||||
"systemMetrics": "Süsteemi meetrika",
|
||||
"configuration": "Seadistused",
|
||||
"systemLogs": "Süsteemi logid",
|
||||
"configurationEditor": "Seadistuste haldur",
|
||||
"languages": "Keeled",
|
||||
"appearance": "Välimus",
|
||||
"darkMode": {
|
||||
"label": "Tume kujundus",
|
||||
"light": "Hele kujundus",
|
||||
"dark": "Tume kujundus",
|
||||
"withSystem": {
|
||||
"label": "Kasuta süsteemi seadistusi heleda või tumeda kujunduse jaoks"
|
||||
}
|
||||
}
|
||||
},
|
||||
"withSystem": "Süsteem",
|
||||
"theme": {
|
||||
"label": "Kujundus",
|
||||
"blue": "Sinine",
|
||||
"green": "Roheline",
|
||||
"nord": "Põhjala",
|
||||
"red": "Punane",
|
||||
"highcontrast": "Väga kontrastne",
|
||||
"default": "Vaikimisi kujundus"
|
||||
},
|
||||
"help": "Abiteave",
|
||||
"documentation": {
|
||||
"title": "Dokumentatsioon",
|
||||
"label": "Frigate'i dokumentatsioon"
|
||||
},
|
||||
"restart": "Käivita Frigate uuesti",
|
||||
"review": "Ülevaatamine",
|
||||
"explore": "Uuri",
|
||||
"export": "Ekspordi",
|
||||
"uiPlayground": "Leht kasutajaliidese katsetamiseks",
|
||||
"faceLibrary": "Näoteek",
|
||||
"classification": "Klassifikatsioon"
|
||||
},
|
||||
"unit": {
|
||||
"speed": {
|
||||
@@ -67,6 +190,10 @@
|
||||
"kbph": "kB/t",
|
||||
"mbph": "MB/t",
|
||||
"gbph": "GB/t"
|
||||
},
|
||||
"length": {
|
||||
"feet": "jalga",
|
||||
"meters": "meetrit"
|
||||
}
|
||||
},
|
||||
"button": {
|
||||
@@ -97,7 +224,15 @@
|
||||
"yes": "Jah",
|
||||
"no": "Ei",
|
||||
"download": "Laadi alla",
|
||||
"info": "Teave"
|
||||
"info": "Teave",
|
||||
"suspended": "Peata",
|
||||
"unsuspended": "Lõpeta peatamine",
|
||||
"play": "Esita",
|
||||
"unselect": "Eemalda valik",
|
||||
"export": "Ekspordi",
|
||||
"deleteNow": "Kustuta kohe",
|
||||
"next": "Järgmine",
|
||||
"continue": "Jätka"
|
||||
},
|
||||
"label": {
|
||||
"back": "Mine tagasi",
|
||||
@@ -113,6 +248,50 @@
|
||||
"separatorWithSpace": ", "
|
||||
},
|
||||
"field": {
|
||||
"optional": "Valikuline"
|
||||
"optional": "Valikuline",
|
||||
"internalID": "Seadistustes ja andmebaasis kasutatav Frigate'i sisemine tunnus"
|
||||
},
|
||||
"toast": {
|
||||
"copyUrlToClipboard": "Võrguaadress on kopeeritud lõikelauale.",
|
||||
"save": {
|
||||
"title": "Salvesta",
|
||||
"error": {
|
||||
"title": "Seadistuste muudatuste salvestamine ei õnnestunud: {{errorMessage}}",
|
||||
"noMessage": "Seadistuste muudatuste salvestamine ei õnnestunud"
|
||||
}
|
||||
}
|
||||
},
|
||||
"role": {
|
||||
"title": "Roll",
|
||||
"admin": "Peakasutaja",
|
||||
"viewer": "Vaataja",
|
||||
"desc": "Peakasutajatel on Frigate'i kasutajaliideses kõik õigused. Vaatajad võivad vaid kaamerate pilti vaadata, objekte ülevaadata ning otsida arhiivist vanu videoid."
|
||||
},
|
||||
"pagination": {
|
||||
"label": "lehenummerdus",
|
||||
"previous": {
|
||||
"title": "Eelmine",
|
||||
"label": "Mine eelmisele lehele"
|
||||
},
|
||||
"next": {
|
||||
"title": "Järgmine",
|
||||
"label": "Mine järgmisele lehele"
|
||||
},
|
||||
"more": "Järgnevad lehed"
|
||||
},
|
||||
"accessDenied": {
|
||||
"documentTitle": "Ligipääs on keelatud - Frigate",
|
||||
"title": "Ligipääs on keelatud",
|
||||
"desc": "Sul pole õigusi selle lehe vaatamiseks."
|
||||
},
|
||||
"notFound": {
|
||||
"documentTitle": "Lehte ei leidu - Frigate",
|
||||
"title": "404",
|
||||
"desc": "Veebilehte ei leidu"
|
||||
},
|
||||
"selectItem": "Vali {{item}}",
|
||||
"readTheDocumentation": "Loe dokumentatsiooni ja juhendit",
|
||||
"information": {
|
||||
"pixels": "{{area}} px"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -9,9 +9,39 @@
|
||||
"placeholder": "Vali videovoog",
|
||||
"streamMethod": {
|
||||
"label": "Voogedastuse meetod",
|
||||
"placeholder": "Vali voogedastuse meetod"
|
||||
"placeholder": "Vali voogedastuse meetod",
|
||||
"method": {
|
||||
"noStreaming": {
|
||||
"label": "Voogedastust pole",
|
||||
"desc": "Kaamerapildid uuenevad kord minutis ja voogedastust pole."
|
||||
},
|
||||
"smartStreaming": {
|
||||
"label": "Nutikas voogedastus (soovituslik)",
|
||||
"desc": "Nutika voogedastuse puhul ilma igasuguse tuvastatava tegevuseta kaamerapildid uuenevad kord minutis ja voogedastust pole. Sellega säästad ribalaiud ja kuid ressursse. Tegevuse tuvastamisel käivitub tavapärane voogedastus."
|
||||
},
|
||||
"continuousStreaming": {
|
||||
"label": "Pidev voogedastus",
|
||||
"desc": {
|
||||
"title": "Kaamera voogedastus toimub töölauavaates pidevalt, seda ka siis, kui seal pole mingit tegevust tuvastatud.",
|
||||
"warning": "Pidev voogedastus võib põhjustada suurt andmeedastuse mahutu ja tekitada jõudlusprobleeme. Kasuta seda võimalust ettevaatlikult."
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"audioIsAvailable": "Selle voogedastuse puhul on saadaval ka heliriba",
|
||||
"audioIsUnavailable": "Selle voogedastuse puhul pole heliriba saadaval",
|
||||
"compatibilityMode": {
|
||||
"label": "Ühilduvusrežiim",
|
||||
"desc": "Kasuta seda võimalust vaid olukorras, kus kaamera voogedastuses paistab visuaalseid vigu ja pidi paremas ääres on diagonaalne joon."
|
||||
},
|
||||
"desc": "Muuda selle kaamergrupi voogedastuse valikuid töölauavaates.<em>Need seadistused on seadme- ja veebibrauserikohased.</em>",
|
||||
"audio": {
|
||||
"tips": {
|
||||
"title": "See kaamera peab oskama heli jäädvustada ja edastada ja go2rtc kontekstis seadistatud selle voogedastuse jaoks."
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"birdseye": "Vaade linnulennult"
|
||||
},
|
||||
"add": "Lisa kaameragrupp",
|
||||
"edit": "Muuda kaameragruppi",
|
||||
@@ -48,6 +78,9 @@
|
||||
},
|
||||
"boundingBox": "Piirdekast",
|
||||
"timestamp": "Ajatempel",
|
||||
"zones": "Tsoonid"
|
||||
"zones": "Tsoonid",
|
||||
"mask": "Mask",
|
||||
"motion": "Liikumine",
|
||||
"regions": "Alad"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,122 @@
|
||||
{
|
||||
"restart": {
|
||||
"title": "Kas oled kindel, et soovid Frigate'i uuesti käivitada?",
|
||||
"button": "Käivita uuesti"
|
||||
"button": "Käivita uuesti",
|
||||
"restarting": {
|
||||
"title": "Frigate käivitub uuesti",
|
||||
"content": "See leht laaditakse uuesti {{countdown}} sekundi pärast.",
|
||||
"button": "Laadi uuesti kohe"
|
||||
}
|
||||
},
|
||||
"search": {
|
||||
"saveSearch": {
|
||||
"label": "Salvesta otsing",
|
||||
"desc": "Sisesta nimi salvestatud otsingu jaoks.",
|
||||
"placeholder": "Sisesta nimi oma otsingu jaoks",
|
||||
"overwrite": "„{{searchName}}“ on juba olemas. Salvestamisel kirjutad olemasoleva väärtuse üle.",
|
||||
"success": "„{{searchName}}“ otsing on salvestatud.",
|
||||
"button": {
|
||||
"save": {
|
||||
"label": "Salvesta see otsing"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"explore": {
|
||||
"video": {
|
||||
"viewInHistory": "Vaata ajaloos"
|
||||
},
|
||||
"plus": {
|
||||
"review": {
|
||||
"state": {
|
||||
"submitted": "Saadetud"
|
||||
},
|
||||
"question": {
|
||||
"ask_a": "Kas see objekt on <code>{{label}}</code>?",
|
||||
"ask_an": "Kas see objekt on <code>{{label}}</code>?",
|
||||
"ask_full": "Kas see objekt on <code>{{untranslatedLabel}}</code> ({{translatedLabel}})?",
|
||||
"label": "Kinnita see silt Frigate+ teenuse jaoks"
|
||||
}
|
||||
},
|
||||
"submitToPlus": {
|
||||
"label": "Saada teenusesse Frigate+",
|
||||
"desc": "Objektid asukohtades, mida sa tahad vältida, pole valepositiivsed. Kui sa neid sellistena saadad teenusele, siis see ainult ajab tehisaru mudeli sassi."
|
||||
}
|
||||
}
|
||||
},
|
||||
"export": {
|
||||
"time": {
|
||||
"fromTimeline": "Vali ajajoonelt",
|
||||
"lastHour_one": "Viimase tunni jooksul",
|
||||
"lastHour_other": "Viimase {{count}} tunni jooksul",
|
||||
"custom": "Sinu valitud ajavahemik",
|
||||
"start": {
|
||||
"title": "Algusaeg",
|
||||
"label": "Vali algusaeg"
|
||||
},
|
||||
"end": {
|
||||
"title": "Lõpuaeg",
|
||||
"label": "Vali lõpuaeg"
|
||||
}
|
||||
},
|
||||
"name": {
|
||||
"placeholder": "Sisesta ekspordifaili nimi"
|
||||
},
|
||||
"select": "Vali",
|
||||
"export": "Ekspordi",
|
||||
"selectOrExport": "Vali või ekspordi",
|
||||
"toast": {
|
||||
"success": "Eksportimise käivitamine õnnestus. Faili leiad eksportimise lehelt.",
|
||||
"view": "Vaata",
|
||||
"error": {
|
||||
"failed": "Eksportimise käivitamine ei õnnestunud: {{error}}",
|
||||
"endTimeMustAfterStartTime": "Ajavahemiku lõpp peab olema peale algust",
|
||||
"noVaildTimeSelected": "Ühtegi kehtivat ajavahemikku pole valitud"
|
||||
}
|
||||
},
|
||||
"fromTimeline": {
|
||||
"saveExport": "Salvesta eksporditud sisu",
|
||||
"previewExport": "Eksporditud sisu eelvaade"
|
||||
}
|
||||
},
|
||||
"streaming": {
|
||||
"label": "Voogedastus",
|
||||
"restreaming": {
|
||||
"disabled": "Voogedastuse kordus pole selle kaamera puhul kasutatav.",
|
||||
"desc": {
|
||||
"title": "Kui tahad selle kaameraga kasutada täiendavaid otseeetri ja helivõimalusi, siis seadista go2rtc."
|
||||
}
|
||||
},
|
||||
"debugView": "Veaotsinguvaade",
|
||||
"showStats": {
|
||||
"label": "Näita voogedastuse statistikat",
|
||||
"desc": "Lülita see eelistus sisse, kui soovid kaamerapildi ülekattena näha voogedastuse statistikat."
|
||||
}
|
||||
},
|
||||
"recording": {
|
||||
"button": {
|
||||
"export": "Ekspordi",
|
||||
"markAsReviewed": "Märgi ülevaadatuks",
|
||||
"markAsUnreviewed": "Märgi mitteülevaadatuks",
|
||||
"deleteNow": "Kustuta kohe"
|
||||
},
|
||||
"confirmDelete": {
|
||||
"title": "Kinnita kustutamine",
|
||||
"desc": {
|
||||
"selected": "Kas sa oled kindel et soovid selle kõik ülevaadatava objektiga seotud kirjed kustutada?<br /><br />Vajuta alla <em>Shift</em> klahv ja saad sellest vaatest tulevikus mööda minna."
|
||||
},
|
||||
"toast": {
|
||||
"success": "Selle ülevaadatava objektiga seotud videosisu on kustutatud.",
|
||||
"error": "Kustutamine ei õnnestunud: {{error}}"
|
||||
}
|
||||
}
|
||||
},
|
||||
"imagePicker": {
|
||||
"selectImage": "Vali jälgitava objekti pisipilt",
|
||||
"unknownLabel": "Päästikpilt on salvestatud",
|
||||
"search": {
|
||||
"placeholder": "Otsi sildi või alamsildi alusel..."
|
||||
},
|
||||
"noImages": "Selle kaamera kohta ei leidu pisipilte"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -16,16 +16,21 @@
|
||||
"all": {
|
||||
"title": "Kõik sildid",
|
||||
"short": "Sildid"
|
||||
}
|
||||
},
|
||||
"label": "Sildid",
|
||||
"count_one": "{{count}} silt",
|
||||
"count_other": "{{count}} silti"
|
||||
},
|
||||
"subLabels": {
|
||||
"all": "Kõik alamsildid"
|
||||
"all": "Kõik alamsildid",
|
||||
"label": "Alamsildid"
|
||||
},
|
||||
"dates": {
|
||||
"all": {
|
||||
"title": "Kõik kuupäevad",
|
||||
"short": "Kuupäevad"
|
||||
}
|
||||
},
|
||||
"selectPreset": "Vali eelseadistus…"
|
||||
},
|
||||
"explore": {
|
||||
"settings": {
|
||||
@@ -53,5 +58,31 @@
|
||||
},
|
||||
"disableLogStreaming": "Keela logi voogedastus",
|
||||
"allLogs": "Kõik logid"
|
||||
},
|
||||
"classes": {
|
||||
"label": "Klassid",
|
||||
"all": {
|
||||
"title": "Kõik klassid"
|
||||
},
|
||||
"count_one": "{{count}} klass",
|
||||
"count_other": "{{count}} klassi"
|
||||
},
|
||||
"zones": {
|
||||
"label": "Tsoonid",
|
||||
"all": {
|
||||
"title": "Kõik tsoonid",
|
||||
"short": "Tsoonid"
|
||||
}
|
||||
},
|
||||
"more": "Täiendavad filtrid",
|
||||
"timeRange": "Ajavahemik",
|
||||
"reset": {
|
||||
"label": "Lähtesta filtrid vaikimisi väärtusteks"
|
||||
},
|
||||
"score": "Punktiskoor",
|
||||
"estimatedSpeed": "Hinnanguline kiirus: ({{unit}})",
|
||||
"features": {
|
||||
"label": "Omadused",
|
||||
"hasSnapshot": "Leidub hetkvõte"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,3 +1,8 @@
|
||||
{
|
||||
"noRecordingsFoundForThisTime": "Hetkel ei leidu ühtego salvestust"
|
||||
"noRecordingsFoundForThisTime": "Hetkel ei leidu ühtego salvestust",
|
||||
"noPreviewFound": "Eelvaadet ei leidu",
|
||||
"noPreviewFoundFor": "{{cameraName}} kaamera eelvaadet ei leidu",
|
||||
"submitFrigatePlus": {
|
||||
"submit": "Saada"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -48,5 +48,73 @@
|
||||
"cup": "Kruus",
|
||||
"fork": "Kahvel",
|
||||
"knife": "Nuga",
|
||||
"spoon": "Lusikas"
|
||||
"spoon": "Lusikas",
|
||||
"bowl": "Kauss",
|
||||
"banana": "Banaan",
|
||||
"apple": "Õun",
|
||||
"sandwich": "Võileib",
|
||||
"orange": "Apelsin",
|
||||
"broccoli": "Spargelkapsas",
|
||||
"carrot": "Porgand",
|
||||
"hot_dog": "Viinerisai",
|
||||
"pizza": "Pitsa",
|
||||
"donut": "Sõõrik",
|
||||
"cake": "Kook",
|
||||
"chair": "Tool",
|
||||
"couch": "Kušett",
|
||||
"potted_plant": "Potilill",
|
||||
"bed": "Voodi",
|
||||
"mirror": "Peegel",
|
||||
"dining_table": "Söögilaud",
|
||||
"window": "Aken",
|
||||
"desk": "Kirjutuslaud",
|
||||
"toilet": "Tualett",
|
||||
"door": "Uks",
|
||||
"tv": "Teler",
|
||||
"laptop": "Sülearvuti",
|
||||
"mouse": "Hiir",
|
||||
"remote": "Kaugjuhtimispult",
|
||||
"keyboard": "Klahvistik",
|
||||
"cell_phone": "Mobiiltelefon",
|
||||
"microwave": "Mikrolaineahi",
|
||||
"oven": "Ahi",
|
||||
"toaster": "Röster",
|
||||
"sink": "Kraanikauss",
|
||||
"refrigerator": "Külmkapp",
|
||||
"blender": "Kannmikser",
|
||||
"book": "Raamat",
|
||||
"clock": "Kell",
|
||||
"vase": "Vaas",
|
||||
"scissors": "Käärid",
|
||||
"teddy_bear": "Mängukaru",
|
||||
"hair_dryer": "Föön",
|
||||
"toothbrush": "Hambahari",
|
||||
"hair_brush": "Juuksehari",
|
||||
"vehicle": "Sõiduk",
|
||||
"squirrel": "Orav",
|
||||
"deer": "Hirv",
|
||||
"bark": "Puukoor",
|
||||
"fox": "Rebane",
|
||||
"goat": "Kits",
|
||||
"rabbit": "Jänes",
|
||||
"raccoon": "Pesukaru",
|
||||
"robot_lawnmower": "Robotmuruniiduk",
|
||||
"waste_bin": "Prügikast",
|
||||
"on_demand": "Nõudmisel",
|
||||
"face": "Nägu",
|
||||
"license_plate": "Sõiduki numbrimärk",
|
||||
"package": "Pakett",
|
||||
"bbq_grill": "Väligrill",
|
||||
"amazon": "Amazoni sõiduk",
|
||||
"usps": "USPS-i sõiduk",
|
||||
"ups": "UPS-i sõiduk",
|
||||
"fedex": "FedExi sõiduk",
|
||||
"dhl": "DHL-i sõiduk",
|
||||
"an_post": "An Posti sõiduk",
|
||||
"purolator": "Purolatori sõiduk",
|
||||
"postnl": "PostNL-i sõiduk",
|
||||
"nzpost": "NZPost-i sõiduk",
|
||||
"postnord": "PostNordi sõiduk",
|
||||
"gls": "GLS-i sõiduk",
|
||||
"dpd": "DPD sõiduk"
|
||||
}
|
||||
|
||||
@@ -4,5 +4,33 @@
|
||||
"deletedModel_one": "{{count}} mudeli kustutamine õnnestus",
|
||||
"deletedModel_other": "{{count}} mudeli kustutamine õnnestus"
|
||||
}
|
||||
},
|
||||
"documentTitle": "Klassifitseerimise mudelid - Frigate",
|
||||
"details": {
|
||||
"scoreInfo": "Skoor näitab selle objekti kõigi tuvastuste keskmist klassifitseerimise usaldusväärsust."
|
||||
},
|
||||
"button": {
|
||||
"deleteClassificationAttempts": "Kustuta klassifitseerimispildid"
|
||||
},
|
||||
"description": {
|
||||
"invalidName": "Vigane nimi. Nimed võivad sisaldada ainult tähti, numbreid, tühikuid, ülakomasid, alakriipse ja sidekriipse."
|
||||
},
|
||||
"deleteModel": {
|
||||
"desc_one": "Kas oled kindel, et soovid kustutada {{count}} mudeli? Järgnevaga kustuvad jäädavalt kõik seotud andmed, sealhulgas pildid ja koolitusandmed. Seda tegevust ei saa tagasi pöörata.",
|
||||
"desc_other": "Kas oled kindel, et soovid kustutada {{count}} mudelit? Järgnevaga kustuvad jäädavalt kõik seotud andmed, sealhulgas pildid ja koolitusandmed. Seda tegevust ei saa tagasi pöörata."
|
||||
},
|
||||
"deleteDatasetImages": {
|
||||
"desc_one": "Kas oled kindel, et soovid kustutada {{count}} pildi {{dataset}} andmekogust? Seda tegevust ei saa tagasi pöörata ja hiljem on vaja mudelit uuesti koolitada.",
|
||||
"desc_other": "Kas oled kindel, et soovid kustutada {{count}} pilti {{dataset}} andmekogust? Seda tegevust ei saa tagasi pöörata ja hiljem on vaja mudelit uuesti koolitada."
|
||||
},
|
||||
"deleteTrainImages": {
|
||||
"desc_one": "Kas oled kindel, et soovid kustutada {{count}} pildi? Seda tegevust ei saa tagasi pöörata.",
|
||||
"desc_other": "Kas oled kindel, et soovid kustutada {{count}} pilti? Seda tegevust ei saa tagasi pöörata."
|
||||
},
|
||||
"wizard": {
|
||||
"step3": {
|
||||
"allImagesRequired_one": "Palun klassifitseeri kõik pildid. Jäänud on veel {{count}} pilt.",
|
||||
"allImagesRequired_other": "Palun klassifitseeri kõik pildid. Jäänud on veel {{count}} pilti."
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1 +1,18 @@
|
||||
{}
|
||||
{
|
||||
"toast": {
|
||||
"error": {
|
||||
"savingError": "Viga seadistuse salvestamisel"
|
||||
},
|
||||
"success": {
|
||||
"copyToClipboard": "Seadistused on kopeeritud lõikelauale."
|
||||
}
|
||||
},
|
||||
"documentTitle": "Seadistuste haldus - Frigate",
|
||||
"safeConfigEditor": "Seadistuste haldus (ohutusrežiim)",
|
||||
"configEditor": "Seadistuste haldus",
|
||||
"safeModeDescription": "Seadistuste vea tõttu on Frigate hetkel ohutusrežiimis.",
|
||||
"copyConfig": "Kopeeri seadistused",
|
||||
"saveAndRestart": "Salvesta ja käivita uuesti",
|
||||
"saveOnly": "Vaid salvesta",
|
||||
"confirm": "Kas väljud ilma salvestamata?"
|
||||
}
|
||||
|
||||
@@ -2,7 +2,17 @@
|
||||
"alerts": "Häired",
|
||||
"allCameras": "Kõik kaamerad",
|
||||
"detail": {
|
||||
"settings": "Üksikasjaliku vaate seadistused"
|
||||
"settings": "Üksikasjaliku vaate seadistused",
|
||||
"label": "Üksikasjad",
|
||||
"noDataFound": "Ülevaatamiseks pole üksikasjalikke andmeid",
|
||||
"aria": "Lülita üksikasjalik vaade sisse/välja",
|
||||
"trackedObject_one": "{{count}} objekt",
|
||||
"trackedObject_other": "{{count}} objekti",
|
||||
"noObjectDetailData": "Objekti üksikasjalikke andmeid pole saadaval.",
|
||||
"alwaysExpandActive": {
|
||||
"title": "Alati laienda aktiivse kirje andmeid",
|
||||
"desc": "Kui vähegi saadaval, siis alati laienda aktiivse ülevaatamisel kirje andmeid."
|
||||
}
|
||||
},
|
||||
"detections": "Tuvastamise tulemused",
|
||||
"motion": {
|
||||
@@ -26,6 +36,26 @@
|
||||
"zoomOut": "Suumi välja",
|
||||
"events": {
|
||||
"label": "Sündmused",
|
||||
"aria": "Vali sündmused"
|
||||
"aria": "Vali sündmused",
|
||||
"noFoundForTimePeriod": "Selle ajavahemiku kohta ei leidu sündmusi."
|
||||
},
|
||||
"selected_one": "{{count}} valitud",
|
||||
"selected_other": "{{count}} valitud",
|
||||
"markAsReviewed": "Märgi ülevaadatuks",
|
||||
"markTheseItemsAsReviewed": "Märgi need kirjed ülevaadatuks",
|
||||
"newReviewItems": {
|
||||
"label": "Vaata uusi ülevaatamiseks mõeldud kirjeid",
|
||||
"button": "Uued ülevaatamiseks mõeldud kirjed"
|
||||
},
|
||||
"documentTitle": "Ülevaatamine - Frigate",
|
||||
"recordings": {
|
||||
"documentTitle": "Salvestised - Frigate"
|
||||
},
|
||||
"calendarFilter": {
|
||||
"last24Hours": "Viimased 24 tundi"
|
||||
},
|
||||
"objectTrack": {
|
||||
"clickToSeek": "Klõpsa siia ajapunkti kerimiseks",
|
||||
"trackedPoint": "Jälgitav punkt"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6,6 +6,14 @@
|
||||
"itemMenu": {
|
||||
"findSimilar": {
|
||||
"aria": "Otsi sarnaseid jälgitavaid objekte"
|
||||
},
|
||||
"downloadSnapshot": {
|
||||
"label": "Laadi hetkvõte alla",
|
||||
"aria": "Laadi hetkvõte alla"
|
||||
},
|
||||
"downloadCleanSnapshot": {
|
||||
"label": "Laadi puhas hetkvõte alla",
|
||||
"aria": "Laadi puhas hetkvõte alla"
|
||||
}
|
||||
},
|
||||
"trackingDetails": {
|
||||
@@ -15,5 +23,34 @@
|
||||
"desc": "Kui objekt on sisenenud tsooni, siis alati näida tsooni märgistust."
|
||||
}
|
||||
}
|
||||
},
|
||||
"documentTitle": "Avasta - Frigate",
|
||||
"generativeAI": "Generatiivne tehisaru",
|
||||
"exploreMore": "Avasta rohkem {{label}}-tüüpi objekte",
|
||||
"exploreIsUnavailable": {
|
||||
"embeddingsReindexing": {
|
||||
"step": {
|
||||
"thumbnailsEmbedded": "Pisipildid on lõimitud: ",
|
||||
"descriptionsEmbedded": "Kirjeldused on lõimitud: ",
|
||||
"trackedObjectsProcessed": "Jälgitud objektid on töödeldud: "
|
||||
}
|
||||
}
|
||||
},
|
||||
"type": {
|
||||
"details": "üksikasjad",
|
||||
"thumbnail": "pisipilt",
|
||||
"snapshot": "hetkvõte"
|
||||
},
|
||||
"details": {
|
||||
"item": {
|
||||
"tips": {
|
||||
"mismatch_one": "Tuvastasin {{count}} võõra objekti ja need on lisatud ülevaatamiseks. Need objektid kas ei ole piisavad häire või tuvastamise jaoks, aga ka võivad juba olla eemaldatud või kustutatud.",
|
||||
"mismatch_other": "Tuvastasin {{count}} võõrast objekti ja need on lisatud ülevaatamiseks. Need objektid kas ei ole piisavad häire või tuvastamise jaoks, aga ka võivad juba olla eemaldatud või kustutatud."
|
||||
}
|
||||
},
|
||||
"snapshotScore": {
|
||||
"label": "Hetkvõttete punktiskoor"
|
||||
},
|
||||
"regenerateFromSnapshot": "Loo uuesti hetkvõttest"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,5 +1,34 @@
|
||||
{
|
||||
"button": {
|
||||
"uploadImage": "Laadi pilt üles"
|
||||
},
|
||||
"collections": "Kogumikud",
|
||||
"description": {
|
||||
"placeholder": "Sisesta nimi selle kogumiku jaoks",
|
||||
"invalidName": "Vigane nimi. Nimed võivad sisaldada ainult tähti, numbreid, tühikuid, ülakomasid, alakriipse ja sidekriipse.",
|
||||
"addFace": "Laadides üles oma esimese pildi saad lisada uue kogumiku Näoteeki."
|
||||
},
|
||||
"documentTitle": "Näoteek - Frigate",
|
||||
"createFaceLibrary": {
|
||||
"new": "Lisa uus nägu"
|
||||
},
|
||||
"deleteFaceLibrary": {
|
||||
"title": "Kustuta nimi"
|
||||
},
|
||||
"toast": {
|
||||
"error": {
|
||||
"addFaceLibraryFailed": "Näo sidumine nimega ei õnnestunud: {{errorMessage}}"
|
||||
},
|
||||
"success": {
|
||||
"addFaceLibrary": "Lisamine Näoteeki õnnestus: {{name}}!",
|
||||
"deletedFace_one": "{{count}} näo kustutamine õnnestus.",
|
||||
"deletedFace_other": "{{count}} näo kustutamine õnnestus.",
|
||||
"deletedName_one": "{{count}} näo kustutamine õnnestus.",
|
||||
"deletedName_other": "{{count}} näo kustutamine õnnestus."
|
||||
}
|
||||
},
|
||||
"deleteFaceAttempts": {
|
||||
"desc_one": "Kas oled kindel, et soovid kustutada {{count}} näo? Seda tegevust ei saa tagasi pöörata.",
|
||||
"desc_other": "Kas oled kindel, et soovid kustutada {{count}} nägu? Seda tegevust ei saa tagasi pöörata."
|
||||
}
|
||||
}
|
||||
|
||||
@@ -9,6 +9,115 @@
|
||||
"cameraEnabled": "Kaamera on kasutusel",
|
||||
"objectDetection": "Objektide tuvastamine",
|
||||
"audioDetection": "Heli tuvastus",
|
||||
"transcription": "Heli üleskirjutus"
|
||||
"transcription": "Heli üleskirjutus",
|
||||
"snapshots": "Hetkvõtted"
|
||||
},
|
||||
"documentTitle": "Otseülekanne - Frigate",
|
||||
"documentTitle.withCamera": "{{camera}} - Otseülekanne - Frigate",
|
||||
"lowBandwidthMode": "Väikese ribalaiusega režiim",
|
||||
"twoWayTalk": {
|
||||
"enable": "Lülita kahepoolne kõneside sisse",
|
||||
"disable": "Lülita kahepoolne kõneside välja"
|
||||
},
|
||||
"cameraAudio": {
|
||||
"enable": "Lülita kaamera heli sisse",
|
||||
"disable": "Lülita kaamera heli välja"
|
||||
},
|
||||
"ptz": {
|
||||
"move": {
|
||||
"clickMove": {
|
||||
"label": "Kaamerapildi joondamiseks keskele klõpsa kaadris",
|
||||
"enable": "Kasuta klõpsamisega teisaldamist",
|
||||
"disable": "Ära kasuta klõpsamisega teisaldamist"
|
||||
},
|
||||
"left": {
|
||||
"label": "Pööra liigutatavat kaamerat vasakule"
|
||||
},
|
||||
"up": {
|
||||
"label": "Pööra liigutatavat kaamerat üles"
|
||||
},
|
||||
"down": {
|
||||
"label": "Pööra liigutatavat kaamerat alla"
|
||||
},
|
||||
"right": {
|
||||
"label": "Pööra liigutatavat kaamerat paremale"
|
||||
}
|
||||
},
|
||||
"zoom": {
|
||||
"in": {
|
||||
"label": "Suumi liigutatavat kaamerat sisse"
|
||||
},
|
||||
"out": {
|
||||
"label": "Suumi liigutatavat kaamerat välja"
|
||||
}
|
||||
},
|
||||
"focus": {
|
||||
"in": {
|
||||
"label": "Fookusta liigutatavat kaamerat sisse"
|
||||
},
|
||||
"out": {
|
||||
"label": "Fookusta liigutatavat kaamerat välja"
|
||||
}
|
||||
},
|
||||
"presets": "Liigutatava kaamera eelseadistused",
|
||||
"frame": {
|
||||
"center": {
|
||||
"label": "Klõpsa kaadrit liigutatava kaamera pildi sättimiseks keskele"
|
||||
}
|
||||
}
|
||||
},
|
||||
"camera": {
|
||||
"enable": "Lülita kaamera sisse",
|
||||
"disable": "Lülita kaamera välja"
|
||||
},
|
||||
"detect": {
|
||||
"enable": "Lülita tuvastamine sisse",
|
||||
"disable": "Lülita tuvastamine välja"
|
||||
},
|
||||
"recording": {
|
||||
"enable": "Lülita salvestamine sisse",
|
||||
"disable": "Lülita salvestamine välja"
|
||||
},
|
||||
"snapshots": {
|
||||
"enable": "Lülita hetkvõtted sisse",
|
||||
"disable": "Lülita hetkvõtted välja"
|
||||
},
|
||||
"streamStats": {
|
||||
"enable": "Näita voogedastuse statistikat",
|
||||
"disable": "Peida voogedastuse statistika"
|
||||
},
|
||||
"stream": {
|
||||
"twoWayTalk": {
|
||||
"available": "Kahepoolne kõneside on selle voogedastuse puhul saadaval",
|
||||
"unavailable": "Kahepoolne kõneside pole selle voogedastuse puhul saadaval",
|
||||
"tips": "Sinu seadme peab seda funktsionaalsust toetama ja WebRTC peab olema kahepoolse kõneside jaoks seadistatud."
|
||||
}
|
||||
},
|
||||
"notifications": "Teavitused",
|
||||
"audio": "Heli",
|
||||
"snapshot": {
|
||||
"takeSnapshot": "Laadi hetkvõte alla",
|
||||
"noVideoSource": "Hetkvõtte tegemiseks pole saadaval ühtegi videoallikat.",
|
||||
"captureFailed": "Hetkvõtte jäädvustamine ei õnnestunud.",
|
||||
"downloadStarted": "Hetkvõtte allalaadimine algas."
|
||||
},
|
||||
"audioDetect": {
|
||||
"enable": "Lülita helituvastus sisse",
|
||||
"disable": "Lülita helituvastus välja"
|
||||
},
|
||||
"transcription": {
|
||||
"enable": "Lülita reaalajas heli üleskirjutus sisse",
|
||||
"disable": "Lülita reaalajas heli üleskirjutus välja"
|
||||
},
|
||||
"autotracking": {
|
||||
"enable": "Lülita automaatne jälgimine sisse",
|
||||
"disable": "Lülita automaatne jälgimine välja"
|
||||
},
|
||||
"manualRecording": {
|
||||
"title": "Nõudmisel",
|
||||
"playInBackground": {
|
||||
"label": "Esita taustal",
|
||||
"desc": "Kasuta seda valikut, kui tahad voogedastuse jätkumist ka siis, kui pildivaade on peidetud."
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,5 +2,17 @@
|
||||
"placeholder": {
|
||||
"search": "Otsi…"
|
||||
},
|
||||
"search": "Otsi"
|
||||
"search": "Otsi",
|
||||
"savedSearches": "Salvestatud otsingud",
|
||||
"searchFor": "Otsi: {{inputValue}}",
|
||||
"button": {
|
||||
"clear": "Tühjenda otsing",
|
||||
"save": "Salvesta otsing",
|
||||
"delete": "Kustuta salvestatud otsing"
|
||||
},
|
||||
"filter": {
|
||||
"label": {
|
||||
"has_snapshot": "Leidub hetkvõte"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -8,10 +8,18 @@
|
||||
},
|
||||
"step3": {
|
||||
"streamUrlPlaceholder": "rtsp://kasutajanimi:salasõna@host:port/asukoht"
|
||||
},
|
||||
"steps": {
|
||||
"probeOrSnapshot": "Võta proov või tee hetkvõte"
|
||||
},
|
||||
"step2": {
|
||||
"testing": {
|
||||
"fetchingSnapshot": "Laadin kaamera hetkvõtet alla..."
|
||||
}
|
||||
}
|
||||
},
|
||||
"users": {
|
||||
"updatePassword": "Muuda salasõna",
|
||||
"updatePassword": "Lähtesta salasõna",
|
||||
"toast": {
|
||||
"success": {
|
||||
"updatePassword": "Salasõna muutmine õnnestus."
|
||||
@@ -21,7 +29,7 @@
|
||||
}
|
||||
},
|
||||
"table": {
|
||||
"password": "Salasõna"
|
||||
"password": "Lähtesta salasõna"
|
||||
},
|
||||
"dialog": {
|
||||
"form": {
|
||||
@@ -90,12 +98,21 @@
|
||||
"cameraReview": "Kaamerate kordusvaatuste seadistused - Frigate",
|
||||
"general": "Kasutajaliidese seadistused - Frigate",
|
||||
"frigatePlus": "Frigate+ seadistused - Frigate",
|
||||
"notifications": "Teavituste seadistused - Frigate"
|
||||
"notifications": "Teavituste seadistused - Frigate",
|
||||
"cameraManagement": "Kaamerate haldus - Frigate",
|
||||
"masksAndZones": "Maskide ja tsoonide haldus - Frigate",
|
||||
"object": "Silumine ja veaotsing - Frigate"
|
||||
},
|
||||
"general": {
|
||||
"title": "Kasutajaliidese seadistused",
|
||||
"cameraGroupStreaming": {
|
||||
"clearAll": "Kustuta kõik voogedastuse seadistused"
|
||||
},
|
||||
"liveDashboard": {
|
||||
"title": "Töölaud reaalajas",
|
||||
"automaticLiveView": {
|
||||
"label": "Automaatne otseülekande vaade"
|
||||
}
|
||||
}
|
||||
},
|
||||
"cameraManagement": {
|
||||
@@ -120,6 +137,14 @@
|
||||
"unsavedChanges": "Frigate+ seadistuste muudatused on salvestamata",
|
||||
"toast": {
|
||||
"success": "Frigate+ seadistuste muudatused on salvestatud. Muudatuste kasutuselevõtmiseks käivita Frigate uuesti."
|
||||
},
|
||||
"snapshotConfig": {
|
||||
"title": "Hetkvõtte seadistused",
|
||||
"table": {
|
||||
"snapshots": "Hetkvõtted",
|
||||
"cleanCopySnapshots": "<code>clean_copy</code> Hetkvõtted",
|
||||
"camera": "Kaamera"
|
||||
}
|
||||
}
|
||||
},
|
||||
"masksAndZones": {
|
||||
@@ -135,5 +160,34 @@
|
||||
"point_one": "{{count}} punkt",
|
||||
"point_other": "{{count}} punkti"
|
||||
}
|
||||
},
|
||||
"roles": {
|
||||
"toast": {
|
||||
"success": {
|
||||
"userRolesUpdated_one": "{{count}} selle rolliga kasutaja on nüüd määratud Vaatajaks, kellel on ligipääs kõikidele kaameratele.",
|
||||
"userRolesUpdated_other": "{{count}} selle rolliga kasutajat on nüüd määratud Vaatajaks, kellel on ligipääs kõikidele kaameratele."
|
||||
}
|
||||
}
|
||||
},
|
||||
"menu": {
|
||||
"ui": "Kasutajaliides",
|
||||
"cameraManagement": "Haldus",
|
||||
"masksAndZones": "Maskid ja tsoonid",
|
||||
"triggers": "Päästikud",
|
||||
"debug": "Silumine ja veaotsing",
|
||||
"users": "Kasutajad",
|
||||
"roles": "Rollid",
|
||||
"notifications": "Teavitused",
|
||||
"frigateplus": "Frigate+"
|
||||
},
|
||||
"dialog": {
|
||||
"unsavedChanges": {
|
||||
"title": "Sul on salvestamata muudatusi.",
|
||||
"desc": "Kas soovid muudatused enne jätkamist salvestada?"
|
||||
}
|
||||
},
|
||||
"cameraSetting": {
|
||||
"camera": "Kaamera",
|
||||
"noCamera": "Kaamerat pole"
|
||||
}
|
||||
}
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user