mirror of
https://github.com/blakeblackshear/frigate.git
synced 2026-07-21 11:19:02 +03:00
Compare commits
53
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
f141b585bc | ||
|
|
9de7f80727 | ||
|
|
2101b1f91d | ||
|
|
2b5a30e23b | ||
|
|
dd6114586c | ||
|
|
d508a8b5fe | ||
|
|
feb40e9d05 | ||
|
|
2548af13b9 | ||
|
|
547c61f54c | ||
|
|
34e92ef4ae | ||
|
|
dbf440b0c7 | ||
|
|
321fd136c0 | ||
|
|
c9708102a9 | ||
|
|
85d8d7b136 | ||
|
|
b0e6a64bd0 | ||
|
|
2af1d22643 | ||
|
|
c026060ff3 | ||
|
|
8a117de87e | ||
|
|
a43f87c477 | ||
|
|
15c7a4074b | ||
|
|
ca650a29a1 | ||
|
|
0896df6500 | ||
|
|
01998dfb70 | ||
|
|
cb1cdcc814 | ||
|
|
63473b0b82 | ||
|
|
2ada0d22cb | ||
|
|
81f5f362a9 | ||
|
|
27914fc3b8 | ||
|
|
c11ca42fb5 | ||
|
|
9b7d4d0a8f | ||
|
|
cbdac9ece5 | ||
|
|
63f9689b0e | ||
|
|
6969a7fd47 | ||
|
|
8274b733da | ||
|
|
858c1241db | ||
|
|
c16e536b46 | ||
|
|
49c6073de6 | ||
|
|
2a8b62acb1 | ||
|
|
37d40558b7 | ||
|
|
afe513336c | ||
|
|
8a143b4284 | ||
|
|
717517aeb5 | ||
|
|
f4d5ebf4db | ||
|
|
b18572a3b6 | ||
|
|
b10615aef1 | ||
|
|
5d13925d2b | ||
|
|
ebae6cb1ed | ||
|
|
2f9b373c1a | ||
|
|
f48356cbee | ||
|
|
3538a1df3d | ||
|
|
c15fbee537 | ||
|
|
7612c3ece0 | ||
|
|
d3d05fa397 |
@@ -109,6 +109,7 @@ imdecode
|
||||
imencode
|
||||
imread
|
||||
imwrite
|
||||
inpoint
|
||||
interp
|
||||
iostat
|
||||
iotop
|
||||
@@ -264,6 +265,7 @@ tensorrt
|
||||
tflite
|
||||
thresholded
|
||||
timelapse
|
||||
titlecase
|
||||
tmpfs
|
||||
tobytes
|
||||
toggleable
|
||||
|
||||
@@ -61,4 +61,5 @@
|
||||
|
||||
## 非官方中文讨论社区
|
||||
欢迎加入中文讨论QQ群:1043861059
|
||||
|
||||
Bilibili:https://space.bilibili.com/3546894915602564
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
set -euxo pipefail
|
||||
|
||||
s6_version="3.1.5.0"
|
||||
s6_version="3.2.1.0"
|
||||
|
||||
if [[ "${TARGETARCH}" == "amd64" ]]; then
|
||||
s6_arch="x86_64"
|
||||
|
||||
@@ -31,6 +31,7 @@ norfair == 2.2.*
|
||||
setproctitle == 1.3.*
|
||||
ws4py == 0.5.*
|
||||
unidecode == 1.3.*
|
||||
titlecase == 2.4.*
|
||||
# Image Manipulation
|
||||
numpy == 1.26.*
|
||||
opencv-python-headless == 4.11.0.*
|
||||
|
||||
@@ -25,7 +25,4 @@ elif [[ "${exit_code_service}" -ne 0 ]]; then
|
||||
fi
|
||||
fi
|
||||
|
||||
# used by the docker healthcheck
|
||||
touch /dev/shm/.frigate-is-stopping
|
||||
|
||||
exec /run/s6/basedir/bin/halt
|
||||
|
||||
@@ -22,7 +22,7 @@ RUN apt update && \
|
||||
|
||||
RUN mkdir -p /opt/rocm-dist/opt/rocm-$ROCM/lib
|
||||
RUN cd /opt/rocm-$ROCM/lib && \
|
||||
cp -dpr libMIOpen*.so* libamd*.so* libhip*.so* libhsa*.so* libmigraphx*.so* librocm*.so* librocblas*.so* libroctracer*.so* librocfft*.so* librocprofiler*.so* libroctx*.so* /opt/rocm-dist/opt/rocm-$ROCM/lib/ && \
|
||||
cp -dpr libMIOpen*.so* libamd*.so* libhip*.so* libhsa*.so* libmigraphx*.so* librocm*.so* librocblas*.so* libroctracer*.so* librocsolver*.so* librocfft*.so* librocprofiler*.so* libroctx*.so* /opt/rocm-dist/opt/rocm-$ROCM/lib/ && \
|
||||
mkdir -p /opt/rocm-dist/opt/rocm-$ROCM/lib/migraphx/lib && \
|
||||
cp -dpr migraphx/lib/* /opt/rocm-dist/opt/rocm-$ROCM/lib/migraphx/lib
|
||||
RUN cd /opt/rocm-dist/opt/ && ln -s rocm-$ROCM rocm
|
||||
|
||||
@@ -47,12 +47,11 @@ RUN --mount=type=bind,source=docker/tensorrt/detector/build_python_tensorrt.sh,t
|
||||
&& TENSORRT_VER=$(cat /etc/TENSORRT_VER) /deps/build_python_tensorrt.sh
|
||||
|
||||
COPY docker/tensorrt/requirements-arm64.txt /requirements-tensorrt.txt
|
||||
# See https://elinux.org/Jetson_Zoo#ONNX_Runtime
|
||||
ADD https://nvidia.box.com/shared/static/9yvw05k6u343qfnkhdv2x6xhygze0aq1.whl /tmp/onnxruntime_gpu-1.19.0-cp311-cp311-linux_aarch64.whl
|
||||
|
||||
RUN pip3 uninstall -y onnxruntime-openvino \
|
||||
&& pip3 wheel --wheel-dir=/trt-wheels -r /requirements-tensorrt.txt \
|
||||
&& pip3 install --no-deps /tmp/onnxruntime_gpu-1.19.0-cp311-cp311-linux_aarch64.whl
|
||||
RUN pip3 wheel --wheel-dir=/trt-wheels -r /requirements-tensorrt.txt
|
||||
|
||||
# See https://elinux.org/Jetson_Zoo#ONNX_Runtime
|
||||
ADD https://nvidia.box.com/shared/static/9yvw05k6u343qfnkhdv2x6xhygze0aq1.whl /trt-wheels/onnxruntime_gpu-1.19.0-cp311-cp311-linux_aarch64.whl
|
||||
|
||||
FROM build-wheels AS trt-model-wheels
|
||||
ARG DEBIAN_FRONTEND
|
||||
@@ -93,7 +92,8 @@ RUN mkdir -p /etc/ld.so.conf.d && echo /usr/lib/ffmpeg/jetson/lib/ > /etc/ld.so.
|
||||
COPY --from=trt-wheels /etc/TENSORRT_VER /etc/TENSORRT_VER
|
||||
RUN --mount=type=bind,from=trt-wheels,source=/trt-wheels,target=/deps/trt-wheels \
|
||||
--mount=type=bind,from=trt-model-wheels,source=/trt-model-wheels,target=/deps/trt-model-wheels \
|
||||
pip3 install -U /deps/trt-wheels/*.whl /deps/trt-model-wheels/*.whl \
|
||||
pip3 uninstall -y onnxruntime \
|
||||
&& pip3 install -U /deps/trt-wheels/*.whl /deps/trt-model-wheels/*.whl \
|
||||
&& ldconfig
|
||||
|
||||
WORKDIR /opt/frigate/
|
||||
|
||||
@@ -97,11 +97,12 @@ python3 -c 'import secrets; print(secrets.token_hex(64))'
|
||||
|
||||
### Header mapping
|
||||
|
||||
If you have disabled Frigate's authentication and your proxy supports passing a header with authenticated usernames and/or roles, you can use the `header_map` config to specify the header name so it is passed to Frigate. For example, the following will map the `X-Forwarded-User` and `X-Forwarded-Role` values. Header names are not case sensitive.
|
||||
If you have disabled Frigate's authentication and your proxy supports passing a header with authenticated usernames and/or roles, you can use the `header_map` config to specify the header name so it is passed to Frigate. For example, the following will map the `X-Forwarded-User` and `X-Forwarded-Role` values. Header names are not case sensitive. Multiple values can be included in the role header. Frigate expects that the character separating the roles is a comma, but this can be specified using the `separator` config entry.
|
||||
|
||||
```yaml
|
||||
proxy:
|
||||
...
|
||||
separator: "|" # This value defaults to a comma, but Authentik uses a pipe, for example.
|
||||
header_map:
|
||||
user: x-forwarded-user
|
||||
role: x-forwarded-role
|
||||
|
||||
@@ -65,6 +65,8 @@ Fine-tune face recognition with these optional parameters at the global level of
|
||||
- Default: `0.8`.
|
||||
- `recognition_threshold`: Recognition confidence score required to add the face to the object as a sub label.
|
||||
- Default: `0.9`.
|
||||
- `min_faces`: Min face attempts for the sub label to be applied to the person object.
|
||||
- Default: `1`
|
||||
- `save_attempts`: Number of images of recognized faces to save for training.
|
||||
- Default: `100`.
|
||||
- `blur_confidence_filter`: Enables a filter that calculates how blurry the face is and adjusts the confidence based on this.
|
||||
@@ -72,8 +74,10 @@ Fine-tune face recognition with these optional parameters at the global level of
|
||||
|
||||
## Usage
|
||||
|
||||
Follow these steps to begin:
|
||||
|
||||
1. **Enable face recognition** in your configuration file and restart Frigate.
|
||||
2. **Upload your face** using the **Add Face** button's wizard in the Face Library section of the Frigate UI.
|
||||
2. **Upload one face** using the **Add Face** button's wizard in the Face Library section of the Frigate UI. Read below for the best practices on expanding your training set.
|
||||
3. When Frigate detects and attempts to recognize a face, it will appear in the **Train** tab of the Face Library, along with its associated recognition confidence.
|
||||
4. From the **Train** tab, you can **assign the face** to a new or existing person to improve recognition accuracy for the future.
|
||||
|
||||
@@ -105,22 +109,32 @@ When choosing images to include in the face training set it is recommended to al
|
||||
|
||||
:::
|
||||
|
||||
### Understanding the Train Tab
|
||||
|
||||
The Train tab in the face library displays recent face recognition attempts. Detected face images are grouped according to the person they were identified as potentially matching.
|
||||
|
||||
Each face image is labeled with a name (or `Unknown`) along with the confidence score of the recognition attempt. While each image can be used to train the system for a specific person, not all images are suitable for training.
|
||||
|
||||
Refer to the guidelines below for best practices on selecting images for training.
|
||||
|
||||
### Step 1 - Building a Strong Foundation
|
||||
|
||||
When first enabling face recognition it is important to build a foundation of strong images. It is recommended to start by uploading 1-5 photos containing just this person's face. It is important that the person's face in the photo is front-facing and not turned, this will ensure a good starting point.
|
||||
|
||||
Then it is recommended to use the `Face Library` tab in Frigate to select and train images for each person as they are detected. When building a strong foundation it is strongly recommended to only train on images that are front-facing. Ignore images from cameras that recognize faces from an angle.
|
||||
Then it is recommended to use the `Face Library` tab in Frigate to select and train images for each person as they are detected. When building a strong foundation it is strongly recommended to only train on images that are front-facing. Ignore images from cameras that recognize faces from an angle. Aim to strike a balance between the quality of images while also having a range of conditions (day / night, different weather conditions, different times of day, etc.) in order to have diversity in the images used for each person and not have over-fitting.
|
||||
|
||||
Aim to strike a balance between the quality of images while also having a range of conditions (day / night, different weather conditions, different times of day, etc.) in order to have diversity in the images used for each person and not have over-fitting.
|
||||
|
||||
Once a person starts to be consistently recognized correctly on images that are front-facing, it is time to move on to the next step.
|
||||
You do not want to train images that are 90%+ as these are already being confidently recognized. In this step the goal is to train on clear, lower scoring front-facing images until the majority of front-facing images for a given person are consistently recognized correctly. Then it is time to move on to step 2.
|
||||
|
||||
### Step 2 - Expanding The Dataset
|
||||
|
||||
Once front-facing images are performing well, start choosing slightly off-angle images to include for training. It is important to still choose images where enough face detail is visible to recognize someone.
|
||||
Once front-facing images are performing well, start choosing slightly off-angle images to include for training. It is important to still choose images where enough face detail is visible to recognize someone, and you still only want to train on images that score lower.
|
||||
|
||||
## FAQ
|
||||
|
||||
### Detection does not work well with blurry images?
|
||||
|
||||
Accuracy is definitely a going to be improved with higher quality cameras / streams. It is important to look at the DORI (Detection Observation Recognition Identification) range of your camera, if that specification is posted. This specification explains the distance from the camera that a person can be detected, observed, recognized, and identified. The identification range is the most relevant here, and the distance listed by the camera is the furthest that face recognition will realistically work.
|
||||
|
||||
### Why can't I bulk upload photos?
|
||||
|
||||
It is important to methodically add photos to the library, bulk importing photos (especially from a general photo library) will lead to over-fitting in that particular scenario and hurt recognition performance.
|
||||
@@ -166,6 +180,6 @@ Face recognition does not run on the recording stream, this would be suboptimal
|
||||
|
||||
By default iOS devices will use HEIC (High Efficiency Image Container) for images, but this format is not supported for uploads. Choosing `large` as the format instead of `original` will use JPG which will work correctly.
|
||||
|
||||
## How can I delete the face database and start over?
|
||||
### How can I delete the face database and start over?
|
||||
|
||||
Frigate does not store anything in its database related to face recognition. You can simply delete all of your faces through the Frigate UI or remove the contents of the `/media/frigate/clips/faces` directory.
|
||||
|
||||
@@ -167,7 +167,7 @@ Analyze the sequence of images containing the {label}. Focus on the likely inten
|
||||
|
||||
:::tip
|
||||
|
||||
Prompts can use variable replacements like `{label}`, `{sub_label}`, and `{camera}` to substitute information from the tracked object as part of the prompt.
|
||||
Prompts can use variable replacements `{label}`, `{sub_label}`, and `{camera}` to substitute information from the tracked object as part of the prompt.
|
||||
|
||||
:::
|
||||
|
||||
|
||||
@@ -164,11 +164,17 @@ Dedicated LPR cameras are single-purpose cameras with powerful optical zoom to c
|
||||
|
||||
To mark a camera as a dedicated LPR camera, add `type: "lpr"` the camera configuration.
|
||||
|
||||
:::note
|
||||
|
||||
Frigate's dedicated LPR mode is optimized for cameras with a narrow field of view, specifically positioned and zoomed to capture license plates exclusively. If your camera provides a general overview of a scene rather than a tightly focused view, this mode is not recommended.
|
||||
|
||||
:::
|
||||
|
||||
Users can configure Frigate's dedicated LPR mode in two different ways depending on whether a Frigate+ (or native `license_plate` detecting) model is used:
|
||||
|
||||
### Using a Frigate+ (or Native `license_plate` Detecting) Model
|
||||
|
||||
Users running a Frigate+ model (or any model that natively detects `license_plate`) can take advantage of `license_plate` detection. This allows license plates to be treated as standard objects in dedicated LPR mode, meaning that alerts, detections, snapshots, zones, and other Frigate features work as usual, and plates are detected efficiently through your configured object detector.
|
||||
Users running a Frigate+ model (or any model that natively detects `license_plate`) can take advantage of `license_plate` detection. This allows license plates to be treated as standard objects in dedicated LPR mode, meaning that alerts, detections, snapshots, and other Frigate features work as usual, and plates are detected efficiently through your configured object detector.
|
||||
|
||||
An example configuration for a dedicated LPR camera using a `license_plate`-detecting model:
|
||||
|
||||
@@ -213,7 +219,7 @@ cameras:
|
||||
With this setup:
|
||||
|
||||
- License plates are treated as normal objects in Frigate.
|
||||
- Scores, alerts, detections, snapshots, zones, and object masks work as expected.
|
||||
- Scores, alerts, detections, and snapshots work as expected.
|
||||
- Snapshots will have license plate bounding boxes on them.
|
||||
- The `frigate/events` MQTT topic will publish tracked object updates.
|
||||
- Debug view will display `license_plate` bounding boxes.
|
||||
@@ -279,7 +285,6 @@ With this setup:
|
||||
| License Plate Detection | Uses `license_plate` as a tracked object | Runs a dedicated LPR pipeline |
|
||||
| FPS Setting | 5 (increase for fast-moving cars) | 5 (increase for fast-moving cars, but it may use much more CPU) |
|
||||
| Object Detection | Standard Frigate+ detection applies | Bypasses standard object detection |
|
||||
| Zones & Object Masks | Supported | Not supported |
|
||||
| Debug View | May show `license_plate` bounding boxes | May **not** show `license_plate` bounding boxes |
|
||||
| MQTT `frigate/events` | Publishes tracked object updates | Publishes limited updates |
|
||||
| Explore | Recognized plates available in More Filters | Recognized plates available in More Filters |
|
||||
@@ -335,19 +340,37 @@ Use `match_distance` to allow small character mismatches. Alternatively, define
|
||||
|
||||
### How do I debug LPR issues?
|
||||
|
||||
- View MQTT messages for `frigate/events` to verify detected plates.
|
||||
- If you are using a Frigate+ model or a model that detects license plates, watch the debug view (Settings --> Debug) to ensure that `license_plate` is being detected with a `car` or `motorcycle`.
|
||||
- Watch the debug view to see plates recognized in real-time. For non-dedicated LPR cameras, the `car` or `motorcycle` label will change to the recognized plate when LPR is enabled and working.
|
||||
- Adjust `detection_threshold` and `recognition_threshold` settings per the suggestions [above](#advanced-configuration).
|
||||
- Enable `debug_save_plates` to save images of detected text on plates to the clips directory (`/media/frigate/clips/lpr`). Ensure these images are readable and the text is clear.
|
||||
- Enable debug logs for LPR by adding `frigate.data_processing.common.license_plate: debug` to your `logger` configuration. These logs are _very_ verbose, so only enable this when necessary.
|
||||
Start with ["Why isn't my license plate being detected and recognized?"](#why-isnt-my-license-plate-being-detected-and-recognized). If you are still having issues, work through these steps.
|
||||
|
||||
```yaml
|
||||
logger:
|
||||
default: info
|
||||
logs:
|
||||
frigate.data_processing.common.license_plate: debug
|
||||
```
|
||||
1. Enable debug logs to see exactly what Frigate is doing.
|
||||
|
||||
- Enable debug logs for LPR by adding `frigate.data_processing.common.license_plate: debug` to your `logger` configuration. These logs are _very_ verbose, so only keep this enabled when necessary.
|
||||
|
||||
```yaml
|
||||
logger:
|
||||
default: info
|
||||
logs:
|
||||
frigate.data_processing.common.license_plate: debug
|
||||
```
|
||||
|
||||
2. Ensure your plates are being _detected_.
|
||||
|
||||
If you are using a Frigate+ or `license_plate` detecting model:
|
||||
|
||||
- Watch the debug view (Settings --> Debug) to ensure that `license_plate` is being detected.
|
||||
- View MQTT messages for `frigate/events` to verify detected plates.
|
||||
- You may need to adjust your `min_score` and/or `threshold` for the `license_plate` object if your plates are not being detected.
|
||||
|
||||
If you are **not** using a Frigate+ or `license_plate` detecting model:
|
||||
|
||||
- Watch the debug logs for messages from the YOLOv9 plate detector.
|
||||
- You may need to adjust your `detection_threshold` if your plates are not being detected.
|
||||
|
||||
3. Ensure the characters on detected plates are being _recognized_.
|
||||
|
||||
- Enable `debug_save_plates` to save images of detected text on plates to the clips directory (`/media/frigate/clips/lpr`). Ensure these images are readable and the text is clear.
|
||||
- Watch the debug view to see plates recognized in real-time. For non-dedicated LPR cameras, the `car` or `motorcycle` label will change to the recognized plate when LPR is enabled and working.
|
||||
- Adjust `recognition_threshold` settings per the suggestions [above](#advanced-configuration).
|
||||
|
||||
### Will LPR slow down my system?
|
||||
|
||||
|
||||
@@ -197,6 +197,12 @@ The default dashboard ("All Cameras") will always use Smart Streaming and the fi
|
||||
|
||||
Cameras can be temporarily disabled through the Frigate UI and through [MQTT](/integrations/mqtt#frigatecamera_nameenabledset) to conserve system resources. When disabled, Frigate's ffmpeg processes are terminated — recording stops, object detection is paused, and the Live dashboard displays a blank image with a disabled message. Review items, tracked objects, and historical footage for disabled cameras can still be accessed via the UI.
|
||||
|
||||
:::note
|
||||
|
||||
Disabling a camera via the Frigate UI or MQTT is temporary and does not persist through restarts of Frigate.
|
||||
|
||||
:::
|
||||
|
||||
For restreamed cameras, go2rtc remains active but does not use system resources for decoding or processing unless there are active external consumers (such as the Advanced Camera Card in Home Assistant using a go2rtc source).
|
||||
|
||||
Note that disabling a camera through the config file (`enabled: False`) removes all related UI elements, including historical footage access. To retain access while disabling the camera, keep it enabled in the config and use the UI or MQTT to disable it temporarily.
|
||||
|
||||
@@ -1024,7 +1024,7 @@ x.export()
|
||||
|
||||
### Downloading YOLO-NAS Model
|
||||
|
||||
You can build and download a compatible model with pre-trained weights using [this notebook](https://github.com/blakeblackshear/frigate/blob/dev/notebooks/YOLO_NAS_Pretrained_Export.ipynb) [](https://colab.research.google.com/github/blakeblackshear/frigate/blob/dev/notebooks/YOLO_NAS_Pretrained_Export.ipynb).
|
||||
You can build and download a compatible model with pre-trained weights using [this notebook](https://github.com/blakeblackshear/frigate/blob/dev/notebooks/YOLO_NAS_Pretrained_Export.ipynb) [](https://colab.research.google.com/github/blakeblackshear/frigate/blob/dev/notebooks/YOLO_NAS_Pretrained_Export.ipynb) which can be run directly in [Google Colab](https://colab.research.google.com/github/blakeblackshear/frigate/blob/dev/notebooks/YOLO_NAS_Pretrained_Export.ipynb).
|
||||
|
||||
:::warning
|
||||
|
||||
@@ -1053,13 +1053,14 @@ python3 yolo_to_onnx.py -m yolov7-320
|
||||
|
||||
#### YOLOv9
|
||||
|
||||
YOLOv9 models can be exported using the below code or they [can be downloaded from hugging face](https://huggingface.co/Xenova/yolov9-onnx/tree/main)
|
||||
YOLOv9 models can be exported using the below code
|
||||
|
||||
```sh
|
||||
git clone https://github.com/WongKinYiu/yolov9
|
||||
cd yolov9
|
||||
|
||||
# setup the virtual environment so installation doesn't affect main system
|
||||
# NOTE: Virtual environment must be using Python 3.11 or older.
|
||||
python3 -m venv ./
|
||||
bin/pip install -r requirements.txt
|
||||
bin/pip install onnx onnxruntime onnx-simplifier>=0.4.1
|
||||
|
||||
@@ -91,6 +91,8 @@ proxy:
|
||||
auth_secret: None
|
||||
# Optional: The default role to use for proxy auth. Must be "admin" or "viewer"
|
||||
default_role: viewer
|
||||
# Optional: The character used to separate multiple values in the proxy headers. (default: shown below)
|
||||
separator: ","
|
||||
|
||||
# Optional: Authentication configuration
|
||||
auth:
|
||||
@@ -559,6 +561,8 @@ face_recognition:
|
||||
recognition_threshold: 0.9
|
||||
# Optional: Min area of detected face box to consider running face recognition (default: shown below)
|
||||
min_area: 500
|
||||
# Optional: Min face attempts for the sub label to be applied to the person object (default: shown below)
|
||||
min_faces: 1
|
||||
# Optional: Number of images of recognized faces to save for training (default: shown below)
|
||||
save_attempts: 100
|
||||
# Optional: Apply a blur quality filter to adjust confidence based on the blur level of the image (default: shown below)
|
||||
|
||||
@@ -19,7 +19,7 @@ For best performance, 16GB or more of RAM and a dedicated GPU are recommended.
|
||||
|
||||
## Configuration
|
||||
|
||||
Semantic Search is disabled by default, and must be enabled in your config file or in the UI's Classification Settings page before it can be used. Semantic Search is a global configuration setting.
|
||||
Semantic Search is disabled by default, and must be enabled in your config file or in the UI's Enrichments Settings page before it can be used. Semantic Search is a global configuration setting.
|
||||
|
||||
```yaml
|
||||
semantic_search:
|
||||
@@ -29,7 +29,7 @@ semantic_search:
|
||||
|
||||
:::tip
|
||||
|
||||
The embeddings database can be re-indexed from the existing tracked objects in your database by pressing the "Reindex" button in the Classification Settings in the UI or by adding `reindex: True` to your `semantic_search` configuration and restarting Frigate. Depending on the number of tracked objects you have, it can take a long while to complete and may max out your CPU while indexing.
|
||||
The embeddings database can be re-indexed from the existing tracked objects in your database by pressing the "Reindex" button in the Enrichments Settings in the UI or by adding `reindex: True` to your `semantic_search` configuration and restarting Frigate. Depending on the number of tracked objects you have, it can take a long while to complete and may max out your CPU while indexing.
|
||||
|
||||
If you are enabling Semantic Search for the first time, be advised that Frigate does not automatically index older tracked objects. You will need to reindex as described above.
|
||||
|
||||
|
||||
@@ -136,7 +136,7 @@ Your zone must be defined with exactly 4 points and should be aligned to the gro
|
||||
|
||||

|
||||
|
||||
Speed estimation requires a minimum number of frames for your object to be tracked before a valid estimate can be calculated, so create your zone away from places where objects enter and exit for the best results. _Your zone should not take up the full frame._ An object's speed is tracked while it is in the zone and then saved to Frigate's database.
|
||||
Speed estimation requires a minimum number of frames for your object to be tracked before a valid estimate can be calculated, so create your zone away from places where objects enter and exit for the best results. The object's bounding box must be stable and remain a constant size as it enters and exits the zone. _Your zone should not take up the full frame, and the zone does **not** need to be the same size or larger than the objects passing through it._ An object's speed is tracked while it passes through the zone and then saved to Frigate's database.
|
||||
|
||||
Accurate real-world distance measurements are required to estimate speeds. These distances can be specified in your zone config through the `distances` field.
|
||||
|
||||
@@ -165,8 +165,9 @@ These speed values are output as a number in miles per hour (mph) or kilometers
|
||||
|
||||
#### Best practices and caveats
|
||||
|
||||
- Speed estimation works best with a straight road or path when your object travels in a straight line across that path. Avoid creating your zone near intersections or anywhere that objects would make a turn. If the bounding box changes shape (either because the object made a turn or became partially obscured, for example), speed estimation will not be accurate.
|
||||
- Create a zone where the bottom center of your object's bounding box travels directly through it and does not become obscured at any time. See the photo example above.
|
||||
- Speed estimation works best with a straight road or path when your object travels in a straight line across that path. Avoid creating your zone near intersections or anywhere that objects would make a turn.
|
||||
- Create a zone where the bottom center of your object's bounding box travels directly through it and does not become obscured at any time.
|
||||
- A large zone can be used (as in the photo example above), but it may cause inaccurate estimation if the object's bounding box changes shape (such as when it turns or becomes partially hidden). Generally it's best to make your zone large enough to capture a few frames, but small enough so that the bounding box doesn't change size as it enters, travels through, and exits the zone.
|
||||
- Depending on the size and location of your zone, you may want to decrease the zone's `inertia` value from the default of 3.
|
||||
- The more accurate your real-world dimensions can be measured, the more accurate speed estimation will be. However, due to the way Frigate's tracking algorithm works, you may need to tweak the real-world distance values so that estimated speeds better match real-world speeds.
|
||||
- Once an object leaves the zone, speed accuracy will likely decrease due to perspective distortion and misalignment with the calibrated area. Therefore, speed values will show as a zero through MQTT and will not be visible on the debug view when an object is outside of a speed tracking zone.
|
||||
|
||||
@@ -145,7 +145,7 @@ With the [rocm](../configuration/object_detectors.md#amdrocm-gpu-detector) detec
|
||||
|
||||
| Name | YOLOv9 Inference Time | YOLO-NAS Inference Time |
|
||||
| --------- | --------------------- | ------------------------- |
|
||||
| AMD 780M | ~ 14 ms | 320: ~ 30 ms 640: ~ 60 ms |
|
||||
| AMD 780M | ~ 14 ms | 320: ~ 25 ms 640: ~ 50 ms |
|
||||
| AMD 8700G | | 320: ~ 20 ms 640: ~ 40 ms |
|
||||
|
||||
## Community Supported Detectors
|
||||
|
||||
@@ -26,3 +26,7 @@ This is a fork (with fixed errors and new features) of [original Double Take](ht
|
||||
## [Frigate telegram](https://github.com/OldTyT/frigate-telegram)
|
||||
|
||||
[Frigate telegram](https://github.com/OldTyT/frigate-telegram) makes it possible to send events from Frigate to Telegram. Events are sent as a message with a text description, video, and thumbnail.
|
||||
|
||||
## [Periscope](https://github.com/maksz42/periscope)
|
||||
|
||||
[Periscope](https://github.com/maksz42/periscope) is a lightweight Android app that turns old devices into live viewers for Frigate. It works on Android 2.2 and above, including Android TV. It supports authentication and HTTPS.
|
||||
|
||||
+9
-2
@@ -202,9 +202,15 @@ async def get_current_user(request: Request):
|
||||
|
||||
def require_role(required_roles: List[str]):
|
||||
async def role_checker(request: Request):
|
||||
proxy_config: ProxyConfig = request.app.frigate_config.proxy
|
||||
|
||||
# Get role from header (could be comma-separated)
|
||||
role_header = request.headers.get("remote-role")
|
||||
roles = [r.strip() for r in role_header.split(",")] if role_header else []
|
||||
roles = (
|
||||
[r.strip() for r in role_header.split(proxy_config.separator)]
|
||||
if role_header
|
||||
else []
|
||||
)
|
||||
|
||||
# Check if we have any roles
|
||||
if not roles:
|
||||
@@ -269,7 +275,8 @@ def auth(request: Request):
|
||||
# if comma-separated with "admin", use "admin", else use default role
|
||||
success_response.headers["remote-role"] = (
|
||||
"admin"
|
||||
if role and "admin" in [r.strip() for r in role.split(",")]
|
||||
if role
|
||||
and "admin" in [r.strip() for r in role.split(proxy_config.separator)]
|
||||
else proxy_config.default_role
|
||||
)
|
||||
|
||||
|
||||
+35
-11
@@ -593,10 +593,12 @@ def recording_clip(
|
||||
clip: Recordings
|
||||
for clip in recordings:
|
||||
file.write(f"file '{clip.path}'\n")
|
||||
|
||||
# if this is the starting clip, add an inpoint
|
||||
if clip.start_time < start_ts:
|
||||
file.write(f"inpoint {int(start_ts - clip.start_time)}\n")
|
||||
# if this is the ending clip, add an outpoint
|
||||
|
||||
# if this is the ending clip and end trim is enabled, add an outpoint
|
||||
if clip.end_time > end_ts:
|
||||
file.write(f"outpoint {int(end_ts - clip.start_time)}\n")
|
||||
|
||||
@@ -638,10 +640,18 @@ def recording_clip(
|
||||
)
|
||||
|
||||
|
||||
@router.get("/vod/{camera_name}/start/{start_ts}/end/{end_ts}")
|
||||
@router.get(
|
||||
"/vod/{camera_name}/start/{start_ts}/end/{end_ts}",
|
||||
description="Returns an HLS playlist for the specified timestamp-range on the specified camera. Append /master.m3u8 or /index.m3u8 for HLS playback.",
|
||||
)
|
||||
def vod_ts(camera_name: str, start_ts: float, end_ts: float):
|
||||
recordings = (
|
||||
Recordings.select(Recordings.path, Recordings.duration, Recordings.end_time)
|
||||
Recordings.select(
|
||||
Recordings.path,
|
||||
Recordings.duration,
|
||||
Recordings.end_time,
|
||||
Recordings.start_time,
|
||||
)
|
||||
.where(
|
||||
Recordings.start_time.between(start_ts, end_ts)
|
||||
| Recordings.end_time.between(start_ts, end_ts)
|
||||
@@ -661,14 +671,19 @@ def vod_ts(camera_name: str, start_ts: float, end_ts: float):
|
||||
clip = {"type": "source", "path": recording.path}
|
||||
duration = int(recording.duration * 1000)
|
||||
|
||||
# Determine if we need to end the last clip early
|
||||
# adjust start offset if start_ts is after recording.start_time
|
||||
if start_ts > recording.start_time:
|
||||
inpoint = int((start_ts - recording.start_time) * 1000)
|
||||
clip["clipFrom"] = inpoint
|
||||
duration -= inpoint
|
||||
|
||||
# adjust end if recording.end_time is after end_ts
|
||||
if recording.end_time > end_ts:
|
||||
duration -= int((recording.end_time - end_ts) * 1000)
|
||||
|
||||
if duration == 0:
|
||||
# this means the segment starts right at the end of the requested time range
|
||||
# and it does not need to be included
|
||||
continue
|
||||
if duration <= 0:
|
||||
# skip if the clip has no valid duration
|
||||
continue
|
||||
|
||||
if 0 < duration < max_duration_ms:
|
||||
clip["keyFrameDurations"] = [duration]
|
||||
@@ -702,7 +717,10 @@ def vod_ts(camera_name: str, start_ts: float, end_ts: float):
|
||||
)
|
||||
|
||||
|
||||
@router.get("/vod/{year_month}/{day}/{hour}/{camera_name}")
|
||||
@router.get(
|
||||
"/vod/{year_month}/{day}/{hour}/{camera_name}",
|
||||
description="Returns an HLS playlist for the specified date-time on the specified camera. Append /master.m3u8 or /index.m3u8 for HLS playback.",
|
||||
)
|
||||
def vod_hour_no_timezone(year_month: str, day: int, hour: int, camera_name: str):
|
||||
"""VOD for specific hour. Uses the default timezone (UTC)."""
|
||||
return vod_hour(
|
||||
@@ -710,7 +728,10 @@ def vod_hour_no_timezone(year_month: str, day: int, hour: int, camera_name: str)
|
||||
)
|
||||
|
||||
|
||||
@router.get("/vod/{year_month}/{day}/{hour}/{camera_name}/{tz_name}")
|
||||
@router.get(
|
||||
"/vod/{year_month}/{day}/{hour}/{camera_name}/{tz_name}",
|
||||
description="Returns an HLS playlist for the specified date-time (with timezone) on the specified camera. Append /master.m3u8 or /index.m3u8 for HLS playback.",
|
||||
)
|
||||
def vod_hour(year_month: str, day: int, hour: int, camera_name: str, tz_name: str):
|
||||
parts = year_month.split("-")
|
||||
start_date = (
|
||||
@@ -724,7 +745,10 @@ def vod_hour(year_month: str, day: int, hour: int, camera_name: str, tz_name: st
|
||||
return vod_ts(camera_name, start_ts, end_ts)
|
||||
|
||||
|
||||
@router.get("/vod/event/{event_id}")
|
||||
@router.get(
|
||||
"/vod/event/{event_id}",
|
||||
description="Returns an HLS playlist for the specified object. Append /master.m3u8 or /index.m3u8 for HLS playback.",
|
||||
)
|
||||
def vod_event(event_id: str):
|
||||
try:
|
||||
event: Event = Event.get(Event.id == event_id)
|
||||
|
||||
+10
-2
@@ -6,6 +6,7 @@ import secrets
|
||||
import shutil
|
||||
from multiprocessing import Queue
|
||||
from multiprocessing.synchronize import Event as MpEvent
|
||||
from pathlib import Path
|
||||
from typing import Optional
|
||||
|
||||
import psutil
|
||||
@@ -44,6 +45,7 @@ from frigate.embeddings import EmbeddingsContext, manage_embeddings
|
||||
from frigate.events.audio import AudioProcessor
|
||||
from frigate.events.cleanup import EventCleanup
|
||||
from frigate.events.maintainer import EventProcessor
|
||||
from frigate.log import _stop_logging
|
||||
from frigate.models import (
|
||||
Event,
|
||||
Export,
|
||||
@@ -438,7 +440,7 @@ class FrigateApp:
|
||||
|
||||
def start_camera_processors(self) -> None:
|
||||
for name, config in self.config.cameras.items():
|
||||
if not self.config.cameras[name].enabled:
|
||||
if not self.config.cameras[name].enabled_in_config:
|
||||
logger.info(f"Camera processor not started for disabled camera {name}")
|
||||
continue
|
||||
|
||||
@@ -467,7 +469,7 @@ class FrigateApp:
|
||||
shm_frame_count = self.shm_frame_count()
|
||||
|
||||
for name, config in self.config.cameras.items():
|
||||
if not self.config.cameras[name].enabled:
|
||||
if not self.config.cameras[name].enabled_in_config:
|
||||
logger.info(f"Capture process not started for disabled camera {name}")
|
||||
continue
|
||||
|
||||
@@ -684,6 +686,9 @@ class FrigateApp:
|
||||
def stop(self) -> None:
|
||||
logger.info("Stopping...")
|
||||
|
||||
# used by the docker healthcheck
|
||||
Path("/dev/shm/.frigate-is-stopping").touch()
|
||||
|
||||
self.stop_event.set()
|
||||
|
||||
# set an end_time on entries without an end_time before exiting
|
||||
@@ -771,4 +776,7 @@ class FrigateApp:
|
||||
shm.close()
|
||||
shm.unlink()
|
||||
|
||||
# exit the mp Manager process
|
||||
_stop_logging()
|
||||
|
||||
os._exit(os.EX_OK)
|
||||
|
||||
@@ -172,6 +172,7 @@ class CameraState:
|
||||
# draw any attributes
|
||||
for attribute in obj["current_attributes"]:
|
||||
box = attribute["box"]
|
||||
box_area = int((box[2] - box[0]) * (box[3] - box[1]))
|
||||
draw_box_with_label(
|
||||
frame_copy,
|
||||
box[0],
|
||||
@@ -179,7 +180,7 @@ class CameraState:
|
||||
box[2],
|
||||
box[3],
|
||||
attribute["label"],
|
||||
f"{attribute['score']:.0%}",
|
||||
f"{attribute['score']:.0%} {str(box_area)}",
|
||||
thickness=thickness,
|
||||
color=color,
|
||||
)
|
||||
@@ -282,9 +283,13 @@ class CameraState:
|
||||
}
|
||||
new_obj.thumbnail_data = thumbnail_data
|
||||
tracked_objects[id].thumbnail_data = thumbnail_data
|
||||
self.best_objects[new_obj.obj_data["label"]] = new_obj
|
||||
object_type = new_obj.obj_data["label"]
|
||||
self.best_objects[object_type] = new_obj
|
||||
|
||||
# call event handlers
|
||||
for c in self.callbacks["snapshot"]:
|
||||
c(self.name, self.best_objects[object_type], frame_name)
|
||||
|
||||
for c in self.callbacks["start"]:
|
||||
c(self.name, new_obj, frame_name)
|
||||
|
||||
|
||||
@@ -12,6 +12,7 @@ from typing import Any, Callable
|
||||
|
||||
from py_vapid import Vapid01
|
||||
from pywebpush import WebPusher
|
||||
from titlecase import titlecase
|
||||
|
||||
from frigate.comms.base_communicator import Communicator
|
||||
from frigate.comms.config_updater import ConfigSubscriber
|
||||
@@ -173,7 +174,12 @@ class WebPushClient(Communicator): # type: ignore[misc]
|
||||
return
|
||||
self.send_alert(decoded)
|
||||
elif topic == "notification_test":
|
||||
if not self.config.notifications.enabled:
|
||||
if not self.config.notifications.enabled and not any(
|
||||
cam.notifications.enabled for cam in self.config.cameras.values()
|
||||
):
|
||||
logger.debug(
|
||||
"No cameras have notifications enabled, test notification not sent"
|
||||
)
|
||||
return
|
||||
self.send_notification_test()
|
||||
|
||||
@@ -320,8 +326,8 @@ class WebPushClient(Communicator): # type: ignore[misc]
|
||||
|
||||
sorted_objects.update(payload["after"]["data"]["sub_labels"])
|
||||
|
||||
title = f"{', '.join(sorted_objects).replace('_', ' ').title()}{' was' if state == 'end' else ''} detected in {', '.join(payload['after']['data']['zones']).replace('_', ' ').title()}"
|
||||
message = f"Detected on {camera.replace('_', ' ').title()}"
|
||||
title = f"{titlecase(', '.join(sorted_objects).replace('_', ' '))}{' was' if state == 'end' else ''} detected in {titlecase(', '.join(payload['after']['data']['zones']).replace('_', ' '))}"
|
||||
message = f"Detected on {titlecase(camera.replace('_', ' '))}"
|
||||
image = f"{payload['after']['thumb_path'].replace('/media/frigate', '')}"
|
||||
|
||||
# if event is ongoing open to live view otherwise open to recordings view
|
||||
|
||||
@@ -78,7 +78,13 @@ class FaceRecognitionConfig(FrigateBaseModel):
|
||||
le=1.0,
|
||||
)
|
||||
min_area: int = Field(
|
||||
default=500, title="Min area of face box to consider running face recognition."
|
||||
default=750, title="Min area of face box to consider running face recognition."
|
||||
)
|
||||
min_faces: int = Field(
|
||||
default=1,
|
||||
gt=0,
|
||||
le=6,
|
||||
title="Min face attempts for the sub label to be applied to the person object.",
|
||||
)
|
||||
save_attempts: int = Field(
|
||||
default=100, ge=0, title="Number of face attempts to save in the train tab."
|
||||
@@ -91,7 +97,7 @@ class FaceRecognitionConfig(FrigateBaseModel):
|
||||
class CameraFaceRecognitionConfig(FrigateBaseModel):
|
||||
enabled: bool = Field(default=False, title="Enable face recognition.")
|
||||
min_area: int = Field(
|
||||
default=500, title="Min area of face box to consider running face recognition."
|
||||
default=750, title="Min area of face box to consider running face recognition."
|
||||
)
|
||||
|
||||
model_config = ConfigDict(extra="forbid", protected_namespaces=())
|
||||
|
||||
+48
-30
@@ -299,6 +299,22 @@ def verify_motion_and_detect(camera_config: CameraConfig) -> ValueError | None:
|
||||
)
|
||||
|
||||
|
||||
def verify_objects_track(
|
||||
camera_config: CameraConfig, enabled_objects: list[str]
|
||||
) -> None:
|
||||
"""Verify that a user has not specified an object to track that is not in the labelmap."""
|
||||
valid_objects = [
|
||||
obj for obj in camera_config.objects.track if obj in enabled_objects
|
||||
]
|
||||
|
||||
if len(valid_objects) != len(camera_config.objects.track):
|
||||
invalid_objects = set(camera_config.objects.track) - set(valid_objects)
|
||||
logger.warning(
|
||||
f"{camera_config.name} is configured to track {list(invalid_objects)} objects, which are not supported by the current model."
|
||||
)
|
||||
camera_config.objects.track = valid_objects
|
||||
|
||||
|
||||
def verify_lpr_and_face(
|
||||
frigate_config: FrigateConfig, camera_config: CameraConfig
|
||||
) -> ValueError | None:
|
||||
@@ -471,6 +487,37 @@ class FrigateConfig(FrigateBaseModel):
|
||||
exclude_unset=True,
|
||||
)
|
||||
|
||||
for key, detector in self.detectors.items():
|
||||
adapter = TypeAdapter(DetectorConfig)
|
||||
model_dict = (
|
||||
detector
|
||||
if isinstance(detector, dict)
|
||||
else detector.model_dump(warnings="none")
|
||||
)
|
||||
detector_config: BaseDetectorConfig = adapter.validate_python(model_dict)
|
||||
|
||||
# users should not set model themselves
|
||||
if detector_config.model:
|
||||
detector_config.model = None
|
||||
|
||||
model_config = self.model.model_dump(exclude_unset=True, warnings="none")
|
||||
|
||||
if detector_config.model_path:
|
||||
model_config["path"] = detector_config.model_path
|
||||
|
||||
if "path" not in model_config:
|
||||
if detector_config.type == "cpu":
|
||||
model_config["path"] = "/cpu_model.tflite"
|
||||
elif detector_config.type == "edgetpu":
|
||||
model_config["path"] = "/edgetpu_model.tflite"
|
||||
|
||||
model = ModelConfig.model_validate(model_config)
|
||||
model.check_and_load_plus_model(self.plus_api, detector_config.type)
|
||||
model.compute_model_hash()
|
||||
labelmap_objects = model.merged_labelmap.values()
|
||||
detector_config.model = model
|
||||
self.detectors[key] = detector_config
|
||||
|
||||
for name, camera in self.cameras.items():
|
||||
modified_global_config = global_config.copy()
|
||||
|
||||
@@ -644,6 +691,7 @@ class FrigateConfig(FrigateBaseModel):
|
||||
verify_required_zones_exist(camera_config)
|
||||
verify_autotrack_zones(camera_config)
|
||||
verify_motion_and_detect(camera_config)
|
||||
verify_objects_track(camera_config, labelmap_objects)
|
||||
verify_lpr_and_face(self, camera_config)
|
||||
|
||||
self.objects.parse_all_objects(self.cameras)
|
||||
@@ -655,36 +703,6 @@ class FrigateConfig(FrigateBaseModel):
|
||||
"Frigate+ is configured but clean snapshots are not enabled, submissions to Frigate+ will not be possible./"
|
||||
)
|
||||
|
||||
for key, detector in self.detectors.items():
|
||||
adapter = TypeAdapter(DetectorConfig)
|
||||
model_dict = (
|
||||
detector
|
||||
if isinstance(detector, dict)
|
||||
else detector.model_dump(warnings="none")
|
||||
)
|
||||
detector_config: BaseDetectorConfig = adapter.validate_python(model_dict)
|
||||
|
||||
# users should not set model themselves
|
||||
if detector_config.model:
|
||||
detector_config.model = None
|
||||
|
||||
model_config = self.model.model_dump(exclude_unset=True, warnings="none")
|
||||
|
||||
if detector_config.model_path:
|
||||
model_config["path"] = detector_config.model_path
|
||||
|
||||
if "path" not in model_config:
|
||||
if detector_config.type == "cpu":
|
||||
model_config["path"] = "/cpu_model.tflite"
|
||||
elif detector_config.type == "edgetpu":
|
||||
model_config["path"] = "/edgetpu_model.tflite"
|
||||
|
||||
model = ModelConfig.model_validate(model_config)
|
||||
model.check_and_load_plus_model(self.plus_api, detector_config.type)
|
||||
model.compute_model_hash()
|
||||
detector_config.model = model
|
||||
self.detectors[key] = detector_config
|
||||
|
||||
return self
|
||||
|
||||
@field_validator("cameras")
|
||||
|
||||
+12
-1
@@ -1,6 +1,6 @@
|
||||
from typing import Optional
|
||||
|
||||
from pydantic import Field
|
||||
from pydantic import Field, field_validator
|
||||
|
||||
from .base import FrigateBaseModel
|
||||
from .env import EnvString
|
||||
@@ -33,3 +33,14 @@ class ProxyConfig(FrigateBaseModel):
|
||||
default_role: Optional[str] = Field(
|
||||
default="viewer", title="Default role for proxy users."
|
||||
)
|
||||
separator: Optional[str] = Field(
|
||||
default=",",
|
||||
title="The character used to separate values in a mapped header.",
|
||||
)
|
||||
|
||||
@field_validator("separator", mode="before")
|
||||
@classmethod
|
||||
def validate_separator_length(cls, v):
|
||||
if v is not None and len(v) != 1:
|
||||
raise ValueError("Separator must be exactly one character")
|
||||
return v
|
||||
|
||||
@@ -1570,10 +1570,26 @@ class LicensePlateProcessingMixin:
|
||||
def handle_request(self, topic, request_data) -> dict[str, Any] | None:
|
||||
return
|
||||
|
||||
def expire_object(self, object_id: str, camera: str):
|
||||
def lpr_expire(self, object_id: str, camera: str):
|
||||
if object_id in self.detected_license_plates:
|
||||
self.detected_license_plates.pop(object_id)
|
||||
|
||||
if object_id in self.camera_current_cars.get(camera, []):
|
||||
self.camera_current_cars[camera].remove(object_id)
|
||||
|
||||
if len(self.camera_current_cars[camera]) == 0:
|
||||
self.requestor.send_data(
|
||||
"tracked_object_update",
|
||||
json.dumps(
|
||||
{
|
||||
"type": TrackedObjectUpdateTypesEnum.lpr,
|
||||
"name": None,
|
||||
"plate": None,
|
||||
"camera": camera,
|
||||
}
|
||||
),
|
||||
)
|
||||
|
||||
|
||||
class CTCDecoder:
|
||||
"""
|
||||
|
||||
@@ -97,6 +97,9 @@ class BirdRealTimeProcessor(RealTimeProcessorApi):
|
||||
line = f.readline()
|
||||
|
||||
def process_frame(self, obj_data, frame):
|
||||
if not self.interpreter:
|
||||
return
|
||||
|
||||
if obj_data["label"] != "bird":
|
||||
return
|
||||
|
||||
|
||||
@@ -293,14 +293,18 @@ class FaceRealTimeProcessor(RealTimeProcessorApi):
|
||||
if camera not in self.camera_current_people:
|
||||
self.camera_current_people[camera] = []
|
||||
|
||||
self.camera_current_people[camera].append(id)
|
||||
|
||||
self.person_face_history[id].append(
|
||||
(sub_label, score, face_frame.shape[0] * face_frame.shape[1])
|
||||
)
|
||||
self.camera_current_people[camera].append(id)
|
||||
(weighted_sub_label, weighted_score) = self.weighted_average(
|
||||
self.person_face_history[id]
|
||||
)
|
||||
|
||||
if len(self.person_face_history[id]) < self.face_config.min_faces:
|
||||
weighted_sub_label = "unknown"
|
||||
|
||||
self.requestor.send_data(
|
||||
"tracked_object_update",
|
||||
json.dumps(
|
||||
@@ -467,17 +471,22 @@ class FaceRealTimeProcessor(RealTimeProcessorApi):
|
||||
if not results_list:
|
||||
return None, 0.0
|
||||
|
||||
weighted_scores = {}
|
||||
total_weights = {}
|
||||
counts: dict[str, int] = {}
|
||||
weighted_scores: dict[str, int] = {}
|
||||
total_weights: dict[str, int] = {}
|
||||
|
||||
for name, score, face_area in results_list:
|
||||
if name == "unknown":
|
||||
continue
|
||||
|
||||
if name not in weighted_scores:
|
||||
counts[name] = 0
|
||||
weighted_scores[name] = 0.0
|
||||
total_weights[name] = 0.0
|
||||
|
||||
# increase count
|
||||
counts[name] += 1
|
||||
|
||||
# Capped weight based on face area
|
||||
weight = min(face_area, max_weight)
|
||||
|
||||
@@ -490,6 +499,12 @@ class FaceRealTimeProcessor(RealTimeProcessorApi):
|
||||
return None, 0.0
|
||||
|
||||
best_name = max(weighted_scores, key=weighted_scores.get)
|
||||
|
||||
# If the best name has the same number of results as another name, we are not confident it is a correct result
|
||||
for name, count in counts.items():
|
||||
if name != best_name and counts[best_name] == count:
|
||||
return None, 0.0
|
||||
|
||||
weighted_average = weighted_scores[best_name] / total_weights[best_name]
|
||||
|
||||
return best_name, weighted_average
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
"""Handle processing images for face detection and recognition."""
|
||||
|
||||
import json
|
||||
import logging
|
||||
from typing import Any
|
||||
|
||||
@@ -15,7 +14,6 @@ from frigate.data_processing.common.license_plate.mixin import (
|
||||
from frigate.data_processing.common.license_plate.model import (
|
||||
LicensePlateModelRunner,
|
||||
)
|
||||
from frigate.types import TrackedObjectUpdateTypesEnum
|
||||
|
||||
from ..types import DataProcessorMetrics
|
||||
from .api import RealTimeProcessorApi
|
||||
@@ -55,21 +53,5 @@ class LicensePlateRealTimeProcessor(LicensePlateProcessingMixin, RealTimeProcess
|
||||
return
|
||||
|
||||
def expire_object(self, object_id: str, camera: str):
|
||||
if object_id in self.detected_license_plates:
|
||||
self.detected_license_plates.pop(object_id)
|
||||
|
||||
if object_id in self.camera_current_cars.get(camera, []):
|
||||
self.camera_current_cars[camera].remove(object_id)
|
||||
|
||||
if len(self.camera_current_cars[camera]) == 0:
|
||||
self.requestor.send_data(
|
||||
"tracked_object_update",
|
||||
json.dumps(
|
||||
{
|
||||
"type": TrackedObjectUpdateTypesEnum.lpr,
|
||||
"name": None,
|
||||
"plate": None,
|
||||
"camera": camera,
|
||||
}
|
||||
),
|
||||
)
|
||||
"""Expire lpr objects."""
|
||||
self.lpr_expire(object_id, camera)
|
||||
|
||||
@@ -345,11 +345,17 @@ class HailoDetector(DetectionApi):
|
||||
request_id = self.input_store.put(tensor_input)
|
||||
|
||||
try:
|
||||
_, infer_results = self.response_store.get(request_id, timeout=10.0)
|
||||
_, infer_results = self.response_store.get(request_id, timeout=1.0)
|
||||
except TimeoutError:
|
||||
logger.error(
|
||||
f"Timeout waiting for inference results for request {request_id}"
|
||||
)
|
||||
|
||||
if not self.inference_thread.is_alive():
|
||||
raise RuntimeError(
|
||||
"HailoRT inference thread has stopped, restart required."
|
||||
)
|
||||
|
||||
return np.zeros((20, 6), dtype=np.float32)
|
||||
|
||||
if isinstance(infer_results, list) and len(infer_results) == 1:
|
||||
|
||||
@@ -3,11 +3,9 @@ import os
|
||||
|
||||
import numpy as np
|
||||
import openvino as ov
|
||||
import openvino.properties as props
|
||||
from pydantic import Field
|
||||
from typing_extensions import Literal
|
||||
|
||||
from frigate.const import MODEL_CACHE_DIR
|
||||
from frigate.detectors.detection_api import DetectionApi
|
||||
from frigate.detectors.detector_config import BaseDetectorConfig, ModelTypeEnum
|
||||
from frigate.util.model import (
|
||||
@@ -49,10 +47,6 @@ class OvDetector(DetectionApi):
|
||||
logger.error(f"OpenVino model file {detector_config.model.path} not found.")
|
||||
raise FileNotFoundError
|
||||
|
||||
os.makedirs(os.path.join(MODEL_CACHE_DIR, "openvino"), exist_ok=True)
|
||||
self.ov_core.set_property(
|
||||
{props.cache_dir: os.path.join(MODEL_CACHE_DIR, "openvino")}
|
||||
)
|
||||
self.interpreter = self.ov_core.compile_model(
|
||||
model=detector_config.model.path, device_name=detector_config.device
|
||||
)
|
||||
|
||||
@@ -5,12 +5,12 @@ import json
|
||||
import logging
|
||||
import multiprocessing as mp
|
||||
import os
|
||||
import re
|
||||
import signal
|
||||
import threading
|
||||
from types import FrameType
|
||||
from typing import Any, Optional, Union
|
||||
|
||||
import regex
|
||||
from pathvalidate import ValidationError, sanitize_filename
|
||||
from setproctitle import setproctitle
|
||||
|
||||
@@ -243,7 +243,7 @@ class EmbeddingsContext:
|
||||
)
|
||||
|
||||
def rename_face(self, old_name: str, new_name: str) -> None:
|
||||
valid_name_pattern = r"^[a-zA-Z0-9\s_-]{1,50}$"
|
||||
valid_name_pattern = r"^[\p{L}\p{N}\s'_-]{1,50}$"
|
||||
|
||||
try:
|
||||
sanitized_old_name = sanitize_filename(old_name, replacement_text="_")
|
||||
@@ -251,9 +251,9 @@ class EmbeddingsContext:
|
||||
except ValidationError as e:
|
||||
raise ValueError(f"Invalid face name: {str(e)}")
|
||||
|
||||
if not re.match(valid_name_pattern, old_name):
|
||||
if not regex.match(valid_name_pattern, old_name):
|
||||
raise ValueError(f"Invalid old face name: {old_name}")
|
||||
if not re.match(valid_name_pattern, new_name):
|
||||
if not regex.match(valid_name_pattern, new_name):
|
||||
raise ValueError(f"Invalid new face name: {new_name}")
|
||||
if sanitized_old_name != old_name:
|
||||
raise ValueError(f"Old face name contains invalid characters: {old_name}")
|
||||
|
||||
+11
-5
@@ -1,3 +1,4 @@
|
||||
# In log.py
|
||||
import atexit
|
||||
import logging
|
||||
import multiprocessing as mp
|
||||
@@ -6,6 +7,7 @@ import sys
|
||||
import threading
|
||||
from collections import deque
|
||||
from logging.handlers import QueueHandler, QueueListener
|
||||
from queue import Queue
|
||||
from typing import Deque, Optional
|
||||
|
||||
from frigate.util.builtin import clean_camera_user_pass
|
||||
@@ -32,12 +34,14 @@ LOG_HANDLER.addFilter(
|
||||
)
|
||||
|
||||
log_listener: Optional[QueueListener] = None
|
||||
log_queue: Optional[Queue] = None
|
||||
manager = None
|
||||
|
||||
|
||||
def setup_logging() -> None:
|
||||
global log_listener
|
||||
|
||||
log_queue: mp.Queue = mp.Queue()
|
||||
global log_listener, log_queue, manager
|
||||
manager = mp.Manager()
|
||||
log_queue = manager.Queue()
|
||||
log_listener = QueueListener(log_queue, LOG_HANDLER, respect_handler_level=True)
|
||||
|
||||
atexit.register(_stop_logging)
|
||||
@@ -53,11 +57,13 @@ def setup_logging() -> None:
|
||||
|
||||
|
||||
def _stop_logging() -> None:
|
||||
global log_listener
|
||||
|
||||
global log_listener, manager
|
||||
if log_listener is not None:
|
||||
log_listener.stop()
|
||||
log_listener = None
|
||||
if manager is not None:
|
||||
manager.shutdown()
|
||||
manager = None
|
||||
|
||||
|
||||
# When a multiprocessing.Process exits, python tries to flush stdout and stderr. However, if the
|
||||
|
||||
@@ -111,7 +111,7 @@ def output_frames(
|
||||
move_preview_frames("cache")
|
||||
|
||||
for camera, cam_config in config.cameras.items():
|
||||
if not cam_config.enabled:
|
||||
if not cam_config.enabled_in_config:
|
||||
continue
|
||||
|
||||
jsmpeg_cameras[camera] = JsmpegCamera(cam_config, stop_event, websocket_server)
|
||||
|
||||
@@ -403,6 +403,7 @@ class PreviewRecorder:
|
||||
self.reset_frame_cache(frame_time)
|
||||
|
||||
def stop(self) -> None:
|
||||
self.config_subscriber.stop()
|
||||
self.requestor.stop()
|
||||
|
||||
|
||||
|
||||
@@ -1109,6 +1109,7 @@ class PtzAutoTracker:
|
||||
camera_height = camera_config.frame_shape[0]
|
||||
camera_fps = camera_config.detect.fps
|
||||
predicted_movement_time = 0
|
||||
zoom_distance = 0
|
||||
|
||||
average_velocity = np.zeros((4,))
|
||||
predicted_box = obj.obj_data["box"]
|
||||
@@ -1171,7 +1172,20 @@ class PtzAutoTracker:
|
||||
zoom_predicted_movement_time = 0
|
||||
|
||||
if np.any(average_velocity):
|
||||
zoom_predicted_movement_time = abs(zoom) * self.zoom_time[camera]
|
||||
# Calculate the intended change in zoom level
|
||||
zoom_change = (1 - abs(zoom)) * (1 if zoom >= 0 else -1)
|
||||
|
||||
# Calculate new zoom level and clamp to [0, 1]
|
||||
new_zoom = max(
|
||||
0, min(1, self.ptz_metrics[camera].zoom_level.value + zoom_change)
|
||||
)
|
||||
|
||||
# Calculate the actual zoom distance
|
||||
zoom_distance = abs(
|
||||
new_zoom - self.ptz_metrics[camera].zoom_level.value
|
||||
)
|
||||
|
||||
zoom_predicted_movement_time = zoom_distance * self.zoom_time[camera]
|
||||
|
||||
zoom_predicted_box = (
|
||||
predicted_box
|
||||
@@ -1188,7 +1202,7 @@ class PtzAutoTracker:
|
||||
tilt = (0.5 - (centroid_y / camera_height)) * 2
|
||||
|
||||
logger.debug(
|
||||
f"{camera}: Zoom amount: {zoom}, zoom predicted time: {zoom_predicted_movement_time}, zoom predicted box: {tuple(zoom_predicted_box)}"
|
||||
f"{camera}: Zoom amount: {zoom}, zoom distance: {zoom_distance}, zoom predicted time: {zoom_predicted_movement_time}, zoom predicted box: {tuple(zoom_predicted_box)}"
|
||||
)
|
||||
|
||||
self._enqueue_move(camera, obj.obj_data["frame_time"], pan, tilt, zoom)
|
||||
|
||||
@@ -39,7 +39,7 @@ class TestConfig(unittest.TestCase):
|
||||
"description": "Fine tuned model",
|
||||
"trainDate": "2023-04-28T23:22:01.262Z",
|
||||
"type": "ssd",
|
||||
"supportedDetectors": ["edgetpu"],
|
||||
"supportedDetectors": ["cpu", "edgetpu"],
|
||||
"width": 320,
|
||||
"height": 320,
|
||||
"inputShape": "nhwc",
|
||||
|
||||
@@ -249,7 +249,7 @@ class TrackedObjectProcessor(threading.Thread):
|
||||
|
||||
def should_mqtt_snapshot(self, camera, obj: TrackedObject):
|
||||
# object never changed position
|
||||
if obj.obj_data["position_changes"] == 0:
|
||||
if obj.is_stationary():
|
||||
return False
|
||||
|
||||
# if there are required zones and there is no overlap
|
||||
|
||||
@@ -18,6 +18,7 @@ from frigate.config import (
|
||||
)
|
||||
from frigate.const import CLIPS_DIR, THUMB_DIR
|
||||
from frigate.review.types import SeverityEnum
|
||||
from frigate.util.builtin import sanitize_float
|
||||
from frigate.util.image import (
|
||||
area,
|
||||
calculate_region,
|
||||
@@ -202,6 +203,11 @@ class TrackedObject:
|
||||
)
|
||||
)
|
||||
|
||||
# users can configure speed zones incorrectly, so sanitize speed_magnitude
|
||||
# and velocity_angle in case the values come back as inf or NaN
|
||||
speed_magnitude = sanitize_float(speed_magnitude)
|
||||
self.velocity_angle = sanitize_float(self.velocity_angle)
|
||||
|
||||
if self.ui_config.unit_system == "metric":
|
||||
self.current_estimated_speed = (
|
||||
speed_magnitude * 3.6
|
||||
@@ -384,16 +390,16 @@ class TrackedObject:
|
||||
|
||||
return event
|
||||
|
||||
def is_active(self):
|
||||
def is_active(self) -> bool:
|
||||
return not self.is_stationary()
|
||||
|
||||
def is_stationary(self):
|
||||
def is_stationary(self) -> bool:
|
||||
return (
|
||||
self.obj_data["motionless_count"]
|
||||
> self.camera_config.detect.stationary.threshold
|
||||
)
|
||||
|
||||
def get_thumbnail(self, ext: str):
|
||||
def get_thumbnail(self, ext: str) -> bytes | None:
|
||||
img_bytes = self.get_img_bytes(
|
||||
ext, timestamp=False, bounding_box=False, crop=True, height=175
|
||||
)
|
||||
@@ -404,7 +410,7 @@ class TrackedObject:
|
||||
_, img = cv2.imencode(f".{ext}", np.zeros((175, 175, 3), np.uint8))
|
||||
return img.tobytes()
|
||||
|
||||
def get_clean_png(self):
|
||||
def get_clean_png(self) -> bytes | None:
|
||||
if self.thumbnail_data is None:
|
||||
return None
|
||||
|
||||
@@ -433,7 +439,7 @@ class TrackedObject:
|
||||
crop=False,
|
||||
height: int | None = None,
|
||||
quality: int | None = None,
|
||||
):
|
||||
) -> bytes | None:
|
||||
if self.thumbnail_data is None:
|
||||
return None
|
||||
|
||||
@@ -474,6 +480,7 @@ class TrackedObject:
|
||||
# draw any attributes
|
||||
for attribute in self.thumbnail_data["attributes"]:
|
||||
box = attribute["box"]
|
||||
box_area = int((box[2] - box[0]) * (box[3] - box[1]))
|
||||
draw_box_with_label(
|
||||
best_frame,
|
||||
box[0],
|
||||
@@ -481,7 +488,7 @@ class TrackedObject:
|
||||
box[2],
|
||||
box[3],
|
||||
attribute["label"],
|
||||
f"{attribute['score']:.0%}",
|
||||
f"{attribute['score']:.0%} {str(box_area)}",
|
||||
thickness=thickness,
|
||||
color=color,
|
||||
)
|
||||
@@ -649,8 +656,9 @@ class TrackedObjectAttribute:
|
||||
best_object_id = obj["id"]
|
||||
best_object_label = obj["label"]
|
||||
else:
|
||||
if best_object_label == "car" and obj["label"] == "car":
|
||||
# if multiple cars are overlapping with the same label then the label will not be assigned
|
||||
if best_object_label == obj["label"]:
|
||||
# if multiple objects of the same type are overlapping
|
||||
# then the attribute will not be assigned
|
||||
return None
|
||||
elif object_area < best_object_area:
|
||||
# if a car and person are overlapping then assign the label to the smaller object (which should be the person)
|
||||
|
||||
@@ -4,6 +4,7 @@ import ast
|
||||
import copy
|
||||
import datetime
|
||||
import logging
|
||||
import math
|
||||
import multiprocessing as mp
|
||||
import queue
|
||||
import re
|
||||
@@ -399,3 +400,10 @@ def serialize(
|
||||
def deserialize(bytes_data: bytes) -> list[float]:
|
||||
"""Deserializes a compact "raw bytes" format into a list of floats"""
|
||||
return list(struct.unpack("%sf" % (len(bytes_data) // 4), bytes_data))
|
||||
|
||||
|
||||
def sanitize_float(value):
|
||||
"""Replace NaN or inf with 0.0."""
|
||||
if isinstance(value, (int, float)) and not math.isfinite(value):
|
||||
return 0.0
|
||||
return value
|
||||
|
||||
@@ -304,7 +304,7 @@ def get_intel_gpu_stats(sriov: bool) -> Optional[dict[str, str]]:
|
||||
]
|
||||
|
||||
if sriov:
|
||||
intel_gpu_top_command += ["-d", "drm:/dev/dri/card0"]
|
||||
intel_gpu_top_command += ["-d", "sriov"]
|
||||
|
||||
p = sp.run(
|
||||
intel_gpu_top_command,
|
||||
|
||||
@@ -0,0 +1,10 @@
|
||||
# Notebooks
|
||||
|
||||
## YOLO-NAS Pretrained
|
||||
|
||||
You can build and download a compatible model with pre-trained weights using [Google Colab](https://colab.research.google.com/github/blakeblackshear/frigate/blob/dev/notebooks/YOLO_NAS_Pretrained_Export.ipynb).
|
||||
|
||||
> [!WARNING]
|
||||
> The pre-trained YOLO-NAS weights from DeciAI are subject to their license and can't be used commercially. For more information, see: https://docs.deci.ai/super-gradients/latest/LICENSE.YOLONAS.html
|
||||
|
||||
The input image size in this notebook is set to 320x320. This results in lower CPU usage and faster inference times without impacting performance in most cases due to the way Frigate crops video frames to areas of interest before running detection. The notebook and config can be updated to 640x640 if desired. By default, YOLO_NAS_S is built with YOLO_NAS_M and YOLO_NAS_L sizes also being available for export.
|
||||
Generated
+201
-11
@@ -25,7 +25,7 @@
|
||||
"@radix-ui/react-select": "^2.1.6",
|
||||
"@radix-ui/react-separator": "^1.1.2",
|
||||
"@radix-ui/react-slider": "^1.2.3",
|
||||
"@radix-ui/react-slot": "^1.1.2",
|
||||
"@radix-ui/react-slot": "^1.2.2",
|
||||
"@radix-ui/react-switch": "^1.1.3",
|
||||
"@radix-ui/react-tabs": "^1.1.3",
|
||||
"@radix-ui/react-toggle": "^1.1.2",
|
||||
@@ -54,7 +54,7 @@
|
||||
"nosleep.js": "^0.12.0",
|
||||
"react": "^18.3.1",
|
||||
"react-apexcharts": "^1.4.1",
|
||||
"react-day-picker": "^8.10.1",
|
||||
"react-day-picker": "^9.7.0",
|
||||
"react-device-detect": "^2.2.3",
|
||||
"react-dom": "^18.3.1",
|
||||
"react-dropzone": "^14.3.8",
|
||||
@@ -268,6 +268,12 @@
|
||||
"integrity": "sha512-U9DBDe5fxHmbwQww9rFxMLNI2Wlg7DhPzI7AVFpq8GehiUP7+NwuMPXpP4zAd52sgkxtOqOeMjgE5g0ZLnQZ0w==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/@date-fns/tz": {
|
||||
"version": "1.2.0",
|
||||
"resolved": "https://registry.npmjs.org/@date-fns/tz/-/tz-1.2.0.tgz",
|
||||
"integrity": "sha512-LBrd7MiJZ9McsOgxqWX7AaxrDjcFVjWH/tIKJd7pnR7McaslGYOP1QmmiBXdJH/H/yLCT+rcQ7FaPBUxRGUtrg==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/@esbuild/aix-ppc64": {
|
||||
"version": "0.25.0",
|
||||
"resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.0.tgz",
|
||||
@@ -1244,6 +1250,24 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"node_modules/@radix-ui/react-alert-dialog/node_modules/@radix-ui/react-slot": {
|
||||
"version": "1.1.2",
|
||||
"resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.1.2.tgz",
|
||||
"integrity": "sha512-YAKxaiGsSQJ38VzKH86/BPRC4rh+b1Jpa+JneA5LRE7skmLPNAyeG8kPJj/oo4STLvlrs8vkf/iYyc3A5stYCQ==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@radix-ui/react-compose-refs": "1.1.1"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"@types/react": "*",
|
||||
"react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
|
||||
},
|
||||
"peerDependenciesMeta": {
|
||||
"@types/react": {
|
||||
"optional": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"node_modules/@radix-ui/react-arrow": {
|
||||
"version": "1.1.2",
|
||||
"resolved": "https://registry.npmjs.org/@radix-ui/react-arrow/-/react-arrow-1.1.2.tgz",
|
||||
@@ -1346,6 +1370,24 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"node_modules/@radix-ui/react-collection/node_modules/@radix-ui/react-slot": {
|
||||
"version": "1.1.2",
|
||||
"resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.1.2.tgz",
|
||||
"integrity": "sha512-YAKxaiGsSQJ38VzKH86/BPRC4rh+b1Jpa+JneA5LRE7skmLPNAyeG8kPJj/oo4STLvlrs8vkf/iYyc3A5stYCQ==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@radix-ui/react-compose-refs": "1.1.1"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"@types/react": "*",
|
||||
"react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
|
||||
},
|
||||
"peerDependenciesMeta": {
|
||||
"@types/react": {
|
||||
"optional": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"node_modules/@radix-ui/react-compose-refs": {
|
||||
"version": "1.1.1",
|
||||
"resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.1.tgz",
|
||||
@@ -1440,6 +1482,24 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"node_modules/@radix-ui/react-dialog/node_modules/@radix-ui/react-slot": {
|
||||
"version": "1.1.2",
|
||||
"resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.1.2.tgz",
|
||||
"integrity": "sha512-YAKxaiGsSQJ38VzKH86/BPRC4rh+b1Jpa+JneA5LRE7skmLPNAyeG8kPJj/oo4STLvlrs8vkf/iYyc3A5stYCQ==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@radix-ui/react-compose-refs": "1.1.1"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"@types/react": "*",
|
||||
"react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
|
||||
},
|
||||
"peerDependenciesMeta": {
|
||||
"@types/react": {
|
||||
"optional": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"node_modules/@radix-ui/react-direction": {
|
||||
"version": "1.1.0",
|
||||
"resolved": "https://registry.npmjs.org/@radix-ui/react-direction/-/react-direction-1.1.0.tgz",
|
||||
@@ -1663,6 +1723,24 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"node_modules/@radix-ui/react-menu/node_modules/@radix-ui/react-slot": {
|
||||
"version": "1.1.2",
|
||||
"resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.1.2.tgz",
|
||||
"integrity": "sha512-YAKxaiGsSQJ38VzKH86/BPRC4rh+b1Jpa+JneA5LRE7skmLPNAyeG8kPJj/oo4STLvlrs8vkf/iYyc3A5stYCQ==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@radix-ui/react-compose-refs": "1.1.1"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"@types/react": "*",
|
||||
"react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
|
||||
},
|
||||
"peerDependenciesMeta": {
|
||||
"@types/react": {
|
||||
"optional": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"node_modules/@radix-ui/react-popover": {
|
||||
"version": "1.1.6",
|
||||
"resolved": "https://registry.npmjs.org/@radix-ui/react-popover/-/react-popover-1.1.6.tgz",
|
||||
@@ -1700,6 +1778,24 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"node_modules/@radix-ui/react-popover/node_modules/@radix-ui/react-slot": {
|
||||
"version": "1.1.2",
|
||||
"resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.1.2.tgz",
|
||||
"integrity": "sha512-YAKxaiGsSQJ38VzKH86/BPRC4rh+b1Jpa+JneA5LRE7skmLPNAyeG8kPJj/oo4STLvlrs8vkf/iYyc3A5stYCQ==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@radix-ui/react-compose-refs": "1.1.1"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"@types/react": "*",
|
||||
"react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
|
||||
},
|
||||
"peerDependenciesMeta": {
|
||||
"@types/react": {
|
||||
"optional": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"node_modules/@radix-ui/react-popper": {
|
||||
"version": "1.2.2",
|
||||
"resolved": "https://registry.npmjs.org/@radix-ui/react-popper/-/react-popper-1.2.2.tgz",
|
||||
@@ -1803,6 +1899,24 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"node_modules/@radix-ui/react-primitive/node_modules/@radix-ui/react-slot": {
|
||||
"version": "1.1.2",
|
||||
"resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.1.2.tgz",
|
||||
"integrity": "sha512-YAKxaiGsSQJ38VzKH86/BPRC4rh+b1Jpa+JneA5LRE7skmLPNAyeG8kPJj/oo4STLvlrs8vkf/iYyc3A5stYCQ==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@radix-ui/react-compose-refs": "1.1.1"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"@types/react": "*",
|
||||
"react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
|
||||
},
|
||||
"peerDependenciesMeta": {
|
||||
"@types/react": {
|
||||
"optional": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"node_modules/@radix-ui/react-radio-group": {
|
||||
"version": "1.2.3",
|
||||
"resolved": "https://registry.npmjs.org/@radix-ui/react-radio-group/-/react-radio-group-1.2.3.tgz",
|
||||
@@ -1940,6 +2054,24 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"node_modules/@radix-ui/react-select/node_modules/@radix-ui/react-slot": {
|
||||
"version": "1.1.2",
|
||||
"resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.1.2.tgz",
|
||||
"integrity": "sha512-YAKxaiGsSQJ38VzKH86/BPRC4rh+b1Jpa+JneA5LRE7skmLPNAyeG8kPJj/oo4STLvlrs8vkf/iYyc3A5stYCQ==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@radix-ui/react-compose-refs": "1.1.1"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"@types/react": "*",
|
||||
"react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
|
||||
},
|
||||
"peerDependenciesMeta": {
|
||||
"@types/react": {
|
||||
"optional": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"node_modules/@radix-ui/react-separator": {
|
||||
"version": "1.1.2",
|
||||
"resolved": "https://registry.npmjs.org/@radix-ui/react-separator/-/react-separator-1.1.2.tgz",
|
||||
@@ -1997,12 +2129,12 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@radix-ui/react-slot": {
|
||||
"version": "1.1.2",
|
||||
"resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.1.2.tgz",
|
||||
"integrity": "sha512-YAKxaiGsSQJ38VzKH86/BPRC4rh+b1Jpa+JneA5LRE7skmLPNAyeG8kPJj/oo4STLvlrs8vkf/iYyc3A5stYCQ==",
|
||||
"version": "1.2.2",
|
||||
"resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.2.tgz",
|
||||
"integrity": "sha512-y7TBO4xN4Y94FvcWIOIh18fM4R1A8S4q1jhoz4PNzOoHsFcN8pogcFmZrTYAm4F9VRUrWP/Mw7xSKybIeRI+CQ==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@radix-ui/react-compose-refs": "1.1.1"
|
||||
"@radix-ui/react-compose-refs": "1.1.2"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"@types/react": "*",
|
||||
@@ -2014,6 +2146,21 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"node_modules/@radix-ui/react-slot/node_modules/@radix-ui/react-compose-refs": {
|
||||
"version": "1.1.2",
|
||||
"resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.2.tgz",
|
||||
"integrity": "sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==",
|
||||
"license": "MIT",
|
||||
"peerDependencies": {
|
||||
"@types/react": "*",
|
||||
"react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
|
||||
},
|
||||
"peerDependenciesMeta": {
|
||||
"@types/react": {
|
||||
"optional": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"node_modules/@radix-ui/react-switch": {
|
||||
"version": "1.1.3",
|
||||
"resolved": "https://registry.npmjs.org/@radix-ui/react-switch/-/react-switch-1.1.3.tgz",
|
||||
@@ -2161,6 +2308,24 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"node_modules/@radix-ui/react-tooltip/node_modules/@radix-ui/react-slot": {
|
||||
"version": "1.1.2",
|
||||
"resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.1.2.tgz",
|
||||
"integrity": "sha512-YAKxaiGsSQJ38VzKH86/BPRC4rh+b1Jpa+JneA5LRE7skmLPNAyeG8kPJj/oo4STLvlrs8vkf/iYyc3A5stYCQ==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@radix-ui/react-compose-refs": "1.1.1"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"@types/react": "*",
|
||||
"react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
|
||||
},
|
||||
"peerDependenciesMeta": {
|
||||
"@types/react": {
|
||||
"optional": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"node_modules/@radix-ui/react-use-callback-ref": {
|
||||
"version": "1.1.0",
|
||||
"resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.1.0.tgz",
|
||||
@@ -4395,11 +4560,18 @@
|
||||
"version": "3.6.0",
|
||||
"resolved": "https://registry.npmjs.org/date-fns/-/date-fns-3.6.0.tgz",
|
||||
"integrity": "sha512-fRHTG8g/Gif+kSh50gaGEdToemgfj74aRX3swtiouboip5JDLAyDE9F11nHMIcvOaXeOC6D7SpNhi7uFyB7Uww==",
|
||||
"license": "MIT",
|
||||
"funding": {
|
||||
"type": "github",
|
||||
"url": "https://github.com/sponsors/kossnocorp"
|
||||
}
|
||||
},
|
||||
"node_modules/date-fns-jalali": {
|
||||
"version": "4.1.0-0",
|
||||
"resolved": "https://registry.npmjs.org/date-fns-jalali/-/date-fns-jalali-4.1.0-0.tgz",
|
||||
"integrity": "sha512-hTIP/z+t+qKwBDcmmsnmjWTduxCg+5KfdqWQvb2X/8C9+knYY6epN/pfxdDuyVlSVeFz0sM5eEfwIUQ70U4ckg==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/date-fns-tz": {
|
||||
"version": "3.2.0",
|
||||
"resolved": "https://registry.npmjs.org/date-fns-tz/-/date-fns-tz-3.2.0.tgz",
|
||||
@@ -7196,16 +7368,34 @@
|
||||
}
|
||||
},
|
||||
"node_modules/react-day-picker": {
|
||||
"version": "8.10.1",
|
||||
"resolved": "https://registry.npmjs.org/react-day-picker/-/react-day-picker-8.10.1.tgz",
|
||||
"integrity": "sha512-TMx7fNbhLk15eqcMt+7Z7S2KF7mfTId/XJDjKE8f+IUcFn0l08/kI4FiYTL/0yuOLmEcbR4Fwe3GJf/NiiMnPA==",
|
||||
"version": "9.7.0",
|
||||
"resolved": "https://registry.npmjs.org/react-day-picker/-/react-day-picker-9.7.0.tgz",
|
||||
"integrity": "sha512-urlK4C9XJZVpQ81tmVgd2O7lZ0VQldZeHzNejbwLWZSkzHH498KnArT0EHNfKBOWwKc935iMLGZdxXPRISzUxQ==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@date-fns/tz": "1.2.0",
|
||||
"date-fns": "4.1.0",
|
||||
"date-fns-jalali": "4.1.0-0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=18"
|
||||
},
|
||||
"funding": {
|
||||
"type": "individual",
|
||||
"url": "https://github.com/sponsors/gpbl"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"date-fns": "^2.28.0 || ^3.0.0",
|
||||
"react": "^16.8.0 || ^17.0.0 || ^18.0.0"
|
||||
"react": ">=16.8.0"
|
||||
}
|
||||
},
|
||||
"node_modules/react-day-picker/node_modules/date-fns": {
|
||||
"version": "4.1.0",
|
||||
"resolved": "https://registry.npmjs.org/date-fns/-/date-fns-4.1.0.tgz",
|
||||
"integrity": "sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg==",
|
||||
"license": "MIT",
|
||||
"funding": {
|
||||
"type": "github",
|
||||
"url": "https://github.com/sponsors/kossnocorp"
|
||||
}
|
||||
},
|
||||
"node_modules/react-device-detect": {
|
||||
|
||||
+2
-2
@@ -31,7 +31,7 @@
|
||||
"@radix-ui/react-select": "^2.1.6",
|
||||
"@radix-ui/react-separator": "^1.1.2",
|
||||
"@radix-ui/react-slider": "^1.2.3",
|
||||
"@radix-ui/react-slot": "^1.1.2",
|
||||
"@radix-ui/react-slot": "^1.2.2",
|
||||
"@radix-ui/react-switch": "^1.1.3",
|
||||
"@radix-ui/react-tabs": "^1.1.3",
|
||||
"@radix-ui/react-toggle": "^1.1.2",
|
||||
@@ -60,7 +60,7 @@
|
||||
"nosleep.js": "^0.12.0",
|
||||
"react": "^18.3.1",
|
||||
"react-apexcharts": "^1.4.1",
|
||||
"react-day-picker": "^8.10.1",
|
||||
"react-day-picker": "^9.7.0",
|
||||
"react-device-detect": "^2.2.3",
|
||||
"react-dom": "^18.3.1",
|
||||
"react-dropzone": "^14.3.8",
|
||||
|
||||
@@ -3,25 +3,25 @@
|
||||
"snort": "نَفْخَة",
|
||||
"heartbeat": "نَبْض القَلْب",
|
||||
"pets": "حَيَوَانَات أَلِيفَة",
|
||||
"whoop": "هُتَاف",
|
||||
"whoop": "هتاف",
|
||||
"humming": "هَمْهَمَة",
|
||||
"chewing": "مَضْغ",
|
||||
"yodeling": "تَزَلْغُط",
|
||||
"yodeling": "غناء متقلب",
|
||||
"howl": "عُوَاء",
|
||||
"speech": "كَلَام",
|
||||
"speech": "كلام",
|
||||
"hiccup": "فُوَاق",
|
||||
"dog": "كَلْب",
|
||||
"yip": "نُبَيْحَة",
|
||||
"babbling": "ثَرْثَرَة",
|
||||
"yell": "صُرَاخ",
|
||||
"bellow": "خُوَار",
|
||||
"whispering": "هَمْس",
|
||||
"laughter": "ضَحِك",
|
||||
"snicker": "تَضَاحُك",
|
||||
"crying": "بُكَاء",
|
||||
"sigh": "تَنَهُّد",
|
||||
"singing": "غِنَاء",
|
||||
"choir": "جَوْقَة",
|
||||
"babbling": "ثرثرة",
|
||||
"yell": "صراخ",
|
||||
"bellow": "زمجرة",
|
||||
"whispering": "همس",
|
||||
"laughter": "ضحك",
|
||||
"snicker": "ضحكة خفيفه",
|
||||
"crying": "بكاء",
|
||||
"sigh": "تنهد",
|
||||
"singing": "غناء",
|
||||
"choir": "فرقة غناء",
|
||||
"chant": "تَرْنِيم",
|
||||
"mantra": "تَرْنِيمَة",
|
||||
"child_singing": "غِنَاء طِفْل",
|
||||
|
||||
@@ -1 +1,336 @@
|
||||
{}
|
||||
{
|
||||
"speech": "Parla",
|
||||
"babbling": "Balbuceig",
|
||||
"yell": "Crit",
|
||||
"whispering": "Xiuxiuejant",
|
||||
"laughter": "Riure",
|
||||
"snicker": "Rialleta",
|
||||
"crying": "Plor",
|
||||
"bellow": "Bram",
|
||||
"sigh": "Suspir",
|
||||
"singing": "Cant",
|
||||
"choir": "Cor",
|
||||
"yodeling": "Cant Tirolès",
|
||||
"chant": "Càntic",
|
||||
"mantra": "Mantra",
|
||||
"child_singing": "Cant Infantil",
|
||||
"synthetic_singing": "Cant Sintètic",
|
||||
"rapping": "Rap",
|
||||
"humming": "Taral·leig",
|
||||
"groan": "Gemec",
|
||||
"grunt": "Grunyo",
|
||||
"whistling": "Xiulet",
|
||||
"wheeze": "Sibilància",
|
||||
"snoring": "Ronc",
|
||||
"gasp": "Jadeig",
|
||||
"cat": "Gat",
|
||||
"dog": "Gos",
|
||||
"animal": "Animal",
|
||||
"bark": "Escorça",
|
||||
"horse": "Cavall",
|
||||
"sheep": "Ovella",
|
||||
"goat": "Cabra",
|
||||
"bird": "Ocell",
|
||||
"mouse": "Ratolí",
|
||||
"keyboard": "Teclat",
|
||||
"vehicle": "Vehicle",
|
||||
"boat": "Vaixell",
|
||||
"car": "Cotxe",
|
||||
"motorcycle": "Motocicleta",
|
||||
"bus": "Autobús",
|
||||
"bicycle": "Bicicleta",
|
||||
"train": "Tren",
|
||||
"skateboard": "Monopatí",
|
||||
"door": "Porta",
|
||||
"hair_dryer": "Assecador de cabell",
|
||||
"sink": "Aigüera",
|
||||
"blender": "Batedora",
|
||||
"toothbrush": "Raspall de dents",
|
||||
"scissors": "Tisores",
|
||||
"clock": "Rellotge",
|
||||
"breathing": "Respiració",
|
||||
"fart": "Pet",
|
||||
"stomach_rumble": "Barbolló d'estómac",
|
||||
"hands": "Mans",
|
||||
"burping": "Eructe",
|
||||
"hiccup": "Singlot",
|
||||
"whoop": "Crit d'alegria",
|
||||
"pant": "Esbufec",
|
||||
"snort": "Esbufec nasal",
|
||||
"cough": "Tos",
|
||||
"throat_clearing": "Carraspeig",
|
||||
"sneeze": "Esternut",
|
||||
"sniff": "Fregit nasal",
|
||||
"run": "Córrer",
|
||||
"shuffle": "Passos arrossegats",
|
||||
"footsteps": "Passos",
|
||||
"chewing": "Masticació",
|
||||
"biting": "Mossegada",
|
||||
"gargling": "Gàrgares",
|
||||
"finger_snapping": "Claqueig de dits",
|
||||
"heartbeat": "Batec del cor",
|
||||
"heart_murmur": "Sospit cardíac",
|
||||
"cheering": "Ovacions",
|
||||
"applause": "Aplaudiments",
|
||||
"clapping": "Cop de mans",
|
||||
"chatter": "Xerrameca",
|
||||
"crowd": "Multitud",
|
||||
"children_playing": "Nens jugant",
|
||||
"pets": "Animals de companyia",
|
||||
"camera": "Càmera",
|
||||
"wild_animals": "Animals salvatges",
|
||||
"heavy_engine": "Motor pesat",
|
||||
"wedding_music": "Música de casament",
|
||||
"yip": "Crit agut",
|
||||
"howl": "Udol",
|
||||
"bow_wow": "Lladruc",
|
||||
"growling": "Grunyit",
|
||||
"whimper_dog": "Gemec de gos",
|
||||
"purr": "Ronroneig",
|
||||
"meow": "Miol",
|
||||
"hiss": "Siseig",
|
||||
"caterwaul": "Udol estrident",
|
||||
"livestock": "Bestiar",
|
||||
"clip_clop": "Clip-clop",
|
||||
"neigh": "Relinxo",
|
||||
"cattle": "Bestiar boví",
|
||||
"moo": "Mugir",
|
||||
"cowbell": "Esquellot",
|
||||
"pig": "Porc",
|
||||
"oink": "Oink",
|
||||
"bleat": "Brama",
|
||||
"fowl": "Au de corral",
|
||||
"chicken": "Pollastre",
|
||||
"cluck": "Cloqueig",
|
||||
"cock_a_doodle_doo": "Quiquiriquí",
|
||||
"turkey": "Gall dindi",
|
||||
"gobble": "Gorgoriteig",
|
||||
"duck": "Ànec",
|
||||
"quack": "Quac",
|
||||
"goose": "Oca",
|
||||
"honk": "Cluc-cluc",
|
||||
"roaring_cats": "Gats que rugen",
|
||||
"roar": "Rugit",
|
||||
"chirp": "Piulet",
|
||||
"squawk": "Xerric",
|
||||
"pigeon": "Colom",
|
||||
"coo": "Arruix",
|
||||
"crow": "Corb",
|
||||
"caw": "Cric",
|
||||
"owl": "Mussol",
|
||||
"hoot": "Ulul",
|
||||
"flapping_wings": "Batuda d’ales",
|
||||
"dogs": "Gossos",
|
||||
"rats": "Rates",
|
||||
"patter": "Repic",
|
||||
"insect": "Insecte",
|
||||
"cricket": "Grill",
|
||||
"mosquito": "Mosquit",
|
||||
"fly": "Mosca",
|
||||
"buzz": "Brunzit",
|
||||
"frog": "Granota",
|
||||
"croak": "Grall",
|
||||
"snake": "Serp",
|
||||
"rattle": "Cascavell",
|
||||
"whale_vocalization": "Vocalització de balena",
|
||||
"music": "Música",
|
||||
"musical_instrument": "Instrument musical",
|
||||
"plucked_string_instrument": "Instrument de corda pinçada",
|
||||
"guitar": "Guitarra",
|
||||
"electric_guitar": "Guitarra elèctrica",
|
||||
"bass_guitar": "Baix",
|
||||
"acoustic_guitar": "Guitarra acústica",
|
||||
"steel_guitar": "Guitarra steel",
|
||||
"tapping": "Tapping",
|
||||
"strum": "Rasgueig",
|
||||
"banjo": "Banjo",
|
||||
"sitar": "Sitar",
|
||||
"mandolin": "Mandolina",
|
||||
"zither": "Cítara",
|
||||
"ukulele": "Ukulele",
|
||||
"piano": "Piano",
|
||||
"electric_piano": "Piano elèctric",
|
||||
"organ": "Orgue",
|
||||
"electronic_organ": "Orgue electrònic",
|
||||
"hammond_organ": "Orgue Hammond",
|
||||
"synthesizer": "Sintetitzador",
|
||||
"sampler": "Sampler",
|
||||
"harpsichord": "Clavicèmbal",
|
||||
"percussion": "Percussió",
|
||||
"drum_kit": "Bateria",
|
||||
"drum_machine": "Caixa de ritmes",
|
||||
"drum": "Tambor",
|
||||
"snare_drum": "Caixa",
|
||||
"rimshot": "Rimshot",
|
||||
"drum_roll": "Rul·lat de tambor",
|
||||
"bass_drum": "Bombo",
|
||||
"timpani": "Timpani",
|
||||
"tabla": "Tabla",
|
||||
"cymbal": "Plat",
|
||||
"hi_hat": "Charles",
|
||||
"wood_block": "Bloc de fusta",
|
||||
"tambourine": "Pandereta",
|
||||
"maraca": "Maraca",
|
||||
"gong": "Gong",
|
||||
"tubular_bells": "Campanes tubulars",
|
||||
"mallet_percussion": "Percussió amb baquetes",
|
||||
"marimba": "Marimba",
|
||||
"glockenspiel": "Carilló",
|
||||
"vibraphone": "Vibràfon",
|
||||
"steelpan": "Steelpan",
|
||||
"orchestra": "Orquestra",
|
||||
"brass_instrument": "Instrument de metall",
|
||||
"french_horn": "Corn francès",
|
||||
"trumpet": "Trompeta",
|
||||
"trombone": "Trombó",
|
||||
"bowed_string_instrument": "Instrument de corda fregada",
|
||||
"string_section": "Secció de corda",
|
||||
"violin": "Violí",
|
||||
"pizzicato": "Pizzicato",
|
||||
"cello": "Violoncel",
|
||||
"double_bass": "Contrabaix",
|
||||
"wind_instrument": "Instrument de vent",
|
||||
"flute": "Flauta",
|
||||
"saxophone": "Saxòfon",
|
||||
"clarinet": "Clarinet",
|
||||
"harp": "Arpa",
|
||||
"bell": "Campana",
|
||||
"church_bell": "Campana d'església",
|
||||
"jingle_bell": "Campaneta",
|
||||
"bicycle_bell": "Timbre de bicicleta",
|
||||
"tuning_fork": "Diapasó",
|
||||
"chime": "Timbre",
|
||||
"wind_chime": "Campanes de vent",
|
||||
"harmonica": "Harmònica",
|
||||
"accordion": "Acordió",
|
||||
"bagpipes": "Gaites",
|
||||
"didgeridoo": "Didgeridoo",
|
||||
"theremin": "Theremin",
|
||||
"singing_bowl": "Bol tibetà",
|
||||
"scratching": "Esgarrapar",
|
||||
"pop_music": "Música pop",
|
||||
"hip_hop_music": "Música Hip-Hop",
|
||||
"beatboxing": "Beatboxing",
|
||||
"rock_music": "Música rock",
|
||||
"heavy_metal": "Heavy Metal",
|
||||
"punk_rock": "Punk Rock",
|
||||
"grunge": "Grunge",
|
||||
"progressive_rock": "Rock progressiu",
|
||||
"rock_and_roll": "Rock and Roll",
|
||||
"psychedelic_rock": "Rock psicodèlic",
|
||||
"rhythm_and_blues": "Rhythm and blues",
|
||||
"soul_music": "Música soul",
|
||||
"reggae": "Reggae",
|
||||
"country": "Country",
|
||||
"swing_music": "Música swing",
|
||||
"bluegrass": "Bluegrass",
|
||||
"funk": "Funk",
|
||||
"folk_music": "Música folk",
|
||||
"middle_eastern_music": "Música d'Orient Mitjà",
|
||||
"jazz": "Jazz",
|
||||
"disco": "Disco",
|
||||
"classical_music": "Música clàssica",
|
||||
"opera": "Òpera",
|
||||
"electronic_music": "Música electrònica",
|
||||
"house_music": "Música house",
|
||||
"techno": "Techno",
|
||||
"dubstep": "Dubstep",
|
||||
"drum_and_bass": "Drum and Bass",
|
||||
"electronica": "Electrònica",
|
||||
"electronic_dance_music": "Música electrònica de ball",
|
||||
"ambient_music": "Música ambient",
|
||||
"trance_music": "Música trance",
|
||||
"music_of_latin_america": "Música d'Amèrica Llatina",
|
||||
"salsa_music": "Música salsa",
|
||||
"flamenco": "Flamenc",
|
||||
"blues": "Blues",
|
||||
"music_for_children": "Música per a nens",
|
||||
"new-age_music": "Música new age",
|
||||
"vocal_music": "Música vocal",
|
||||
"a_capella": "A capella",
|
||||
"music_of_africa": "Música d'Àfrica",
|
||||
"afrobeat": "Afrobeat",
|
||||
"christian_music": "Música cristiana",
|
||||
"gospel_music": "Música gospel",
|
||||
"music_of_asia": "Música d'Àsia",
|
||||
"carnatic_music": "Música carnàtica",
|
||||
"music_of_bollywood": "Música de bollywood",
|
||||
"ska": "Ska",
|
||||
"traditional_music": "Música tradicional",
|
||||
"independent_music": "Música independent",
|
||||
"song": "Cançó",
|
||||
"background_music": "Música de fons",
|
||||
"theme_music": "Música temàtica",
|
||||
"jingle": "Jingle",
|
||||
"soundtrack_music": "Música de banda sonora",
|
||||
"lullaby": "Lullaby",
|
||||
"video_game_music": "Música de videojocs",
|
||||
"christmas_music": "Música nadalenca",
|
||||
"dance_music": "Música dance",
|
||||
"happy_music": "Música alegre",
|
||||
"sad_music": "Música trista",
|
||||
"tender_music": "Música tendra",
|
||||
"exciting_music": "Música emocionant",
|
||||
"angry_music": "Música enfadada",
|
||||
"scary_music": "Música de por",
|
||||
"wind": "Vent",
|
||||
"wind_noise": "Soroll del vent",
|
||||
"thunderstorm": "Tempesta",
|
||||
"thunder": "Tro",
|
||||
"water": "Aigua",
|
||||
"rain": "Pluja",
|
||||
"raindrop": "Gota de pluja",
|
||||
"rain_on_surface": "Pluja en superfície",
|
||||
"stream": "Rierol",
|
||||
"waterfall": "Cascada",
|
||||
"ocean": "Oceà",
|
||||
"waves": "Ones",
|
||||
"steam": "Vapor",
|
||||
"fire": "Foc",
|
||||
"sailboat": "Veler",
|
||||
"rowboat": "Barca de rems",
|
||||
"ship": "Vaixell",
|
||||
"motor_vehicle": "Vehicle de motor",
|
||||
"car_alarm": "Alarma del cotxe",
|
||||
"car_passing_by": "Cotxe passant",
|
||||
"race_car": "Cotxe de curses",
|
||||
"truck": "Camió",
|
||||
"air_brake": "Fre d'aire",
|
||||
"air_horn": "Bocina d'aire",
|
||||
"ice_cream_truck": "Camió de gelats",
|
||||
"emergency_vehicle": "Vehicle d'emergència",
|
||||
"police_car": "Cotxe de policia",
|
||||
"ambulance": "Ambulància",
|
||||
"fire_engine": "Camió de bombers",
|
||||
"traffic_noise": "Soroll de trànsit",
|
||||
"rail_transport": "Transport ferroviari",
|
||||
"train_whistle": "Xiulet de tren",
|
||||
"train_horn": "Bocina de tren",
|
||||
"railroad_car": "Vagó de tren",
|
||||
"subway": "Metro",
|
||||
"aircraft": "Aeronau",
|
||||
"aircraft_engine": "Motor d'aeronau",
|
||||
"propeller": "Hèlix",
|
||||
"helicopter": "Helicòpter",
|
||||
"fixed-wing_aircraft": "Aeronau d'Ala Fixa",
|
||||
"engine": "Motor",
|
||||
"light_engine": "Motor lleuger",
|
||||
"dental_drill's_drill": "Trepant dental",
|
||||
"lawn_mower": "Talla-gespa",
|
||||
"chainsaw": "Motoserra",
|
||||
"medium_engine": "Motor mitjà",
|
||||
"engine_starting": "Arranc del motor",
|
||||
"idling": "Ralentí",
|
||||
"accelerating": "Accelerant",
|
||||
"doorbell": "Timbre",
|
||||
"ding-dong": "Ding-dong",
|
||||
"sliding_door": "Porta corredissa",
|
||||
"slam": "Cop de porta",
|
||||
"knock": "Toc",
|
||||
"tap": "Toc suau",
|
||||
"squeak": "Grinyol",
|
||||
"cupboard_open_or_close": "Obertura o tancament d'armari",
|
||||
"drawer_open_or_close": "Obertura o tancament de calaix",
|
||||
"dishes": "Plats",
|
||||
"cutlery": "Coberteria"
|
||||
}
|
||||
|
||||
@@ -1 +1,259 @@
|
||||
{}
|
||||
{
|
||||
"role": {
|
||||
"title": "Rol",
|
||||
"viewer": "Visualitzador",
|
||||
"admin": "Administrador",
|
||||
"desc": "Els administradors tenen accés complet a totes les característiques de la interfície d'usuari de Frigate. Els visualitzadors es limiten a visualitzar càmeres, articles de revisió i imatges històriques a la interfície d'usuari."
|
||||
},
|
||||
"menu": {
|
||||
"language": {
|
||||
"yue": "粵語 (Cantonès)",
|
||||
"zhCN": "简体中文 (Xinès simplificat)",
|
||||
"hi": "हिन्दी (Hindi)",
|
||||
"fr": "Français (Francès)",
|
||||
"ar": "العربية (Àrab)",
|
||||
"de": "Deutsch (Alemany)",
|
||||
"sv": "Svenska (Suec)",
|
||||
"cs": "Čeština (Txec)",
|
||||
"nb": "Norsk Bokmål (Noruec Bokmål)",
|
||||
"ko": "한국어 (Coreà)",
|
||||
"vi": "Tiếng Việt (Vietnamita)",
|
||||
"fa": "فارسی (Persa)",
|
||||
"hu": "Magyar (Hongarès)",
|
||||
"fi": "Suomi (Finlandès)",
|
||||
"en": "English (Anglès)",
|
||||
"pt": "Português (Portuguès)",
|
||||
"ja": "日本語 (Japonès)",
|
||||
"es": "Español (Espanyol)",
|
||||
"withSystem": {
|
||||
"label": "Utilitzeu la configuració del sistema per a l'idioma"
|
||||
},
|
||||
"tr": "Türkçe (Turc)",
|
||||
"it": "Italiano (Italià)",
|
||||
"he": "עברית (Hebreu)",
|
||||
"el": "Ελληνικά (Grec)",
|
||||
"ro": "Română (Romanès)",
|
||||
"nl": "Nederlands (Holandès)",
|
||||
"pl": "Polski (Polonès)",
|
||||
"uk": "Українська (Ucraïnès)",
|
||||
"da": "Dansk (Danès)",
|
||||
"sk": "Slovenčina (Eslovac)",
|
||||
"ru": "Русский (Rus)"
|
||||
},
|
||||
"system": "Sistema",
|
||||
"systemMetrics": "Mètriques del sistema",
|
||||
"configuration": "Configuració",
|
||||
"systemLogs": "Registres del sistema",
|
||||
"configurationEditor": "Editor de configuració",
|
||||
"languages": "Idiomes",
|
||||
"settings": "Opcions",
|
||||
"darkMode": {
|
||||
"light": "Clar",
|
||||
"dark": "Fosc",
|
||||
"withSystem": {
|
||||
"label": "Utilitzeu la configuració del sistema per al mode clar o fosc"
|
||||
},
|
||||
"label": "Mode fosc"
|
||||
},
|
||||
"withSystem": "Sistema",
|
||||
"appearance": "Aspecte",
|
||||
"theme": {
|
||||
"blue": "Blau",
|
||||
"green": "Verd",
|
||||
"nord": "Nord",
|
||||
"red": "Vermell",
|
||||
"default": "Per defecte",
|
||||
"highcontrast": "Contrast Alt",
|
||||
"label": "Tema"
|
||||
},
|
||||
"help": "Ajuda",
|
||||
"documentation": {
|
||||
"title": "Documentació",
|
||||
"label": "Documentació de Frigate"
|
||||
},
|
||||
"restart": "Reinicia Frigate",
|
||||
"live": {
|
||||
"title": "Directe",
|
||||
"allCameras": "Totes les càmeres",
|
||||
"cameras": {
|
||||
"title": "Càmeres",
|
||||
"count_one": "{{count}} Càmera",
|
||||
"count_many": "{{count}} Càmeres",
|
||||
"count_other": "{{count}} Càmeres"
|
||||
}
|
||||
},
|
||||
"review": "Revisió",
|
||||
"explore": "Explora",
|
||||
"export": "Exportar",
|
||||
"uiPlayground": "Zona de proves de la interfície d'usuari",
|
||||
"faceLibrary": "Biblioteca de cares",
|
||||
"user": {
|
||||
"title": "Usuari",
|
||||
"setPassword": "Estableix Contrasenya",
|
||||
"account": "Compte",
|
||||
"anonymous": "Anònim",
|
||||
"logout": "Tanca la sessió",
|
||||
"current": "Usuari actual: {{user}}"
|
||||
}
|
||||
},
|
||||
"pagination": {
|
||||
"previous": {
|
||||
"label": "Ves a pàgina anterior",
|
||||
"title": "Anterior"
|
||||
},
|
||||
"next": {
|
||||
"label": "Ves a pàgina següent",
|
||||
"title": "Següent"
|
||||
},
|
||||
"more": "Més pàgines",
|
||||
"label": "paginació"
|
||||
},
|
||||
"time": {
|
||||
"untilForTime": "Fins les {{time}}",
|
||||
"untilForRestart": "Fins que Frigate es reiniciï.",
|
||||
"untilRestart": "Fins que es reiniciï",
|
||||
"ago": "Fa {{timeAgo}}",
|
||||
"justNow": "Ara mateix",
|
||||
"today": "Avui",
|
||||
"yesterday": "Ahir",
|
||||
"last7": "Últims 7 dies",
|
||||
"last14": "Últims 14 dies",
|
||||
"last30": "Últims 30 dies",
|
||||
"thisWeek": "Aquesta setmana",
|
||||
"lastWeek": "La setmana passada",
|
||||
"thisMonth": "Aquest mes",
|
||||
"lastMonth": "El mes passat",
|
||||
"5minutes": "5 minuts",
|
||||
"10minutes": "10 minuts",
|
||||
"30minutes": "30 minuts",
|
||||
"1hour": "1 hora",
|
||||
"12hours": "12 hores",
|
||||
"24hours": "24 hores",
|
||||
"pm": "pm",
|
||||
"am": "am",
|
||||
"yr": "{{time}}any",
|
||||
"year_one": "{{time}} any",
|
||||
"year_many": "{{time}} anys",
|
||||
"year_other": "{{time}} anys",
|
||||
"mo": "{{time}}mes",
|
||||
"month_one": "{{time}} mes",
|
||||
"month_many": "{{time}} mesos",
|
||||
"month_other": "{{time}} mesos",
|
||||
"h": "{{time}}h",
|
||||
"d": "{{time}}d",
|
||||
"day_one": "{{time}} dia",
|
||||
"day_many": "{{time}} dies",
|
||||
"day_other": "{{time}} dies",
|
||||
"hour_one": "{{time}} hora",
|
||||
"hour_many": "{{time}} hores",
|
||||
"hour_other": "{{time}} hores",
|
||||
"m": "{{time}} m",
|
||||
"minute_one": "{{time}} minut",
|
||||
"minute_many": "{{time}} minuts",
|
||||
"minute_other": "{{time}} minuts",
|
||||
"s": "{{time}}s",
|
||||
"second_one": "{{time}} segon",
|
||||
"second_many": "{{time}} segons",
|
||||
"second_other": "{{time}} segons",
|
||||
"formattedTimestamp": {
|
||||
"12hour": "MMM d, h::mm::ss aaa",
|
||||
"24hour": "MMM d, HH:mm:ss"
|
||||
},
|
||||
"formattedTimestampMonthDayYear": {
|
||||
"24hour": "MMM d, yyyy",
|
||||
"12hour": "MMM d, yyyy"
|
||||
},
|
||||
"formattedTimestampMonthDay": "MMM d",
|
||||
"formattedTimestampFilename": {
|
||||
"12hour": "MM-dd-yy-h-mm-ss-a",
|
||||
"24hour": "MM-dd-yy-HH-mm-ss"
|
||||
},
|
||||
"formattedTimestamp2": {
|
||||
"12hour": "MM/dd h:mm:ssa",
|
||||
"24hour": "d MMM HH:mm:ss"
|
||||
},
|
||||
"formattedTimestampHourMinute": {
|
||||
"12hour": "h:mm aaa",
|
||||
"24hour": "HH:mm"
|
||||
},
|
||||
"formattedTimestampHourMinuteSecond": {
|
||||
"24hour": "HH:mm:ss",
|
||||
"12hour": "h:mm:ss aaa"
|
||||
},
|
||||
"formattedTimestampMonthDayHourMinute": {
|
||||
"12hour": "MMM d, h:mm aaa",
|
||||
"24hour": "MMM d, HH:mm"
|
||||
},
|
||||
"formattedTimestampMonthDayYearHourMinute": {
|
||||
"12hour": "MMM d yyyy, h:mm aaa",
|
||||
"24hour": "MMM d yyyy, HH:mm"
|
||||
}
|
||||
},
|
||||
"unit": {
|
||||
"speed": {
|
||||
"mph": "mph",
|
||||
"kph": "km/h"
|
||||
}
|
||||
},
|
||||
"label": {
|
||||
"back": "Torna enrere"
|
||||
},
|
||||
"button": {
|
||||
"apply": "Aplicar",
|
||||
"reset": "Restablir",
|
||||
"done": "Fet",
|
||||
"disabled": "Deshabilitat",
|
||||
"disable": "Deshabilitar",
|
||||
"save": "Guardar",
|
||||
"copy": "Copiar",
|
||||
"back": "Enrere",
|
||||
"pictureInPicture": "Imatge en Imatge",
|
||||
"twoWayTalk": "Xerrada bidireccional",
|
||||
"cameraAudio": "Àudio de la càmera",
|
||||
"no": "No",
|
||||
"yes": "Sí",
|
||||
"download": "Descarregar",
|
||||
"info": "Informació",
|
||||
"suspended": "Suspès",
|
||||
"export": "Exportar",
|
||||
"deleteNow": "Eliminar ara",
|
||||
"next": "Següent",
|
||||
"saving": "Guardant…",
|
||||
"cancel": "Cancelar",
|
||||
"edit": "Editar",
|
||||
"copyCoordinates": "Copiar coordenades",
|
||||
"delete": "Elimina",
|
||||
"unsuspended": "Reactivar",
|
||||
"play": "Reproduir",
|
||||
"close": "Tancar",
|
||||
"history": "Historial",
|
||||
"fullscreen": "Pantalla completa",
|
||||
"exitFullscreen": "Sortir de pantalla completa",
|
||||
"on": "ENCÈS",
|
||||
"off": "APAGAT",
|
||||
"unselect": "Desseleccionar",
|
||||
"enable": "Habilitar",
|
||||
"enabled": "Habilitat"
|
||||
},
|
||||
"toast": {
|
||||
"copyUrlToClipboard": "URL copiada al porta-retalls.",
|
||||
"save": {
|
||||
"title": "Guardar",
|
||||
"error": {
|
||||
"title": "No s'han pogut guardar els canvis de configuració: {{errorMessage}}",
|
||||
"noMessage": "No s'han pogut guardar els canvis de configuració"
|
||||
}
|
||||
}
|
||||
},
|
||||
"accessDenied": {
|
||||
"desc": "No teniu permís per veure aquesta pàgina.",
|
||||
"documentTitle": "Accés Denegat - Frigate",
|
||||
"title": "Accés Denegat"
|
||||
},
|
||||
"notFound": {
|
||||
"documentTitle": "No s'ha trobat - Frigate",
|
||||
"title": "404",
|
||||
"desc": "Pàgina no trobada"
|
||||
},
|
||||
"selectItem": "Selecciona {{item}}"
|
||||
}
|
||||
|
||||
@@ -1 +1,15 @@
|
||||
{}
|
||||
{
|
||||
"form": {
|
||||
"user": "Nom d'usuari",
|
||||
"password": "Contrasenya",
|
||||
"login": "Iniciar sessió",
|
||||
"errors": {
|
||||
"usernameRequired": "El nom d'usuari és obligatori",
|
||||
"passwordRequired": "La contrasenya és obligatoria",
|
||||
"rateLimit": "S'ha superat el límit d'intents. Torna-ho a provar més tard.",
|
||||
"loginFailed": "Error en l'inici de sessió",
|
||||
"unknownError": "Error desconegut. Comproveu els registres.",
|
||||
"webUnknownError": "Error desconegut. Comproveu els registres de la consola."
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1 +1,85 @@
|
||||
{}
|
||||
{
|
||||
"group": {
|
||||
"add": "Afegir grup de càmeres",
|
||||
"edit": "Editar grup de càmeres",
|
||||
"delete": {
|
||||
"label": "Eliminar grup de càmeres",
|
||||
"confirm": {
|
||||
"title": "Confirmar eliminació",
|
||||
"desc": "Estàs segur que vols eliminar el grup de càmeres <em>{{name}}</em>?"
|
||||
}
|
||||
},
|
||||
"name": {
|
||||
"placeholder": "Introduïu un nom…",
|
||||
"errorMessage": {
|
||||
"mustLeastCharacters": "El nom del grup de càmeres ha de ser de com a mínim 2 caràcters.",
|
||||
"exists": "El nom del grup de càmeres ja existeix.",
|
||||
"nameMustNotPeriod": "El nom del grup de càmeres no pot contenir un punt.",
|
||||
"invalid": "Nom del grup de càmeres no vàlid."
|
||||
},
|
||||
"label": "Nom"
|
||||
},
|
||||
"cameras": {
|
||||
"label": "Càmeres",
|
||||
"desc": "Seleccioneu càmeres per a aquest grup."
|
||||
},
|
||||
"camera": {
|
||||
"setting": {
|
||||
"label": "Paràmetres de transmissió de la càmera",
|
||||
"title": "Paràmetres de transmissió de {{cameraName}}",
|
||||
"audioIsAvailable": "L'àudio està disponible per a aquesta transmissió",
|
||||
"audioIsUnavailable": "L'audio no està disponible per a aquesta transmissió",
|
||||
"audio": {
|
||||
"tips": {
|
||||
"document": "Llegir la documentació · ",
|
||||
"title": "L'audio ha de venir de la càmera i estar configurat a go2rtc per a aquesta transmissió."
|
||||
}
|
||||
},
|
||||
"streamMethod": {
|
||||
"label": "Mètode de transmissió",
|
||||
"method": {
|
||||
"noStreaming": {
|
||||
"label": "Sense transmissió",
|
||||
"desc": "Les imatges de la càmera només s'actualitzaran una vegada per minut i no hi haurà transmissió en viu."
|
||||
},
|
||||
"smartStreaming": {
|
||||
"label": "Transmissió intel·ligent (recomanat)",
|
||||
"desc": "La transmissió intel·ligent actualitzarà la imatge de la teva càmera una vegada per minut quan no es detecti activitat per a conservar amplada de banda i recursos. Quan es detecti activitat, la imatge canviarà automàticament a una transmissió en directe."
|
||||
},
|
||||
"continuousStreaming": {
|
||||
"label": "Transmissió contínua",
|
||||
"desc": {
|
||||
"title": "La imatge de la càmera sempre serà una transmissió en directe quan estigui visible al panell de control, tot i que no hi hagi cap activitat detectada.",
|
||||
"warning": "La transmissió contínua pot provocar problemes d'ús elevat d'amplada de banda i rendiment. Feu servir amb precaució."
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"compatibilityMode": {
|
||||
"label": "Mode de compatibilitat",
|
||||
"desc": "Activeu aquesta opció només si la transmissió en directe de la càmera mostra artefactes de color i té una línia diagonal a la part dreta de la imatge."
|
||||
},
|
||||
"desc": "Cambia les opcions de transmissió en viu del panell de control d'aquest grup de càmeres. <em>Aquest paràmetres son específics del dispositiu/navegador.</em>",
|
||||
"stream": "Transmissió",
|
||||
"placeholder": "Seleccionar una transmissió"
|
||||
}
|
||||
},
|
||||
"success": "El grup de càmeres ({{name}}) ha estat guardat.",
|
||||
"icon": "Icona",
|
||||
"label": "Grups de càmeres"
|
||||
},
|
||||
"debug": {
|
||||
"options": {
|
||||
"title": "Opcions",
|
||||
"showOptions": "Mostra opcions",
|
||||
"hideOptions": "Amaga opcions",
|
||||
"label": "Paràmetres"
|
||||
},
|
||||
"boundingBox": "Caixa delimitadora",
|
||||
"timestamp": "Marca temporal",
|
||||
"zones": "Zones",
|
||||
"mask": "Màscara",
|
||||
"motion": "Moviment",
|
||||
"regions": "Regions"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1 +1,114 @@
|
||||
{}
|
||||
{
|
||||
"restart": {
|
||||
"title": "Estàs segur que vols reiniciar Frigate?",
|
||||
"button": "Reiniciar",
|
||||
"restarting": {
|
||||
"title": "Frigate s'està reiniciant",
|
||||
"content": "Aquesta pàgina es tornarà a carregar d'aquí a {{countdown}} segons.",
|
||||
"button": "Forçar la recàrrega ara"
|
||||
}
|
||||
},
|
||||
"explore": {
|
||||
"plus": {
|
||||
"submitToPlus": {
|
||||
"label": "Enviar a Frigate+",
|
||||
"desc": "Els objectes a les ubicacions que voleu evitar no són falsos positius. Enviar-los com a falsos positius confondrà el model."
|
||||
},
|
||||
"review": {
|
||||
"question": {
|
||||
"label": "Confirmar aquesta etiqueta per a Frigate Plus",
|
||||
"ask_a": "Aquest objecte és un <code>{{label}}</code>?",
|
||||
"ask_an": "Aquest objecte és un <code>{{label}}</code>?",
|
||||
"ask_full": "Aquest objecte és un <code>{{untranslatedLabel}}</code> ({{translatedLabel}})?"
|
||||
},
|
||||
"state": {
|
||||
"submitted": "Enviat"
|
||||
}
|
||||
}
|
||||
},
|
||||
"video": {
|
||||
"viewInHistory": "Veure a l'historial"
|
||||
}
|
||||
},
|
||||
"export": {
|
||||
"time": {
|
||||
"custom": "Personalitzat",
|
||||
"fromTimeline": "Seleccionar a la línia de temps",
|
||||
"lastHour_one": "L'última hora",
|
||||
"lastHour_many": "Les últimes {{count}} hores",
|
||||
"lastHour_other": "Les últimes {{count}} hores",
|
||||
"start": {
|
||||
"title": "Hora d'inci",
|
||||
"label": "Seleccionar una hora d'inici"
|
||||
},
|
||||
"end": {
|
||||
"title": "Hora de finalització",
|
||||
"label": "Seleccionar una hora de finalització"
|
||||
}
|
||||
},
|
||||
"name": {
|
||||
"placeholder": "Nom de l'exportació"
|
||||
},
|
||||
"select": "Seleccionar",
|
||||
"export": "Exportar",
|
||||
"selectOrExport": "Seleccionar o exportar",
|
||||
"toast": {
|
||||
"success": "Exportació inciada amb èxit. Pots veure l'arxiu a la carpeta /exports.",
|
||||
"error": {
|
||||
"endTimeMustAfterStartTime": "L'hora de finalització ha de ser posterior a l'hora d'inici",
|
||||
"noVaildTimeSelected": "No s'ha seleccionat un rang de temps vàlid",
|
||||
"failed": "No s'ha pogut inciar l'exportació: {{error}}"
|
||||
}
|
||||
},
|
||||
"fromTimeline": {
|
||||
"saveExport": "Guardar exportació",
|
||||
"previewExport": "Previsualitzar exportació"
|
||||
}
|
||||
},
|
||||
"streaming": {
|
||||
"label": "Transmissió",
|
||||
"restreaming": {
|
||||
"disabled": "La retransmissió no està habilitada per a aquesta càmera.",
|
||||
"desc": {
|
||||
"title": "Configurar go2rtc per a àudio i opcions addicionals de visualització en directe per a aquesta càmera.",
|
||||
"readTheDocumentation": "Llegir la documentació"
|
||||
}
|
||||
},
|
||||
"showStats": {
|
||||
"label": "Mostrar les estadístiques de la transmissió",
|
||||
"desc": "Activa aquesta opció per a mostrar les estadístiques de la transmissió superposades a la imatge de la càmera."
|
||||
},
|
||||
"debugView": "Vista de depuració"
|
||||
},
|
||||
"search": {
|
||||
"saveSearch": {
|
||||
"label": "Desar la cerca",
|
||||
"desc": "Propocioneu un nom per a aquesta cerca desada.",
|
||||
"placeholder": "Introduïu un nom per a la vostra cerca",
|
||||
"success": "La cerca {{searchName}} ha sigut desada.",
|
||||
"overwrite": "{{searchName}} ja existeix. Si deseu, es sobreescriurà el valor existent.",
|
||||
"button": {
|
||||
"save": {
|
||||
"label": "Desar aquesta cerca"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"recording": {
|
||||
"button": {
|
||||
"deleteNow": "Suprimir ara",
|
||||
"export": "Exportar",
|
||||
"markAsReviewed": "Marcar com a revisat"
|
||||
},
|
||||
"confirmDelete": {
|
||||
"title": "Confirmar la supressió",
|
||||
"desc": {
|
||||
"selected": "Esteu segurs que voleu suprimir tots els vídeos enregistrats associats a aquest element de revisió?<br /><br />Manteniu premuda la tecla <em>Maj</em> per ometre aquest diàleg en el futur."
|
||||
},
|
||||
"toast": {
|
||||
"success": "Els enregistraments de vídeo associats als elements de revisió seleccionats s’han suprimit correctament.",
|
||||
"error": "No s'ha pogut suprimir: {{error}}"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1 +1,126 @@
|
||||
{}
|
||||
{
|
||||
"labels": {
|
||||
"all": {
|
||||
"short": "Etiquetes",
|
||||
"title": "Totes les etiquetes"
|
||||
},
|
||||
"label": "Etiquetes",
|
||||
"count_one": "{{count}} Etiqueta",
|
||||
"count_other": "{{count}} Etiquetes"
|
||||
},
|
||||
"filter": "Filtre",
|
||||
"zones": {
|
||||
"label": "Zones",
|
||||
"all": {
|
||||
"title": "Totes les zones",
|
||||
"short": "Zones"
|
||||
}
|
||||
},
|
||||
"dates": {
|
||||
"all": {
|
||||
"title": "Totes les dates",
|
||||
"short": "Dates"
|
||||
},
|
||||
"selectPreset": "Selecciona un preajust…"
|
||||
},
|
||||
"more": "Més filtres",
|
||||
"reset": {
|
||||
"label": "Restablir filtres als valors predeterminats"
|
||||
},
|
||||
"timeRange": "Rang de temps",
|
||||
"subLabels": {
|
||||
"label": "Subetiquetes",
|
||||
"all": "Totes les subetiquetes"
|
||||
},
|
||||
"score": "Puntuació",
|
||||
"estimatedSpeed": "Velocitat estimada ({{unit}})",
|
||||
"features": {
|
||||
"label": "Característiques",
|
||||
"hasSnapshot": "Té una instantània",
|
||||
"hasVideoClip": "Té un clip de vídeo",
|
||||
"submittedToFrigatePlus": {
|
||||
"label": "Enviat a Frigate+",
|
||||
"tips": "Primer heu de filtrar els objectes de seguiment que tenen una instantània.<br /><br />Els objectes de seguiment sense una instantània no es poden enviar a Frigate+."
|
||||
}
|
||||
},
|
||||
"sort": {
|
||||
"label": "Ordenar",
|
||||
"dateAsc": "Data (Ascendent)",
|
||||
"dateDesc": "Data (Descendent)",
|
||||
"scoreAsc": "Puntuació de l'objecte (Ascendent)",
|
||||
"scoreDesc": "Puntuació de l'objecte (Descendent)",
|
||||
"speedAsc": "Velocitat estimada (Ascendent)",
|
||||
"speedDesc": "Velocitat estimada (descendent)",
|
||||
"relevance": "Rellevància"
|
||||
},
|
||||
"explore": {
|
||||
"settings": {
|
||||
"defaultView": {
|
||||
"summary": "Resum",
|
||||
"unfilteredGrid": "Quadrícula sense filtrar",
|
||||
"title": "Vista per defecte",
|
||||
"desc": "Quan no s'ha seleccionat cap filtre, mostreu un resum dels objectes de seguiment més recents per etiqueta, o visualitzeu una quadrícula sense filtrar."
|
||||
},
|
||||
"gridColumns": {
|
||||
"title": "Columnes de la quadrícula",
|
||||
"desc": "Seleccionar el nombre de columnes a la vista de quadrícula."
|
||||
},
|
||||
"searchSource": {
|
||||
"label": "Font de cerca",
|
||||
"options": {
|
||||
"description": "Descripció",
|
||||
"thumbnailImage": "Imatge en miniatura"
|
||||
},
|
||||
"desc": "Trieu si voleu cercar les miniatures o les descripcions dels objectes de seguiment."
|
||||
},
|
||||
"title": "Configuració"
|
||||
},
|
||||
"date": {
|
||||
"selectDateBy": {
|
||||
"label": "Seleccionr a una data per filtrar"
|
||||
}
|
||||
}
|
||||
},
|
||||
"logSettings": {
|
||||
"disableLogStreaming": "Deshabilitar la transmissió de registres",
|
||||
"allLogs": "Tots els registres",
|
||||
"loading": {
|
||||
"desc": "Quan el panell de registre es desplaça cap a la part inferior, els registres nous apareixen automàticament a mesura que s'afegeixen.",
|
||||
"title": "Carregant"
|
||||
},
|
||||
"label": "Filtrar nivell de registre",
|
||||
"filterBySeverity": "Filtrar registre per gravetat"
|
||||
},
|
||||
"trackedObjectDelete": {
|
||||
"title": "Confirmar la supressió",
|
||||
"desc": "En suprimir aquests {{objectLength}} objectes de seguiment, s'elimina la instatània, les incrustacions desades, i els registres de temps de vida. Les imatges gravades d'aquests objectes <em>NO</em> es suprimiran de l'historial. <br/><br/>Està segur que vol continuar?<br/><br/>Manteniu la tecla <em>Shift</em> per ometre aquest diàleg en el futur.",
|
||||
"toast": {
|
||||
"success": "Els objected amb seguiment s'han suprimit correctament.",
|
||||
"error": "No s'han pogut suprimir els objectes de seguiment: {{errorMessage}}"
|
||||
}
|
||||
},
|
||||
"zoneMask": {
|
||||
"filterBy": "Filtrar per màscara de zona"
|
||||
},
|
||||
"recognizedLicensePlates": {
|
||||
"title": "Matrícules reconegudes",
|
||||
"loadFailed": "No s'han pogut carregar les matrícules reconegudes.",
|
||||
"loading": "Carregant les matrícules reconegudes…",
|
||||
"placeholder": "Escriu per a buscar matrícules…",
|
||||
"noLicensePlatesFound": "No s'han trobat matrícules.",
|
||||
"selectPlatesFromList": "Seleccioni una o més matrícules de la llista."
|
||||
},
|
||||
"cameras": {
|
||||
"label": "Filtre de càmeres",
|
||||
"all": {
|
||||
"title": "Totes les càmeres",
|
||||
"short": "Càmeres"
|
||||
}
|
||||
},
|
||||
"review": {
|
||||
"showReviewed": "Mostrar els revisats"
|
||||
},
|
||||
"motion": {
|
||||
"showMotionOnly": "Mostar només el moviment"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1 +1,8 @@
|
||||
{}
|
||||
{
|
||||
"iconPicker": {
|
||||
"selectIcon": "Selecciona una icona",
|
||||
"search": {
|
||||
"placeholder": "Buscar icona…"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1 +1,10 @@
|
||||
{}
|
||||
{
|
||||
"button": {
|
||||
"downloadVideo": {
|
||||
"label": "Descarregar vídeo",
|
||||
"toast": {
|
||||
"success": "S’ha començat a descarregar el vídeo de l’element de revisió."
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1 +1,51 @@
|
||||
{}
|
||||
{
|
||||
"stats": {
|
||||
"latency": {
|
||||
"short": {
|
||||
"title": "Latència",
|
||||
"value": "{{seconds}} s"
|
||||
},
|
||||
"title": "Latència:",
|
||||
"value": "{{seconds}} segons"
|
||||
},
|
||||
"streamType": {
|
||||
"title": "Tipus de transmissió:",
|
||||
"short": "Tipus"
|
||||
},
|
||||
"bandwidth": {
|
||||
"title": "Ample de banda:",
|
||||
"short": "Ample de banda"
|
||||
},
|
||||
"totalFrames": "Fotogrames totals:",
|
||||
"droppedFrames": {
|
||||
"title": "Fotogrames perduts:",
|
||||
"short": {
|
||||
"title": "Perduts",
|
||||
"value": "{{droppedFrames}} fotogrames"
|
||||
}
|
||||
},
|
||||
"decodedFrames": "Fotogrames decodificats:",
|
||||
"droppedFrameRate": "Taxa de fotogrames perduts:"
|
||||
},
|
||||
"noRecordingsFoundForThisTime": "No s'han trobat enregistraments en aquesta hora",
|
||||
"noPreviewFound": "No s'ha trobat previsualització",
|
||||
"noPreviewFoundFor": "No s'ha trobat cap previsualització per a {{cameraName}}",
|
||||
"submitFrigatePlus": {
|
||||
"title": "Enviar aquesta imatge a Frigate+?",
|
||||
"submit": "Enviar"
|
||||
},
|
||||
"livePlayerRequiredIOSVersion": "Es requereix iOS 17.1 o superior per a aquest tipus de reproducció en directe.",
|
||||
"streamOffline": {
|
||||
"title": "Transmissió desconnectada",
|
||||
"desc": "No s’han rebut imatges a la transmissió <code>detect</code> de la càmera {{cameraName}}. Comprova els registres d’errors"
|
||||
},
|
||||
"cameraDisabled": "La càmera està desactivada",
|
||||
"toast": {
|
||||
"success": {
|
||||
"submittedFrigatePlus": "Fotograma enviat correctament a Frigate+"
|
||||
},
|
||||
"error": {
|
||||
"submitFrigatePlusFailed": "Error al enviar fotograma a Frigate+"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1 +1,120 @@
|
||||
{}
|
||||
{
|
||||
"person": "Persona",
|
||||
"bicycle": "Bicicleta",
|
||||
"car": "Cotxe",
|
||||
"motorcycle": "Motocicleta",
|
||||
"airplane": "Avió",
|
||||
"boat": "Vaixell",
|
||||
"traffic_light": "Llum del trànsit",
|
||||
"fire_hydrant": "Boca d'incendi",
|
||||
"street_sign": "Senyal de trànsit",
|
||||
"stop_sign": "Senyal de stop",
|
||||
"parking_meter": "Parquímetre",
|
||||
"bench": "Banc",
|
||||
"bird": "Ocell",
|
||||
"cat": "Gat",
|
||||
"dog": "Gos",
|
||||
"horse": "Cavall",
|
||||
"sheep": "Ovella",
|
||||
"cow": "Vaca",
|
||||
"elephant": "Elefant",
|
||||
"bear": "Ós",
|
||||
"zebra": "Zebra",
|
||||
"giraffe": "Girafa",
|
||||
"hat": "Barret",
|
||||
"backpack": "Motxilla",
|
||||
"umbrella": "Paraigües",
|
||||
"shoe": "Sabata",
|
||||
"eye_glasses": "Ulleres",
|
||||
"tie": "Corbata",
|
||||
"suitcase": "Maleta",
|
||||
"frisbee": "Frisbee",
|
||||
"skis": "Esquís",
|
||||
"snowboard": "Snowboard",
|
||||
"sports_ball": "Pilota d'esports",
|
||||
"kite": "Estel",
|
||||
"baseball_bat": "Bat de beisbol",
|
||||
"baseball_glove": "Guant de beisbol",
|
||||
"skateboard": "Monopatí",
|
||||
"surfboard": "Taula de surf",
|
||||
"tennis_racket": "Raqueta de tenis",
|
||||
"bottle": "Ampolla",
|
||||
"plate": "Placa",
|
||||
"wine_glass": "Got de vi",
|
||||
"cup": "Copa",
|
||||
"fork": "Forquilla",
|
||||
"knife": "Ganivet",
|
||||
"spoon": "Cullera",
|
||||
"bowl": "Bol",
|
||||
"apple": "Poma",
|
||||
"sandwich": "Sandvitx",
|
||||
"orange": "Taronja",
|
||||
"broccoli": "Bròquil",
|
||||
"carrot": "Pastanaga",
|
||||
"hot_dog": "Frankfurt",
|
||||
"pizza": "Pizza",
|
||||
"donut": "Dònut",
|
||||
"cake": "Pastís",
|
||||
"chair": "Cadira",
|
||||
"couch": "Sofà",
|
||||
"potted_plant": "Planta en test",
|
||||
"bed": "Llit",
|
||||
"mirror": "Mirall",
|
||||
"dining_table": "Taula de menjador",
|
||||
"window": "Finestra",
|
||||
"desk": "Escriptori",
|
||||
"toilet": "Bany",
|
||||
"door": "Porta",
|
||||
"tv": "TV",
|
||||
"mouse": "Ratolí",
|
||||
"remote": "Comandament",
|
||||
"keyboard": "Teclat",
|
||||
"cell_phone": "Telèfon mòbil",
|
||||
"microwave": "Microones",
|
||||
"oven": "Forn",
|
||||
"toaster": "Torradora",
|
||||
"sink": "Aigüera",
|
||||
"refrigerator": "Nevera",
|
||||
"blender": "Batedora",
|
||||
"book": "Llibre",
|
||||
"clock": "Rellotge",
|
||||
"vase": "Gerro",
|
||||
"scissors": "Tisores",
|
||||
"teddy_bear": "Ós de peluix",
|
||||
"hair_dryer": "Assecador de cabell",
|
||||
"toothbrush": "Raspall de dents",
|
||||
"hair_brush": "Raspall de cabell",
|
||||
"vehicle": "Vehicle",
|
||||
"squirrel": "Esquirol",
|
||||
"deer": "Cérvol",
|
||||
"animal": "Animal",
|
||||
"bark": "Escorça",
|
||||
"fox": "Guineu",
|
||||
"goat": "Cabra",
|
||||
"rabbit": "Conill",
|
||||
"raccoon": "Ós rentador",
|
||||
"robot_lawnmower": "Robot tallagespa",
|
||||
"handbag": "Bossa de mà",
|
||||
"banana": "Plàtan",
|
||||
"train": "Tren",
|
||||
"bus": "Autobús",
|
||||
"laptop": "Portàtil",
|
||||
"waste_bin": "Paperera",
|
||||
"face": "Cara",
|
||||
"on_demand": "Sota demanda",
|
||||
"license_plate": "Matrícula",
|
||||
"package": "Paquet",
|
||||
"bbq_grill": "Barbacoa",
|
||||
"amazon": "Amazon",
|
||||
"usps": "USPS",
|
||||
"ups": "UPS",
|
||||
"fedex": "FedEx",
|
||||
"dhl": "DHL",
|
||||
"an_post": "An Post",
|
||||
"purolator": "Purolator",
|
||||
"postnl": "PostNL",
|
||||
"nzpost": "NZPost",
|
||||
"postnord": "PostNord",
|
||||
"dpd": "DPD",
|
||||
"gls": "GLS"
|
||||
}
|
||||
|
||||
@@ -1 +1,16 @@
|
||||
{}
|
||||
{
|
||||
"documentTitle": "Editor de Configuració - Frigate",
|
||||
"configEditor": "Editor de configuració",
|
||||
"copyConfig": "Copiar configuració",
|
||||
"saveAndRestart": "Desa i reinicia",
|
||||
"saveOnly": "Només desar",
|
||||
"toast": {
|
||||
"success": {
|
||||
"copyToClipboard": "Configuració copiada al porta-retalls."
|
||||
},
|
||||
"error": {
|
||||
"savingError": "Error al desar la configuració"
|
||||
}
|
||||
},
|
||||
"confirm": "Sortir sense desar?"
|
||||
}
|
||||
|
||||
@@ -1 +1,38 @@
|
||||
{}
|
||||
{
|
||||
"detected": "detectat",
|
||||
"alerts": "Alertes",
|
||||
"detections": "Deteccions",
|
||||
"motion": {
|
||||
"label": "Moviment",
|
||||
"only": "Només moviment"
|
||||
},
|
||||
"allCameras": "Totes les càmeres",
|
||||
"empty": {
|
||||
"alert": "Hi ha cap alerta per revisar",
|
||||
"detection": "Hi ha cap detecció per revisar",
|
||||
"motion": "No s'haan trobat dades de moviment"
|
||||
},
|
||||
"timeline": "Línia de temps",
|
||||
"timeline.aria": "Seleccionar línia de temps",
|
||||
"events": {
|
||||
"label": "Esdeveniments",
|
||||
"aria": "Seleccionar esdeveniments",
|
||||
"noFoundForTimePeriod": "No s'han trobat esdeveniments per aquest període de temps."
|
||||
},
|
||||
"documentTitle": "Revisió - Frigate",
|
||||
"recordings": {
|
||||
"documentTitle": "Enregistraments - Frigate"
|
||||
},
|
||||
"calendarFilter": {
|
||||
"last24Hours": "Últimes 24 hores"
|
||||
},
|
||||
"markAsReviewed": "Marcar com a revisat",
|
||||
"markTheseItemsAsReviewed": "Marca aquests elements com a revisats",
|
||||
"newReviewItems": {
|
||||
"label": "Veure nous elements de revisió",
|
||||
"button": "Nous elements per revisar"
|
||||
},
|
||||
"camera": "Càmera",
|
||||
"selected_one": "{{count}} seleccionats",
|
||||
"selected_other": "{{count}} seleccionats"
|
||||
}
|
||||
|
||||
@@ -1 +1,48 @@
|
||||
{}
|
||||
{
|
||||
"exploreIsUnavailable": {
|
||||
"downloadingModels": {
|
||||
"tips": {
|
||||
"context": "Potser voldreu reindexar les incrustacions dels objectes seguits un cop s'hagin descarregat els models.",
|
||||
"documentation": "Llegir la documentació"
|
||||
},
|
||||
"context": "Frigate està descarregant els models d'embeddings necessaris per a donar suport a la funció de cerca semàntica. Això pot trigar diversos minuts, depenent de la velocitat de la teva connexió de xarxa.",
|
||||
"setup": {
|
||||
"visionModel": "Model de visió",
|
||||
"visionModelFeatureExtractor": "Extractor de característiques del model de visió",
|
||||
"textModel": "Model de text",
|
||||
"textTokenizer": "Tokenitzador de text"
|
||||
},
|
||||
"error": "S'ha produït un error. Comproveu els registres de Frigate."
|
||||
},
|
||||
"embeddingsReindexing": {
|
||||
"context": "Explorar pot ser utilitzat després d’haver completat la reindexació d’objectes rastrejats.",
|
||||
"startingUp": "Iniciant…",
|
||||
"finishingShortly": "Finalitzant en breus",
|
||||
"step": {
|
||||
"thumbnailsEmbedded": "Miniatures integrades: ",
|
||||
"descriptionsEmbedded": "Descripcions integrades: ",
|
||||
"trackedObjectsProcessed": "Objectes processats: "
|
||||
},
|
||||
"estimatedTime": "Temps restant estimat:"
|
||||
},
|
||||
"title": "Explorar no està disponible"
|
||||
},
|
||||
"documentTitle": "Explora - Frigate",
|
||||
"generativeAI": "IA Generativa",
|
||||
"objectLifecycle": {
|
||||
"createObjectMask": "Crear màscara per a l'objecte",
|
||||
"title": "Cicle de vida de l'objecte",
|
||||
"noImageFound": "No s'ha trobat cap imatge per a aquesta marca temporal."
|
||||
},
|
||||
"exploreMore": "Explora més {{label}} objectes",
|
||||
"trackedObjectDetails": "Detalls de l'objecte rastrejat",
|
||||
"type": {
|
||||
"details": "detalls",
|
||||
"snapshot": "instantània",
|
||||
"video": "vídeo",
|
||||
"object_lifecycle": "cicle de vida de l'objecte"
|
||||
},
|
||||
"details": {
|
||||
"timestamp": "Marca temporal"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1 +1,17 @@
|
||||
{}
|
||||
{
|
||||
"documentTitle": "Exportar - Frigate",
|
||||
"search": "Buscar",
|
||||
"noExports": "No s'han trobat exportacions",
|
||||
"deleteExport": "Suprimeix l'exportació",
|
||||
"deleteExport.desc": "Estàs segur que vols eliminar {{exportName}}?",
|
||||
"editExport": {
|
||||
"title": "Renombrar exportació",
|
||||
"desc": "Introdueix un nou nom per a aquesta exportació.",
|
||||
"saveExport": "Desar exportació"
|
||||
},
|
||||
"toast": {
|
||||
"error": {
|
||||
"renameExportFailed": "Error al canviar el nom de l’exportació: {{errorMessage}}"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1 +1,43 @@
|
||||
{}
|
||||
{
|
||||
"selectItem": "Selecciona {{item}}",
|
||||
"details": {
|
||||
"subLabelScore": "Puntuació de la subetiqueta",
|
||||
"scoreInfo": "La puntuació de la subetiqueta és la puntuació ponderada de totes la confidència dels rostres reconeguts, de manera que pot ser diferent de la puntuació que es mostra a la instantània.",
|
||||
"unknown": "Desconegut",
|
||||
"person": "Persona",
|
||||
"faceDesc": "Detalls de l'objecte que ha generat aquest rostre",
|
||||
"timestamp": "Marca temporal",
|
||||
"face": "Detalls del rostre"
|
||||
},
|
||||
"collections": "Col·leccions",
|
||||
"train": {
|
||||
"empty": "No hi ha intents recents de reconeixement de rostres",
|
||||
"title": "Entrenar",
|
||||
"aria": "Seleccionar entrenament"
|
||||
},
|
||||
"description": {
|
||||
"addFace": "Guia per a agregar una nova colecció a la biblioteca de rostres.",
|
||||
"placeholder": "Introduïu un nom per a aquesta col·lecció",
|
||||
"invalidName": "Nom no vàlid. Els noms només poden incloure lletres, números, espais, apòstrofs, guions baixos i guionets."
|
||||
},
|
||||
"documentTitle": "Biblioteca de rostres - Frigate",
|
||||
"uploadFaceImage": {
|
||||
"title": "Puja una imatge del rostre",
|
||||
"desc": "Carregar una imatge per escanejar els rostres i incloure per a {{pageToggle}}"
|
||||
},
|
||||
"createFaceLibrary": {
|
||||
"title": "Crear Col·lecció",
|
||||
"desc": "Crear una nova col·lecció",
|
||||
"new": "Crear un nou rostre",
|
||||
"nextSteps": "Per establir una base sòlida:<li>Utilitza la pestanya Entrenament per seleccionar i entrenar imatges de cada persona detectada.</li><li>Centra’t en imatges frontals per obtenir millors resultats; evita imatges d’entrenament amb rostres en angle.</li></ul>"
|
||||
},
|
||||
"steps": {
|
||||
"faceName": "Introduir el nom del rostre",
|
||||
"uploadFace": "Puja una imatge del rostre",
|
||||
"nextSteps": "Següents passos",
|
||||
"description": {
|
||||
"uploadFace": "Puja una imatge de {{name}} que mostri el seu rostre de cares. No cal que la imatge estigui retallada només al rostre."
|
||||
}
|
||||
},
|
||||
"selectFace": "Seleccionar rostre"
|
||||
}
|
||||
|
||||
@@ -1 +1,67 @@
|
||||
{}
|
||||
{
|
||||
"ptz": {
|
||||
"zoom": {
|
||||
"in": {
|
||||
"label": "Apropar la càmera PTZ"
|
||||
},
|
||||
"out": {
|
||||
"label": "Allunyar la càmera PTZ"
|
||||
}
|
||||
},
|
||||
"move": {
|
||||
"clickMove": {
|
||||
"label": "Fes clic a la imatge per centrar la càmera",
|
||||
"enable": "Habilita clic per moure",
|
||||
"disable": "Deshabilita clic per moure"
|
||||
},
|
||||
"left": {
|
||||
"label": "Moure la càmera PTZ a l'esquerra"
|
||||
},
|
||||
"up": {
|
||||
"label": "Moure la càmera PTZ cap amunt"
|
||||
},
|
||||
"down": {
|
||||
"label": "Moure la càmera PTZ cap avall"
|
||||
},
|
||||
"right": {
|
||||
"label": "Moure la càmera PTZ a la dreta"
|
||||
}
|
||||
},
|
||||
"frame": {
|
||||
"center": {
|
||||
"label": "Fer clic a la imatge per centrar la càmera PTZ"
|
||||
}
|
||||
},
|
||||
"presets": "Predefinits de la càmera PTZ"
|
||||
},
|
||||
"documentTitle": "Directe - Frigate",
|
||||
"documentTitle.withCamera": "{{camera}} - Directe - Frigate",
|
||||
"lowBandwidthMode": "Mode de baix ample de banda",
|
||||
"twoWayTalk": {
|
||||
"enable": "Activa la comunicació bidireccional",
|
||||
"disable": "Desactiva la comunicació bidireccional"
|
||||
},
|
||||
"cameraAudio": {
|
||||
"enable": "Habilitar l'àudio de la càmera",
|
||||
"disable": "Deshabilita l'àudio de la càmera"
|
||||
},
|
||||
"camera": {
|
||||
"enable": "Habilitar la càmera",
|
||||
"disable": "Deshabilita la càmera"
|
||||
},
|
||||
"muteCameras": {
|
||||
"enable": "Silencia totes les càmeres",
|
||||
"disable": "Activar el so de totes les càmeres"
|
||||
},
|
||||
"detect": {
|
||||
"enable": "Habilita la detecció",
|
||||
"disable": "Deshabilitar detecció"
|
||||
},
|
||||
"recording": {
|
||||
"enable": "Habilitar gravació",
|
||||
"disable": "Deshabilita l'enregistrament"
|
||||
},
|
||||
"snapshots": {
|
||||
"enable": "Habilita captura d'instantània"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1 +1,12 @@
|
||||
{}
|
||||
{
|
||||
"filter": "Filtre",
|
||||
"toast": {
|
||||
"error": {
|
||||
"noValidTimeSelected": "No s'ha seleccionat un rang de temps vàlid",
|
||||
"endTimeMustAfterStartTime": "L'hora de finalització ha de ser posterior a l'hora d'inici"
|
||||
}
|
||||
},
|
||||
"export": "Exportar",
|
||||
"calendar": "Calendari",
|
||||
"filters": "Filtres"
|
||||
}
|
||||
|
||||
@@ -1 +1,41 @@
|
||||
{}
|
||||
{
|
||||
"filter": {
|
||||
"label": {
|
||||
"time_range": "Rang de temps",
|
||||
"cameras": "Càmeres",
|
||||
"search_type": "Tipus de cerca",
|
||||
"labels": "Etiquetes",
|
||||
"zones": "Zones",
|
||||
"sub_labels": "Subetiquetes",
|
||||
"before": "Abans",
|
||||
"after": "Després",
|
||||
"min_score": "Puntuació mínima",
|
||||
"max_score": "Puntuació màxima",
|
||||
"min_speed": "Velocitat mínima",
|
||||
"max_speed": "Velocitat màxima",
|
||||
"recognized_license_plate": "Matrícula reconeguda",
|
||||
"has_clip": "Té Clip",
|
||||
"has_snapshot": "Té instantània"
|
||||
},
|
||||
"searchType": {
|
||||
"thumbnail": "Miniatura",
|
||||
"description": "Descripció"
|
||||
},
|
||||
"toast": {
|
||||
"error": {
|
||||
"beforeDateBeLaterAfter": "La data 'abans' ha de ser posterior a la data 'després'."
|
||||
}
|
||||
}
|
||||
},
|
||||
"search": "Buscar",
|
||||
"savedSearches": "Cerques desades",
|
||||
"searchFor": "Buscar {{inputValue}}",
|
||||
"button": {
|
||||
"clear": "Netejar cerca",
|
||||
"save": "Desar la cerca",
|
||||
"delete": "Suprimeix la recerca desada",
|
||||
"filterInformation": "Informació de filtre",
|
||||
"filterActive": "Filtres actius"
|
||||
},
|
||||
"trackedObjectId": "ID d'objecte rastrejat"
|
||||
}
|
||||
|
||||
@@ -1 +1,44 @@
|
||||
{}
|
||||
{
|
||||
"documentTitle": {
|
||||
"enrichments": "Parmàmetres complementaris - Frigate",
|
||||
"motionTuner": "Ajust de moviment - Frigate",
|
||||
"object": "Depurar - Frigate",
|
||||
"default": "Paràmetres - Frigate",
|
||||
"authentication": "Configuració d'autenticació - Frigate",
|
||||
"camera": "Paràmetres de càmera - Frigate",
|
||||
"masksAndZones": "Editor de màscares i zones - Frigate",
|
||||
"general": "Paràmetres Generals - Frigate",
|
||||
"frigatePlus": "Paràmetres de Frigate+ - Frigate",
|
||||
"notifications": "Paràmetres de notificació - Frigate"
|
||||
},
|
||||
"menu": {
|
||||
"ui": "Interfície d'usuari",
|
||||
"cameras": "Paràmetres de la càmera",
|
||||
"masksAndZones": "Màscares / Zones",
|
||||
"motionTuner": "Ajust de detecció de moviment",
|
||||
"users": "Usuaris",
|
||||
"notifications": "Notificacions",
|
||||
"debug": "Depuració",
|
||||
"frigateplus": "Frigate+",
|
||||
"enrichments": "Enriquiments"
|
||||
},
|
||||
"dialog": {
|
||||
"unsavedChanges": {
|
||||
"title": "Hi ha canvis no guardats.",
|
||||
"desc": "Desar els canvis abans de continuar?"
|
||||
}
|
||||
},
|
||||
"cameraSetting": {
|
||||
"camera": "Càmera",
|
||||
"noCamera": "Cap càmera"
|
||||
},
|
||||
"general": {
|
||||
"title": "Paràmetres generals",
|
||||
"liveDashboard": {
|
||||
"title": "Panell en directe",
|
||||
"automaticLiveView": {
|
||||
"label": "Vista en directe automàtica"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1 +1,48 @@
|
||||
{}
|
||||
{
|
||||
"documentTitle": {
|
||||
"cameras": "Estadístiques de càmera - Frigate",
|
||||
"storage": "Estadístiques d'emmagatzematge - Frigate",
|
||||
"general": "Estadístiques generals - Frigate",
|
||||
"logs": {
|
||||
"frigate": "Registres de Frigate - Frigate",
|
||||
"go2rtc": "Registres de Go2RTC - Frigate",
|
||||
"nginx": "Registres de Nginix - Frigate"
|
||||
},
|
||||
"enrichments": "Estadístiques complementàries - Frigate"
|
||||
},
|
||||
"title": "Sistema",
|
||||
"metrics": "Mètriques del sistema",
|
||||
"logs": {
|
||||
"download": {
|
||||
"label": "Descarregar registres"
|
||||
},
|
||||
"copy": {
|
||||
"label": "Copiar al porta-retalls",
|
||||
"success": "Registres copiats al porta-retalls",
|
||||
"error": "No s'han pogut copiar els registres al porta-retalls"
|
||||
},
|
||||
"type": {
|
||||
"label": "Tipus",
|
||||
"timestamp": "Marca temporal",
|
||||
"tag": "Etiqueta",
|
||||
"message": "Missatge"
|
||||
},
|
||||
"tips": "Els registres s'estàn transmetent des del servidor",
|
||||
"toast": {
|
||||
"error": {
|
||||
"fetchingLogsFailed": "Error al obtenir els registres: {{errorMessage}}",
|
||||
"whileStreamingLogs": "Error en la transmissió dels registres: {{errorMessage}}"
|
||||
}
|
||||
}
|
||||
},
|
||||
"general": {
|
||||
"detector": {
|
||||
"memoryUsage": "Ús de memòria del detector",
|
||||
"title": "Detectors",
|
||||
"inferenceSpeed": "Velocitat d'inferència del detector",
|
||||
"cpuUsage": "Ús de CPU del detector",
|
||||
"temperature": "Temperatura del detector"
|
||||
},
|
||||
"title": "General"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -92,7 +92,7 @@
|
||||
"steel_guitar": "Ocelová kytara",
|
||||
"tapping": "Ťukání",
|
||||
"banjo": "Banjo",
|
||||
"sitar": "Sitar",
|
||||
"sitar": "Sitár",
|
||||
"mandolin": "Mandolína",
|
||||
"zither": "Citera",
|
||||
"ukulele": "Ukulele",
|
||||
@@ -174,7 +174,7 @@
|
||||
"dog": "Pes",
|
||||
"run": "Běh",
|
||||
"cricket": "Cvrček",
|
||||
"glockenspiel": "Zvonkohra",
|
||||
"glockenspiel": "Paličková zvonkohra",
|
||||
"cello": "Cello",
|
||||
"pets": "Domácí mazlíčci",
|
||||
"opera": "Opera",
|
||||
@@ -247,7 +247,7 @@
|
||||
"coin": "Mince",
|
||||
"scissors": "Nůžky",
|
||||
"electric_shaver": "Elektrický holící strojek",
|
||||
"typing": "",
|
||||
"typing": "Psaní na stroji nebo klávesnici",
|
||||
"typewriter": "Psací stroj",
|
||||
"computer_keyboard": "Počítačová klávesnice",
|
||||
"writing": "Psaní",
|
||||
@@ -272,11 +272,11 @@
|
||||
"camera": "Kamera",
|
||||
"tools": "Nářadí",
|
||||
"hammer": "Kladivo",
|
||||
"jackhammer": "Zbíječka",
|
||||
"jackhammer": "Sbíječka",
|
||||
"sawing": "Řezání",
|
||||
"power_tool": "Elektrické nářadí",
|
||||
"drill": "Vrtačka",
|
||||
"explosion": "Výbuch",
|
||||
"explosion": "Exploze",
|
||||
"gunshot": "Výstřel",
|
||||
"fireworks": "Ohňostroj",
|
||||
"firecracker": "Petarda",
|
||||
@@ -311,5 +311,119 @@
|
||||
"chant": "Skandování",
|
||||
"rapping": "Rapování",
|
||||
"gasp": "Zalapání po dechu",
|
||||
"heart_murmur": "Srdeční šelest"
|
||||
"heart_murmur": "Srdeční šelest",
|
||||
"mantra": "Mantra (pozitivní vibrace)",
|
||||
"grunt": "Zabručení",
|
||||
"pant": "Oddechávání",
|
||||
"shuffle": "Míchání (karet)",
|
||||
"yip": "Jo",
|
||||
"bow_wow": "Hlasitý protest",
|
||||
"caterwaul": "Vřeštět",
|
||||
"clip_clop": "Klapání kopyt",
|
||||
"patter": "Plácání",
|
||||
"plucked_string_instrument": "Drnkací strunný nástroj",
|
||||
"mallet_percussion": "Palička perkuse",
|
||||
"bowed_string_instrument": "Smyčcový nástroj",
|
||||
"string_section": "Smyčcová sekce",
|
||||
"pizzicato": "Pizzicato",
|
||||
"double_bass": "Kontrabas",
|
||||
"wind_instrument": "Dechový nástroj",
|
||||
"jingle_bell": "Rolnička",
|
||||
"wind_chime": "Zvonkohra",
|
||||
"singing_bowl": "Singing Bowl",
|
||||
"beatboxing": "Beatboxing",
|
||||
"punk_rock": "Punk Rock",
|
||||
"grunge": "Grunge",
|
||||
"progressive_rock": "Progressive Rock",
|
||||
"rock_and_roll": "Rock & Roll",
|
||||
"psychedelic_rock": "Psychadelický Rock",
|
||||
"rhythm_and_blues": "Rythm & Blues",
|
||||
"soul_music": "Soulová hudba",
|
||||
"reggae": "Reggae",
|
||||
"country": "Country",
|
||||
"swing_music": "Swingová hudba",
|
||||
"bluegrass": "Bluegrass",
|
||||
"funk": "Funk",
|
||||
"folk_music": "Folková hudba",
|
||||
"middle_eastern_music": "Středo-východní hudba",
|
||||
"disco": "Disco",
|
||||
"classical_music": "Klasická hudba",
|
||||
"house_music": "House hudba",
|
||||
"dubstep": "Dubstep",
|
||||
"drum_and_bass": "Drum & Bass",
|
||||
"electronica": "Elektronická hudba",
|
||||
"electronic_dance_music": "Elektronická taneční hudba",
|
||||
"ambient_music": "Ambientní hudba",
|
||||
"trance_music": "Trance hudba",
|
||||
"music_of_latin_america": "Latinsko-americká hudba",
|
||||
"flamenco": "Flamengo",
|
||||
"blues": "Blues",
|
||||
"new-age_music": "Novodobá hudba",
|
||||
"vocal_music": "Vokální hudba",
|
||||
"a_capella": "A Capella",
|
||||
"music_of_africa": "Africká hudba",
|
||||
"afrobeat": "Afrobeat",
|
||||
"christian_music": "Křesťanská hudba",
|
||||
"gospel_music": "Gospelová hudba",
|
||||
"music_of_asia": "Asijská hudba",
|
||||
"carnatic_music": "Karnatická hudba",
|
||||
"music_of_bollywood": "Hudba z Bollywoodu",
|
||||
"ska": "SKA",
|
||||
"traditional_music": "Tradiční hudba",
|
||||
"independent_music": "Nezávislá hudba",
|
||||
"background_music": "Hudba na pozadí",
|
||||
"theme_music": "Tématická hudba",
|
||||
"jingle": "Jingle",
|
||||
"soundtrack_music": "Soundtracková hudba",
|
||||
"lullaby": "Ukolébavka",
|
||||
"video_game_music": "Herní hudba",
|
||||
"christmas_music": "Vánoční hudba",
|
||||
"dance_music": "Taneční hudba",
|
||||
"wedding_music": "Svatební hudba",
|
||||
"happy_music": "Veselá hudba",
|
||||
"sad_music": "Smutná hudba",
|
||||
"tender_music": "Něžná hudba",
|
||||
"exciting_music": "Vzrušující hudba",
|
||||
"angry_music": "Naštvaná hudba",
|
||||
"scary_music": "Děsivá hudba",
|
||||
"rain_on_surface": "Déšť na povrch",
|
||||
"gurgling": "Klokotání",
|
||||
"toot": "Troubení",
|
||||
"reversing_beeps": "Parkovací pípání",
|
||||
"ice_cream_truck": "Auto se zmrzlinou",
|
||||
"emergency_vehicle": "Záchranářské vozidlo",
|
||||
"traffic_noise": "Zvuk provozu",
|
||||
"train_wheels_squealing": "Skřípání kol vlaku",
|
||||
"fixed-wing_aircraft": "Letadlo s pevnými křídly",
|
||||
"light_engine": "Lehký motor",
|
||||
"medium_engine": "Střední motor",
|
||||
"heavy_engine": "Těžký motor",
|
||||
"tap": "Poklepání",
|
||||
"squeak": "Skřípání",
|
||||
"cupboard_open_or_close": "Otvírání nebo zavírání skříně",
|
||||
"drawer_open_or_close": "Otvírání nebo zavírání šuplíku",
|
||||
"shuffling_cards": "Míchání karet",
|
||||
"ringtone": "Vyzváněcí melodie",
|
||||
"dial_tone": "Vytáčecí tón",
|
||||
"busy_signal": "Tón obsazené linky",
|
||||
"civil_defense_siren": "Siréna civilní obrany",
|
||||
"salsa_music": "Salsa hudba",
|
||||
"buzzer": "Bzučák",
|
||||
"steam_whistle": "Parní píšťala",
|
||||
"ratchet": "Ráčna",
|
||||
"gears": "Ozubená kola",
|
||||
"pulleys": "Kladky",
|
||||
"mechanical_fan": "Mechanický větrák",
|
||||
"single-lens_reflex_camera": "Jednooká zrcadlovka",
|
||||
"filing": "Plnění",
|
||||
"sanding": "Pískování",
|
||||
"machine_gun": "Kulomet",
|
||||
"fusillade": "Salva",
|
||||
"artillery_fire": "Dělostřelecká palba",
|
||||
"cap_gun": "Kapslíková pistole",
|
||||
"burst": "Výbuch",
|
||||
"chop": "Sekání",
|
||||
"crack": "Prasknutí",
|
||||
"chink": "Cinknutí",
|
||||
"field_recording": "Nahrávka z terénu"
|
||||
}
|
||||
|
||||
@@ -38,7 +38,47 @@
|
||||
"minute_other": "{{time}} minut",
|
||||
"second_one": "{{time}} sekunda",
|
||||
"second_few": "{{time}} sekundy",
|
||||
"second_other": "{{time}} sekund"
|
||||
"second_other": "{{time}} sekund",
|
||||
"formattedTimestampMonthDayYear": {
|
||||
"12hour": "d MMM yyyy",
|
||||
"24hour": "d MMM yyyy"
|
||||
},
|
||||
"ago": "před {{timeAgo}}",
|
||||
"yr": "{{time}}r",
|
||||
"d": "{{time}}d",
|
||||
"h": "{{time}}h",
|
||||
"mo": "{{time}}měs",
|
||||
"formattedTimestampHourMinute": {
|
||||
"24hour": "HH:mm",
|
||||
"12hour": "h:mm aaa"
|
||||
},
|
||||
"formattedTimestampMonthDayHourMinute": {
|
||||
"12hour": "d MMM, h:mm aaa",
|
||||
"24hour": "d MMM, HH:mm"
|
||||
},
|
||||
"formattedTimestamp": {
|
||||
"12hour": "d MMM, h:mm:ss aaa",
|
||||
"24hour": "d MMM, HH:mm:ss"
|
||||
},
|
||||
"formattedTimestampHourMinuteSecond": {
|
||||
"12hour": "h:mm:ss aaa",
|
||||
"24hour": "HH:mm:ss"
|
||||
},
|
||||
"formattedTimestampMonthDay": "d MMM",
|
||||
"s": "{{time}}sec",
|
||||
"m": "{{time}}min",
|
||||
"formattedTimestamp2": {
|
||||
"12hour": "dd/MM h:mm:ssa",
|
||||
"24hour": "d MMM HH:mm:ss"
|
||||
},
|
||||
"formattedTimestampMonthDayYearHourMinute": {
|
||||
"24hour": "d MMM yyyy, HH:mm",
|
||||
"12hour": "d MMM yyyy, h:mm aaa"
|
||||
},
|
||||
"formattedTimestampFilename": {
|
||||
"24hour": "dd-MM-yy-HH-mm-ss",
|
||||
"12hour": "dd-MM.yy-h-mm-ss-a"
|
||||
}
|
||||
},
|
||||
"button": {
|
||||
"twoWayTalk": "Obousměrná komunikace",
|
||||
@@ -64,7 +104,7 @@
|
||||
"exitFullscreen": "Opustit režim celé obrazovky",
|
||||
"pictureInPicture": "Obraz v obraze",
|
||||
"copyCoordinates": "Zkopíruj souřadnice",
|
||||
"delete": "Odstraň",
|
||||
"delete": "Odstranit",
|
||||
"yes": "Ano",
|
||||
"no": "Ne",
|
||||
"download": "Stáhnout",
|
||||
@@ -72,15 +112,148 @@
|
||||
"suspended": "Pozastaveno",
|
||||
"unsuspended": "Zrušit pozastavení",
|
||||
"play": "Hrát",
|
||||
"unselect": "Zrušit výběr"
|
||||
"unselect": "Zrušit výběr",
|
||||
"deleteNow": "Smazat hned",
|
||||
"next": "Další",
|
||||
"export": "Exportovat"
|
||||
},
|
||||
"label": {
|
||||
"back": "Jdi zpět"
|
||||
},
|
||||
"unit": {
|
||||
"speed": {
|
||||
"kph": "KM/h",
|
||||
"kph": "Km/h",
|
||||
"mph": "míle/h"
|
||||
}
|
||||
},
|
||||
"selectItem": "Vyberte {{item}}",
|
||||
"menu": {
|
||||
"documentation": {
|
||||
"label": "Dokumentace Frigate",
|
||||
"title": "Dokumentace"
|
||||
},
|
||||
"live": {
|
||||
"allCameras": "Všechny kamery",
|
||||
"title": "Živě",
|
||||
"cameras": {
|
||||
"count_one": "{{count}} kamera",
|
||||
"count_few": "{{count}} kamery",
|
||||
"count_other": "{{count}} kamer",
|
||||
"title": "Kamery"
|
||||
}
|
||||
},
|
||||
"review": "Revize",
|
||||
"explore": "Prozkoumat",
|
||||
"system": "Systém",
|
||||
"systemMetrics": "Systémové metriky",
|
||||
"configuration": "Konfigurace",
|
||||
"language": {
|
||||
"yue": "粵語 (kantonština)",
|
||||
"en": "English (Angličtina)",
|
||||
"da": "Dansk (Dánština)",
|
||||
"fi": "Suomi (Finština)",
|
||||
"sk": "Slovenčina (Slovenština)",
|
||||
"withSystem": {
|
||||
"label": "Použít systémové nastavení pro jazyk"
|
||||
},
|
||||
"zhCN": "简体中文 (Zjednodušená čínština)",
|
||||
"es": "Español (Španělština)",
|
||||
"hi": "हिन्दी (Hindština)",
|
||||
"fr": "Français (Francouzština)",
|
||||
"ar": "العربية (Arabština)",
|
||||
"pt": "Português (Portugalština)",
|
||||
"ru": "Русский (Ruština)",
|
||||
"de": "Deutsch (Němčina)",
|
||||
"it": "Italiano (Italština)",
|
||||
"ja": "日本語 (Japonština)",
|
||||
"tr": "Türkçe (Turečtina)",
|
||||
"nl": "Nederlands (Holandština)",
|
||||
"sv": "Svenska (Švédština)",
|
||||
"cs": "Čeština",
|
||||
"nb": "Norsk Bokmål (norský Bokmål)",
|
||||
"uk": "Українська (Ukrainština)",
|
||||
"ko": "한국어 (Korejština)",
|
||||
"vi": "Tiếng Việt (Vietnamština)",
|
||||
"he": "עברית (Hebrejština)",
|
||||
"el": "Ελληνικά (Řečtina)",
|
||||
"fa": "فارسی (Perština)",
|
||||
"ro": "Română (Rumunština)",
|
||||
"hu": "Magyar (Maďarština)",
|
||||
"pl": "Polski (Polština)"
|
||||
},
|
||||
"theme": {
|
||||
"highcontrast": "Vysoký kontrast",
|
||||
"default": "Výchozí",
|
||||
"label": "Téma",
|
||||
"blue": "Modrá",
|
||||
"green": "Zelená",
|
||||
"nord": "Polární",
|
||||
"red": "Červená"
|
||||
},
|
||||
"help": "Nápověda",
|
||||
"restart": "Restartovat Frigate",
|
||||
"user": {
|
||||
"logout": "Odhlásit",
|
||||
"setPassword": "Nastavit heslo",
|
||||
"current": "Aktuální uživatel: {{user}}",
|
||||
"title": "Uživatel",
|
||||
"account": "Účet",
|
||||
"anonymous": "anonymní"
|
||||
},
|
||||
"systemLogs": "Systémový záznam",
|
||||
"settings": "Nastavení",
|
||||
"languages": "Jazyky",
|
||||
"appearance": "Vzhled",
|
||||
"darkMode": {
|
||||
"label": "Tmavý režim",
|
||||
"light": "Světlý",
|
||||
"dark": "Tmavý",
|
||||
"withSystem": {
|
||||
"label": "Použít systémové nastavení pro světlý a tmavý režim"
|
||||
}
|
||||
},
|
||||
"export": "Exportovat",
|
||||
"uiPlayground": "UI hřiště",
|
||||
"faceLibrary": "Knihovna Obličejů",
|
||||
"configurationEditor": "Editor Konfigurace",
|
||||
"withSystem": "Systém"
|
||||
},
|
||||
"pagination": {
|
||||
"previous": {
|
||||
"label": "Jít na předchozí stranu",
|
||||
"title": "Předchozí"
|
||||
},
|
||||
"label": "stránkování",
|
||||
"next": {
|
||||
"label": "Jít na další stranu",
|
||||
"title": "Další"
|
||||
},
|
||||
"more": "Více stran"
|
||||
},
|
||||
"accessDenied": {
|
||||
"documentTitle": "Přístup odepřen - Frigate",
|
||||
"title": "Přístup odepřen",
|
||||
"desc": "Nemáte oprávnění zobrazit tuto stránku."
|
||||
},
|
||||
"notFound": {
|
||||
"desc": "Stránka nenalezena",
|
||||
"documentTitle": "Nenalezeno - Frigate",
|
||||
"title": "404"
|
||||
},
|
||||
"toast": {
|
||||
"copyUrlToClipboard": "Adresa URL byla zkopírována do schránky.",
|
||||
"save": {
|
||||
"title": "Uložit",
|
||||
"error": {
|
||||
"title": "Chyba při ukládání změn konfigurace: {{errorMessage}}",
|
||||
"noMessage": "Chyba při ukládání změn konfigurace"
|
||||
}
|
||||
}
|
||||
},
|
||||
"role": {
|
||||
"title": "Role",
|
||||
"admin": "Správce",
|
||||
"viewer": "Divák",
|
||||
"desc": "Správci mají plný přístup ke všem funkcím v uživatelském rozhraní Frigate. Diváci jsou omezeni na sledování kamer, položek přehledu a historických záznamů v UI."
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,5 +1,83 @@
|
||||
{
|
||||
"group": {
|
||||
"label": "Skupiny kamer"
|
||||
"label": "Skupiny kamer",
|
||||
"camera": {
|
||||
"setting": {
|
||||
"streamMethod": {
|
||||
"method": {
|
||||
"noStreaming": {
|
||||
"label": "Žádný stream",
|
||||
"desc": "Obrázky z kamery se aktualizují pouze jednou za minutu a neproběhne žádné živé vysílání."
|
||||
},
|
||||
"smartStreaming": {
|
||||
"label": "Smart Streaming (doporučeno)",
|
||||
"desc": "Inteligentní streamování aktualizuje obraz vaší kamery jednou za minutu, když nedochází k žádné detekovatelné aktivitě, aby se šetřila šířka pásma a zdroje. Když je detekována aktivita, obraz se plynule přepne na živý přenos."
|
||||
},
|
||||
"continuousStreaming": {
|
||||
"label": "Kontinuální streamování",
|
||||
"desc": {
|
||||
"title": "Obraz z kamery bude vždy živým přenosem, když je viditelný na dashboardu, i když není detekována žádná aktivita.",
|
||||
"warning": "Nepřetržité streamování může způsobit velké využití šířky pásma a problémy s výkonem. Používejte opatrně."
|
||||
}
|
||||
}
|
||||
},
|
||||
"label": "Metoda streamování"
|
||||
},
|
||||
"label": "Nastavení streamování kamery",
|
||||
"audioIsAvailable": "Audio je k dispozici pro tento stream",
|
||||
"audioIsUnavailable": "Audio není k dispozici pro tento stream",
|
||||
"audio": {
|
||||
"tips": {
|
||||
"document": "Přečtěte si dokumentaci ",
|
||||
"title": "Pro tento stream musí být výstup zvuku z vaší kamery a nakonfigurován v go2rtc."
|
||||
}
|
||||
},
|
||||
"compatibilityMode": {
|
||||
"label": "Režim kompatibility",
|
||||
"desc": "Tuto možnost povolte pouze v případě, že živý přenos vaší kamery zobrazuje barevné artefakty a má na pravé straně obrazu diagonální čáru."
|
||||
},
|
||||
"title": "Nastavení streamování {{cameraName}}",
|
||||
"desc": "Změní možnosti živého vysílání pro dashboard této skupiny kamer. <em>Tato nastavení jsou specifická pro zařízení/prohlížeč.</em>"
|
||||
}
|
||||
},
|
||||
"delete": {
|
||||
"confirm": {
|
||||
"title": "Potvrdit odstranění",
|
||||
"desc": "Skutečně si přejete odstranit skupinu kamer <em>{{name}}</em>?"
|
||||
},
|
||||
"label": "Odstranit skupinu kamer"
|
||||
},
|
||||
"add": "Přidat skupinu kamer",
|
||||
"name": {
|
||||
"label": "Jméno",
|
||||
"placeholder": "Zadejte jméno…",
|
||||
"errorMessage": {
|
||||
"exists": "Tento název skupiny kamer již existuje.",
|
||||
"mustLeastCharacters": "Název skupiny kamer musí mít minimálně 2 znaky.",
|
||||
"nameMustNotPeriod": "Název skupiny kamer nesmí obsahovat tečku.",
|
||||
"invalid": "Špatný název skupiny kamer."
|
||||
}
|
||||
},
|
||||
"edit": "Upravit skupinu kamer",
|
||||
"cameras": {
|
||||
"label": "Kamery",
|
||||
"desc": "Vyberte kamery pro tuto skupinu."
|
||||
},
|
||||
"icon": "Ikona",
|
||||
"success": "Skupina kamer {{name}} byla uložena."
|
||||
},
|
||||
"debug": {
|
||||
"options": {
|
||||
"label": "Nastavení",
|
||||
"title": "Možnosti",
|
||||
"showOptions": "Zobrazit možnosti",
|
||||
"hideOptions": "Skrýt možnosti"
|
||||
},
|
||||
"zones": "Zóny",
|
||||
"motion": "Pohyb",
|
||||
"regions": "Kraje",
|
||||
"timestamp": "Časové razítko",
|
||||
"boundingBox": "Ohraničení",
|
||||
"mask": "Maska"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1 +1,114 @@
|
||||
{}
|
||||
{
|
||||
"restart": {
|
||||
"title": "Jste si jistí, že chcete restartovat Frigate?",
|
||||
"button": "Restartovat",
|
||||
"restarting": {
|
||||
"title": "Frigate restartuje",
|
||||
"content": "Tato stránka bude obnovena za {{countdown}} sekund.",
|
||||
"button": "Vynutit opětovné načtení"
|
||||
}
|
||||
},
|
||||
"explore": {
|
||||
"plus": {
|
||||
"review": {
|
||||
"question": {
|
||||
"label": "Potvrďte tento štítek pro Frigate Plus",
|
||||
"ask_a": "Je tento objekt <code>{{label}}</code>?",
|
||||
"ask_an": "Tento objekt je <code>{{label}}</code>?",
|
||||
"ask_full": "Je tento objekt <code>{{untranslatedLabel}}</code> ({{translatedLabel}})?"
|
||||
},
|
||||
"state": {
|
||||
"submitted": "Odesláno"
|
||||
}
|
||||
},
|
||||
"submitToPlus": {
|
||||
"label": "Odeslat do Frigate+",
|
||||
"desc": "Objekty na místech, kterým se chcete vyhnout, nejsou falešné poplachy. Označení takových objektů jako falešných pozitiv může model zmást."
|
||||
}
|
||||
},
|
||||
"video": {
|
||||
"viewInHistory": "Zobrazit historii"
|
||||
}
|
||||
},
|
||||
"recording": {
|
||||
"confirmDelete": {
|
||||
"toast": {
|
||||
"success": "Videozáznam spojený s vybranými položkami přehledu byl úspěšně smazán.",
|
||||
"error": "Chyba mazání: {{error}}"
|
||||
},
|
||||
"title": "Potvrdit odstranění",
|
||||
"desc": {
|
||||
"selected": "Opravdu chcete smazat všechna nahraná videa spojená s touto položkou přehledu?<br /><br />Chcete-li tento dialog v budoucnu obejít, podržte klávesu <em>Shift</em>."
|
||||
}
|
||||
},
|
||||
"button": {
|
||||
"markAsReviewed": "Označit jako zkontrolované",
|
||||
"deleteNow": "Smazat hned",
|
||||
"export": "Exportovat"
|
||||
}
|
||||
},
|
||||
"export": {
|
||||
"time": {
|
||||
"fromTimeline": "Vybrat z Časové osy",
|
||||
"custom": "Vlastní",
|
||||
"lastHour_one": "Minulou hodinu",
|
||||
"lastHour_few": "Minulé {{count}} hodiny",
|
||||
"lastHour_other": "Minulých {{count}} hodin",
|
||||
"start": {
|
||||
"title": "Čas začátku",
|
||||
"label": "Vybrat čas začátku"
|
||||
},
|
||||
"end": {
|
||||
"title": "Čas konce",
|
||||
"label": "Vybrat čas konce"
|
||||
}
|
||||
},
|
||||
"select": "Vybrat",
|
||||
"export": "Exportovat",
|
||||
"selectOrExport": "Vybrat pro Export",
|
||||
"toast": {
|
||||
"success": "Export úspěšně spuštěn. Soubor najdete v adresáři /exports.",
|
||||
"error": {
|
||||
"failed": "Chyba spuštění exportu: {{error}}",
|
||||
"endTimeMustAfterStartTime": "Čas konce musí být po čase začátku",
|
||||
"noVaildTimeSelected": "Není vybráno žádné platné časové období"
|
||||
}
|
||||
},
|
||||
"fromTimeline": {
|
||||
"saveExport": "Uložit export",
|
||||
"previewExport": "Prohlížet export"
|
||||
},
|
||||
"name": {
|
||||
"placeholder": "Jméno exportu"
|
||||
}
|
||||
},
|
||||
"streaming": {
|
||||
"label": "Stream",
|
||||
"restreaming": {
|
||||
"disabled": "Restreaming pro tuto kameru není povolen.",
|
||||
"desc": {
|
||||
"title": "Nastavte go2rtc pro rozšiřující živé zobrazení a pro zvuk pro tuto kameru.",
|
||||
"readTheDocumentation": "Přečtěte si dokumentaci"
|
||||
}
|
||||
},
|
||||
"showStats": {
|
||||
"label": "Ukázat statistiky streamu",
|
||||
"desc": "Povolte tuto možnost pro zobrazení překryvných statistik v obraze streamu."
|
||||
},
|
||||
"debugView": "Náhled ladění"
|
||||
},
|
||||
"search": {
|
||||
"saveSearch": {
|
||||
"desc": "Zadejte název tohoto uloženého vyhledávání.",
|
||||
"placeholder": "Zadejte název pro vaše vyhledávání",
|
||||
"success": "Hledání {{searchName}} bylo uloženo.",
|
||||
"button": {
|
||||
"save": {
|
||||
"label": "Uložit toto hledání"
|
||||
}
|
||||
},
|
||||
"label": "Uložit vyhledávání",
|
||||
"overwrite": "{{searchName}} už existuje. Uložení přepíše existující hodnotu."
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,3 +1,126 @@
|
||||
{
|
||||
"filter": "Filtrovat"
|
||||
"filter": "Filtrovat",
|
||||
"labels": {
|
||||
"label": "Štítky",
|
||||
"all": {
|
||||
"title": "Všechny popisky",
|
||||
"short": "Popisky"
|
||||
},
|
||||
"count_one": "{{count}} Štítek",
|
||||
"count_other": "{{count}} Štítků"
|
||||
},
|
||||
"dates": {
|
||||
"selectPreset": "Vyberte předvolbu…",
|
||||
"all": {
|
||||
"title": "Všechny datumy",
|
||||
"short": "Datumy"
|
||||
}
|
||||
},
|
||||
"more": "Víc filtrů",
|
||||
"reset": {
|
||||
"label": "Resetovat filtry do výchozích hodnot"
|
||||
},
|
||||
"timeRange": "Časový rozsah",
|
||||
"score": "Skóre",
|
||||
"subLabels": {
|
||||
"all": "Všechny podružné štítky",
|
||||
"label": "Podružné Štítky"
|
||||
},
|
||||
"features": {
|
||||
"label": "Funkce",
|
||||
"hasSnapshot": "Má snímek",
|
||||
"hasVideoClip": "Má videoklip",
|
||||
"submittedToFrigatePlus": {
|
||||
"label": "Odesláno do Frigate+",
|
||||
"tips": "Nejprve musíte filtrovat sledované objekty, které mají snímek.<br /><br />Sledované objekty bez snímku nelze odeslat do Frigate+."
|
||||
}
|
||||
},
|
||||
"sort": {
|
||||
"label": "Seřadit",
|
||||
"relevance": "Závažnost",
|
||||
"dateAsc": "Datum (Vzestupně)",
|
||||
"dateDesc": "Datum (Sestupně)",
|
||||
"scoreAsc": "Skóre objektu (Vzestupně)",
|
||||
"scoreDesc": "Skóre objektu (Sestupně)",
|
||||
"speedAsc": "Odhadovaná rychlost (Vzestupně)",
|
||||
"speedDesc": "Odhadovaná rychlost (Sestupně)"
|
||||
},
|
||||
"motion": {
|
||||
"showMotionOnly": "Pouze zpomalené záběry"
|
||||
},
|
||||
"explore": {
|
||||
"settings": {
|
||||
"title": "Nastavení",
|
||||
"searchSource": {
|
||||
"label": "Hledat zdroj",
|
||||
"options": {
|
||||
"thumbnailImage": "Obrázek náhledu",
|
||||
"description": "Popis"
|
||||
},
|
||||
"desc": "Zvolte, zda chcete prohledávat miniatury nebo popisy sledovaných objektů."
|
||||
},
|
||||
"gridColumns": {
|
||||
"desc": "Zvolte počet sloupců mřížky náhledu.",
|
||||
"title": "Sloupce mřížky"
|
||||
},
|
||||
"defaultView": {
|
||||
"title": "Základní pohled",
|
||||
"desc": "Pokud nejsou vybrány žádné filtry, zobrazí se přehled nejnovějších sledovaných objektů podle štítků, nebo se zobrazí nefiltrovaná mřížka.",
|
||||
"summary": "Souhrn",
|
||||
"unfilteredGrid": "Nefiltrovaná mřížka"
|
||||
}
|
||||
},
|
||||
"date": {
|
||||
"selectDateBy": {
|
||||
"label": "Vyberte datum k filtrování"
|
||||
}
|
||||
}
|
||||
},
|
||||
"logSettings": {
|
||||
"label": "Filtrovat úroveň protokolu",
|
||||
"filterBySeverity": "Filtrovat logy podle závažnosti",
|
||||
"loading": {
|
||||
"title": "Načítání",
|
||||
"desc": "Když se podokno protokolu posune dolů, nové protokoly se automaticky zobrazují, jakmile jsou přidány."
|
||||
},
|
||||
"disableLogStreaming": "Zakázat živé zobrazování logu",
|
||||
"allLogs": "Všechny protokoly"
|
||||
},
|
||||
"recognizedLicensePlates": {
|
||||
"title": "Rozeznané SPZ",
|
||||
"loadFailed": "Chyba načítání rozeznaných SPZ.",
|
||||
"loading": "Načítám rozeznané SPZ…",
|
||||
"placeholder": "Zadejte text pro hledání SPZ…",
|
||||
"selectPlatesFromList": "Vyberte jednu, nebo více SPZ ze seznamu.",
|
||||
"noLicensePlatesFound": "Žádné SPZ nebyly nalezeny."
|
||||
},
|
||||
"zones": {
|
||||
"all": {
|
||||
"title": "Všechny zóny",
|
||||
"short": "Zóny"
|
||||
},
|
||||
"label": "Zóny"
|
||||
},
|
||||
"trackedObjectDelete": {
|
||||
"toast": {
|
||||
"success": "Sledované objekty úspěšně vymazány.",
|
||||
"error": "Chyba při mazání sledovaných objektů: {{errorMessage}}"
|
||||
},
|
||||
"title": "Potvrdit odstranění",
|
||||
"desc": "Smazáním těchto {{objectLength}} sledovaných objektů dojde k odstranění snímku, všech uložených vektorových reprezentací (embeddingů) a souvisejících záznamů o životním cyklu objektu. Záznamy z kamery v náhledu historie <em>NEBUDOU</em> smazány.<br/><br/>Přejete si to skutečně udělat?<br/><br/>Podržte <em>Shift</em> pro přeskočení tohoto dialogu v budoucnosti."
|
||||
},
|
||||
"zoneMask": {
|
||||
"filterBy": "Filtrovat podle masky zóny"
|
||||
},
|
||||
"estimatedSpeed": "Odhadovaná rychlost ({{unit}})",
|
||||
"cameras": {
|
||||
"label": "Filtr kamer",
|
||||
"all": {
|
||||
"title": "Všechny kamery",
|
||||
"short": "Kamery"
|
||||
}
|
||||
},
|
||||
"review": {
|
||||
"showReviewed": "Zobrazit zkontrolované"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -24,5 +24,97 @@
|
||||
"clock": "Hodiny",
|
||||
"toothbrush": "Zubní kartáček",
|
||||
"hair_dryer": "Fén",
|
||||
"skateboard": "Skateboard"
|
||||
"skateboard": "Skateboard",
|
||||
"airplane": "Letadlo",
|
||||
"traffic_light": "Semafor",
|
||||
"fire_hydrant": "Požární hydrant",
|
||||
"street_sign": "Uliční cedule",
|
||||
"stop_sign": "Stopka",
|
||||
"parking_meter": "Parkovací hodiny",
|
||||
"bench": "Lavička",
|
||||
"cow": "Kráva",
|
||||
"elephant": "Slon",
|
||||
"bear": "Medvěd",
|
||||
"zebra": "Zebra",
|
||||
"giraffe": "Žirafa",
|
||||
"hat": "Čepice",
|
||||
"backpack": "Batoh",
|
||||
"umbrella": "Deštník",
|
||||
"shoe": "Bota",
|
||||
"eye_glasses": "Brýle",
|
||||
"handbag": "Kabelka",
|
||||
"tie": "Kravata",
|
||||
"suitcase": "Oblečení",
|
||||
"frisbee": "Frisbee",
|
||||
"skis": "Lyže",
|
||||
"snowboard": "Snowboard",
|
||||
"sports_ball": "Sportovní míč",
|
||||
"kite": "Drak",
|
||||
"baseball_bat": "Baseballová pálka",
|
||||
"baseball_glove": "Baseballová rukavice",
|
||||
"surfboard": "Surfovací prkno",
|
||||
"tennis_racket": "Tenisová raketa",
|
||||
"bottle": "Lahev",
|
||||
"plate": "Talíř",
|
||||
"wine_glass": "Sklenice na víno",
|
||||
"cup": "Šálek",
|
||||
"fork": "Vidlička",
|
||||
"knife": "Nůž",
|
||||
"spoon": "Lžíce",
|
||||
"bowl": "Mísa",
|
||||
"banana": "Banán",
|
||||
"apple": "Jablko",
|
||||
"sandwich": "Sendvič",
|
||||
"orange": "Pomeranč",
|
||||
"broccoli": "Brokolice",
|
||||
"carrot": "Mrkev",
|
||||
"hot_dog": "Párek v rohlíku",
|
||||
"pizza": "Pizza",
|
||||
"donut": "Donut",
|
||||
"cake": "Koláč",
|
||||
"chair": "Židle",
|
||||
"couch": "Gauč",
|
||||
"potted_plant": "Hrnková rostlina",
|
||||
"bed": "Postel",
|
||||
"mirror": "Zrcadlo",
|
||||
"dining_table": "Jídelní stůl",
|
||||
"window": "Okno",
|
||||
"desk": "Stůl",
|
||||
"toilet": "Toaleta",
|
||||
"tv": "TV",
|
||||
"laptop": "Laptop",
|
||||
"remote": "Dálkový ovladač",
|
||||
"cell_phone": "Mobilní telefon",
|
||||
"microwave": "Mikrovlnná trouba",
|
||||
"oven": "Trouba",
|
||||
"toaster": "Toustovač",
|
||||
"refrigerator": "Lednice",
|
||||
"book": "Kniha",
|
||||
"vase": "Váza",
|
||||
"teddy_bear": "Medvídek",
|
||||
"hair_brush": "Hřeben",
|
||||
"squirrel": "Veverka",
|
||||
"deer": "Jelen",
|
||||
"fox": "Liška",
|
||||
"rabbit": "Králík",
|
||||
"raccoon": "Mýval",
|
||||
"robot_lawnmower": "Robotická sekačka na trávu",
|
||||
"waste_bin": "Odpadkový koš",
|
||||
"on_demand": "Na požádání",
|
||||
"face": "Obličej",
|
||||
"license_plate": "SPZ",
|
||||
"package": "Balík",
|
||||
"bbq_grill": "Gril",
|
||||
"amazon": "Amazon",
|
||||
"usps": "USPS",
|
||||
"ups": "UPS",
|
||||
"fedex": "FedEx",
|
||||
"dhl": "DHL",
|
||||
"an_post": "An Post",
|
||||
"purolator": "Purolator",
|
||||
"postnl": "PostNL",
|
||||
"nzpost": "NZPost",
|
||||
"postnord": "PostNord",
|
||||
"gls": "GLS",
|
||||
"dpd": "DPD"
|
||||
}
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
"aria": "Zvolit události",
|
||||
"noFoundForTimePeriod": "Pro toto období nebyly nalezeny žádné události."
|
||||
},
|
||||
"documentTitle": "Kontrola - Frigate",
|
||||
"documentTitle": "Revize - Frigate",
|
||||
"camera": "Kamera",
|
||||
"calendarFilter": {
|
||||
"last24Hours": "Posledních 24 hodin"
|
||||
@@ -31,5 +31,8 @@
|
||||
},
|
||||
"recordings": {
|
||||
"documentTitle": "Záznamy - Frigate"
|
||||
}
|
||||
},
|
||||
"detected": "Detekováno",
|
||||
"selected_one": "{{count}} vybráno",
|
||||
"selected_other": "{{count}} vybráno"
|
||||
}
|
||||
|
||||
@@ -1 +1,205 @@
|
||||
{}
|
||||
{
|
||||
"generativeAI": "Generativní AI",
|
||||
"documentTitle": "Prozkoumat – Frigate",
|
||||
"details": {
|
||||
"timestamp": "Časové razítko",
|
||||
"snapshotScore": {
|
||||
"label": "Skóre snímku"
|
||||
},
|
||||
"item": {
|
||||
"title": "Zkontrolovat detaily položky",
|
||||
"desc": "Zkontrolovat detaily položky",
|
||||
"button": {
|
||||
"share": "Sdílet tuto položku kontroly",
|
||||
"viewInExplore": "Zobrazit v Průzkumu"
|
||||
},
|
||||
"tips": {
|
||||
"hasMissingObjects": "Upravte svou konfiguraci, pokud chcete, aby Frigate ukládal sledované objekty pro následující štítky: <em>{{objects}}</em>",
|
||||
"mismatch_one": "{{count}} nedostupný objekt byl detekován a vložen do této položky kontroly. Tento objekt se buď nekvalifikoval jako výstraha nebo detekce, nebo již byl vyčištěn/smazán.",
|
||||
"mismatch_few": "{{count}} nedostupné objekty byly detekovány a vloženy do této položky kontroly. Tyto objekty se buď nekvalifikovaly jako výstraha nebo detekce, nebo již byly vyčištěny/smazány.",
|
||||
"mismatch_other": "{{count}} nedostupných objektů bylo detekováno a vloženo do této položky kontroly. Tyto objekty se buď nekvalifikovaly jako výstraha nebo detekce, nebo již byly vyčištěny/smazány."
|
||||
},
|
||||
"toast": {
|
||||
"success": {
|
||||
"regenerate": "Od {{provider}} byl vyžádán nový popis. V závislosti na rychlosti vašeho poskytovatele může obnovení nového popisu nějakou dobu trvat.",
|
||||
"updatedSublabel": "Úspěšně aktualizovaný podružný štítek.",
|
||||
"updatedLPR": "Úspěšně aktualizovaná SPZ."
|
||||
},
|
||||
"error": {
|
||||
"regenerate": "Chyba volání {{provider}} pro nový popis: {{errorMessage}}",
|
||||
"updatedSublabelFailed": "Chyba obnovení podružného štítku: {{errorMessage}}",
|
||||
"updatedLPRFailed": "Chyba obnovení SPZ: {{errorMessage}}"
|
||||
}
|
||||
}
|
||||
},
|
||||
"editSubLabel": {
|
||||
"descNoLabel": "Vložit nový podružný štítek pro tento sledovaný objekt",
|
||||
"desc": "Vložit nový podružný štítek pro tento {{label}}",
|
||||
"title": "Upravit podružný štítek"
|
||||
},
|
||||
"editLPR": {
|
||||
"title": "Upravit SPZ",
|
||||
"descNoLabel": "Vložit novou SPZ pro tento sledovaný objekt",
|
||||
"desc": "Vložit novou SPZ pro tento {{label}}"
|
||||
},
|
||||
"estimatedSpeed": "Odhadovaná rychlost",
|
||||
"objects": "Objekty",
|
||||
"camera": "Kamera",
|
||||
"zones": "Zóny",
|
||||
"button": {
|
||||
"regenerate": {
|
||||
"label": "Regenerovat popis sledovaného objektu",
|
||||
"title": "Regenerovat"
|
||||
},
|
||||
"findSimilar": "Najít podobné"
|
||||
},
|
||||
"description": {
|
||||
"label": "Popis",
|
||||
"placeholder": "Popis sledovaného objektu",
|
||||
"aiTips": "Frigate nebude vyžadovat popis od vašeho poskytovatele generativní AI, dokud neskončí životní cyklus sledovaného objektu."
|
||||
},
|
||||
"expandRegenerationMenu": "Rozbalte nabídku regenerace",
|
||||
"regenerateFromSnapshot": "Regenerovat ze snímku",
|
||||
"regenerateFromThumbnails": "Regenerovat z náhledu",
|
||||
"tips": {
|
||||
"descriptionSaved": "Popis úspěšně uložen",
|
||||
"saveDescriptionFailed": "Aktualizace popisu se nezdařila: {{errorMessage}}"
|
||||
},
|
||||
"topScore": {
|
||||
"info": "Nejvyšší skóre je nejvyšší střední skóre pro sledovaný objekt, takže se může lišit od skóre zobrazeného na miniatuře výsledku vyhledávání.",
|
||||
"label": "Nejvyšší skóre"
|
||||
},
|
||||
"label": "Štítek",
|
||||
"recognizedLicensePlate": "Rozpoznaná SPZ"
|
||||
},
|
||||
"exploreIsUnavailable": {
|
||||
"title": "Prozkoumat je nedostupné",
|
||||
"embeddingsReindexing": {
|
||||
"context": "Prozkoumat může být použito až vložené sledované objekty dokončí přeindexování.",
|
||||
"startingUp": "Spouštění…",
|
||||
"estimatedTime": "Odhadovaný zbývající čas:",
|
||||
"finishingShortly": "Brzy bude dokončeno",
|
||||
"step": {
|
||||
"thumbnailsEmbedded": "Vložené náhledy: ",
|
||||
"descriptionsEmbedded": "Vložené popisy: ",
|
||||
"trackedObjectsProcessed": "Zpracované sledované objekty: "
|
||||
}
|
||||
},
|
||||
"downloadingModels": {
|
||||
"context": "Frigate stahuje potřebné modely vložení pro podporu funkce sémantického vyhledávání. To může trvat několik minut v závislosti na rychlosti vašeho síťového připojení.",
|
||||
"setup": {
|
||||
"visionModelFeatureExtractor": "Extraktor funkcí Vision modelu",
|
||||
"visionModel": "Vision model",
|
||||
"textModel": "Textový model",
|
||||
"textTokenizer": "Textový tokenizér"
|
||||
},
|
||||
"tips": {
|
||||
"documentation": "Přečtěte si dokumentaci",
|
||||
"context": "Můžete reindexovat vložení vašich sledovaných oběktů hned jak budou modely staženy."
|
||||
},
|
||||
"error": "Nastala chyba. Zkontrolujte protokoly Frigate."
|
||||
}
|
||||
},
|
||||
"trackedObjectsCount_one": "{{count}} sledovaný objekt ",
|
||||
"trackedObjectsCount_few": "{{count}} sledované objekty ",
|
||||
"trackedObjectsCount_other": "{{count}} sledovaných objektů ",
|
||||
"searchResult": {
|
||||
"tooltip": "Shoda s {{type}} na {{confidence}} %",
|
||||
"deleteTrackedObject": {
|
||||
"toast": {
|
||||
"error": "Sledovaný objekt se nepodařilo smazat: {{errorMessage}}",
|
||||
"success": "Sledovaný objekt úspěšně smazán."
|
||||
}
|
||||
}
|
||||
},
|
||||
"objectLifecycle": {
|
||||
"count": "{{first}} z {{second}}",
|
||||
"trackedPoint": "Sledovaný bod",
|
||||
"lifecycleItemDesc": {
|
||||
"external": "{{label}} detekován",
|
||||
"header": {
|
||||
"zones": "Zóny",
|
||||
"ratio": "Poměr",
|
||||
"area": "Oblast"
|
||||
},
|
||||
"entered_zone": "{{label}} vstoupil do {{zones}}",
|
||||
"active": "{{label}} začal být aktivní",
|
||||
"stationary": "{{label}} se stal statickým",
|
||||
"visible": "{{label}} detekován",
|
||||
"attribute": {
|
||||
"faceOrLicense_plate": "{{attribute}} detekován pro {{label}}",
|
||||
"other": "{{label}} rozpoznán jako {{attribute}}"
|
||||
},
|
||||
"heard": "{{label}} slyšen",
|
||||
"gone": "{{label}} opuštěn"
|
||||
},
|
||||
"annotationSettings": {
|
||||
"showAllZones": {
|
||||
"title": "Zobrazit všechny zóny",
|
||||
"desc": "Vždy zobrazit zóny na snímcích, kde objekty vstoupily do zóny."
|
||||
},
|
||||
"offset": {
|
||||
"label": "Odsazení popisku",
|
||||
"documentation": "Přečtěte si dokumentaci ",
|
||||
"millisecondsToOffset": "Milisekundy pro posun zobrazení popisku detekce. <em>Výchozí: 0</em>",
|
||||
"desc": "Tato data pocházejí z detekčního zdroje vaší kamery, ale jsou překryta na snímcích ze záznamu. Je nepravděpodobné, že by tyto dva proudy byly dokonale synchronizované. Výsledkem je, že ohraničující rámeček a stopáž nebudou dokonale zarovnány. K nastavení však lze použít pole <code>annotation_offset</code>.",
|
||||
"tips": "TIP: Představte si, že existuje klip události s osobou, která jde zleva doprava. Pokud je ohraničovací rámeček na časové ose události konzistentně vlevo od osoby, měla by být hodnota snížena. Podobně, pokud osoba chodí zleva doprava a ohraničující rámeček je trvale před osobou, měla by být hodnota zvýšena."
|
||||
},
|
||||
"title": "Nastavení popisků"
|
||||
},
|
||||
"carousel": {
|
||||
"previous": "Předchozí snímek",
|
||||
"next": "Následující snímek"
|
||||
},
|
||||
"title": "Životní cyklus Objektu",
|
||||
"noImageFound": "Žádný obrázek pro toto časové razítko.",
|
||||
"createObjectMask": "Vytvořit masku objektu",
|
||||
"adjustAnnotationSettings": "Upravit nastavení poznámek",
|
||||
"scrollViewTips": "Posouváním zobrazíte významné okamžiky životního cyklu tohoto objektu.",
|
||||
"autoTrackingTips": "Pozice ohraničení bude nepřesná pro kamery s automatickým sledováním."
|
||||
},
|
||||
"itemMenu": {
|
||||
"downloadSnapshot": {
|
||||
"label": "Stáhnout snímek",
|
||||
"aria": "Stáhnout snímek"
|
||||
},
|
||||
"viewInHistory": {
|
||||
"aria": "Zobrazit v historii",
|
||||
"label": "Zobrazit historii"
|
||||
},
|
||||
"deleteTrackedObject": {
|
||||
"label": "Smazat tento sledovaný objekt"
|
||||
},
|
||||
"downloadVideo": {
|
||||
"label": "Stáhnout video",
|
||||
"aria": "Stáhnout video"
|
||||
},
|
||||
"findSimilar": {
|
||||
"aria": "Najít podobný sledovaný objekt",
|
||||
"label": "Najít podobné"
|
||||
},
|
||||
"submitToPlus": {
|
||||
"aria": "Odeslat do Frigate Plus",
|
||||
"label": "Odeslat do Frigate+"
|
||||
},
|
||||
"viewObjectLifecycle": {
|
||||
"label": "Zobrazit životní cyklus objektu",
|
||||
"aria": "Ukázat životní cyklus objektu"
|
||||
}
|
||||
},
|
||||
"dialog": {
|
||||
"confirmDelete": {
|
||||
"title": "Potvrdit smazání",
|
||||
"desc": "Odstraněním tohoto sledovaného objektu se odstraní snímek, všechna uložená vložení a všechny související položky životního cyklu objektu. Zaznamenaný záznam tohoto sledovaného objektu v zobrazení Historie <em>NEBUDE</em> smazán.<br /><br />Opravdu chcete pokračovat?"
|
||||
}
|
||||
},
|
||||
"trackedObjectDetails": "Detaily sledovaných objektů",
|
||||
"type": {
|
||||
"details": "detaily",
|
||||
"snapshot": "snímek",
|
||||
"video": "video",
|
||||
"object_lifecycle": "životní cyklus objektu"
|
||||
},
|
||||
"noTrackedObjects": "Žádné sledované objekty nebyly nalezeny",
|
||||
"fetchingTrackedObjectsFailed": "Chyba při načítání sledovaných objektů: {{errorMessage}}"
|
||||
}
|
||||
|
||||
@@ -1 +1,102 @@
|
||||
{}
|
||||
{
|
||||
"imageEntry": {
|
||||
"dropInstructions": "Přetáhněte obrázek zde, nebo klikněte na výběr",
|
||||
"maxSize": "Maximální velikost: {{size}}MB",
|
||||
"dropActive": "Přetáhněte obrázek zde…",
|
||||
"validation": {
|
||||
"selectImage": "Prosím vyberte soubor obrázků."
|
||||
}
|
||||
},
|
||||
"createFaceLibrary": {
|
||||
"new": "Vytvořit nový obličej",
|
||||
"desc": "Vytvořit novou kolekci",
|
||||
"nextSteps": "Chcete-li vybudovat pevný základ:<li>Použijte kartu Trénování k výběru a trénování na snímcích pro každou detekovanou osobu.</li><li>Pro nejlepší výsledky se zaměřte na přímé snímky; vyhněte se trénování snímků, které zachycují obličeje pod úhlem.</li></ul>",
|
||||
"title": "Vytvořit kolekci"
|
||||
},
|
||||
"details": {
|
||||
"unknown": "Neznámý",
|
||||
"person": "Osoba",
|
||||
"face": "Detaily tváře",
|
||||
"subLabelScore": "Skóre dílčího popisku",
|
||||
"scoreInfo": "Skóre dílčího popisku je vážené skóre všech jistot rozpoznání obličejů, ale to může být odlišné od skóre zobrazeného na snímku.",
|
||||
"faceDesc": "Podrobnosti o sledovaném objektu, který vygeneroval tuto tvář",
|
||||
"timestamp": "Časové razítko"
|
||||
},
|
||||
"selectFace": "Vyberte tvář",
|
||||
"deleteFaceAttempts": {
|
||||
"title": "Odstranit obličeje",
|
||||
"desc_one": "Skutečně chcete vymazat {{count}} obličej? Tato akce je nevratná.",
|
||||
"desc_few": "Skutečně chcete vymazat {{count}} obličeje? Tato akce je nevratná.",
|
||||
"desc_other": "Skutečně chcete vymazat {{count}} obličejů? Tato akce je nevratná."
|
||||
},
|
||||
"nofaces": "Žádné tváře",
|
||||
"pixels": "{{area}}px",
|
||||
"deleteFaceLibrary": {
|
||||
"title": "Odstranit jméno",
|
||||
"desc": "Skutečně chcete vymazat kolekci {{name}}? Toto trvale vymaže všechny přiřazené obličeje."
|
||||
},
|
||||
"train": {
|
||||
"title": "Trénovat",
|
||||
"empty": "Nejsou zde žádné předchozí pokusy o rozpoznání obličeje",
|
||||
"aria": "Vybrat trénink"
|
||||
},
|
||||
"description": {
|
||||
"addFace": "Průvodce přidáním nové kolekce do Knihovny obličejů.",
|
||||
"placeholder": "Zadejte název pro tuto kolekci",
|
||||
"invalidName": "Neplatný název. Názvy mohou obsahovat pouze písmena, čísla, mezery, apostrofy, podtržítka a pomlčky."
|
||||
},
|
||||
"documentTitle": "Knihovna obličejů - Frigate",
|
||||
"uploadFaceImage": {
|
||||
"title": "Nahrát obrázek obličeje",
|
||||
"desc": "Nahrajte obrázek pro skenování tváří a zahrňte jej pro {{pageToggle}}"
|
||||
},
|
||||
"button": {
|
||||
"deleteFaceAttempts": "Odstranění obličeje",
|
||||
"addFace": "Přidat obličej",
|
||||
"renameFace": "Přejmenovat obličej",
|
||||
"deleteFace": "Odstranit obličej",
|
||||
"uploadImage": "Nahrát obrázek",
|
||||
"reprocessFace": "Přepracovat Obličej"
|
||||
},
|
||||
"trainFace": "Trénovat obličej",
|
||||
"selectItem": "Vyberte {{item}}",
|
||||
"renameFace": {
|
||||
"title": "Přejmenovat obličej",
|
||||
"desc": "Zadejte nový název pro {{name}}"
|
||||
},
|
||||
"readTheDocs": "Přečtěte si dokumentaci",
|
||||
"toast": {
|
||||
"success": {
|
||||
"renamedFace": "Úspěšně přejmenovaný obličej na {{name}}",
|
||||
"trainedFace": "Úspěšně vytrénovaný obličej.",
|
||||
"uploadedImage": "Úspěšně nahraný obrázek.",
|
||||
"deletedFace_one": "Úspěšně odstraněna {{count}} tvář.",
|
||||
"deletedFace_few": "Úspěšně odstraněny {{count}} tváře.",
|
||||
"deletedFace_other": "Úspěšně odstraněny {{count}} tváře.",
|
||||
"deletedName_one": "{{count}} obličej byl úspěšně odstraněn.",
|
||||
"deletedName_few": "{{count}} tváře byly úspěšně odstraněny.",
|
||||
"deletedName_other": "{{count}} tváře byly úspěšně odstraněny.",
|
||||
"updatedFaceScore": "Úspěšně aktualizováno skóre obličeje.",
|
||||
"addFaceLibrary": "{{name}} byl(a) úspěšně přidán(a) do Knihovny obličejů!"
|
||||
},
|
||||
"error": {
|
||||
"renameFaceFailed": "Chyba při přejmenování obličeje: {{errorMessage}}",
|
||||
"trainFailed": "Chyba trénování: {{errorMessage}}",
|
||||
"updateFaceScoreFailed": "Chyba aktualizace skóre obličeje: {{errorMessage}}",
|
||||
"deleteFaceFailed": "Chyba při mazání: {{errorMessage}}",
|
||||
"uploadingImageFailed": "Chyba při nahrávání obrázku: {{errorMessage}}",
|
||||
"addFaceLibraryFailed": "Nepodařilo se nastavit jméno obličeje: {{errorMessage}}",
|
||||
"deleteNameFailed": "Chyba při mazání jména: {{errorMessage}}"
|
||||
}
|
||||
},
|
||||
"steps": {
|
||||
"nextSteps": "Další kroky",
|
||||
"faceName": "Zadejte název obličeje",
|
||||
"uploadFace": "Nahrát obrázek obličeje",
|
||||
"description": {
|
||||
"uploadFace": "Pro {{name}} nahrajte obrázek, který zobrazuje jeho obličej zepředu. Obrázek nemusí být oříznut pouze na jeho obličej."
|
||||
}
|
||||
},
|
||||
"collections": "Kolekce",
|
||||
"trainFaceAs": "Trénovat Obličej jako:"
|
||||
}
|
||||
|
||||
@@ -1 +1,158 @@
|
||||
{}
|
||||
{
|
||||
"documentTitle": "Živě - Frigate",
|
||||
"documentTitle.withCamera": "{{camera}}-Živě-Frigate",
|
||||
"lowBandwidthMode": "Režim nízké šířky pásma",
|
||||
"twoWayTalk": {
|
||||
"enable": "Povolit obousměrný hovor",
|
||||
"disable": "Zakázat obousměrný hovor"
|
||||
},
|
||||
"cameraAudio": {
|
||||
"enable": "Povolit zvuk kamery",
|
||||
"disable": "Zakázat zvuk kamery"
|
||||
},
|
||||
"ptz": {
|
||||
"move": {
|
||||
"clickMove": {
|
||||
"label": "Klikněte do snímku pro vycentrování kamery",
|
||||
"enable": "Povolit pohyb kliknutím",
|
||||
"disable": "Zakázat pohyb kliknutím"
|
||||
},
|
||||
"left": {
|
||||
"label": "Posunot PTZ kameru do leva"
|
||||
},
|
||||
"up": {
|
||||
"label": "Posunot PTZ kameru nahoru"
|
||||
},
|
||||
"down": {
|
||||
"label": "Posunot PTZ kameru dolů"
|
||||
},
|
||||
"right": {
|
||||
"label": "Posunot PTZ kameru do prava"
|
||||
}
|
||||
},
|
||||
"zoom": {
|
||||
"in": {
|
||||
"label": "Přiblížit PTZ kameru"
|
||||
},
|
||||
"out": {
|
||||
"label": "Oddálit PTZ kameru"
|
||||
}
|
||||
},
|
||||
"frame": {
|
||||
"center": {
|
||||
"label": "Klikněte do snímku pro vycentrování PTZ kamery"
|
||||
}
|
||||
},
|
||||
"presets": "Předvolby PTZ kamery"
|
||||
},
|
||||
"camera": {
|
||||
"enable": "Povolit kameru",
|
||||
"disable": "Zakázat kameru"
|
||||
},
|
||||
"muteCameras": {
|
||||
"enable": "Ztlumit všechny kamery",
|
||||
"disable": "Zrušit ztlumení u všech kamer"
|
||||
},
|
||||
"detect": {
|
||||
"enable": "Povolit detekci",
|
||||
"disable": "Zakázat detekci"
|
||||
},
|
||||
"recording": {
|
||||
"enable": "Povolit nahrávání",
|
||||
"disable": "Zakázat nahrávání"
|
||||
},
|
||||
"snapshots": {
|
||||
"enable": "Povolit vytváření snímků",
|
||||
"disable": "Zakázat vytváření snímků"
|
||||
},
|
||||
"audioDetect": {
|
||||
"enable": "Povolit detekci zvuků",
|
||||
"disable": "Zakázat detekci zvuků"
|
||||
},
|
||||
"autotracking": {
|
||||
"enable": "Povolit automatické sledování",
|
||||
"disable": "Zakázat automatické sledování"
|
||||
},
|
||||
"streamStats": {
|
||||
"disable": "Skrýt statistiky streamu",
|
||||
"enable": "Ukázat statistiky streamu"
|
||||
},
|
||||
"manualRecording": {
|
||||
"title": "Nahrávání na vyžádání",
|
||||
"playInBackground": {
|
||||
"label": "Přehrát na pozadí",
|
||||
"desc": "Povolte tuto volbu pro pokračování streamování i když je přehrávač skrytý."
|
||||
},
|
||||
"showStats": {
|
||||
"label": "Ukázat statistiky",
|
||||
"desc": "Povolte tuto možnost pro zobrazení překryvných statistik v obraze streamu."
|
||||
},
|
||||
"debugView": "Náhled ladění",
|
||||
"start": "Spustit nahrávání na vyžádání",
|
||||
"failedToStart": "Chyba manuálního spuštění nahrávání na požádání.",
|
||||
"end": "Konec nahrávání na vyžádání",
|
||||
"failedToEnd": "Chyba ukončení manuálního nahrávání na vyžádání.",
|
||||
"started": "Manuálně spuštěno nahrávání na požádání.",
|
||||
"ended": "Ukončeno manuální nahrávání na vyžádání.",
|
||||
"recordDisabledTips": "Protože je v konfiguraci této kamery nahrávání zakázáno nebo omezeno, bude uložen pouze snímek.",
|
||||
"tips": "Spustit ruční událost na základě nastavení uchovávání záznamů této kamery."
|
||||
},
|
||||
"streamingSettings": "Nastavení Streamování",
|
||||
"audio": "Zvuk",
|
||||
"suspend": {
|
||||
"forTime": "Pozastavení na: "
|
||||
},
|
||||
"stream": {
|
||||
"title": "Stream",
|
||||
"audio": {
|
||||
"tips": {
|
||||
"title": "Zvuk musí být kamerou vysílán a nakonfigurován v go2rtc pro tento stream.",
|
||||
"documentation": "Přečtěte si dokumentaci "
|
||||
},
|
||||
"available": "Zvuk je dostupný pro tento stream",
|
||||
"unavailable": "Zvuk není dostupný pro tento stream"
|
||||
},
|
||||
"twoWayTalk": {
|
||||
"tips.documentation": "Přečtěte si dokumentaci ",
|
||||
"available": "Obousměrný hovor je dostupný pro tento stream",
|
||||
"unavailable": "Obousměrný hovor není dostupný pro tento stream",
|
||||
"tips": "Vaše zařízení musí tuto funkci podporovat a WebRTC musí být nakonfigurováno pro obousměrnou komunikaci."
|
||||
},
|
||||
"lowBandwidth": {
|
||||
"resetStream": "Resetovat stream",
|
||||
"tips": "Živý náhled je v režimu nízké přenosové rychlosti kvůli vyrovnávací paměti nebo chybám ve streamu."
|
||||
},
|
||||
"playInBackground": {
|
||||
"label": "Přehrát na pozadí",
|
||||
"tips": "Povolte tuto volbu pro pokračování streamování i když je přehrávač skrytý."
|
||||
}
|
||||
},
|
||||
"cameraSettings": {
|
||||
"title": "{{camera}} Nastavení",
|
||||
"cameraEnabled": "Kamera Povolena",
|
||||
"objectDetection": "Detekce Objektu",
|
||||
"snapshots": "Snímky",
|
||||
"audioDetection": "Detekce Zvuku",
|
||||
"autotracking": "Automatické sledování",
|
||||
"recording": "Nahrávání"
|
||||
},
|
||||
"history": {
|
||||
"label": "Zobrazit historické záznamy"
|
||||
},
|
||||
"effectiveRetainMode": {
|
||||
"modes": {
|
||||
"all": "Vše",
|
||||
"motion": "Pohyb",
|
||||
"active_objects": "Aktivní Objekty"
|
||||
},
|
||||
"notAllTips": "Vaše nastavení uchovávání záznamů pro zdroj {{source}} je nastaveno na <code>režim: {{effectiveRetainMode}}</code>, takže tento záznam na vyžádání bude uchovávat pouze segmenty s režimem {{effectiveRetainModeName}}."
|
||||
},
|
||||
"editLayout": {
|
||||
"exitEdit": "Ukončit Úpravu",
|
||||
"label": "Upravit Rozložení",
|
||||
"group": {
|
||||
"label": "Upravit Skupinu Kamer"
|
||||
}
|
||||
},
|
||||
"notifications": "Notifikace"
|
||||
}
|
||||
|
||||
@@ -1,3 +1,72 @@
|
||||
{
|
||||
"search": "Hledat"
|
||||
"search": "Hledat",
|
||||
"savedSearches": "Uložená vyhledávání",
|
||||
"searchFor": "Hledat {{inputValue}}",
|
||||
"button": {
|
||||
"clear": "Vymazat vyhledávaní",
|
||||
"save": "Uložit vyhledávání",
|
||||
"delete": "Vymazat uložená vyhledávání",
|
||||
"filterInformation": "Filtrovat informace",
|
||||
"filterActive": "Aktivní filtry"
|
||||
},
|
||||
"trackedObjectId": "ID sledovaného objektu",
|
||||
"filter": {
|
||||
"label": {
|
||||
"cameras": "Kamery",
|
||||
"labels": "Štítky",
|
||||
"zones": "Zóny",
|
||||
"sub_labels": "Podružné Štítky",
|
||||
"max_speed": "Max rychlost",
|
||||
"min_speed": "Min rychlost",
|
||||
"search_type": "Typ Hledání",
|
||||
"time_range": "Časový Rozsah",
|
||||
"before": "Před",
|
||||
"after": "Po",
|
||||
"max_score": "Maximální Skóre",
|
||||
"min_score": "Minimální Skóre",
|
||||
"recognized_license_plate": "Rozpoznaná SPZ",
|
||||
"has_clip": "Má Klip",
|
||||
"has_snapshot": "Má Snímek"
|
||||
},
|
||||
"tips": {
|
||||
"desc": {
|
||||
"step1": "Zadejte název filtru následovaný dvojtečkou (např. „kamery:“).",
|
||||
"step2": "Vyberte hodnotu z nabízených možností nebo zadejte vlastní.",
|
||||
"step3": "Použijte více filtrů tak, že je přidáte jeden po druhém s mezerou mezi nimi.",
|
||||
"step4": "Datumové filtry (before: a after:) používají formát {{DateFormat}}.",
|
||||
"step6": "Odstraňte filtr kliknutím na 'x' vedle něj.",
|
||||
"exampleLabel": "Příklad:",
|
||||
"text": "Filtry vám pomohou zúžit výsledky hledání. Zde je návod, jak je používat ve vstupním poli:",
|
||||
"step5": "Pro časový rozsah použijte formát {{exampleTime}}."
|
||||
},
|
||||
"title": "Jak používat textové filtry"
|
||||
},
|
||||
"searchType": {
|
||||
"thumbnail": "Náhled",
|
||||
"description": "Popis"
|
||||
},
|
||||
"toast": {
|
||||
"error": {
|
||||
"beforeDateBeLaterAfter": "Datum 'před' musí být pozdější než datum 'po'.",
|
||||
"afterDatebeEarlierBefore": "Datum 'po' musí být dřívější než datum 'před'.",
|
||||
"minScoreMustBeLessOrEqualMaxScore": "'min_score' musí být menší nebo rovno 'max_score'.",
|
||||
"maxScoreMustBeGreaterOrEqualMinScore": "'max_score' musí být větší nebo rovno 'min_score'.",
|
||||
"minSpeedMustBeLessOrEqualMaxSpeed": "'min_speed' musí být menší nebo rovno 'max_speed'.",
|
||||
"maxSpeedMustBeGreaterOrEqualMinSpeed": "'max_speed' musí být větší nebo rovno 'min_speed'."
|
||||
}
|
||||
},
|
||||
"header": {
|
||||
"currentFilterType": "Hodnoty Filtru",
|
||||
"noFilters": "Filtry",
|
||||
"activeFilters": "Aktivní Filtry"
|
||||
}
|
||||
},
|
||||
"similaritySearch": {
|
||||
"title": "Hledání Podle Podobnosti",
|
||||
"active": "Hledání podobností aktivní",
|
||||
"clear": "Vymazat hledání podobností"
|
||||
},
|
||||
"placeholder": {
|
||||
"search": "Hledat…"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1 +1,606 @@
|
||||
{}
|
||||
{
|
||||
"documentTitle": {
|
||||
"default": "Nastavení - Frigate",
|
||||
"authentication": "Nastavení ověřování - Frigate",
|
||||
"camera": "Nastavení kamery - Frigate",
|
||||
"classification": "Nastavení klasifikace - Frigate",
|
||||
"notifications": "Nastavení notifikací - Frigate",
|
||||
"masksAndZones": "Editor masky a zón - Frigate",
|
||||
"motionTuner": "Ladič detekce pohybu - Frigate",
|
||||
"object": "Ladění - Frigate",
|
||||
"general": "Obecné nastavení - Frigate",
|
||||
"frigatePlus": "Frigate+ nastavení - Frigate"
|
||||
},
|
||||
"frigatePlus": {
|
||||
"toast": {
|
||||
"error": "Chyba při ukládání změn konfigurace: {{errorMessage}}",
|
||||
"success": "Nastavení Frigate+ byla uložena. Restartujte Frigate+ pro aplikování změn."
|
||||
},
|
||||
"modelInfo": {
|
||||
"cameras": "Kamery",
|
||||
"modelSelect": "Zde můžete vybrat dostupné modely ze služby Frigate+. Upozorňujeme, že lze zvolit pouze modely kompatibilní s aktuální konfigurací detektoru.",
|
||||
"loadingAvailableModels": "Načítám dostupné modely…",
|
||||
"plusModelType": {
|
||||
"baseModel": "Základní Model",
|
||||
"userModel": "Doladěno"
|
||||
},
|
||||
"loading": "Načítám informace o modelu…",
|
||||
"error": "Chyba načítání informací o modelu",
|
||||
"availableModels": "Dostupné Moduly",
|
||||
"supportedDetectors": "Podporované Detektory",
|
||||
"title": "Informace o Modelu",
|
||||
"modelType": "Typ Modelu",
|
||||
"trainDate": "Datum Tréninku",
|
||||
"baseModel": "Základní Model"
|
||||
},
|
||||
"snapshotConfig": {
|
||||
"documentation": "Přečtěte si dokumentaci",
|
||||
"desc": "Odesílání do Frigate+ vyžaduje, aby byly ve vaší konfiguraci povoleny jak běžné snímky, tak snímky typu <code>clean_copy</code>.",
|
||||
"title": "Nastavení Snímku",
|
||||
"table": {
|
||||
"cleanCopySnapshots": "<code>clean_copy</code> Snímky",
|
||||
"snapshots": "Snímky",
|
||||
"camera": "Kamera"
|
||||
},
|
||||
"cleanCopyWarning": "Některé kamery mají povolené snímky, ale volba <code>clean_copy</code> je zakázaná. Pro možnost odesílání snímků z těchto kamer do služby Frigate+ je nutné tuto volbu povolit v konfiguraci snímků."
|
||||
},
|
||||
"apiKey": {
|
||||
"notValidated": "API klíč Frigate+ nebyl rozpoznán nebo nebyl ověřen",
|
||||
"plusLink": "Přečtěte si více o Frigate+",
|
||||
"validated": "API klíč Frigate+ byl rozpoznán a ověřen",
|
||||
"desc": "API klíč Frigate+ umožňuje integraci se službou Frigate+.",
|
||||
"title": "Frigate+ API Klíč"
|
||||
},
|
||||
"unsavedChanges": "Neuložené změny nastavení Frigate+",
|
||||
"title": "Nastavení Frigate+",
|
||||
"restart_required": "Vyžadován restart (model Frigate+ změněn)"
|
||||
},
|
||||
"classification": {
|
||||
"unsavedChanges": "Neuložené změny nastavení klasifikací",
|
||||
"semanticSearch": {
|
||||
"readTheDocumentation": "Přečtěte si dokumentaci",
|
||||
"reindexNow": {
|
||||
"alreadyInProgress": "Reindexování je už spuštěno.",
|
||||
"label": "Reindexovat Teď",
|
||||
"confirmTitle": "Potvrdit Reindexaci",
|
||||
"error": "Chyba spouštění reindexování: {{errorMessage}}",
|
||||
"desc": "Přeindexování znovu vygeneruje vektorové reprezentace (embeddingy) pro všechny sledované objekty. Tento proces probíhá na pozadí, může plně zatížit váš procesor a v závislosti na počtu sledovaných objektů může trvat delší dobu.",
|
||||
"confirmDesc": "Opravdu chcete přeindexovat embeddingy všech sledovaných objektů? Tento proces poběží na pozadí, ale může plně vytížit procesor a trvat delší dobu. Průběh můžete sledovat na stránce Prozkoumat.",
|
||||
"confirmButton": "Reindexovat",
|
||||
"success": "Reindexování úspěšně spuštěno."
|
||||
},
|
||||
"title": "Sémantické Hledání",
|
||||
"desc": "Sémantické vyhledávání ve Frigate umožňuje najít sledované objekty ve vašich záznamech pomocí samotného obrázku, uživatelem zadaného textového popisu nebo automaticky generovaného popisu.",
|
||||
"modelSize": {
|
||||
"small": {
|
||||
"title": "malý",
|
||||
"desc": "Použití <em>malý</em> znamená využití kvantizované verze modelu, která spotřebovává méně paměti RAM a běží rychleji na procesoru, přičemž rozdíl v kvalitě embeddingů je zanedbatelný."
|
||||
},
|
||||
"large": {
|
||||
"title": "velký",
|
||||
"desc": "Volba <em>velký</em> využívá plný model Jina a automaticky se provádí na GPU, pokud je k dispozici."
|
||||
},
|
||||
"label": "Velikost Modelu",
|
||||
"desc": "Velikost modelu pro sémantické vyhledávání pomocí embeddingů."
|
||||
}
|
||||
},
|
||||
"title": "Nastavení Klasifikací",
|
||||
"birdClassification": {
|
||||
"title": "Klasifikace Ptáka",
|
||||
"desc": "Klasifikace ptáků rozpoznává známé druhy pomocí kvantizovaného modelu TensorFlow. Když je rozpoznán známý pták, jeho běžný název bude přidán jako podružný štítek (sub_label). Tato informace se zobrazí v uživatelském rozhraní, je dostupná ve filtrech a zahrnuta i v notifikacích."
|
||||
},
|
||||
"toast": {
|
||||
"error": "Chyba při ukládání změn konfigurace: {{errorMessage}}",
|
||||
"success": "Nastavení klasifikací uloženo. Restartujte Frigate pro aplikování změn."
|
||||
},
|
||||
"restart_required": "Vyžadován restart (Nastavení klasifikací se změnilo)",
|
||||
"licensePlateRecognition": {
|
||||
"title": "Rozpoznávání SPZ",
|
||||
"desc": "Frigate dokáže rozpoznávat SPZ na vozidlech a automaticky přidávat rozpoznané znaky do pole recognized_license_plate nebo známý název jako podružný štítek k objektům typu auto. Běžným případem použití je čtení SPZ aut vjíždějících na příjezdovou cestu nebo projíždějících kolem na ulici.",
|
||||
"readTheDocumentation": "Přečtěte si dokumentaci"
|
||||
},
|
||||
"faceRecognition": {
|
||||
"title": "Rozpoznávání obličeje",
|
||||
"readTheDocumentation": "Přečtěte si dokumentaci",
|
||||
"desc": "Rozpoznávání obličeje umožňuje přiřadit lidem jména, a když je jejich obličej rozpoznán, Frigate přiřadí dané jméno jako podružný štítek (sub_label). Tato informace se zobrazuje v uživatelském rozhraní, je dostupná ve filtrech a je také součástí notifikací.",
|
||||
"modelSize": {
|
||||
"label": "Velikost Modelu",
|
||||
"desc": "Velikost modelu použitého pro rozpoznávání obličeje.",
|
||||
"small": {
|
||||
"title": "malý",
|
||||
"desc": "Použití <em>malý</em> znamená využití FaceNet modelu pro embedding obličejů, který běží efektivně na většině procesorů (CPU)."
|
||||
},
|
||||
"large": {
|
||||
"title": "velký",
|
||||
"desc": "Použití <em>velký</em> znamená využití modelu ArcFace pro embedding obličejů, který se v případě dostupnosti automaticky spustí na GPU."
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"masksAndZones": {
|
||||
"zones": {
|
||||
"speedEstimation": {
|
||||
"docs": "Přečtěte si dokumentaci",
|
||||
"title": "Odhad rychlosti",
|
||||
"desc": "Povolit odhad rychlosti pro objekty v této zóně. Zóna musí mít přesně 4 body."
|
||||
},
|
||||
"name": {
|
||||
"inputPlaceHolder": "Zadejte jméno…",
|
||||
"title": "Jméno",
|
||||
"tips": "Název musí mít alespoň 2 znaky a nesmí být shodný s názvem kamery nebo jiné zóny."
|
||||
},
|
||||
"inertia": {
|
||||
"title": "Setrvačnost",
|
||||
"desc": "Určuje, po kolika snímcích strávených v zóně je objekt považován za přítomný v této zóně.<em>Výchozí hodnota: 3</em>"
|
||||
},
|
||||
"loiteringTime": {
|
||||
"title": "Doba setrvání",
|
||||
"desc": "Nastavuje minimální dobu v sekundách, po kterou musí být objekt v zóně, aby došlo k aktivaci.<em>Výchozí hodnota: 0</em>"
|
||||
},
|
||||
"objects": {
|
||||
"title": "Objekty",
|
||||
"desc": "Seznam objektů, na které se tato zóna vztahuje."
|
||||
},
|
||||
"allObjects": "Všechny Objekty",
|
||||
"speedThreshold": {
|
||||
"title": "Práh rychlosti ({{unit}})",
|
||||
"desc": "Určuje minimální rychlost, při které jsou objekty v této zóně zohledněny.",
|
||||
"toast": {
|
||||
"error": {
|
||||
"pointLengthError": "Odhad rychlosti byl pro tuto zónu deaktivován. Zóny s odhadem rychlosti musí mít přesně 4 body.",
|
||||
"loiteringTimeError": "Pokud má zóna nastavenou dobu setrvání větší než 0, nedoporučuje se používat odhad rychlosti."
|
||||
}
|
||||
}
|
||||
},
|
||||
"toast": {
|
||||
"success": "Zóna {{zoneName}} byla uložena. Restartujte Frigate pro aplikování změn."
|
||||
},
|
||||
"label": "Zóny",
|
||||
"desc": {
|
||||
"title": "Zóny umožňují definovat konkrétní oblast v záběru, díky čemuž lze určit, zda se objekt nachází v dané oblasti či nikoliv.",
|
||||
"documentation": "Dokumentace"
|
||||
},
|
||||
"add": "Přidat Zónu",
|
||||
"edit": "Upravit Zónu",
|
||||
"documentTitle": "Upravit Zónu - Frigate",
|
||||
"clickDrawPolygon": "Klikněte pro kreslení polygonu na obrázku.",
|
||||
"point_one": "{{count}} bod",
|
||||
"point_few": "{{count}} body",
|
||||
"point_other": "{{count}} bodů"
|
||||
},
|
||||
"motionMasks": {
|
||||
"context": {
|
||||
"documentation": "Přečtěte si dokumentaci",
|
||||
"title": "Masky detekce pohybu slouží k zabránění tomu, aby nežádoucí typy pohybu spouštěly detekci (například větve stromů nebo časové značky kamery). Masky detekce pohybu by se měly používat <em>velmi střídmě</em> – příliš rozsáhlé maskování může ztížit sledování objektů."
|
||||
},
|
||||
"polygonAreaTooLarge": {
|
||||
"documentation": "Přečtěte si dokumentaci",
|
||||
"title": "Maska detekce pohybu pokrývá {{polygonArea}}% záběru kamery. Příliš velké masky detekce pohybu nejsou doporučovány.",
|
||||
"tips": "Masky detekce pohybu nebrání detekci objektů. Místo toho byste měli použít požadovanou zónu."
|
||||
},
|
||||
"documentTitle": "Editovat Masku Detekce pohybu - Frigate",
|
||||
"desc": {
|
||||
"title": "Masky detekce pohybu slouží k zabránění nežádoucím typům pohybu ve spuštění detekce. Příliš rozsáhlé maskování však může ztížit sledování objektů.",
|
||||
"documentation": "Dokumentace"
|
||||
},
|
||||
"label": "Maska Detekce pohybu",
|
||||
"add": "Nová Maska Detekce pohybu",
|
||||
"edit": "Upravit Masku Detekce pohybu",
|
||||
"point_one": "{{count}} bod",
|
||||
"point_few": "{{count}} body",
|
||||
"point_other": "{{count}} bodů",
|
||||
"clickDrawPolygon": "Kliknutím nakreslíte polygon do obrázku.",
|
||||
"toast": {
|
||||
"success": {
|
||||
"title": "{{polygonName}} byl uložen. Restartujte Frigate pro aplikování změn.",
|
||||
"noName": "Maska Detekce pohybu byla uložena. Restartujte Frigate pro aplikování změn."
|
||||
}
|
||||
}
|
||||
},
|
||||
"filter": {
|
||||
"all": "Všechny Masky a Zóny"
|
||||
},
|
||||
"restart_required": "Vyžadován restart (masky/zóny byly změněny)",
|
||||
"toast": {
|
||||
"error": {
|
||||
"copyCoordinatesFailed": "Nemohu zkopírovat souřadnice do schránky."
|
||||
},
|
||||
"success": {
|
||||
"copyCoordinates": "Souřadnice pro {{polyName}} zkopírovány do schránky."
|
||||
}
|
||||
},
|
||||
"form": {
|
||||
"zoneName": {
|
||||
"error": {
|
||||
"hasIllegalCharacter": "Název zóny obsahuje zakázané znaky.",
|
||||
"mustNotBeSameWithCamera": "Název Zóny nesmí být stejný jako název kamery.",
|
||||
"mustNotContainPeriod": "Název zóny nesmí obsahovat tečky.",
|
||||
"alreadyExists": "Zóna se stejným názvem u této kamery již existuje.",
|
||||
"mustBeAtLeastTwoCharacters": "Název Zóny musí mít minimálně 2 znaky."
|
||||
}
|
||||
},
|
||||
"inertia": {
|
||||
"error": {
|
||||
"mustBeAboveZero": "Setrvačnost musí být větší než 0."
|
||||
}
|
||||
},
|
||||
"polygonDrawing": {
|
||||
"snapPoints": {
|
||||
"true": "Přichytávat body",
|
||||
"false": "Nepřichytávat body"
|
||||
},
|
||||
"delete": {
|
||||
"title": "Potvrdit Smazání",
|
||||
"desc": "Opravdu chcete smazat {{type}}<em>{{name}}</em>?",
|
||||
"success": "{{name}} bylo smazáno."
|
||||
},
|
||||
"error": {
|
||||
"mustBeFinished": "Kreslení polygonu musí být před uložením dokončeno."
|
||||
},
|
||||
"reset": {
|
||||
"label": "Vymazat všechny body"
|
||||
},
|
||||
"removeLastPoint": "Odebrat poslední bod"
|
||||
},
|
||||
"distance": {
|
||||
"error": {
|
||||
"mustBeFilled": "Pro použití odhadu rychlosti musí být vyplněna všechna pole pro vzdálenost.",
|
||||
"text": "Vzdálenost musí být větší nebo rovna 0.1."
|
||||
}
|
||||
},
|
||||
"loiteringTime": {
|
||||
"error": {
|
||||
"mustBeGreaterOrEqualZero": "Doba setrvání musí být větší nebo rovna nule."
|
||||
}
|
||||
}
|
||||
},
|
||||
"objectMasks": {
|
||||
"label": "Masky Objektu",
|
||||
"documentTitle": "Upravit Masku Objektu - Frigate",
|
||||
"desc": {
|
||||
"documentation": "Dokumentace",
|
||||
"title": "Masky filtrování objektů slouží k odfiltrování falešných detekcí daného typu objektu na základě jeho umístění."
|
||||
},
|
||||
"add": "Přidat Masku Objektu",
|
||||
"edit": "Upravit Masku Objektu",
|
||||
"objects": {
|
||||
"title": "Objekty",
|
||||
"allObjectTypes": "Všechny typy objektů",
|
||||
"desc": "Typ objektu, na který se tato maska objektu vztahuje."
|
||||
},
|
||||
"context": "Masky filtrování objektů slouží k odfiltrování falešných poplachů konkrétního typu objektu na základě jeho umístění.",
|
||||
"clickDrawPolygon": "Kliknutím nakreslete polygon do obrázku.",
|
||||
"toast": {
|
||||
"success": {
|
||||
"title": "{{polygonName}} byl uložen. Restartujte Frigate pro aplikování změn.",
|
||||
"noName": "Maska Objektu byla uložena. Restartujte Frigate pro aplikování změn."
|
||||
}
|
||||
},
|
||||
"point_one": "{{count}} bod",
|
||||
"point_few": "{{count}} body",
|
||||
"point_other": "{{count}} bodů"
|
||||
}
|
||||
},
|
||||
"menu": {
|
||||
"ui": "Uživatelské rozhraní",
|
||||
"classification": "Klasifikace",
|
||||
"cameras": "Nastavení kamery",
|
||||
"masksAndZones": "Masky / Zóny",
|
||||
"motionTuner": "Ladič detekce pohybu",
|
||||
"debug": "Ladění",
|
||||
"users": "Uživatelé",
|
||||
"notifications": "Notifikace",
|
||||
"frigateplus": "Frigate +"
|
||||
},
|
||||
"dialog": {
|
||||
"unsavedChanges": {
|
||||
"title": "Máte neuložené změny.",
|
||||
"desc": "Přejete si uložit změny před pokračováním?"
|
||||
}
|
||||
},
|
||||
"cameraSetting": {
|
||||
"camera": "Kamera",
|
||||
"noCamera": "Žádná Kamera"
|
||||
},
|
||||
"general": {
|
||||
"title": "Hlavní nastavení",
|
||||
"liveDashboard": {
|
||||
"title": "Živý Dashboard",
|
||||
"automaticLiveView": {
|
||||
"desc": "Při detekci aktivity se automaticky přepne na živý náhled kamery. Vypnutí této možnosti způsobí, že se statické snímky z kamery na ovládacím panelu Live aktualizují pouze jednou za minutu.",
|
||||
"label": "Automatický živý náhled"
|
||||
},
|
||||
"playAlertVideos": {
|
||||
"label": "Přehrát videa s výstrahou",
|
||||
"desc": "Ve výchozím nastavení se nedávná upozornění na ovládacím panelu Živě přehrávají jako malá opakující se videa. Vypněte tuto možnost, chcete-li na tomto zařízení/prohlížeči zobrazovat pouze statický obrázek nedávných výstrah."
|
||||
}
|
||||
},
|
||||
"storedLayouts": {
|
||||
"title": "Uložené rozložení",
|
||||
"desc": "Rozložení kamer ve skupině kamer lze přetáhnout nebo jim změnit velikost. Pozice jsou uloženy v místním úložišti vašeho prohlížeče.",
|
||||
"clearAll": "Smazat všechna rozložení"
|
||||
},
|
||||
"cameraGroupStreaming": {
|
||||
"title": "Nastavení streamování skupiny kamer",
|
||||
"desc": "Nastavení streamování pro každou kameru je uloženo v místním uložišti vašeho prohlížeče.",
|
||||
"clearAll": "Vymazat všechna nastavení streamování"
|
||||
},
|
||||
"recordingsViewer": {
|
||||
"title": "Prohlížeč Nahrávek",
|
||||
"defaultPlaybackRate": {
|
||||
"label": "Výchozí Rychlost Přehrávání",
|
||||
"desc": "Výchozí rychlost přehrávání pro nahrávky."
|
||||
}
|
||||
},
|
||||
"calendar": {
|
||||
"title": "Kalendář",
|
||||
"firstWeekday": {
|
||||
"label": "První den týdne",
|
||||
"desc": "Den, kterým bude začínat týden v kalendáři kontrol.",
|
||||
"sunday": "Neděle",
|
||||
"monday": "Pondělí"
|
||||
}
|
||||
},
|
||||
"toast": {
|
||||
"success": {
|
||||
"clearStoredLayout": "Vymazáno uložené rozvržení pro kameru {{cameraName}}",
|
||||
"clearStreamingSettings": "Vymazány nastavení streamování pro všechny skupiny kamer."
|
||||
},
|
||||
"error": {
|
||||
"clearStoredLayoutFailed": "Chyba mazání uloženého rozvržení: {{errorMessage}}",
|
||||
"clearStreamingSettingsFailed": "Chyba mazání nastavení streamování: {{errorMessage}}"
|
||||
}
|
||||
}
|
||||
},
|
||||
"debug": {
|
||||
"timestamp": {
|
||||
"title": "Časové razítko",
|
||||
"desc": "Překrýt obrázek časovým razítkem"
|
||||
},
|
||||
"regions": {
|
||||
"title": "Regiony",
|
||||
"desc": "Zobrazit rámeček oblasti zájmu odesílané detektoru objektů",
|
||||
"tips": "<p><strong>Boxy oblastí zájmu</strong></p><br><p>Jasně zelené boxy budou překryty na oblastech zájmu ve snímku, které jsou odesílány detektoru objektů.</p>"
|
||||
},
|
||||
"title": "Ladit",
|
||||
"detectorDesc": "Frigate používá vaše detektory {{detectors}} k detekci objektů ve streamu vašich kamer.",
|
||||
"objectList": "Seznam Objektů",
|
||||
"boundingBoxes": {
|
||||
"title": "Ohraničující rámečky",
|
||||
"desc": "Zobrazit ohraničující rámečky okolo sledovaných objektů",
|
||||
"colors": {
|
||||
"label": "Barvy Ohraničujících Rámečků Objektů",
|
||||
"info": "<li>Při spuštění bude každému objektovému štítku přiřazena jiná barva.</li><li>Tenká tmavě modrá čára označuje, že objekt není v daném okamžiku detekován.</li><li>Tenká šedá čára znamená, že objekt je detekován jako nehybný.</li><li>Silná čára označuje, že objekt je aktuálně sledován pomocí automatického sledování (pokud je aktivováno).</li>"
|
||||
}
|
||||
},
|
||||
"zones": {
|
||||
"title": "Zóny",
|
||||
"desc": "Zobrazit obrys všech definovaných zón"
|
||||
},
|
||||
"mask": {
|
||||
"title": "Masky detekce pohybu",
|
||||
"desc": "Zobrazit polygony masek detekce pohybu"
|
||||
},
|
||||
"debugging": "Ledění",
|
||||
"desc": "Ladicí zobrazení ukazuje sledované objekty a jejich statistiky v reálném čase. Seznam objektů zobrazuje časově zpožděný přehled detekovaných objektů.",
|
||||
"motion": {
|
||||
"title": "Rámečky detekce pohybu",
|
||||
"desc": "Zobrazit rámečky okolo oblastí, kde byl detekován pohyb",
|
||||
"tips": "<p><strong>Boxy pohybu</strong></p><br><p>Červené boxy budou překryty na místech snímku, kde je právě detekován pohyb.</p>"
|
||||
},
|
||||
"noObjects": "Žádné objekty",
|
||||
"objectShapeFilterDrawing": {
|
||||
"title": "Kreslení Filtru Tvaru Objektu",
|
||||
"desc": "Nakreslete na obrázek obdélník pro zobrazení informací o ploše a poměru stran",
|
||||
"tips": "Povolte tuto možnost pro nakreslení obdélníku na obraz kamery, který zobrazí jeho plochu a poměr stran. Tyto hodnoty pak můžete použít pro nastavení parametrů tvarového filtru objektu ve vaší konfiguraci.",
|
||||
"document": "Přečtěte si dokumentaci ",
|
||||
"score": "Skóre",
|
||||
"ratio": "Poměr",
|
||||
"area": "Oblast"
|
||||
}
|
||||
},
|
||||
"camera": {
|
||||
"streams": {
|
||||
"title": "Streamy",
|
||||
"desc": "Deaktivace kamery zcela zastaví zpracování jejích streamů ve Frigate. Detekce, nahrávání ani ladění nebudou dostupné.<br/><em>Poznámka: Tímto nedojde k deaktivaci restreamů v go2rtc.</em>"
|
||||
},
|
||||
"review": {
|
||||
"desc": "Povolte nebo zakažte upozornění a detekce pro tuto kameru. Pokud jsou vypnuté, nebudou se vytvářet žádné nové položky k přezkoumání.",
|
||||
"detections": "Detekce ",
|
||||
"title": "Revize",
|
||||
"alerts": "Výstrahy "
|
||||
},
|
||||
"reviewClassification": {
|
||||
"readTheDocumentation": "Přečtěte si dokumentaci",
|
||||
"desc": "Frigate rozděluje položky k přezkoumání na Upozornění a Detekce. Ve výchozím nastavení jsou všechny objekty typu <em>osoba</em> a <em>auto</em> považovány za Upozornění. Kategorizaci těchto položek můžete upřesnit nastavením požadovaných zón.",
|
||||
"title": "Přehled klasifikace",
|
||||
"objectAlertsTips": "Všechny {{alertsLabels}} objekty na {{cameraName}} budou zobrazeny ve Výstrahách.",
|
||||
"objectDetectionsTips": "Všechny objekty typu {{detectionsLabels}}, které nejsou na kameře {{cameraName}} zařazeny do kategorie, budou zobrazeny jako Detekce bez ohledu na to, ve které zóně se nacházejí.",
|
||||
"zoneObjectDetectionsTips": {
|
||||
"notSelectDetections": "Všechny objekty typu {{detectionsLabels}} detekované v zóně {{zone}} na kameře {{cameraName}}, které nejsou zařazeny jako Upozornění, budou zobrazeny jako Detekce – bez ohledu na to, ve které zóně se nacházejí.",
|
||||
"text": "Všechny objekty typu {{detectionsLabels}}, které nejsou v zóně {{zone}} na kameře {{cameraName}} zařazeny do kategorie, budou zobrazeny jako Detekce.",
|
||||
"regardlessOfZoneObjectDetectionsTips": "Všechny objekty {{detectionsLabels}}, které nejsou na kameře {{cameraName}} zařazeny do žádné kategorie, budou zobrazeny jako Detekce – bez ohledu na zónu, ve které se nacházejí."
|
||||
},
|
||||
"noDefinedZones": "Nejsou nastaveny žádné zóny pro tuto kameru.",
|
||||
"zoneObjectAlertsTips": "Všechny {{alertsLabels}} objekty detekované v {{zone}} na {{cameraName}} budou zobrazeny ve Výstrahách.",
|
||||
"unsavedChanges": "Neuložené nastavení revize klasifikace pro {{camera}}",
|
||||
"selectAlertsZones": "Vybrat zóny pro Výstrahy",
|
||||
"selectDetectionsZones": "Vybrat zóny pro Detekce",
|
||||
"toast": {
|
||||
"success": "Konfigurace Revizí Klasifikací byla uložena. Restartujte Frigate pro aplikování změn."
|
||||
},
|
||||
"limitDetections": "Omezit detekce pro specifické zóny"
|
||||
},
|
||||
"title": "Nastavení Kamery"
|
||||
},
|
||||
"notification": {
|
||||
"notificationSettings": {
|
||||
"documentation": "Přečtěte si dokumentaci",
|
||||
"title": "Nastavení notifikací",
|
||||
"desc": "Frigate může nativně odesílat push notifikace do vašeho zařízení, pokud běží v prohlížeči nebo je nainstalován jako PWA (progresivní webová aplikace)."
|
||||
},
|
||||
"notificationUnavailable": {
|
||||
"documentation": "Přečtěte si dokumentaci",
|
||||
"title": "Notifikace Nedostupné",
|
||||
"desc": "Webové push notifikace vyžadují zabezpečený kontext (<code>https://…</code>). Jedná se o omezení prohlížeče. Pro použití notifikací přistupujte k Frigate přes zabezpečené připojení."
|
||||
},
|
||||
"cameras": {
|
||||
"title": "Kamery",
|
||||
"desc": "Vyberte kamery, pro které chcete povolit notifikace.",
|
||||
"noCameras": "Žádné dostupné kamery"
|
||||
},
|
||||
"title": "Notifikace",
|
||||
"email": {
|
||||
"placeholder": "např. example@email.com",
|
||||
"title": "Email",
|
||||
"desc": "Je vyžadována platná e-mailová adresa, která bude použita k upozornění v případě problémů se službou push notifikací."
|
||||
},
|
||||
"registerDevice": "Registrovat Toto Zařízení",
|
||||
"deviceSpecific": "Nastavení Specifická pro Zařízení",
|
||||
"unregisterDevice": "Odregistrovat Toto Zařízení",
|
||||
"sendTestNotification": "Poslat testovací notifikaci",
|
||||
"unsavedRegistrations": "Neuložené přihlášky k Notifikacím",
|
||||
"unsavedChanges": "Neuložené změny Notifikací",
|
||||
"globalSettings": {
|
||||
"desc": "Dočasně pozastavit notifikace pro vybrané kamery na všech registrovaných zařízeních.",
|
||||
"title": "Globální nastavení"
|
||||
},
|
||||
"active": "Notifikace Aktivní",
|
||||
"suspendTime": {
|
||||
"suspend": "Pozastavit",
|
||||
"12hours": "Pozastavit na 12 hodin",
|
||||
"24hours": "Pozastavit na 24 hodin",
|
||||
"untilRestart": "Pozastavit do restartu",
|
||||
"5minutes": "Pozastavit na 5 minut",
|
||||
"10minutes": "Pozastavit na 10 minut",
|
||||
"30minutes": "Pozastavit na 30 minut",
|
||||
"1hour": "Pozastavit na 1 hodinu"
|
||||
},
|
||||
"toast": {
|
||||
"error": {
|
||||
"registerFailed": "Nepodařilo se uložit registraci notifikací."
|
||||
},
|
||||
"success": {
|
||||
"registered": "Notifikace byly úspěšně zaregistrovány. Pro odesílání notifikací (včetně testovací) je nutné Frigate restartovat.",
|
||||
"settingSaved": "Nastavení notifikací bylo uloženo."
|
||||
}
|
||||
},
|
||||
"cancelSuspension": "Zrušit Pozastavení",
|
||||
"suspended": "Notifikace pozastaveny {{time}}"
|
||||
},
|
||||
"users": {
|
||||
"dialog": {
|
||||
"form": {
|
||||
"password": {
|
||||
"strength": {
|
||||
"weak": "Slabé",
|
||||
"medium": "Střední",
|
||||
"strong": "Silné",
|
||||
"veryStrong": "Velmi Silné",
|
||||
"title": "Síla hesla: "
|
||||
},
|
||||
"match": "Hesla souhlasí",
|
||||
"notMatch": "Hesla nesouhlasí",
|
||||
"title": "Heslo",
|
||||
"placeholder": "Vložit heslo",
|
||||
"confirm": {
|
||||
"title": "Potvrdit heslo",
|
||||
"placeholder": "Potvrdit heslo"
|
||||
}
|
||||
},
|
||||
"newPassword": {
|
||||
"placeholder": "Vložte nové heslo",
|
||||
"title": "Nové Heslo",
|
||||
"confirm": {
|
||||
"placeholder": "Zopakujte nové heslo"
|
||||
}
|
||||
},
|
||||
"usernameIsRequired": "Uživatelské jméno je nutné",
|
||||
"user": {
|
||||
"title": "Uživatelské jméno",
|
||||
"desc": "Povolena jsou pouze písmena, čísla, tečky a podtržítka.",
|
||||
"placeholder": "Vložte uživatelské jméno"
|
||||
}
|
||||
},
|
||||
"createUser": {
|
||||
"title": "Vytvořit nového uživatele",
|
||||
"desc": "Přidejte nový uživatelský účet a zadejte roli pro určení přístupu k jednotlivým částem uživatelského rozhraní Frigate.",
|
||||
"usernameOnlyInclude": "Uživatelské jméno smí obsahovat pouze písmena, čísla, . nebo _"
|
||||
},
|
||||
"deleteUser": {
|
||||
"title": "Smazat Uživatele",
|
||||
"desc": "Tuto akci nelze vrátit zpět. Uživatelský účet bude trvale smazán a veškerá s ním spojená data budou odstraněna.",
|
||||
"warn": "Opravdu chcete smazat <strong>{{username}}</strong>?"
|
||||
},
|
||||
"changeRole": {
|
||||
"roleInfo": {
|
||||
"intro": "Vyberte odpovídající roli pro tohoto uživatele:",
|
||||
"admin": "Správce",
|
||||
"adminDesc": "Plný přístup ke všem funkcím.",
|
||||
"viewer": "Divák",
|
||||
"viewerDesc": "Omezení pouze na Živé dashboardy, Revize, Průzkumníka a Exporty."
|
||||
},
|
||||
"title": "Změnit Roli Uživatele",
|
||||
"desc": "Aktualizovat oprávnění pro <strong>{{username}}</strong>"
|
||||
},
|
||||
"passwordSetting": {
|
||||
"updatePassword": "Aktualizovat heslo pro uživatele {{username}}",
|
||||
"setPassword": "Nastavit Heslo",
|
||||
"desc": "Vytvořte silné heslo pro zabezpečení tohoto účtu."
|
||||
}
|
||||
},
|
||||
"table": {
|
||||
"username": "Uživatelské jméno",
|
||||
"actions": "Akce",
|
||||
"noUsers": "Žádní uživatelé nebyli nalezeni.",
|
||||
"changeRole": "Změnit roli uživatele",
|
||||
"password": "Heslo",
|
||||
"deleteUser": "Smazat uživatele",
|
||||
"role": "Role"
|
||||
},
|
||||
"updatePassword": "Aktualizovat heslo",
|
||||
"toast": {
|
||||
"success": {
|
||||
"createUser": "Uživatel {{user}} úspěšně vytvořen",
|
||||
"deleteUser": "Uživatel {{user}} úspěšně odebrán",
|
||||
"updatePassword": "Heslo úspěšně aktualizováno.",
|
||||
"roleUpdated": "Role pro {{user}} aktualizována"
|
||||
},
|
||||
"error": {
|
||||
"setPasswordFailed": "Chyba uložení hesla: {{errorMessage}}",
|
||||
"createUserFailed": "Chyba vytvoření uživatele: {{errorMessage}}",
|
||||
"deleteUserFailed": "Chyba při mazání uživatele: {{errorMessage}}",
|
||||
"roleUpdateFailed": "Chyba při aktualizaci role: {{errorMessage}}"
|
||||
}
|
||||
},
|
||||
"management": {
|
||||
"desc": "Spravujte uživatelské účty této instance Frigate.",
|
||||
"title": "Správa Uživatelů"
|
||||
},
|
||||
"addUser": "Přidat uživatele",
|
||||
"title": "Uživatelé"
|
||||
},
|
||||
"motionDetectionTuner": {
|
||||
"unsavedChanges": "Neuložené změny Ladiče Detekce Pohybu {{camera}}",
|
||||
"improveContrast": {
|
||||
"title": "Zlepšit Kontrast",
|
||||
"desc": "Zlepšit kontrast pro tmavé scény <em>Výchozí: ON</em>"
|
||||
},
|
||||
"toast": {
|
||||
"success": "Nastavení detekce pohybu bylo uloženo."
|
||||
},
|
||||
"title": "Ladič Detekce Pohybu",
|
||||
"desc": {
|
||||
"documentation": "Přečtěte si příručku Ladiče Detekce Pohybu",
|
||||
"title": "Frigate používá detekci pohybu jako první kontrolu k ověření, zda se ve snímku děje něco, co stojí za další analýzu pomocí detekce objektů."
|
||||
},
|
||||
"Threshold": {
|
||||
"title": "Práh",
|
||||
"desc": "Prahová hodnota určuje, jak velká změna jasu pixelu je nutná, aby byl považován za pohyb. <em>Výchozí: 30</em>"
|
||||
},
|
||||
"contourArea": {
|
||||
"title": "Obrysová Oblast",
|
||||
"desc": "Hodnota plochy obrysu se používá k rozhodnutí, které skupiny změněných pixelů se kvalifikují jako pohyb. <em>Výchozí: 10</em>"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1 +1,179 @@
|
||||
{}
|
||||
{
|
||||
"cameras": {
|
||||
"info": {
|
||||
"stream": "Stream {{idx}}",
|
||||
"resolution": "Rozlišení:",
|
||||
"error": "Chyba: {{error}}",
|
||||
"unknown": "Neznámý",
|
||||
"fps": "FPS:",
|
||||
"audio": "Audio:",
|
||||
"video": "Video:",
|
||||
"fetching": "Získávám data o kameře",
|
||||
"codec": "Kodek:",
|
||||
"tips": {
|
||||
"title": "Informace o sondování kamery"
|
||||
},
|
||||
"streamDataFromFFPROBE": "Data ze streamu jsou získávána pomocí <code>ffprobe</code>.",
|
||||
"cameraProbeInfo": "{{camera}} Informace o sondování kamery"
|
||||
},
|
||||
"label": {
|
||||
"camera": "kamera",
|
||||
"ffmpeg": "FFmpeg",
|
||||
"cameraFfmpeg": "{{camName}} FFmpeg",
|
||||
"detect": "detekováno",
|
||||
"skipped": "přeskočeno",
|
||||
"capture": "zachyceno",
|
||||
"overallFramesPerSecond": "celkový počet snímků za sekundu",
|
||||
"overallDetectionsPerSecond": "celkový počet detekcí za sekundu",
|
||||
"overallSkippedDetectionsPerSecond": "celkový počet přeskočených detekcí za sekundu",
|
||||
"cameraCapture": "záznam {{camName}}",
|
||||
"cameraDetect": "detekce {{camName}}",
|
||||
"cameraFramesPerSecond": "{{camName}} snímků za sekundu",
|
||||
"cameraDetectionsPerSecond": "{{camName}} detekcí za sekundu",
|
||||
"cameraSkippedDetectionsPerSecond": "{{camName}} přeskočených detekcí za sekundu"
|
||||
},
|
||||
"title": "Kamery",
|
||||
"overview": "Přehled",
|
||||
"framesAndDetections": "Snímky / Detekce",
|
||||
"toast": {
|
||||
"success": {
|
||||
"copyToClipboard": "Sondovaná data uložena do schránky."
|
||||
},
|
||||
"error": {
|
||||
"unableToProbeCamera": "Nemohu sondovat kameru: {{errorMessage}}"
|
||||
}
|
||||
}
|
||||
},
|
||||
"stats": {
|
||||
"cameraIsOffline": "{{camera}} je offline",
|
||||
"healthy": "Systém je zdravý",
|
||||
"reindexingEmbeddings": "Přeindexování vektorů ({{processed}} % dokončeno)",
|
||||
"detectIsSlow": "{{detect}} je pomalé ({{speed}} ms)",
|
||||
"detectIsVerySlow": "{{detect}} je velmi pomalé ({{speed}} ms)",
|
||||
"detectHighCpuUsage": "{{camera}} má vysoké využití CPU detekcemi ({{detectAvg}} %)",
|
||||
"ffmpegHighCpuUsage": "{{camera}} má vyské využití CPU FFmpegem ({{ffmpegAvg}}%)"
|
||||
},
|
||||
"enrichments": {
|
||||
"embeddings": {
|
||||
"face_recognition_speed": "Rychlost rozpoznávání obličeje",
|
||||
"plate_recognition_speed": "Rychlost rozpoznávání SPZ",
|
||||
"plate_recognition": "Rozpoznávání SPZ",
|
||||
"face_recognition": "Rozpoznávání obličeje",
|
||||
"image_embedding_speed": "Rychlost vkládání obrázku",
|
||||
"text_embedding_speed": "Rychlost vkládání textu",
|
||||
"text_embedding": "Vkládání textu",
|
||||
"image_embedding": "Vkládání obrázku",
|
||||
"face_embedding_speed": "Rychlost vkládání obličeje",
|
||||
"yolov9_plate_detection_speed": "YOLOv9 rychlost detekce SPZ",
|
||||
"yolov9_plate_detection": "YOLOv9 Detekce SPZ"
|
||||
},
|
||||
"infPerSecond": "Inferencí za sekundu",
|
||||
"title": "Obohacení"
|
||||
},
|
||||
"general": {
|
||||
"detector": {
|
||||
"temperature": "Detekční teplota",
|
||||
"title": "Detektory",
|
||||
"inferenceSpeed": "Detekční rychlost",
|
||||
"memoryUsage": "Detektor využití paměti",
|
||||
"cpuUsage": "Detektor využití CPU"
|
||||
},
|
||||
"hardwareInfo": {
|
||||
"title": "Informace o hardware",
|
||||
"gpuInfo": {
|
||||
"vainfoOutput": {
|
||||
"processError": "Chyba procesu:",
|
||||
"returnCode": "Návratový kód: {{code}}",
|
||||
"processOutput": "Výstup procesu:",
|
||||
"title": "Výstup Vainfo"
|
||||
},
|
||||
"nvidiaSMIOutput": {
|
||||
"name": "Jméno: {{name}}",
|
||||
"title": "Výstup Nvidia SMI",
|
||||
"driver": "Ovladač: {{driver}}",
|
||||
"cudaComputerCapability": "Výpočetní schopnost CUDA: {{cuda_compute}}",
|
||||
"vbios": "Informace o VBios: {{vbios}}"
|
||||
},
|
||||
"copyInfo": {
|
||||
"label": "Kopírovat informace o GPU"
|
||||
},
|
||||
"toast": {
|
||||
"success": "Informace o GPU zkopírovány do schránky"
|
||||
},
|
||||
"closeInfo": {
|
||||
"label": "Zavřít informace o GPU"
|
||||
}
|
||||
},
|
||||
"npuUsage": "Využití NPU",
|
||||
"npuMemory": "Paměť NPU",
|
||||
"gpuUsage": "Využití CPU",
|
||||
"gpuMemory": "Paměť GPU",
|
||||
"gpuEncoder": "GPU kodér",
|
||||
"gpuDecoder": "GPU Dekodér"
|
||||
},
|
||||
"otherProcesses": {
|
||||
"title": "Ostatní procesy",
|
||||
"processCpuUsage": "Využití CPU procesy",
|
||||
"processMemoryUsage": "Využití paměti procesy"
|
||||
},
|
||||
"title": "Hlavní"
|
||||
},
|
||||
"storage": {
|
||||
"cameraStorage": {
|
||||
"storageUsed": "Úložiště",
|
||||
"camera": "Kamera",
|
||||
"title": "Úložiště kamery",
|
||||
"unused": {
|
||||
"title": "Nepoužité",
|
||||
"tips": "Tato hodnota nemusí přesně reprezentovat volné místo dostupné pro Frigate, pokud máte na disku uloženy další soubory kromě nahrávek Frigate. Frigate nesleduje využití úložiště mimo své nahrávky."
|
||||
},
|
||||
"bandwidth": "Šířka pásma",
|
||||
"unusedStorageInformation": "Informace o nepoužitém úložišti",
|
||||
"percentageOfTotalUsed": "Procento celkem"
|
||||
},
|
||||
"recordings": {
|
||||
"title": "Záznamy",
|
||||
"earliestRecording": "Nejstarší dostupná nahrávka:",
|
||||
"tips": "Tato hodnota uvádí celkové využití disku záznamy uloženými v databázi Frigate. Frigate nesleduje využití disku ostatními soubory na vašem disku."
|
||||
},
|
||||
"title": "Úložiště",
|
||||
"overview": "Přehled"
|
||||
},
|
||||
"lastRefreshed": "Poslední aktualizace: ",
|
||||
"documentTitle": {
|
||||
"cameras": "Statistiky kamer – Frigate",
|
||||
"storage": "Statistiky uložiště - Frigate",
|
||||
"general": "Obecné statistiky - Frigate",
|
||||
"enrichments": "Statistiky obohacení - Frigate",
|
||||
"logs": {
|
||||
"frigate": "Protokoly Frigate - Frigate",
|
||||
"go2rtc": "Protokoly Go2RTC - Frigate",
|
||||
"nginx": "Protokoly Nginx - Frigate"
|
||||
}
|
||||
},
|
||||
"title": "Systém",
|
||||
"logs": {
|
||||
"copy": {
|
||||
"label": "Kopírovat do schránky",
|
||||
"success": "Protokoly zkopírovány do schránky",
|
||||
"error": "Protokoly se nepodařilo zkopírovat do schránky"
|
||||
},
|
||||
"type": {
|
||||
"label": "Typ",
|
||||
"message": "Zpráva",
|
||||
"timestamp": "Časové razítko",
|
||||
"tag": "Štítek (Tag)"
|
||||
},
|
||||
"download": {
|
||||
"label": "Stáhnout záznamy"
|
||||
},
|
||||
"tips": "Protokoly jsou streamovány ze serveru",
|
||||
"toast": {
|
||||
"error": {
|
||||
"fetchingLogsFailed": "Chyba při načítání protokolů: {{errorMessage}}",
|
||||
"whileStreamingLogs": "Chyba při streamování protokolů: {{errorMessage}}"
|
||||
}
|
||||
}
|
||||
},
|
||||
"metrics": "Systémové metriky"
|
||||
}
|
||||
|
||||
@@ -254,7 +254,7 @@
|
||||
"wind": "Wind",
|
||||
"wind_noise": "Windrauschen",
|
||||
"rain_on_surface": "Regen auf einer Oberfläche",
|
||||
"stream": "Strahl",
|
||||
"stream": "Stream",
|
||||
"waterfall": "Wasserfall",
|
||||
"steam": "Dampf",
|
||||
"fire": "Feuer",
|
||||
|
||||
@@ -77,6 +77,10 @@
|
||||
"formattedTimestampFilename": {
|
||||
"12hour": "MM-dd-yy-h-mm-ss-a",
|
||||
"24hour": "MM-dd-yy-HH-mm-ss"
|
||||
},
|
||||
"formattedTimestampMonthDayYear": {
|
||||
"12hour": "d. MMM yyyy",
|
||||
"24hour": "d. MMM yyyy"
|
||||
}
|
||||
},
|
||||
"button": {
|
||||
@@ -154,7 +158,8 @@
|
||||
"uk": "Ukrainisch",
|
||||
"he": "Hebräisch",
|
||||
"sk": "Slowakisch",
|
||||
"yue": "粵語 (Kantonesisch)"
|
||||
"yue": "粵語 (Kantonesisch)",
|
||||
"th": "ไทย (Thailändisch)"
|
||||
},
|
||||
"appearance": "Erscheinung",
|
||||
"theme": {
|
||||
@@ -214,6 +219,10 @@
|
||||
"speed": {
|
||||
"mph": "mph",
|
||||
"kph": "km/h"
|
||||
},
|
||||
"length": {
|
||||
"feet": "Fuß",
|
||||
"meters": "Meter"
|
||||
}
|
||||
},
|
||||
"toast": {
|
||||
|
||||
@@ -41,7 +41,8 @@
|
||||
"warning": "Kontinuierliches Streaming kann zu hoher Bandbreitenausnutzung und zu Performanceproblemen führen. Bitte behutsam nutzen."
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"placeholder": "Wähle eine streaming Methode"
|
||||
},
|
||||
"title": "{{cameraName}} Streaming Einstellungen",
|
||||
"compatibilityMode": {
|
||||
@@ -54,7 +55,9 @@
|
||||
"document": "Lies die Dokumentation. "
|
||||
}
|
||||
},
|
||||
"desc": "Ändere die Live Stream Optionen für das Dashboard dieser Kameragruppe. <em>Diese Einstellungen sind geräte-/browserspezifisch.</em>"
|
||||
"desc": "Ändere die Live Stream Optionen für das Dashboard dieser Kameragruppe. <em>Diese Einstellungen sind geräte-/browserspezifisch.</em>",
|
||||
"stream": "Stream",
|
||||
"placeholder": "Wähle einen Stream"
|
||||
}
|
||||
},
|
||||
"add": "Kameragruppe hinzufügen",
|
||||
|
||||
@@ -20,7 +20,8 @@
|
||||
"all": {
|
||||
"title": "Alle Zeiträume",
|
||||
"short": "Daten"
|
||||
}
|
||||
},
|
||||
"selectPreset": "Wähle eine Voreinstellung aus…"
|
||||
},
|
||||
"reset": {
|
||||
"label": "Filter auf Standardwerte zurücksetzen"
|
||||
|
||||
@@ -11,5 +11,6 @@
|
||||
"copyToClipboard": "Konfiguration in Zwischenablage kopiert."
|
||||
}
|
||||
},
|
||||
"documentTitle": "Konfigurationseditor – Frigate"
|
||||
"documentTitle": "Konfigurationseditor – Frigate",
|
||||
"confirm": "Verlassen ohne zu Speichern?"
|
||||
}
|
||||
|
||||
@@ -127,7 +127,10 @@
|
||||
"label": "Anmerkungen Versatz",
|
||||
"desc": "Diese Daten stammen aus dem Erkennungs-Feed der Kamera, werden aber mit Bildern aus dem Aufnahme-Feed überlagert. Es ist unwahrscheinlich, dass die beiden Streams perfekt synchronisiert sind. Daher stimmen die Bounding Box und das Filmmaterial nicht perfekt überein. Das Feld <code>annotation_offset</code> kann jedoch verwendet werden, um dies anzupassen.",
|
||||
"millisecondsToOffset": "Millisekunden, um die Erkennungen verschoben werden soll. <em>Standard: 0</em>",
|
||||
"tips": "TIPP: Stelle dir einen Ereignisclip vor, in dem eine Person von links nach rechts läuft. Wenn die Bounding Box der Ereigniszeitleiste durchgehend links von der Person liegt, sollte der Wert verringert werden. Ähnlich verhält es sich, wenn eine Person von links nach rechts geht und die Bounding Box durchgängig vor der Person liegt, dann sollte der Wert erhöht werden."
|
||||
"tips": "TIPP: Stelle dir einen Ereignisclip vor, in dem eine Person von links nach rechts läuft. Wenn die Bounding Box der Ereigniszeitleiste durchgehend links von der Person liegt, sollte der Wert verringert werden. Ähnlich verhält es sich, wenn eine Person von links nach rechts geht und die Bounding Box durchgängig vor der Person liegt, dann sollte der Wert erhöht werden.",
|
||||
"toast": {
|
||||
"success": "Versatz für {{camera}} wurde in der Konfigurationsdatei gespeichert. Starten Sie Frigate neu, um Ihre Änderungen zu übernehmen."
|
||||
}
|
||||
},
|
||||
"showAllZones": {
|
||||
"title": "Zeige alle Zonen",
|
||||
@@ -142,7 +145,9 @@
|
||||
"previous": "Vorherige Anzeige"
|
||||
},
|
||||
"scrollViewTips": "Scrolle um die wichtigsten Momente dieses Objekts anzuzeigen.",
|
||||
"autoTrackingTips": "Die Positionen der Bounding Box sind bei Kameras mit automatischer Verfolgung ungenau."
|
||||
"autoTrackingTips": "Die Positionen der Bounding Box sind bei Kameras mit automatischer Verfolgung ungenau.",
|
||||
"count": "{{first}} von {{second}}",
|
||||
"trackedPoint": "Verfolgter Punkt"
|
||||
},
|
||||
"type": {
|
||||
"details": "Details",
|
||||
@@ -197,5 +202,6 @@
|
||||
"noTrackedObjects": "Keine verfolgten Objekte gefunden",
|
||||
"fetchingTrackedObjectsFailed": "Fehler beim Abrufen von verfolgten Objekten: {{errorMessage}}",
|
||||
"trackedObjectsCount_one": "{{count}} verfolgtes Objekt ",
|
||||
"trackedObjectsCount_other": "{{count}} verfolgte Objekte "
|
||||
"trackedObjectsCount_other": "{{count}} verfolgte Objekte ",
|
||||
"exploreMore": "Erkunde mehr {{label}} Objekte"
|
||||
}
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
{
|
||||
"description": {
|
||||
"placeholder": "Gib einen Name für diese Kollektion ein",
|
||||
"addFace": "Anleitung für das Hinzufügen einer neuen Kollektion zur Gesichtsbibliothek."
|
||||
"addFace": "Anleitung für das Hinzufügen einer neuen Kollektion zur Gesichtsbibliothek.",
|
||||
"invalidName": "Ungültiger Name. Namen dürfen nur Buchstaben, Zahlen, Leerzeichen, Apostrophe, Unterstriche und Bindestriche enthalten."
|
||||
},
|
||||
"details": {
|
||||
"person": "Person",
|
||||
@@ -86,7 +87,7 @@
|
||||
},
|
||||
"renameFace": {
|
||||
"title": "Gesicht umbenennen",
|
||||
"desc": "Gib den neuen Namen für das Gesicht von {{name}} ein."
|
||||
"desc": "Gib den neuen Namen für {{name}} ein"
|
||||
},
|
||||
"collections": "Sammlungen",
|
||||
"deleteFaceAttempts": {
|
||||
@@ -94,5 +95,6 @@
|
||||
"desc_one": "Bist du sicher, dass du {{count}} Gesicht löschen möchtest? Diese Aktion kann nicht rückgängig gemacht werden.",
|
||||
"desc_other": "Bist du sicher, dass du {{count}} Gesichter löschen möchtest? Diese Aktion kann nicht rückgängig gemacht werden."
|
||||
},
|
||||
"nofaces": "Keine Gesichter verfügbar"
|
||||
"nofaces": "Keine Gesichter verfügbar",
|
||||
"pixels": "{{area}}px"
|
||||
}
|
||||
|
||||
@@ -89,9 +89,9 @@
|
||||
"notifications": "Benachrichtigungen",
|
||||
"stream": {
|
||||
"audio": {
|
||||
"available": "Für diesen Stream ist Audio verfügbar",
|
||||
"available": "Audio ist für diesen Stream verfügbar",
|
||||
"tips": {
|
||||
"title": "Der Ton muss von Ihrer Kamera ausgegeben und für diesen Stream in go2rtc konfiguriert werden.",
|
||||
"title": "Audio muss von deiner Kamera ausgegeben und für diesen Stream in go2rtc konfiguriert werden.",
|
||||
"documentation": "Dokumentation lesen "
|
||||
},
|
||||
"unavailable": "Für diesen Stream ist kein Audio verfügbar"
|
||||
@@ -106,7 +106,7 @@
|
||||
"tips": "Die Live-Ansicht befindet sich aufgrund von Puffer- oder Stream-Fehlern im Modus mit geringer Bandbreite.",
|
||||
"resetStream": "Stream zurücksetzen"
|
||||
},
|
||||
"title": "Strom",
|
||||
"title": "Stream",
|
||||
"playInBackground": {
|
||||
"tips": "Aktivieren Sie diese Option, um das Streaming fortzusetzen, wenn der Player ausgeblendet ist.",
|
||||
"label": "Im Hintergrund abspielen"
|
||||
|
||||
@@ -9,7 +9,8 @@
|
||||
"frigatePlus": "Frigate+ Einstellungen – Frigate",
|
||||
"classification": "Klassifizierungseinstellungen – Frigate",
|
||||
"motionTuner": "Bewegungstuner – Frigate",
|
||||
"notifications": "Benachrichtigungs-Einstellungen"
|
||||
"notifications": "Benachrichtigungs-Einstellungen",
|
||||
"enrichments": "Erweiterte Statistiken - Frigate"
|
||||
},
|
||||
"menu": {
|
||||
"ui": "Benutzeroberfläche",
|
||||
@@ -20,7 +21,8 @@
|
||||
"debug": "Debug",
|
||||
"frigateplus": "Frigate+",
|
||||
"users": "Benutzer",
|
||||
"notifications": "Benachrichtigungen"
|
||||
"notifications": "Benachrichtigungen",
|
||||
"enrichments": "Verbesserungen"
|
||||
},
|
||||
"dialog": {
|
||||
"unsavedChanges": {
|
||||
@@ -222,6 +224,11 @@
|
||||
"error": {
|
||||
"mustBeFinished": "Polygonzeichnung muss vor dem Speichern abgeschlossen sein."
|
||||
}
|
||||
},
|
||||
"speed": {
|
||||
"error": {
|
||||
"mustBeGreaterOrEqualTo": "Der Geschwindigkeitsschwellwert muss größer oder gleich 0,1 sein."
|
||||
}
|
||||
}
|
||||
},
|
||||
"toast": {
|
||||
@@ -248,7 +255,11 @@
|
||||
"speedEstimation": {
|
||||
"title": "Geschwindigkeitsschätzung",
|
||||
"desc": "Aktiviere die Geschwindigkeitsabschätzung für Objekte in diesem Bereich. Der Bereich muss genau 4 Punkte haben.",
|
||||
"docs": "Bitte lies die Dokumentation"
|
||||
"docs": "Bitte lies die Dokumentation",
|
||||
"lineADistance": "Spur A Distanz ({{unit}})",
|
||||
"lineDDistance": "Spur D Distanz ({{unit}})",
|
||||
"lineBDistance": "Spur B Distanz ({{unit}})",
|
||||
"lineCDistance": "Spur C Distanz ({{unit}})"
|
||||
},
|
||||
"label": "Zonen",
|
||||
"documentTitle": "Zone bearbeiten - Frigate",
|
||||
@@ -337,7 +348,9 @@
|
||||
"desc": "Der Objekttyp, für den diese Objektmaske gilt.",
|
||||
"allObjectTypes": "Alle Objekttypen"
|
||||
}
|
||||
}
|
||||
},
|
||||
"motionMaskLabel": "Bewegungsmaske {{number}}",
|
||||
"objectMaskLabel": "Objektmaske {{number}} ({{label}})"
|
||||
},
|
||||
"debug": {
|
||||
"objectShapeFilterDrawing": {
|
||||
@@ -471,7 +484,8 @@
|
||||
"placeholder": "Neues Passwort erneut eingeben"
|
||||
}
|
||||
},
|
||||
"usernameIsRequired": "Benutzername ist erforderlich"
|
||||
"usernameIsRequired": "Benutzername ist erforderlich",
|
||||
"passwordIsRequired": "Passwort benötigt"
|
||||
},
|
||||
"changeRole": {
|
||||
"desc": "Berechtigungen für <strong>{{username}}</strong> aktualisieren",
|
||||
@@ -482,7 +496,8 @@
|
||||
"viewer": "Betrachter",
|
||||
"viewerDesc": "Nur auf Live-Dashboards, Überprüfung, Erkundung und Exporte beschränkt."
|
||||
},
|
||||
"title": "Benutzerrolle ändern"
|
||||
"title": "Benutzerrolle ändern",
|
||||
"select": "Wähle eine Rolle"
|
||||
},
|
||||
"deleteUser": {
|
||||
"desc": "Diese Aktion kann nicht rückgängig gemacht werden. Dadurch wird das Benutzerkonto dauerhaft gelöscht und alle zugehörigen Daten werden entfernt.",
|
||||
@@ -492,12 +507,15 @@
|
||||
"createUser": {
|
||||
"title": "Neuen Benutzer anlegen",
|
||||
"desc": "Füge ein neues Benutzerkonto hinzu und lege eine Rolle für den Zugriff auf Bereiche der Frigate-Benutzeroberfläche fest.",
|
||||
"usernameOnlyInclude": "Der Benutzername darf nur Buchstaben, Zahlen, . oder _ enthalten"
|
||||
"usernameOnlyInclude": "Der Benutzername darf nur Buchstaben, Zahlen, . oder _ enthalten",
|
||||
"confirmPassword": "Bitte bestätige dein Passwort"
|
||||
},
|
||||
"passwordSetting": {
|
||||
"updatePassword": "Passwort für {{username}} aktualisieren",
|
||||
"setPassword": "Passwort festlegen",
|
||||
"desc": "Erstelle ein sicheres Passwort, um dieses Konto zu schützen."
|
||||
"desc": "Erstelle ein sicheres Passwort, um dieses Konto zu schützen.",
|
||||
"cannotBeEmpty": "Das Passwort darf nicht leer sein",
|
||||
"doNotMatch": "Die Passwörter sind nicht identisch"
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -599,5 +617,67 @@
|
||||
},
|
||||
"restart_required": "Neustart erforderlich (Frigate+ Model geändert)",
|
||||
"unsavedChanges": "Nicht gespeicherte Änderungen an den Frigate+-Einstellungen"
|
||||
},
|
||||
"enrichments": {
|
||||
"birdClassification": {
|
||||
"title": "Vogel Klassifizierung",
|
||||
"desc": "Die Vogelklassifizierung identifiziert bekannte Vögel mithilfe eines quantisierten Tensorflow-Modells. Wenn ein bekannter Vogel erkannt wird, wird sein allgemeiner Name als sub_label hinzugefügt. Diese Informationen sind in der Benutzeroberfläche, in Filtern und in Benachrichtigungen enthalten."
|
||||
},
|
||||
"title": "Verbesserugsseinstellungen",
|
||||
"unsavedChanges": "Ungesicherte geänderte Verbesserungseinstellungen",
|
||||
"semanticSearch": {
|
||||
"reindexNow": {
|
||||
"confirmDesc": "Sind Sie sicher, dass Sie alle verfolgten Objekteinbettungen neu indizieren wollen? Dieser Prozess läuft im Hintergrund, kann aber Ihre CPU auslasten und eine gewisse Zeit in Anspruch nehmen. Sie können den Fortschritt auf der Seite Explore verfolgen.",
|
||||
"label": "Jetzt neu indizien",
|
||||
"desc": "Bei der Neuindizierung werden die Einbettungen für alle verfolgten Objekte neu generiert. Dieser Prozess läuft im Hintergrund und kann je nach Anzahl der verfolgten Objekte Ihre CPU auslasten und eine gewisse Zeit in Anspruch nehmen.",
|
||||
"confirmTitle": "Neuinszenierung bestätigen",
|
||||
"confirmButton": "Neuindizierung",
|
||||
"success": "Die Neuindizierung wurde erfolgreich gestartet.",
|
||||
"alreadyInProgress": "Die Neuindizierung ist bereits im Gange.",
|
||||
"error": "Neuindizierung konnte nicht gestartet werden: {{errorMessage}}"
|
||||
},
|
||||
"modelSize": {
|
||||
"small": {
|
||||
"desc": "Bei der Verwendung von <em>klein</em> wird eine quantisierte Version des Modells verwendet, die weniger Arbeitsspeicher verbraucht und schneller auf der CPU läuft, wobei der Unterschied in der Einbettungsqualität sehr gering ist.",
|
||||
"title": "klein"
|
||||
},
|
||||
"label": "Modell Größe",
|
||||
"desc": "Die Größe des für die Einbettung der semantischen Suche verwendeten Modells.",
|
||||
"large": {
|
||||
"title": "groß",
|
||||
"desc": "Bei der Verwendung von <em>groß</em> wird das gesamte Jina-Modell verwendet und automatisch auf der GPU ausgeführt, falls zutreffend."
|
||||
}
|
||||
},
|
||||
"title": "Semantische Suche",
|
||||
"desc": "Die semantische Suche in Frigate ermöglicht es Ihnen, verfolgte Objekte innerhalb Ihrer Überprüfungselemente zu finden, indem Sie entweder das Bild selbst, eine benutzerdefinierte Textbeschreibung oder eine automatisch generierte Beschreibung verwenden.",
|
||||
"readTheDocumentation": "Lies die Dokumentation"
|
||||
},
|
||||
"faceRecognition": {
|
||||
"title": "Gesichtserkennung",
|
||||
"desc": "Die Gesichtserkennung ermöglicht es, Personen Namen zuzuweisen, und wenn ihr Gesicht erkannt wird, ordnet Frigate den Namen der Person als Untertitel zu. Diese Informationen sind in der Benutzeroberfläche, den Filtern und in den Benachrichtigungen enthalten.",
|
||||
"readTheDocumentation": "Lies die Dokumentation",
|
||||
"modelSize": {
|
||||
"label": "Modell Größe",
|
||||
"desc": "Die Größe des für die Gesichtserkennung verwendeten Modells.",
|
||||
"small": {
|
||||
"title": "klein",
|
||||
"desc": "Mit <em>klein</em> wird ein FaceNet-Gesichtseinbettungsmodell verwendet, das auf den meisten CPUs effizient läuft."
|
||||
},
|
||||
"large": {
|
||||
"title": "groß",
|
||||
"desc": "Die Verwendung von <em>groß</em> verwendet ein ArcFace-Gesichtseinbettungsmodell und läuft automatisch auf der GPU, falls zutreffend."
|
||||
}
|
||||
}
|
||||
},
|
||||
"licensePlateRecognition": {
|
||||
"title": "Kennzeichenerkennung",
|
||||
"desc": "Frigate kann Kennzeichen an Fahrzeugen erkennen und die erkannten Zeichen automatisch in das Feld recognized_license_plate oder einen bekannten Namen als sub_label zu Objekten vom Typ car hinzufügen. Ein häufiger Anwendungsfall ist das Lesen der Kennzeichen von Autos, die in eine Einfahrt einfahren oder auf einer Straße vorbeifahren.",
|
||||
"readTheDocumentation": "Lies die Dokumentation"
|
||||
},
|
||||
"restart_required": "Neustart erforderlich (Verbesserungseinstellungen geändert)",
|
||||
"toast": {
|
||||
"success": "Die Einstellungen für die Verbesserungen wurden gespeichert. Starten Sie Frigate neu, um Ihre Änderungen zu übernehmen.",
|
||||
"error": "Konfigurationsänderungen konnten nicht gespeichert werden: {{errorMessage}}"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -119,7 +119,8 @@
|
||||
"streamDataFromFFPROBE": "Stream-Daten werden mit <code>ffprobe</code> erhalten.",
|
||||
"tips": {
|
||||
"title": "Kamera-Untersuchsungsinfo"
|
||||
}
|
||||
},
|
||||
"aspectRatio": "Seitenverhältnis"
|
||||
},
|
||||
"overview": "Übersicht",
|
||||
"label": {
|
||||
|
||||
@@ -78,6 +78,10 @@
|
||||
"speed": {
|
||||
"mph": "mph",
|
||||
"kph": "kph"
|
||||
},
|
||||
"length": {
|
||||
"feet": "feet",
|
||||
"meters": "meters"
|
||||
}
|
||||
},
|
||||
"label": {
|
||||
@@ -158,6 +162,7 @@
|
||||
"da": "Dansk (Danish)",
|
||||
"sk": "Slovenčina (Slovak)",
|
||||
"yue": "粵語 (Cantonese)",
|
||||
"th": "ไทย (Thai)",
|
||||
"withSystem": {
|
||||
"label": "Use the system settings for language"
|
||||
}
|
||||
|
||||
@@ -39,8 +39,11 @@
|
||||
"document": "Read the documentation "
|
||||
}
|
||||
},
|
||||
"stream": "Stream",
|
||||
"placeholder": "Choose a stream",
|
||||
"streamMethod": {
|
||||
"label": "Streaming Method",
|
||||
"placeholder": "Choose a streaming method",
|
||||
"method": {
|
||||
"noStreaming": {
|
||||
"label": "No Streaming",
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
}
|
||||
},
|
||||
"dates": {
|
||||
"selectPreset": "Select a Preset…",
|
||||
"all": {
|
||||
"title": "All Dates",
|
||||
"short": "Dates"
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
"copyConfig": "Copy Config",
|
||||
"saveAndRestart": "Save & Restart",
|
||||
"saveOnly": "Save Only",
|
||||
"confirm": "Exit without saving?",
|
||||
"toast": {
|
||||
"success": {
|
||||
"copyToClipboard": "Config copied to clipboard."
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
{
|
||||
"documentTitle": "Explore - Frigate",
|
||||
"generativeAI": "Generative AI",
|
||||
"exploreMore": "Explore more {{label}} objects",
|
||||
"exploreIsUnavailable": {
|
||||
"title": "Explore is Unavailable",
|
||||
"embeddingsReindexing": {
|
||||
@@ -43,6 +44,8 @@
|
||||
"adjustAnnotationSettings": "Adjust annotation settings",
|
||||
"scrollViewTips": "Scroll to view the significant moments of this object's lifecycle.",
|
||||
"autoTrackingTips": "Bounding box positions will be inaccurate for autotracking cameras.",
|
||||
"count": "{{first}} of {{second}}",
|
||||
"trackedPoint": "Tracked Point",
|
||||
"lifecycleItemDesc": {
|
||||
"visible": "{{label}} detected",
|
||||
"entered_zone": "{{label}} entered {{zones}}",
|
||||
@@ -72,7 +75,10 @@
|
||||
"desc": "This data comes from your camera's detect feed but is overlayed on images from the the record feed. It is unlikely that the two streams are perfectly in sync. As a result, the bounding box and the footage will not line up perfectly. However, the <code>annotation_offset</code> field can be used to adjust this.",
|
||||
"documentation": "Read the documentation ",
|
||||
"millisecondsToOffset": "Milliseconds to offset detect annotations by. <em>Default: 0</em>",
|
||||
"tips": "TIP: Imagine there is an event clip with a person walking from left to right. If the event timeline bounding box is consistently to the left of the person then the value should be decreased. Similarly, if a person is walking from left to right and the bounding box is consistently ahead of the person then the value should be increased."
|
||||
"tips": "TIP: Imagine there is an event clip with a person walking from left to right. If the event timeline bounding box is consistently to the left of the person then the value should be decreased. Similarly, if a person is walking from left to right and the bounding box is consistently ahead of the person then the value should be increased.",
|
||||
"toast": {
|
||||
"success": "Annotation offset for {{camera}} has been saved to the config file. Restart Frigate to apply your changes."
|
||||
}
|
||||
}
|
||||
},
|
||||
"carousel": {
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
{
|
||||
"description": {
|
||||
"addFace": "Walk through adding a new collection to the Face Library.",
|
||||
"placeholder": "Enter a name for this collection"
|
||||
"placeholder": "Enter a name for this collection",
|
||||
"invalidName": "Invalid name. Names can only include letters, numbers, spaces, apostrophes, underscores, and hyphens."
|
||||
},
|
||||
"details": {
|
||||
"person": "Person",
|
||||
@@ -69,6 +70,7 @@
|
||||
"maxSize": "Max size: {{size}}MB"
|
||||
},
|
||||
"nofaces": "No faces available",
|
||||
"pixels": "{{area}}px",
|
||||
"readTheDocs": "Read the documentation",
|
||||
"trainFaceAs": "Train Face as:",
|
||||
"trainFace": "Train Face",
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
"default": "Settings - Frigate",
|
||||
"authentication": "Authentication Settings - Frigate",
|
||||
"camera": "Camera Settings - Frigate",
|
||||
"classification": "Classification Settings - Frigate",
|
||||
"enrichments": "Enrichments Settings - Frigate",
|
||||
"masksAndZones": "Mask and Zone Editor - Frigate",
|
||||
"motionTuner": "Motion Tuner - Frigate",
|
||||
"object": "Debug - Frigate",
|
||||
@@ -13,7 +13,7 @@
|
||||
},
|
||||
"menu": {
|
||||
"ui": "UI",
|
||||
"classification": "Classification",
|
||||
"enrichments": "Enrichments",
|
||||
"cameras": "Camera Settings",
|
||||
"masksAndZones": "Masks / Zones",
|
||||
"motionTuner": "Motion Tuner",
|
||||
@@ -82,9 +82,9 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"classification": {
|
||||
"title": "Classification Settings",
|
||||
"unsavedChanges": "Unsaved Classification settings changes",
|
||||
"enrichments": {
|
||||
"title": "Enrichments Settings",
|
||||
"unsavedChanges": "Unsaved Enrichments settings changes",
|
||||
"birdClassification": {
|
||||
"title": "Bird Classification",
|
||||
"desc": "Bird classification identifies known birds using a quantized Tensorflow model. When a known bird is recognized, its common name will be added as a sub_label. This information is included in the UI, filters, as well as in notifications."
|
||||
@@ -138,9 +138,9 @@
|
||||
"desc": "Frigate can recognize license plates on vehicles and automatically add the detected characters to the recognized_license_plate field or a known name as a sub_label to objects that are of type car. A common use case may be to read the license plates of cars pulling into a driveway or cars passing by on a street.",
|
||||
"readTheDocumentation": "Read the Documentation"
|
||||
},
|
||||
"restart_required": "Restart required (Classification settings changed)",
|
||||
"restart_required": "Restart required (Enrichments settings changed)",
|
||||
"toast": {
|
||||
"success": "Classification settings have been saved. Restart Frigate to apply your changes.",
|
||||
"success": "Enrichments settings have been saved. Restart Frigate to apply your changes.",
|
||||
"error": "Failed to save config changes: {{errorMessage}}"
|
||||
}
|
||||
},
|
||||
@@ -191,6 +191,8 @@
|
||||
"copyCoordinatesFailed": "Could not copy coordinates to clipboard."
|
||||
}
|
||||
},
|
||||
"motionMaskLabel": "Motion Mask {{number}}",
|
||||
"objectMaskLabel": "Object Mask {{number}} ({{label}})",
|
||||
"form": {
|
||||
"zoneName": {
|
||||
"error": {
|
||||
@@ -217,6 +219,11 @@
|
||||
"mustBeGreaterOrEqualZero": "Loitering time must be greater than or equal to 0."
|
||||
}
|
||||
},
|
||||
"speed": {
|
||||
"error": {
|
||||
"mustBeGreaterOrEqualTo": "Speed threshold must greater than or equal to 0.1."
|
||||
}
|
||||
},
|
||||
"polygonDrawing": {
|
||||
"removeLastPoint": "Remove last point",
|
||||
"reset": {
|
||||
@@ -269,7 +276,11 @@
|
||||
"speedEstimation": {
|
||||
"title": "Speed Estimation",
|
||||
"desc": "Enable speed estimation for objects in this zone. The zone must have exactly 4 points.",
|
||||
"docs": "Read the documentation"
|
||||
"docs": "Read the documentation",
|
||||
"lineADistance": "Line A distance ({{unit}})",
|
||||
"lineBDistance": "Line B distance ({{unit}})",
|
||||
"lineCDistance": "Line C distance ({{unit}})",
|
||||
"lineDDistance": "Line D distance ({{unit}})"
|
||||
},
|
||||
"speedThreshold": {
|
||||
"title": "Speed Threshold ({{unit}})",
|
||||
@@ -471,12 +482,14 @@
|
||||
"placeholder": "Re-enter new password"
|
||||
}
|
||||
},
|
||||
"usernameIsRequired": "Username is required"
|
||||
"usernameIsRequired": "Username is required",
|
||||
"passwordIsRequired": "Password is required"
|
||||
},
|
||||
"createUser": {
|
||||
"title": "Create New User",
|
||||
"desc": "Add a new user account and specify an role for access to areas of the Frigate UI.",
|
||||
"usernameOnlyInclude": "Username may only include letters, numbers, . or _"
|
||||
"usernameOnlyInclude": "Username may only include letters, numbers, . or _",
|
||||
"confirmPassword": "Please confirm your password"
|
||||
},
|
||||
"deleteUser": {
|
||||
"title": "Delete User",
|
||||
@@ -484,12 +497,15 @@
|
||||
"warn": "Are you sure you want to delete <strong>{{username}}</strong>?"
|
||||
},
|
||||
"passwordSetting": {
|
||||
"cannotBeEmpty": "Password cannot be empty",
|
||||
"doNotMatch": "Passwords do not match",
|
||||
"updatePassword": "Update Password for {{username}}",
|
||||
"setPassword": "Set Password",
|
||||
"desc": "Create a strong password to secure this account."
|
||||
},
|
||||
"changeRole": {
|
||||
"title": "Change User Role",
|
||||
"select": "Select a role",
|
||||
"desc": "Update permissions for <strong>{{username}}</strong>",
|
||||
"roleInfo": {
|
||||
"intro": "Select the appropriate role for this user:",
|
||||
|
||||
@@ -108,6 +108,7 @@
|
||||
"title": "Cameras",
|
||||
"overview": "Overview",
|
||||
"info": {
|
||||
"aspectRatio": "aspect ratio",
|
||||
"cameraProbeInfo": "{{camera}} Camera Probe Info",
|
||||
"streamDataFromFFPROBE": "Stream data is obtained with <code>ffprobe</code>.",
|
||||
"fetching": "Fetching Camera Data",
|
||||
|
||||
@@ -139,7 +139,8 @@
|
||||
"cs": "Čeština (Checo)",
|
||||
"nl": "Nederlands (Neerlandés)",
|
||||
"fr": "Français (Frances)",
|
||||
"yue": "粵語 (Cantonés)"
|
||||
"yue": "粵語 (Cantonés)",
|
||||
"th": "ไทย (Tailandés)"
|
||||
},
|
||||
"appearance": "Apariencia",
|
||||
"darkMode": {
|
||||
@@ -185,6 +186,10 @@
|
||||
"speed": {
|
||||
"mph": "mph",
|
||||
"kph": "kph"
|
||||
},
|
||||
"length": {
|
||||
"meters": "Metros",
|
||||
"feet": "Pies"
|
||||
}
|
||||
},
|
||||
"button": {
|
||||
|
||||
@@ -55,14 +55,17 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"label": "Método de transmisión"
|
||||
"label": "Método de transmisión",
|
||||
"placeholder": "Elige un método de transmisión"
|
||||
},
|
||||
"compatibilityMode": {
|
||||
"label": "Modo de compatibilidad",
|
||||
"desc": "Habilita esta opción solo si la transmisión en vivo de tu cámara muestra artefactos de color y tiene una línea diagonal en el lado derecho de la imagen."
|
||||
},
|
||||
"label": "Ajustes de transmisión de la cámara",
|
||||
"desc": "Cambia las opciones de transmisión en vivo para el panel de control de este grupo de cámaras. <em>Estos ajustes son específicos del dispositivo/navegador.</em>"
|
||||
"desc": "Cambia las opciones de transmisión en vivo para el panel de control de este grupo de cámaras. <em>Estos ajustes son específicos del dispositivo/navegador.</em>",
|
||||
"placeholder": "Elige una transmisión",
|
||||
"stream": "Transmitir"
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
@@ -89,7 +89,7 @@
|
||||
"label": "Transmisión",
|
||||
"showStats": {
|
||||
"label": "Mostrar estadísticas de transmisión",
|
||||
"desc": "Habilita esta opción para mostrar estadísticas de transmisión como una superposición en la alimentación de la cámara."
|
||||
"desc": "Habilita esta opción para mostrar las estadísticas de transmisión como una superposición en la imagen de la cámara."
|
||||
}
|
||||
},
|
||||
"search": {
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user