mirror of
https://github.com/blakeblackshear/frigate.git
synced 2026-10-23 23:14:46 +03:00
Compare commits
33
Commits
e5fa5b0d4e
...
3744b5113b
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
3744b5113b | ||
|
|
4e65cc1019 | ||
|
|
c4b007686f | ||
|
|
75ca66679a | ||
|
|
9f52372cfd | ||
|
|
1c610a7271 | ||
|
|
075e5196a7 | ||
|
|
3c3acbe8f8 | ||
|
|
da20b134d2 | ||
|
|
87f9c6240a | ||
|
|
2819e76491 | ||
|
|
c5f77b3e20 | ||
|
|
723bfa9308 | ||
|
|
645601d83e | ||
|
|
ca1637ba5a | ||
|
|
79fcf40d96 | ||
|
|
5e17aa685b | ||
|
|
f5d6ca2772 | ||
|
|
39856aaa2d | ||
|
|
3ae70f1808 | ||
|
|
a9e4cd061c | ||
|
|
f59025681d | ||
|
|
126cbd9e5e | ||
|
|
f85387570b | ||
|
|
b0cecd534b | ||
|
|
7726d2ec97 | ||
|
|
9662bf094f | ||
|
|
a26487c4f0 | ||
|
|
1c745e0847 | ||
|
|
729ee86043 | ||
|
|
c007661a71 | ||
|
|
9b02c7318d | ||
|
|
300fbc9dfe |
@@ -90,7 +90,7 @@ jobs:
|
|||||||
with:
|
with:
|
||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
- name: Set up Python ${{ env.DEFAULT_PYTHON }}
|
- name: Set up Python ${{ env.DEFAULT_PYTHON }}
|
||||||
uses: actions/setup-python@v5.4.0
|
uses: actions/setup-python@v6.3.0
|
||||||
with:
|
with:
|
||||||
python-version: ${{ env.DEFAULT_PYTHON }}
|
python-version: ${{ env.DEFAULT_PYTHON }}
|
||||||
- name: Install requirements
|
- name: Install requirements
|
||||||
|
|||||||
@@ -3,6 +3,7 @@
|
|||||||
import json
|
import json
|
||||||
import os
|
import os
|
||||||
import sys
|
import sys
|
||||||
|
from pathlib import Path
|
||||||
from typing import Any
|
from typing import Any
|
||||||
|
|
||||||
from ruamel.yaml import YAML
|
from ruamel.yaml import YAML
|
||||||
|
|||||||
@@ -126,12 +126,12 @@ birdseye:
|
|||||||
|
|
||||||
### Sorting cameras in the Birdseye view
|
### Sorting cameras in the Birdseye view
|
||||||
|
|
||||||
It is possible to override the order of cameras that are being shown in the Birdseye view. The order is set at the camera level.
|
It is possible to override the order of cameras that are being shown in the Birdseye view. The order is set at the camera level (when using YAML).
|
||||||
|
|
||||||
<ConfigTabs>
|
<ConfigTabs>
|
||||||
<TabItem value="ui">
|
<TabItem value="ui">
|
||||||
|
|
||||||
Navigate to <NavPath path="Settings > Camera configuration > Birdseye" /> for each camera and set the **Position** field to control the display order.
|
Navigate to <NavPath path="Settings > System > Birdseye" /> and in the **Camera order** field, use the drag handle next to each camera name to control the display order.
|
||||||
|
|
||||||
</TabItem>
|
</TabItem>
|
||||||
<TabItem value="yaml">
|
<TabItem value="yaml">
|
||||||
|
|||||||
@@ -194,7 +194,7 @@ Camera groups let you organize cameras together with a shared name and icon, mak
|
|||||||
<ConfigTabs>
|
<ConfigTabs>
|
||||||
<TabItem value="ui">
|
<TabItem value="ui">
|
||||||
|
|
||||||
On the Live dashboard, press the **+** icon in the main navigation to add a new camera group. Configure the group name, select which cameras to include, choose an icon, and set the display order.
|
On the Live dashboard, press the **pencil icon** in the main navigation to add a new camera group. Configure the group name, select which cameras to include, choose an icon, and set the display order.
|
||||||
|
|
||||||
</TabItem>
|
</TabItem>
|
||||||
<TabItem value="yaml">
|
<TabItem value="yaml">
|
||||||
|
|||||||
@@ -7,27 +7,27 @@ import ConfigTabs from "@site/src/components/ConfigTabs";
|
|||||||
import TabItem from "@theme/TabItem";
|
import TabItem from "@theme/TabItem";
|
||||||
import NavPath from "@site/src/components/NavPath";
|
import NavPath from "@site/src/components/NavPath";
|
||||||
|
|
||||||
Some presets of FFmpeg args are provided by default to make the configuration easier. All presets can be seen in [this file](https://github.com/blakeblackshear/frigate/blob/master/frigate/ffmpeg_presets.py).
|
Frigate ships with a set of FFmpeg presets to keep your configuration short and readable. Each preset expands to a longer list of FFmpeg arguments at runtime. You can see exactly what every preset expands to in [this file](https://github.com/blakeblackshear/frigate/blob/master/frigate/ffmpeg_presets.py).
|
||||||
|
|
||||||
### Hwaccel Presets
|
In the config file you reference a preset by its name (for example, `preset-vaapi`). In the UI, the same preset is shown with a friendly label (for example, **VAAPI (Intel/AMD GPU)**). Both refer to the same thing — the tables below list the config name alongside the label you'll see in the UI.
|
||||||
|
|
||||||
It is highly recommended to use hwaccel presets in the config. These presets not only replace the longer args, but they also give Frigate hints of what hardware is available and allows Frigate to make other optimizations using the GPU such as when encoding the birdseye restream or when scaling a stream that has a size different than the native stream size.
|
### Hwaccel (Hardware Acceleration) Presets
|
||||||
|
|
||||||
See [the hwaccel docs](/configuration/hardware_acceleration_video.md) for more info on how to setup hwaccel for your GPU / iGPU.
|
Hardware acceleration arguments tell FFmpeg to decode your camera's video stream on a GPU or integrated graphics chip instead of the CPU, which dramatically lowers CPU usage. Using a preset is highly recommended. Beyond replacing a long list of arguments, each preset also tells Frigate what hardware is available so it can offload additional work to the GPU — for example, encoding the Birdseye restream or scaling a stream whose resolution differs from the camera's native size.
|
||||||
|
|
||||||
| Preset | Usage | Other Notes |
|
See [the hardware acceleration docs](/configuration/hardware_acceleration_video.md) for details on setting up hardware acceleration for your GPU / iGPU, then select the preset that matches your hardware.
|
||||||
| --------------------- | ------------------------------ | ----------------------------------------------------- |
|
|
||||||
| preset-rpi-64-h264 | 64 bit Rpi with h264 stream | |
|
|
||||||
| preset-rpi-64-h265 | 64 bit Rpi with h265 stream | |
|
|
||||||
| preset-vaapi | Intel & AMD VAAPI | Check hwaccel docs to ensure correct driver is chosen |
|
|
||||||
| preset-intel-qsv-h264 | Intel QSV with h264 stream | If issues occur recommend using vaapi preset instead |
|
|
||||||
| preset-intel-qsv-h265 | Intel QSV with h265 stream | If issues occur recommend using vaapi preset instead |
|
|
||||||
| preset-nvidia | Nvidia GPU | |
|
|
||||||
| preset-jetson-h264 | Nvidia Jetson with h264 stream | |
|
|
||||||
| preset-jetson-h265 | Nvidia Jetson with h265 stream | |
|
|
||||||
| preset-rkmpp | Rockchip MPP | Use image with \*-rk suffix and privileged mode |
|
|
||||||
|
|
||||||
Select the appropriate hwaccel preset for your hardware.
|
| Preset (YAML config) | UI Label | Usage | Notes |
|
||||||
|
| --------------------- | ----------------------- | --------------------------------- | --------------------------------------------------------------- |
|
||||||
|
| preset-rpi-64-h264 | Raspberry Pi (H.264) | 64-bit Raspberry Pi, H.264 stream | |
|
||||||
|
| preset-rpi-64-h265 | Raspberry Pi (H.265) | 64-bit Raspberry Pi, H.265 stream | |
|
||||||
|
| preset-vaapi | VAAPI (Intel/AMD GPU) | Intel or AMD GPU via VAAPI | Check the hwaccel docs to ensure the correct driver is selected |
|
||||||
|
| preset-intel-qsv-h264 | Intel QuickSync (H.264) | Intel QuickSync, H.264 stream | If you have issues, use the VAAPI preset instead |
|
||||||
|
| preset-intel-qsv-h265 | Intel QuickSync (H.265) | Intel QuickSync, H.265 stream | If you have issues, use the VAAPI preset instead |
|
||||||
|
| preset-nvidia | NVIDIA GPU | NVIDIA GPU | |
|
||||||
|
| preset-jetson-h264 | NVIDIA Jetson (H.264) | NVIDIA Jetson, H.264 stream | |
|
||||||
|
| preset-jetson-h265 | NVIDIA Jetson (H.265) | NVIDIA Jetson, H.265 stream | |
|
||||||
|
| preset-rkmpp | Rockchip RKMPP | Rockchip MPP | Use an image with the `-rk` suffix and run in privileged mode |
|
||||||
|
|
||||||
<ConfigTabs>
|
<ConfigTabs>
|
||||||
<TabItem value="ui">
|
<TabItem value="ui">
|
||||||
@@ -53,25 +53,25 @@ cameras:
|
|||||||
|
|
||||||
### Input Args Presets
|
### Input Args Presets
|
||||||
|
|
||||||
Input args presets help make the config more readable and handle use cases for different types of streams to ensure maximum compatibility.
|
Input arguments are passed to FFmpeg before your camera source and control how Frigate connects to and reads the stream — the transport protocol, timeouts, reconnection behavior, and how the stream is probed. The right input args ensure a reliable connection and maximum compatibility for each type of stream.
|
||||||
|
|
||||||
See [the camera specific docs](/configuration/camera_specific.md) for more info on non-standard cameras and recommendations for using them in Frigate.
|
See [the camera-specific docs](/configuration/camera_specific.md) for more on non-standard cameras and recommendations for using them in Frigate.
|
||||||
|
|
||||||
| Preset | Usage | Other Notes |
|
| Preset (config) | UI Label | Usage | Notes |
|
||||||
| -------------------------------- | ------------------------- | ------------------------------------------------------------------------------------------------ |
|
| -------------------------------- | ----------------------------------------- | --------------------------- | ------------------------------------------------------------------------------- |
|
||||||
| preset-http-jpeg-generic | HTTP Live Jpeg | Recommend restreaming live jpeg instead |
|
| preset-http-jpeg-generic | HTTP JPEG (Generic) | HTTP live JPEG | Restreaming the live JPEG is recommended instead |
|
||||||
| preset-http-mjpeg-generic | HTTP Mjpeg Stream | Recommend restreaming mjpeg stream instead |
|
| preset-http-mjpeg-generic | HTTP MJPEG (Generic) | HTTP MJPEG stream | Restreaming the MJPEG stream is recommended instead |
|
||||||
| preset-http-reolink | Reolink HTTP-FLV Stream | Only for reolink http, not when restreaming as rtsp |
|
| preset-http-reolink | HTTP - Reolink Cameras | Reolink HTTP-FLV stream | Only for Reolink HTTP, not when restreaming as RTSP |
|
||||||
| preset-rtmp-generic | RTMP Stream | |
|
| preset-rtmp-generic | RTMP (Generic) | RTMP stream | |
|
||||||
| preset-rtsp-generic | RTSP Stream | This is the default when nothing is specified |
|
| preset-rtsp-generic | RTSP (Generic) | RTSP stream | The default when no input args are specified |
|
||||||
| preset-rtsp-restream | RTSP Stream from restream | Use for rtsp restream as source for frigate |
|
| preset-rtsp-restream | RTSP - Restream from go2rtc | RTSP stream from a restream | Use when a go2rtc restream is the source for Frigate |
|
||||||
| preset-rtsp-restream-low-latency | RTSP Stream from restream | Use for rtsp restream as source for frigate to lower latency, may cause issues with some cameras |
|
| preset-rtsp-restream-low-latency | RTSP - Restream from go2rtc (Low Latency) | RTSP stream from a restream | Lowers latency for a go2rtc restream source; may cause issues with some cameras |
|
||||||
| preset-rtsp-udp | RTSP Stream via UDP | Use when camera is UDP only |
|
| preset-rtsp-udp | RTSP - UDP | RTSP stream over UDP | Use when the camera only supports UDP |
|
||||||
| preset-rtsp-blue-iris | Blue Iris RTSP Stream | Use when consuming a stream from Blue Iris |
|
| preset-rtsp-blue-iris | RTSP - Blue Iris | Blue Iris RTSP stream | Use when consuming a stream from Blue Iris |
|
||||||
|
|
||||||
:::warning
|
:::warning
|
||||||
|
|
||||||
It is important to be mindful of input args when using restream because you can have a mix of protocols. `http` and `rtmp` presets cannot be used with `rtsp` streams. For example, when using a reolink cam with the rtsp restream as a source for record the preset-http-reolink will cause a crash. In this case presets will need to be set at the stream level. See the example below.
|
Be mindful of input arguments when restreaming, because you can end up with a mix of protocols. The `http` and `rtmp` presets cannot be used with `rtsp` streams. For example, using a Reolink camera with an RTSP restream as the recording source while `preset-http-reolink` is applied will cause a crash. In cases like this, set the preset at the stream level instead. See the example below.
|
||||||
|
|
||||||
:::
|
:::
|
||||||
|
|
||||||
@@ -96,13 +96,13 @@ cameras:
|
|||||||
|
|
||||||
### Output Args Presets
|
### Output Args Presets
|
||||||
|
|
||||||
Output args presets help make the config more readable and handle use cases for different types of streams to ensure consistent recordings.
|
Output arguments are passed to FFmpeg after your camera source and control how recordings are written — which codecs are used and whether audio and video are copied as-is or re-encoded. The right output args ensure consistent, playable recordings for each type of stream.
|
||||||
|
|
||||||
| Preset | Usage | Other Notes |
|
| Preset (config) | UI Label | Usage | Notes |
|
||||||
| -------------------------------- | --------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
| -------------------------------- | ------------------------------- | ----------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||||
| preset-record-generic | Record WITHOUT audio | If your camera doesn't have audio, or if you don't want to record audio, use this option |
|
| preset-record-generic | Record (Generic, no audio) | Record without audio | Use this if your camera has no audio, or if you don't want to record audio |
|
||||||
| preset-record-generic-audio-copy | Record WITH original audio | Use this to enable audio in recordings |
|
| preset-record-generic-audio-copy | Record (Generic + Copy Audio) | Record with the original audio | Use this to keep the camera's audio in recordings without re-encoding |
|
||||||
| preset-record-generic-audio-aac | Record WITH transcoded aac audio | This is the default when no option is specified. Use it to transcode audio to AAC. If the source is already in AAC format, use preset-record-generic-audio-copy instead to avoid unnecessary re-encoding |
|
| preset-record-generic-audio-aac | Record (Generic + Audio to AAC) | Record with audio transcoded to AAC | The default when no output args are specified. Transcodes audio to AAC. If the source is already AAC, use `preset-record-generic-audio-copy` to avoid re-encoding |
|
||||||
| preset-record-mjpeg | Record an mjpeg stream | Recommend restreaming mjpeg stream instead |
|
| preset-record-mjpeg | Record - MJPEG Cameras | Record an MJPEG stream | Restreaming the MJPEG stream is recommended instead |
|
||||||
| preset-record-jpeg | Record live jpeg | Recommend restreaming live jpeg instead |
|
| preset-record-jpeg | Record - JPEG Cameras | Record a live JPEG | Restreaming the live JPEG is recommended instead |
|
||||||
| preset-record-ubiquiti | Record ubiquiti stream with audio | Recordings with ubiquiti non-standard audio |
|
| preset-record-ubiquiti | Record - Ubiquiti Cameras | Record a Ubiquiti stream with audio | Handles Ubiquiti's non-standard audio format |
|
||||||
|
|||||||
@@ -27,13 +27,12 @@ Running Generative AI models on CPU is not recommended, as high inference times
|
|||||||
|
|
||||||
You must use a vision-capable model with Frigate. The following models are recommended for local deployment:
|
You must use a vision-capable model with Frigate. The following models are recommended for local deployment:
|
||||||
|
|
||||||
| Model | Notes |
|
| Model | Notes |
|
||||||
| ------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
| ---------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||||
| `qwen3-vl` | Strong visual and situational understanding, enhanced ability to identify smaller objects and interactions with object. |
|
| `qwen3-vl` | Strong visual and situational understanding, enhanced ability to identify smaller objects and interactions with object. |
|
||||||
| `qwen3.5` | Strong situational understanding, but missing DeepStack from qwen3-vl leading to worse performance for identifying objects in people's hand and other small details. |
|
| `qwen3.5` | Strong situational understanding, but missing DeepStack from qwen3-vl leading to worse performance for identifying objects in people's hand and other small details. |
|
||||||
| `gemma4` | Strong situational understanding, sometimes resorts to more vague terms like 'interacts' instead of assigning a specific action. |
|
| `qwen3.6` | Strong situational understanding, similar to qwen3-vl |
|
||||||
| `Intern3.5VL` | Relatively fast with good vision comprehension |
|
| `gemma4` | Strong situational understanding, sometimes resorts to more vague terms like 'interacts' instead of assigning a specific action. |
|
||||||
| `gemma3` | Slower model with good vision and temporal understanding |
|
|
||||||
|
|
||||||
:::info
|
:::info
|
||||||
|
|
||||||
@@ -294,7 +293,7 @@ Other HTTP options are available, see the [python-genai documentation](https://g
|
|||||||
|
|
||||||
### OpenAI
|
### OpenAI
|
||||||
|
|
||||||
OpenAI does not have a free tier for their API. With the release of gpt-4o, pricing has been reduced and each generation should cost fractions of a cent if you choose to go this route.
|
OpenAI does not have a free tier for their API.
|
||||||
|
|
||||||
#### Supported Models
|
#### Supported Models
|
||||||
|
|
||||||
|
|||||||
@@ -49,9 +49,9 @@ This almost always means that the width/height defined for your camera are not c
|
|||||||
|
|
||||||
These messages in the logs are expected in certain situations. Frigate checks the integrity of the recordings before storing. Occasionally these cached files will be invalid and cleaned up automatically.
|
These messages in the logs are expected in certain situations. Frigate checks the integrity of the recordings before storing. Occasionally these cached files will be invalid and cleaned up automatically.
|
||||||
|
|
||||||
### "On connect called"
|
### "MQTT connected" repeats in the logs
|
||||||
|
|
||||||
If you see repeated "On connect called" messages in your logs, check for another instance of Frigate. This happens when multiple Frigate containers are trying to connect to MQTT with the same `client_id`.
|
If you see repeated "MQTT connected" messages in your logs, check for another instance of Frigate. This happens when multiple Frigate containers are trying to connect to MQTT with the same `client_id`.
|
||||||
|
|
||||||
### Error: Database Is Locked
|
### Error: Database Is Locked
|
||||||
|
|
||||||
|
|||||||
@@ -10,4 +10,47 @@ title: GPU Errors
|
|||||||
Some users have reported issues using some Intel iGPUs with OpenVINO, where the GPU would not be detected. This error can be caused by various problems, so it is important to ensure the configuration is setup correctly. Some solutions users have noted:
|
Some users have reported issues using some Intel iGPUs with OpenVINO, where the GPU would not be detected. This error can be caused by various problems, so it is important to ensure the configuration is setup correctly. Some solutions users have noted:
|
||||||
|
|
||||||
- In some cases users have noted that an HDMI dummy plug was necessary to be plugged into the motherboard's HDMI port.
|
- In some cases users have noted that an HDMI dummy plug was necessary to be plugged into the motherboard's HDMI port.
|
||||||
- When mixing an Intel iGPU with Nvidia GPU, the devices can be mixed up between `/dev/dri/renderD128` and `/dev/dri/renderD129` so it is important to confirm the correct device, or map the entire `/dev/dri` directory into the Frigate container.
|
- When mixing an Intel iGPU with Nvidia GPU, the devices can be mixed up between `/dev/dri/renderD128` and `/dev/dri/renderD129` so it is important to confirm the correct device, or map the entire `/dev/dri` directory into the Frigate container.
|
||||||
|
|
||||||
|
## Intel/AMD GPU
|
||||||
|
|
||||||
|
### Hardware acceleration is not being used
|
||||||
|
|
||||||
|
For VAAPI or QSV to work, the GPU's render device must be passed through to the Frigate container. Intel and AMD GPUs expose this as a render node under `/dev/dri`, usually `/dev/dri/renderD128`. If it is not passed through, hardware acceleration is unavailable — ffmpeg fails to initialize it (for example `Failed to open the drm device` or `No VA display found for device`) and GPU usage stays at zero while CPU usage remains high.
|
||||||
|
|
||||||
|
Pass the render device through when starting the container. With `docker compose`:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
services:
|
||||||
|
frigate:
|
||||||
|
devices:
|
||||||
|
- /dev/dri/renderD128:/dev/dri/renderD128 # Intel / AMD GPU, update for your hardware
|
||||||
|
```
|
||||||
|
|
||||||
|
Or with `docker run`, add `--device /dev/dri/renderD128`. See the [installation docs](/frigate/installation) for a complete example.
|
||||||
|
|
||||||
|
If it still isn't working after passing the device through:
|
||||||
|
|
||||||
|
- **Confirm the render node exists and is the correct one.** Run `ls /dev/dri` on the host — you should see one or more `renderD12X` entries. Systems with more than one GPU (an Intel iGPU plus a discrete GPU) can expose both `/dev/dri/renderD128` and `/dev/dri/renderD129`, and the numbering is not guaranteed. Pass through the correct node, or map the entire directory (`/dev/dri:/dev/dri`, or `--device /dev/dri`) so all render nodes are available.
|
||||||
|
- **Check device permissions.** The Frigate process must be able to access the render node. This is usually automatic when the container runs as root (the default), but nested setups such as an unprivileged Proxmox/LXC container often require making the device accessible on the host (for example, a world-readable render node) or running the container privileged. Note that running Frigate inside an LXC is not officially supported — see the [installation docs](/frigate/installation#proxmox) for details.
|
||||||
|
|
||||||
|
### Failed to download frame: -5
|
||||||
|
|
||||||
|
When using VAAPI or QSV hardware acceleration, ffmpeg may crash and restart periodically with a signature like this in the `ffmpeg.<camera>.detect` log:
|
||||||
|
|
||||||
|
```
|
||||||
|
[AVHWFramesContext @ 0x...] Failed to sync surface ... (operation failed).
|
||||||
|
[hwdownload @ 0x...] Failed to download frame: -5.
|
||||||
|
[vf#0:0 @ 0x...] Error while filtering: Input/output error
|
||||||
|
[vf#0:0 @ 0x...] Task finished with error code: -5 (Input/output error)
|
||||||
|
[frigate.video] <camera>: Unable to read frames from ffmpeg process.
|
||||||
|
```
|
||||||
|
|
||||||
|
This is a hardware frame synchronization failure between ffmpeg and the GPU driver, not a Frigate bug. It comes from how a specific camera stream interacts with the GPU's decode and scaling path, so it is highly dependent on your hardware, driver, and stream. Frigate's automatic hardware acceleration detection is a best-guess effort, so the fix is usually to tune the configuration for your specific hardware and camera. The solutions below are ordered from most to least likely to help:
|
||||||
|
|
||||||
|
- **Switch between the VAAPI and QSV presets.** On Intel Gen 12 and newer iGPUs, `preset-intel-qsv-h264` / `preset-intel-qsv-h265` is often more stable than the auto-detected `preset-vaapi`. See the [hardware acceleration docs](/configuration/hardware_acceleration_video.md#intel-based-cpus) for the recommended preset for your Intel generation.
|
||||||
|
- **Try a different VAAPI driver.** The default driver is `iHD`. On older Intel CPUs, `LIBVA_DRIVER_NAME=i965` can be more stable; on AMD GPUs use `LIBVA_DRIVER_NAME=radeonsi`. See [the hardware acceleration docs](/configuration/hardware_acceleration_video.md#intel-based-cpus) for how to set the driver.
|
||||||
|
- **Use a codec that decodes more reliably.** H.265/HEVC streams may trigger this error far more often than H.264 depending on your CPU generation. If your camera exposes a separate sub-stream, assign an H.264 stream to the `detect` role. Cameras that output full-range YUV (for example some Hikvision models) are especially prone to it.
|
||||||
|
- **Match the detect resolution to the stream resolution.** When the `detect` resolution differs from the stream, Frigate inserts a GPU scaling filter (`scale_vaapi`), which is where these surface-sync failures can often originate. Set the `detect` `width` and `height` to match the exact resolution of the stream assigned the `detect` role.
|
||||||
|
- **Match the detect `fps` to the camera stream.** Aggressively dropping frames (for example `detect` `fps: 1` on a stream that runs at 15 fps) can cause timing mismatches in the GPU's frame buffer. Lower the sub-stream's frame rate on the camera itself instead of dropping most frames in Frigate.
|
||||||
|
- **Fall back to software decoding.** If none of the above resolve it, remove the preset for that camera (`hwaccel_args: []`). Hardware decoding is only an optimization — on a capable CPU, software-decoding a low-resolution sub-stream is inexpensive and gives a stable detect pipeline.
|
||||||
|
|||||||
+16
-8
@@ -254,7 +254,14 @@ rateLimiter = RateLimiter()
|
|||||||
|
|
||||||
|
|
||||||
def get_remote_addr(request: Request):
|
def get_remote_addr(request: Request):
|
||||||
route = list(reversed(request.headers.get("x-forwarded-for").split(",")))
|
# fall back to the direct TCP peer when no proxy chain is present
|
||||||
|
direct_addr = request.client.host if request.client else None
|
||||||
|
|
||||||
|
forwarded_for = request.headers.get("x-forwarded-for")
|
||||||
|
if not forwarded_for:
|
||||||
|
return direct_addr or "127.0.0.1"
|
||||||
|
|
||||||
|
route = list(reversed(forwarded_for.split(",")))
|
||||||
logger.debug(f"IP Route: {[r for r in route]}")
|
logger.debug(f"IP Route: {[r for r in route]}")
|
||||||
trusted_proxies = []
|
trusted_proxies = []
|
||||||
for proxy in request.app.frigate_config.auth.trusted_proxies:
|
for proxy in request.app.frigate_config.auth.trusted_proxies:
|
||||||
@@ -291,13 +298,8 @@ def get_remote_addr(request: Request):
|
|||||||
logger.debug(f"First untrusted IP: {str(ip)}")
|
logger.debug(f"First untrusted IP: {str(ip)}")
|
||||||
return str(ip)
|
return str(ip)
|
||||||
|
|
||||||
# if there wasn't anything in the route, just return the default
|
# every hop in the route was trusted, so fall back to the direct peer
|
||||||
remote_addr = None
|
return direct_addr or "127.0.0.1"
|
||||||
|
|
||||||
if hasattr(request, "remote_addr"):
|
|
||||||
remote_addr = request.remote_addr
|
|
||||||
|
|
||||||
return remote_addr or "127.0.0.1"
|
|
||||||
|
|
||||||
|
|
||||||
def _cleanup_first_load_seen() -> None:
|
def _cleanup_first_load_seen() -> None:
|
||||||
@@ -416,6 +418,12 @@ def create_encoded_jwt(user, role, expiration, secret):
|
|||||||
|
|
||||||
def set_jwt_cookie(response: Response, cookie_name, encoded_jwt, expiration, secure):
|
def set_jwt_cookie(response: Response, cookie_name, encoded_jwt, expiration, secure):
|
||||||
# TODO: ideally this would set secure as well, but that requires TLS
|
# TODO: ideally this would set secure as well, but that requires TLS
|
||||||
|
# SameSite is intentionally left unset (browsers default to Lax). Setting
|
||||||
|
# SameSite=Lax/Strict would stop the cookie from being sent in cross-origin
|
||||||
|
# iframes, breaking embedded views such as the Home Assistant Frigate card.
|
||||||
|
# CSRF is instead mitigated by requiring a custom X-CSRF-TOKEN header, which
|
||||||
|
# cross-origin pages cannot set without a CORS preflight that Frigate never
|
||||||
|
# grants (see check_csrf in api/fastapi_app.py).
|
||||||
response.set_cookie(
|
response.set_cookie(
|
||||||
key=cookie_name,
|
key=cookie_name,
|
||||||
value=encoded_jwt,
|
value=encoded_jwt,
|
||||||
|
|||||||
+9
-11
@@ -269,12 +269,12 @@ async def no_recordings(
|
|||||||
cameras = params.cameras
|
cameras = params.cameras
|
||||||
if cameras != "all":
|
if cameras != "all":
|
||||||
requested = set(unquote(cameras).split(","))
|
requested = set(unquote(cameras).split(","))
|
||||||
filtered = requested.intersection(allowed_cameras)
|
camera_list = list(requested.intersection(allowed_cameras))
|
||||||
if not filtered:
|
|
||||||
return JSONResponse(content=[])
|
|
||||||
cameras = ",".join(filtered)
|
|
||||||
else:
|
else:
|
||||||
cameras = allowed_cameras
|
camera_list = list(allowed_cameras)
|
||||||
|
|
||||||
|
if not camera_list:
|
||||||
|
return JSONResponse(content=[])
|
||||||
|
|
||||||
before = params.before or datetime.datetime.now().timestamp()
|
before = params.before or datetime.datetime.now().timestamp()
|
||||||
after = (
|
after = (
|
||||||
@@ -283,12 +283,10 @@ async def no_recordings(
|
|||||||
)
|
)
|
||||||
scale = params.scale
|
scale = params.scale
|
||||||
|
|
||||||
clauses = [(Recordings.end_time >= after) & (Recordings.start_time <= before)]
|
clauses = [
|
||||||
if cameras != "all":
|
(Recordings.end_time >= after) & (Recordings.start_time <= before),
|
||||||
camera_list = cameras.split(",")
|
(Recordings.camera << camera_list),
|
||||||
clauses.append((Recordings.camera << camera_list))
|
]
|
||||||
else:
|
|
||||||
camera_list = allowed_cameras
|
|
||||||
|
|
||||||
# Get recording start times
|
# Get recording start times
|
||||||
data: list[Recordings] = (
|
data: list[Recordings] = (
|
||||||
|
|||||||
@@ -13,6 +13,10 @@ from frigate.comms.event_metadata_updater import (
|
|||||||
EventMetadataTypeEnum,
|
EventMetadataTypeEnum,
|
||||||
)
|
)
|
||||||
from frigate.config import CameraConfig, FrigateConfig
|
from frigate.config import CameraConfig, FrigateConfig
|
||||||
|
from frigate.config.camera.updater import (
|
||||||
|
CameraConfigUpdateEnum,
|
||||||
|
CameraConfigUpdateSubscriber,
|
||||||
|
)
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
@@ -29,6 +33,11 @@ class CameraActivityManager:
|
|||||||
self.zone_all_object_counts: dict[str, Counter] = {}
|
self.zone_all_object_counts: dict[str, Counter] = {}
|
||||||
self.zone_active_object_counts: dict[str, Counter] = {}
|
self.zone_active_object_counts: dict[str, Counter] = {}
|
||||||
self.all_zone_labels: dict[str, set[str]] = {}
|
self.all_zone_labels: dict[str, set[str]] = {}
|
||||||
|
self.config_subscriber = CameraConfigUpdateSubscriber(
|
||||||
|
config,
|
||||||
|
config.cameras,
|
||||||
|
[CameraConfigUpdateEnum.zones, CameraConfigUpdateEnum.objects],
|
||||||
|
)
|
||||||
|
|
||||||
for camera_config in config.cameras.values():
|
for camera_config in config.cameras.values():
|
||||||
if not camera_config.enabled_in_config:
|
if not camera_config.enabled_in_config:
|
||||||
@@ -56,7 +65,40 @@ class CameraActivityManager:
|
|||||||
else camera_config.objects.track
|
else camera_config.objects.track
|
||||||
)
|
)
|
||||||
|
|
||||||
|
def __rebuild_zone_labels(self) -> None:
|
||||||
|
"""Rebuild zone label tracking after a runtime zones/objects change."""
|
||||||
|
new_zone_labels: dict[str, set[str]] = {}
|
||||||
|
|
||||||
|
for camera_config in self.config.cameras.values():
|
||||||
|
if not camera_config.enabled_in_config or camera_config.name is None:
|
||||||
|
continue
|
||||||
|
|
||||||
|
for zone, zone_config in camera_config.zones.items():
|
||||||
|
new_zone_labels.setdefault(zone, set()).update(
|
||||||
|
zone_config.objects
|
||||||
|
if zone_config.objects
|
||||||
|
else camera_config.objects.track
|
||||||
|
)
|
||||||
|
|
||||||
|
# drop counters for zones that no longer exist
|
||||||
|
for zone in list(self.zone_all_object_counts.keys()):
|
||||||
|
if zone not in new_zone_labels:
|
||||||
|
self.zone_all_object_counts.pop(zone, None)
|
||||||
|
self.zone_active_object_counts.pop(zone, None)
|
||||||
|
|
||||||
|
# ensure counters exist for new zones so the first count is published
|
||||||
|
for zone in new_zone_labels:
|
||||||
|
self.zone_all_object_counts.setdefault(zone, Counter())
|
||||||
|
self.zone_active_object_counts.setdefault(zone, Counter())
|
||||||
|
|
||||||
|
self.all_zone_labels = new_zone_labels
|
||||||
|
|
||||||
def update_activity(self, new_activity: dict[str, dict[str, Any]]) -> None:
|
def update_activity(self, new_activity: dict[str, dict[str, Any]]) -> None:
|
||||||
|
updated_topics = self.config_subscriber.check_for_updates()
|
||||||
|
|
||||||
|
if "zones" in updated_topics or "objects" in updated_topics:
|
||||||
|
self.__rebuild_zone_labels()
|
||||||
|
|
||||||
all_objects: list[dict[str, Any]] = []
|
all_objects: list[dict[str, Any]] = []
|
||||||
|
|
||||||
for camera in new_activity.keys():
|
for camera in new_activity.keys():
|
||||||
@@ -161,6 +203,9 @@ class CameraActivityManager:
|
|||||||
self.publish(f"{camera}/all", sum(list(all_objects.values())))
|
self.publish(f"{camera}/all", sum(list(all_objects.values())))
|
||||||
self.publish(f"{camera}/all/active", sum(list(active_objects.values())))
|
self.publish(f"{camera}/all/active", sum(list(active_objects.values())))
|
||||||
|
|
||||||
|
def stop(self) -> None:
|
||||||
|
self.config_subscriber.stop()
|
||||||
|
|
||||||
|
|
||||||
class AudioActivityManager:
|
class AudioActivityManager:
|
||||||
def __init__(
|
def __init__(
|
||||||
|
|||||||
@@ -397,6 +397,8 @@ class Dispatcher:
|
|||||||
comm.publish(topic, payload, retain)
|
comm.publish(topic, payload, retain)
|
||||||
|
|
||||||
def stop(self) -> None:
|
def stop(self) -> None:
|
||||||
|
self.camera_activity.stop()
|
||||||
|
|
||||||
for comm in self.comms:
|
for comm in self.comms:
|
||||||
comm.stop()
|
comm.stop()
|
||||||
|
|
||||||
|
|||||||
+21
-2
@@ -41,6 +41,18 @@ class MqttClient(Communicator):
|
|||||||
self.publish("available", "stopped", retain=True)
|
self.publish("available", "stopped", retain=True)
|
||||||
self.client.disconnect()
|
self.client.disconnect()
|
||||||
|
|
||||||
|
def _notifications_enabled_in_config(self) -> bool:
|
||||||
|
"""Whether notifications are configured globally or on any camera.
|
||||||
|
|
||||||
|
Notifications can be enabled per camera with the global config left
|
||||||
|
disabled, so the global topics must consider both (matching how
|
||||||
|
app.py decides to create the WebPushClient).
|
||||||
|
"""
|
||||||
|
return self.config.notifications.enabled_in_config or any(
|
||||||
|
cam.enabled and cam.notifications.enabled_in_config
|
||||||
|
for cam in self.config.cameras.values()
|
||||||
|
)
|
||||||
|
|
||||||
def _set_initial_topics(self) -> None:
|
def _set_initial_topics(self) -> None:
|
||||||
"""Set initial state topics."""
|
"""Set initial state topics."""
|
||||||
for camera_name, camera in self.config.cameras.items():
|
for camera_name, camera in self.config.cameras.items():
|
||||||
@@ -157,7 +169,7 @@ class MqttClient(Communicator):
|
|||||||
retain=True,
|
retain=True,
|
||||||
)
|
)
|
||||||
|
|
||||||
if self.config.notifications.enabled_in_config:
|
if self._notifications_enabled_in_config():
|
||||||
self.publish(
|
self.publish(
|
||||||
"notifications/state",
|
"notifications/state",
|
||||||
"ON" if self.config.notifications.enabled else "OFF",
|
"ON" if self.config.notifications.enabled else "OFF",
|
||||||
@@ -256,6 +268,7 @@ class MqttClient(Communicator):
|
|||||||
"review_detections",
|
"review_detections",
|
||||||
"object_descriptions",
|
"object_descriptions",
|
||||||
"review_descriptions",
|
"review_descriptions",
|
||||||
|
"notifications",
|
||||||
]
|
]
|
||||||
|
|
||||||
for name in self.config.cameras.keys():
|
for name in self.config.cameras.keys():
|
||||||
@@ -265,6 +278,12 @@ class MqttClient(Communicator):
|
|||||||
self.on_mqtt_command,
|
self.on_mqtt_command,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
# notifications suspend doesn't follow the /set topic pattern
|
||||||
|
self.client.message_callback_add(
|
||||||
|
f"{self.mqtt_config.topic_prefix}/{name}/notifications/suspend",
|
||||||
|
self.on_mqtt_command,
|
||||||
|
)
|
||||||
|
|
||||||
if self.config.cameras[name].onvif.host:
|
if self.config.cameras[name].onvif.host:
|
||||||
self.client.message_callback_add(
|
self.client.message_callback_add(
|
||||||
f"{self.mqtt_config.topic_prefix}/{name}/ptz",
|
f"{self.mqtt_config.topic_prefix}/{name}/ptz",
|
||||||
@@ -289,7 +308,7 @@ class MqttClient(Communicator):
|
|||||||
self.on_mqtt_command,
|
self.on_mqtt_command,
|
||||||
)
|
)
|
||||||
|
|
||||||
if self.config.notifications.enabled_in_config:
|
if self._notifications_enabled_in_config():
|
||||||
self.client.message_callback_add(
|
self.client.message_callback_add(
|
||||||
f"{self.mqtt_config.topic_prefix}/notifications/set",
|
f"{self.mqtt_config.topic_prefix}/notifications/set",
|
||||||
self.on_mqtt_command,
|
self.on_mqtt_command,
|
||||||
|
|||||||
@@ -86,13 +86,15 @@ class LicensePlateProcessingMixin:
|
|||||||
self.similarity_threshold = 0.8
|
self.similarity_threshold = 0.8
|
||||||
self.cluster_threshold = 0.85
|
self.cluster_threshold = 0.85
|
||||||
|
|
||||||
def _detect(self, image: np.ndarray) -> List[np.ndarray]:
|
def _detect(self, image: np.ndarray, debug_frame_id: int) -> List[np.ndarray]:
|
||||||
"""
|
"""
|
||||||
Detect possible areas of text in the input image by first resizing and normalizing it,
|
Detect possible areas of text in the input image by first resizing and normalizing it,
|
||||||
running a detection model, and filtering out low-probability regions.
|
running a detection model, and filtering out low-probability regions.
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
image (np.ndarray): The input image in which license plates will be detected.
|
image (np.ndarray): The input image in which license plates will be detected.
|
||||||
|
debug_frame_id (int): Shared id used to name debug images so all artifacts
|
||||||
|
from a single LPR pass share the same filename suffix.
|
||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
List[np.ndarray]: A list of bounding box coordinates representing detected license plates.
|
List[np.ndarray]: A list of bounding box coordinates representing detected license plates.
|
||||||
@@ -106,9 +108,8 @@ class LicensePlateProcessingMixin:
|
|||||||
normalized_image = self._normalize_image(resized_image)
|
normalized_image = self._normalize_image(resized_image)
|
||||||
|
|
||||||
if WRITE_DEBUG_IMAGES:
|
if WRITE_DEBUG_IMAGES:
|
||||||
current_time = int(datetime.datetime.now().timestamp())
|
|
||||||
cv2.imwrite(
|
cv2.imwrite(
|
||||||
f"debug/frames/license_plate_resized_{current_time}.jpg",
|
f"debug/frames/license_plate_resized_{debug_frame_id}.jpg",
|
||||||
resized_image,
|
resized_image,
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -203,7 +204,7 @@ class LicensePlateProcessingMixin:
|
|||||||
return self.ctc_decoder(outputs)
|
return self.ctc_decoder(outputs)
|
||||||
|
|
||||||
def _process_license_plate(
|
def _process_license_plate(
|
||||||
self, camera: str, id: str, image: np.ndarray
|
self, camera: str, id: str, image: np.ndarray, debug_frame_id: int
|
||||||
) -> Tuple[List[str], List[List[float]], List[int]]:
|
) -> Tuple[List[str], List[List[float]], List[int]]:
|
||||||
"""
|
"""
|
||||||
Complete pipeline for detecting, classifying, and recognizing license plates in the input image.
|
Complete pipeline for detecting, classifying, and recognizing license plates in the input image.
|
||||||
@@ -214,6 +215,8 @@ class LicensePlateProcessingMixin:
|
|||||||
camera (str): Camera identifier.
|
camera (str): Camera identifier.
|
||||||
id (str): Event identifier.
|
id (str): Event identifier.
|
||||||
image (np.ndarray): The input image in which to detect, classify, and recognize license plates.
|
image (np.ndarray): The input image in which to detect, classify, and recognize license plates.
|
||||||
|
debug_frame_id (int): Shared id used to name debug images so all artifacts
|
||||||
|
from a single LPR pass share the same filename suffix.
|
||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
Tuple[List[str], List[List[float]], List[int]]: Detected license plate texts, character-level confidence scores for each plate (flattened into a single list per plate), and areas of the plates.
|
Tuple[List[str], List[List[float]], List[int]]: Detected license plate texts, character-level confidence scores for each plate (flattened into a single list per plate), and areas of the plates.
|
||||||
@@ -227,7 +230,7 @@ class LicensePlateProcessingMixin:
|
|||||||
logger.debug("Model runners not loaded")
|
logger.debug("Model runners not loaded")
|
||||||
return [], [], []
|
return [], [], []
|
||||||
|
|
||||||
boxes = self._detect(image)
|
boxes = self._detect(image, debug_frame_id)
|
||||||
if len(boxes) == 0:
|
if len(boxes) == 0:
|
||||||
logger.debug(f"{camera}: No boxes found by OCR detector model")
|
logger.debug(f"{camera}: No boxes found by OCR detector model")
|
||||||
return [], [], []
|
return [], [], []
|
||||||
@@ -243,7 +246,6 @@ class LicensePlateProcessingMixin:
|
|||||||
boxes, plate_width=plate_width, gap_fraction=0.1
|
boxes, plate_width=plate_width, gap_fraction=0.1
|
||||||
)
|
)
|
||||||
|
|
||||||
current_time = int(datetime.datetime.now().timestamp())
|
|
||||||
if WRITE_DEBUG_IMAGES:
|
if WRITE_DEBUG_IMAGES:
|
||||||
debug_image = image.copy()
|
debug_image = image.copy()
|
||||||
for box in boxes:
|
for box in boxes:
|
||||||
@@ -259,7 +261,7 @@ class LicensePlateProcessingMixin:
|
|||||||
)
|
)
|
||||||
|
|
||||||
cv2.imwrite(
|
cv2.imwrite(
|
||||||
f"debug/frames/license_plate_boxes_{current_time}.jpg", debug_image
|
f"debug/frames/license_plate_boxes_{debug_frame_id}.jpg", debug_image
|
||||||
)
|
)
|
||||||
|
|
||||||
boxes = self._sort_boxes(list(boxes))
|
boxes = self._sort_boxes(list(boxes))
|
||||||
@@ -322,7 +324,7 @@ class LicensePlateProcessingMixin:
|
|||||||
if WRITE_DEBUG_IMAGES:
|
if WRITE_DEBUG_IMAGES:
|
||||||
for i, img in enumerate(group_plate_images):
|
for i, img in enumerate(group_plate_images):
|
||||||
cv2.imwrite(
|
cv2.imwrite(
|
||||||
f"debug/frames/license_plate_cropped_{current_time}_{group_indices[i] + 1}.jpg",
|
f"debug/frames/license_plate_cropped_{debug_frame_id}_{group_indices[i] + 1}.jpg",
|
||||||
img,
|
img,
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -335,7 +337,7 @@ class LicensePlateProcessingMixin:
|
|||||||
cv2.imwrite(
|
cv2.imwrite(
|
||||||
os.path.join(
|
os.path.join(
|
||||||
CLIPS_DIR,
|
CLIPS_DIR,
|
||||||
f"lpr/{camera}/{id}/{current_time}_{group_indices[i] + 1}.jpg",
|
f"lpr/{camera}/{id}/{debug_frame_id}_{group_indices[i] + 1}.jpg",
|
||||||
),
|
),
|
||||||
img,
|
img,
|
||||||
)
|
)
|
||||||
@@ -1199,6 +1201,7 @@ class LicensePlateProcessingMixin:
|
|||||||
self.metrics.yolov9_lpr_pps.value = self.plates_det_second.eps()
|
self.metrics.yolov9_lpr_pps.value = self.plates_det_second.eps()
|
||||||
camera = obj_data if dedicated_lpr else obj_data["camera"]
|
camera = obj_data if dedicated_lpr else obj_data["camera"]
|
||||||
current_time = int(datetime.datetime.now().timestamp())
|
current_time = int(datetime.datetime.now().timestamp())
|
||||||
|
debug_frame_id = int(datetime.datetime.now().timestamp() * 1000)
|
||||||
|
|
||||||
if not self.config.cameras[camera].lpr.enabled:
|
if not self.config.cameras[camera].lpr.enabled:
|
||||||
return
|
return
|
||||||
@@ -1214,7 +1217,7 @@ class LicensePlateProcessingMixin:
|
|||||||
|
|
||||||
if WRITE_DEBUG_IMAGES:
|
if WRITE_DEBUG_IMAGES:
|
||||||
cv2.imwrite(
|
cv2.imwrite(
|
||||||
f"debug/frames/dedicated_lpr_masked_{current_time}.jpg",
|
f"debug/frames/dedicated_lpr_masked_{debug_frame_id}.jpg",
|
||||||
rgb,
|
rgb,
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -1326,7 +1329,7 @@ class LicensePlateProcessingMixin:
|
|||||||
|
|
||||||
if WRITE_DEBUG_IMAGES:
|
if WRITE_DEBUG_IMAGES:
|
||||||
cv2.imwrite(
|
cv2.imwrite(
|
||||||
f"debug/frames/car_frame_{current_time}.jpg",
|
f"debug/frames/car_frame_{debug_frame_id}.jpg",
|
||||||
car,
|
car,
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -1454,7 +1457,7 @@ class LicensePlateProcessingMixin:
|
|||||||
|
|
||||||
if WRITE_DEBUG_IMAGES:
|
if WRITE_DEBUG_IMAGES:
|
||||||
cv2.imwrite(
|
cv2.imwrite(
|
||||||
f"debug/frames/license_plate_frame_{current_time}.jpg",
|
f"debug/frames/license_plate_frame_{debug_frame_id}.jpg",
|
||||||
license_plate_frame,
|
license_plate_frame,
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -1464,7 +1467,7 @@ class LicensePlateProcessingMixin:
|
|||||||
# run detection, returns results sorted by confidence, best first
|
# run detection, returns results sorted by confidence, best first
|
||||||
start = datetime.datetime.now().timestamp()
|
start = datetime.datetime.now().timestamp()
|
||||||
license_plates, confidences, areas = self._process_license_plate(
|
license_plates, confidences, areas = self._process_license_plate(
|
||||||
camera, id, license_plate_frame
|
camera, id, license_plate_frame, debug_frame_id
|
||||||
)
|
)
|
||||||
self.plates_rec_second.update()
|
self.plates_rec_second.update()
|
||||||
self.plate_rec_speed.update(datetime.datetime.now().timestamp() - start)
|
self.plate_rec_speed.update(datetime.datetime.now().timestamp() - start)
|
||||||
|
|||||||
@@ -475,3 +475,55 @@ class TestHttpMedia(BaseTestHttp):
|
|||||||
|
|
||||||
assert response.status_code == 200
|
assert response.status_code == 200
|
||||||
assert response.json() == []
|
assert response.json() == []
|
||||||
|
|
||||||
|
def test_recordings_unavailable_cameras_all_scopes_to_allowed_cameras(self):
|
||||||
|
"""cameras=all must not error and must only consider allowed cameras.
|
||||||
|
|
||||||
|
allowed_cameras is mocked to ["front_door"]. A back_door recording that
|
||||||
|
would otherwise fill the gap must be ignored, and the request must not
|
||||||
|
500 the way it did when cameras was reassigned to a list.
|
||||||
|
"""
|
||||||
|
with AuthTestClient(self.app) as client:
|
||||||
|
# front_door has a 20s gap (1010-1030).
|
||||||
|
Recordings.insert(
|
||||||
|
id="front_a",
|
||||||
|
path="/media/recordings/front_a.mp4",
|
||||||
|
camera="front_door",
|
||||||
|
start_time=1000,
|
||||||
|
end_time=1010,
|
||||||
|
duration=10,
|
||||||
|
motion=0,
|
||||||
|
).execute()
|
||||||
|
Recordings.insert(
|
||||||
|
id="front_b",
|
||||||
|
path="/media/recordings/front_b.mp4",
|
||||||
|
camera="front_door",
|
||||||
|
start_time=1030,
|
||||||
|
end_time=1040,
|
||||||
|
duration=10,
|
||||||
|
motion=0,
|
||||||
|
).execute()
|
||||||
|
# back_door is not in allowed_cameras; its full-window coverage must
|
||||||
|
# not mask the front_door gap.
|
||||||
|
Recordings.insert(
|
||||||
|
id="back_a",
|
||||||
|
path="/media/recordings/back_a.mp4",
|
||||||
|
camera="back_door",
|
||||||
|
start_time=1000,
|
||||||
|
end_time=1040,
|
||||||
|
duration=40,
|
||||||
|
motion=0,
|
||||||
|
).execute()
|
||||||
|
|
||||||
|
response = client.get(
|
||||||
|
"/recordings/unavailable",
|
||||||
|
params={
|
||||||
|
"after": 1000,
|
||||||
|
"before": 1040,
|
||||||
|
"scale": 5,
|
||||||
|
"cameras": "all",
|
||||||
|
},
|
||||||
|
)
|
||||||
|
|
||||||
|
assert response.status_code == 200
|
||||||
|
assert response.json() == [{"start_time": 1010, "end_time": 1030}]
|
||||||
|
|||||||
@@ -0,0 +1,100 @@
|
|||||||
|
"""Tests for MQTT command topic callback registration."""
|
||||||
|
|
||||||
|
import unittest
|
||||||
|
from unittest.mock import MagicMock, patch
|
||||||
|
|
||||||
|
from frigate.comms.mqtt import MqttClient
|
||||||
|
|
||||||
|
|
||||||
|
def _make_camera_mock(
|
||||||
|
*,
|
||||||
|
enabled: bool = True,
|
||||||
|
notifications_enabled_in_config: bool = False,
|
||||||
|
) -> MagicMock:
|
||||||
|
"""Build a camera config mock with the fields _start() reads."""
|
||||||
|
camera = MagicMock()
|
||||||
|
camera.enabled = enabled
|
||||||
|
camera.notifications.enabled_in_config = notifications_enabled_in_config
|
||||||
|
camera.onvif.host = None
|
||||||
|
camera.motion.mask = {}
|
||||||
|
camera.objects.mask = {}
|
||||||
|
camera.zones = {}
|
||||||
|
return camera
|
||||||
|
|
||||||
|
|
||||||
|
def _registered_topics(
|
||||||
|
cameras: dict[str, MagicMock],
|
||||||
|
*,
|
||||||
|
global_notifications_enabled_in_config: bool = False,
|
||||||
|
) -> set[str]:
|
||||||
|
"""Start an MqttClient against a mocked paho client and collect the
|
||||||
|
topics registered via message_callback_add."""
|
||||||
|
config = MagicMock()
|
||||||
|
config.cameras = cameras
|
||||||
|
config.notifications.enabled_in_config = global_notifications_enabled_in_config
|
||||||
|
config.mqtt.topic_prefix = "frigate"
|
||||||
|
config.mqtt.client_id = "frigate"
|
||||||
|
config.mqtt.user = None
|
||||||
|
config.mqtt.tls_ca_certs = None
|
||||||
|
config.mqtt.tls_insecure = None
|
||||||
|
|
||||||
|
with patch("frigate.comms.mqtt.mqtt.Client") as client_cls:
|
||||||
|
mqtt_client = MqttClient(config)
|
||||||
|
mqtt_client.subscribe(MagicMock())
|
||||||
|
|
||||||
|
paho_client = client_cls.return_value
|
||||||
|
return {call.args[0] for call in paho_client.message_callback_add.call_args_list}
|
||||||
|
|
||||||
|
|
||||||
|
class TestMqttTopicRegistration(unittest.TestCase):
|
||||||
|
def test_camera_notification_topics_registered(self):
|
||||||
|
"""Per-camera notification set/suspend must be registered so paho
|
||||||
|
routes them to the dispatcher (unregistered topics drop silently)."""
|
||||||
|
topics = _registered_topics(
|
||||||
|
{"front_door": _make_camera_mock(notifications_enabled_in_config=True)}
|
||||||
|
)
|
||||||
|
|
||||||
|
self.assertIn("frigate/front_door/notifications/set", topics)
|
||||||
|
self.assertIn("frigate/front_door/notifications/suspend", topics)
|
||||||
|
|
||||||
|
def test_global_set_registered_with_camera_only_notifications(self):
|
||||||
|
"""The global topic must work when notifications are enabled only at
|
||||||
|
the camera level, matching the WebPushClient gating in app.py."""
|
||||||
|
topics = _registered_topics(
|
||||||
|
{"front_door": _make_camera_mock(notifications_enabled_in_config=True)},
|
||||||
|
global_notifications_enabled_in_config=False,
|
||||||
|
)
|
||||||
|
|
||||||
|
self.assertIn("frigate/notifications/set", topics)
|
||||||
|
|
||||||
|
def test_global_set_registered_with_global_notifications(self):
|
||||||
|
topics = _registered_topics(
|
||||||
|
{"front_door": _make_camera_mock()},
|
||||||
|
global_notifications_enabled_in_config=True,
|
||||||
|
)
|
||||||
|
|
||||||
|
self.assertIn("frigate/notifications/set", topics)
|
||||||
|
|
||||||
|
def test_global_set_not_registered_when_notifications_unconfigured(self):
|
||||||
|
topics = _registered_topics(
|
||||||
|
{"front_door": _make_camera_mock()},
|
||||||
|
global_notifications_enabled_in_config=False,
|
||||||
|
)
|
||||||
|
|
||||||
|
self.assertNotIn("frigate/notifications/set", topics)
|
||||||
|
|
||||||
|
def test_disabled_camera_does_not_enable_global_set(self):
|
||||||
|
topics = _registered_topics(
|
||||||
|
{
|
||||||
|
"front_door": _make_camera_mock(
|
||||||
|
enabled=False, notifications_enabled_in_config=True
|
||||||
|
)
|
||||||
|
},
|
||||||
|
global_notifications_enabled_in_config=False,
|
||||||
|
)
|
||||||
|
|
||||||
|
self.assertNotIn("frigate/notifications/set", topics)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
unittest.main()
|
||||||
@@ -0,0 +1,183 @@
|
|||||||
|
"""Test in-place yaml config updates."""
|
||||||
|
|
||||||
|
import os
|
||||||
|
import tempfile
|
||||||
|
import unittest
|
||||||
|
|
||||||
|
from ruamel.yaml import YAML
|
||||||
|
|
||||||
|
from frigate.util.builtin import update_yaml_file_bulk
|
||||||
|
|
||||||
|
|
||||||
|
class TestUpdateYaml(unittest.TestCase):
|
||||||
|
def setUp(self) -> None:
|
||||||
|
self.yaml = YAML()
|
||||||
|
fd, self.config_path = tempfile.mkstemp(suffix=".yml")
|
||||||
|
os.close(fd)
|
||||||
|
|
||||||
|
def tearDown(self) -> None:
|
||||||
|
os.unlink(self.config_path)
|
||||||
|
|
||||||
|
def _write(self, text: str) -> None:
|
||||||
|
with open(self.config_path, "w") as f:
|
||||||
|
f.write(text)
|
||||||
|
|
||||||
|
def _read(self) -> str:
|
||||||
|
with open(self.config_path) as f:
|
||||||
|
return f.read()
|
||||||
|
|
||||||
|
def _load(self):
|
||||||
|
with open(self.config_path) as f:
|
||||||
|
return self.yaml.load(f)
|
||||||
|
|
||||||
|
def test_delete_key(self):
|
||||||
|
"""Deleting a key removes it and leaves valid yaml."""
|
||||||
|
self._write(
|
||||||
|
"cameras:\n"
|
||||||
|
" cam1:\n"
|
||||||
|
" objects:\n"
|
||||||
|
" filters:\n"
|
||||||
|
" car:\n"
|
||||||
|
" mask: 0,0.45,0.245,0.45\n"
|
||||||
|
)
|
||||||
|
update_yaml_file_bulk(
|
||||||
|
self.config_path, {"cameras.cam1.objects.filters.car.mask": ""}
|
||||||
|
)
|
||||||
|
data = self._load()
|
||||||
|
assert "mask" not in data["cameras"]["cam1"]["objects"]["filters"]["car"]
|
||||||
|
|
||||||
|
def test_delete_commented_key_emptying_map(self):
|
||||||
|
"""Deleting the only key of a map whose key carries comments must not
|
||||||
|
emit unparseable yaml (orphaned comment tokens above a flow-style {})."""
|
||||||
|
self._write(
|
||||||
|
"cameras:\n"
|
||||||
|
" cam1:\n"
|
||||||
|
" objects:\n"
|
||||||
|
" filters:\n"
|
||||||
|
" car:\n"
|
||||||
|
" # cars parked across the street\n"
|
||||||
|
" # second comment line\n"
|
||||||
|
" mask: 0,0.45,0.245,0.45\n"
|
||||||
|
" motion:\n"
|
||||||
|
" mask: 0,0.449,0.686,0.395\n"
|
||||||
|
)
|
||||||
|
update_yaml_file_bulk(
|
||||||
|
self.config_path, {"cameras.cam1.objects.filters.car.mask": ""}
|
||||||
|
)
|
||||||
|
# must re-parse cleanly
|
||||||
|
data = self._load()
|
||||||
|
assert "mask" not in data["cameras"]["cam1"]["objects"]["filters"]["car"]
|
||||||
|
assert data["cameras"]["cam1"]["motion"]["mask"] == "0,0.449,0.686,0.395"
|
||||||
|
# the orphaned comments must be gone from the file, not just parseable
|
||||||
|
content = self._read()
|
||||||
|
assert "cars parked across the street" not in content
|
||||||
|
assert "second comment line" not in content
|
||||||
|
|
||||||
|
def test_delete_last_named_mask_emptying_map(self):
|
||||||
|
"""The path the current UI actually sends: a named object mask deleted
|
||||||
|
down to an empty `mask` map, with a comment inside that map."""
|
||||||
|
self._write(
|
||||||
|
"cameras:\n"
|
||||||
|
" cam1:\n"
|
||||||
|
" objects:\n"
|
||||||
|
" filters:\n"
|
||||||
|
" car:\n"
|
||||||
|
" mask:\n"
|
||||||
|
" # ignore the neighbor's driveway\n"
|
||||||
|
" driveway:\n"
|
||||||
|
" coordinates: 0,0.1,0.2,0.3\n"
|
||||||
|
)
|
||||||
|
update_yaml_file_bulk(
|
||||||
|
self.config_path,
|
||||||
|
{"cameras.cam1.objects.filters.car.mask.driveway": ""},
|
||||||
|
)
|
||||||
|
data = self._load()
|
||||||
|
assert data["cameras"]["cam1"]["objects"]["filters"]["car"]["mask"] == {}
|
||||||
|
assert "ignore the neighbor's driveway" not in self._read()
|
||||||
|
|
||||||
|
def test_delete_last_commented_list_item(self):
|
||||||
|
"""Deleting the last element of a commented sequence must not emit
|
||||||
|
an orphaned comment above a flow-style [] at column 0."""
|
||||||
|
self._write(
|
||||||
|
"cameras:\n"
|
||||||
|
" cam1:\n"
|
||||||
|
" motion:\n"
|
||||||
|
" mask:\n"
|
||||||
|
" # driveway motion mask\n"
|
||||||
|
" - 0,0.4,0.6,0.4\n"
|
||||||
|
)
|
||||||
|
update_yaml_file_bulk(self.config_path, {"cameras.cam1.motion.mask.0": ""})
|
||||||
|
data = self._load()
|
||||||
|
assert data["cameras"]["cam1"]["motion"]["mask"] == []
|
||||||
|
assert "driveway motion mask" not in self._read()
|
||||||
|
|
||||||
|
def test_delete_list_item_preserves_remaining(self):
|
||||||
|
"""Deleting one element of a sequence keeps the others and stays valid."""
|
||||||
|
self._write(
|
||||||
|
"cameras:\n"
|
||||||
|
" cam1:\n"
|
||||||
|
" motion:\n"
|
||||||
|
" mask:\n"
|
||||||
|
" - 0,0.4,0.6,0.4\n"
|
||||||
|
" - 0,0.1,0.2,0.3\n"
|
||||||
|
)
|
||||||
|
update_yaml_file_bulk(self.config_path, {"cameras.cam1.motion.mask.0": ""})
|
||||||
|
data = self._load()
|
||||||
|
assert data["cameras"]["cam1"]["motion"]["mask"] == ["0,0.1,0.2,0.3"]
|
||||||
|
|
||||||
|
def test_delete_key_preserves_siblings(self):
|
||||||
|
"""Deleting one key among several keeps the sibling entries and any
|
||||||
|
comments on keys preceding the deleted one."""
|
||||||
|
self._write(
|
||||||
|
"cameras:\n"
|
||||||
|
" cam1:\n"
|
||||||
|
" objects:\n"
|
||||||
|
" filters:\n"
|
||||||
|
" car:\n"
|
||||||
|
" # mask drawn around the parked suv\n"
|
||||||
|
" mask: 0,0.45,0.245,0.45\n"
|
||||||
|
" threshold: 0.8\n"
|
||||||
|
)
|
||||||
|
update_yaml_file_bulk(
|
||||||
|
self.config_path, {"cameras.cam1.objects.filters.car.threshold": ""}
|
||||||
|
)
|
||||||
|
data = self._load()
|
||||||
|
car = data["cameras"]["cam1"]["objects"]["filters"]["car"]
|
||||||
|
assert "threshold" not in car
|
||||||
|
assert car["mask"] == "0,0.45,0.245,0.45"
|
||||||
|
assert "# mask drawn around the parked suv" in self._read()
|
||||||
|
|
||||||
|
def test_delete_first_commented_key_keeps_map_valid(self):
|
||||||
|
"""Deleting a commented key from a map that still has other keys
|
||||||
|
leaves the remaining entries intact and the file parseable."""
|
||||||
|
self._write(
|
||||||
|
"cameras:\n"
|
||||||
|
" cam1:\n"
|
||||||
|
" objects:\n"
|
||||||
|
" filters:\n"
|
||||||
|
" car:\n"
|
||||||
|
" # comment on the deleted key\n"
|
||||||
|
" mask: 0,0.45,0.245,0.45\n"
|
||||||
|
" threshold: 0.8\n"
|
||||||
|
)
|
||||||
|
update_yaml_file_bulk(
|
||||||
|
self.config_path, {"cameras.cam1.objects.filters.car.mask": ""}
|
||||||
|
)
|
||||||
|
data = self._load()
|
||||||
|
car = data["cameras"]["cam1"]["objects"]["filters"]["car"]
|
||||||
|
assert "mask" not in car
|
||||||
|
assert car["threshold"] == 0.8
|
||||||
|
|
||||||
|
def test_update_value_preserves_comments(self):
|
||||||
|
"""Updating a value keeps surrounding comments intact."""
|
||||||
|
self._write(
|
||||||
|
"cameras:\n cam1:\n detect:\n # tuned for the pi\n fps: 4\n"
|
||||||
|
)
|
||||||
|
update_yaml_file_bulk(self.config_path, {"cameras.cam1.detect.fps": 5})
|
||||||
|
data = self._load()
|
||||||
|
assert data["cameras"]["cam1"]["detect"]["fps"] == 5
|
||||||
|
assert "# tuned for the pi" in self._read()
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
unittest.main(verbosity=2)
|
||||||
@@ -293,26 +293,51 @@ def update_yaml_file_bulk(file_path: str, updates: Dict[str, Any]):
|
|||||||
logger.error(f"Unable to write to Frigate config file {file_path}: {e}")
|
logger.error(f"Unable to write to Frigate config file {file_path}: {e}")
|
||||||
|
|
||||||
|
|
||||||
|
def clear_orphaned_comments(collection, parent, parent_key) -> None:
|
||||||
|
"""Drop stale ruamel comment tokens after a deletion empties a collection.
|
||||||
|
|
||||||
|
When the last entry of a mapping or sequence is removed, any comments that
|
||||||
|
lived inside that collection's block are orphaned. ruamel then emits them
|
||||||
|
above a flow-style `{}`/`[]` dedented to column 0, which is unparseable and
|
||||||
|
corrupts the config. Clearing the emptied collection's own comment metadata
|
||||||
|
(and the parent's entry pointing at it) keeps the dump valid. Non-empty
|
||||||
|
collections are left untouched so comments on remaining siblings survive.
|
||||||
|
"""
|
||||||
|
if not hasattr(collection, "ca") or len(collection) != 0:
|
||||||
|
return
|
||||||
|
|
||||||
|
collection.ca.items.clear()
|
||||||
|
collection.ca.comment = None
|
||||||
|
if parent is not None and hasattr(parent, "ca"):
|
||||||
|
parent.ca.items.pop(parent_key, None)
|
||||||
|
|
||||||
|
|
||||||
def update_yaml(data, key_path, new_value):
|
def update_yaml(data, key_path, new_value):
|
||||||
temp = data
|
temp = data
|
||||||
|
parent = None
|
||||||
|
parent_key = None
|
||||||
for key in key_path[:-1]:
|
for key in key_path[:-1]:
|
||||||
if isinstance(key, tuple):
|
if isinstance(key, tuple):
|
||||||
if key[0] not in temp:
|
if key[0] not in temp:
|
||||||
temp[key[0]] = [{}] * max(1, key[1] + 1)
|
temp[key[0]] = [{}] * max(1, key[1] + 1)
|
||||||
elif len(temp[key[0]]) <= key[1]:
|
elif len(temp[key[0]]) <= key[1]:
|
||||||
temp[key[0]] += [{}] * (key[1] - len(temp[key[0]]) + 1)
|
temp[key[0]] += [{}] * (key[1] - len(temp[key[0]]) + 1)
|
||||||
|
parent, parent_key = temp[key[0]], key[1]
|
||||||
temp = temp[key[0]][key[1]]
|
temp = temp[key[0]][key[1]]
|
||||||
else:
|
else:
|
||||||
if key not in temp or temp[key] is None:
|
if key not in temp or temp[key] is None:
|
||||||
temp[key] = {}
|
temp[key] = {}
|
||||||
|
parent, parent_key = temp, key
|
||||||
temp = temp[key]
|
temp = temp[key]
|
||||||
|
|
||||||
last_key = key_path[-1]
|
last_key = key_path[-1]
|
||||||
if new_value == "":
|
if new_value == "":
|
||||||
if isinstance(last_key, tuple):
|
if isinstance(last_key, tuple):
|
||||||
del temp[last_key[0]][last_key[1]]
|
del temp[last_key[0]][last_key[1]]
|
||||||
|
clear_orphaned_comments(temp[last_key[0]], temp, last_key[0])
|
||||||
else:
|
else:
|
||||||
del temp[last_key]
|
del temp[last_key]
|
||||||
|
clear_orphaned_comments(temp, parent, parent_key)
|
||||||
else:
|
else:
|
||||||
if isinstance(last_key, tuple):
|
if isinstance(last_key, tuple):
|
||||||
if last_key[0] not in temp:
|
if last_key[0] not in temp:
|
||||||
|
|||||||
@@ -149,5 +149,17 @@
|
|||||||
"cluck": "قرقرة",
|
"cluck": "قرقرة",
|
||||||
"cock_a_doodle_doo": "كوكو-كو-كوووووو",
|
"cock_a_doodle_doo": "كوكو-كو-كوووووو",
|
||||||
"turkey": "ديك رومى",
|
"turkey": "ديك رومى",
|
||||||
"gobble": "كركرة"
|
"gobble": "كركرة",
|
||||||
|
"tearing": "يمزق",
|
||||||
|
"ping": "طنّة",
|
||||||
|
"clang": "صوت رنين",
|
||||||
|
"squeal": "يصرخ",
|
||||||
|
"creak": "صرير",
|
||||||
|
"sizzle": "صوت الأزيز",
|
||||||
|
"clicking": "النقر",
|
||||||
|
"clickety_clack": "طقطقة",
|
||||||
|
"rumble": "الحلبة",
|
||||||
|
"skateboard": "لوح تزلج",
|
||||||
|
"echo": "صدى الصوت",
|
||||||
|
"noise": "ازعاج"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -22,5 +22,6 @@
|
|||||||
"mouse": "فأر",
|
"mouse": "فأر",
|
||||||
"keyboard": "لوحة المفاتيح",
|
"keyboard": "لوحة المفاتيح",
|
||||||
"goat": "معزة",
|
"goat": "معزة",
|
||||||
"sheep": "غنم"
|
"sheep": "غنم",
|
||||||
|
"skateboard": "لوح تزلج"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -355,8 +355,43 @@
|
|||||||
"steam_whistle": "Парна свирка",
|
"steam_whistle": "Парна свирка",
|
||||||
"mechanisms": "Механизми",
|
"mechanisms": "Механизми",
|
||||||
"clock": "Часовник",
|
"clock": "Часовник",
|
||||||
"tick": "",
|
"tick": "Тик",
|
||||||
"tick-tock": "Тиктакане",
|
"tick-tock": "Тиктакане",
|
||||||
"gears": "Зъбни колела",
|
"gears": "Зъбни колела",
|
||||||
"sewing_machine": "Шиеща машина"
|
"sewing_machine": "Шиеща машина",
|
||||||
|
"sound_effect": "Звуков ефект",
|
||||||
|
"tubular_bells": "Тръбни камбани",
|
||||||
|
"mallet_percussion": "Ударни чукчета",
|
||||||
|
"marimba": "Маримба",
|
||||||
|
"glockenspiel": "Металлофон",
|
||||||
|
"steelpan": "Пан барабан",
|
||||||
|
"string_section": "Струнна група",
|
||||||
|
"jingle_bell": "Звънче",
|
||||||
|
"chime": "Звънече",
|
||||||
|
"wind_chime": "Вятърен звън",
|
||||||
|
"singing_bowl": "Пееща купа",
|
||||||
|
"ambient_music": "Амбиентна музика",
|
||||||
|
"new-age_music": "Музика от ново поколение",
|
||||||
|
"vocal_music": "Вокална музика",
|
||||||
|
"gurgling": "Бълбукане",
|
||||||
|
"light_engine": "Лек двигател",
|
||||||
|
"medium_engine": "Среден двигател",
|
||||||
|
"heavy_engine": "Тежък двигател",
|
||||||
|
"ratchet": "Тресчотка",
|
||||||
|
"hammer": "Ръчен чук",
|
||||||
|
"pulleys": "Макари",
|
||||||
|
"mechanical_fan": "Механичен вентилатор",
|
||||||
|
"air_conditioning": "Климатик",
|
||||||
|
"cash_register": "Каса",
|
||||||
|
"printer": "Принтер",
|
||||||
|
"camera": "Камера",
|
||||||
|
"tools": "Инструменти",
|
||||||
|
"artillery_fire": "Артилерийски огън",
|
||||||
|
"boom": "Гръм",
|
||||||
|
"glass": "Стъкло",
|
||||||
|
"crack": "Пукнатина",
|
||||||
|
"wood": "Дърво",
|
||||||
|
"silence": "Тишина",
|
||||||
|
"liquid": "Течност",
|
||||||
|
"splash": "Разливам"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -63,13 +63,17 @@
|
|||||||
"untilRestart": "До рестарт",
|
"untilRestart": "До рестарт",
|
||||||
"mo": "{{time}}мес",
|
"mo": "{{time}}мес",
|
||||||
"m": "{{time}}м",
|
"m": "{{time}}м",
|
||||||
"s": "{{time}}с"
|
"s": "{{time}}с",
|
||||||
|
"never": "Никога",
|
||||||
|
"formattedTimestampMonthDayYearHourMinute": {
|
||||||
|
"12hour": "d MMM yyyy, h:mm aaa"
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"button": {
|
"button": {
|
||||||
"apply": "Приложи",
|
"apply": "Приложи",
|
||||||
"reset": "Нулиране",
|
"reset": "Нулиране",
|
||||||
"done": "Готово",
|
"done": "Готово",
|
||||||
"disabled": "Деактивирано",
|
"disabled": "Изключено",
|
||||||
"save": "Запази",
|
"save": "Запази",
|
||||||
"saving": "Запазване…",
|
"saving": "Запазване…",
|
||||||
"cancel": "Отказ",
|
"cancel": "Отказ",
|
||||||
@@ -80,7 +84,7 @@
|
|||||||
"delete": "Изтриване",
|
"delete": "Изтриване",
|
||||||
"yes": "Да",
|
"yes": "Да",
|
||||||
"download": "Изтегляне",
|
"download": "Изтегляне",
|
||||||
"enabled": "Активирано",
|
"enabled": "Включено",
|
||||||
"history": "История",
|
"history": "История",
|
||||||
"back": "Назад",
|
"back": "Назад",
|
||||||
"fullscreen": "Цял екран",
|
"fullscreen": "Цял екран",
|
||||||
@@ -99,8 +103,8 @@
|
|||||||
"export": "Експортиране",
|
"export": "Експортиране",
|
||||||
"deleteNow": "Изтрии сега",
|
"deleteNow": "Изтрии сега",
|
||||||
"next": "Следващ",
|
"next": "Следващ",
|
||||||
"disable": "Деактивирай",
|
"disable": "Изключи",
|
||||||
"enable": "Активирай"
|
"enable": "Включи"
|
||||||
},
|
},
|
||||||
"menu": {
|
"menu": {
|
||||||
"live": {
|
"live": {
|
||||||
|
|||||||
@@ -30,5 +30,10 @@
|
|||||||
"title": "Всички дати",
|
"title": "Всички дати",
|
||||||
"short": "Дати"
|
"short": "Дати"
|
||||||
}
|
}
|
||||||
}
|
},
|
||||||
|
"more": "Още филтри",
|
||||||
|
"reset": {
|
||||||
|
"label": "Рестартирай филтрите по подразбиране"
|
||||||
|
},
|
||||||
|
"timeRange": "Времеви диапазон"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -34,7 +34,8 @@
|
|||||||
},
|
},
|
||||||
"submitFrigatePlus": {
|
"submitFrigatePlus": {
|
||||||
"title": "Да се изпрати ли този кадър към Frigate+?",
|
"title": "Да се изпрати ли този кадър към Frigate+?",
|
||||||
"submit": "Изпрати"
|
"submit": "Изпрати",
|
||||||
|
"previewError": "Не можe да се зареди предварителен преглед на моментната снимка. Записът може да не е наличен в момента."
|
||||||
},
|
},
|
||||||
"noPreviewFound": "Не е намерен предварителен преглед",
|
"noPreviewFound": "Не е намерен предварителен преглед",
|
||||||
"noRecordingsFoundForThisTime": "За това време не са намерени записи",
|
"noRecordingsFoundForThisTime": "За това време не са намерени записи",
|
||||||
@@ -47,5 +48,6 @@
|
|||||||
"error": {
|
"error": {
|
||||||
"submitFrigatePlusFailed": "Неуспешно изпратен кадър към Frigate+"
|
"submitFrigatePlusFailed": "Неуспешно изпратен кадър към Frigate+"
|
||||||
}
|
}
|
||||||
}
|
},
|
||||||
|
"cameraOff": "Камерата е изключена"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1 +1,69 @@
|
|||||||
{}
|
{
|
||||||
|
"label": "Конфигурация на камерата",
|
||||||
|
"timestamp_style": {
|
||||||
|
"label": "Стил на времева щампа",
|
||||||
|
"format": {
|
||||||
|
"label": "Формат на времева щампа"
|
||||||
|
},
|
||||||
|
"color": {
|
||||||
|
"red": {
|
||||||
|
"label": "Червено",
|
||||||
|
"description": "Червен компонент (0-255) за времева щампа."
|
||||||
|
},
|
||||||
|
"green": {
|
||||||
|
"description": "Зелен компонент (0-255) за времева щампа.",
|
||||||
|
"label": "Зелено"
|
||||||
|
},
|
||||||
|
"blue": {
|
||||||
|
"description": "Син компонент (0-255) за времева щампа.",
|
||||||
|
"label": "Синьо"
|
||||||
|
},
|
||||||
|
"label": "Цвят на времева щампа",
|
||||||
|
"description": "RGB стойности за текста на времева щампа (всички стойности 0-255)."
|
||||||
|
},
|
||||||
|
"thickness": {
|
||||||
|
"description": "Дебелина на текстовата линия за времева щампа.",
|
||||||
|
"label": "Дебелина на времева щампа"
|
||||||
|
},
|
||||||
|
"effect": {
|
||||||
|
"label": "Ефект на времева щампа",
|
||||||
|
"description": "Визуален ефект на времева щампа (без, плътен, сянка)."
|
||||||
|
},
|
||||||
|
"position": {
|
||||||
|
"label": "Позиция на времева щампа",
|
||||||
|
"description": "Позиция за времева щампа на снимката (гл/гд/дл/дд)."
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"audio_transcription": {
|
||||||
|
"label": "Аудио транскрипция",
|
||||||
|
"live_enabled": {
|
||||||
|
"label": "Транскрипция на живо"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"snapshots": {
|
||||||
|
"quality": {
|
||||||
|
"label": "Качество на моментната снимка"
|
||||||
|
},
|
||||||
|
"required_zones": {
|
||||||
|
"label": "Задължителни зони",
|
||||||
|
"description": "Зони в които обект трябва да влезе за да се запази моментна снимка."
|
||||||
|
},
|
||||||
|
"height": {
|
||||||
|
"label": "Височина на моментната снимка"
|
||||||
|
},
|
||||||
|
"retain": {
|
||||||
|
"default": {
|
||||||
|
"description": "Дни по подразбиране за задържане на моментните снимки."
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"semantic_search": {
|
||||||
|
"label": "Семантично търсене",
|
||||||
|
"triggers": {
|
||||||
|
"label": "Спусък",
|
||||||
|
"friendly_name": {
|
||||||
|
"label": "Удобно име"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -4,5 +4,148 @@
|
|||||||
"session_length": {
|
"session_length": {
|
||||||
"label": "Продължителност на сесията"
|
"label": "Продължителност на сесията"
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"version": {
|
||||||
|
"label": "Текуща версия на конфигурацията",
|
||||||
|
"description": "Версия на активната конфигурация. Помага за проследяване на промени от миграция или форматиране."
|
||||||
|
},
|
||||||
|
"safe_mode": {
|
||||||
|
"label": "Безопасен режим",
|
||||||
|
"description": "При избор, Frigate ще стартира в безопасен режим за отстраняване на неизправности."
|
||||||
|
},
|
||||||
|
"environment_vars": {
|
||||||
|
"label": "Променливи",
|
||||||
|
"description": "Параметри за стартиране на Frigate в Home Assistant OS. Non-HAOS потребителите трябва да използват Docker конфигурация."
|
||||||
|
},
|
||||||
|
"logger": {
|
||||||
|
"label": "Логове",
|
||||||
|
"default": {
|
||||||
|
"label": "Ниво на логовете"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"timestamp_style": {
|
||||||
|
"label": "Стил на времева щампа",
|
||||||
|
"format": {
|
||||||
|
"label": "Формат на времева щампа"
|
||||||
|
},
|
||||||
|
"color": {
|
||||||
|
"red": {
|
||||||
|
"label": "Червено",
|
||||||
|
"description": "Червен компонент (0-255) за времева щампа."
|
||||||
|
},
|
||||||
|
"green": {
|
||||||
|
"description": "Зелен компонент (0-255) за времева щампа.",
|
||||||
|
"label": "Зелено"
|
||||||
|
},
|
||||||
|
"blue": {
|
||||||
|
"description": "Син компонент (0-255) за времева щампа.",
|
||||||
|
"label": "Синьо"
|
||||||
|
},
|
||||||
|
"label": "Цвят на времева щампа",
|
||||||
|
"description": "RGB стойности за текста на времева щампа (всички стойности 0-255)."
|
||||||
|
},
|
||||||
|
"thickness": {
|
||||||
|
"description": "Дебелина на текстовата линия за времева щампа.",
|
||||||
|
"label": "Дебелина на времева щампа"
|
||||||
|
},
|
||||||
|
"effect": {
|
||||||
|
"label": "Ефект на времева щампа",
|
||||||
|
"description": "Визуален ефект на времева щампа (без, плътен, сянка)."
|
||||||
|
},
|
||||||
|
"position": {
|
||||||
|
"label": "Позиция на времева щампа",
|
||||||
|
"description": "Позиция за времева щампа на снимката (гл/гд/дл/дд)."
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"audio_transcription": {
|
||||||
|
"label": "Аудио транскрипция",
|
||||||
|
"enabled": {
|
||||||
|
"label": "Включи аудио транскрипцията"
|
||||||
|
},
|
||||||
|
"language": {
|
||||||
|
"label": "Език на транскрипция"
|
||||||
|
},
|
||||||
|
"device": {
|
||||||
|
"label": "Устройство за транскрипция"
|
||||||
|
},
|
||||||
|
"model_size": {
|
||||||
|
"label": "Големина на модела"
|
||||||
|
},
|
||||||
|
"live_enabled": {
|
||||||
|
"label": "Транскрипция на живо"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"snapshots": {
|
||||||
|
"quality": {
|
||||||
|
"label": "Качество на моментната снимка"
|
||||||
|
},
|
||||||
|
"required_zones": {
|
||||||
|
"label": "Задължителни зони",
|
||||||
|
"description": "Зони в които обект трябва да влезе за да се запази моментна снимка."
|
||||||
|
},
|
||||||
|
"height": {
|
||||||
|
"label": "Височина на моментната снимка"
|
||||||
|
},
|
||||||
|
"retain": {
|
||||||
|
"default": {
|
||||||
|
"description": "Дни по подразбиране за задържане на моментните снимки."
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"classification": {
|
||||||
|
"label": "Класификация на обекти",
|
||||||
|
"bird": {
|
||||||
|
"label": "Конфигурация за класификация на птици",
|
||||||
|
"enabled": {
|
||||||
|
"label": "Класификация на птици",
|
||||||
|
"description": "Клацификация на птици (Вкл./Изкл.)."
|
||||||
|
},
|
||||||
|
"threshold": {
|
||||||
|
"label": "Минимален резултат"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"custom": {
|
||||||
|
"label": "Потребителски класификационни модели",
|
||||||
|
"enabled": {
|
||||||
|
"label": "Включи модел",
|
||||||
|
"description": "Потребителски класификационнен модел (Вкл./Изкл.)."
|
||||||
|
},
|
||||||
|
"name": {
|
||||||
|
"label": "Име на модел"
|
||||||
|
},
|
||||||
|
"save_attempts": {
|
||||||
|
"label": "Опити за запазване"
|
||||||
|
},
|
||||||
|
"state_config": {
|
||||||
|
"motion": {
|
||||||
|
"label": "Изпълни при движение"
|
||||||
|
},
|
||||||
|
"interval": {
|
||||||
|
"label": "Интервал за класификация"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"semantic_search": {
|
||||||
|
"label": "Семантично търсене",
|
||||||
|
"enabled": {
|
||||||
|
"label": "Включи семантично търсене",
|
||||||
|
"description": "Семантично търсене (Вкл./Изкл.)."
|
||||||
|
},
|
||||||
|
"reindex": {
|
||||||
|
"label": "Реиндексирай при стартиране"
|
||||||
|
},
|
||||||
|
"model_size": {
|
||||||
|
"label": "Големина на модел"
|
||||||
|
},
|
||||||
|
"device": {
|
||||||
|
"label": "Устройство"
|
||||||
|
},
|
||||||
|
"triggers": {
|
||||||
|
"label": "Спусък",
|
||||||
|
"friendly_name": {
|
||||||
|
"label": "Удобно име"
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -24,5 +24,6 @@
|
|||||||
"hair_dryer": "Сешоар",
|
"hair_dryer": "Сешоар",
|
||||||
"toothbrush": "Четка за зъби",
|
"toothbrush": "Четка за зъби",
|
||||||
"scissors": "Ножица",
|
"scissors": "Ножица",
|
||||||
"clock": "Часовник"
|
"clock": "Часовник",
|
||||||
|
"airplane": "Самолет"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,5 +2,13 @@
|
|||||||
"documentTitle": "Модели за класификация - Frigate",
|
"documentTitle": "Модели за класификация - Frigate",
|
||||||
"description": {
|
"description": {
|
||||||
"invalidName": "Невалидно име. Имената могат да съдържат единствено: букви, числа, празни места, долни черти и тирета."
|
"invalidName": "Невалидно име. Имената могат да съдържат единствено: букви, числа, празни места, долни черти и тирета."
|
||||||
|
},
|
||||||
|
"details": {
|
||||||
|
"scoreInfo": "Резултатът представлява средната степен на увереност в класификацията при всички засечки на този обект."
|
||||||
|
},
|
||||||
|
"wizard": {
|
||||||
|
"step1": {
|
||||||
|
"classificationAttribute": "Атрибут"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -14,5 +14,6 @@
|
|||||||
"detections": "Засичания",
|
"detections": "Засичания",
|
||||||
"motion": {
|
"motion": {
|
||||||
"label": "Движение"
|
"label": "Движение"
|
||||||
}
|
},
|
||||||
|
"camera": "Камера"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,10 +5,69 @@
|
|||||||
"mismatch_one": "{{count}} недостъпен обект беше открит и включен в този елемент за преглед. Тези обекти или не са квалифицирани като предупреждение или откриване, или вече са били изчистени/изтрити.",
|
"mismatch_one": "{{count}} недостъпен обект беше открит и включен в този елемент за преглед. Тези обекти или не са квалифицирани като предупреждение или откриване, или вече са били изчистени/изтрити.",
|
||||||
"mismatch_other": "{{count}} недостъпни обекта бяха открити и включени в този елемент за преглед. Тези обекти или не са квалифицирани като предупреждение или откриване, или вече са били изчистени/изтрити."
|
"mismatch_other": "{{count}} недостъпни обекта бяха открити и включени в този елемент за преглед. Тези обекти или не са квалифицирани като предупреждение или откриване, или вече са били изчистени/изтрити."
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"editLPR": {
|
||||||
|
"title": "Редактиране на регистрационния номер"
|
||||||
|
},
|
||||||
|
"editAttributes": {
|
||||||
|
"title": "Редактиране на атрибутите"
|
||||||
|
},
|
||||||
|
"topScore": {
|
||||||
|
"label": "Най-силен резултат"
|
||||||
|
},
|
||||||
|
"estimatedSpeed": "Естимирана скорост",
|
||||||
|
"objects": "Обекти",
|
||||||
|
"camera": "Камера",
|
||||||
|
"zones": "Зони",
|
||||||
|
"timestamp": "Времева щампа",
|
||||||
|
"button": {
|
||||||
|
"findSimilar": "Намери подобни",
|
||||||
|
"regenerate": {
|
||||||
|
"title": "Регенерирай",
|
||||||
|
"label": "Регенерирай описанието на следените обекти"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"description": {
|
||||||
|
"label": "Описание",
|
||||||
|
"placeholder": "Описание на следените обекти"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"trackedObjectsCount_one": "{{count}} проследен обект ",
|
"trackedObjectsCount_one": "{{count}} проследен обект ",
|
||||||
"trackedObjectsCount_other": "{{count}} проследени обекта ",
|
"trackedObjectsCount_other": "{{count}} проследени обекта ",
|
||||||
"documentTitle": "Разгледай - Фригейт",
|
"documentTitle": "Разгледай - Фригейт",
|
||||||
"generativeAI": "Генеративен Изкъствен Интелект"
|
"generativeAI": "Генеративен Изкъствен Интелект",
|
||||||
|
"itemMenu": {
|
||||||
|
"downloadSnapshot": {
|
||||||
|
"aria": "Сваляне на моментна снимка/кадър"
|
||||||
|
},
|
||||||
|
"viewTrackingDetails": {
|
||||||
|
"label": "Виж детайли за следенето",
|
||||||
|
"aria": "Покажи детайли за следенето"
|
||||||
|
},
|
||||||
|
"findSimilar": {
|
||||||
|
"label": "Намери подобни"
|
||||||
|
},
|
||||||
|
"submitToPlus": {
|
||||||
|
"label": "Изпрати към Frigate+",
|
||||||
|
"aria": "Изпрати към Frigate Plus"
|
||||||
|
},
|
||||||
|
"viewInHistory": {
|
||||||
|
"label": "Виж в история",
|
||||||
|
"aria": "Виж в история"
|
||||||
|
},
|
||||||
|
"more": {
|
||||||
|
"aria": "Повече"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"dialog": {
|
||||||
|
"confirmDelete": {
|
||||||
|
"title": "Потвърди изтриване"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"aiAnalysis": {
|
||||||
|
"title": "AI Анализ"
|
||||||
|
},
|
||||||
|
"concerns": {
|
||||||
|
"label": "Притеснения"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -17,7 +17,58 @@
|
|||||||
},
|
},
|
||||||
"toast": {
|
"toast": {
|
||||||
"error": {
|
"error": {
|
||||||
"renameExportFailed": "Неуспешно преименуване на експорт: {{errorMessage}}"
|
"renameExportFailed": "Неуспешно преименуване на експорт: {{errorMessage}}",
|
||||||
|
"assignCaseFailed": "Неуспешно обновяване на възложен случай: {{errorMessage}}",
|
||||||
|
"caseSaveFailed": "Неуспешно запазен случай: {{errorMessage}}",
|
||||||
|
"caseDeleteFailed": "Неуспешно изтрит случай: {{errorMessage}}"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"deleteCase": {
|
||||||
|
"desc": "Сигурен ли сте, че искате да изтриете {{caseName}}?",
|
||||||
|
"label": "Изтрии случай"
|
||||||
|
},
|
||||||
|
"caseDialog": {
|
||||||
|
"nameLabel": "Име на случай",
|
||||||
|
"descriptionLabel": "Описание"
|
||||||
|
},
|
||||||
|
"toolbar": {
|
||||||
|
"editCase": "Редактирай случай",
|
||||||
|
"deleteCase": "Изтрии случай"
|
||||||
|
},
|
||||||
|
"caseCard": {
|
||||||
|
"emptyCase": "Все още няма експорти"
|
||||||
|
},
|
||||||
|
"jobCard": {
|
||||||
|
"defaultName": "{{camera}} експортиране",
|
||||||
|
"queued": "На опашката",
|
||||||
|
"running": "В ход",
|
||||||
|
"preparing": "Подготвяне",
|
||||||
|
"copying": "Копиране",
|
||||||
|
"encoding": "Енкодиране",
|
||||||
|
"encodingRetry": "Енкодиране (повторно)",
|
||||||
|
"finalizing": "Финализиране"
|
||||||
|
},
|
||||||
|
"caseView": {
|
||||||
|
"noDescription": "Без описание",
|
||||||
|
"createdAt": "Създаден {{value}}",
|
||||||
|
"exportCount_one": "1 експорт",
|
||||||
|
"exportCount_other": "{{count}} експорти",
|
||||||
|
"cameraCount_one": "1 камера",
|
||||||
|
"cameraCount_other": "{{count}} камери",
|
||||||
|
"showMore": "Покажи повече",
|
||||||
|
"showLess": "Покажи по-малко"
|
||||||
|
},
|
||||||
|
"bulkActions": {
|
||||||
|
"delete": "Изтрии",
|
||||||
|
"deleteNow": "Изтрии сега"
|
||||||
|
},
|
||||||
|
"bulkDelete": {
|
||||||
|
"title": "Изтрии експорти",
|
||||||
|
"desc_one": "Сигурни ли сте , че искате да изтриете {{count}} експорта?"
|
||||||
|
},
|
||||||
|
"bulkToast": {
|
||||||
|
"success": {
|
||||||
|
"delete": "Успешно изтрити експорти"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -15,5 +15,8 @@
|
|||||||
"addFace": "Добавете нова колекция във библиотеката за лица при качването на първата ви снимка.",
|
"addFace": "Добавете нова колекция във библиотеката за лица при качването на първата ви снимка.",
|
||||||
"placeholder": "Напишете име за тази колекция",
|
"placeholder": "Напишете име за тази колекция",
|
||||||
"invalidName": "Невалидно име. Имената могат да съдържат единствено: букви, числа, празни места, долни черти и тирета."
|
"invalidName": "Невалидно име. Имената могат да съдържат единствено: букви, числа, празни места, долни черти и тирета."
|
||||||
|
},
|
||||||
|
"details": {
|
||||||
|
"timestamp": "Времева щампа"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,7 +16,8 @@
|
|||||||
"move": {
|
"move": {
|
||||||
"clickMove": {
|
"clickMove": {
|
||||||
"enable": "Включи кликване за преместване",
|
"enable": "Включи кликване за преместване",
|
||||||
"disable": "Изключи кликване за преместване"
|
"disable": "Изключи кликване за преместване",
|
||||||
|
"label": "Кликнете в центъра на кадъра за да центрирате камерата"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -26,7 +27,8 @@
|
|||||||
},
|
},
|
||||||
"recording": {
|
"recording": {
|
||||||
"enable": "Включи запис",
|
"enable": "Включи запис",
|
||||||
"disable": "Изключи запис"
|
"disable": "Изключи запис",
|
||||||
|
"disabledInConfig": "\"Записване\" трябва първо да се вкючи през настройките за тази камера."
|
||||||
},
|
},
|
||||||
"snapshots": {
|
"snapshots": {
|
||||||
"enable": "Включи моментни снимки",
|
"enable": "Включи моментни снимки",
|
||||||
@@ -38,7 +40,9 @@
|
|||||||
},
|
},
|
||||||
"camera": {
|
"camera": {
|
||||||
"enable": "Включи камера",
|
"enable": "Включи камера",
|
||||||
"disable": "Изключи камера"
|
"disable": "Изключи камера",
|
||||||
|
"turnOn": "Включване на камера",
|
||||||
|
"turnOff": "Изключване на камера"
|
||||||
},
|
},
|
||||||
"detect": {
|
"detect": {
|
||||||
"enable": "Включи разпознаване",
|
"enable": "Включи разпознаване",
|
||||||
@@ -65,5 +69,16 @@
|
|||||||
"cameraEnabled": "Камерата е включена"
|
"cameraEnabled": "Камерата е включена"
|
||||||
},
|
},
|
||||||
"documentTitle": "Наживо - Frigate",
|
"documentTitle": "Наживо - Frigate",
|
||||||
"documentTitle.withCamera": "{{camera}} - На живо - Фригейт"
|
"documentTitle.withCamera": "{{camera}} - На живо - Фригейт",
|
||||||
|
"noCameras": {
|
||||||
|
"default": {
|
||||||
|
"buttonText": "Добави камера"
|
||||||
|
},
|
||||||
|
"group": {
|
||||||
|
"title": "Няма камери в групата",
|
||||||
|
"description": "Тази група няма добавени или включени камери.",
|
||||||
|
"buttonText": "Управление на групите"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"lowBandwidthMode": "Режим ограничена/бавна връзка"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -24,6 +24,9 @@
|
|||||||
},
|
},
|
||||||
"state": {
|
"state": {
|
||||||
"submitted": "Enviat"
|
"submitted": "Enviat"
|
||||||
|
},
|
||||||
|
"toast": {
|
||||||
|
"error": "No s'ha pogut enviar a Frigate+. Si us plau, comproveu la vostra connexió de xarxa i torneu-ho a provar."
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -107,7 +110,14 @@
|
|||||||
"queueingButton": "S'estan posant a la cua les exportacions...",
|
"queueingButton": "S'estan posant a la cua les exportacions...",
|
||||||
"exportButton_one": "Exporta 1 càmera",
|
"exportButton_one": "Exporta 1 càmera",
|
||||||
"exportButton_many": "Exporta {{count}} càmeres",
|
"exportButton_many": "Exporta {{count}} càmeres",
|
||||||
"exportButton_other": "Exporta {{count}} càmeres"
|
"exportButton_other": "Exporta {{count}} càmeres",
|
||||||
|
"searchOrSelectGroup": "Cerca, o selecciona un grup de càmeres...",
|
||||||
|
"selectAll": "Selecciona totes les càmeres",
|
||||||
|
"clearSelection": "Neteja la selecció",
|
||||||
|
"selectWithActivity": "Càmeres amb objectes rastrejats",
|
||||||
|
"selectGroup": "Selecciona un grup",
|
||||||
|
"noMatchingCameras": "No hi ha càmeres que coincideixin amb la cerca",
|
||||||
|
"selectedCount": "{{selected}} / {{total}} seleccionats"
|
||||||
},
|
},
|
||||||
"multi": {
|
"multi": {
|
||||||
"title_one": "Exporta {{count}} ressenyes",
|
"title_one": "Exporta {{count}} ressenyes",
|
||||||
|
|||||||
@@ -29,7 +29,7 @@
|
|||||||
},
|
},
|
||||||
"listen": {
|
"listen": {
|
||||||
"label": "Tipus d'escoltes",
|
"label": "Tipus d'escoltes",
|
||||||
"description": "Llista de tipus d'esdeveniment d'àudio a detectar (per exemple: escorça, focarmalarma, crit, parla, crida)."
|
"description": "Llista de tipus d'esdeveniment d'àudio a detectar (per exemple: escorça, focarmalarma, parla, crida)."
|
||||||
},
|
},
|
||||||
"filters": {
|
"filters": {
|
||||||
"label": "Filtres d'àudio",
|
"label": "Filtres d'àudio",
|
||||||
@@ -152,11 +152,11 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"ffmpeg": {
|
"ffmpeg": {
|
||||||
"label": "FFmpeg",
|
"label": "Fluxos (FFmpeg)",
|
||||||
"description": "Paràmetres del FFmpeg que inclouen la ruta dels binaris, args, opcions de hwaccel i args de sortida per rol.",
|
"description": "Les entrades de flux de càmera i les opcions del FFmpeg, incloent-hi el camí binari, els arguments, l'hwaccel i els arguments de sortida per rol.",
|
||||||
"path": {
|
"path": {
|
||||||
"label": "Ruta FFmpeg",
|
"label": "Ruta FFmpeg",
|
||||||
"description": "Ruta al binari FFmpeg a usar o un àlies de versió («5.0» o «7.0»)."
|
"description": "Ruta al binari FFmpeg a usar o un àlies de versió («7.0» o «8.0»)."
|
||||||
},
|
},
|
||||||
"global_args": {
|
"global_args": {
|
||||||
"label": "Arguments globals del FFmpeg",
|
"label": "Arguments globals del FFmpeg",
|
||||||
|
|||||||
@@ -7,7 +7,7 @@
|
|||||||
"description": "Paràmetres del FFmpeg que inclouen la ruta dels binaris, args, opcions de hwaccel i args de sortida per rol.",
|
"description": "Paràmetres del FFmpeg que inclouen la ruta dels binaris, args, opcions de hwaccel i args de sortida per rol.",
|
||||||
"path": {
|
"path": {
|
||||||
"label": "Ruta FFmpeg",
|
"label": "Ruta FFmpeg",
|
||||||
"description": "Ruta al binari FFmpeg a usar o un àlies de versió («5.0» o «7.0»)."
|
"description": "Ruta al binari FFmpeg a usar o un àlies de versió («7.0» o «8.0»)."
|
||||||
},
|
},
|
||||||
"global_args": {
|
"global_args": {
|
||||||
"label": "Arguments globals del FFmpeg",
|
"label": "Arguments globals del FFmpeg",
|
||||||
@@ -2018,7 +2018,7 @@
|
|||||||
},
|
},
|
||||||
"listen": {
|
"listen": {
|
||||||
"label": "Tipus d'escoltes",
|
"label": "Tipus d'escoltes",
|
||||||
"description": "Llista de tipus d'esdeveniment d'àudio a detectar (per exemple: escorça, focarmalarma, crit, parla, crida)."
|
"description": "Llista de tipus d'esdeveniment d'àudio a detectar (per exemple: escorça, focarmalarma, parla, crida)."
|
||||||
},
|
},
|
||||||
"filters": {
|
"filters": {
|
||||||
"label": "Filtres d'àudio",
|
"label": "Filtres d'àudio",
|
||||||
|
|||||||
@@ -68,7 +68,7 @@
|
|||||||
"integrationObjectClassification": "Classificació de l'objecte",
|
"integrationObjectClassification": "Classificació de l'objecte",
|
||||||
"integrationAudioTranscription": "Transcripció d'àudio",
|
"integrationAudioTranscription": "Transcripció d'àudio",
|
||||||
"cameraDetect": "Detecció d'objectes",
|
"cameraDetect": "Detecció d'objectes",
|
||||||
"cameraFfmpeg": "FFmpeg",
|
"cameraFfmpeg": "Fluxos (FFmpeg)",
|
||||||
"cameraRecording": "Enregistrament",
|
"cameraRecording": "Enregistrament",
|
||||||
"cameraSnapshots": "Instantànies",
|
"cameraSnapshots": "Instantànies",
|
||||||
"cameraMotion": "Detecció de moviment",
|
"cameraMotion": "Detecció de moviment",
|
||||||
@@ -1689,7 +1689,17 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"cameraInputs": {
|
"cameraInputs": {
|
||||||
"itemTitle": "Flux {{index}}"
|
"itemTitle": "Flux {{index}}",
|
||||||
|
"sourceMode": {
|
||||||
|
"restream": "Restream (go2rtc)",
|
||||||
|
"manual": "Camí d'entrada manual",
|
||||||
|
"go2rtcStreamLabel": "flux go2rtc",
|
||||||
|
"go2rtcStreamPlaceholder": "Selecciona un flux go2rtc",
|
||||||
|
"noGo2rtcStreams": "No s'ha configurat cap flux go2rtc",
|
||||||
|
"go2rtcStreamSearch": "Cerca fluxos...",
|
||||||
|
"availableStreams": "Fluxos disponibles",
|
||||||
|
"noMatchingStreams": "No hi ha fluxos coincidents"
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"restartRequiredField": "Reinicia requerit",
|
"restartRequiredField": "Reinicia requerit",
|
||||||
"restartRequiredFooter": "S'ha canviat la configuració - es requereix reiniciar",
|
"restartRequiredFooter": "S'ha canviat la configuració - es requereix reiniciar",
|
||||||
@@ -2084,6 +2094,13 @@
|
|||||||
},
|
},
|
||||||
"onvif": {
|
"onvif": {
|
||||||
"autotrackingNoZones": "Autotraquejar requereix al menys una zona. Defineix una zona per aquesta cámera a Mascares/Zones, després usa'l com a requerit a la part inferior."
|
"autotrackingNoZones": "Autotraquejar requereix al menys una zona. Defineix una zona per aquesta cámera a Mascares/Zones, després usa'l com a requerit a la part inferior."
|
||||||
|
},
|
||||||
|
"ffmpeg": {
|
||||||
|
"hwaccelManualNotRecommended": "No es recomanen arguments manuals d'acceleració de maquinari. Tret que existeixi un requisit específic, seleccioneu el predefinit que coincideixi amb el vostre maquinari."
|
||||||
|
},
|
||||||
|
"model": {
|
||||||
|
"optimizedFor320": "Frigate està optimitzada per a un model 320x320, que és la millor opció per a la majoria de configuracions. Un model 640x640 és més lent i només ajuda en escenaris específics.",
|
||||||
|
"inputDimensionsNotDetectResolution": "L'amplada i l'alçada del model d'entrada són les dimensions d'entrada del model de detecció d'objectes, no la resolució de detecció de la càmera. Haurien de coincidir amb les dimensions del model que esteu utilitzant - típicament una mida quadrada com 320x320 o 640x640."
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"modelSize": {
|
"modelSize": {
|
||||||
|
|||||||
@@ -191,7 +191,22 @@
|
|||||||
},
|
},
|
||||||
"audio": "Àudio:",
|
"audio": "Àudio:",
|
||||||
"cameraProbeInfo": "Informació del sondeig de la càmera {{camera}}",
|
"cameraProbeInfo": "Informació del sondeig de la càmera {{camera}}",
|
||||||
"streamDataFromFFPROBE": "Les dades de la transmissió són obtingudes mitjançant <code>ffprobe</code>."
|
"streamDataFromFFPROBE": "Les dades de la transmissió són obtingudes mitjançant <code>ffprobe</code>.",
|
||||||
|
"keyframes": {
|
||||||
|
"title": "Anàlisi de fotogrames clau",
|
||||||
|
"analyzing": "S'estan analitzant els fotogrames clau... queden {{seconds}} segons",
|
||||||
|
"stillAnalyzing": "Encara s'estan analitzant els fotogrames clau...",
|
||||||
|
"recordStream": "Registre de flux:",
|
||||||
|
"keyframeCount": "Fotogrames clau observats:",
|
||||||
|
"observedDuration": "Durada observada:",
|
||||||
|
"gap": "Espai de fotogrames clau (mín / avg / max):",
|
||||||
|
"segmentLength": "Longitud del segment d'enregistrament:",
|
||||||
|
"ok": "Fotogrames clau cada ,{{seconds}}s, bons per enregistrar i reproduir.",
|
||||||
|
"warning": "Els fotogrames clau dispersos o variables (espai més llarg .{{seconds}}s), probablement un còdec intel·ligent (H.264+/H.265+), això no és recomanable.",
|
||||||
|
"error": "El buit dels fotogrames clau ( the{{seconds}}s) excedeix la longitud del segment d'enregistrament ({{segmentTime}}s). Alguns segments poden no tenir un fotograma clau, el qual trenca la reproducció. Desactiva el còdec intel·ligent/+ a la càmera o escurça el seu interval de fotogrames clau.",
|
||||||
|
"unknown": "No s'ha pogut determinar l'espaiat dels fotogrames clau.",
|
||||||
|
"recordDisabled": "L'enregistrament està desactivat per a aquesta càmera."
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"title": "Càmeres",
|
"title": "Càmeres",
|
||||||
"overview": "Visió general",
|
"overview": "Visió general",
|
||||||
|
|||||||
@@ -180,7 +180,7 @@
|
|||||||
"rats": "Rotter",
|
"rats": "Rotter",
|
||||||
"patter": "Dråbelyd",
|
"patter": "Dråbelyd",
|
||||||
"insect": "Insekt",
|
"insect": "Insekt",
|
||||||
"cricket": "Cricket",
|
"cricket": "Fårekylling",
|
||||||
"guitar": "Guitar",
|
"guitar": "Guitar",
|
||||||
"electric_guitar": "Elektrisk Guitar",
|
"electric_guitar": "Elektrisk Guitar",
|
||||||
"bass_guitar": "Basguitar",
|
"bass_guitar": "Basguitar",
|
||||||
@@ -195,5 +195,16 @@
|
|||||||
"rimshot": "Kantslag",
|
"rimshot": "Kantslag",
|
||||||
"drum_roll": "Trommehvirvel",
|
"drum_roll": "Trommehvirvel",
|
||||||
"bass_drum": "Stortromme",
|
"bass_drum": "Stortromme",
|
||||||
"techno": "Techno"
|
"techno": "Techno",
|
||||||
|
"mosquito": "Myg",
|
||||||
|
"fly": "Flue",
|
||||||
|
"buzz": "Summen",
|
||||||
|
"frog": "Frø",
|
||||||
|
"croak": "Kvæk",
|
||||||
|
"snake": "Slange",
|
||||||
|
"rattle": "Klapren",
|
||||||
|
"whale_vocalization": "Hvallyde",
|
||||||
|
"music": "Musik",
|
||||||
|
"musical_instrument": "Musikinstrument",
|
||||||
|
"plucked_string_instrument": "Strengeinstrument"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -24,7 +24,7 @@
|
|||||||
"am": "am",
|
"am": "am",
|
||||||
"year_one": "{{time}} år",
|
"year_one": "{{time}} år",
|
||||||
"year_other": "{{time}} år",
|
"year_other": "{{time}} år",
|
||||||
"mo": "{{time}}må",
|
"mo": "{{time}}md.",
|
||||||
"month_one": "{{time}} måned",
|
"month_one": "{{time}} måned",
|
||||||
"month_other": "{{time}} måneder",
|
"month_other": "{{time}} måneder",
|
||||||
"d": "{{time}}d",
|
"d": "{{time}}d",
|
||||||
@@ -121,18 +121,18 @@
|
|||||||
"back": "Tilbage",
|
"back": "Tilbage",
|
||||||
"history": "Historik",
|
"history": "Historik",
|
||||||
"fullscreen": "Fuldskærm",
|
"fullscreen": "Fuldskærm",
|
||||||
"exitFullscreen": "Afslut Fludskærm",
|
"exitFullscreen": "Afslut Fuldskærm",
|
||||||
"pictureInPicture": "Billede i Billede",
|
"pictureInPicture": "Billede i billede",
|
||||||
"twoWayTalk": "2 vejs samtale",
|
"twoWayTalk": "Samtale",
|
||||||
"cameraAudio": "Kamera Lyd",
|
"cameraAudio": "Kameralyd",
|
||||||
"on": "ON",
|
"on": "Til",
|
||||||
"off": "OFF",
|
"off": "Fra",
|
||||||
"edit": "Rediger",
|
"edit": "Rediger",
|
||||||
"copyCoordinates": "Kopier koordinater",
|
"copyCoordinates": "Kopier koordinater",
|
||||||
"delete": "Slet",
|
"delete": "Slet",
|
||||||
"yes": "Ja",
|
"yes": "Ja",
|
||||||
"no": "Nej",
|
"no": "Nej",
|
||||||
"download": "Download",
|
"download": "Hent",
|
||||||
"info": "Info",
|
"info": "Info",
|
||||||
"suspended": "Sat på pause",
|
"suspended": "Sat på pause",
|
||||||
"unsuspended": "Genoptag",
|
"unsuspended": "Genoptag",
|
||||||
@@ -141,7 +141,19 @@
|
|||||||
"export": "Eksporter",
|
"export": "Eksporter",
|
||||||
"deleteNow": "Slet nu",
|
"deleteNow": "Slet nu",
|
||||||
"next": "Næste",
|
"next": "Næste",
|
||||||
"continue": "Fortsæt"
|
"continue": "Fortsæt",
|
||||||
|
"add": "Tilføj",
|
||||||
|
"applying": "Anvender…",
|
||||||
|
"undo": "Annuler",
|
||||||
|
"copiedToClipboard": "Kopieret til udklipsholder",
|
||||||
|
"modified": "Ændret",
|
||||||
|
"overridden": "Overskrevet",
|
||||||
|
"resetToGlobal": "Gendan til global",
|
||||||
|
"resetToDefault": "Gendan standard",
|
||||||
|
"saveAll": "Gem alle",
|
||||||
|
"savingAll": "Gemmer alle…",
|
||||||
|
"undoAll": "Fortryd alle",
|
||||||
|
"retry": "Prøv igen"
|
||||||
},
|
},
|
||||||
"menu": {
|
"menu": {
|
||||||
"system": "System",
|
"system": "System",
|
||||||
@@ -194,7 +206,9 @@
|
|||||||
"gl": "Galego (Galisisk)",
|
"gl": "Galego (Galisisk)",
|
||||||
"id": "Bahasa Indonesia (Indonesisk)",
|
"id": "Bahasa Indonesia (Indonesisk)",
|
||||||
"ur": "اردو (Urdu)",
|
"ur": "اردو (Urdu)",
|
||||||
"hr": "Hrvatski (Kroatisk)"
|
"hr": "Hrvatski (Kroatisk)",
|
||||||
|
"zhHant": "繁體中文 (Traditionel Kinesisk)",
|
||||||
|
"bs": "Bosanski (Bosnisk)"
|
||||||
},
|
},
|
||||||
"appearance": "Udseende",
|
"appearance": "Udseende",
|
||||||
"darkMode": {
|
"darkMode": {
|
||||||
@@ -243,7 +257,11 @@
|
|||||||
"logout": "Log ud",
|
"logout": "Log ud",
|
||||||
"setPassword": "Vælg kodeord"
|
"setPassword": "Vælg kodeord"
|
||||||
},
|
},
|
||||||
"classification": "Kategorisering"
|
"classification": "Kategorisering",
|
||||||
|
"profiles": "Profiler",
|
||||||
|
"actions": "Handlinger",
|
||||||
|
"features": "Funktioner",
|
||||||
|
"chat": "Chat"
|
||||||
},
|
},
|
||||||
"toast": {
|
"toast": {
|
||||||
"copyUrlToClipboard": "Kopieret URL til udklipsholder.",
|
"copyUrlToClipboard": "Kopieret URL til udklipsholder.",
|
||||||
@@ -252,13 +270,14 @@
|
|||||||
"error": {
|
"error": {
|
||||||
"title": "Ændringer kunne ikke gemmes: {{errorMessage}}",
|
"title": "Ændringer kunne ikke gemmes: {{errorMessage}}",
|
||||||
"noMessage": "Kunne ikke gemme konfigurationsændringer"
|
"noMessage": "Kunne ikke gemme konfigurationsændringer"
|
||||||
}
|
},
|
||||||
|
"success": "Gemte ændringerne i konfigurationen."
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"role": {
|
"role": {
|
||||||
"title": "Rolle",
|
"title": "Rolle",
|
||||||
"admin": "Admin",
|
"admin": "Admin",
|
||||||
"viewer": "Viewer",
|
"viewer": "Seer",
|
||||||
"desc": "Admins har fuld adgang til Frigate UI. Viewers er begrænset til at se kameraer, gennemse items, og historik i UI."
|
"desc": "Admins har fuld adgang til Frigate UI. Viewers er begrænset til at se kameraer, gennemse items, og historik i UI."
|
||||||
},
|
},
|
||||||
"pagination": {
|
"pagination": {
|
||||||
@@ -296,5 +315,10 @@
|
|||||||
},
|
},
|
||||||
"information": {
|
"information": {
|
||||||
"pixels": "{{area}}px"
|
"pixels": "{{area}}px"
|
||||||
|
},
|
||||||
|
"no_items": "Intet fundet",
|
||||||
|
"validation_errors": "Valideringsfejl",
|
||||||
|
"credentialField": {
|
||||||
|
"savedPlaceholder": "Gemt - efterlad blank for at bevare nuværende"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -31,7 +31,7 @@
|
|||||||
"setting": {
|
"setting": {
|
||||||
"label": "Kamera Streaming Indstillinger",
|
"label": "Kamera Streaming Indstillinger",
|
||||||
"title": "{{cameraName}} Streaming Indstillinger",
|
"title": "{{cameraName}} Streaming Indstillinger",
|
||||||
"desc": "Skift de live streaming muligheder for denne kameragruppes dashboard. <em> Disse indstillinger er enheds- og browserspecifikke.</em>",
|
"desc": "Skift indstillingerne for direkte visning af denne kameragruppes dashboard. <em> Disse indstillinger er enheds- og browserspecifikke.</em>",
|
||||||
"audioIsAvailable": "Lyd er tilgængelig for denne stream",
|
"audioIsAvailable": "Lyd er tilgængelig for denne stream",
|
||||||
"audioIsUnavailable": "Lyd er ikke tilgængelig for denne strøm",
|
"audioIsUnavailable": "Lyd er ikke tilgængelig for denne strøm",
|
||||||
"audio": {
|
"audio": {
|
||||||
@@ -67,7 +67,10 @@
|
|||||||
"desc": "Aktivér kun denne mulighed, hvis kameraets live stream viser farve artefakter og har en diagonal linje på højre side af billedet."
|
"desc": "Aktivér kun denne mulighed, hvis kameraets live stream viser farve artefakter og har en diagonal linje på højre side af billedet."
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
},
|
||||||
|
"showAll": "Vis alle kameragrupper",
|
||||||
|
"showLess": "Vis mindre",
|
||||||
|
"editGroups": "Rediger kameragrupper"
|
||||||
},
|
},
|
||||||
"debug": {
|
"debug": {
|
||||||
"options": {
|
"options": {
|
||||||
@@ -81,6 +84,7 @@
|
|||||||
"zones": "Zoner",
|
"zones": "Zoner",
|
||||||
"mask": "Maske",
|
"mask": "Maske",
|
||||||
"motion": "Bevægelse",
|
"motion": "Bevægelse",
|
||||||
"regions": "Regioner"
|
"regions": "Regioner",
|
||||||
|
"paths": "Stier"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"restart": {
|
"restart": {
|
||||||
"title": "Er du sikker på at du vil genstarte Frigate?",
|
"title": "Er du sikker på, at du vil genstarte Frigate?",
|
||||||
"button": "Genstart",
|
"button": "Genstart",
|
||||||
"restarting": {
|
"restarting": {
|
||||||
"title": "Frigate genstarter",
|
"title": "Frigate genstarter",
|
||||||
@@ -21,8 +21,46 @@
|
|||||||
"ask_a": "Er dette objekt et <code>{{label}}</code>?",
|
"ask_a": "Er dette objekt et <code>{{label}}</code>?",
|
||||||
"ask_an": "Er dette objekt en <code>{{label}}</code>?",
|
"ask_an": "Er dette objekt en <code>{{label}}</code>?",
|
||||||
"ask_full": "Er dette objekt en <code>{{untranslatedLabel}}</code> ({{translatedLabel}})?"
|
"ask_full": "Er dette objekt en <code>{{untranslatedLabel}}</code> ({{translatedLabel}})?"
|
||||||
|
},
|
||||||
|
"state": {
|
||||||
|
"submitted": "Indsendt"
|
||||||
|
},
|
||||||
|
"toast": {
|
||||||
|
"error": "Fejl under indsendelse til Frigate+. Kontroller venligst din netværksforbindelse og prøv igen."
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"video": {
|
||||||
|
"viewInHistory": "Se i historik"
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"export": {
|
||||||
|
"time": {
|
||||||
|
"fromTimeline": "Vælg fra tidslinje",
|
||||||
|
"lastHour_one": "Sidste time",
|
||||||
|
"lastHour_other": "Sidste {{count}} timer",
|
||||||
|
"custom": "Tidsinterval",
|
||||||
|
"start": {
|
||||||
|
"title": "Starttidspunkt",
|
||||||
|
"label": "Vælg starttidspunkt"
|
||||||
|
},
|
||||||
|
"end": {
|
||||||
|
"title": "Sluttidspunkt",
|
||||||
|
"label": "Vælg sluttidspunkt"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"name": {
|
||||||
|
"placeholder": "Navngiv eksport"
|
||||||
|
},
|
||||||
|
"case": {
|
||||||
|
"newCaseOption": "Opret ny sag",
|
||||||
|
"newCaseNamePlaceholder": "Nyt sagsnavn",
|
||||||
|
"newCaseDescriptionPlaceholder": "Sagsbeskrivelse",
|
||||||
|
"label": "Sag",
|
||||||
|
"nonAdminHelp": "En ny sag oprettes til disse eksporter.",
|
||||||
|
"placeholder": "Vælg en sag"
|
||||||
|
},
|
||||||
|
"select": "Vælg",
|
||||||
|
"export": "Eksporter"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -14,6 +14,7 @@
|
|||||||
"notifications": "Notifikations indstillinger - Frigate"
|
"notifications": "Notifikations indstillinger - Frigate"
|
||||||
},
|
},
|
||||||
"menu": {
|
"menu": {
|
||||||
"ui": "Brugergrænseflade"
|
"ui": "Brugergrænseflade",
|
||||||
|
"profiles": "Profiler"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -23,7 +23,7 @@
|
|||||||
"toothbrush": "Zahnbürste",
|
"toothbrush": "Zahnbürste",
|
||||||
"bicycle": "Fahrrad",
|
"bicycle": "Fahrrad",
|
||||||
"door": "Tür",
|
"door": "Tür",
|
||||||
"keyboard": "Klaviatur",
|
"keyboard": "Klavier",
|
||||||
"bus": "Bus",
|
"bus": "Bus",
|
||||||
"horse": "Pferd",
|
"horse": "Pferd",
|
||||||
"cat": "Katze",
|
"cat": "Katze",
|
||||||
@@ -123,7 +123,7 @@
|
|||||||
"chicken": "Huhn",
|
"chicken": "Huhn",
|
||||||
"sitar": "Sitar",
|
"sitar": "Sitar",
|
||||||
"ukulele": "Ukulele",
|
"ukulele": "Ukulele",
|
||||||
"tapping": "Klopfen",
|
"tapping": "Tippen",
|
||||||
"flapping_wings": "Flügelschlagen",
|
"flapping_wings": "Flügelschlagen",
|
||||||
"strum": "Herumklimpern",
|
"strum": "Herumklimpern",
|
||||||
"electronic_organ": "Elektrische Orgel",
|
"electronic_organ": "Elektrische Orgel",
|
||||||
|
|||||||
@@ -42,7 +42,7 @@
|
|||||||
"untilRestart": "Bis zum Neustart",
|
"untilRestart": "Bis zum Neustart",
|
||||||
"justNow": "Gerade",
|
"justNow": "Gerade",
|
||||||
"pm": "nachmittags",
|
"pm": "nachmittags",
|
||||||
"mo": "{{time}} Mon",
|
"mo": "{{time}} Mon.",
|
||||||
"formattedTimestamp": {
|
"formattedTimestamp": {
|
||||||
"12hour": "d. MMM, hh:mm:ss aaa",
|
"12hour": "d. MMM, hh:mm:ss aaa",
|
||||||
"24hour": "dd. MMM, hh:mm:ss aaa"
|
"24hour": "dd. MMM, hh:mm:ss aaa"
|
||||||
@@ -193,7 +193,7 @@
|
|||||||
"gl": "Galego (Galicisch)",
|
"gl": "Galego (Galicisch)",
|
||||||
"id": "Bahasa Indonesia (Indonesisch)",
|
"id": "Bahasa Indonesia (Indonesisch)",
|
||||||
"hr": "Hrvatski (Kroatisch)",
|
"hr": "Hrvatski (Kroatisch)",
|
||||||
"bs": "Bosnisch",
|
"bs": "Bosanski (Bosnisch)",
|
||||||
"zhHant": "Traditional Chinese"
|
"zhHant": "Traditional Chinese"
|
||||||
},
|
},
|
||||||
"appearance": "Erscheinung",
|
"appearance": "Erscheinung",
|
||||||
|
|||||||
@@ -68,7 +68,10 @@
|
|||||||
},
|
},
|
||||||
"label": "Kamera Gruppen",
|
"label": "Kamera Gruppen",
|
||||||
"edit": "Kameragruppe bearbeiten",
|
"edit": "Kameragruppe bearbeiten",
|
||||||
"success": "Kameragruppe {{name}} wurde gespeichert."
|
"success": "Kameragruppe {{name}} wurde gespeichert.",
|
||||||
|
"showAll": "Alle Kameragruppen anzeigen",
|
||||||
|
"showLess": "Weniger anzeigen",
|
||||||
|
"editGroups": "Kameragruppen bearbeiten"
|
||||||
},
|
},
|
||||||
"debug": {
|
"debug": {
|
||||||
"options": {
|
"options": {
|
||||||
|
|||||||
@@ -105,14 +105,21 @@
|
|||||||
"cameraSelection": "Kameras",
|
"cameraSelection": "Kameras",
|
||||||
"cameraSelectionHelp": "Kameras, die in diesem Zeitbereich Objekte verfolgen, sind vorausgewählt",
|
"cameraSelectionHelp": "Kameras, die in diesem Zeitbereich Objekte verfolgen, sind vorausgewählt",
|
||||||
"checkingActivity": "Kameraaktivität wird überprüft...",
|
"checkingActivity": "Kameraaktivität wird überprüft...",
|
||||||
"noCameras": "keine kamaeras verfügbar",
|
"noCameras": "Keine Kameras verfügbar",
|
||||||
"detectionCount_one": "1 verfolgtes Objekt",
|
"detectionCount_one": "1 verfolgtes Objekt",
|
||||||
"detectionCount_other": "{{count}} verfolgtesObjekte",
|
"detectionCount_other": "{{count}} verfolgte Objekte",
|
||||||
"nameLabel": "Export Name",
|
"nameLabel": "Exportname",
|
||||||
"namePlaceholder": "Optionaler Basisname für diese Exporte",
|
"namePlaceholder": "Optionaler Basisname für diese Exporte",
|
||||||
"queueingButton": "Exporte werden in die Warteschlange gestellt...",
|
"queueingButton": "Exporte werden in die Warteschlange gestellt...",
|
||||||
"exportButton_one": "Export 1 Kamera",
|
"exportButton_one": "Export 1 Kamera",
|
||||||
"exportButton_other": "xport {{count}} Kameras"
|
"exportButton_other": "xport {{count}} Kameras",
|
||||||
|
"searchOrSelectGroup": "Suchen, oder Kameragruppe auswählen...",
|
||||||
|
"selectAll": "Alle Kameras auswählen",
|
||||||
|
"clearSelection": "Auswahl löschen",
|
||||||
|
"selectWithActivity": "Kameras mit verfolgten Objekten",
|
||||||
|
"selectGroup": "Gruppe auswählen",
|
||||||
|
"noMatchingCameras": "Der Suche entsprechen keine Kameras",
|
||||||
|
"selectedCount": "{{selected}} / {{total}} ausgewählt"
|
||||||
},
|
},
|
||||||
"multi": {
|
"multi": {
|
||||||
"title_one": "1 Bewertung exportieren",
|
"title_one": "1 Bewertung exportieren",
|
||||||
|
|||||||
@@ -20,7 +20,7 @@
|
|||||||
"description": "Mindest-RMS-Lautstärkeschwelle, die für die Audioerkennung erforderlich ist; niedrigere Werte erhöhen die Empfindlichkeit (z. B. 200 hoch, 500 mittel, 1000 niedrig)."
|
"description": "Mindest-RMS-Lautstärkeschwelle, die für die Audioerkennung erforderlich ist; niedrigere Werte erhöhen die Empfindlichkeit (z. B. 200 hoch, 500 mittel, 1000 niedrig)."
|
||||||
},
|
},
|
||||||
"listen": {
|
"listen": {
|
||||||
"description": "Liste der zu erkennenden Audioereignisse (z.B: bellen, Feueralarm, schreien, sprechen, rufen).",
|
"description": "Liste der zu erkennenden Audioereignisse (z.B: bellen, Feueralarm, Gespräche, Rufen).",
|
||||||
"label": "Hörtypen"
|
"label": "Hörtypen"
|
||||||
},
|
},
|
||||||
"filters": {
|
"filters": {
|
||||||
@@ -204,11 +204,11 @@
|
|||||||
"description": "Einstellungen zum Aktivieren und Verwalten von Benachrichtigungen für diese Kamera."
|
"description": "Einstellungen zum Aktivieren und Verwalten von Benachrichtigungen für diese Kamera."
|
||||||
},
|
},
|
||||||
"ffmpeg": {
|
"ffmpeg": {
|
||||||
"label": "FFmpeg",
|
"label": "Streams (FFmpeg)",
|
||||||
"description": "FFmpeg-Einstellungen, einschließlich Binärpfad, Argumente, hwaccel-Optionen und rollenspezifische Ausgabeargumente.",
|
"description": "Kamera-Stream-Eingaben und FFmpeg-Optionen, einschließlich Binärpfad, Argumente, hwaccel und rollenspezifische Ausgabeargumente.",
|
||||||
"path": {
|
"path": {
|
||||||
"label": "FFmpeg-Pfad",
|
"label": "FFmpeg-Pfad",
|
||||||
"description": "Pfad zur zu verwendenden FFmpeg-Binärdatei oder ein Versionsalias („5.0” oder „7.0”)."
|
"description": "Pfad zur zu verwendenden FFmpeg-Binärdatei oder ein Versionsalias („7.0” oder „8.0”)."
|
||||||
},
|
},
|
||||||
"global_args": {
|
"global_args": {
|
||||||
"label": "Globale Argumente von FFmpeg",
|
"label": "Globale Argumente von FFmpeg",
|
||||||
@@ -770,6 +770,10 @@
|
|||||||
"dashboard": {
|
"dashboard": {
|
||||||
"label": "In der Benutzeroberfläche anzeigen",
|
"label": "In der Benutzeroberfläche anzeigen",
|
||||||
"description": "Schalte ein, ob diese Kamera überall in der Benutzeroberfläche von „Frigate“ sichtbar ist. Wenn du diese Option deaktivierst, musst du die Konfiguration manuell bearbeiten, um diese Kamera wieder in der Benutzeroberfläche anzuzeigen."
|
"description": "Schalte ein, ob diese Kamera überall in der Benutzeroberfläche von „Frigate“ sichtbar ist. Wenn du diese Option deaktivierst, musst du die Konfiguration manuell bearbeiten, um diese Kamera wieder in der Benutzeroberfläche anzuzeigen."
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"label": "In der Überprüfung anzeigen",
|
||||||
|
"description": "Legen Sie fest, ob diese Kamera in der Übersicht angezeigt wird (auf der Übersichtsseite sowie im Kamerafilter, in der Bewegungsübersicht und in der Verlaufsansicht)."
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"snapshots": {
|
"snapshots": {
|
||||||
|
|||||||
@@ -18,7 +18,7 @@
|
|||||||
"description": "Mindest-RMS-Lautstärkeschwelle, die für die Audioerkennung erforderlich ist; niedrigere Werte erhöhen die Empfindlichkeit (z. B. 200 hoch, 500 mittel, 1000 niedrig)."
|
"description": "Mindest-RMS-Lautstärkeschwelle, die für die Audioerkennung erforderlich ist; niedrigere Werte erhöhen die Empfindlichkeit (z. B. 200 hoch, 500 mittel, 1000 niedrig)."
|
||||||
},
|
},
|
||||||
"listen": {
|
"listen": {
|
||||||
"description": "Liste der zu erkennenden Audioereignisse (z.B: bellen, Feueralarm, schreien, sprechen, rufen).",
|
"description": "Liste der zu erkennenden Audioereignisse (z.B: bellen, Feueralarm, Gespräche, Rufen).",
|
||||||
"label": "Hörtypen"
|
"label": "Hörtypen"
|
||||||
},
|
},
|
||||||
"filters": {
|
"filters": {
|
||||||
@@ -380,7 +380,7 @@
|
|||||||
"description": "FFmpeg-Einstellungen, einschließlich Binärpfad, Argumente, hwaccel-Optionen und rollenspezifische Ausgabeargumente.",
|
"description": "FFmpeg-Einstellungen, einschließlich Binärpfad, Argumente, hwaccel-Optionen und rollenspezifische Ausgabeargumente.",
|
||||||
"path": {
|
"path": {
|
||||||
"label": "FFmpeg-Pfad",
|
"label": "FFmpeg-Pfad",
|
||||||
"description": "Pfad zur zu verwendenden FFmpeg-Binärdatei oder ein Versionsalias („5.0” oder „7.0”)."
|
"description": "Pfad zur zu verwendenden FFmpeg-Binärdatei oder ein Versionsalias („7.0” oder „8.0”)."
|
||||||
},
|
},
|
||||||
"global_args": {
|
"global_args": {
|
||||||
"label": "Globale Argumente von FFmpeg",
|
"label": "Globale Argumente von FFmpeg",
|
||||||
@@ -1934,6 +1934,10 @@
|
|||||||
"dashboard": {
|
"dashboard": {
|
||||||
"label": "In der Benutzeroberfläche anzeigen",
|
"label": "In der Benutzeroberfläche anzeigen",
|
||||||
"description": "Schalte ein, ob diese Kamera überall in der Benutzeroberfläche von „Frigate“ sichtbar ist. Wenn du diese Option deaktivierst, musst du die Konfiguration manuell bearbeiten, um diese Kamera wieder in der Benutzeroberfläche anzuzeigen."
|
"description": "Schalte ein, ob diese Kamera überall in der Benutzeroberfläche von „Frigate“ sichtbar ist. Wenn du diese Option deaktivierst, musst du die Konfiguration manuell bearbeiten, um diese Kamera wieder in der Benutzeroberfläche anzuzeigen."
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"label": "In der Überprüfung anzeigen",
|
||||||
|
"description": "Legen Sie fest, ob diese Kamera in der Übersicht angezeigt wird (auf der Übersichtsseite sowie im Kamerafilter, in der Bewegungsübersicht und in der Verlaufsansicht)."
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -90,7 +90,7 @@
|
|||||||
"laptop": "Laptop",
|
"laptop": "Laptop",
|
||||||
"mouse": "Maus",
|
"mouse": "Maus",
|
||||||
"goat": "Ziege",
|
"goat": "Ziege",
|
||||||
"keyboard": "Klaviatur",
|
"keyboard": "Klavier",
|
||||||
"cell_phone": "Handy",
|
"cell_phone": "Handy",
|
||||||
"remote": "Fernbedienung",
|
"remote": "Fernbedienung",
|
||||||
"airplane": "Flugzeug",
|
"airplane": "Flugzeug",
|
||||||
|
|||||||
@@ -46,7 +46,7 @@
|
|||||||
"threshold": "Empfindlichkeitsschwelle",
|
"threshold": "Empfindlichkeitsschwelle",
|
||||||
"thresholdDesc": "Niedrigere Werte erkennen geringere Veränderungen (1–255)",
|
"thresholdDesc": "Niedrigere Werte erkennen geringere Veränderungen (1–255)",
|
||||||
"minArea": "Mindestwechselbereich",
|
"minArea": "Mindestwechselbereich",
|
||||||
"minAreaDesc": "Mindestanteil der untersuchten Region, der sich ändern muss, damit die Veränderung als signifikant gilt",
|
"minAreaDesc": "Mindestgröße eines einzelnen sich bewegenden Bereichs, ausgedrückt als Prozentsatz des untersuchten Bereichs",
|
||||||
"frameSkip": "Bild überspringen",
|
"frameSkip": "Bild überspringen",
|
||||||
"frameSkipDesc": "Verarbeite jeden N-ten Frame. Stelle diesen Wert auf die Bildrate deiner Kamera ein, um einen Frame pro Sekunde zu verarbeiten (z. B. 5 für eine Kamera mit 5 FPS, 30 für eine Kamera mit 30 FPS). Höhere Werte sorgen für eine schnellere Verarbeitung, können jedoch kurze Bewegungsabläufe übersehen.",
|
"frameSkipDesc": "Verarbeite jeden N-ten Frame. Stelle diesen Wert auf die Bildrate deiner Kamera ein, um einen Frame pro Sekunde zu verarbeiten (z. B. 5 für eine Kamera mit 5 FPS, 30 für eine Kamera mit 30 FPS). Höhere Werte sorgen für eine schnellere Verarbeitung, können jedoch kurze Bewegungsabläufe übersehen.",
|
||||||
"maxResults": "Maximale Ergebnisse",
|
"maxResults": "Maximale Ergebnisse",
|
||||||
@@ -72,6 +72,9 @@
|
|||||||
"framesDecoded": "Rahmen decodiert",
|
"framesDecoded": "Rahmen decodiert",
|
||||||
"wallTime": "Suchzeit",
|
"wallTime": "Suchzeit",
|
||||||
"segmentErrors": "Segmentfehler",
|
"segmentErrors": "Segmentfehler",
|
||||||
"seconds": "{{seconds}}s"
|
"seconds": "{{seconds}}s",
|
||||||
}
|
"minutesSeconds": "{{minutes}}m {{seconds}}s",
|
||||||
|
"scanSummary": "{{segments}} Segmente · {{time}}"
|
||||||
|
},
|
||||||
|
"scanning": "Wird gescannt {{time}}"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -70,7 +70,7 @@
|
|||||||
"integrationObjectClassification": "Objekt Klassifizierung",
|
"integrationObjectClassification": "Objekt Klassifizierung",
|
||||||
"integrationAudioTranscription": "Audio-Transkription",
|
"integrationAudioTranscription": "Audio-Transkription",
|
||||||
"cameraDetect": "Objekterkennung",
|
"cameraDetect": "Objekterkennung",
|
||||||
"cameraFfmpeg": "FFmpeg",
|
"cameraFfmpeg": "Streams (FFmpeg)",
|
||||||
"cameraRecording": "Aufnahme",
|
"cameraRecording": "Aufnahme",
|
||||||
"cameraSnapshots": "Momentaufnahme",
|
"cameraSnapshots": "Momentaufnahme",
|
||||||
"cameraMotion": "Bewegungserkennung",
|
"cameraMotion": "Bewegungserkennung",
|
||||||
@@ -1376,12 +1376,16 @@
|
|||||||
"details": {
|
"details": {
|
||||||
"edit": "Kameradaten bearbeiten",
|
"edit": "Kameradaten bearbeiten",
|
||||||
"title": "Kameradaten bearbeiten",
|
"title": "Kameradaten bearbeiten",
|
||||||
"description": "Aktualisieren Sie den Anzeigenamen und die externe URL, die für diese Kamera in der gesamten Frigate-Benutzeroberfläche verwendet werden.",
|
"description": "Aktualisieren Sie den Anzeigenamen, die externe URL und die Sichtbarkeit, die für diese Kamera in der gesamten Frigate-Benutzeroberfläche verwendet werden.",
|
||||||
"friendlyNameLabel": "Display Name",
|
"friendlyNameLabel": "Display Name",
|
||||||
"friendlyNameHelp": "Der in der Benutzeroberfläche von „Frigate“ für diese Kamera angezeigte Spitzname. Lassen Sie das Feld leer, um die Kamera-ID zu verwenden.",
|
"friendlyNameHelp": "Der in der Benutzeroberfläche von „Frigate“ für diese Kamera angezeigte Spitzname. Lassen Sie das Feld leer, um die Kamera-ID zu verwenden.",
|
||||||
"webuiUrlLabel": "URL der Web-Benutzeroberfläche",
|
"webuiUrlLabel": "URL der Web-Benutzeroberfläche",
|
||||||
"webuiUrlHelp": "URL, um die Web-Benutzeroberfläche der Kamera direkt aus der Debug-Ansicht aufzurufen. Lassen Sie das Feld leer, um den Link zu deaktivieren.",
|
"webuiUrlHelp": "URL, um die Web-Benutzeroberfläche der Kamera direkt aus der Debug-Ansicht aufzurufen. Lassen Sie das Feld leer, um den Link zu deaktivieren.",
|
||||||
"webuiUrlInvalid": "Es muss sich um eine gültige URL handeln (z. B. https://example.com)."
|
"webuiUrlInvalid": "Es muss sich um eine gültige URL handeln (z. B. https://example.com).",
|
||||||
|
"dashboardLabel": "Im Live-Dashboard anzeigen",
|
||||||
|
"dashboardHelp": "Diese Kamera im Live-Dashboard anzeigen.",
|
||||||
|
"reviewLabel": "In der Überprüfung anzeigen",
|
||||||
|
"reviewHelp": "Zeige diese Kamera in der Übersicht an, einschließlich des Kamerafilters, der Bewegungsübersicht und der Verlaufsansicht."
|
||||||
},
|
},
|
||||||
"label": "Kamerazustand",
|
"label": "Kamerazustand",
|
||||||
"description": "Legen Sie den Betriebszustand für jede Kamera fest.<br /><br /><strong>Ein</strong>: Streams werden normal verarbeitet.<br /><strong>Aus</strong>: Die Verarbeitung wird vorübergehend angehalten. Diese Einstellung bleibt bei einem Neustart von Frigate nicht erhalten.<br /><strong>Deaktiviert</strong>: Die Verarbeitung wird beendet und die Änderung in Ihrer Konfiguration gespeichert. Um eine deaktivierte Kamera wieder zu aktivieren, ist ein Neustart erforderlich.<br /><br /><em>Hinweis: Die Deaktivierung hat keine Auswirkungen auf go2rtc-Restreams.</em><br /><br />Ziehen Sie den Griff, um die Reihenfolge der aktiven Kameras in der Benutzeroberfläche anzupassen, einschließlich des Live-Dashboards und der Dropdown-Menüs zur Kameraauswahl.",
|
"description": "Legen Sie den Betriebszustand für jede Kamera fest.<br /><br /><strong>Ein</strong>: Streams werden normal verarbeitet.<br /><strong>Aus</strong>: Die Verarbeitung wird vorübergehend angehalten. Diese Einstellung bleibt bei einem Neustart von Frigate nicht erhalten.<br /><strong>Deaktiviert</strong>: Die Verarbeitung wird beendet und die Änderung in Ihrer Konfiguration gespeichert. Um eine deaktivierte Kamera wieder zu aktivieren, ist ein Neustart erforderlich.<br /><br /><em>Hinweis: Die Deaktivierung hat keine Auswirkungen auf go2rtc-Restreams.</em><br /><br />Ziehen Sie den Griff, um die Reihenfolge der aktiven Kameras in der Benutzeroberfläche anzupassen, einschließlich des Live-Dashboards und der Dropdown-Menüs zur Kameraauswahl.",
|
||||||
@@ -1764,7 +1768,17 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"cameraInputs": {
|
"cameraInputs": {
|
||||||
"itemTitle": "Stream {{index}}"
|
"itemTitle": "Stream {{index}}",
|
||||||
|
"sourceMode": {
|
||||||
|
"restream": "Restream (go2rtc)",
|
||||||
|
"manual": "Pfad für die manuelle Eingabe",
|
||||||
|
"go2rtcStreamLabel": "go2rtc stream",
|
||||||
|
"go2rtcStreamPlaceholder": "Wählen Sie einen go2rtc-Stream aus",
|
||||||
|
"noGo2rtcStreams": "Es sind keine go2rtc-Streams konfiguriert",
|
||||||
|
"go2rtcStreamSearch": "Suche Streams...",
|
||||||
|
"availableStreams": "Verfügbare Streams",
|
||||||
|
"noMatchingStreams": "Keine passenden Streams"
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"restartRequiredField": "Neustart erforderlich",
|
"restartRequiredField": "Neustart erforderlich",
|
||||||
"restartRequiredFooter": "Konfiguration geändert – Neustart erforderlich",
|
"restartRequiredFooter": "Konfiguration geändert – Neustart erforderlich",
|
||||||
@@ -2082,7 +2096,11 @@
|
|||||||
"fpsGreaterThanFive": "Es wird nicht empfohlen, den Wert für die FPS-Erkennung auf mehr als 5 zu setzen. Höhere Werte können zu Leistungseinbußen führen und bieten keinerlei Vorteile.",
|
"fpsGreaterThanFive": "Es wird nicht empfohlen, den Wert für die FPS-Erkennung auf mehr als 5 zu setzen. Höhere Werte können zu Leistungseinbußen führen und bieten keinerlei Vorteile.",
|
||||||
"disabled": "Die Objekterkennung ist deaktiviert. Momentaufnahmen, Überprüfungselemente und Erweiterungsfunktionen wie Gesichtserkennung, Kennzeichenerkennung und generative KI funktionieren nicht.",
|
"disabled": "Die Objekterkennung ist deaktiviert. Momentaufnahmen, Überprüfungselemente und Erweiterungsfunktionen wie Gesichtserkennung, Kennzeichenerkennung und generative KI funktionieren nicht.",
|
||||||
"resolutionShouldBeMultipleOfFour": "Um optimale Ergebnisse zu erzielen, sollten Breite und Höhe ein Vielfaches von 4 sein. Andere gerade Werte können zu visuellen Artefakten oder leichten Verzerrungen im Erkennungsstrom führen.",
|
"resolutionShouldBeMultipleOfFour": "Um optimale Ergebnisse zu erzielen, sollten Breite und Höhe ein Vielfaches von 4 sein. Andere gerade Werte können zu visuellen Artefakten oder leichten Verzerrungen im Erkennungsstrom führen.",
|
||||||
"aspectRatioMismatch": "Die von Ihnen eingegebene Breite und Höhe stimmen nicht mit dem Seitenverhältnis Ihrer aktuell erkannten Auflösung überein. Dies kann zu einem gestreckten oder verzerrten Bild führen."
|
"aspectRatioMismatch": "Die von Ihnen eingegebene Breite und Höhe stimmen nicht mit dem Seitenverhältnis Ihrer aktuell erkannten Auflösung überein. Dies kann zu einem gestreckten oder verzerrten Bild führen.",
|
||||||
|
"maxFramesSet": "Die Festlegung einer maximalen Bildrate überschreibt das Standardverhalten und deaktiviert die Verfolgung stationärer Objekte. Dies ist nur in sehr wenigen Fällen erforderlich; verwenden Sie diese Option daher mit Bedacht.",
|
||||||
|
"squareResolution": "Eine quadratische Erkennungsauflösung ist ungewöhnlich. Die Erkennungsbreite und -höhe sollten dem Seitenverhältnis Ihrer Kamera entsprechen (zum Beispiel 16:9) und nicht den Abmessungen des Objekterkennungsmodells. Ein nicht übereinstimmendes Seitenverhältnis kann das Bild verzerren und die Erkennungsgenauigkeit beeinträchtigen.",
|
||||||
|
"resolutionHigh": "Diese Erkennungsauflösung liegt über der empfohlenen Wert und kann zu einem erhöhten Ressourcenverbrauch führen, ohne die Erkennungsgenauigkeit zu verbessern. Für die meisten Kameras wird eine Erkennungsauflösung von maximal 1080p empfohlen.",
|
||||||
|
"globalResolutionMultipleCameras": "Bei der Konfiguration mehrerer Kameras wird eine globale Erkennungsauflösung festgelegt. Sofern nicht alle Kameras dieselbe Auflösung und dasselbe Seitenverhältnis aufweisen, sollten die Erkennungsbreite und -höhe für jede Kamera separat festgelegt werden, um dem nativen Seitenverhältnis der jeweiligen Kamera zu entsprechen."
|
||||||
},
|
},
|
||||||
"faceRecognition": {
|
"faceRecognition": {
|
||||||
"globalDisabled": "Die Gesichtserkennungserweiterung muss aktiviert sein, damit die Gesichtserkennungsfunktionen bei dieser Kamera funktionieren.",
|
"globalDisabled": "Die Gesichtserkennungserweiterung muss aktiviert sein, damit die Gesichtserkennungsfunktionen bei dieser Kamera funktionieren.",
|
||||||
@@ -2115,6 +2133,13 @@
|
|||||||
},
|
},
|
||||||
"onvif": {
|
"onvif": {
|
||||||
"autotrackingNoZones": "Für die automatische Verfolgung ist mindestens eine Zone erforderlich. Definieren Sie unter „Masken / Zonen“ eine Zone für diese Kamera und legen Sie diese anschließend unten als erforderliche Zone fest."
|
"autotrackingNoZones": "Für die automatische Verfolgung ist mindestens eine Zone erforderlich. Definieren Sie unter „Masken / Zonen“ eine Zone für diese Kamera und legen Sie diese anschließend unten als erforderliche Zone fest."
|
||||||
|
},
|
||||||
|
"ffmpeg": {
|
||||||
|
"hwaccelManualNotRecommended": "Explizite Definitionen der Hardware-beschleunigungs Variablen sind nicht empfohlen. Wähle die Voreinstellung die zu deiner Hardware passt, außer wenn spezifische Anforderungen eine andere Konfiguration erfordern."
|
||||||
|
},
|
||||||
|
"model": {
|
||||||
|
"optimizedFor320": "Frigate ist für ein 320x320-Modell optimiert, was für die meisten Konfigurationen die beste Wahl ist. Ein 640x640-Modell ist langsamer und bietet nur in bestimmten Szenarien Vorteile.",
|
||||||
|
"inputDimensionsNotDetectResolution": "Die Eingangsbreite und -höhe des Modells beziehen sich auf die Abmessungen des Objekterkennungsmodells und nicht auf die Erkennungsauflösung Ihrer Kamera. Sie sollten mit den Abmessungen des von Ihnen verwendeten Modells übereinstimmen – in der Regel quadratische Abmessungen wie 320×320 oder 640×640."
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"birdseye": {
|
"birdseye": {
|
||||||
|
|||||||
@@ -173,7 +173,22 @@
|
|||||||
"tips": {
|
"tips": {
|
||||||
"title": "Kamera-Untersuchsungsinfo"
|
"title": "Kamera-Untersuchsungsinfo"
|
||||||
},
|
},
|
||||||
"aspectRatio": "Seitenverhältnis"
|
"aspectRatio": "Seitenverhältnis",
|
||||||
|
"keyframes": {
|
||||||
|
"title": "Keyframe-Analyse",
|
||||||
|
"analyzing": "Keyframes werden analysiert... Noch {{seconds}} Sekunden",
|
||||||
|
"stillAnalyzing": "Keyframes werden noch analysiert...",
|
||||||
|
"recordStream": "Stream aufzeichnen:",
|
||||||
|
"keyframeCount": "Beobachtete Keyframes:",
|
||||||
|
"observedDuration": "Beobachtete Dauer:",
|
||||||
|
"gap": "Keyframe-Abstand (min. / durchschnittlich / max.):",
|
||||||
|
"segmentLength": "Länge des Aufzeichnungssegments:",
|
||||||
|
"ok": "Keyframes alle ~{{seconds}}s, gut geeignet für Aufzeichnung und Wiedergabe.",
|
||||||
|
"warning": "Seltene oder unregelmäßige Keyframes (längste Lücke ~{{seconds}}s), wahrscheinlich ein „Smart“-Codec (H.264+/H.265+); dies wird nicht empfohlen.",
|
||||||
|
"error": "Die Lücke zwischen den Keyframes (~{{seconds}}s) überschreitet die Länge des Aufzeichnungssegments ({{segmentTime}}s). Einige Segmente enthalten möglicherweise keinen Keyframe, was zu einer Unterbrechung der Wiedergabe führt. Deaktivieren Sie den Smart/+-Codec an der Kamera oder verkürzen Sie dessen Keyframe-Intervall.",
|
||||||
|
"unknown": "Der Abstand zwischen den Keyframes konnte nicht ermittelt werden.",
|
||||||
|
"recordDisabled": "Die Aufzeichnung ist für diese Kamera deaktiviert."
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"overview": "Übersicht",
|
"overview": "Übersicht",
|
||||||
"label": {
|
"label": {
|
||||||
|
|||||||
@@ -61,5 +61,14 @@
|
|||||||
"yodeling": "Λαρυγγισμός",
|
"yodeling": "Λαρυγγισμός",
|
||||||
"chant": "Ύμνος",
|
"chant": "Ύμνος",
|
||||||
"mantra": "Μάντρα",
|
"mantra": "Μάντρα",
|
||||||
"synthetic_singing": "Συνθετικό Τραγούδι"
|
"synthetic_singing": "Συνθετικό Τραγούδι",
|
||||||
|
"rapping": "Χτύπημα",
|
||||||
|
"humming": "Μουρμουρητό",
|
||||||
|
"groan": "Aναστεναγμός",
|
||||||
|
"grunt": "Μούγκρισμα",
|
||||||
|
"gasp": "Ανάσα",
|
||||||
|
"pant": "Λαχάνιασμα",
|
||||||
|
"snort": "Ρουθούνισμα",
|
||||||
|
"cough": "Βήχας",
|
||||||
|
"throat_clearing": "Ξεροβήξιμο"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -109,7 +109,9 @@
|
|||||||
"no": "Όχι",
|
"no": "Όχι",
|
||||||
"download": "Κατέβασμα",
|
"download": "Κατέβασμα",
|
||||||
"info": "Πληροφορίες",
|
"info": "Πληροφορίες",
|
||||||
"history": "Ιστορία"
|
"history": "Ιστορία",
|
||||||
|
"on": "Ενεργοποίηση",
|
||||||
|
"off": "Απενεργοποίηση"
|
||||||
},
|
},
|
||||||
"unit": {
|
"unit": {
|
||||||
"speed": {
|
"speed": {
|
||||||
@@ -117,7 +119,8 @@
|
|||||||
"kph": "χλμ/ώρα"
|
"kph": "χλμ/ώρα"
|
||||||
},
|
},
|
||||||
"length": {
|
"length": {
|
||||||
"meters": "μέτρα"
|
"meters": "μέτρα",
|
||||||
|
"feet": "πόδια"
|
||||||
},
|
},
|
||||||
"data": {
|
"data": {
|
||||||
"kbps": "kB/s",
|
"kbps": "kB/s",
|
||||||
@@ -134,7 +137,8 @@
|
|||||||
"show": "Εμφάνιση {{item}}",
|
"show": "Εμφάνιση {{item}}",
|
||||||
"ID": "ID",
|
"ID": "ID",
|
||||||
"none": "Κανένα",
|
"none": "Κανένα",
|
||||||
"all": "Όλα"
|
"all": "Όλα",
|
||||||
|
"other": "άλλο"
|
||||||
},
|
},
|
||||||
"toast": {
|
"toast": {
|
||||||
"save": {
|
"save": {
|
||||||
|
|||||||
@@ -119,7 +119,14 @@
|
|||||||
"queueingButton": "Poniendo exportaciones en cola...",
|
"queueingButton": "Poniendo exportaciones en cola...",
|
||||||
"exportButton_one": "Exportar 1 cámara",
|
"exportButton_one": "Exportar 1 cámara",
|
||||||
"exportButton_many": "Exportar {{count}} cámaras",
|
"exportButton_many": "Exportar {{count}} cámaras",
|
||||||
"exportButton_other": "Exportar {{count}} cámaras"
|
"exportButton_other": "Exportar {{count}} cámaras",
|
||||||
|
"searchOrSelectGroup": "Busca o selecciona un grupo de cámaras…",
|
||||||
|
"selectAll": "Seleccionar todas las cámaras",
|
||||||
|
"clearSelection": "Borrar selección",
|
||||||
|
"selectWithActivity": "Cámaras con objetos rastreados",
|
||||||
|
"selectGroup": "Seleccionar grupo",
|
||||||
|
"noMatchingCameras": "Ninguna cámara coincide con tu búsqueda",
|
||||||
|
"selectedCount": "{{selected}} / {{total}} seleccionadas"
|
||||||
},
|
},
|
||||||
"multi": {
|
"multi": {
|
||||||
"title_one": "Exportar 1 revisión",
|
"title_one": "Exportar 1 revisión",
|
||||||
|
|||||||
@@ -24,7 +24,7 @@
|
|||||||
},
|
},
|
||||||
"listen": {
|
"listen": {
|
||||||
"label": "Tipos de escucha",
|
"label": "Tipos de escucha",
|
||||||
"description": "Lista de tipos de eventos de audio a detectar (por ejemplo: ladrido, alarma de incendios, grito, voz, alarido)."
|
"description": "Lista de tipos de eventos de audio a detectar (por ejemplo: ladrar, alarma de incendio, habla, gritar)."
|
||||||
},
|
},
|
||||||
"filters": {
|
"filters": {
|
||||||
"label": "Filtros de audio",
|
"label": "Filtros de audio",
|
||||||
@@ -744,7 +744,7 @@
|
|||||||
"label": "Tiempo de reintento de FFmpeg"
|
"label": "Tiempo de reintento de FFmpeg"
|
||||||
},
|
},
|
||||||
"path": {
|
"path": {
|
||||||
"description": "Ruta al binario de FFmpeg que se va a utilizar o un alias de versión (\"5.0\" o \"7.0\").",
|
"description": "Ruta al binario de FFmpeg que se va a utilizar o un alias de versión (\"7.0\" o \"8.0\").",
|
||||||
"label": "Ruta de FFmpeg"
|
"label": "Ruta de FFmpeg"
|
||||||
},
|
},
|
||||||
"output_args": {
|
"output_args": {
|
||||||
@@ -759,8 +759,8 @@
|
|||||||
"description": "Argumentos de salida predeterminados para los flujos con rol de grabación."
|
"description": "Argumentos de salida predeterminados para los flujos con rol de grabación."
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"description": "Configuración de FFmpeg, incluyendo la ruta del binario, argumentos, opciones de aceleración por hardware y argumentos de salida por rol.",
|
"description": "Entradas de flujo de la cámara y opciones de FFmpeg, incluida la ruta del binario, argumentos, aceleración por hardware y argumentos de salida por rol.",
|
||||||
"label": "FFmpeg",
|
"label": "Flujos (FFmpeg)",
|
||||||
"global_args": {
|
"global_args": {
|
||||||
"label": "Argumentos globales de FFmpeg",
|
"label": "Argumentos globales de FFmpeg",
|
||||||
"description": "Argumentos globales pasados a los procesos de FFmpeg."
|
"description": "Argumentos globales pasados a los procesos de FFmpeg."
|
||||||
|
|||||||
@@ -39,7 +39,7 @@
|
|||||||
},
|
},
|
||||||
"listen": {
|
"listen": {
|
||||||
"label": "Tipos de escucha",
|
"label": "Tipos de escucha",
|
||||||
"description": "Lista de tipos de eventos de audio a detectar (por ejemplo: ladrido, alarma de incendios, grito, voz, alarido)."
|
"description": "Lista de tipos de eventos de audio a detectar (por ejemplo: ladrar, alarma de incendio, habla, gritar)."
|
||||||
},
|
},
|
||||||
"filters": {
|
"filters": {
|
||||||
"label": "Filtros de audio",
|
"label": "Filtros de audio",
|
||||||
@@ -1234,7 +1234,7 @@
|
|||||||
"label": "Tiempo de reintento de FFmpeg"
|
"label": "Tiempo de reintento de FFmpeg"
|
||||||
},
|
},
|
||||||
"path": {
|
"path": {
|
||||||
"description": "Ruta al binario de FFmpeg que se va a utilizar o un alias de versión (\"5.0\" o \"7.0\").",
|
"description": "Ruta al binario de FFmpeg que se va a utilizar o un alias de versión (\"7.0\" o \"8.0\").",
|
||||||
"label": "Ruta de FFmpeg"
|
"label": "Ruta de FFmpeg"
|
||||||
},
|
},
|
||||||
"output_args": {
|
"output_args": {
|
||||||
|
|||||||
@@ -72,7 +72,7 @@
|
|||||||
"integrationObjectClassification": "Clasificación de objetos",
|
"integrationObjectClassification": "Clasificación de objetos",
|
||||||
"integrationAudioTranscription": "Transcripción de audio",
|
"integrationAudioTranscription": "Transcripción de audio",
|
||||||
"cameraDetect": "Detección de objetos",
|
"cameraDetect": "Detección de objetos",
|
||||||
"cameraFfmpeg": "FFmpeg",
|
"cameraFfmpeg": "Flujos (FFmpeg)",
|
||||||
"cameraRecording": "Grabación",
|
"cameraRecording": "Grabación",
|
||||||
"cameraSnapshots": "Instantáneas",
|
"cameraSnapshots": "Instantáneas",
|
||||||
"cameraMotion": "Detección de movimiento",
|
"cameraMotion": "Detección de movimiento",
|
||||||
@@ -1720,7 +1720,17 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"cameraInputs": {
|
"cameraInputs": {
|
||||||
"itemTitle": "Flujo {{index}}"
|
"itemTitle": "Flujo {{index}}",
|
||||||
|
"sourceMode": {
|
||||||
|
"restream": "Retransmisión (go2rtc)",
|
||||||
|
"manual": "Ruta de entrada manual",
|
||||||
|
"go2rtcStreamLabel": "Flujo go2rtc",
|
||||||
|
"go2rtcStreamPlaceholder": "Selecciona un flujo go2rtc",
|
||||||
|
"noGo2rtcStreams": "No hay flujos go2rtc configurados",
|
||||||
|
"go2rtcStreamSearch": "Buscar flujos…",
|
||||||
|
"availableStreams": "Flujos disponibles",
|
||||||
|
"noMatchingStreams": "No hay flujos coincidentes"
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"restartRequiredField": "Reinicio necesario",
|
"restartRequiredField": "Reinicio necesario",
|
||||||
"restartRequiredFooter": "Configuración modificada - reinicio necesario",
|
"restartRequiredFooter": "Configuración modificada - reinicio necesario",
|
||||||
@@ -2020,6 +2030,9 @@
|
|||||||
},
|
},
|
||||||
"onvif": {
|
"onvif": {
|
||||||
"autotrackingNoZones": "El seguimiento automático requiere al menos una zona. Define una zona para esta cámara en Máscaras / Zonas y, a continuación, establécela como zona obligatoria a continuación."
|
"autotrackingNoZones": "El seguimiento automático requiere al menos una zona. Define una zona para esta cámara en Máscaras / Zonas y, a continuación, establécela como zona obligatoria a continuación."
|
||||||
|
},
|
||||||
|
"ffmpeg": {
|
||||||
|
"hwaccelManualNotRecommended": "No son remontados los argumentos de aceleración por hardware manual. A no ser que un requisito específico exista, seleccione la preselección que coincida con su hardware."
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"resetToDefaultDescription": "Esto restablecerá todos los ajustes de esta sección a sus valores predeterminados. Esta acción no se puede deshacer.",
|
"resetToDefaultDescription": "Esto restablecerá todos los ajustes de esta sección a sus valores predeterminados. Esta acción no se puede deshacer.",
|
||||||
|
|||||||
@@ -81,16 +81,16 @@
|
|||||||
"gpuInfo": {
|
"gpuInfo": {
|
||||||
"vainfoOutput": {
|
"vainfoOutput": {
|
||||||
"title": "Salida de Vainfo",
|
"title": "Salida de Vainfo",
|
||||||
"returnCode": "Código de Retorno: {{code}}",
|
"returnCode": "Código de retorno: {{code}}",
|
||||||
"processOutput": "Salida del Proceso:",
|
"processOutput": "Salida del proceso:",
|
||||||
"processError": "Error del Proceso:"
|
"processError": "Error del proceso:"
|
||||||
},
|
},
|
||||||
"nvidiaSMIOutput": {
|
"nvidiaSMIOutput": {
|
||||||
"cudaComputerCapability": "Capacidad de Cómputo CUDA: {{cuda_compute}}",
|
"cudaComputerCapability": "Capacidad de cómputo CUDA: {{cuda_compute}}",
|
||||||
"title": "Salida de Nvidia SMI",
|
"title": "Salida de Nvidia SMI",
|
||||||
"driver": "Controlador: {{driver}}",
|
"driver": "Controlador: {{driver}}",
|
||||||
"name": "Nombre: {{name}}",
|
"name": "Nombre: {{name}}",
|
||||||
"vbios": "Información de VBios: {{vbios}}"
|
"vbios": "Informe de VBios: {{vbios}}"
|
||||||
},
|
},
|
||||||
"toast": {
|
"toast": {
|
||||||
"success": "Información de GPU copiada al portapapeles"
|
"success": "Información de GPU copiada al portapapeles"
|
||||||
@@ -104,7 +104,7 @@
|
|||||||
},
|
},
|
||||||
"gpuMemory": "Memoria de GPU",
|
"gpuMemory": "Memoria de GPU",
|
||||||
"npuMemory": "Memoria de NPU",
|
"npuMemory": "Memoria de NPU",
|
||||||
"npuUsage": "Uso de NPU",
|
"npuUsage": "Modo de empleo de NPU",
|
||||||
"intelGpuWarning": {
|
"intelGpuWarning": {
|
||||||
"title": "Aviso de estadísticas Intel GPU",
|
"title": "Aviso de estadísticas Intel GPU",
|
||||||
"message": "Estadísticas de GPU no disponibles",
|
"message": "Estadísticas de GPU no disponibles",
|
||||||
@@ -122,7 +122,7 @@
|
|||||||
"go2rtc": "go2rtc",
|
"go2rtc": "go2rtc",
|
||||||
"recording": "grabación",
|
"recording": "grabación",
|
||||||
"review_segment": "revisar segmento",
|
"review_segment": "revisar segmento",
|
||||||
"embeddings": "embeddings",
|
"embeddings": "empotrados",
|
||||||
"audio_detector": "detector de audio"
|
"audio_detector": "detector de audio"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -165,8 +165,8 @@
|
|||||||
"codec": "Codec:",
|
"codec": "Codec:",
|
||||||
"fetching": "Obteniendo Datos de la Cámara",
|
"fetching": "Obteniendo Datos de la Cámara",
|
||||||
"stream": "Flujo {{idx}}",
|
"stream": "Flujo {{idx}}",
|
||||||
"video": "Video:",
|
"video": "Vídeo:",
|
||||||
"fps": "FPS:",
|
"fps": "CPS:",
|
||||||
"resolution": "Resolución:",
|
"resolution": "Resolución:",
|
||||||
"error": "Error: {{error}}",
|
"error": "Error: {{error}}",
|
||||||
"unknown": "Desconocido",
|
"unknown": "Desconocido",
|
||||||
@@ -174,7 +174,22 @@
|
|||||||
"tips": {
|
"tips": {
|
||||||
"title": "Información de Sondeo de la Cámara"
|
"title": "Información de Sondeo de la Cámara"
|
||||||
},
|
},
|
||||||
"aspectRatio": "Relación de aspecto"
|
"aspectRatio": "Relación de aspecto",
|
||||||
|
"keyframes": {
|
||||||
|
"title": "Análisis de clave fotograma",
|
||||||
|
"recordStream": "Flujo de grabación:",
|
||||||
|
"segmentLength": "Longitud de segmento en grabación:",
|
||||||
|
"unknown": "No pudo determinar el espaciado del fotograma.",
|
||||||
|
"analyzing": "Analizando fotogramas clave… {{seconds}} segundos restantes",
|
||||||
|
"stillAnalyzing": "Todavía analizando fotogramas clave…",
|
||||||
|
"keyframeCount": "Fotogramas clave observados:",
|
||||||
|
"observedDuration": "Duración observada:",
|
||||||
|
"gap": "Brecha de fotogramas clave (mín / med / máx):",
|
||||||
|
"recordDisabled": "La grabación está desactivada para esta cámara.",
|
||||||
|
"ok": "Cuadros cada ~{{seconds}}s, bueno para grabación y reproducción.",
|
||||||
|
"warning": "Fotograma clave escaso o variable (hueco más largo ~{{seconds}}s), probablemente un códec inteligente (H.264+/H.265+), esto no es recomendado.",
|
||||||
|
"error": "El intervalo entre fotogramas clave (~{{seconds}} s) supera la duración del segmento de grabación ({{segmentTime}} s). Es posible que algunos segmentos no contengan ningún fotograma clave, lo que impedirá su reproducción. Desactiva el códec inteligente (+) de la cámara o reduce el intervalo entre fotogramas clave."
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"framesAndDetections": "Fotogramas / Detecciones",
|
"framesAndDetections": "Fotogramas / Detecciones",
|
||||||
"label": {
|
"label": {
|
||||||
@@ -204,9 +219,9 @@
|
|||||||
},
|
},
|
||||||
"connectionQuality": {
|
"connectionQuality": {
|
||||||
"excellent": "Excelente",
|
"excellent": "Excelente",
|
||||||
"poor": "Debil",
|
"poor": "Pobre",
|
||||||
"title": "Calidad de la conexión",
|
"title": "Calidad de Conexión",
|
||||||
"fps": "Cuadros por segundo",
|
"fps": "CPS",
|
||||||
"expectedFps": "Cuadros por segundo esperados",
|
"expectedFps": "Cuadros por segundo esperados",
|
||||||
"reconnectsLastHour": "Reconexiones (última hora)",
|
"reconnectsLastHour": "Reconexiones (última hora)",
|
||||||
"unusable": "No usable",
|
"unusable": "No usable",
|
||||||
@@ -222,25 +237,25 @@
|
|||||||
"infPerSecond": "Inferencias Por Segundo",
|
"infPerSecond": "Inferencias Por Segundo",
|
||||||
"embeddings": {
|
"embeddings": {
|
||||||
"plate_recognition_speed": "Velocidad de Reconocimiento de Matrículas",
|
"plate_recognition_speed": "Velocidad de Reconocimiento de Matrículas",
|
||||||
"face_embedding_speed": "Velocidad de Incrustación de Rostros",
|
"face_embedding_speed": "Velocidad de Empotrado Facial",
|
||||||
"image_embedding_speed": "Velocidad de Incrustación de Imágenes",
|
"image_embedding_speed": "Velocidad de Empotrado de Imagen",
|
||||||
"text_embedding_speed": "Velocidad de Incrustación de Texto",
|
"text_embedding_speed": "Velocidad de Empotrado de Texto",
|
||||||
"face_recognition_speed": "Velocidad de Reconocimiento Facial",
|
"face_recognition_speed": "Velocidad de Reconocimiento Facial",
|
||||||
"text_embedding": "Incrustación de Texto",
|
"text_embedding": "Empotrado de Texto",
|
||||||
"face_recognition": "Reconocimiento Facial",
|
"face_recognition": "Reconocimiento Facial",
|
||||||
"plate_recognition": "Reconocimiento de Matrículas",
|
"plate_recognition": "Reconocimiento de Matrículas",
|
||||||
"yolov9_plate_detection": "Detección de Matrículas YOLOv9",
|
"yolov9_plate_detection": "Detección de Matrículas YOLOv9",
|
||||||
"image_embedding": "Incrustación de Imágenes",
|
"image_embedding": "Empotrado de Imagen",
|
||||||
"yolov9_plate_detection_speed": "Velocidad de Detección de Matrículas YOLOv9",
|
"yolov9_plate_detection_speed": "Velocidad de Detección de Matrículas YOLOv9",
|
||||||
"review_description": "Revisión de descripción",
|
"review_description": "Revisión de descripción",
|
||||||
"review_description_speed": "Velocidad de revisión de la descripción",
|
"review_description_speed": "Revisión de velocidad de descripción",
|
||||||
"review_description_events_per_second": "Revisión de la descripción",
|
"review_description_events_per_second": "Revisión de Descripción",
|
||||||
"object_description": "Descripción de Objeto",
|
"object_description": "Descripción de Objeto",
|
||||||
"object_description_speed": "Velocidad de descripción de objeto",
|
"object_description_speed": "Velocidad de Descripción de Objeto",
|
||||||
"object_description_events_per_second": "Descripción de objeto",
|
"object_description_events_per_second": "Descripción de Objeto",
|
||||||
"classification": "Clasificación de {{name}}",
|
"classification": "Clasificación de {{name}}",
|
||||||
"classification_speed": "Velocidad de clasificación de {{name}}",
|
"classification_speed": "Velocidad de Clasificación de {{name}}",
|
||||||
"classification_events_per_second": "Clasificacion de eventos por segundo de {{name}}"
|
"classification_events_per_second": "Clasificación de Eventos por Segundo de {{name}}"
|
||||||
},
|
},
|
||||||
"title": "Enriquecimientos",
|
"title": "Enriquecimientos",
|
||||||
"averageInf": "Tiempo promedio de inferencia"
|
"averageInf": "Tiempo promedio de inferencia"
|
||||||
@@ -249,7 +264,7 @@
|
|||||||
"ffmpegHighCpuUsage": "{{camera}} tiene un uso elevado de CPU por FFmpeg ({{ffmpegAvg}}%)",
|
"ffmpegHighCpuUsage": "{{camera}} tiene un uso elevado de CPU por FFmpeg ({{ffmpegAvg}}%)",
|
||||||
"detectHighCpuUsage": "{{camera}} tiene un uso elevado de CPU por detección ({{detectAvg}}%)",
|
"detectHighCpuUsage": "{{camera}} tiene un uso elevado de CPU por detección ({{detectAvg}}%)",
|
||||||
"healthy": "El sistema está saludable",
|
"healthy": "El sistema está saludable",
|
||||||
"reindexingEmbeddings": "Reindexando incrustaciones ({{processed}}% completado)",
|
"reindexingEmbeddings": "Reindexando empotrados ({{processed}}% completado)",
|
||||||
"detectIsSlow": "{{detect}} es lento ({{speed}} ms)",
|
"detectIsSlow": "{{detect}} es lento ({{speed}} ms)",
|
||||||
"cameraIsOffline": "{{camera}} está desconectada",
|
"cameraIsOffline": "{{camera}} está desconectada",
|
||||||
"detectIsVerySlow": "{{detect}} es muy lento ({{speed}} ms)",
|
"detectIsVerySlow": "{{detect}} es muy lento ({{speed}} ms)",
|
||||||
|
|||||||
@@ -189,7 +189,8 @@
|
|||||||
"id": "Bahasa Indonesia (Indonésien)",
|
"id": "Bahasa Indonesia (Indonésien)",
|
||||||
"ur": "اردو (Ourdou)",
|
"ur": "اردو (Ourdou)",
|
||||||
"hr": "Hrvatski (Croate)",
|
"hr": "Hrvatski (Croate)",
|
||||||
"bs": "Bosanski (Bosnien)"
|
"bs": "Bosanski (Bosnien)",
|
||||||
|
"zhHant": "繁體中文 (chinois traditionnel)"
|
||||||
},
|
},
|
||||||
"appearance": "Apparence",
|
"appearance": "Apparence",
|
||||||
"darkMode": {
|
"darkMode": {
|
||||||
|
|||||||
@@ -36,6 +36,9 @@
|
|||||||
"ask_an": "Cet objet est-il un(e) <code>{{label}}</code> ?",
|
"ask_an": "Cet objet est-il un(e) <code>{{label}}</code> ?",
|
||||||
"ask_a": "Cet objet est-il un(e) <code>{{label}}</code> ?",
|
"ask_a": "Cet objet est-il un(e) <code>{{label}}</code> ?",
|
||||||
"ask_full": "Cet objet est-il un(e) <code>{{translatedLabel}}</code> ?"
|
"ask_full": "Cet objet est-il un(e) <code>{{translatedLabel}}</code> ?"
|
||||||
|
},
|
||||||
|
"toast": {
|
||||||
|
"error": "Impossible d'envoyer à Frigate+. Merci de vérifier votre réseau puis de réessayer."
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -68,7 +71,15 @@
|
|||||||
},
|
},
|
||||||
"success": "Exportation démarrée avec succès. Consultez le fichier sur la page des exportations.",
|
"success": "Exportation démarrée avec succès. Consultez le fichier sur la page des exportations.",
|
||||||
"view": "Vue",
|
"view": "Vue",
|
||||||
"queued": "Exportation en attente. Consultez la progression sur la page des exportations."
|
"queued": "Exportation en attente. Consultez la progression sur la page des exportations.",
|
||||||
|
"batchSuccess_one": "Un export démarré. Ouverture du dossier en cours.",
|
||||||
|
"batchSuccess_many": "{{count}} exports démarrés. Ouverture du dossier en cours.",
|
||||||
|
"batchSuccess_other": "{{count}} exports démarrés. Ouverture du dossier en cours.",
|
||||||
|
"batchPartial": "{{successful}} exports ont démarré sur un total de : {{total}}. Échecs : {{failedCameras}}",
|
||||||
|
"batchFailed": "Échec du démarrage de {{total}} exports. Échecs : {{failedCameras}}",
|
||||||
|
"batchQueuedSuccess_one": "Un export rajouté au traitement. Ouverture du dossier en cours.",
|
||||||
|
"batchQueuedSuccess_many": "{{count}} exports rajoutés au traitement. Ouverture du dossier en cours.",
|
||||||
|
"batchQueuedSuccess_other": "{{count}} exports rajoutés au traitement. Ouverture du dossier en cours."
|
||||||
},
|
},
|
||||||
"select": "Sélectionner",
|
"select": "Sélectionner",
|
||||||
"name": {
|
"name": {
|
||||||
@@ -107,7 +118,14 @@
|
|||||||
"queueingButton": "Mise en file d'attente des exports...",
|
"queueingButton": "Mise en file d'attente des exports...",
|
||||||
"exportButton_one": "Exporter {{count}} caméra",
|
"exportButton_one": "Exporter {{count}} caméra",
|
||||||
"exportButton_many": "Exporter {{count}} caméras",
|
"exportButton_many": "Exporter {{count}} caméras",
|
||||||
"exportButton_other": "Exporter {{count}} caméras"
|
"exportButton_other": "Exporter {{count}} caméras",
|
||||||
|
"searchOrSelectGroup": "Chercher ou sélectionner un groupe de caméras...",
|
||||||
|
"selectAll": "Sélectionner toutes les cameras",
|
||||||
|
"clearSelection": "Effacer la sélection",
|
||||||
|
"selectWithActivity": "Caméras avec des objets suivis",
|
||||||
|
"selectGroup": "Sélectionner un groupe",
|
||||||
|
"noMatchingCameras": "Aucune caméra ne correspond à votre recherche",
|
||||||
|
"selectedCount": "{{selected}} / {{total}} sélectionnées"
|
||||||
},
|
},
|
||||||
"multi": {
|
"multi": {
|
||||||
"title_one": "Export {{count}} revue",
|
"title_one": "Export {{count}} revue",
|
||||||
|
|||||||
@@ -26,7 +26,9 @@
|
|||||||
"points_many": "{{count}} points",
|
"points_many": "{{count}} points",
|
||||||
"points_other": "{{count}} points",
|
"points_other": "{{count}} points",
|
||||||
"undo": "Annuler le dernier point",
|
"undo": "Annuler le dernier point",
|
||||||
"reset": "Réinitialiser le polygone"
|
"reset": "Réinitialiser le polygone",
|
||||||
|
"drawMode": "Dessiner",
|
||||||
|
"moveMode": "Déplacer"
|
||||||
},
|
},
|
||||||
"motionHeatmapLabel": "Carte thermique des mouvements",
|
"motionHeatmapLabel": "Carte thermique des mouvements",
|
||||||
"dialog": {
|
"dialog": {
|
||||||
@@ -36,6 +38,14 @@
|
|||||||
},
|
},
|
||||||
"timeRange": {
|
"timeRange": {
|
||||||
"title": "Plage de recherche",
|
"title": "Plage de recherche",
|
||||||
"start": "Plage de recherche"
|
"start": "Début de la plage de recherche",
|
||||||
|
"end": "Fin de la plage de recherche"
|
||||||
|
},
|
||||||
|
"settings": {
|
||||||
|
"title": "Paramètres de recherche",
|
||||||
|
"parallelMode": "Mode parallèle",
|
||||||
|
"parallelModeDesc": "Scanner plusieurs plages d'enregistrement simultanément (plus rapide ; nécessite plus de ressources de décodage)",
|
||||||
|
"threshold": "Seuil de sensitivité",
|
||||||
|
"thresholdDesc": "Des valeurs basses détectent de plus petits changements (1-255)"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -112,7 +112,7 @@
|
|||||||
},
|
},
|
||||||
"gpuTemperature": "Température du GPU",
|
"gpuTemperature": "Température du GPU",
|
||||||
"npuTemperature": "Température du NPU",
|
"npuTemperature": "Température du NPU",
|
||||||
"gpuCompute": "Calcul / Encodage GPU"
|
"gpuCompute": "Calcul GPU / Encodage"
|
||||||
},
|
},
|
||||||
"otherProcesses": {
|
"otherProcesses": {
|
||||||
"title": "Autres processus",
|
"title": "Autres processus",
|
||||||
@@ -122,7 +122,7 @@
|
|||||||
"go2rtc": "go2rtc",
|
"go2rtc": "go2rtc",
|
||||||
"recording": "enregistrement",
|
"recording": "enregistrement",
|
||||||
"review_segment": "Segment d'activité",
|
"review_segment": "Segment d'activité",
|
||||||
"embeddings": "embeddings",
|
"embeddings": "intégrations",
|
||||||
"audio_detector": "détecteur audio"
|
"audio_detector": "détecteur audio"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -173,7 +173,22 @@
|
|||||||
"error": "Erreur : {{error}}",
|
"error": "Erreur : {{error}}",
|
||||||
"codec": "Codec :",
|
"codec": "Codec :",
|
||||||
"video": "Vidéo :",
|
"video": "Vidéo :",
|
||||||
"aspectRatio": "rapport d'aspect"
|
"aspectRatio": "rapport d'aspect",
|
||||||
|
"keyframes": {
|
||||||
|
"title": "Analyse par image clef",
|
||||||
|
"analyzing": "Analyse des images clefs... {{seconds}} secondes restantes",
|
||||||
|
"stillAnalyzing": "Analyse des images clefs toujours en cours ...",
|
||||||
|
"recordStream": "Flux d'enregistrement :",
|
||||||
|
"keyframeCount": "Images clefs observées :",
|
||||||
|
"observedDuration": "Durée observée :",
|
||||||
|
"gap": "Écart en images clefs (min / moy / max) :",
|
||||||
|
"segmentLength": "Durée du segment d'enregistrement :",
|
||||||
|
"ok": "Images clefs chaque ~{{seconds}}s, convient à l'enregistrement et au visionnement.",
|
||||||
|
"warning": "Images clefs fragmentées ou variables (plus grand écart d'environ {{seconds}}s), vraisemblablement un codec intelligent (H.264+/H.265+), non-recommendé.",
|
||||||
|
"error": "L'écart en images clefs (~{{seconds}}) dépasse la longueur du segment d'enregistrement ({{segmentTime}}). Certains segments n'ont peut-être pas de clef, ce qui corrompt la lecture. Désactiver le codec intelligent/+ sur la caméra ou raccourcir son intervalle en images clefs.",
|
||||||
|
"unknown": "Impossible de déterminer l'espacement en images clefs.",
|
||||||
|
"recordDisabled": "L'enregistrement est désactivé pour cette caméra."
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"framesAndDetections": "Images / Détections",
|
"framesAndDetections": "Images / Détections",
|
||||||
"label": {
|
"label": {
|
||||||
@@ -196,7 +211,7 @@
|
|||||||
"overview": "Vue d'ensemble",
|
"overview": "Vue d'ensemble",
|
||||||
"toast": {
|
"toast": {
|
||||||
"success": {
|
"success": {
|
||||||
"copyToClipboard": "Données de la sonde copiées dans le presse-papiers"
|
"copyToClipboard": "Données de la sonde copiées dans le presse-papiers."
|
||||||
},
|
},
|
||||||
"error": {
|
"error": {
|
||||||
"unableToProbeCamera": "Impossible d'interroger la caméra : {{errorMessage}}"
|
"unableToProbeCamera": "Impossible d'interroger la caméra : {{errorMessage}}"
|
||||||
@@ -212,6 +227,9 @@
|
|||||||
"expectedFps": "IPS attendues",
|
"expectedFps": "IPS attendues",
|
||||||
"reconnectsLastHour": "Reconnexions (dernière heure)",
|
"reconnectsLastHour": "Reconnexions (dernière heure)",
|
||||||
"stallsLastHour": "Baisses de qualité (dernière heure)"
|
"stallsLastHour": "Baisses de qualité (dernière heure)"
|
||||||
|
},
|
||||||
|
"noCameras": {
|
||||||
|
"title": "Aucune caméra trouvée"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"lastRefreshed": "Dernier rafraichissement : ",
|
"lastRefreshed": "Dernier rafraichissement : ",
|
||||||
|
|||||||
@@ -81,7 +81,8 @@
|
|||||||
"thisMonth": "החודש",
|
"thisMonth": "החודש",
|
||||||
"inProgress": "בתהליך",
|
"inProgress": "בתהליך",
|
||||||
"invalidStartTime": "זמן התחלה לא תקין",
|
"invalidStartTime": "זמן התחלה לא תקין",
|
||||||
"invalidEndTime": "זמן סיום לא תקין"
|
"invalidEndTime": "זמן סיום לא תקין",
|
||||||
|
"never": "אף פעם"
|
||||||
},
|
},
|
||||||
"unit": {
|
"unit": {
|
||||||
"speed": {
|
"speed": {
|
||||||
@@ -146,7 +147,8 @@
|
|||||||
"download": "הורדה",
|
"download": "הורדה",
|
||||||
"info": "מידע",
|
"info": "מידע",
|
||||||
"next": "הבא",
|
"next": "הבא",
|
||||||
"continue": "המשך"
|
"continue": "המשך",
|
||||||
|
"add": "להוסיף"
|
||||||
},
|
},
|
||||||
"menu": {
|
"menu": {
|
||||||
"system": "מערכת",
|
"system": "מערכת",
|
||||||
|
|||||||
@@ -426,5 +426,12 @@
|
|||||||
"chink": "Csörömpölés",
|
"chink": "Csörömpölés",
|
||||||
"shatter": "Összetörés",
|
"shatter": "Összetörés",
|
||||||
"field_recording": "Helyszíni felvétel",
|
"field_recording": "Helyszíni felvétel",
|
||||||
"noise": "Zaj"
|
"noise": "Zaj",
|
||||||
|
"liquid": "Folyadék",
|
||||||
|
"splash": "Csobbanás",
|
||||||
|
"slosh": "Löttyenés",
|
||||||
|
"trickle": "Csörgedezés",
|
||||||
|
"gush": "Folyás",
|
||||||
|
"stir": "Kavarás",
|
||||||
|
"thump": "Puffanás"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -14,5 +14,6 @@
|
|||||||
"attachment_chip_remove": "Melléklet eltávolítása",
|
"attachment_chip_remove": "Melléklet eltávolítása",
|
||||||
"open_in_explore": "Megnyitás Böngészőben",
|
"open_in_explore": "Megnyitás Böngészőben",
|
||||||
"attachment_picker_paste_label": "Vagy illeszd be az esemény ID-t",
|
"attachment_picker_paste_label": "Vagy illeszd be az esemény ID-t",
|
||||||
"attachment_picker_attach": "Melléklet"
|
"attachment_picker_attach": "Melléklet",
|
||||||
|
"arguments": "Argumentumok:"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -189,7 +189,11 @@
|
|||||||
"face_recognition": "Arcfelismerés",
|
"face_recognition": "Arcfelismerés",
|
||||||
"plate_recognition": "Rendszám Felismerés",
|
"plate_recognition": "Rendszám Felismerés",
|
||||||
"yolov9_plate_detection_speed": "YOLOv9 Rendszám Felismerés Sebesség",
|
"yolov9_plate_detection_speed": "YOLOv9 Rendszám Felismerés Sebesség",
|
||||||
"yolov9_plate_detection": "YOLOv9 Rendszám Észlelés"
|
"yolov9_plate_detection": "YOLOv9 Rendszám Észlelés",
|
||||||
|
"classification_events_per_second": "{{name}} Osztályozási események másodpercenként",
|
||||||
|
"classification_speed": "{{name}} Osztályozási sebesség",
|
||||||
|
"classification": "{{name}} Osztályozás",
|
||||||
|
"object_description_events_per_second": "Objektum leírás"
|
||||||
},
|
},
|
||||||
"infPerSecond": "Inferencia Per Másodperc",
|
"infPerSecond": "Inferencia Per Másodperc",
|
||||||
"title": "Kiegészítések"
|
"title": "Kiegészítések"
|
||||||
|
|||||||
@@ -126,7 +126,8 @@
|
|||||||
"ur": "اردو (Urdu)",
|
"ur": "اردو (Urdu)",
|
||||||
"withSystem": {
|
"withSystem": {
|
||||||
"label": "Gunakan pengaturan sistem untuk bahasa"
|
"label": "Gunakan pengaturan sistem untuk bahasa"
|
||||||
}
|
},
|
||||||
|
"zhHant": "繁體中文 (Tionghoa Tradisional)"
|
||||||
},
|
},
|
||||||
"appearance": "Tampilan",
|
"appearance": "Tampilan",
|
||||||
"darkMode": {
|
"darkMode": {
|
||||||
|
|||||||
@@ -42,12 +42,49 @@
|
|||||||
"stream": "Siaran",
|
"stream": "Siaran",
|
||||||
"placeholder": "Pilih stream",
|
"placeholder": "Pilih stream",
|
||||||
"streamMethod": {
|
"streamMethod": {
|
||||||
"label": "Metode Streaming"
|
"label": "Metode Streaming",
|
||||||
|
"placeholder": "Pilih satu metode streaming",
|
||||||
|
"method": {
|
||||||
|
"noStreaming": {
|
||||||
|
"label": "Tidak Streaming",
|
||||||
|
"desc": "Gambar kamera hanya diperbarui sekali per menit dan tidak akan ada live streaming."
|
||||||
|
},
|
||||||
|
"smartStreaming": {
|
||||||
|
"label": "Streaming cerdas (disarankan)",
|
||||||
|
"desc": "Streaming cerdas akan memperbarui gambar kamera sekali per menit saat tidak ada aktivitas yang terdeteksi untuk menghemat bandwidth dan sumber daya. Ketika aktivitas terdeteksi, gambar akan otomatis beralih ke live stream."
|
||||||
|
},
|
||||||
|
"continuousStreaming": {
|
||||||
|
"desc": {
|
||||||
|
"title": "Kamera akan selalu live stream selama muncul di dashboard, meskipun tidak ada aktivitas yang terdeteksi.",
|
||||||
|
"warning": "Streaming Terus Menerus dapat menyebabkan penggunaan bandwidth yang tinggi dan masalah performa. Gunakan dengan hati-hati."
|
||||||
|
},
|
||||||
|
"label": "Streaming Terus Menerus"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"compatibilityMode": {
|
||||||
|
"label": "Mode Kompatibilitas",
|
||||||
|
"desc": "Aktifkan opsi ini hanya jika live stream kamera Anda menampilkan artefak warna dan memiliki garis diagonal di sisi kanan gambar."
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
},
|
||||||
|
"showAll": "Tampilkan semua grup kamera",
|
||||||
|
"showLess": "Lebih sedikit",
|
||||||
|
"editGroups": "Sunting Grup Kamera"
|
||||||
},
|
},
|
||||||
"debug": {
|
"debug": {
|
||||||
"boundingBox": "Batas Kotak"
|
"boundingBox": "Batas Kotak",
|
||||||
|
"options": {
|
||||||
|
"label": "Pengaturan",
|
||||||
|
"title": "Opsi",
|
||||||
|
"showOptions": "Lihat Opsi",
|
||||||
|
"hideOptions": "Sembunyikan Opsi"
|
||||||
|
},
|
||||||
|
"zones": "Zona",
|
||||||
|
"motion": "Gerakan",
|
||||||
|
"regions": "Wilayah",
|
||||||
|
"timestamp": "Timestamp",
|
||||||
|
"mask": "Masker",
|
||||||
|
"paths": "Path"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -52,12 +52,73 @@
|
|||||||
"export": "Ekspor",
|
"export": "Ekspor",
|
||||||
"selectOrExport": "Pilih atau Ekspor",
|
"selectOrExport": "Pilih atau Ekspor",
|
||||||
"toast": {
|
"toast": {
|
||||||
"success": "Berhasil memulai ekspor. Lihat file pada halaman ekspor."
|
"success": "Berhasil memulai ekspor. Lihat file pada halaman ekspor.",
|
||||||
}
|
"queued": "Ekspor diantrekan. Lihat progres di halaman ekspor.",
|
||||||
|
"view": "Melihat",
|
||||||
|
"batchSuccess_other": "{{count}} Ekspor dimulai. Membuka kasusnya sekarang.",
|
||||||
|
"batchPartial": "Ekspor berhasil dimulai sebanyak {{successful}} dari total {{total}} ekspor. Kamera yang gagal: {{failedCameras}}",
|
||||||
|
"batchFailed": "Gagal memulai ekspor sebanyak {{total}}. Kamera yang gagal: {{failedCameras}}"
|
||||||
|
},
|
||||||
|
"case": {
|
||||||
|
"newCaseOption": "Membuat Kasus Baru",
|
||||||
|
"newCaseNamePlaceholder": "Nama Kasus Baru",
|
||||||
|
"newCaseDescriptionPlaceholder": "Deskripsi Kasus",
|
||||||
|
"label": "Kasus",
|
||||||
|
"nonAdminHelp": "Kasus Baru akan Dibuat untuk Ekspor ini.",
|
||||||
|
"placeholder": "Pilih Kasus"
|
||||||
|
},
|
||||||
|
"tabs": {
|
||||||
|
"export": "Kamera Tunggal",
|
||||||
|
"multiCamera": "Multi Kamera"
|
||||||
|
},
|
||||||
|
"multiCamera": {
|
||||||
|
"timeRange": "Rentang Waktu",
|
||||||
|
"selectFromTimeline": "Pilih dari Timeline",
|
||||||
|
"cameraSelection": "Kamera",
|
||||||
|
"checkingActivity": "Memeriksa Aktivitas Kamera...",
|
||||||
|
"noCameras": "Tidak ada Kamera Tersedia",
|
||||||
|
"detectionCount_other": "{{count}} Objek terlacak",
|
||||||
|
"nameLabel": "Nama Ekspor",
|
||||||
|
"exportButton_other": "Ekspor {{count}} kamera",
|
||||||
|
"cameraSelectionHelp": "Kamera dengan objek yang dilacak dalam rentang waktu ini telah dipilih sebelumnya",
|
||||||
|
"queueingButton": "Mengantrekan ekspor...",
|
||||||
|
"clearSelection": "Hapus pilihan",
|
||||||
|
"selectWithActivity": "Kamera dengan objek yang dilacak",
|
||||||
|
"selectGroup": "Pilih grup",
|
||||||
|
"noMatchingCameras": "Tidak ada kamera yang sesuai dengan pencarian Anda",
|
||||||
|
"selectedCount": "{{terpilih}} / {{total}} terpilih",
|
||||||
|
"namePlaceholder": "Nama dasar opsional untuk ekspor ini"
|
||||||
|
},
|
||||||
|
"multi": {
|
||||||
|
"title_other": "Ekspor {{count}} Ulasan",
|
||||||
|
"toast": {
|
||||||
|
"startedNoCase_other": "{{count}} Ekspor Dimulai.",
|
||||||
|
"started_other": "{{count}} ekspor dimulai. Membuka kasusnya sekarang.",
|
||||||
|
"partial": "Memulai {{successful}} dari {{total}} ekspor. Gagal: {{failedItems}}",
|
||||||
|
"failed": "Gagal memulai {{total}} ekspor. Gagal: {{failedItems}}"
|
||||||
|
},
|
||||||
|
"description": "Ekspor setiap ulasan yang dipilih. Semua Ekspor akan dikelompokkan dalam satu kasus.",
|
||||||
|
"descriptionNoCase": "Ekspor setiap ulasan yang dipilih.",
|
||||||
|
"exportButton_other": "Ekspor {{count}} ulasan",
|
||||||
|
"exportingButton": "Mengekspor...",
|
||||||
|
"caseNamePlaceholder": "Ekspor tinjauan - {{tanggal}}"
|
||||||
|
},
|
||||||
|
"queueing": "Mengantrekan Ekspor..."
|
||||||
},
|
},
|
||||||
"search": {
|
"search": {
|
||||||
"saveSearch": {
|
"saveSearch": {
|
||||||
"overwrite": "{{searchName}} sudah ada. Menyimpan akan menimpa file yang sudah ada."
|
"overwrite": "{{searchName}} sudah ada. Menyimpan akan menimpa file yang sudah ada."
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"streaming": {
|
||||||
|
"restreaming": {
|
||||||
|
"disabled": "Fitur restreaming tidak diaktifkan untuk kamera ini.",
|
||||||
|
"desc": {
|
||||||
|
"title": "Instal go2rtc untuk opsi tampilan langsung dan audio tambahan untuk kamera ini."
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"showStats": {
|
||||||
|
"label": "Tampilkan statistik streaming"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -132,53 +132,111 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"mqtt": {
|
"mqtt": {
|
||||||
"label": "MQTT"
|
"label": "MQTT",
|
||||||
|
"description": "Impostazioni di pubblicazione delle immagini via MQTT.",
|
||||||
|
"enabled": {
|
||||||
|
"label": "Invia immagine",
|
||||||
|
"description": "Abilita la pubblicazione delle istantanee dell'immagine per gli oggetti sui topic MQTT per questa telecamera."
|
||||||
|
},
|
||||||
|
"timestamp": {
|
||||||
|
"label": "Aggiungi timestamp",
|
||||||
|
"description": "Sovraimprime un timestamp sulle immagini pubblicate su MQTT."
|
||||||
|
},
|
||||||
|
"bounding_box": {
|
||||||
|
"label": "Aggiungi riquadro di delimitazione",
|
||||||
|
"description": "Disegna i riquadri di delimitazione sulle immagini pubblicate tramite MQTT."
|
||||||
|
},
|
||||||
|
"crop": {
|
||||||
|
"label": "Ritaglia immagine",
|
||||||
|
"description": "Ritaglia le immagini pubblicate su MQTT in base al riquadro di delimitazione dell'oggetto rilevato."
|
||||||
|
},
|
||||||
|
"height": {
|
||||||
|
"label": "Altezza immagine",
|
||||||
|
"description": "Altezza (in pixel) a cui ridimensionare le immagini pubblicate tramite MQTT."
|
||||||
|
},
|
||||||
|
"required_zones": {
|
||||||
|
"label": "Zone richieste",
|
||||||
|
"description": "Zone in cui un oggetto deve entrare affinché venga pubblicata un'immagine MQTT."
|
||||||
|
},
|
||||||
|
"quality": {
|
||||||
|
"label": "Qualità JPEG",
|
||||||
|
"description": "Qualità JPEG per le immagini pubblicate su MQTT (0-100)."
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"onvif": {
|
"onvif": {
|
||||||
"tls_insecure": {
|
"tls_insecure": {
|
||||||
"label": "Disabilita verifica TLS"
|
"label": "Disabilita verifica TLS",
|
||||||
|
"description": "Salta la verifica TLS e disabilita l'autenticazione digest per ONVIF (non sicuro; utilizzare solo in reti sicure)."
|
||||||
},
|
},
|
||||||
"profile": {
|
"profile": {
|
||||||
"label": "Profilo ONVIF"
|
"label": "Profilo ONVIF",
|
||||||
|
"description": "Profilo multimediale ONVIF specifico da utilizzare per il controllo PTZ, identificato tramite token o nome. Se non impostato, viene selezionato automaticamente il primo profilo con una configurazione PTZ valida."
|
||||||
},
|
},
|
||||||
"autotracking": {
|
"autotracking": {
|
||||||
"label": "Tracciamento automatico",
|
"label": "Tracciamento automatico",
|
||||||
"enabled": {
|
"enabled": {
|
||||||
"label": "Abilita il tracciamento automatico"
|
"label": "Abilita il tracciamento automatico",
|
||||||
|
"description": "Abilita o disabilita il tracciamento automatico della telecamera PTZ per gli oggetti rilevati."
|
||||||
},
|
},
|
||||||
"calibrate_on_startup": {
|
"calibrate_on_startup": {
|
||||||
"label": "Calibra all'avvio"
|
"label": "Calibra all'avvio",
|
||||||
|
"description": "Misura la velocità dei motori PTZ all'avvio per migliorare la precisione del tracciamento. Frigate aggiornerà la configurazione con i valori di movement_weights dopo la calibrazione."
|
||||||
},
|
},
|
||||||
"zooming": {
|
"zooming": {
|
||||||
"label": "Modalità ingrandimento"
|
"label": "Modalità ingrandimento",
|
||||||
|
"description": "Controlla il comportamento dello zoom: disabled (solo pan/tilt), absolute (più compatibile) o relative (pan/tilt/zoom simultanei)."
|
||||||
},
|
},
|
||||||
"zoom_factor": {
|
"zoom_factor": {
|
||||||
"label": "Fattore di ingrandimento"
|
"label": "Fattore di ingrandimento",
|
||||||
|
"description": "Controlla il livello di zoom sugli oggetti tracciati. Valori più bassi mantengono una porzione maggiore della scena visibile; valori più alti aumentano lo zoom ma potrebbero far perdere il tracciamento. Valori compresi tra 0.1 e 0.75."
|
||||||
},
|
},
|
||||||
"track": {
|
"track": {
|
||||||
"label": "Oggetti tracciati",
|
"label": "Oggetti tracciati",
|
||||||
"description": "Elenco dei tipi di oggetto che dovrebbero attivare il tracciamento automatico."
|
"description": "Elenco dei tipi di oggetto che dovrebbero attivare il tracciamento automatico."
|
||||||
},
|
},
|
||||||
"required_zones": {
|
"required_zones": {
|
||||||
"label": "Zone richieste"
|
"label": "Zone richieste",
|
||||||
|
"description": "Gli oggetti devono entrare in una di queste zone prima che inizi il tracciamento automatico."
|
||||||
},
|
},
|
||||||
"timeout": {
|
"timeout": {
|
||||||
"label": "Scadenza di ritorno",
|
"label": "Scadenza di ritorno",
|
||||||
"description": "Attendi questo numero di secondi dopo aver perso il tracciamento prima di riportare la telecamera nella posizione preimpostata."
|
"description": "Attendi questo numero di secondi dopo aver perso il tracciamento prima di riportare la telecamera nella posizione preimpostata."
|
||||||
},
|
},
|
||||||
"movement_weights": {
|
"movement_weights": {
|
||||||
"description": "Valori di calibrazione generati automaticamente dalla calibrazione della telecamera. Non modificare manualmente."
|
"description": "Valori di calibrazione generati automaticamente dalla calibrazione della telecamera. Non modificare manualmente.",
|
||||||
|
"label": "Pesi del movimento"
|
||||||
},
|
},
|
||||||
"enabled_in_config": {
|
"enabled_in_config": {
|
||||||
"label": "Stato originale del tracciamento automatico"
|
"label": "Stato originale del tracciamento automatico",
|
||||||
|
"description": "Campo interno per tracciare se il tracciamento automatico era abilitato nella configurazione."
|
||||||
|
},
|
||||||
|
"description": "Traccia automaticamente gli oggetti in movimento e li mantiene centrati nell'inquadratura utilizzando i movimenti della telecamera PTZ.",
|
||||||
|
"return_preset": {
|
||||||
|
"label": "Preset di ritorno",
|
||||||
|
"description": "Nome del preset ONVIF configurato nel firmware della telecamera a cui ritornare al termine del tracciamento."
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"ignore_time_mismatch": {
|
"ignore_time_mismatch": {
|
||||||
"label": "Ignora la discrepanza oraria"
|
"label": "Ignora la discrepanza oraria",
|
||||||
|
"description": "Ignora le differenze di sincronizzazione oraria tra la telecamera e il server Frigate per la comunicazione ONVIF."
|
||||||
},
|
},
|
||||||
"label": "ONVIF",
|
"label": "ONVIF",
|
||||||
"port": {
|
"port": {
|
||||||
"label": "Porta ONVIF"
|
"label": "Porta ONVIF",
|
||||||
|
"description": "Numero di porta per il servizio ONVIF."
|
||||||
|
},
|
||||||
|
"description": "Impostazioni della connessione ONVIF e del tracciamento automatico PTZ per questa telecamera.",
|
||||||
|
"host": {
|
||||||
|
"label": "Host ONVIF",
|
||||||
|
"description": "Host (e schema opzionale) per il servizio ONVIF di questa telecamera."
|
||||||
|
},
|
||||||
|
"user": {
|
||||||
|
"label": "Nome utente ONVIF",
|
||||||
|
"description": "Nome utente per l'autenticazione ONVIF; alcuni dispositivi richiedono un utente amministratore per l'ONVIF."
|
||||||
|
},
|
||||||
|
"password": {
|
||||||
|
"label": "Password ONVIF",
|
||||||
|
"description": "Password per l'autenticazione ONVIF."
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"detect": {
|
"detect": {
|
||||||
@@ -363,20 +421,20 @@
|
|||||||
"description": "Numero massimo di processi di esportazione da elaborare contemporaneamente."
|
"description": "Numero massimo di processi di esportazione da elaborare contemporaneamente."
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"description": "Impostazioni di registrazione e conservazione per questa videocamera.",
|
"description": "Impostazioni di registrazione e conservazione per questa telecamera.",
|
||||||
"enabled": {
|
"enabled": {
|
||||||
"label": "Abilita Registrazione",
|
"label": "Abilita registrazione",
|
||||||
"description": "Attiva o disattiva la registrazione per questa telecamera."
|
"description": "Attiva o disattiva la registrazione per questa telecamera."
|
||||||
},
|
},
|
||||||
"expire_interval": {
|
"expire_interval": {
|
||||||
"label": "Intervallo pulizia registrazioni",
|
"label": "Intervallo di pulizia registrazioni",
|
||||||
"description": "Minuti tra i cicli di pulizia che rimuovono i segmenti di registrazione scaduti."
|
"description": "Minuti tra i cicli di pulizia che rimuovono i segmenti di registrazione scaduti."
|
||||||
},
|
},
|
||||||
"continuous": {
|
"continuous": {
|
||||||
"label": "Conservazione continua",
|
"label": "Conservazione continua",
|
||||||
"description": "Numero di giorni per cui conservare le registrazioni, indipendentemente dagli oggetti tracciati o dal movimento. Impostare su 0 se si desidera conservare solo le registrazioni relative agli avvisi e ai rilevamenti.",
|
"description": "Numero di giorni per cui conservare le registrazioni, indipendentemente dagli oggetti tracciati o dal movimento. Impostare su 0 se si desidera conservare solo le registrazioni relative agli avvisi e ai rilevamenti.",
|
||||||
"days": {
|
"days": {
|
||||||
"label": "Giorni di Conservazione",
|
"label": "Giorni di conservazione",
|
||||||
"description": "Numero di giorni di conservazione delle registrazioni."
|
"description": "Numero di giorni di conservazione delle registrazioni."
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -384,7 +442,7 @@
|
|||||||
"label": "Conservazione movimento",
|
"label": "Conservazione movimento",
|
||||||
"description": "Numero di giorni per cui conservare le registrazioni attivate dal movimento, indipendentemente dagli oggetti tracciati. Impostare su 0 se si desidera conservare solo le registrazioni relative ad allarmi e rilevamenti.",
|
"description": "Numero di giorni per cui conservare le registrazioni attivate dal movimento, indipendentemente dagli oggetti tracciati. Impostare su 0 se si desidera conservare solo le registrazioni relative ad allarmi e rilevamenti.",
|
||||||
"days": {
|
"days": {
|
||||||
"label": "Giorni di Conservazione",
|
"label": "Giorni di conservazione",
|
||||||
"description": "Numero di giorni di conservazione delle registrazioni."
|
"description": "Numero di giorni di conservazione delle registrazioni."
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -392,12 +450,12 @@
|
|||||||
"label": "Conservazione rilevamento",
|
"label": "Conservazione rilevamento",
|
||||||
"description": "Impostazioni relative alla conservazione delle registrazioni per gli eventi di rilevamento, comprese le durate prima e dopo l'acquisizione.",
|
"description": "Impostazioni relative alla conservazione delle registrazioni per gli eventi di rilevamento, comprese le durate prima e dopo l'acquisizione.",
|
||||||
"pre_capture": {
|
"pre_capture": {
|
||||||
"label": "Secondi di pre-acquisizione",
|
"label": "Secondi prima della cattura",
|
||||||
"description": "Numero di secondi precedenti l'evento di rilevamento da includere nella registrazione."
|
"description": "Numero di secondi precedenti all'evento di rilevamento da includere nella registrazione."
|
||||||
},
|
},
|
||||||
"post_capture": {
|
"post_capture": {
|
||||||
"label": "Secondi di post-acquisizione",
|
"label": "Secondi dopo la cattura",
|
||||||
"description": "Numero di secondi successivi l'evento di rilevamento da includere nella registrazione."
|
"description": "Numero di secondi successivi all'evento di rilevamento da includere nella registrazione."
|
||||||
},
|
},
|
||||||
"retain": {
|
"retain": {
|
||||||
"label": "Conservazione eventi",
|
"label": "Conservazione eventi",
|
||||||
@@ -414,13 +472,13 @@
|
|||||||
},
|
},
|
||||||
"alerts": {
|
"alerts": {
|
||||||
"label": "Conservazione avvisi",
|
"label": "Conservazione avvisi",
|
||||||
"description": "Impostazioni di conservazione delle registrazioni per gli eventi di avviso, incluse le durate di pre e post-acquisizione.",
|
"description": "Impostazioni di conservazione delle registrazioni per gli eventi di avviso, incluse le durate prima e dopo la cattura.",
|
||||||
"pre_capture": {
|
"pre_capture": {
|
||||||
"label": "Secondi di pre-acquisizione",
|
"label": "Secondi prima della cattura",
|
||||||
"description": "Numero di secondi antecedenti all'evento di rilevamento da includere nella registrazione."
|
"description": "Numero di secondi precedenti all'evento di rilevamento da includere nella registrazione."
|
||||||
},
|
},
|
||||||
"post_capture": {
|
"post_capture": {
|
||||||
"label": "Secondi di post-acquisizione",
|
"label": "Secondi dopo la cattura",
|
||||||
"description": "Numero di secondi successivi all'evento di rilevamento da includere nella registrazione."
|
"description": "Numero di secondi successivi all'evento di rilevamento da includere nella registrazione."
|
||||||
},
|
},
|
||||||
"retain": {
|
"retain": {
|
||||||
@@ -461,7 +519,40 @@
|
|||||||
"description": "Sovraimprime un timestamp sulle istantanee provenienti dalle API."
|
"description": "Sovraimprime un timestamp sulle istantanee provenienti dalle API."
|
||||||
},
|
},
|
||||||
"bounding_box": {
|
"bounding_box": {
|
||||||
"label": "Sovrimpressione riquadro di delimitazione"
|
"label": "Sovrimpressione riquadro di delimitazione",
|
||||||
|
"description": "Disegna i riquadri di delimitazione per gli oggetti tracciati sulle istantanee provenienti dalle API."
|
||||||
|
},
|
||||||
|
"crop": {
|
||||||
|
"label": "Ritaglia istantanea",
|
||||||
|
"description": "Ritaglia le istantanee provenienti dalle API in base al riquadro di delimitazione dell'oggetto rilevato."
|
||||||
|
},
|
||||||
|
"required_zones": {
|
||||||
|
"label": "Zone richieste",
|
||||||
|
"description": "Zone in cui un oggetto deve entrare affinché venga salvata un'istantanea."
|
||||||
|
},
|
||||||
|
"height": {
|
||||||
|
"label": "Altezza istantanea",
|
||||||
|
"description": "Altezza (in pixel) a cui ridimensionare le istantanee provenienti dalle API; lascia vuoto per mantenere la dimensione originale."
|
||||||
|
},
|
||||||
|
"retain": {
|
||||||
|
"label": "Conservazione istantanee",
|
||||||
|
"description": "Impostazioni di conservazione per le istantanee, inclusi i giorni predefiniti e le eccezioni per singolo oggetto.",
|
||||||
|
"default": {
|
||||||
|
"label": "Conservazione predefinita",
|
||||||
|
"description": "Numero predefinito di giorni per cui conservare le istantanee."
|
||||||
|
},
|
||||||
|
"mode": {
|
||||||
|
"label": "Modalità di conservazione",
|
||||||
|
"description": "Modalità di conservazione: tutti (salva tutti i segmenti), movimento (salva i segmenti con movimento) o oggetti_attivi (salva i segmenti con oggetti attivi)."
|
||||||
|
},
|
||||||
|
"objects": {
|
||||||
|
"label": "Conservazione oggetti",
|
||||||
|
"description": "Eccezioni per singolo oggetto relativi ai giorni di conservazione delle istantanee."
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"quality": {
|
||||||
|
"label": "Qualità istantanee",
|
||||||
|
"description": "Qualità di codifica per le istantanee salvate (0-100)."
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"motion": {
|
"motion": {
|
||||||
@@ -492,10 +583,12 @@
|
|||||||
"description": "Se impostato su un valore compreso tra 0.0 e 110, e se in un singolo fotogramma cambia una porzione dell'immagine superiore a tale frazione, il rilevatore non restituirà alcun riquadro di movimento e si ricalibrerà immediatamente. Ciò consente di risparmiare risorse della CPU e ridurre i falsi positivi in caso di fulmini, temporali, ecc., ma potrebbe comportare la mancata rilevazione di eventi reali, come ad esempio il tracciamento automatico di un oggetto da parte di una telecamera PTZ. Il compromesso consiste nel scegliere se sacrificare alcuni megabyte di registrazioni o rivedere un paio di brevi video. Lasciare non impostato (Nessuno) per disabilitare questa funzione."
|
"description": "Se impostato su un valore compreso tra 0.0 e 110, e se in un singolo fotogramma cambia una porzione dell'immagine superiore a tale frazione, il rilevatore non restituirà alcun riquadro di movimento e si ricalibrerà immediatamente. Ciò consente di risparmiare risorse della CPU e ridurre i falsi positivi in caso di fulmini, temporali, ecc., ma potrebbe comportare la mancata rilevazione di eventi reali, come ad esempio il tracciamento automatico di un oggetto da parte di una telecamera PTZ. Il compromesso consiste nel scegliere se sacrificare alcuni megabyte di registrazioni o rivedere un paio di brevi video. Lasciare non impostato (Nessuno) per disabilitare questa funzione."
|
||||||
},
|
},
|
||||||
"delta_alpha": {
|
"delta_alpha": {
|
||||||
"description": "Fattore di fusione alfa utilizzato nel calcolo della differenza tra fotogrammi per il calcolo del movimento."
|
"description": "Fattore di fusione alfa utilizzato nel calcolo della differenza tra fotogrammi per il calcolo del movimento.",
|
||||||
|
"label": "Delta alfa"
|
||||||
},
|
},
|
||||||
"frame_alpha": {
|
"frame_alpha": {
|
||||||
"description": "Valore alfa utilizzato durante la fusione dei fotogrammi per la preelaborazione del movimento."
|
"description": "Valore alfa utilizzato durante la fusione dei fotogrammi per la preelaborazione del movimento.",
|
||||||
|
"label": "Frame alfa"
|
||||||
},
|
},
|
||||||
"frame_height": {
|
"frame_height": {
|
||||||
"label": "Altezza del frame",
|
"label": "Altezza del frame",
|
||||||
@@ -510,7 +603,8 @@
|
|||||||
"description": "Secondi di attesa dopo l'ultimo movimento prima di pubblicare uno stato 'off' MQTT."
|
"description": "Secondi di attesa dopo l'ultimo movimento prima di pubblicare uno stato 'off' MQTT."
|
||||||
},
|
},
|
||||||
"enabled_in_config": {
|
"enabled_in_config": {
|
||||||
"description": "Indica se il rilevamento del movimento era abilitato nella configurazione statica originale."
|
"description": "Indica se il rilevamento del movimento era abilitato nella configurazione statica originale.",
|
||||||
|
"label": "Stato movimento originale"
|
||||||
},
|
},
|
||||||
"raw_mask": {
|
"raw_mask": {
|
||||||
"label": "Maschera grezza"
|
"label": "Maschera grezza"
|
||||||
@@ -548,11 +642,11 @@
|
|||||||
},
|
},
|
||||||
"min_score": {
|
"min_score": {
|
||||||
"label": "Confidenza minima",
|
"label": "Confidenza minima",
|
||||||
"description": "Livello minimo di confidenza del rilevamento per singolo fotogramma richiesto affinché l'oggetto venga conteggiato."
|
"description": "Livello minimo di confidenza nel rilevamento in un singolo fotogramma richiesto affinché l'oggetto venga conteggiato."
|
||||||
},
|
},
|
||||||
"mask": {
|
"mask": {
|
||||||
"label": "Maschera filtro",
|
"label": "Maschera filtro",
|
||||||
"description": "Coordinate del poligono che definisce l'area all'interno dell'inquadratura in cui si applica questo filtro."
|
"description": "Coordinate del poligono che definiscono la posizione di applicazione di questo filtro all'interno dell'inquadratura."
|
||||||
},
|
},
|
||||||
"raw_mask": {
|
"raw_mask": {
|
||||||
"label": "Maschera grezza"
|
"label": "Maschera grezza"
|
||||||
@@ -560,40 +654,42 @@
|
|||||||
},
|
},
|
||||||
"mask": {
|
"mask": {
|
||||||
"label": "Maschera oggetto",
|
"label": "Maschera oggetto",
|
||||||
"description": "Poligono di maschera utilizzato per impedire il rilevamento di oggetti in aree specificate."
|
"description": "Poligono di mascheramento utilizzato per impedire il rilevamento di oggetti in aree specifiche."
|
||||||
},
|
},
|
||||||
"genai": {
|
"genai": {
|
||||||
"label": "Configurazione degli oggetti GenAI",
|
"label": "Configurazione degli oggetti GenAI",
|
||||||
"description": "Opzioni GenAI per la descrizione degli oggetti tracciati e l'invio dei fotogrammi per la generazione.",
|
"description": "Opzioni GenAI per la descrizione degli oggetti tracciati e l'invio dei fotogrammi per la generazione.",
|
||||||
"enabled": {
|
"enabled": {
|
||||||
"label": "Abilita GenAI",
|
"label": "Abilita GenAI",
|
||||||
"description": "Abilita di default la generazione tramite GenAI delle descrizioni degli oggetti monitorati."
|
"description": "Abilita in modo predefinito la generazione di descrizioni da parte di GenAI per gli oggetti tracciati."
|
||||||
},
|
},
|
||||||
"use_snapshot": {
|
"use_snapshot": {
|
||||||
"label": "Usa istantanee",
|
"label": "Utilizza istantanee",
|
||||||
"description": "Utilizza le istantanee degli oggetti anziché le miniature per la generazione di descrizioni con GenAI."
|
"description": "Utilizza le istantanee degli oggetti anziché le miniature per la generazione di descrizioni con GenAI."
|
||||||
},
|
},
|
||||||
"prompt": {
|
"prompt": {
|
||||||
"description": "Modello di prompt predefinito utilizzato per la generazione di descrizioni con GenAI."
|
"description": "Modello di richiesta predefinito utilizzato per la generazione di descrizioni con GenAI.",
|
||||||
|
"label": "Richiesta di didascalia"
|
||||||
},
|
},
|
||||||
"object_prompts": {
|
"object_prompts": {
|
||||||
"description": "Prompt specifici per ogni oggetto per personalizzare i risultati di GenAI in base a etichette specifiche."
|
"description": "Richieste specifiche per ogni oggetto per personalizzare i risultati di GenAI in base a etichette specifiche.",
|
||||||
|
"label": "Richiesta di oggetto"
|
||||||
},
|
},
|
||||||
"objects": {
|
"objects": {
|
||||||
"label": "Oggetti GenAI",
|
"label": "Oggetti GenAI",
|
||||||
"description": "Elenco delle etichette degli oggetti da inviare a GenAI per impostazione predefinita."
|
"description": "Elenco di etichette degli oggetti da inviare a GenAI per impostazione predefinita."
|
||||||
},
|
},
|
||||||
"required_zones": {
|
"required_zones": {
|
||||||
"label": "Zone obbligatorie",
|
"label": "Zone richieste",
|
||||||
"description": "Zone che devono essere inserite affinché gli oggetti possano essere utilizzati per la generazione di descrizioni tramite GenAI."
|
"description": "Zone che devono essere inserite affinché gli oggetti siano idonei alla generazione della descrizione GenAI."
|
||||||
},
|
},
|
||||||
"debug_save_thumbnails": {
|
"debug_save_thumbnails": {
|
||||||
"label": "Salva miniature",
|
"label": "Salva miniature",
|
||||||
"description": "Salva le miniature inviate a GenAI per il debug e la revisione."
|
"description": "Salva le miniature inviate a GenAI per la correzione e la revisione."
|
||||||
},
|
},
|
||||||
"send_triggers": {
|
"send_triggers": {
|
||||||
"label": "Attivatori GenAI",
|
"label": "Attivazioni GenAI",
|
||||||
"description": "Definisce quando i frame devono essere inviati a GenAI (al termine, dopo gli aggiornamenti, ecc.).",
|
"description": "Definisce quando i fotogrammi devono essere inviati a GenAI (alla fine, dopo gli aggiornamenti, ecc.).",
|
||||||
"tracked_object_end": {
|
"tracked_object_end": {
|
||||||
"label": "Invia alla fine",
|
"label": "Invia alla fine",
|
||||||
"description": "Invia una richiesta a GenAI quando l'oggetto tracciato termina."
|
"description": "Invia una richiesta a GenAI quando l'oggetto tracciato termina."
|
||||||
@@ -629,25 +725,60 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"timestamp_style": {
|
"timestamp_style": {
|
||||||
"label": "Stile orario"
|
"label": "Stile orario",
|
||||||
|
"description": "Opzioni di stile per i timestamp applicati alle istantanee e alla vista di Debug.",
|
||||||
|
"position": {
|
||||||
|
"label": "Posizione timestamp",
|
||||||
|
"description": "Posizione del timestamp sull'immagine (tl/tr/bl/br)."
|
||||||
|
},
|
||||||
|
"format": {
|
||||||
|
"label": "Formato timestamp",
|
||||||
|
"description": "Stringa di formato data/ora utilizzata per i timestamp (codici di formato datetime di Python)."
|
||||||
|
},
|
||||||
|
"color": {
|
||||||
|
"label": "Colore timestamp",
|
||||||
|
"description": "Valori di colore RGB per il testo del timestamp (tutti i valori da 0 a 255).",
|
||||||
|
"red": {
|
||||||
|
"label": "Rosso",
|
||||||
|
"description": "Componente rosso (0-255) per il colore del timestamp."
|
||||||
|
},
|
||||||
|
"green": {
|
||||||
|
"label": "Verde",
|
||||||
|
"description": "Componente verde (0-255) per il colore del timestamp."
|
||||||
|
},
|
||||||
|
"blue": {
|
||||||
|
"label": "Blu",
|
||||||
|
"description": "Componente blu (0-255) per il colore del timestamp."
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"thickness": {
|
||||||
|
"label": "Spessore timestamp",
|
||||||
|
"description": "Spessore della linea del testo del timestamp."
|
||||||
|
},
|
||||||
|
"effect": {
|
||||||
|
"label": "Effetto timestamp",
|
||||||
|
"description": "Effetto visivo per il testo del timestamp (none, solid, shadow)."
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"notifications": {
|
"notifications": {
|
||||||
"label": "Notifiche",
|
"label": "Notifiche",
|
||||||
"enabled": {
|
"enabled": {
|
||||||
"label": "Abilita le notifiche"
|
"label": "Abilita le notifiche",
|
||||||
|
"description": "Abilita o disabilita le notifiche per questa telecamera."
|
||||||
},
|
},
|
||||||
"email": {
|
"email": {
|
||||||
"label": "Email di notifica",
|
"label": "Email di notifica",
|
||||||
"description": "Indirizzo email utilizzato per le notifiche push o richiesto da alcuni fornitori di servizi di notifica."
|
"description": "Indirizzo email utilizzato per le notifiche push o richiesto da alcuni fornitori di servizi di notifica."
|
||||||
},
|
},
|
||||||
"cooldown": {
|
"cooldown": {
|
||||||
"label": "Periodo di raffreddamento",
|
"label": "Tempo di attesa tra notifiche",
|
||||||
"description": "Tempo di attesa (in secondi) tra le notifiche per evitare di inviare spam ai destinatari."
|
"description": "Tempo di attesa (in secondi) tra le notifiche per evitare di inviare spam ai destinatari."
|
||||||
},
|
},
|
||||||
"enabled_in_config": {
|
"enabled_in_config": {
|
||||||
"label": "Stato delle notifiche originali",
|
"label": "Stato delle notifiche originali",
|
||||||
"description": "Indica se le notifiche erano abilitate nella configurazione statica originale."
|
"description": "Indica se le notifiche erano abilitate nella configurazione statica originale."
|
||||||
}
|
},
|
||||||
|
"description": "Impostazioni per abilitare e controllare le notifiche per questa telecamera."
|
||||||
},
|
},
|
||||||
"birdseye": {
|
"birdseye": {
|
||||||
"label": "Birdseye",
|
"label": "Birdseye",
|
||||||
@@ -671,7 +802,7 @@
|
|||||||
"label": "Attivatori",
|
"label": "Attivatori",
|
||||||
"friendly_name": {
|
"friendly_name": {
|
||||||
"label": "Nome descrittivo",
|
"label": "Nome descrittivo",
|
||||||
"description": "Nome descrittivo opzionale visualizzato nell'interfaccia utente per questo innesco."
|
"description": "Nome descrittivo opzionale visualizzato nell'interfaccia utente per questo attivatore."
|
||||||
},
|
},
|
||||||
"description": "Azioni e criteri di corrispondenza per gli attivatori della ricerca semantica specifici della telecamera.",
|
"description": "Azioni e criteri di corrispondenza per gli attivatori della ricerca semantica specifici della telecamera.",
|
||||||
"enabled": {
|
"enabled": {
|
||||||
@@ -720,17 +851,23 @@
|
|||||||
"ui": {
|
"ui": {
|
||||||
"description": "Visualizza l'ordine e la visibilità di questa telecamera nell'interfaccia utente. L'ordine influisce sul cruscotto predefinito. Per un controllo più granulare, utilizza i gruppi di telecamere.",
|
"description": "Visualizza l'ordine e la visibilità di questa telecamera nell'interfaccia utente. L'ordine influisce sul cruscotto predefinito. Per un controllo più granulare, utilizza i gruppi di telecamere.",
|
||||||
"order": {
|
"order": {
|
||||||
"description": "L'ordine numerico viene utilizzato per ordinare le telecamere nell'interfaccia utente (cruscotto ed elenchi predefiniti); i numeri più grandi compaiono successivamente."
|
"description": "L'ordine numerico viene utilizzato per ordinare le telecamere nell'interfaccia utente (cruscotto ed elenchi predefiniti); i numeri più grandi compaiono successivamente.",
|
||||||
|
"label": "Ordine interfaccia utente"
|
||||||
},
|
},
|
||||||
"dashboard": {
|
"dashboard": {
|
||||||
"label": "Mostra nell'interfaccia utente",
|
"label": "Mostra nell'interfaccia utente",
|
||||||
"description": "Abilita o disabilita la visualizzazione di questa telecamera in ogni punto dell'interfaccia utente di Frigate. Disabilitando questa opzione, sarà necessario modificare manualmente la configurazione per visualizzare nuovamente la telecamera nell'interfaccia utente."
|
"description": "Abilita o disabilita la visualizzazione di questa telecamera in ogni punto dell'interfaccia utente di Frigate. Disabilitando questa opzione, sarà necessario modificare manualmente la configurazione per visualizzare nuovamente la telecamera nell'interfaccia utente."
|
||||||
},
|
},
|
||||||
"label": "Interfaccia utente telecamera"
|
"label": "Interfaccia utente telecamera",
|
||||||
|
"review": {
|
||||||
|
"label": "Mostra in revisione",
|
||||||
|
"description": "Abilita o disabilita la visibilità di questa telecamera nella sezione di revisione (la pagina di revisione e il relativo filtro telecamera, la revisione del movimento e la vista della cronologia)."
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"zones": {
|
"zones": {
|
||||||
"enabled": {
|
"enabled": {
|
||||||
"label": "Abilitata"
|
"label": "Abilitata",
|
||||||
|
"description": "Abilita o disabilita questa zona. Le zone disabilitate vengono ignorate durante l'esecuzione."
|
||||||
},
|
},
|
||||||
"label": "Zone",
|
"label": "Zone",
|
||||||
"friendly_name": {
|
"friendly_name": {
|
||||||
@@ -740,11 +877,81 @@
|
|||||||
"filters": {
|
"filters": {
|
||||||
"raw_mask": {
|
"raw_mask": {
|
||||||
"label": "Maschera grezza"
|
"label": "Maschera grezza"
|
||||||
|
},
|
||||||
|
"label": "Filtri Zona",
|
||||||
|
"description": "Filtri da applicare agli oggetti all'interno di questa zona. Utilizzati per ridurre i falsi positivi o limitare quali oggetti sono considerati presenti nella zona.",
|
||||||
|
"min_area": {
|
||||||
|
"label": "Area minima oggetto",
|
||||||
|
"description": "Area minima del riquadro di delimitazione (in pixel o percentuale) richiesta per questo tipo di oggetto. Può essere in pixel (int) o in percentuale (float compreso tra 0.000001 e 0.99)."
|
||||||
|
},
|
||||||
|
"max_area": {
|
||||||
|
"label": "Area massima oggetto",
|
||||||
|
"description": "Area massima del riquadro di delimitazione (in pixel o percentuale) richiesta per questo tipo di oggetto. Può essere espressa in pixel (numero intero) o in percentuale (valore decimale compreso tra 0.000001 e 0.99)."
|
||||||
|
},
|
||||||
|
"min_ratio": {
|
||||||
|
"label": "Rapporto di aspetto minimo",
|
||||||
|
"description": "Rapporto minimo tra larghezza e altezza richiesto affinché il riquadro di delimitazione sia valido."
|
||||||
|
},
|
||||||
|
"max_ratio": {
|
||||||
|
"label": "Rapporto di aspetto massimo",
|
||||||
|
"description": "Rapporto massimo tra larghezza e altezza richiesto affinché il riquadro di delimitazione sia valido."
|
||||||
|
},
|
||||||
|
"threshold": {
|
||||||
|
"label": "Soglia di confidenza",
|
||||||
|
"description": "Soglia di confidenza media di rilevamento necessaria affinché l'oggetto sia considerato un vero positivo."
|
||||||
|
},
|
||||||
|
"min_score": {
|
||||||
|
"label": "Confidenza minima",
|
||||||
|
"description": "Livello minimo di confidenza nel rilevamento in un singolo fotogramma richiesto affinché l'oggetto venga conteggiato."
|
||||||
|
},
|
||||||
|
"mask": {
|
||||||
|
"label": "Maschera filtro",
|
||||||
|
"description": "Coordinate del poligono che definiscono la posizione di applicazione di questo filtro all'interno dell'inquadratura."
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"description": "Le zone consentono di definire un'area specifica dell'inquadratura per determinare se un oggetto si trova o meno all'interno di una particolare area.",
|
||||||
|
"enabled_in_config": {
|
||||||
|
"label": "Mantieni traccia dello stato originale della zona."
|
||||||
|
},
|
||||||
|
"coordinates": {
|
||||||
|
"label": "Coordinate",
|
||||||
|
"description": "Coordinate del poligono che definiscono l'area della zona. Può essere una stringa separata da virgole o un elenco di stringhe di coordinate. Le coordinate devono essere relative (0-1) o assolute (legacy)."
|
||||||
|
},
|
||||||
|
"distances": {
|
||||||
|
"label": "Distanze reali",
|
||||||
|
"description": "Distanze reali opzionali per ciascun lato del quadrilatero della zona, utilizzate per i calcoli di velocità o distanza. Deve avere esattamente 4 valori se impostato."
|
||||||
|
},
|
||||||
|
"inertia": {
|
||||||
|
"label": "Fotogrammi di inerzia",
|
||||||
|
"description": "Numero di fotogrammi consecutivi in cui un oggetto deve essere rilevato nella zona prima di essere considerato presente. Aiuta a filtrare i rilevamenti transitori."
|
||||||
|
},
|
||||||
|
"loitering_time": {
|
||||||
|
"label": "Secondi di stazionamento",
|
||||||
|
"description": "Numero di secondi per cui un oggetto deve rimanere nella zona per essere considerato in stazionamento nella stessa. Imposta a 0 per disabilitare il rilevamento dello stazionamento."
|
||||||
|
},
|
||||||
|
"speed_threshold": {
|
||||||
|
"label": "Velocità minima",
|
||||||
|
"description": "Velocità minima (in unità reali se le distanze sono impostate) richiesta affinché un oggetto sia considerato presente nella zona. Utilizzata per gli attivatori di zona basati sulla velocità."
|
||||||
|
},
|
||||||
|
"objects": {
|
||||||
|
"label": "Oggetti attivatori",
|
||||||
|
"description": "Elenco dei tipi di oggetto (dalla labelmap) che possono attivare questa zona. Può essere una stringa o un elenco di stringhe. Se vuoto, vengono considerati tutti gli oggetti."
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"type": {
|
"type": {
|
||||||
"description": "Tipo di telecamera",
|
"description": "Tipo di telecamera",
|
||||||
"label": "Tipo di telecamera"
|
"label": "Tipo di telecamera"
|
||||||
|
},
|
||||||
|
"best_image_timeout": {
|
||||||
|
"label": "Timeout immagine migliore",
|
||||||
|
"description": "Quanto tempo attendere per l'immagine con il punteggio di accuratezza più alto."
|
||||||
|
},
|
||||||
|
"webui_url": {
|
||||||
|
"label": "URL telecamera",
|
||||||
|
"description": "URL per visitare direttamente la telecamera dalla pagina di sistema"
|
||||||
|
},
|
||||||
|
"enabled_in_config": {
|
||||||
|
"label": "Stato telecamera originale",
|
||||||
|
"description": "Mantiene traccia dello stato originale della telecamera."
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -99,6 +99,10 @@
|
|||||||
"hash_iterations": {
|
"hash_iterations": {
|
||||||
"description": "Numero di iterazioni PBKDF2-SHA256 da utilizzare per criptare le password utente.",
|
"description": "Numero di iterazioni PBKDF2-SHA256 da utilizzare per criptare le password utente.",
|
||||||
"label": "Iterazioni di crittografia"
|
"label": "Iterazioni di crittografia"
|
||||||
|
},
|
||||||
|
"admin_first_time_login": {
|
||||||
|
"label": "Flag primo accesso amministratore",
|
||||||
|
"description": "Quando impostato su true, l'interfaccia utente può mostrare un link di aiuto nella pagina di login per informare gli utenti su come accedere dopo un ripristino della password di amministratore. "
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"ffmpeg": {
|
"ffmpeg": {
|
||||||
@@ -175,11 +179,17 @@
|
|||||||
"label": "Numero di processi di rilevamento",
|
"label": "Numero di processi di rilevamento",
|
||||||
"description": "Il numero di processi utilizzati per l'inferenza basata sulla CPU."
|
"description": "Il numero di processi utilizzati per l'inferenza basata sulla CPU."
|
||||||
},
|
},
|
||||||
"description": "Rilevatore CPU TFLite che esegue modelli TensorFlow Lite sulla CPU di sistema senza accelerazione hardware. Sconsigliato."
|
"description": "Rilevatore CPU TFLite che esegue modelli TensorFlow Lite sulla CPU di sistema senza accelerazione hardware. Sconsigliato.",
|
||||||
|
"label": "CPU"
|
||||||
},
|
},
|
||||||
"label": "Dispositivo di rilevamento",
|
"label": "Dispositivo di rilevamento",
|
||||||
"hailo8l": {
|
"hailo8l": {
|
||||||
"description": "Rilevatore Hailo-8/Hailo-8L che utilizza modelli HEF e l'SDK HailoRT per l'inferenza sul dispositivo Hailo."
|
"description": "Rilevatore Hailo-8/Hailo-8L che utilizza modelli HEF e l'SDK HailoRT per l'inferenza sul dispositivo Hailo.",
|
||||||
|
"label": "Hailo-8/Hailo-8L",
|
||||||
|
"device": {
|
||||||
|
"label": "Tipo di dispositivo",
|
||||||
|
"description": "Il dispositivo da utilizzare per l'inferenza Hailo (ad es. 'PCIe', 'M.2')."
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"openvino": {
|
"openvino": {
|
||||||
"description": "Rilevatore OpenVINO per CPU AMD e Intel, GPU Intel e dispositivo Intel VPU."
|
"description": "Rilevatore OpenVINO per CPU AMD e Intel, GPU Intel e dispositivo Intel VPU."
|
||||||
@@ -192,6 +202,111 @@
|
|||||||
},
|
},
|
||||||
"type": {
|
"type": {
|
||||||
"label": "Tipo"
|
"label": "Tipo"
|
||||||
|
},
|
||||||
|
"description": "Configurazione per i rilevatori di oggetti (backend CPU, GPU, ONNX) e impostazioni del modello specifiche per il rilevatore.",
|
||||||
|
"model": {
|
||||||
|
"label": "Configurazione del modello specifica del rilevatore",
|
||||||
|
"description": "Opzioni di configurazione del modello specifiche del rilevatore (percorso, dimensioni di input, ecc.).",
|
||||||
|
"path": {
|
||||||
|
"label": "Percorso del modello di rilevamento oggetti personalizzato",
|
||||||
|
"description": "Percorso di un file del modello di rilevamento personalizzato (o plus://<model_id> per i modelli Frigate+)."
|
||||||
|
},
|
||||||
|
"labelmap_path": {
|
||||||
|
"label": "Mappa delle etichette (label map) per il rilevatore di oggetti personalizzato",
|
||||||
|
"description": "Percorso di un file labelmap che mappa le classi numeriche in etichette testuali per il rilevatore."
|
||||||
|
},
|
||||||
|
"width": {
|
||||||
|
"label": "Larghezza di input del modello di rilevamento oggetti",
|
||||||
|
"description": "Larghezza del tensore di input del modello in pixel."
|
||||||
|
},
|
||||||
|
"height": {
|
||||||
|
"label": "Altezza di input del modello di rilevamento oggetti",
|
||||||
|
"description": "Altezza del tensore di input del modello in pixel."
|
||||||
|
},
|
||||||
|
"labelmap": {
|
||||||
|
"label": "Personalizzazione labelmap",
|
||||||
|
"description": "Sostituzioni o voci di rimappatura da unire alla labelmap standard."
|
||||||
|
},
|
||||||
|
"attributes_map": {
|
||||||
|
"label": "Mappa delle etichette oggetto con le relative etichette di attributo",
|
||||||
|
"description": "Mappatura dalle etichette oggetto alle etichette di attributo utilizzata per allegare metadati (ad esempio 'car' -> ['license_plate'])."
|
||||||
|
},
|
||||||
|
"input_tensor": {
|
||||||
|
"label": "Forma del tensore di input del modello",
|
||||||
|
"description": "Formato del tensore richiesto dal modello: 'nhwc' o 'nchw'."
|
||||||
|
},
|
||||||
|
"input_pixel_format": {
|
||||||
|
"label": "Formato colore dei pixel di input del modello",
|
||||||
|
"description": "Spazio colore dei pixel richiesto dal modello: 'rgb', 'bgr' o 'yuv'."
|
||||||
|
},
|
||||||
|
"input_dtype": {
|
||||||
|
"label": "Tipo di dati di input del modello (Dtype)",
|
||||||
|
"description": "Tipo di dati del tensore di input del modello (ad esempio 'float32')."
|
||||||
|
},
|
||||||
|
"model_type": {
|
||||||
|
"label": "Tipo di modello di rilevamento oggetti",
|
||||||
|
"description": "Tipo di architettura del modello del rilevatore (ssd, yolox, yolonas) utilizzato da alcuni rilevatori per l'ottimizzazione."
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"model_path": {
|
||||||
|
"label": "Percorso del modello specifico del rilevatore",
|
||||||
|
"description": "Percorso del file binario del modello del rilevatore, se richiesto dal rilevatore scelto."
|
||||||
|
},
|
||||||
|
"axengine": {
|
||||||
|
"label": "NPU AXEngine",
|
||||||
|
"description": "Rilevatore NPU AXERA AX650N/AX8850N che esegue file .axmodel compilati tramite il runtime AXEngine."
|
||||||
|
},
|
||||||
|
"deepstack": {
|
||||||
|
"label": "DeepStack",
|
||||||
|
"description": "Rilevatore DeepStack/CodeProject.AI che invia immagini a una API HTTP DeepStack remota per l'inferenza. Non consigliato.",
|
||||||
|
"api_url": {
|
||||||
|
"label": "URL API DeepStack",
|
||||||
|
"description": "L'URL delle API DeepStack."
|
||||||
|
},
|
||||||
|
"api_timeout": {
|
||||||
|
"label": "Timeout API DeepStack (in secondi)",
|
||||||
|
"description": "Tempo massimo consentito per una richiesta alle API DeepStack."
|
||||||
|
},
|
||||||
|
"api_key": {
|
||||||
|
"label": "Chiave API DeepStack (se richiesta)",
|
||||||
|
"description": "Chiave API opzionale per i servizi DeepStack autenticati."
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"degirum": {
|
||||||
|
"label": "DeGirum",
|
||||||
|
"description": "Rilevatore DeGirum per l'esecuzione di modelli tramite il cloud DeGirum o servizi di inferenza locali.",
|
||||||
|
"zoo": {
|
||||||
|
"label": "Model Zoo",
|
||||||
|
"description": "Percorso o URL del model zoo di DeGirum."
|
||||||
|
},
|
||||||
|
"token": {
|
||||||
|
"label": "Token Cloud DeGirum",
|
||||||
|
"description": "Token per l'accesso al Cloud DeGirum."
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"edgetpu": {
|
||||||
|
"label": "EdgeTPU",
|
||||||
|
"description": "Rilevatore EdgeTPU che esegue modelli TensorFlow Lite compilati per Coral EdgeTPU utilizzando il delegate EdgeTPU.",
|
||||||
|
"device": {
|
||||||
|
"label": "Tipo di dispositivo",
|
||||||
|
"description": "Il dispositivo da utilizzare per l'inferenza EdgeTPU (ad es. 'usb', 'pci')."
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"memryx": {
|
||||||
|
"label": "MemryX",
|
||||||
|
"description": "Rilevatore MemryX MX3 che esegue modelli DFP compilati su acceleratori MemryX.",
|
||||||
|
"device": {
|
||||||
|
"label": "Percorso del dispositivo",
|
||||||
|
"description": "Il dispositivo da utilizzare per l'inferenza MemryX (ad es. 'PCIe')."
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"onnx": {
|
||||||
|
"label": "ONNX",
|
||||||
|
"description": "Rilevatore ONNX per l'esecuzione di modelli ONNX; utilizzerà i backend di accelerazione disponibili (CUDA/ROCm/OpenVINO) quando presenti.",
|
||||||
|
"device": {
|
||||||
|
"label": "Tipo di dispositivo",
|
||||||
|
"description": "Il dispositivo da utilizzare per l'inferenza ONNX (ad es. 'AUTO', 'CPU', 'GPU')."
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"audio_transcription": {
|
"audio_transcription": {
|
||||||
@@ -266,49 +381,78 @@
|
|||||||
},
|
},
|
||||||
"onvif": {
|
"onvif": {
|
||||||
"tls_insecure": {
|
"tls_insecure": {
|
||||||
"label": "Disabilita verifica TLS"
|
"label": "Disabilita verifica TLS",
|
||||||
|
"description": "Salta la verifica TLS e disabilita l'autenticazione digest per ONVIF (non sicuro; utilizzare solo in reti sicure)."
|
||||||
},
|
},
|
||||||
"profile": {
|
"profile": {
|
||||||
"label": "Profilo ONVIF"
|
"label": "Profilo ONVIF",
|
||||||
|
"description": "Profilo multimediale ONVIF specifico da utilizzare per il controllo PTZ, identificato tramite token o nome. Se non impostato, viene selezionato automaticamente il primo profilo con una configurazione PTZ valida."
|
||||||
},
|
},
|
||||||
"autotracking": {
|
"autotracking": {
|
||||||
"label": "Tracciamento automatico",
|
"label": "Tracciamento automatico",
|
||||||
"enabled": {
|
"enabled": {
|
||||||
"label": "Abilita il tracciamento automatico"
|
"label": "Abilita il tracciamento automatico",
|
||||||
|
"description": "Abilita o disabilita il tracciamento automatico della telecamera PTZ per gli oggetti rilevati."
|
||||||
},
|
},
|
||||||
"calibrate_on_startup": {
|
"calibrate_on_startup": {
|
||||||
"label": "Calibra all'avvio"
|
"label": "Calibra all'avvio",
|
||||||
|
"description": "Misura la velocità dei motori PTZ all'avvio per migliorare la precisione del tracciamento. Frigate aggiornerà la configurazione con i valori di movement_weights dopo la calibrazione."
|
||||||
},
|
},
|
||||||
"zooming": {
|
"zooming": {
|
||||||
"label": "Modalità ingrandimento"
|
"label": "Modalità ingrandimento",
|
||||||
|
"description": "Controlla il comportamento dello zoom: disabled (solo pan/tilt), absolute (più compatibile) o relative (pan/tilt/zoom simultanei)."
|
||||||
},
|
},
|
||||||
"zoom_factor": {
|
"zoom_factor": {
|
||||||
"label": "Fattore di ingrandimento"
|
"label": "Fattore di ingrandimento",
|
||||||
|
"description": "Controlla il livello di zoom sugli oggetti tracciati. Valori più bassi mantengono una porzione maggiore della scena visibile; valori più alti aumentano lo zoom ma potrebbero far perdere il tracciamento. Valori compresi tra 0.1 e 0.75."
|
||||||
},
|
},
|
||||||
"track": {
|
"track": {
|
||||||
"label": "Oggetti tracciati",
|
"label": "Oggetti tracciati",
|
||||||
"description": "Elenco dei tipi di oggetto che dovrebbero attivare il tracciamento automatico."
|
"description": "Elenco dei tipi di oggetto che dovrebbero attivare il tracciamento automatico."
|
||||||
},
|
},
|
||||||
"required_zones": {
|
"required_zones": {
|
||||||
"label": "Zone richieste"
|
"label": "Zone richieste",
|
||||||
|
"description": "Gli oggetti devono entrare in una di queste zone prima che inizi il tracciamento automatico."
|
||||||
},
|
},
|
||||||
"timeout": {
|
"timeout": {
|
||||||
"label": "Scadenza di ritorno",
|
"label": "Scadenza di ritorno",
|
||||||
"description": "Attendi questo numero di secondi dopo aver perso il tracciamento prima di riportare la telecamera nella posizione preimpostata."
|
"description": "Attendi questo numero di secondi dopo aver perso il tracciamento prima di riportare la telecamera nella posizione preimpostata."
|
||||||
},
|
},
|
||||||
"movement_weights": {
|
"movement_weights": {
|
||||||
"description": "Valori di calibrazione generati automaticamente dalla calibrazione della telecamera. Non modificare manualmente."
|
"description": "Valori di calibrazione generati automaticamente dalla calibrazione della telecamera. Non modificare manualmente.",
|
||||||
|
"label": "Pesi del movimento"
|
||||||
},
|
},
|
||||||
"enabled_in_config": {
|
"enabled_in_config": {
|
||||||
"label": "Stato originale del tracciamento automatico"
|
"label": "Stato originale del tracciamento automatico",
|
||||||
|
"description": "Campo interno per tracciare se il tracciamento automatico era abilitato nella configurazione."
|
||||||
|
},
|
||||||
|
"description": "Traccia automaticamente gli oggetti in movimento e li mantiene centrati nell'inquadratura utilizzando i movimenti della telecamera PTZ.",
|
||||||
|
"return_preset": {
|
||||||
|
"label": "Preset di ritorno",
|
||||||
|
"description": "Nome del preset ONVIF configurato nel firmware della telecamera a cui ritornare al termine del tracciamento."
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"ignore_time_mismatch": {
|
"ignore_time_mismatch": {
|
||||||
"label": "Ignora la discrepanza oraria"
|
"label": "Ignora la discrepanza oraria",
|
||||||
|
"description": "Ignora le differenze di sincronizzazione oraria tra la telecamera e il server Frigate per la comunicazione ONVIF."
|
||||||
},
|
},
|
||||||
"label": "ONVIF",
|
"label": "ONVIF",
|
||||||
"port": {
|
"port": {
|
||||||
"label": "Porta ONVIF"
|
"label": "Porta ONVIF",
|
||||||
|
"description": "Numero di porta per il servizio ONVIF."
|
||||||
|
},
|
||||||
|
"description": "Impostazioni della connessione ONVIF e del tracciamento automatico PTZ per questa telecamera.",
|
||||||
|
"host": {
|
||||||
|
"label": "Host ONVIF",
|
||||||
|
"description": "Host (e schema opzionale) per il servizio ONVIF di questa telecamera."
|
||||||
|
},
|
||||||
|
"user": {
|
||||||
|
"label": "Nome utente ONVIF",
|
||||||
|
"description": "Nome utente per l'autenticazione ONVIF; alcuni dispositivi richiedono un utente amministratore per l'ONVIF."
|
||||||
|
},
|
||||||
|
"password": {
|
||||||
|
"label": "Password ONVIF",
|
||||||
|
"description": "Password per l'autenticazione ONVIF."
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"detect": {
|
"detect": {
|
||||||
@@ -413,7 +557,11 @@
|
|||||||
},
|
},
|
||||||
"default_role": {
|
"default_role": {
|
||||||
"label": "Ruolo predefinito",
|
"label": "Ruolo predefinito",
|
||||||
"description": "Ruolo predefinito assegnato agli utenti autenticati tramite proxy quando non si applica alcuna mappatura dei ruoli (amministratore o visualizzatore)."
|
"description": "Ruolo predefinito assegnato agli utenti autenticati tramite proxy quando non si applica nessuna mappatura dei ruoli."
|
||||||
|
},
|
||||||
|
"separator": {
|
||||||
|
"label": "Carattere separatore",
|
||||||
|
"description": "Carattere utilizzato per separare valori multipli forniti negli header del proxy."
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"review": {
|
"review": {
|
||||||
@@ -507,7 +655,19 @@
|
|||||||
},
|
},
|
||||||
"ui": {
|
"ui": {
|
||||||
"label": "Interfaccia utente",
|
"label": "Interfaccia utente",
|
||||||
"description": "Preferenze dell'interfaccia utente come fuso orario, formato di data/ora e unità di misura."
|
"description": "Preferenze dell'interfaccia utente come fuso orario, formato di data/ora e unità di misura.",
|
||||||
|
"timezone": {
|
||||||
|
"label": "Fuso orario",
|
||||||
|
"description": "Fuso orario opzionale da visualizzare nell'interfaccia utente (se non impostato, viene usata l'ora locale del browser)."
|
||||||
|
},
|
||||||
|
"time_format": {
|
||||||
|
"label": "Formato Ora",
|
||||||
|
"description": "Formato dell'ora da utilizzare nell'interfaccia utente (browser, 12 ore o 24 ore)."
|
||||||
|
},
|
||||||
|
"unit_system": {
|
||||||
|
"label": "Sistema di unità di misura",
|
||||||
|
"description": "Sistema di unità di misura per la visualizzazione (metrico o imperiale) utilizzato nell'interfaccia utente e nei messaggi MQTT."
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"profiles": {
|
"profiles": {
|
||||||
"label": "Profili",
|
"label": "Profili",
|
||||||
@@ -532,17 +692,18 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"enabled": {
|
"enabled": {
|
||||||
"label": "Abilita Registrazione"
|
"label": "Abilita registrazione",
|
||||||
|
"description": "Attiva o disattiva la registrazione per tutte le telecamere; l'impostazione può essere modificata per ogni singola telecamera."
|
||||||
},
|
},
|
||||||
"expire_interval": {
|
"expire_interval": {
|
||||||
"label": "Intervallo pulizia registrazioni",
|
"label": "Intervallo di pulizia registrazioni",
|
||||||
"description": "Minuti tra i cicli di pulizia che rimuovono i segmenti di registrazione scaduti."
|
"description": "Minuti tra i cicli di pulizia che rimuovono i segmenti di registrazione scaduti."
|
||||||
},
|
},
|
||||||
"continuous": {
|
"continuous": {
|
||||||
"label": "Conservazione continua",
|
"label": "Conservazione continua",
|
||||||
"description": "Numero di giorni per cui conservare le registrazioni, indipendentemente dagli oggetti tracciati o dal movimento. Impostare su 0 se si desidera conservare solo le registrazioni relative agli avvisi e ai rilevamenti.",
|
"description": "Numero di giorni per cui conservare le registrazioni, indipendentemente dagli oggetti tracciati o dal movimento. Impostare su 0 se si desidera conservare solo le registrazioni relative agli avvisi e ai rilevamenti.",
|
||||||
"days": {
|
"days": {
|
||||||
"label": "Giorni di Conservazione",
|
"label": "Giorni di conservazione",
|
||||||
"description": "Numero di giorni di conservazione delle registrazioni."
|
"description": "Numero di giorni di conservazione delle registrazioni."
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -550,7 +711,7 @@
|
|||||||
"label": "Conservazione movimento",
|
"label": "Conservazione movimento",
|
||||||
"description": "Numero di giorni per cui conservare le registrazioni attivate dal movimento, indipendentemente dagli oggetti tracciati. Impostare su 0 se si desidera conservare solo le registrazioni relative ad allarmi e rilevamenti.",
|
"description": "Numero di giorni per cui conservare le registrazioni attivate dal movimento, indipendentemente dagli oggetti tracciati. Impostare su 0 se si desidera conservare solo le registrazioni relative ad allarmi e rilevamenti.",
|
||||||
"days": {
|
"days": {
|
||||||
"label": "Giorni di Conservazione",
|
"label": "Giorni di conservazione",
|
||||||
"description": "Numero di giorni di conservazione delle registrazioni."
|
"description": "Numero di giorni di conservazione delle registrazioni."
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -558,12 +719,12 @@
|
|||||||
"label": "Conservazione rilevamento",
|
"label": "Conservazione rilevamento",
|
||||||
"description": "Impostazioni relative alla conservazione delle registrazioni per gli eventi di rilevamento, comprese le durate prima e dopo l'acquisizione.",
|
"description": "Impostazioni relative alla conservazione delle registrazioni per gli eventi di rilevamento, comprese le durate prima e dopo l'acquisizione.",
|
||||||
"pre_capture": {
|
"pre_capture": {
|
||||||
"label": "Secondi di pre-acquisizione",
|
"label": "Secondi prima della cattura",
|
||||||
"description": "Numero di secondi precedenti l'evento di rilevamento da includere nella registrazione."
|
"description": "Numero di secondi precedenti all'evento di rilevamento da includere nella registrazione."
|
||||||
},
|
},
|
||||||
"post_capture": {
|
"post_capture": {
|
||||||
"label": "Secondi di post-acquisizione",
|
"label": "Secondi dopo la cattura",
|
||||||
"description": "Numero di secondi successivi l'evento di rilevamento da includere nella registrazione."
|
"description": "Numero di secondi successivi all'evento di rilevamento da includere nella registrazione."
|
||||||
},
|
},
|
||||||
"retain": {
|
"retain": {
|
||||||
"label": "Conservazione eventi",
|
"label": "Conservazione eventi",
|
||||||
@@ -580,13 +741,13 @@
|
|||||||
},
|
},
|
||||||
"alerts": {
|
"alerts": {
|
||||||
"label": "Conservazione avvisi",
|
"label": "Conservazione avvisi",
|
||||||
"description": "Impostazioni di conservazione delle registrazioni per gli eventi di avviso, incluse le durate di pre e post-acquisizione.",
|
"description": "Impostazioni di conservazione delle registrazioni per gli eventi di avviso, incluse le durate prima e dopo la cattura.",
|
||||||
"pre_capture": {
|
"pre_capture": {
|
||||||
"label": "Secondi di pre-acquisizione",
|
"label": "Secondi prima della cattura",
|
||||||
"description": "Numero di secondi antecedenti all'evento di rilevamento da includere nella registrazione."
|
"description": "Numero di secondi precedenti all'evento di rilevamento da includere nella registrazione."
|
||||||
},
|
},
|
||||||
"post_capture": {
|
"post_capture": {
|
||||||
"label": "Secondi di post-acquisizione",
|
"label": "Secondi dopo la cattura",
|
||||||
"description": "Numero di secondi successivi all'evento di rilevamento da includere nella registrazione."
|
"description": "Numero di secondi successivi all'evento di rilevamento da includere nella registrazione."
|
||||||
},
|
},
|
||||||
"retain": {
|
"retain": {
|
||||||
@@ -613,7 +774,8 @@
|
|||||||
"enabled_in_config": {
|
"enabled_in_config": {
|
||||||
"label": "Stato registrazione originale",
|
"label": "Stato registrazione originale",
|
||||||
"description": "Indica se la registrazione era abilitata nella configurazione statica originale."
|
"description": "Indica se la registrazione era abilitata nella configurazione statica originale."
|
||||||
}
|
},
|
||||||
|
"description": "Impostazioni di registrazione e conservazione vengono applicate alle telecamere a meno che non vengano modificate singolarmente per ciascuna telecamera."
|
||||||
},
|
},
|
||||||
"snapshots": {
|
"snapshots": {
|
||||||
"label": "Istantanee",
|
"label": "Istantanee",
|
||||||
@@ -625,7 +787,40 @@
|
|||||||
"description": "Sovraimprime un timestamp sulle istantanee provenienti dalle API."
|
"description": "Sovraimprime un timestamp sulle istantanee provenienti dalle API."
|
||||||
},
|
},
|
||||||
"bounding_box": {
|
"bounding_box": {
|
||||||
"label": "Sovrimpressione riquadro di delimitazione"
|
"label": "Sovrimpressione riquadro di delimitazione",
|
||||||
|
"description": "Disegna i riquadri di delimitazione per gli oggetti tracciati sulle istantanee provenienti dalle API."
|
||||||
|
},
|
||||||
|
"crop": {
|
||||||
|
"label": "Ritaglia istantanea",
|
||||||
|
"description": "Ritaglia le istantanee provenienti dalle API in base al riquadro di delimitazione dell'oggetto rilevato."
|
||||||
|
},
|
||||||
|
"required_zones": {
|
||||||
|
"label": "Zone richieste",
|
||||||
|
"description": "Zone in cui un oggetto deve entrare affinché venga salvata un'istantanea."
|
||||||
|
},
|
||||||
|
"height": {
|
||||||
|
"label": "Altezza istantanea",
|
||||||
|
"description": "Altezza (in pixel) a cui ridimensionare le istantanee provenienti dalle API; lascia vuoto per mantenere la dimensione originale."
|
||||||
|
},
|
||||||
|
"retain": {
|
||||||
|
"label": "Conservazione istantanee",
|
||||||
|
"description": "Impostazioni di conservazione per le istantanee, inclusi i giorni predefiniti e le eccezioni per singolo oggetto.",
|
||||||
|
"default": {
|
||||||
|
"label": "Conservazione predefinita",
|
||||||
|
"description": "Numero predefinito di giorni per cui conservare le istantanee."
|
||||||
|
},
|
||||||
|
"mode": {
|
||||||
|
"label": "Modalità di conservazione",
|
||||||
|
"description": "Modalità di conservazione: tutti (salva tutti i segmenti), movimento (salva i segmenti con movimento) o oggetti_attivi (salva i segmenti con oggetti attivi)."
|
||||||
|
},
|
||||||
|
"objects": {
|
||||||
|
"label": "Conservazione oggetti",
|
||||||
|
"description": "Eccezioni per singolo oggetto relativi ai giorni di conservazione delle istantanee."
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"quality": {
|
||||||
|
"label": "Qualità istantanee",
|
||||||
|
"description": "Qualità di codifica per le istantanee salvate (0-100)."
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"motion": {
|
"motion": {
|
||||||
@@ -654,10 +849,12 @@
|
|||||||
"description": "Se impostato su un valore compreso tra 0.0 e 110, e se in un singolo fotogramma cambia una porzione dell'immagine superiore a tale frazione, il rilevatore non restituirà alcun riquadro di movimento e si ricalibrerà immediatamente. Ciò consente di risparmiare risorse della CPU e ridurre i falsi positivi in caso di fulmini, temporali, ecc., ma potrebbe comportare la mancata rilevazione di eventi reali, come ad esempio il tracciamento automatico di un oggetto da parte di una telecamera PTZ. Il compromesso consiste nel scegliere se sacrificare alcuni megabyte di registrazioni o rivedere un paio di brevi video. Lasciare non impostato (Nessuno) per disabilitare questa funzione."
|
"description": "Se impostato su un valore compreso tra 0.0 e 110, e se in un singolo fotogramma cambia una porzione dell'immagine superiore a tale frazione, il rilevatore non restituirà alcun riquadro di movimento e si ricalibrerà immediatamente. Ciò consente di risparmiare risorse della CPU e ridurre i falsi positivi in caso di fulmini, temporali, ecc., ma potrebbe comportare la mancata rilevazione di eventi reali, come ad esempio il tracciamento automatico di un oggetto da parte di una telecamera PTZ. Il compromesso consiste nel scegliere se sacrificare alcuni megabyte di registrazioni o rivedere un paio di brevi video. Lasciare non impostato (Nessuno) per disabilitare questa funzione."
|
||||||
},
|
},
|
||||||
"delta_alpha": {
|
"delta_alpha": {
|
||||||
"description": "Fattore di fusione alfa utilizzato nel calcolo della differenza tra fotogrammi per il calcolo del movimento."
|
"description": "Fattore di fusione alfa utilizzato nel calcolo della differenza tra fotogrammi per il calcolo del movimento.",
|
||||||
|
"label": "Delta alfa"
|
||||||
},
|
},
|
||||||
"frame_alpha": {
|
"frame_alpha": {
|
||||||
"description": "Valore alfa utilizzato durante la fusione dei fotogrammi per la preelaborazione del movimento."
|
"description": "Valore alfa utilizzato durante la fusione dei fotogrammi per la preelaborazione del movimento.",
|
||||||
|
"label": "Frame alfa"
|
||||||
},
|
},
|
||||||
"frame_height": {
|
"frame_height": {
|
||||||
"label": "Altezza del frame",
|
"label": "Altezza del frame",
|
||||||
@@ -672,7 +869,8 @@
|
|||||||
"description": "Secondi di attesa dopo l'ultimo movimento prima di pubblicare uno stato 'off' MQTT."
|
"description": "Secondi di attesa dopo l'ultimo movimento prima di pubblicare uno stato 'off' MQTT."
|
||||||
},
|
},
|
||||||
"enabled_in_config": {
|
"enabled_in_config": {
|
||||||
"description": "Indica se il rilevamento del movimento era abilitato nella configurazione statica originale."
|
"description": "Indica se il rilevamento del movimento era abilitato nella configurazione statica originale.",
|
||||||
|
"label": "Stato movimento originale"
|
||||||
},
|
},
|
||||||
"raw_mask": {
|
"raw_mask": {
|
||||||
"label": "Maschera grezza"
|
"label": "Maschera grezza"
|
||||||
@@ -710,11 +908,11 @@
|
|||||||
},
|
},
|
||||||
"min_score": {
|
"min_score": {
|
||||||
"label": "Confidenza minima",
|
"label": "Confidenza minima",
|
||||||
"description": "Livello minimo di confidenza del rilevamento per singolo fotogramma richiesto affinché l'oggetto venga conteggiato."
|
"description": "Livello minimo di confidenza nel rilevamento in un singolo fotogramma richiesto affinché l'oggetto venga conteggiato."
|
||||||
},
|
},
|
||||||
"mask": {
|
"mask": {
|
||||||
"label": "Maschera filtro",
|
"label": "Maschera filtro",
|
||||||
"description": "Coordinate del poligono che definisce l'area all'interno dell'inquadratura in cui si applica questo filtro."
|
"description": "Coordinate del poligono che definiscono la posizione di applicazione di questo filtro all'interno dell'inquadratura."
|
||||||
},
|
},
|
||||||
"raw_mask": {
|
"raw_mask": {
|
||||||
"label": "Maschera grezza"
|
"label": "Maschera grezza"
|
||||||
@@ -722,40 +920,42 @@
|
|||||||
},
|
},
|
||||||
"mask": {
|
"mask": {
|
||||||
"label": "Maschera oggetto",
|
"label": "Maschera oggetto",
|
||||||
"description": "Poligono di maschera utilizzato per impedire il rilevamento di oggetti in aree specificate."
|
"description": "Poligono di mascheramento utilizzato per impedire il rilevamento di oggetti in aree specifiche."
|
||||||
},
|
},
|
||||||
"genai": {
|
"genai": {
|
||||||
"label": "Configurazione degli oggetti GenAI",
|
"label": "Configurazione degli oggetti GenAI",
|
||||||
"description": "Opzioni GenAI per la descrizione degli oggetti tracciati e l'invio dei fotogrammi per la generazione.",
|
"description": "Opzioni GenAI per la descrizione degli oggetti tracciati e l'invio dei fotogrammi per la generazione.",
|
||||||
"enabled": {
|
"enabled": {
|
||||||
"label": "Abilita GenAI",
|
"label": "Abilita GenAI",
|
||||||
"description": "Abilita di default la generazione tramite GenAI delle descrizioni degli oggetti monitorati."
|
"description": "Abilita in modo predefinito la generazione di descrizioni da parte di GenAI per gli oggetti tracciati."
|
||||||
},
|
},
|
||||||
"use_snapshot": {
|
"use_snapshot": {
|
||||||
"label": "Usa istantanee",
|
"label": "Utilizza istantanee",
|
||||||
"description": "Utilizza le istantanee degli oggetti anziché le miniature per la generazione di descrizioni con GenAI."
|
"description": "Utilizza le istantanee degli oggetti anziché le miniature per la generazione di descrizioni con GenAI."
|
||||||
},
|
},
|
||||||
"prompt": {
|
"prompt": {
|
||||||
"description": "Modello di prompt predefinito utilizzato per la generazione di descrizioni con GenAI."
|
"description": "Modello di richiesta predefinito utilizzato per la generazione di descrizioni con GenAI.",
|
||||||
|
"label": "Richiesta di didascalia"
|
||||||
},
|
},
|
||||||
"object_prompts": {
|
"object_prompts": {
|
||||||
"description": "Prompt specifici per ogni oggetto per personalizzare i risultati di GenAI in base a etichette specifiche."
|
"description": "Richieste specifiche per ogni oggetto per personalizzare i risultati di GenAI in base a etichette specifiche.",
|
||||||
|
"label": "Richiesta di oggetto"
|
||||||
},
|
},
|
||||||
"objects": {
|
"objects": {
|
||||||
"label": "Oggetti GenAI",
|
"label": "Oggetti GenAI",
|
||||||
"description": "Elenco delle etichette degli oggetti da inviare a GenAI per impostazione predefinita."
|
"description": "Elenco di etichette degli oggetti da inviare a GenAI per impostazione predefinita."
|
||||||
},
|
},
|
||||||
"required_zones": {
|
"required_zones": {
|
||||||
"label": "Zone obbligatorie",
|
"label": "Zone richieste",
|
||||||
"description": "Zone che devono essere inserite affinché gli oggetti possano essere utilizzati per la generazione di descrizioni tramite GenAI."
|
"description": "Zone che devono essere inserite affinché gli oggetti siano idonei alla generazione della descrizione GenAI."
|
||||||
},
|
},
|
||||||
"debug_save_thumbnails": {
|
"debug_save_thumbnails": {
|
||||||
"label": "Salva miniature",
|
"label": "Salva miniature",
|
||||||
"description": "Salva le miniature inviate a GenAI per il debug e la revisione."
|
"description": "Salva le miniature inviate a GenAI per la correzione e la revisione."
|
||||||
},
|
},
|
||||||
"send_triggers": {
|
"send_triggers": {
|
||||||
"label": "Attivatori GenAI",
|
"label": "Attivazioni GenAI",
|
||||||
"description": "Definisce quando i frame devono essere inviati a GenAI (al termine, dopo gli aggiornamenti, ecc.).",
|
"description": "Definisce quando i fotogrammi devono essere inviati a GenAI (alla fine, dopo gli aggiornamenti, ecc.).",
|
||||||
"tracked_object_end": {
|
"tracked_object_end": {
|
||||||
"label": "Invia alla fine",
|
"label": "Invia alla fine",
|
||||||
"description": "Invia una richiesta a GenAI quando l'oggetto tracciato termina."
|
"description": "Invia una richiesta a GenAI quando l'oggetto tracciato termina."
|
||||||
@@ -776,6 +976,24 @@
|
|||||||
"filters_attribute": {
|
"filters_attribute": {
|
||||||
"raw_mask": {
|
"raw_mask": {
|
||||||
"label": "Maschera grezza"
|
"label": "Maschera grezza"
|
||||||
|
},
|
||||||
|
"min_ratio": {
|
||||||
|
"label": "Rapporto di aspetto minimo",
|
||||||
|
"description": "Rapporto minimo tra larghezza e altezza richiesto affinché il riquadro di delimitazione sia valido."
|
||||||
|
},
|
||||||
|
"max_ratio": {
|
||||||
|
"label": "Rapporto di aspetto massimo",
|
||||||
|
"description": "Rapporto massimo tra larghezza e altezza richiesto affinché il riquadro di delimitazione sia valido."
|
||||||
|
},
|
||||||
|
"threshold": {
|
||||||
|
"label": "Soglia di confidenza"
|
||||||
|
},
|
||||||
|
"min_score": {
|
||||||
|
"label": "Confidenza minima"
|
||||||
|
},
|
||||||
|
"mask": {
|
||||||
|
"label": "Maschera filtro",
|
||||||
|
"description": "Coordinate del poligono che definiscono la posizione di applicazione di questo filtro all'interno dell'inquadratura."
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -795,7 +1013,39 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"timestamp_style": {
|
"timestamp_style": {
|
||||||
"label": "Stile orario"
|
"label": "Stile orario",
|
||||||
|
"position": {
|
||||||
|
"label": "Posizione timestamp",
|
||||||
|
"description": "Posizione del timestamp sull'immagine (tl/tr/bl/br)."
|
||||||
|
},
|
||||||
|
"format": {
|
||||||
|
"label": "Formato timestamp",
|
||||||
|
"description": "Stringa di formato data/ora utilizzata per i timestamp (codici di formato datetime di Python)."
|
||||||
|
},
|
||||||
|
"color": {
|
||||||
|
"label": "Colore timestamp",
|
||||||
|
"description": "Valori di colore RGB per il testo del timestamp (tutti i valori da 0 a 255).",
|
||||||
|
"red": {
|
||||||
|
"label": "Rosso",
|
||||||
|
"description": "Componente rosso (0-255) per il colore del timestamp."
|
||||||
|
},
|
||||||
|
"green": {
|
||||||
|
"label": "Verde",
|
||||||
|
"description": "Componente verde (0-255) per il colore del timestamp."
|
||||||
|
},
|
||||||
|
"blue": {
|
||||||
|
"label": "Blu",
|
||||||
|
"description": "Componente blu (0-255) per il colore del timestamp."
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"thickness": {
|
||||||
|
"label": "Spessore timestamp",
|
||||||
|
"description": "Spessore della linea del testo del timestamp."
|
||||||
|
},
|
||||||
|
"effect": {
|
||||||
|
"label": "Effetto timestamp",
|
||||||
|
"description": "Effetto visivo per il testo del timestamp (none, solid, shadow)."
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"database": {
|
"database": {
|
||||||
"label": "Database",
|
"label": "Database",
|
||||||
@@ -824,7 +1074,7 @@
|
|||||||
"description": "Indirizzo email utilizzato per le notifiche push o richiesto da alcuni fornitori di servizi di notifica."
|
"description": "Indirizzo email utilizzato per le notifiche push o richiesto da alcuni fornitori di servizi di notifica."
|
||||||
},
|
},
|
||||||
"cooldown": {
|
"cooldown": {
|
||||||
"label": "Periodo di raffreddamento",
|
"label": "Tempo di attesa tra notifiche",
|
||||||
"description": "Tempo di attesa (in secondi) tra le notifiche per evitare di inviare spam ai destinatari."
|
"description": "Tempo di attesa (in secondi) tra le notifiche per evitare di inviare spam ai destinatari."
|
||||||
},
|
},
|
||||||
"enabled_in_config": {
|
"enabled_in_config": {
|
||||||
@@ -857,10 +1107,44 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"tls": {
|
"tls": {
|
||||||
"label": "TLS"
|
"label": "TLS",
|
||||||
|
"description": "Impostazioni TLS per gli endpoint web di Frigate (porta 8971).",
|
||||||
|
"enabled": {
|
||||||
|
"label": "Abilita TLS",
|
||||||
|
"description": "Abilita il protocollo TLS per l'interfaccia utente web e le API di Frigate sulla porta TLS configurata."
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"telemetry": {
|
"telemetry": {
|
||||||
"label": "Telemetria"
|
"label": "Telemetria",
|
||||||
|
"description": "Opzioni di telemetria e statistiche di sistema, incluso il monitoraggio della GPU e della larghezza di banda di rete.",
|
||||||
|
"network_interfaces": {
|
||||||
|
"label": "Interfacce di rete",
|
||||||
|
"description": "Elenco dei prefissi dei nomi delle interfacce di rete da monitorare per le statistiche sulla larghezza di banda."
|
||||||
|
},
|
||||||
|
"stats": {
|
||||||
|
"label": "Statistiche di sistema",
|
||||||
|
"description": "Opzioni per abilitare/disabilitare la raccolta di varie statistiche di sistema e della GPU.",
|
||||||
|
"amd_gpu_stats": {
|
||||||
|
"label": "Statistiche GPU AMD",
|
||||||
|
"description": "Abilita la raccolta delle statistiche della GPU AMD, se presente una GPU AMD."
|
||||||
|
},
|
||||||
|
"intel_gpu_stats": {
|
||||||
|
"label": "Statistiche GPU Intel",
|
||||||
|
"description": "Abilita la raccolta delle statistiche della GPU Intel, se presente una GPU Intel."
|
||||||
|
},
|
||||||
|
"network_bandwidth": {
|
||||||
|
"label": "Larghezza di banda di rete",
|
||||||
|
"description": "Abilita il monitoraggio della larghezza di banda di rete per singolo processo per i processi ffmpeg della telecamera e per i rilevatori (richiede capability specifiche)."
|
||||||
|
},
|
||||||
|
"intel_gpu_device": {
|
||||||
|
"label": "Dispositivo GPU Intel",
|
||||||
|
"description": "Indirizzo bus PCI o percorso del dispositivo DRM (es. /dev/dri/card1) utilizzato per associare le statistiche della GPU Intel a un dispositivo specifico quando ne sono presenti molteplici."
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"version_check": {
|
||||||
|
"label": "Controllo versione",
|
||||||
|
"description": "Abilita un controllo in uscita per rilevare se è disponibile una versione più recente di Frigate."
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"birdseye": {
|
"birdseye": {
|
||||||
"label": "Birdseye",
|
"label": "Birdseye",
|
||||||
@@ -887,7 +1171,7 @@
|
|||||||
"label": "Attivatori",
|
"label": "Attivatori",
|
||||||
"friendly_name": {
|
"friendly_name": {
|
||||||
"label": "Nome descrittivo",
|
"label": "Nome descrittivo",
|
||||||
"description": "Nome descrittivo opzionale visualizzato nell'interfaccia utente per questo innesco."
|
"description": "Nome descrittivo opzionale visualizzato nell'interfaccia utente per questo attivatore."
|
||||||
},
|
},
|
||||||
"description": "Azioni e criteri di corrispondenza per gli attivatori della ricerca semantica specifici della telecamera.",
|
"description": "Azioni e criteri di corrispondenza per gli attivatori della ricerca semantica specifici della telecamera.",
|
||||||
"enabled": {
|
"enabled": {
|
||||||
|
|||||||
@@ -202,8 +202,8 @@
|
|||||||
"aria": "Invia a Frigate Plus"
|
"aria": "Invia a Frigate Plus"
|
||||||
},
|
},
|
||||||
"addTrigger": {
|
"addTrigger": {
|
||||||
"label": "Aggiungi innesco",
|
"label": "Aggiungi attivatore",
|
||||||
"aria": "Aggiungi un innesco per questo oggetto tracciato"
|
"aria": "Aggiungi un attivatore per questo oggetto tracciato"
|
||||||
},
|
},
|
||||||
"audioTranscription": {
|
"audioTranscription": {
|
||||||
"label": "Trascrivere",
|
"label": "Trascrivere",
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
"disable": "Disabilita audio bidirezionale"
|
"disable": "Disabilita audio bidirezionale"
|
||||||
},
|
},
|
||||||
"snapshots": {
|
"snapshots": {
|
||||||
"enable": "Abilita istantanee",
|
"enable": "Abilita Istantanee",
|
||||||
"disable": "Disabilita istantanee"
|
"disable": "Disabilita istantanee"
|
||||||
},
|
},
|
||||||
"manualRecording": {
|
"manualRecording": {
|
||||||
|
|||||||
@@ -212,7 +212,7 @@
|
|||||||
"type": {
|
"type": {
|
||||||
"zone": "zona",
|
"zone": "zona",
|
||||||
"motion_mask": "maschera di movimento",
|
"motion_mask": "maschera di movimento",
|
||||||
"object_mask": "maschera di oggetto"
|
"object_mask": "maschera oggetto"
|
||||||
},
|
},
|
||||||
"revertOverride": {
|
"revertOverride": {
|
||||||
"title": "Ripristina la configurazione di base",
|
"title": "Ripristina la configurazione di base",
|
||||||
@@ -447,7 +447,7 @@
|
|||||||
"users": "Utenti",
|
"users": "Utenti",
|
||||||
"frigateplus": "Frigate+",
|
"frigateplus": "Frigate+",
|
||||||
"enrichments": "Miglioramenti",
|
"enrichments": "Miglioramenti",
|
||||||
"triggers": "Inneschi",
|
"triggers": "Attivatori",
|
||||||
"roles": "Ruoli",
|
"roles": "Ruoli",
|
||||||
"cameraManagement": "Gestione della telecamera",
|
"cameraManagement": "Gestione della telecamera",
|
||||||
"cameraReview": "Revisiona",
|
"cameraReview": "Revisiona",
|
||||||
@@ -896,22 +896,22 @@
|
|||||||
"restart_required": "Riavvio richiesto (impostazioni di miglioramento modificate)"
|
"restart_required": "Riavvio richiesto (impostazioni di miglioramento modificate)"
|
||||||
},
|
},
|
||||||
"triggers": {
|
"triggers": {
|
||||||
"documentTitle": "Inneschi",
|
"documentTitle": "Attivatori",
|
||||||
"management": {
|
"management": {
|
||||||
"title": "Inneschi",
|
"title": "Attivatori",
|
||||||
"desc": "Gestisci gli inneschi per {{camera}}. Utilizza il tipo miniatura per attivare miniature simili all'oggetto tracciato selezionato e il tipo descrizione per attivare descrizioni simili al testo specificato."
|
"desc": "Gestisci gli attivatori per {{camera}}. Utilizza il tipo miniatura per attivare miniature simili all'oggetto tracciato selezionato e il tipo descrizione per attivare descrizioni simili al testo specificato."
|
||||||
},
|
},
|
||||||
"addTrigger": "Aggiungi innesco",
|
"addTrigger": "Aggiungi attivatore",
|
||||||
"table": {
|
"table": {
|
||||||
"name": "Nome",
|
"name": "Nome",
|
||||||
"type": "Tipo",
|
"type": "Tipo",
|
||||||
"content": "Contenuto",
|
"content": "Contenuto",
|
||||||
"threshold": "Soglia",
|
"threshold": "Soglia",
|
||||||
"actions": "Azioni",
|
"actions": "Azioni",
|
||||||
"noTriggers": "Nessun innesco configurato per questa telecamera.",
|
"noTriggers": "Nessun attivatore configurato per questa telecamera.",
|
||||||
"edit": "Modifica",
|
"edit": "Modifica",
|
||||||
"deleteTrigger": "Elimina innesco",
|
"deleteTrigger": "Elimina attivatore",
|
||||||
"lastTriggered": "Ultimo innesco"
|
"lastTriggered": "Ultimo attivatore"
|
||||||
},
|
},
|
||||||
"type": {
|
"type": {
|
||||||
"thumbnail": "Miniatura",
|
"thumbnail": "Miniatura",
|
||||||
@@ -925,34 +925,34 @@
|
|||||||
},
|
},
|
||||||
"dialog": {
|
"dialog": {
|
||||||
"createTrigger": {
|
"createTrigger": {
|
||||||
"title": "Crea innesco",
|
"title": "Crea attivatore",
|
||||||
"desc": "Crea un innesco per la telecamera {{camera}}"
|
"desc": "Crea un attivatore per la telecamera {{camera}}"
|
||||||
},
|
},
|
||||||
"editTrigger": {
|
"editTrigger": {
|
||||||
"title": "Modifica innesco",
|
"title": "Modifica attivatore",
|
||||||
"desc": "Modifica le impostazioni per l'innesco della telecamera {{camera}}"
|
"desc": "Modifica le impostazioni per l'attivatore della telecamera {{camera}}"
|
||||||
},
|
},
|
||||||
"deleteTrigger": {
|
"deleteTrigger": {
|
||||||
"title": "Elimina innesco",
|
"title": "Elimina attivatore",
|
||||||
"desc": "Vuoi davvero eliminare l'innesco <strong>{{triggerName}}</strong>? Questa azione non può essere annullata."
|
"desc": "Vuoi davvero eliminare l'attivatore <strong>{{triggerName}}</strong>? Questa azione non può essere annullata."
|
||||||
},
|
},
|
||||||
"form": {
|
"form": {
|
||||||
"name": {
|
"name": {
|
||||||
"title": "Nome",
|
"title": "Nome",
|
||||||
"placeholder": "Assegna un nome a questo innesco",
|
"placeholder": "Assegna un nome a questo attivatore",
|
||||||
"error": {
|
"error": {
|
||||||
"minLength": "Il campo deve contenere almeno 2 caratteri.",
|
"minLength": "Il campo deve contenere almeno 2 caratteri.",
|
||||||
"invalidCharacters": "Il campo può contenere solo lettere, numeri, caratteri di sottolineatura e trattini.",
|
"invalidCharacters": "Il campo può contenere solo lettere, numeri, caratteri di sottolineatura e trattini.",
|
||||||
"alreadyExists": "Per questa telecamera esiste già un innesco con questo nome."
|
"alreadyExists": "Per questa telecamera esiste già un attivatore con questo nome."
|
||||||
},
|
},
|
||||||
"description": "Inserisci un nome o una descrizione univoca per identificare questo innesco"
|
"description": "Inserisci un nome o una descrizione univoca per identificare questo attivatore"
|
||||||
},
|
},
|
||||||
"enabled": {
|
"enabled": {
|
||||||
"description": "Abilita o disabilita questo innesco"
|
"description": "Abilita o disabilita questo attivatore"
|
||||||
},
|
},
|
||||||
"type": {
|
"type": {
|
||||||
"title": "Tipo",
|
"title": "Tipo",
|
||||||
"placeholder": "Seleziona il tipo di innesco",
|
"placeholder": "Seleziona il tipo di attivatore",
|
||||||
"description": "Si attiva quando viene rilevata una descrizione di un oggetto simile tracciato",
|
"description": "Si attiva quando viene rilevata una descrizione di un oggetto simile tracciato",
|
||||||
"thumbnail": "Attiva quando viene rilevata una miniatura di un oggetto simile tracciato"
|
"thumbnail": "Attiva quando viene rilevata una miniatura di un oggetto simile tracciato"
|
||||||
},
|
},
|
||||||
@@ -960,7 +960,7 @@
|
|||||||
"title": "Contenuto",
|
"title": "Contenuto",
|
||||||
"imagePlaceholder": "Seleziona una miniatura",
|
"imagePlaceholder": "Seleziona una miniatura",
|
||||||
"textPlaceholder": "Inserisci il contenuto del testo",
|
"textPlaceholder": "Inserisci il contenuto del testo",
|
||||||
"imageDesc": "Vengono visualizzate solo le 100 miniature più recenti. Se non riesci a trovare la miniatura desiderata, controlla gli oggetti precedenti in Esplora e imposta un innesco dal menu.",
|
"imageDesc": "Vengono visualizzate solo le 100 miniature più recenti. Se non riesci a trovare la miniatura desiderata, controlla gli oggetti precedenti in Esplora e imposta un attivatore dal menu.",
|
||||||
"textDesc": "Inserisci il testo per attivare questa azione quando viene rilevata una descrizione simile dell'oggetto tracciato.",
|
"textDesc": "Inserisci il testo per attivare questa azione quando viene rilevata una descrizione simile dell'oggetto tracciato.",
|
||||||
"error": {
|
"error": {
|
||||||
"required": "Il contenuto è obbligatorio."
|
"required": "Il contenuto è obbligatorio."
|
||||||
@@ -972,11 +972,11 @@
|
|||||||
"min": "La soglia deve essere almeno 0",
|
"min": "La soglia deve essere almeno 0",
|
||||||
"max": "La soglia deve essere al massimo 1"
|
"max": "La soglia deve essere al massimo 1"
|
||||||
},
|
},
|
||||||
"desc": "Imposta la soglia di similarità per questo innesco. Una soglia più alta indica che è necessaria una corrispondenza più vicina per attivare l'innesco."
|
"desc": "Imposta la soglia di similarità per questo attivatore. Una soglia più alta indica che è necessaria una corrispondenza più vicina per attivare l'attivatore."
|
||||||
},
|
},
|
||||||
"actions": {
|
"actions": {
|
||||||
"title": "Azioni",
|
"title": "Azioni",
|
||||||
"desc": "Per impostazione predefinita, Frigate invia un messaggio MQTT per tutti gli inneschi. Le sottoetichette aggiungono il nome dell'innesco all'etichetta dell'oggetto. Gli attributi sono metadati ricercabili, memorizzati separatamente nei metadati dell'oggetto tracciato.",
|
"desc": "Per impostazione predefinita, Frigate invia un messaggio MQTT per tutti gli attivatori. Le sottoetichette aggiungono il nome dell'attivatore all'etichetta dell'oggetto. Gli attributi sono metadati ricercabili, memorizzati separatamente nei metadati dell'oggetto tracciato.",
|
||||||
"error": {
|
"error": {
|
||||||
"min": "È necessario selezionare almeno un'azione."
|
"min": "È necessario selezionare almeno un'azione."
|
||||||
}
|
}
|
||||||
@@ -990,30 +990,30 @@
|
|||||||
},
|
},
|
||||||
"toast": {
|
"toast": {
|
||||||
"success": {
|
"success": {
|
||||||
"createTrigger": "L'innesco {{name}} è stato creato correttamente.",
|
"createTrigger": "L'attivatore {{name}} è stato creato correttamente.",
|
||||||
"updateTrigger": "L'innesco {{name}} è stato aggiornato correttamente.",
|
"updateTrigger": "L'attivatore {{name}} è stato aggiornato correttamente.",
|
||||||
"deleteTrigger": "L'innesco {{name}} è stato eliminato correttamente."
|
"deleteTrigger": "L'attivatore {{name}} è stato eliminato correttamente."
|
||||||
},
|
},
|
||||||
"error": {
|
"error": {
|
||||||
"createTriggerFailed": "Impossibile creare l'innesco: {{errorMessage}}",
|
"createTriggerFailed": "Impossibile creare l'attivatore: {{errorMessage}}",
|
||||||
"updateTriggerFailed": "Impossibile aggiornare l'innesco: {{errorMessage}}",
|
"updateTriggerFailed": "Impossibile aggiornare l'attivatore: {{errorMessage}}",
|
||||||
"deleteTriggerFailed": "Impossibile eliminare l'innesco: {{errorMessage}}"
|
"deleteTriggerFailed": "Impossibile eliminare l'attivatore: {{errorMessage}}"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"semanticSearch": {
|
"semanticSearch": {
|
||||||
"title": "La ricerca semantica è disabilitata",
|
"title": "La ricerca semantica è disabilitata",
|
||||||
"desc": "Per utilizzare gli inneschi, è necessario abilitare la ricerca semantica."
|
"desc": "Per utilizzare gli attivatori, è necessario abilitare la ricerca semantica."
|
||||||
},
|
},
|
||||||
"wizard": {
|
"wizard": {
|
||||||
"title": "Crea innesco",
|
"title": "Crea attivatore",
|
||||||
"step1": {
|
"step1": {
|
||||||
"description": "Configura le impostazioni di base per il tuo innesco."
|
"description": "Configura le impostazioni di base per il tuo attivatore."
|
||||||
},
|
},
|
||||||
"step2": {
|
"step2": {
|
||||||
"description": "Imposta il contenuto che attiverà questa azione."
|
"description": "Imposta il contenuto che attiverà questa azione."
|
||||||
},
|
},
|
||||||
"step3": {
|
"step3": {
|
||||||
"description": "Configura la soglia e le azioni per questo innesco."
|
"description": "Configura la soglia e le azioni per questo attivatore."
|
||||||
},
|
},
|
||||||
"steps": {
|
"steps": {
|
||||||
"nameAndType": "Nome e tipo",
|
"nameAndType": "Nome e tipo",
|
||||||
@@ -2030,10 +2030,10 @@
|
|||||||
"desc": "La griglia di regioni è un algoritmo di ottimizzazione che apprende dove gli oggetti di diverse dimensioni appaiono tipicamente nel campo visivo di ciascuna telecamera. Frigate utilizza questi dati per dimensionare in modo efficiente le regioni di rilevamento. La griglia viene creata automaticamente nel tempo a partire dai dati degli oggetti tracciati.",
|
"desc": "La griglia di regioni è un algoritmo di ottimizzazione che apprende dove gli oggetti di diverse dimensioni appaiono tipicamente nel campo visivo di ciascuna telecamera. Frigate utilizza questi dati per dimensionare in modo efficiente le regioni di rilevamento. La griglia viene creata automaticamente nel tempo a partire dai dati degli oggetti tracciati.",
|
||||||
"clear": "Pulisci griglia di regioni",
|
"clear": "Pulisci griglia di regioni",
|
||||||
"clearConfirmTitle": "Pulisci griglia di regioni",
|
"clearConfirmTitle": "Pulisci griglia di regioni",
|
||||||
"clearConfirmDesc": "La pulizia della griglia di regioni non è consigliata a meno che non si sia recentemente modificato il modello del rilevatore o la posizione fisica della telecamera, riscontrando problemi di tracciamento degli oggetti. La griglia verrà ricostruita automaticamente nel tempo man mano che gli oggetti vengono tracciati. Per rendere effettive le modifiche è necessario riavviare Frigate.",
|
"clearConfirmDesc": "La pulizia della griglia delle regioni non è consigliata, a meno che non sia stata modificata di recente la dimensione del modello del rilevatore, oppure sia stata cambiata la posizione fisica della telecamera e si riscontrino problemi di tracciamento degli oggetti. La griglia verrà ricostruita automaticamente nel tempo man mano che gli oggetti vengono tracciati. È richiesto un riavvio di Frigate affinché le modifiche abbiano effetto.",
|
||||||
"clearSuccess": "Griglia di regioni pulita con successo",
|
"clearSuccess": "Griglia delle regioni pulita con successo",
|
||||||
"clearError": "Impossibile pulire la griglia di regioni",
|
"clearError": "Impossibile pulire la griglia delle regioni",
|
||||||
"restartRequired": "È necessario riavviare il sistema affinché le modifiche alla griglia di regioni abbiano effetto"
|
"restartRequired": "È necessario riavviare il sistema affinché le modifiche alla griglia delle regioni abbiano effetto"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"retainMode": {
|
"retainMode": {
|
||||||
|
|||||||
@@ -217,7 +217,8 @@
|
|||||||
"id": "Bahasa Indonesia (Indonesisk)",
|
"id": "Bahasa Indonesia (Indonesisk)",
|
||||||
"ur": "اردو (Urdu)",
|
"ur": "اردو (Urdu)",
|
||||||
"hr": "Hrvatski (Kroatisk)",
|
"hr": "Hrvatski (Kroatisk)",
|
||||||
"bs": "Bosanski (Bosnisk)"
|
"bs": "Bosanski (Bosnisk)",
|
||||||
|
"zhHant": "繁體中文 (Tradisjonell kinesisk)"
|
||||||
},
|
},
|
||||||
"appearance": "Utseende",
|
"appearance": "Utseende",
|
||||||
"darkMode": {
|
"darkMode": {
|
||||||
@@ -326,5 +327,8 @@
|
|||||||
"separatorWithSpace": ", "
|
"separatorWithSpace": ", "
|
||||||
},
|
},
|
||||||
"validation_errors": "Valideringsfeil",
|
"validation_errors": "Valideringsfeil",
|
||||||
"no_items": "Ingen elementer"
|
"no_items": "Ingen elementer",
|
||||||
|
"credentialField": {
|
||||||
|
"savedPlaceholder": "Lagret – la stå tomt for å beholde gjeldende"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -68,7 +68,10 @@
|
|||||||
"desc": "Velg kameraer for denne gruppen."
|
"desc": "Velg kameraer for denne gruppen."
|
||||||
},
|
},
|
||||||
"icon": "Ikon",
|
"icon": "Ikon",
|
||||||
"success": "Kameragruppen ({{name}}) er lagret."
|
"success": "Kameragruppen ({{name}}) er lagret.",
|
||||||
|
"showAll": "Vis alle kameragrupper",
|
||||||
|
"showLess": "Vis mindre",
|
||||||
|
"editGroups": "Rediger kameragrupper"
|
||||||
},
|
},
|
||||||
"debug": {
|
"debug": {
|
||||||
"options": {
|
"options": {
|
||||||
|
|||||||
@@ -34,6 +34,9 @@
|
|||||||
"ask_an": "Er dette objekt en <code>{{label}}</code>?",
|
"ask_an": "Er dette objekt en <code>{{label}}</code>?",
|
||||||
"ask_a": "Er dette objektet en <code>{{label}}</code>?",
|
"ask_a": "Er dette objektet en <code>{{label}}</code>?",
|
||||||
"ask_full": "Er dette objekt en <code>{{untranslatedLabel}}</code> ({{translatedLabel}})?"
|
"ask_full": "Er dette objekt en <code>{{untranslatedLabel}}</code> ({{translatedLabel}})?"
|
||||||
|
},
|
||||||
|
"toast": {
|
||||||
|
"error": "Kunne ikke sende til Frigate+. Vennligst sjekk nettverksforbindelsen din og prøv igjen."
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -112,7 +115,14 @@
|
|||||||
"detectionCount_one": "1 sporet objekt",
|
"detectionCount_one": "1 sporet objekt",
|
||||||
"detectionCount_other": "{{count}} sporede objekter",
|
"detectionCount_other": "{{count}} sporede objekter",
|
||||||
"exportButton_one": "Eksporter 1 kamera",
|
"exportButton_one": "Eksporter 1 kamera",
|
||||||
"exportButton_other": "Eksporter {{count}} kameraer"
|
"exportButton_other": "Eksporter {{count}} kameraer",
|
||||||
|
"searchOrSelectGroup": "Søk, eller velg en kameragruppe...",
|
||||||
|
"selectAll": "Velg alle kameraer",
|
||||||
|
"clearSelection": "Nullstill valg",
|
||||||
|
"selectWithActivity": "Kameraer med sporede objekter",
|
||||||
|
"selectGroup": "Velg gruppe",
|
||||||
|
"noMatchingCameras": "Ingen kameraer samsvarer med søket ditt",
|
||||||
|
"selectedCount": "{{selected}} / {{total}} valgt"
|
||||||
},
|
},
|
||||||
"multi": {
|
"multi": {
|
||||||
"description": "Eksporter hver valgte inspeksjon. Alle eksporter vil bli gruppert under én sak.",
|
"description": "Eksporter hver valgte inspeksjon. Alle eksporter vil bli gruppert under én sak.",
|
||||||
|
|||||||
@@ -48,5 +48,6 @@
|
|||||||
"error": {
|
"error": {
|
||||||
"submitFrigatePlusFailed": "Kunne ikke sende bildet til Frigate+"
|
"submitFrigatePlusFailed": "Kunne ikke sende bildet til Frigate+"
|
||||||
}
|
}
|
||||||
}
|
},
|
||||||
|
"cameraOff": "Kameraet er av"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -67,7 +67,7 @@
|
|||||||
},
|
},
|
||||||
"listen": {
|
"listen": {
|
||||||
"label": "Lyttetyper",
|
"label": "Lyttetyper",
|
||||||
"description": "Liste over typer lydhendelser som skal detekteres (f.eks. bjeff, brannalarm, skrik, tale, rop)."
|
"description": "Liste over typer lydhendelser som skal detekteres (f.eks. bjeff, brannalarm, tale, rop)."
|
||||||
},
|
},
|
||||||
"filters": {
|
"filters": {
|
||||||
"label": "Lydfiltre",
|
"label": "Lydfiltre",
|
||||||
@@ -164,11 +164,11 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"ffmpeg": {
|
"ffmpeg": {
|
||||||
"label": "FFmpeg",
|
"label": "Strømmer (FFmpeg)",
|
||||||
"description": "FFmpeg-innstillinger, inkludert sti til binærfil, argumenter, alternativer for maskinvareakselerasjon og utdata-argumenter per rolle.",
|
"description": "FFmpeg-innstillinger, inkludert sti til binærfil, argumenter, alternativer for maskinvareakselerasjon og utdata-argumenter per rolle.",
|
||||||
"path": {
|
"path": {
|
||||||
"label": "FFmpeg-sti",
|
"label": "FFmpeg-sti",
|
||||||
"description": "Sti til FFmpeg-binærfilen som skal brukes, eller et versjonsalias (\"5.0\" eller \"7.0\")."
|
"description": "Sti til FFmpeg-binærfilen som skal brukes, eller et versjonsalias (\"7.0\" eller \"8.0\")."
|
||||||
},
|
},
|
||||||
"global_args": {
|
"global_args": {
|
||||||
"label": "Globale FFmpeg-argumenter",
|
"label": "Globale FFmpeg-argumenter",
|
||||||
@@ -484,6 +484,9 @@
|
|||||||
"max_concurrent": {
|
"max_concurrent": {
|
||||||
"description": "Maksimalt antall eksportjobber som kan behandles samtidig.",
|
"description": "Maksimalt antall eksportjobber som kan behandles samtidig.",
|
||||||
"label": "Maksimalt antall samtidige eksporter"
|
"label": "Maksimalt antall samtidige eksporter"
|
||||||
|
},
|
||||||
|
"chapters": {
|
||||||
|
"label": "Kapittelmetadata som skal bygges inn i eksporterte opptak"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"preview": {
|
"preview": {
|
||||||
@@ -674,7 +677,7 @@
|
|||||||
"label": "Effekt for tidsstempel",
|
"label": "Effekt for tidsstempel",
|
||||||
"description": "Visuell effekt for tidsstempelteksten (none, solid, shadow)."
|
"description": "Visuell effekt for tidsstempelteksten (none, solid, shadow)."
|
||||||
},
|
},
|
||||||
"description": "Stilalternativer for tidsstempler i strømmen, brukt på opptak og stillbilder."
|
"description": "Stilalternativer for tidsstempler brukt på stillbilder og i Feilsøkingsvisning."
|
||||||
},
|
},
|
||||||
"audio_transcription": {
|
"audio_transcription": {
|
||||||
"label": "Lydtranskripsjon",
|
"label": "Lydtranskripsjon",
|
||||||
@@ -870,6 +873,10 @@
|
|||||||
"order": {
|
"order": {
|
||||||
"description": "Numerisk rekkefølge for sortering av kameraet i grensesnittet; høyere tall vises senere.",
|
"description": "Numerisk rekkefølge for sortering av kameraet i grensesnittet; høyere tall vises senere.",
|
||||||
"label": "Rekkefølge i UI"
|
"label": "Rekkefølge i UI"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"description": "Velg om dette kameraet skal være synlig i inspeksjonen (inspeksjonssiden og dens kamerafilter, bevegelsesinspeksjon og historikkvisning).",
|
||||||
|
"label": "Vis i inspeksjon"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"webui_url": {
|
"webui_url": {
|
||||||
|
|||||||
@@ -212,7 +212,7 @@
|
|||||||
},
|
},
|
||||||
"default_role": {
|
"default_role": {
|
||||||
"label": "Standardrolle",
|
"label": "Standardrolle",
|
||||||
"description": "Standardrolle tildelt proxy-autentiserte brukere når ingen rolletilordning gjelder (admin eller viewer)."
|
"description": "Standardrolle tildelt proxy-autentiserte brukere når ingen rolletilordning gjelder."
|
||||||
},
|
},
|
||||||
"separator": {
|
"separator": {
|
||||||
"label": "Skilletegn",
|
"label": "Skilletegn",
|
||||||
@@ -555,7 +555,7 @@
|
|||||||
},
|
},
|
||||||
"listen": {
|
"listen": {
|
||||||
"label": "Lyttetyper",
|
"label": "Lyttetyper",
|
||||||
"description": "Liste over typer lydhendelser som skal detekteres (f.eks. bjeff, brannalarm, skrik, tale, rop)."
|
"description": "Liste over typer lydhendelser som skal detekteres (f.eks. bjeff, brannalarm, tale, rop)."
|
||||||
},
|
},
|
||||||
"filters": {
|
"filters": {
|
||||||
"label": "Lydfiltre",
|
"label": "Lydfiltre",
|
||||||
@@ -691,7 +691,7 @@
|
|||||||
"description": "FFmpeg-innstillinger, inkludert sti til binærfil, argumenter, alternativer for maskinvareakselerasjon og utdata-argumenter per rolle.",
|
"description": "FFmpeg-innstillinger, inkludert sti til binærfil, argumenter, alternativer for maskinvareakselerasjon og utdata-argumenter per rolle.",
|
||||||
"path": {
|
"path": {
|
||||||
"label": "FFmpeg-sti",
|
"label": "FFmpeg-sti",
|
||||||
"description": "Sti til FFmpeg-binærfilen som skal brukes, eller et versjonsalias (\"5.0\" eller \"7.0\")."
|
"description": "Sti til FFmpeg-binærfilen som skal brukes, eller et versjonsalias (\"7.0\" eller \"8.0\")."
|
||||||
},
|
},
|
||||||
"global_args": {
|
"global_args": {
|
||||||
"label": "Globale FFmpeg-argumenter",
|
"label": "Globale FFmpeg-argumenter",
|
||||||
@@ -1043,6 +1043,9 @@
|
|||||||
"max_concurrent": {
|
"max_concurrent": {
|
||||||
"description": "Maksimalt antall eksportjobber som kan behandles samtidig.",
|
"description": "Maksimalt antall eksportjobber som kan behandles samtidig.",
|
||||||
"label": "Maksimalt antall samtidige eksporter"
|
"label": "Maksimalt antall samtidige eksporter"
|
||||||
|
},
|
||||||
|
"chapters": {
|
||||||
|
"label": "Kapittelmetadata som skal bygges inn i eksporterte opptak"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"preview": {
|
"preview": {
|
||||||
@@ -1554,6 +1557,10 @@
|
|||||||
"dashboard": {
|
"dashboard": {
|
||||||
"label": "Vis i grensesnitt",
|
"label": "Vis i grensesnitt",
|
||||||
"description": "Velg om dette kameraet skal være synlig i Frigate-grensesnittet. Deaktivering krever manuell redigering av konfigurasjonen for å vise kameraet igjen."
|
"description": "Velg om dette kameraet skal være synlig i Frigate-grensesnittet. Deaktivering krever manuell redigering av konfigurasjonen for å vise kameraet igjen."
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"label": "Vis i inspeksjon",
|
||||||
|
"description": "Velg om dette kameraet skal være synlig i inspeksjon (inspeksjonssiden og dens kamerafilter, bevegelsesinspeksjon og historikkvisning)."
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"onvif": {
|
"onvif": {
|
||||||
|
|||||||
@@ -28,5 +28,8 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"minLength": "Må være minst {{limit}} tegn",
|
"minLength": "Må være minst {{limit}} tegn",
|
||||||
"maxLength": "Må være maks {{limit}} tegn"
|
"maxLength": "Må være maks {{limit}} tegn",
|
||||||
|
"detect": {
|
||||||
|
"dimensionMustBeEven": "Må være et partall."
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -65,5 +65,8 @@
|
|||||||
"active": "Resonnerer…",
|
"active": "Resonnerer…",
|
||||||
"show": "Vis resonnering",
|
"show": "Vis resonnering",
|
||||||
"hide": "Skjul resonnering"
|
"hide": "Skjul resonnering"
|
||||||
|
},
|
||||||
|
"thinking": {
|
||||||
|
"toggle": "Aktiver/deaktiver tenking"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -50,7 +50,9 @@
|
|||||||
},
|
},
|
||||||
"camera": {
|
"camera": {
|
||||||
"enable": "Aktiver kamera",
|
"enable": "Aktiver kamera",
|
||||||
"disable": "Deaktiver kamera"
|
"disable": "Deaktiver kamera",
|
||||||
|
"turnOn": "Slå kamera på",
|
||||||
|
"turnOff": "Skå kamera av"
|
||||||
},
|
},
|
||||||
"snapshots": {
|
"snapshots": {
|
||||||
"enable": "Aktiver stillbilder",
|
"enable": "Aktiver stillbilder",
|
||||||
@@ -169,7 +171,8 @@
|
|||||||
"snapshots": "Stillbilder",
|
"snapshots": "Stillbilder",
|
||||||
"audioDetection": "Lydregistrering",
|
"audioDetection": "Lydregistrering",
|
||||||
"autotracking": "Automatisk sporing",
|
"autotracking": "Automatisk sporing",
|
||||||
"transcription": "Lydtranskripsjon"
|
"transcription": "Lydtranskripsjon",
|
||||||
|
"camera": "Kamera"
|
||||||
},
|
},
|
||||||
"transcription": {
|
"transcription": {
|
||||||
"enable": "Aktiver direkte lydtranskripsjon",
|
"enable": "Aktiver direkte lydtranskripsjon",
|
||||||
|
|||||||
@@ -24,7 +24,9 @@
|
|||||||
"points_one": "{{count}} punkt",
|
"points_one": "{{count}} punkt",
|
||||||
"points_other": "{{count}} punkter",
|
"points_other": "{{count}} punkter",
|
||||||
"undo": "Angre siste punkt",
|
"undo": "Angre siste punkt",
|
||||||
"reset": "Tilbakestill polygon"
|
"reset": "Tilbakestill polygon",
|
||||||
|
"moveMode": "Flytt",
|
||||||
|
"drawMode": "Tegn"
|
||||||
},
|
},
|
||||||
"motionHeatmapLabel": "Varmekart for bevegelse",
|
"motionHeatmapLabel": "Varmekart for bevegelse",
|
||||||
"dialog": {
|
"dialog": {
|
||||||
@@ -40,11 +42,11 @@
|
|||||||
"settings": {
|
"settings": {
|
||||||
"title": "Søkeinnstillinger",
|
"title": "Søkeinnstillinger",
|
||||||
"parallelMode": "Parallellmodus",
|
"parallelMode": "Parallellmodus",
|
||||||
"parallelModeDesc": "Skann flere opptakssegmenter samtidig (raskere, men betydelig mer CPU-intensivt)",
|
"parallelModeDesc": "Skann flere opptaksintervaller samtidig (raskere, men krever mer dekodingsressurser)",
|
||||||
"threshold": "Følsomhetsterskel",
|
"threshold": "Følsomhetsterskel",
|
||||||
"thresholdDesc": "Lavere verdier detekterer mindre endringer (1–255)",
|
"thresholdDesc": "Lavere verdier detekterer mindre endringer (1–255)",
|
||||||
"minArea": "Minimum endringsområde",
|
"minArea": "Minimum endringsområde",
|
||||||
"minAreaDesc": "Minimum prosentandel av interesseområdet som må endres for å anses som betydelig",
|
"minAreaDesc": "Minimumsstørrelse for et enkelt bevegelsesområde, som en prosentandel av interesseområdet",
|
||||||
"frameSkip": "Bilde-sprang",
|
"frameSkip": "Bilde-sprang",
|
||||||
"frameSkipDesc": "Behandle hvert N-te bilde. Sett denne til kameraets bildefrekvens for å behandle ett bilde i sekundet (f.eks. 5 for et 5 FPS-kamera, 30 for et 30 FPS-kamera). Høyere verdier vil være raskere, men kan gå glipp av korte bevegelseshendelser.",
|
"frameSkipDesc": "Behandle hvert N-te bilde. Sett denne til kameraets bildefrekvens for å behandle ett bilde i sekundet (f.eks. 5 for et 5 FPS-kamera, 30 for et 30 FPS-kamera). Høyere verdier vil være raskere, men kan gå glipp av korte bevegelseshendelser.",
|
||||||
"maxResults": "Maksimalt antall resultater",
|
"maxResults": "Maksimalt antall resultater",
|
||||||
@@ -70,6 +72,9 @@
|
|||||||
"framesDecoded": "Bilder dekodet",
|
"framesDecoded": "Bilder dekodet",
|
||||||
"wallTime": "Søketid",
|
"wallTime": "Søketid",
|
||||||
"segmentErrors": "Segmentfeil",
|
"segmentErrors": "Segmentfeil",
|
||||||
"seconds": "{{seconds}}s"
|
"seconds": "{{seconds}}s",
|
||||||
}
|
"scanSummary": "{{segments}} segmenter · {{time}}",
|
||||||
|
"minutesSeconds": "{{minutes}}m {{seconds}}s"
|
||||||
|
},
|
||||||
|
"scanning": "Skanner {{time}}"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -31,7 +31,7 @@
|
|||||||
"notifications": "Meldingsvarsler",
|
"notifications": "Meldingsvarsler",
|
||||||
"enrichments": "Utvidelser",
|
"enrichments": "Utvidelser",
|
||||||
"triggers": "Utløsere",
|
"triggers": "Utløsere",
|
||||||
"cameraManagement": "Administrasjon",
|
"cameraManagement": "Kamerabehandling",
|
||||||
"cameraReview": "Inspeksjon",
|
"cameraReview": "Inspeksjon",
|
||||||
"roles": "Roller",
|
"roles": "Roller",
|
||||||
"profiles": "Profiler",
|
"profiles": "Profiler",
|
||||||
@@ -46,7 +46,7 @@
|
|||||||
"systemDetectionModel": "Deteksjonsmodell",
|
"systemDetectionModel": "Deteksjonsmodell",
|
||||||
"cameraLivePlayback": "Direkteavspilling",
|
"cameraLivePlayback": "Direkteavspilling",
|
||||||
"globalLivePlayback": "Direkteavspilling",
|
"globalLivePlayback": "Direkteavspilling",
|
||||||
"cameraFfmpeg": "FFmpeg",
|
"cameraFfmpeg": "Strømmer (FFmpeg)",
|
||||||
"globalFfmpeg": "FFmpeg",
|
"globalFfmpeg": "FFmpeg",
|
||||||
"systemFfmpeg": "FFmpeg",
|
"systemFfmpeg": "FFmpeg",
|
||||||
"cameraBirdseye": "Fugleperspektiv",
|
"cameraBirdseye": "Fugleperspektiv",
|
||||||
@@ -723,7 +723,8 @@
|
|||||||
"notificationUnavailable": {
|
"notificationUnavailable": {
|
||||||
"documentation": "Se dokumentasjonen",
|
"documentation": "Se dokumentasjonen",
|
||||||
"title": "Meldingsvarsler utilgjengelig",
|
"title": "Meldingsvarsler utilgjengelig",
|
||||||
"desc": "Nettleser push-varsler krever et sikkert miljø (<code>https://…</code>). Dette er en nettleserbegrensning. Få tilgang til Frigate på en sikker måte for å bruke meldingsvarsler."
|
"desc": "Nettleser push-varsler krever et sikkert miljø (<code>https://…</code>). Dette er en nettleserbegrensning. Få tilgang til Frigate på en sikker måte for å bruke meldingsvarsler.",
|
||||||
|
"descPwa": "På iOS er web-pushvarsler kun tilgjengelig når Frigate er installert på hjemskjermen din. Åpne <strong>Del</strong>-menyen, velg <strong>Legg til på hjemskjermen</strong>, og åpne deretter Frigate fra det nye ikonet for å registrere denne enheten for varsler."
|
||||||
},
|
},
|
||||||
"email": {
|
"email": {
|
||||||
"title": "E-post",
|
"title": "E-post",
|
||||||
@@ -1136,7 +1137,7 @@
|
|||||||
"brands": {
|
"brands": {
|
||||||
"reolink-rtsp": "Reolink RTSP anbefales ikke. Aktiver HTTP i kameraets fastvare-innstillinger og start kameraveiviseren på nytt."
|
"reolink-rtsp": "Reolink RTSP anbefales ikke. Aktiver HTTP i kameraets fastvare-innstillinger og start kameraveiviseren på nytt."
|
||||||
},
|
},
|
||||||
"customUrlRtspRequired": "Egendefinerte URL-er må begynne med \"rtsp://\". Manuell konfigurering kreves for kamerastrømmer som ikke bruker RTSP."
|
"customUrlRtspRequired": "Egendefinerte URL-er må begynne med «rtsp://» eller «rtsps://». Manuell konfigurasjon kreves for kamerastrømmer som ikke bruker RTSP."
|
||||||
},
|
},
|
||||||
"docs": {
|
"docs": {
|
||||||
"reolink": "https://docs.frigate.video/configuration/camera_specific.html#reolink-cameras"
|
"reolink": "https://docs.frigate.video/configuration/camera_specific.html#reolink-cameras"
|
||||||
@@ -1364,10 +1365,10 @@
|
|||||||
"selectCamera": "Velg et kamera",
|
"selectCamera": "Velg et kamera",
|
||||||
"backToSettings": "Tilbake til kamerainnstillinger",
|
"backToSettings": "Tilbake til kamerainnstillinger",
|
||||||
"streams": {
|
"streams": {
|
||||||
"title": "Aktiver / Deaktiver kameraer",
|
"title": "Kamerastatus og detaljer",
|
||||||
"desc": "Midlertidig deaktiver et kamera til Frigate startes på nytt. Deaktivering av et kamera stopper Frigates behandling av dette kameraets strømmer fullstendig. Deteksjon, opptak og feilsøking vil være utilgjengelig.<br /> <em>Merk: Dette deaktiverer ikke go2rtc-restrømming.</em>",
|
"desc": "Midlertidig deaktiver et kamera til Frigate startes på nytt. Deaktivering av et kamera stopper Frigates behandling av dette kameraets strømmer fullstendig. Deteksjon, opptak og feilsøking vil være utilgjengelig.<br /> <em>Merk: Dette deaktiverer ikke go2rtc-restrømming.</em>",
|
||||||
"disableDesc": "Aktiver et kamera som for øyeblikket ikke er synlig i grensesnittet og deaktivert i konfigurasjonen. En omstart av Frigate kreves etter aktivering.",
|
"disableDesc": "Aktiver et kamera som for øyeblikket ikke er synlig i grensesnittet og deaktivert i konfigurasjonen. En omstart av Frigate kreves etter aktivering.",
|
||||||
"enableSuccess": "Aktiverte {{cameraName}} i konfigurasjonen. Start Frigate på nytt for å ta i bruk endringene.",
|
"enableSuccess": "Aktiverte {{cameraName}}. Start Frigate på nytt for å ta i bruk.",
|
||||||
"enableLabel": "Aktiverte kameraer",
|
"enableLabel": "Aktiverte kameraer",
|
||||||
"enableDesc": "Deaktiver et aktivert kamera midlertidig frem til Frigate starter på nytt. Deaktivering av et kamera stopper all prosessering av kameraets strømmer. Deteksjon, opptak og feilsøking vil være utilgjengelig.<br /> <em>Merk: Dette deaktiverer ikke videreformidling (restream) i go2rtc.</em><br /><br />Dra i feltet for å endre rekkefølgen på kameraene slik de vises i grensesnittet. Rekkefølgen på de aktiverte kameraene vil gjenspeiles i hele grensesnittet, inkludert Live-dashbordet og rullegardinmenyene for kameravalg.",
|
"enableDesc": "Deaktiver et aktivert kamera midlertidig frem til Frigate starter på nytt. Deaktivering av et kamera stopper all prosessering av kameraets strømmer. Deteksjon, opptak og feilsøking vil være utilgjengelig.<br /> <em>Merk: Dette deaktiverer ikke videreformidling (restream) i go2rtc.</em><br /><br />Dra i feltet for å endre rekkefølgen på kameraene slik de vises i grensesnittet. Rekkefølgen på de aktiverte kameraene vil gjenspeiles i hele grensesnittet, inkludert Live-dashbordet og rullegardinmenyene for kameravalg.",
|
||||||
"disableLabel": "Deaktiverte kameraer",
|
"disableLabel": "Deaktiverte kameraer",
|
||||||
@@ -1379,7 +1380,30 @@
|
|||||||
},
|
},
|
||||||
"reorderHandle": "Dra for å endre rekkefølge",
|
"reorderHandle": "Dra for å endre rekkefølge",
|
||||||
"saving": "Lagrer…",
|
"saving": "Lagrer…",
|
||||||
"saved": "Lagret"
|
"saved": "Lagret",
|
||||||
|
"label": "Kamerastatus",
|
||||||
|
"description": "Angi driftsstatus for hvert kamera.<br /><br /><strong>På</strong>: Strømmer behandles normalt.<br /><strong>Av</strong>: Setter behandlingen midlertidig på pause. Vedvarer ikke etter omstart av Frigate.<br /><strong>Deaktivert</strong>: Stopper behandlingen og lagrer endringen i konfigurasjonen din. En omstart kreves for å aktivere et deaktivert kamera igjen.<br /><br /><em>Merk: Deaktivering påvirker ikke videreformidling (restream) i go2rtc.</em><br /><br />Dra i ikonet for å endre rekkefølgen på aktive kameraer slik de vises i grensesnittet, inkludert Live-dashbordet og rullegardinmenyene for kameravalg.",
|
||||||
|
"disabledSubheading": "Deaktivert i konfigurasjonen",
|
||||||
|
"status": {
|
||||||
|
"on": "På",
|
||||||
|
"off": "Av",
|
||||||
|
"disabled": "Deaktivert"
|
||||||
|
},
|
||||||
|
"disableSuccess": "Deaktiverte {{cameraName}} og lagret i konfigurasjonen.",
|
||||||
|
"details": {
|
||||||
|
"edit": "Rediger kameradetaljer",
|
||||||
|
"title": "Rediger kameradetaljer",
|
||||||
|
"description": "Oppdater visningsnavn, ekstern URL og synlighet brukt for dette kameraet i Frigate-grensesnittet.",
|
||||||
|
"friendlyNameLabel": "Visningsnavn",
|
||||||
|
"friendlyNameHelp": "Vennlig navn som vises for dette kameraet i Frigate-grensesnittet. La stå tomt for å bruke kamera-ID.",
|
||||||
|
"webuiUrlLabel": "URL til kameraets webgrensesnitt",
|
||||||
|
"webuiUrlHelp": "URL for å besøke kameraets webgrensesnitt direkte fra feilsøkingsvisningen (Debug). La stå tomt for å deaktivere lenken.",
|
||||||
|
"webuiUrlInvalid": "Må være en gyldig URL (f.eks. https://example.com).",
|
||||||
|
"dashboardLabel": "Vis på Live-dashbordet",
|
||||||
|
"dashboardHelp": "Vis dette kameraet på Live-dashbordet.",
|
||||||
|
"reviewLabel": "Vis i Inspeksjons-modus",
|
||||||
|
"reviewHelp": "Vis dette kameraet i Inspeksjon (Review), inkludert kamerafilteret, bevegelsesgjennomgang og historikkvisningen."
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"cameraConfig": {
|
"cameraConfig": {
|
||||||
"add": "Legg til kamera",
|
"add": "Legg til kamera",
|
||||||
@@ -1414,9 +1438,11 @@
|
|||||||
"enabled": "Aktivert",
|
"enabled": "Aktivert",
|
||||||
"inherit": "Arv",
|
"inherit": "Arv",
|
||||||
"disabled": "Deaktivert",
|
"disabled": "Deaktivert",
|
||||||
"description": "Konfigurer hvilke kameraer som er aktivert eller deaktivert når en profil aktiveres. Kameraer satt til \"Arv\" beholder sin opprinnelige status.",
|
"description": "Konfigurer hvilke kameraer som slås på eller av når en profil aktiveres. Kameraer satt til «Arv» beholder sin standardstatus.",
|
||||||
"title": "Profiloverstyringer for kamera",
|
"title": "Profiloverstyringer for kamera",
|
||||||
"selectLabel": "Velg profil"
|
"selectLabel": "Velg profil",
|
||||||
|
"on": "På",
|
||||||
|
"off": "Av"
|
||||||
},
|
},
|
||||||
"deleteCameraDialog": {
|
"deleteCameraDialog": {
|
||||||
"confirmTitle": "Er du sikker?",
|
"confirmTitle": "Er du sikker?",
|
||||||
@@ -1438,7 +1464,92 @@
|
|||||||
"dedicatedLpr": "Dedikert LPR (lesing av kjennemerker)",
|
"dedicatedLpr": "Dedikert LPR (lesing av kjennemerker)",
|
||||||
"saveSuccess": "Kameratype oppdatert for {{cameraName}}. Start Frigate på nytt for å bruke endringene."
|
"saveSuccess": "Kameratype oppdatert for {{cameraName}}. Start Frigate på nytt for å bruke endringene."
|
||||||
},
|
},
|
||||||
"description": "Legg til, rediger og slett kameraer. Kontroller hvilke kameraer som er aktivert og konfigurer overstyringer for hver profil og kameratype. For å konfigurere strømmer, deteksjon, bevegelse og andre kameraspesifikke innstillinger, velg den aktuelle seksjonen under Kamerakonfigurasjon."
|
"description": "Legg til, rediger og slett kameraer, kontroller statusen til hvert kamera, og konfigurer overstyringer per profil og kameratype. For å konfigurere strømmer, deteksjon, bevegelse og andre kameraspesifikke innstillinger, velg den aktuelle seksjonen under Kamerakonfigurasjon.",
|
||||||
|
"clone": {
|
||||||
|
"sectionTitle": "Klon innstillinger",
|
||||||
|
"sectionDescription": "Kopier konfigurasjon fra ett kamera til et annet eller til et nytt kamera.",
|
||||||
|
"button": "Klon innstillinger",
|
||||||
|
"title": "Klon kamerainnstillinger",
|
||||||
|
"description": "Kopier et kameras konfigurasjon til ett eller flere andre kameraer eller til et nytt kamera. Identitet (navn, visningsnavn, URL til webgrensesnitt, visningsrekkefølge) kopieres ikke.",
|
||||||
|
"source": {
|
||||||
|
"label": "Kildekamera",
|
||||||
|
"placeholder": "Velg et kildekamera",
|
||||||
|
"required": "Kildekamera må velges"
|
||||||
|
},
|
||||||
|
"target": {
|
||||||
|
"legend": "Mål",
|
||||||
|
"newRadio": "Nytt kamera",
|
||||||
|
"newNameLabel": "Kameranavn",
|
||||||
|
"newNamePlaceholder": "f.eks. bakdoer eller Bakdør",
|
||||||
|
"newNameRequired": "Kameranavn kreves",
|
||||||
|
"newNameInvalid": "Ugyldig kameranavn",
|
||||||
|
"newNameCollision": "Et kamera med dette navnet eksisterer allerede",
|
||||||
|
"newStreamsForced": "Strømmer kopieres alltid for et nytt kamera.",
|
||||||
|
"existingCamerasRadio": "Eksisterende kameraer",
|
||||||
|
"allCameras": "Alle kameraer",
|
||||||
|
"existingPlaceholder": "Velg minst ett kamera",
|
||||||
|
"existingDisabled": "Ingen andre kameraer å kopiere til"
|
||||||
|
},
|
||||||
|
"categories": {
|
||||||
|
"legend": "Innstillinger som skal klones",
|
||||||
|
"description": "Velg hvilke innstillinger som skal kopieres fra kildekameraet.",
|
||||||
|
"selectAll": "Velg alle",
|
||||||
|
"selectNone": "Velg ingen",
|
||||||
|
"resetDefaults": "Tilbakestill til standardverdier",
|
||||||
|
"general": "Generelt",
|
||||||
|
"spatial": "Romlige innstillinger",
|
||||||
|
"streams": "Strømmer",
|
||||||
|
"spatialWarningTitle": "Uoverensstemmelse i oppløsning",
|
||||||
|
"spatialWarning": "Kildekameraet {{srcCamera}} sin deteksjonsoppløsning ({{srcWidth}}×{{srcHeight}}) er forskjellig fra: {{cameras}}. Polygoner vil kanskje ikke samsvare på disse kameraene. Disse er deaktivert som standard; aktiver for å kopiere som de er.",
|
||||||
|
"restartHint": "Omstart kreves",
|
||||||
|
"items": {
|
||||||
|
"record": "Opptak pågår",
|
||||||
|
"snapshots": "Øyeblikksbilder",
|
||||||
|
"review": "Inspeksjon",
|
||||||
|
"motion": "Bevegelsesdeteksjon",
|
||||||
|
"objects": "Objekter",
|
||||||
|
"audio": "Lyddeteksjon",
|
||||||
|
"audio_transcription": "Lydtranskripsjon",
|
||||||
|
"notifications": "Varsler",
|
||||||
|
"birdseye": "Fugleperspektiv",
|
||||||
|
"mqtt": "MQTT",
|
||||||
|
"timestamp_style": "Tidsstempelstil",
|
||||||
|
"onvif": "ONVIF",
|
||||||
|
"lpr": "Kjennemerke gjenkjenning",
|
||||||
|
"face_recognition": "Ansiktsgjenkjenning",
|
||||||
|
"semantic_search": "Semantisk søk",
|
||||||
|
"genai": "Generativ AI",
|
||||||
|
"type": "Kameratype (normal / dedikert LPR)",
|
||||||
|
"profiles": "Profiler",
|
||||||
|
"detect": "Deteksjonsdimensjoner",
|
||||||
|
"zones": "Soner",
|
||||||
|
"motion_mask": "Bevegelsesmasker",
|
||||||
|
"object_masks": "Objektmasker",
|
||||||
|
"ffmpeg_live": "Strømme-URL-er og roller"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"footer": {
|
||||||
|
"restartNeeded": "Omstart vil kreves for enkelte endringer.",
|
||||||
|
"liveOnly": "Alle endringer vil trå i kraft direkte uten omstart.",
|
||||||
|
"submit": "Klon",
|
||||||
|
"submitting": "Kloner…",
|
||||||
|
"changeCount_one": "{{count}} endring vil bli brukt",
|
||||||
|
"changeCount_other": "{{count}} endringer vil bli brukt"
|
||||||
|
},
|
||||||
|
"toast": {
|
||||||
|
"success": "Innstillinger kopiert til {{cameraName}}",
|
||||||
|
"successWithRestart": "Innstillinger kopiert til {{cameraName}}. Start Frigate på nytt for å ta i bruk alle endringer.",
|
||||||
|
"partialFailure": "{{successCount}} seksjoner ble tatt i bruk; «{{failedSection}}» feilet: {{errorMessage}}",
|
||||||
|
"partialFailureMulti": "Kopiert til {{successCount}} kamera(er); feilet for {{failed}}: {{errorMessage}}",
|
||||||
|
"newCameraPartialFailure": "Kameraet {{cameraName}} ble opprettet, men noen innstillinger kunne ikke kopieres: {{errorMessage}}",
|
||||||
|
"sourceMissing": "Kildekameraet eksisterer ikke lenger",
|
||||||
|
"submitError": "Kunne ikke klone kamera: {{errorMessage}}",
|
||||||
|
"successMulti_one": "Innstillinger kopiert til {{count}} kamera",
|
||||||
|
"successMulti_other": "Innstillinger kopiert til {{count}} kameraer",
|
||||||
|
"successMultiWithRestart_one": "Innstillinger kopiert til {{count}} kamera. Start Frigate på nytt for å aktivere alle endringene.",
|
||||||
|
"successMultiWithRestart_other": "Innstillinger kopiert til {{count}} kameraer. Start Frigate på nytt for å bruke alle endringene."
|
||||||
|
}
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"cameraReview": {
|
"cameraReview": {
|
||||||
"title": "Innstillinger for kamerainspeksjon",
|
"title": "Innstillinger for kamerainspeksjon",
|
||||||
@@ -1659,18 +1770,58 @@
|
|||||||
"addCustomLabel": "Legg til egendefinert etikett...",
|
"addCustomLabel": "Legg til egendefinert etikett...",
|
||||||
"restartRequiredField": "Omstart påkrevd",
|
"restartRequiredField": "Omstart påkrevd",
|
||||||
"cameraInputs": {
|
"cameraInputs": {
|
||||||
"itemTitle": "Strøm {{index}}"
|
"itemTitle": "Strøm {{index}}",
|
||||||
|
"sourceMode": {
|
||||||
|
"restream": "Videreformidling / Restream (go2rtc)",
|
||||||
|
"manual": "Manuell kildesti",
|
||||||
|
"go2rtcStreamLabel": "go2rtc-strøm",
|
||||||
|
"go2rtcStreamPlaceholder": "Velg en go2rtc-strøm",
|
||||||
|
"noGo2rtcStreams": "Ingen go2rtc-strømmer er konfigurert",
|
||||||
|
"go2rtcStreamSearch": "Søk i strømmer...",
|
||||||
|
"availableStreams": "Tilgjengelige strømmer",
|
||||||
|
"noMatchingStreams": "Ingen matchende strømmer"
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"searchPlaceholder": "Søk...",
|
"searchPlaceholder": "Søk...",
|
||||||
"showAdvanced": "Vis avanserte innstillinger",
|
"showAdvanced": "Vis avanserte innstillinger",
|
||||||
"genaiModel": {
|
"genaiModel": {
|
||||||
"placeholder": "Velg modell…",
|
"placeholder": "Velg eller skriv inn en modell…",
|
||||||
"search": "Søk modeller…",
|
"search": "Søk eller skriv inn en modell…",
|
||||||
"noModels": "Ingen modeller tilgjengelig"
|
"noModels": "Ingen modeller tilgjengelig",
|
||||||
|
"available": "Tilgjengelige modeller",
|
||||||
|
"useCustom": "Bruk «{{value}}»",
|
||||||
|
"refresh": "Oppdater modeller",
|
||||||
|
"probeFailed": "Kunne ikke hente modeller",
|
||||||
|
"fetchedModels": "Modelliste ble hentet"
|
||||||
},
|
},
|
||||||
"knownPlates": {
|
"knownPlates": {
|
||||||
"platePlaceholder": "Kjennemerke nummer eller regex",
|
"platePlaceholder": "Kjennemerke nummer eller regex",
|
||||||
"namePlaceholder": "f.eks konas bil"
|
"namePlaceholder": "f.eks konas bil"
|
||||||
|
},
|
||||||
|
"liveStreams": {
|
||||||
|
"streamNameLabel": "Strømnavn",
|
||||||
|
"streamNamePlaceholder": "f.eks. Hovedstrøm HD",
|
||||||
|
"go2rtcStreamLabel": "go2rtc-strøm",
|
||||||
|
"go2rtcStreamPlaceholder": "Velg en go2rtc-strøm",
|
||||||
|
"go2rtcStreamSearch": "Søk eller skriv inn et strømnavn…",
|
||||||
|
"noGo2rtcStreams": "Ingen go2rtc-strømmer er konfigurert",
|
||||||
|
"availableStreams": "Tilgjengelige strømmer",
|
||||||
|
"useCustom": "Bruk «{{value}}»",
|
||||||
|
"addStream": "Legg til strøm"
|
||||||
|
},
|
||||||
|
"semanticSearchModelSize": {
|
||||||
|
"notApplicable": "Ikke relevant for leverandører av generativ AI"
|
||||||
|
},
|
||||||
|
"ptzPresets": {
|
||||||
|
"placeholder": "Velg eller skriv inn en forhåndsinnstilling...",
|
||||||
|
"search": "Søk eller skriv inn en forhåndsinnstilling...",
|
||||||
|
"noPresets": "Ingen forhåndsinnstillinger tilgjengelig",
|
||||||
|
"available": "Forhåndsinnstillinger for kamera",
|
||||||
|
"useCustom": "Bruk «{{value}}»"
|
||||||
|
},
|
||||||
|
"defaultRole": {
|
||||||
|
"admin": "Administrator",
|
||||||
|
"viewer": "Seer (Viewer)"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"button": {
|
"button": {
|
||||||
@@ -1754,7 +1905,8 @@
|
|||||||
"renameStreamDesc": "Skriv inn et nytt navn for denne strømmen. Endring av navn kan ødelegge for kameraer eller andre strømmer som refererer til den ved navn.",
|
"renameStreamDesc": "Skriv inn et nytt navn for denne strømmen. Endring av navn kan ødelegge for kameraer eller andre strømmer som refererer til den ved navn.",
|
||||||
"deleteStream": "Slett strøm",
|
"deleteStream": "Slett strøm",
|
||||||
"streamName": "Strømnavn",
|
"streamName": "Strømnavn",
|
||||||
"streamNumber": "Strøm {{index}}"
|
"streamNumber": "Strøm {{index}}",
|
||||||
|
"sourceNumber": "Kilde {{index}}"
|
||||||
},
|
},
|
||||||
"profiles": {
|
"profiles": {
|
||||||
"active": "Aktiv",
|
"active": "Aktiv",
|
||||||
@@ -1816,7 +1968,13 @@
|
|||||||
},
|
},
|
||||||
"detect": {
|
"detect": {
|
||||||
"fpsGreaterThanFive": "Det anbefales ikke å sette FPS for deteksjon høyere enn 5. Høyere verdier kan føre til ytelsesproblemer uten å gi noen fordeler.",
|
"fpsGreaterThanFive": "Det anbefales ikke å sette FPS for deteksjon høyere enn 5. Høyere verdier kan føre til ytelsesproblemer uten å gi noen fordeler.",
|
||||||
"disabled": "Objektdeteksjon er deaktivert. Stillbilder, inspeksjonselementer og utvidelser som ansiktsgjenkjenning, lesing av kjennemerker og generativ AI vil ikke fungere."
|
"disabled": "Objektdeteksjon er deaktivert. Stillbilder, inspeksjonselementer og utvidelser som ansiktsgjenkjenning, lesing av kjennemerker og generativ AI vil ikke fungere.",
|
||||||
|
"resolutionShouldBeMultipleOfFour": "For best resultat bør deteksjonsbredde og -høyde være delelig med 4. Andre partall kan forårsake visuelle feil eller svak forvrengning i deteksjonsstrømmen.",
|
||||||
|
"aspectRatioMismatch": "Bredden og høyden du har oppgitt samsvarer ikke med sideforholdet til din nåværende deteksjonsoppløsning. Dette kan føre til et strukket eller forvrengt bilde.",
|
||||||
|
"maxFramesSet": "Å angi maksimalt antall bilder (max frames) overstyrer standard oppførsel og deaktiverer sporing av stasjonære objekter. Det er svært få situasjoner hvor dette er nødvendig, så bruk det med forsiktighet.",
|
||||||
|
"squareResolution": "En kvadratisk deteksjonsoppløsning er uvanlig. Deteksjonsbredden og -høyden bør samsvare med kameraets sideforhold (for eksempel 16:9), ikke dimensjonene til objektdeteksjonsmodellen. Et feilaktig sideforhold kan strekke bildet og redusere treffsikkerheten for deteksjon.",
|
||||||
|
"resolutionHigh": "Denne deteksjonsoppløsningen er høyere enn anbefalt og kan føre til økt ressursbruk uten å forbedre deteksjonsnøyaktigheten. En deteksjonsoppløsning på eller under 1080p anbefales for de fleste kameraer.",
|
||||||
|
"globalResolutionMultipleCameras": "En global deteksjonsoppløsning er satt samtidig som flere kameraer er konfigurert. Med mindre alle kameraer deler nøyaktig samme oppløsning og sideforhold, bør deteksjonsbredden og -høyden defineres per kamera for å matche hvert kameras opprinnelige sideforhold."
|
||||||
},
|
},
|
||||||
"birdseye": {
|
"birdseye": {
|
||||||
"objectsModeDetectDisabled": "Fugleperspektiv er satt til 'objekter'-modus, men objektdeteksjon er deaktivert for dette kameraet. Kameraet vil ikke vises i Fugleperspektiv."
|
"objectsModeDetectDisabled": "Fugleperspektiv er satt til 'objekter'-modus, men objektdeteksjon er deaktivert for dette kameraet. Kameraet vil ikke vises i Fugleperspektiv."
|
||||||
@@ -1843,6 +2001,16 @@
|
|||||||
},
|
},
|
||||||
"semanticSearch": {
|
"semanticSearch": {
|
||||||
"jinav2SmallModelSize": "Størrelsen \"liten\" med Jina V2-modellen har høyt minnebruk og beregningskostnad. Den \"store\" modellen med en dedikert GPU anbefales."
|
"jinav2SmallModelSize": "Størrelsen \"liten\" med Jina V2-modellen har høyt minnebruk og beregningskostnad. Den \"store\" modellen med en dedikert GPU anbefales."
|
||||||
|
},
|
||||||
|
"model": {
|
||||||
|
"optimizedFor320": "Frigate er optimalisert for en 320x320-modell, som er det beste valget for de fleste oppsett. En 640x640-modell er tregere og hjelper kun i spesifikke scenarier.",
|
||||||
|
"inputDimensionsNotDetectResolution": "Modellens inndata for bredde og høyde er dimensjonene til selve objektdeteksjonsmodellen, ikke kameraets deteksjonsoppløsning. De skal samsvare med dimensjonene til modellen du bruker – vanligvis en kvadratisk størrelse som 320x320 eller 640x640."
|
||||||
|
},
|
||||||
|
"ffmpeg": {
|
||||||
|
"hwaccelManualNotRecommended": "Manuelle argumenter for maskinvareakselerasjon anbefales ikke. Med mindre det foreligger et spesifikt behov, bør du velge forhåndsinnstillingen som samsvarer med maskinvaren din."
|
||||||
|
},
|
||||||
|
"onvif": {
|
||||||
|
"autotrackingNoZones": "Autosporing krever minst én sone. Definer en sone for dette kameraet under Masker / Soner, og angi den deretter som en påkrevd sone nedenfor."
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"maintenance": {
|
"maintenance": {
|
||||||
|
|||||||
@@ -170,7 +170,22 @@
|
|||||||
"tips": {
|
"tips": {
|
||||||
"title": "Kamerainformasjon"
|
"title": "Kamerainformasjon"
|
||||||
},
|
},
|
||||||
"aspectRatio": "bildeforhold"
|
"aspectRatio": "bildeforhold",
|
||||||
|
"keyframes": {
|
||||||
|
"error": "Keyframe-intervallet (~{{seconds}}s) overskrider lengden på opptakssegmentet ({{segmentTime}}s). Enkelte segmenter kan mangle en keyframe, noe som ødelegger avspillingen. Deaktiver smart / +kodek'en på kameraet eller forkort keyframe-intervallet.",
|
||||||
|
"warning": "Spredte eller variable ke,yframes (lengste avstand ~{{seconds}}s), sannsynligvis på grunn av en smart-kodek (H.264+/H.265+). Dette er ikke anbefalt.",
|
||||||
|
"unknown": "Kunne ikke bestemme keyframe-intervallet.",
|
||||||
|
"ok": "Keyframes hvert ~{{seconds}}s, optimalt for opptak og avspilling.",
|
||||||
|
"gap": "Keyframe-intervall (min / snitt / maks):",
|
||||||
|
"keyframeCount": "Registrerte keyframes:",
|
||||||
|
"stillAnalyzing": "Analyserer keyframes fremdeles...",
|
||||||
|
"analyzing": "Analyserer keyframes... {{seconds}} sekunder gjenstår",
|
||||||
|
"title": "Keyframe-analyse",
|
||||||
|
"recordStream": "Opptaksstrøm:",
|
||||||
|
"observedDuration": "Observert varighet:",
|
||||||
|
"segmentLength": "Lengde på opptakssegment:",
|
||||||
|
"recordDisabled": "Opptak er deaktivert for dette kameraet."
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"framesAndDetections": "Bilder / Deteksjoner",
|
"framesAndDetections": "Bilder / Deteksjoner",
|
||||||
"title": "Kameraer",
|
"title": "Kameraer",
|
||||||
|
|||||||
@@ -216,7 +216,8 @@
|
|||||||
"id": "Bahasa Indonesia (Indonesisch)",
|
"id": "Bahasa Indonesia (Indonesisch)",
|
||||||
"ur": "اردو (Urdu)",
|
"ur": "اردو (Urdu)",
|
||||||
"hr": "Hrvatski (Kroatisch)",
|
"hr": "Hrvatski (Kroatisch)",
|
||||||
"zhHant": "繁體中文 (Traditioneel Chinees)"
|
"zhHant": "繁體中文 (Traditioneel Chinees)",
|
||||||
|
"bs": "Bosanksi (Bosnisch)"
|
||||||
},
|
},
|
||||||
"darkMode": {
|
"darkMode": {
|
||||||
"label": "Donkere modus",
|
"label": "Donkere modus",
|
||||||
@@ -267,7 +268,10 @@
|
|||||||
"anonymous": "anoniem"
|
"anonymous": "anoniem"
|
||||||
},
|
},
|
||||||
"classification": "Classificatie",
|
"classification": "Classificatie",
|
||||||
"profiles": "Profielen"
|
"profiles": "Profielen",
|
||||||
|
"actions": "Acties",
|
||||||
|
"features": "Functies",
|
||||||
|
"chat": "Chat"
|
||||||
},
|
},
|
||||||
"toast": {
|
"toast": {
|
||||||
"copyUrlToClipboard": "URL naar klembord gekopieerd.",
|
"copyUrlToClipboard": "URL naar klembord gekopieerd.",
|
||||||
@@ -276,7 +280,8 @@
|
|||||||
"error": {
|
"error": {
|
||||||
"title": "Opslaan van configuratiewijzigingen mislukt: {{errorMessage}}",
|
"title": "Opslaan van configuratiewijzigingen mislukt: {{errorMessage}}",
|
||||||
"noMessage": "Het opslaan van configuratiewijzigingen is mislukt"
|
"noMessage": "Het opslaan van configuratiewijzigingen is mislukt"
|
||||||
}
|
},
|
||||||
|
"success": "De configuratie aanpassingen zijn succesvol opgeslagen."
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"role": {
|
"role": {
|
||||||
@@ -323,5 +328,7 @@
|
|||||||
},
|
},
|
||||||
"credentialField": {
|
"credentialField": {
|
||||||
"savedPlaceholder": "Opgeslagen - leeg laten om huidige te behouden"
|
"savedPlaceholder": "Opgeslagen - leeg laten om huidige te behouden"
|
||||||
}
|
},
|
||||||
|
"no_items": "Geen items",
|
||||||
|
"validation_errors": "Validatie fouten"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -67,11 +67,14 @@
|
|||||||
"endTimeMustAfterStartTime": "Eindtijd moet na starttijd zijn"
|
"endTimeMustAfterStartTime": "Eindtijd moet na starttijd zijn"
|
||||||
},
|
},
|
||||||
"success": "Export is succesvol gestart. Bekijk het bestand op de exportpagina.",
|
"success": "Export is succesvol gestart. Bekijk het bestand op de exportpagina.",
|
||||||
"view": "Weergeven"
|
"view": "Weergeven",
|
||||||
|
"queued": "Export staat in de wachtrij. Bekijk voortgang op de exports pagina."
|
||||||
},
|
},
|
||||||
"fromTimeline": {
|
"fromTimeline": {
|
||||||
"saveExport": "Export opslaan",
|
"saveExport": "Export opslaan",
|
||||||
"previewExport": "Export vooraf bekijken"
|
"previewExport": "Export vooraf bekijken",
|
||||||
|
"useThisRange": "Gebruik dit bereik",
|
||||||
|
"queueingExport": "Export in wachtrij zetten..."
|
||||||
},
|
},
|
||||||
"export": "Exporteren",
|
"export": "Exporteren",
|
||||||
"selectOrExport": "Selecteren of exporteren",
|
"selectOrExport": "Selecteren of exporteren",
|
||||||
@@ -107,7 +110,17 @@
|
|||||||
"title_one": "Review 1 exporteren",
|
"title_one": "Review 1 exporteren",
|
||||||
"title_other": "{{count}} reviews exporteren",
|
"title_other": "{{count}} reviews exporteren",
|
||||||
"description": "Exporteer alle geselecteerde reviews. Alle exports worden samengevoegd in één case.",
|
"description": "Exporteer alle geselecteerde reviews. Alle exports worden samengevoegd in één case.",
|
||||||
"descriptionNoCase": "Exporteer elke geselecteerde review."
|
"descriptionNoCase": "Exporteer elke geselecteerde review.",
|
||||||
|
"toast": {
|
||||||
|
"startedNoCase_one": "1 export gestart.",
|
||||||
|
"startedNoCase_other": "{{count}} Exports gestart.",
|
||||||
|
"partial": "{{successful}} van {{total}} exports gestart. Mislukte items: {{failedItems}}",
|
||||||
|
"failed": "Het starten van {{total}} exports is mislukt. Mislukt: {{failedItems}}"
|
||||||
|
},
|
||||||
|
"exportingButton": "Exporteren...",
|
||||||
|
"exportButton_one": "Exporteer 1 revisie",
|
||||||
|
"exportButton_other": "Exporteer {{count}} revisies",
|
||||||
|
"caseNamePlaceholder": "Inspecteer export - {{date}}"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"streaming": {
|
"streaming": {
|
||||||
@@ -155,6 +168,14 @@
|
|||||||
"error": "Verwijderen mislukt: {{error}}",
|
"error": "Verwijderen mislukt: {{error}}",
|
||||||
"success": "De videobeelden die aan de geselecteerde beoordelingsitems zijn gekoppeld, zijn succesvol verwijderd."
|
"success": "De videobeelden die aan de geselecteerde beoordelingsitems zijn gekoppeld, zijn succesvol verwijderd."
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"shareTimestamp": {
|
||||||
|
"label": "Tijdstempel delen",
|
||||||
|
"title": "Tijdstempel delen",
|
||||||
|
"description": "Deel een URL met tijdstempel van de huidige positie in de afspeler of kies een aangepaste tijdstempel. Let op: dit is geen openbare deel-URL en is alleen toegankelijk voor gebruikers die toegang hebben tot Frigate en deze camera.",
|
||||||
|
"custom": "Aangepaste tijdstempel",
|
||||||
|
"button": "Deel tijdstempel URL",
|
||||||
|
"shareTitle": "Frigate Beoordelingstijdstempel: {{camera}}"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"imagePicker": {
|
"imagePicker": {
|
||||||
|
|||||||
@@ -167,7 +167,8 @@
|
|||||||
"saveAll": "Zapisz wszystkie",
|
"saveAll": "Zapisz wszystkie",
|
||||||
"savingAll": "Zapisywanie wszystkich…",
|
"savingAll": "Zapisywanie wszystkich…",
|
||||||
"undoAll": "Cofnij wszystko",
|
"undoAll": "Cofnij wszystko",
|
||||||
"retry": "Powtórz"
|
"retry": "Powtórz",
|
||||||
|
"resetToGlobal": "Przywróć ustawienie globalne"
|
||||||
},
|
},
|
||||||
"menu": {
|
"menu": {
|
||||||
"system": "System",
|
"system": "System",
|
||||||
@@ -274,7 +275,10 @@
|
|||||||
"settings": "Ustawienia",
|
"settings": "Ustawienia",
|
||||||
"export": "Eksportuj",
|
"export": "Eksportuj",
|
||||||
"classification": "Klasyfikacja",
|
"classification": "Klasyfikacja",
|
||||||
"profiles": "Profile"
|
"profiles": "Profile",
|
||||||
|
"actions": "Akcje",
|
||||||
|
"features": "Funkcje",
|
||||||
|
"chat": "Czat"
|
||||||
},
|
},
|
||||||
"role": {
|
"role": {
|
||||||
"viewer": "Przeglądający",
|
"viewer": "Przeglądający",
|
||||||
@@ -328,5 +332,10 @@
|
|||||||
"field": {
|
"field": {
|
||||||
"optional": "Opcjonalny",
|
"optional": "Opcjonalny",
|
||||||
"internalID": "Wewnętrzny identyfikator używany przez Frigate w konfiguracji i bazie danych"
|
"internalID": "Wewnętrzny identyfikator używany przez Frigate w konfiguracji i bazie danych"
|
||||||
|
},
|
||||||
|
"no_items": "Brak elementów",
|
||||||
|
"validation_errors": "Błędy walidacji",
|
||||||
|
"credentialField": {
|
||||||
|
"savedPlaceholder": "Zapisano — pozostaw puste, aby zachować bieżącą wartość"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -72,11 +72,24 @@
|
|||||||
"endTimeMustAfterStartTime": "Czas zakończenia musi być późniejszy niż czas rozpoczęcia",
|
"endTimeMustAfterStartTime": "Czas zakończenia musi być późniejszy niż czas rozpoczęcia",
|
||||||
"noVaildTimeSelected": "Nie wybrano prawidłowego zakresu czasu"
|
"noVaildTimeSelected": "Nie wybrano prawidłowego zakresu czasu"
|
||||||
},
|
},
|
||||||
"view": "Widok"
|
"view": "Widok",
|
||||||
|
"queued": "Eksport dodany do kolejki. Postęp można sprawdzić na stronie eksportów.",
|
||||||
|
"batchSuccess_one": "Rozpoczęto 1 eksport. Otwieranie przypadku.",
|
||||||
|
"batchSuccess_few": "Rozpoczęto {{count}} eksporty Otwieranie przypadku.",
|
||||||
|
"batchSuccess_many": "Rozpoczęto {{count}} eksportów. Otwieranie przypadku.",
|
||||||
|
"batchPartial": "Rozpoczęto {{successful}} z {{total}} eksportów. Nieudane kamery: {{failedCameras}}",
|
||||||
|
"batchFailed": "Nie udało się uruchomić {{total}} eksportów. Nieudane kamery: {{failedCameras}}",
|
||||||
|
"batchQueuedSuccess_one": "Eksport dodany do kolejki. Otwieranie przypadku.",
|
||||||
|
"batchQueuedSuccess_few": "Dodano {{count}} eksportydo kolejki. Otwieranie przypadku.",
|
||||||
|
"batchQueuedSuccess_many": "Dodano {{count}} eksportów do kolejki. Otwieranie przypadku.",
|
||||||
|
"batchQueuedPartial": "Dodano do kolejki {{successful}} z {{total}} eksportów. Nieudane kamery: {{failedCameras}}",
|
||||||
|
"batchQueueFailed": "Nie udało się dodać do kolejki {{total}} eksportów. Nieudane kamery: {{failedCameras}}"
|
||||||
},
|
},
|
||||||
"fromTimeline": {
|
"fromTimeline": {
|
||||||
"saveExport": "Zapisz Eksport",
|
"saveExport": "Zapisz Eksport",
|
||||||
"previewExport": "Podgląd Eksportu"
|
"previewExport": "Podgląd Eksportu",
|
||||||
|
"queueingExport": "Kolejkowanie eksportu...",
|
||||||
|
"useThisRange": "Użyj tego zakresu"
|
||||||
},
|
},
|
||||||
"multiCamera": {
|
"multiCamera": {
|
||||||
"timeRange": "Zakres czasu",
|
"timeRange": "Zakres czasu",
|
||||||
@@ -88,7 +101,54 @@
|
|||||||
"detectionCount_one": "{{count}} śledzony obiekt",
|
"detectionCount_one": "{{count}} śledzony obiekt",
|
||||||
"detectionCount_few": "{{count}} śledzone obiekty",
|
"detectionCount_few": "{{count}} śledzone obiekty",
|
||||||
"detectionCount_many": "{{count}} śledzonych obiektów",
|
"detectionCount_many": "{{count}} śledzonych obiektów",
|
||||||
"nameLabel": "Wyeksportuj nazwę"
|
"nameLabel": "Wyeksportuj nazwę",
|
||||||
|
"namePlaceholder": "Opcjonalna nazwa bazowa eksportów",
|
||||||
|
"queueingButton": "Kolejkowanie eksportów...",
|
||||||
|
"exportButton_one": "Eksport 1 kamery",
|
||||||
|
"exportButton_few": "Eksport {{count}} kamer",
|
||||||
|
"exportButton_many": "Eksport {{count}} kamer",
|
||||||
|
"searchOrSelectGroup": "Szukaj lub wybierz grupę kamer ...",
|
||||||
|
"selectAll": "Wybierz wszystkie kamery",
|
||||||
|
"clearSelection": "Wyczyść wybór",
|
||||||
|
"selectWithActivity": "Kamery z obiektami śledzonymi",
|
||||||
|
"selectGroup": "Wybierz grupę",
|
||||||
|
"noMatchingCameras": "Nie ma kamer spełniających Twoje wyszukiwanie",
|
||||||
|
"selectedCount": "{{selected}} / {{total}} wybrane"
|
||||||
|
},
|
||||||
|
"case": {
|
||||||
|
"newCaseOption": "Utwórz nowy przypadek",
|
||||||
|
"newCaseNamePlaceholder": "Nazwa nowego przypadku",
|
||||||
|
"newCaseDescriptionPlaceholder": "Opis przypadku",
|
||||||
|
"label": "Przypadek",
|
||||||
|
"nonAdminHelp": "Dla tych eksportów zostanie utworzony nowy przypadek.",
|
||||||
|
"placeholder": "Wybierz przypadek"
|
||||||
|
},
|
||||||
|
"queueing": "Dodawanie eksportu do kolejki...",
|
||||||
|
"tabs": {
|
||||||
|
"export": "Pojedyncza kamera",
|
||||||
|
"multiCamera": "Wiele kamer"
|
||||||
|
},
|
||||||
|
"multi": {
|
||||||
|
"title_one": "Eksport 1 recenzji",
|
||||||
|
"title_few": "Eksport {{count}} recenzji",
|
||||||
|
"title_many": "Eksport {{count}} recenzji",
|
||||||
|
"description": "Eksportuj każdą wybraną recenzję. Wszystkie eksporty zostaną pogrupowane w jednym przypadku.",
|
||||||
|
"descriptionNoCase": "Eksportuj każdą wybraną recenzję.",
|
||||||
|
"caseNamePlaceholder": "Eksport recenzji – {{date}}",
|
||||||
|
"exportButton_one": "Eksport 1 recenzji",
|
||||||
|
"exportButton_few": "Eksport {{count}} recenzji",
|
||||||
|
"exportButton_many": "Eksport {{count}} recenzji",
|
||||||
|
"exportingButton": "Eksportowanie...",
|
||||||
|
"toast": {
|
||||||
|
"started_one": "Rozpoczęto 1 eksport. Otwieranie przypadku.",
|
||||||
|
"started_few": "Rozpoczęto {{count}} eksportów. Otwieranie przypadku.",
|
||||||
|
"started_many": "Rozpoczęto {{count}} eksportów. Otwieranie przypadku.",
|
||||||
|
"startedNoCase_one": "Rozpoczęto 1 eksport.",
|
||||||
|
"startedNoCase_few": "Rozpoczęto {{count}} eksportów.",
|
||||||
|
"startedNoCase_many": "Rozpoczęto {{count}} eksportów.",
|
||||||
|
"partial": "Rozpoczęto {{successful}} z {{total}} eksportów. Niepowodzenia: {{failedItems}}",
|
||||||
|
"failed": "Nie udało się uruchomić {{total}} eksportów. Niepowodzenia: {{failedItems}}"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"recording": {
|
"recording": {
|
||||||
@@ -107,6 +167,14 @@
|
|||||||
"success": "Nagrania wideo powiązane z wybranymi elementami przeglądu zostały pomyślnie usunięte.",
|
"success": "Nagrania wideo powiązane z wybranymi elementami przeglądu zostały pomyślnie usunięte.",
|
||||||
"error": "Nie udało się usunąć: {{error}}"
|
"error": "Nie udało się usunąć: {{error}}"
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"shareTimestamp": {
|
||||||
|
"label": "Udostępnij znacznik czasu",
|
||||||
|
"title": "Udostępnij znacznik czasu",
|
||||||
|
"description": "Udostępnij adres URL z aktualnym znacznikiem czasu pozycji odtwarzacza lub wybierz niestandardowy znacznik czasu. Należy pamiętać, że nie jest to publiczny link udostępniania i jest dostępny wyłącznie dla użytkowników mających dostęp do Frigate i tej kamery.",
|
||||||
|
"custom": "Własny znacznik czasu",
|
||||||
|
"button": "Udostępnij adres URL ze znacznikiem czasu",
|
||||||
|
"shareTitle": "Znacznik czasu przeglądu Frigate: {{camera}}"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"streaming": {
|
"streaming": {
|
||||||
|
|||||||
@@ -176,7 +176,7 @@
|
|||||||
"description": "Włączone"
|
"description": "Włączone"
|
||||||
},
|
},
|
||||||
"audio": {
|
"audio": {
|
||||||
"label": "Zdarzenia audio",
|
"label": "Wykrywanie dźwięku",
|
||||||
"description": "Ustawienia detekcji zdarzeń audio dla tej kamery.",
|
"description": "Ustawienia detekcji zdarzeń audio dla tej kamery.",
|
||||||
"enabled": {
|
"enabled": {
|
||||||
"label": "Włącz detekcję audio",
|
"label": "Włącz detekcję audio",
|
||||||
@@ -196,7 +196,11 @@
|
|||||||
},
|
},
|
||||||
"filters": {
|
"filters": {
|
||||||
"label": "Filtry audio",
|
"label": "Filtry audio",
|
||||||
"description": "Ustawienia filtrów dla poszczególnych typów audio, takie jak progi pewności, używane do redukcji fałszywych alarmów."
|
"description": "Ustawienia filtrów dla poszczególnych typów audio, takie jak progi pewności, używane do redukcji fałszywych alarmów.",
|
||||||
|
"threshold": {
|
||||||
|
"label": "Minimalna pewność wykrycia dźwięku",
|
||||||
|
"description": "Minimalny próg pewności, aby zdarzenie audio zostało zliczone."
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"enabled_in_config": {
|
"enabled_in_config": {
|
||||||
"label": "Pierwotny stan audio",
|
"label": "Pierwotny stan audio",
|
||||||
@@ -224,10 +228,18 @@
|
|||||||
},
|
},
|
||||||
"birdseye": {
|
"birdseye": {
|
||||||
"mode": {
|
"mode": {
|
||||||
"label": "Tryb śledzenia"
|
"label": "Tryb śledzenia",
|
||||||
|
"description": "Tryb uwzględniania kamer w widoku z lotu ptaka: „obiekty”, „ruch” lub „ciągły”."
|
||||||
},
|
},
|
||||||
"order": {
|
"order": {
|
||||||
"label": "Pozycja"
|
"label": "Pozycja",
|
||||||
|
"description": "Pozycja numeryczna określająca kolejność kamery w układzie widoku z lotu ptaka."
|
||||||
|
},
|
||||||
|
"label": "Widok z lotu ptaka",
|
||||||
|
"description": "Ustawienia widoku z lotu ptaka „Birdseye”, który łączy obraz z wielu kamer w jeden układ.",
|
||||||
|
"enabled": {
|
||||||
|
"label": "Włącz widok z lotu ptaka",
|
||||||
|
"description": "Włącz lub wyłącz funkcję widoku z lotu ptaka."
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"detect": {
|
"detect": {
|
||||||
@@ -236,7 +248,58 @@
|
|||||||
"description": "Włącza lub wyłącza wykrywanie obiektów dla tej kamery."
|
"description": "Włącza lub wyłącza wykrywanie obiektów dla tej kamery."
|
||||||
},
|
},
|
||||||
"stationary": {
|
"stationary": {
|
||||||
"label": "Konfiguracja obiektów stacjonarnych"
|
"label": "Konfiguracja obiektów stacjonarnych",
|
||||||
|
"description": "Ustawienia wykrywania i obsługi obiektów statycznych przez określony czas.",
|
||||||
|
"interval": {
|
||||||
|
"label": "Okres bezruchu",
|
||||||
|
"description": "Częstotliwość (w klatkach) sprawdzania detekcji dla obiektów nieruchomych."
|
||||||
|
},
|
||||||
|
"threshold": {
|
||||||
|
"label": "Próg bezruchu",
|
||||||
|
"description": "Liczba klatek bez zmiany pozycji potrzebna do uznania obiektu za nieruchomy."
|
||||||
|
},
|
||||||
|
"max_frames": {
|
||||||
|
"label": "Maksymalna liczba klatek",
|
||||||
|
"description": "Ogranicza czas śledzenia nieruchomych obiektów przed ich usunięciem.",
|
||||||
|
"default": {
|
||||||
|
"label": "Domyślna maks. liczba klatek",
|
||||||
|
"description": "Domyślna maksymalna liczba klatek śledzenia nieruchomego obiektu przed zatrzymaniem."
|
||||||
|
},
|
||||||
|
"objects": {
|
||||||
|
"label": "Maksymalna liczba klatek obiektu",
|
||||||
|
"description": "Nadpisania dla poszczególnych obiektów określające maksymalną liczbę klatek śledzenia nieruchomych obiektów."
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"classifier": {
|
||||||
|
"label": "Włącz klasyfikator wizualny",
|
||||||
|
"description": "Użyj klasyfikatora wizualnego do wykrywania rzeczywiście nieruchomych obiektów, nawet gdy ramki ograniczające drżą."
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"label": "Wykrywanie obiektów",
|
||||||
|
"description": "Ustawienia roli „detection/detect” używanej do wykrywania obiektów i inicjalizacji trackerów.",
|
||||||
|
"height": {
|
||||||
|
"label": "Wysokość wykrywania",
|
||||||
|
"description": "Wysokość (w pikselach) klatek używanych w strumieniu detekcji; pozostaw puste, aby użyć natywnej rozdzielczości strumienia."
|
||||||
|
},
|
||||||
|
"width": {
|
||||||
|
"label": "Szerokość wykrywania",
|
||||||
|
"description": "Szerokość (w pikselach) klatek używanych w strumieniu detekcji; pozostaw puste, aby użyć natywnej rozdzielczości strumienia."
|
||||||
|
},
|
||||||
|
"fps": {
|
||||||
|
"label": "FPS wykrywania",
|
||||||
|
"description": "Docelowa liczba klatek na sekundę używana do detekcji; niższe wartości zmniejszają użycie CPU (zalecana wartość to 5, ustaw wyższą — maksymalnie 10 — tylko jeśli śledzisz bardzo szybko poruszające się obiekty)."
|
||||||
|
},
|
||||||
|
"min_initialized": {
|
||||||
|
"label": "Minimalna liczba klatek inicjalizacyjnych",
|
||||||
|
"description": "Liczba kolejnych trafień detekcji wymagana do utworzenia śledzonego obiektu. Zwiększenie wartości zmniejsza liczbę fałszywych inicjalizacji. Wartość domyślna to fps podzielone przez 2."
|
||||||
|
},
|
||||||
|
"max_disappeared": {
|
||||||
|
"label": "Maksymalna liczba pominiętych klatek",
|
||||||
|
"description": "Liczba klatek bez detekcji, po której obiekt śledzony jest uznawany za utracony."
|
||||||
|
},
|
||||||
|
"annotation_offset": {
|
||||||
|
"label": "Przesunięcie oznaczenia",
|
||||||
|
"description": "Liczba milisekund przesunięcia adnotacji detekcji w celu lepszego dopasowania ramek ograniczających na osi czasu do nagrań; wartość może być dodatnia lub ujemna."
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"face_recognition": {
|
"face_recognition": {
|
||||||
@@ -245,6 +308,33 @@
|
|||||||
"enabled": {
|
"enabled": {
|
||||||
"label": "Włącz rozpoznawanie twarzy",
|
"label": "Włącz rozpoznawanie twarzy",
|
||||||
"description": "Włącz lub wyłącz rozpoznawanie twarzy."
|
"description": "Włącz lub wyłącz rozpoznawanie twarzy."
|
||||||
|
},
|
||||||
|
"min_area": {
|
||||||
|
"label": "Minimalny obszar twarzy",
|
||||||
|
"description": "Minimalny obszar twarzy (w pikselach) wymagany do podjęcia próby rozpoznania."
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"ffmpeg": {
|
||||||
|
"label": "Strumienie (FFmpeg)",
|
||||||
|
"output_args": {
|
||||||
|
"detect": {
|
||||||
|
"description": "Domyślne argumenty wyjściowe dla strumieni z rolą detekcji."
|
||||||
|
},
|
||||||
|
"record": {
|
||||||
|
"description": "Domyślne argumenty wyjściowe dla strumieni z rolą zapisu."
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"retry_interval": {
|
||||||
|
"label": "Czas ponownej próby FFmpeg",
|
||||||
|
"description": "Czas (w sekundach) przed ponownym uruchomieniem utraconego strumienia kamery. Domyślnie: 10."
|
||||||
|
},
|
||||||
|
"apple_compatibility": {
|
||||||
|
"label": "Kompatybilność z Apple",
|
||||||
|
"description": "Włącz tagowanie HEVC, aby zapewnić lepszą zgodność z odtwarzaczami Apple podczas nagrywania w formacie H.265."
|
||||||
|
},
|
||||||
|
"gpu": {
|
||||||
|
"label": "Indeks GPU",
|
||||||
|
"description": "Domyślny indeks karty graficznej używany do akceleracji sprzętowej, jeśli jest dostępna."
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"audio": {
|
"audio": {
|
||||||
"label": "Zdarzenia audio",
|
"label": "Wykrywanie dźwięku",
|
||||||
"enabled": {
|
"enabled": {
|
||||||
"label": "Włącz detekcję audio"
|
"label": "Włącz detekcję audio"
|
||||||
},
|
},
|
||||||
@@ -18,7 +18,11 @@
|
|||||||
},
|
},
|
||||||
"filters": {
|
"filters": {
|
||||||
"label": "Filtry audio",
|
"label": "Filtry audio",
|
||||||
"description": "Ustawienia filtrów dla poszczególnych typów audio, takie jak progi pewności, używane do redukcji fałszywych alarmów."
|
"description": "Ustawienia filtrów dla poszczególnych typów audio, takie jak progi pewności, używane do redukcji fałszywych alarmów.",
|
||||||
|
"threshold": {
|
||||||
|
"label": "Minimalna pewność wykrycia dźwięku",
|
||||||
|
"description": "Minimalny próg pewności, aby zdarzenie audio zostało zliczone."
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"enabled_in_config": {
|
"enabled_in_config": {
|
||||||
"label": "Pierwotny stan audio",
|
"label": "Pierwotny stan audio",
|
||||||
@@ -71,10 +75,18 @@
|
|||||||
},
|
},
|
||||||
"birdseye": {
|
"birdseye": {
|
||||||
"mode": {
|
"mode": {
|
||||||
"label": "Tryb śledzenia"
|
"label": "Tryb śledzenia",
|
||||||
|
"description": "Tryb uwzględniania kamer w widoku z lotu ptaka: „obiekty”, „ruch” lub „ciągły”."
|
||||||
},
|
},
|
||||||
"order": {
|
"order": {
|
||||||
"label": "Pozycja"
|
"label": "Pozycja",
|
||||||
|
"description": "Pozycja numeryczna określająca kolejność kamery w układzie widoku z lotu ptaka."
|
||||||
|
},
|
||||||
|
"label": "Widok z lotu ptaka",
|
||||||
|
"description": "Ustawienia widoku z lotu ptaka „Birdseye”, który łączy obraz z wielu kamer w jeden układ.",
|
||||||
|
"enabled": {
|
||||||
|
"label": "Włącz widok z lotu ptaka",
|
||||||
|
"description": "Włącz lub wyłącz funkcję widoku z lotu ptaka."
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"detect": {
|
"detect": {
|
||||||
@@ -82,13 +94,90 @@
|
|||||||
"label": "Włącz wykrywanie obiektów"
|
"label": "Włącz wykrywanie obiektów"
|
||||||
},
|
},
|
||||||
"stationary": {
|
"stationary": {
|
||||||
"label": "Konfiguracja obiektów stacjonarnych"
|
"label": "Konfiguracja obiektów stacjonarnych",
|
||||||
|
"description": "Ustawienia wykrywania i obsługi obiektów statycznych przez określony czas.",
|
||||||
|
"interval": {
|
||||||
|
"label": "Okres bezruchu",
|
||||||
|
"description": "Częstotliwość (w klatkach) sprawdzania detekcji dla obiektów nieruchomych."
|
||||||
|
},
|
||||||
|
"threshold": {
|
||||||
|
"label": "Próg bezruchu",
|
||||||
|
"description": "Liczba klatek bez zmiany pozycji potrzebna do uznania obiektu za nieruchomy."
|
||||||
|
},
|
||||||
|
"max_frames": {
|
||||||
|
"label": "Maksymalna liczba klatek",
|
||||||
|
"description": "Ogranicza czas śledzenia nieruchomych obiektów przed ich usunięciem.",
|
||||||
|
"default": {
|
||||||
|
"label": "Domyślna maks. liczba klatek",
|
||||||
|
"description": "Domyślna maksymalna liczba klatek śledzenia nieruchomego obiektu przed zatrzymaniem."
|
||||||
|
},
|
||||||
|
"objects": {
|
||||||
|
"label": "Maksymalna liczba klatek obiektu",
|
||||||
|
"description": "Nadpisania dla poszczególnych obiektów określające maksymalną liczbę klatek śledzenia nieruchomych obiektów."
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"classifier": {
|
||||||
|
"label": "Włącz klasyfikator wizualny",
|
||||||
|
"description": "Użyj klasyfikatora wizualnego do wykrywania rzeczywiście nieruchomych obiektów, nawet gdy ramki ograniczające drżą."
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"label": "Wykrywanie obiektów",
|
||||||
|
"description": "Ustawienia roli „detection/detect” używanej do wykrywania obiektów i inicjalizacji trackerów.",
|
||||||
|
"height": {
|
||||||
|
"label": "Wysokość wykrywania",
|
||||||
|
"description": "Wysokość (w pikselach) klatek używanych w strumieniu detekcji; pozostaw puste, aby użyć natywnej rozdzielczości strumienia."
|
||||||
|
},
|
||||||
|
"width": {
|
||||||
|
"label": "Szerokość wykrywania",
|
||||||
|
"description": "Szerokość (w pikselach) klatek używanych w strumieniu detekcji; pozostaw puste, aby użyć natywnej rozdzielczości strumienia."
|
||||||
|
},
|
||||||
|
"fps": {
|
||||||
|
"label": "FPS wykrywania",
|
||||||
|
"description": "Docelowa liczba klatek na sekundę używana do detekcji; niższe wartości zmniejszają użycie CPU (zalecana wartość to 5, ustaw wyższą — maksymalnie 10 — tylko jeśli śledzisz bardzo szybko poruszające się obiekty)."
|
||||||
|
},
|
||||||
|
"min_initialized": {
|
||||||
|
"label": "Minimalna liczba klatek inicjalizacyjnych",
|
||||||
|
"description": "Liczba kolejnych trafień detekcji wymagana do utworzenia śledzonego obiektu. Zwiększenie wartości zmniejsza liczbę fałszywych inicjalizacji. Wartość domyślna to fps podzielone przez 2."
|
||||||
|
},
|
||||||
|
"max_disappeared": {
|
||||||
|
"label": "Maksymalna liczba pominiętych klatek",
|
||||||
|
"description": "Liczba klatek bez detekcji, po której obiekt śledzony jest uznawany za utracony."
|
||||||
|
},
|
||||||
|
"annotation_offset": {
|
||||||
|
"label": "Przesunięcie oznaczenia",
|
||||||
|
"description": "Liczba milisekund przesunięcia adnotacji detekcji w celu lepszego dopasowania ramek ograniczających na osi czasu do nagrań; wartość może być dodatnia lub ujemna."
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"face_recognition": {
|
"face_recognition": {
|
||||||
"label": "Rozpoznawanie twarzy",
|
"label": "Rozpoznawanie twarzy",
|
||||||
"enabled": {
|
"enabled": {
|
||||||
"label": "Włącz rozpoznawanie twarzy"
|
"label": "Włącz rozpoznawanie twarzy"
|
||||||
|
},
|
||||||
|
"min_area": {
|
||||||
|
"label": "Minimalny obszar twarzy",
|
||||||
|
"description": "Minimalny obszar twarzy (w pikselach) wymagany do podjęcia próby rozpoznania."
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"ffmpeg": {
|
||||||
|
"output_args": {
|
||||||
|
"detect": {
|
||||||
|
"description": "Domyślne argumenty wyjściowe dla strumieni z rolą detekcji."
|
||||||
|
},
|
||||||
|
"record": {
|
||||||
|
"description": "Domyślne argumenty wyjściowe dla strumieni z rolą zapisu."
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"retry_interval": {
|
||||||
|
"label": "Czas ponownej próby FFmpeg",
|
||||||
|
"description": "Czas (w sekundach) przed ponownym uruchomieniem utraconego strumienia kamery. Domyślnie: 10."
|
||||||
|
},
|
||||||
|
"apple_compatibility": {
|
||||||
|
"label": "Kompatybilność z Apple",
|
||||||
|
"description": "Włącz tagowanie HEVC, aby zapewnić lepszą zgodność z odtwarzaczami Apple podczas nagrywania w formacie H.265."
|
||||||
|
},
|
||||||
|
"gpu": {
|
||||||
|
"label": "Indeks GPU",
|
||||||
|
"description": "Domyślny indeks karty graficznej używany do akceleracji sprzętowej, jeśli jest dostępna."
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -30,7 +30,8 @@
|
|||||||
"trainedModel": "Model pomyślnie wytrenowany.",
|
"trainedModel": "Model pomyślnie wytrenowany.",
|
||||||
"trainingModel": "Pomyślnie uruchomiono trenowanie modelu.",
|
"trainingModel": "Pomyślnie uruchomiono trenowanie modelu.",
|
||||||
"updatedModel": "Pomyślnie zaktualizowane ustawienia modelu",
|
"updatedModel": "Pomyślnie zaktualizowane ustawienia modelu",
|
||||||
"renamedCategory": "Pomyślnie zmieniono nazwę klasy na {{name}}"
|
"renamedCategory": "Pomyślnie zmieniono nazwę klasy na {{name}}",
|
||||||
|
"reclassifiedImage": "Pomyślne przeklasyfikowanie obrazu"
|
||||||
},
|
},
|
||||||
"error": {
|
"error": {
|
||||||
"deleteImageFailed": "Nie udało się usunąć: {{errorMessage}}",
|
"deleteImageFailed": "Nie udało się usunąć: {{errorMessage}}",
|
||||||
@@ -40,7 +41,8 @@
|
|||||||
"trainingFailed": "Trening modelu zakończył się niepowodzeniem. Sprawdź logi Frigate aby uzyskać więcej informacji.",
|
"trainingFailed": "Trening modelu zakończył się niepowodzeniem. Sprawdź logi Frigate aby uzyskać więcej informacji.",
|
||||||
"updateModelFailed": "Nie udało się zaktualizować modelu: {{errorMessage}}",
|
"updateModelFailed": "Nie udało się zaktualizować modelu: {{errorMessage}}",
|
||||||
"trainingFailedToStart": "Nie udało się rozpocząć trenowania modelu: {{errorMessage}}",
|
"trainingFailedToStart": "Nie udało się rozpocząć trenowania modelu: {{errorMessage}}",
|
||||||
"renameCategoryFailed": "Nie udało się zmienić nazwy klasy: {{errorMessage}}"
|
"renameCategoryFailed": "Nie udało się zmienić nazwy klasy: {{errorMessage}}",
|
||||||
|
"reclassifyFailed": "Niepowodzenie zmiany klasyfikacji obrazu: {{errorMessage}}"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"deleteCategory": {
|
"deleteCategory": {
|
||||||
@@ -191,7 +193,14 @@
|
|||||||
"missingStatesWarning": {
|
"missingStatesWarning": {
|
||||||
"title": "Przykłady brakujących stanów",
|
"title": "Przykłady brakujących stanów",
|
||||||
"description": "Aby uzyskać najlepsze wyniki, zaleca się wybranie przykładów dla wszystkich stanów. Można kontynuować bez wybierania wszystkich stanów, ale model nie zostanie wytrenowany, dopóki wszystkie stany nie będą miały obrazów. Po kontynuowaniu należy użyć widoku Ostatnie klasyfikacje, aby sklasyfikować obrazy dla brakujących stanów, a następnie wytrenować model."
|
"description": "Aby uzyskać najlepsze wyniki, zaleca się wybranie przykładów dla wszystkich stanów. Można kontynuować bez wybierania wszystkich stanów, ale model nie zostanie wytrenowany, dopóki wszystkie stany nie będą miały obrazów. Po kontynuowaniu należy użyć widoku Ostatnie klasyfikacje, aby sklasyfikować obrazy dla brakujących stanów, a następnie wytrenować model."
|
||||||
|
},
|
||||||
|
"refreshExamples": "Generuj nowe przykłady",
|
||||||
|
"refreshConfirm": {
|
||||||
|
"title": "Czy generować nowe przykłady?",
|
||||||
|
"description": "Spowoduje to wygenerowanie nowego zestawu obrazów i wyczyszczenie wszystkich zaznaczeń, w tym dotychczasowych klas. Konieczne będzie ponowne wybranie przykładów dla wszystkich klas."
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
},
|
||||||
|
"reclassifyImageAs": "Klasyfikuj jako:",
|
||||||
|
"reclassifyImage": "Zmiana klasyfikacji obrazu"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -497,5 +497,6 @@
|
|||||||
"echo": "Eco",
|
"echo": "Eco",
|
||||||
"mains_hum": "Zumbido Elétrico",
|
"mains_hum": "Zumbido Elétrico",
|
||||||
"sidetone": "Retorno de Voz",
|
"sidetone": "Retorno de Voz",
|
||||||
"throbbing": "Latejante"
|
"throbbing": "Latejante",
|
||||||
|
"sodeling": "Soldagem"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -210,7 +210,8 @@
|
|||||||
"id": "Bahasa Indonesia (Indonésio)",
|
"id": "Bahasa Indonesia (Indonésio)",
|
||||||
"ur": "اردو (Urdu)",
|
"ur": "اردو (Urdu)",
|
||||||
"hr": "Hrvatski (Croata)",
|
"hr": "Hrvatski (Croata)",
|
||||||
"bs": "Bosanski (Bósnio)"
|
"bs": "Bosanski (Bósnio)",
|
||||||
|
"zhHant": "Chinês Tradicional"
|
||||||
},
|
},
|
||||||
"systemLogs": "Logs de sistema",
|
"systemLogs": "Logs de sistema",
|
||||||
"settings": "Configurações",
|
"settings": "Configurações",
|
||||||
|
|||||||
@@ -68,7 +68,10 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"birdseye": "Visão Panorâmica"
|
"birdseye": "Visão Panorâmica"
|
||||||
}
|
},
|
||||||
|
"showAll": "Exibir todos os grupos de câmeras",
|
||||||
|
"showLess": "Mostrar menos",
|
||||||
|
"editGroups": "Editar grupos de câmeras"
|
||||||
},
|
},
|
||||||
"debug": {
|
"debug": {
|
||||||
"options": {
|
"options": {
|
||||||
|
|||||||
@@ -24,6 +24,9 @@
|
|||||||
},
|
},
|
||||||
"state": {
|
"state": {
|
||||||
"submitted": "Enviado"
|
"submitted": "Enviado"
|
||||||
|
},
|
||||||
|
"toast": {
|
||||||
|
"error": "Falha ao enviar para o Frigate+. Verifique sua conexão de rede e tente novamente."
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -56,15 +59,25 @@
|
|||||||
"toast": {
|
"toast": {
|
||||||
"success": "Exportação iniciada com sucesso. Veja o arquivo na tela exportar.",
|
"success": "Exportação iniciada com sucesso. Veja o arquivo na tela exportar.",
|
||||||
"error": {
|
"error": {
|
||||||
"failed": "Falha em iniciar exportação: {{error}}",
|
"failed": "Falha ao iniciar exportação: {{error}}",
|
||||||
"endTimeMustAfterStartTime": "Tempo de finalização deve ser após tempo de início",
|
"endTimeMustAfterStartTime": "Tempo de finalização deve ser após tempo de início",
|
||||||
"noVaildTimeSelected": "Nenhuma faixa de tempo válida selecionada"
|
"noVaildTimeSelected": "Nenhuma faixa de tempo válida selecionada"
|
||||||
},
|
},
|
||||||
"view": "Ver"
|
"view": "Ver",
|
||||||
|
"batchQueuedSuccess_one": "1 exportação na fila. Abrindo o caso agora.",
|
||||||
|
"batchQueuedSuccess_many": "{{count}} exportações colocadas na fila. Abrindo o caso agora.",
|
||||||
|
"batchQueuedSuccess_other": "",
|
||||||
|
"batchQueuedPartial": "{{successful}} de {{total}} exportações na fila. Câmeras com falha: {{failedCameras}}",
|
||||||
|
"batchQueueFailed": "Falha ao enfileirar {{total}} exportações. Câmeras com falha: {{failedCameras}}",
|
||||||
|
"batchPartial": "Iniciadas {{successful}} de {{total}} exportações. Câmeras com falha: {{failedCameras}}",
|
||||||
|
"batchFailed": "Falha ao iniciar {{total}} exportações. Câmeras com falha: {{failedCameras}}",
|
||||||
|
"queued": "Exportação na fila. Acompanhe o progresso na página de exportações."
|
||||||
},
|
},
|
||||||
"fromTimeline": {
|
"fromTimeline": {
|
||||||
"saveExport": "Salvar Exportação",
|
"saveExport": "Salvar Exportação",
|
||||||
"previewExport": "Pré-Visualizar Exportação"
|
"previewExport": "Pré-Visualizar Exportação",
|
||||||
|
"queueingExport": "Enfileirando exportação...",
|
||||||
|
"useThisRange": "Use esta faixa"
|
||||||
},
|
},
|
||||||
"case": {
|
"case": {
|
||||||
"label": "Caso",
|
"label": "Caso",
|
||||||
@@ -94,7 +107,14 @@
|
|||||||
"queueingButton": "Exportações na fila...",
|
"queueingButton": "Exportações na fila...",
|
||||||
"exportButton_one": "Exportar câmera",
|
"exportButton_one": "Exportar câmera",
|
||||||
"exportButton_many": "Exportar {{count}} câmeras",
|
"exportButton_many": "Exportar {{count}} câmeras",
|
||||||
"exportButton_other": "Exportar {{count}} câmeras"
|
"exportButton_other": "Exportar {{count}} câmeras",
|
||||||
|
"searchOrSelectGroup": "Procurar, ou selecionar um grupo de câmeras...",
|
||||||
|
"selectAll": "Selecionar todas as câmeras",
|
||||||
|
"clearSelection": "Limpar seleção",
|
||||||
|
"selectWithActivity": "Câmeras com rastreamento de objetos",
|
||||||
|
"selectGroup": "Selecione grupo",
|
||||||
|
"noMatchingCameras": "Nenhuma câmera corresponde à sua pesquisa",
|
||||||
|
"selectedCount": "{{selected}} / {{total}} selecionados"
|
||||||
},
|
},
|
||||||
"multi": {
|
"multi": {
|
||||||
"title_one": "Exportar análise",
|
"title_one": "Exportar análise",
|
||||||
@@ -106,7 +126,14 @@
|
|||||||
"exportButton_one": "Exportar análise",
|
"exportButton_one": "Exportar análise",
|
||||||
"exportButton_many": "Exportar {{count}} análises",
|
"exportButton_many": "Exportar {{count}} análises",
|
||||||
"exportButton_other": "Exportar {{count}} análises",
|
"exportButton_other": "Exportar {{count}} análises",
|
||||||
"exportingButton": "Exportando..."
|
"exportingButton": "Exportando...",
|
||||||
|
"toast": {
|
||||||
|
"started_one": "Uma exportação iniciada. Abrindo o caso agora.",
|
||||||
|
"started_many": "Iniciadas {{count}} exportações. Abrindo o caso agora.",
|
||||||
|
"started_other": "",
|
||||||
|
"failed": "Falha ao iniciar {{total}} exportações. Falhas: {{failedItems}}",
|
||||||
|
"partial": "Iniciadas {{successful}} de {{total}} exportações. Falhas: {{failedItems}}"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"streaming": {
|
"streaming": {
|
||||||
@@ -154,6 +181,14 @@
|
|||||||
"export": "Exportar",
|
"export": "Exportar",
|
||||||
"deleteNow": "Deletar Agora",
|
"deleteNow": "Deletar Agora",
|
||||||
"markAsUnreviewed": "Marcar como não revisado"
|
"markAsUnreviewed": "Marcar como não revisado"
|
||||||
|
},
|
||||||
|
"shareTimestamp": {
|
||||||
|
"label": "Compartilhar marca de tempo",
|
||||||
|
"title": "Compartilhar marca de tempo",
|
||||||
|
"description": "Compartilhe uma URL com marca de tempo da posição atual da reprodução ou escolha uma marca de tempo personalizada. Observe que esta não é uma URL de compartilhamento público e só pode ser acessada por usuários que tenham acesso ao Frigate e a esta câmera.",
|
||||||
|
"custom": "Marcação de data/hora personalizado",
|
||||||
|
"button": "Compartilhar URL com marcação de tempo",
|
||||||
|
"shareTitle": "Marcação de data/hora da análise do Frigate: {{camera}}"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"imagePicker": {
|
"imagePicker": {
|
||||||
|
|||||||
@@ -4,7 +4,8 @@
|
|||||||
"noPreviewFoundFor": "Nenhuma Pré-Visualização Encontrada em {{cameraName}}",
|
"noPreviewFoundFor": "Nenhuma Pré-Visualização Encontrada em {{cameraName}}",
|
||||||
"submitFrigatePlus": {
|
"submitFrigatePlus": {
|
||||||
"title": "Enviar esse frame para Frigate+?",
|
"title": "Enviar esse frame para Frigate+?",
|
||||||
"submit": "Enviar"
|
"submit": "Enviar",
|
||||||
|
"previewError": "Não foi possível carregar a prévia do instantâneo. A gravação pode não estar disponível no momento."
|
||||||
},
|
},
|
||||||
"livePlayerRequiredIOSVersion": "iOS 17.1 ou superior é necessário para esse tipo de transmissão ao vivo.",
|
"livePlayerRequiredIOSVersion": "iOS 17.1 ou superior é necessário para esse tipo de transmissão ao vivo.",
|
||||||
"streamOffline": {
|
"streamOffline": {
|
||||||
@@ -47,5 +48,6 @@
|
|||||||
"error": {
|
"error": {
|
||||||
"submitFrigatePlusFailed": "Falha em submeter quadro ao Frigate+"
|
"submitFrigatePlusFailed": "Falha em submeter quadro ao Frigate+"
|
||||||
}
|
}
|
||||||
}
|
},
|
||||||
|
"cameraOff": "A câmera está desligada"
|
||||||
}
|
}
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user