mirror of
https://github.com/blakeblackshear/frigate.git
synced 2025-08-22 13:47:29 +02:00
Compare commits
67 Commits
v0.16.0-rc
...
master
Author | SHA1 | Date | |
---|---|---|---|
|
7cf439e010 | ||
|
8a01643acf | ||
|
664a6fd0cb | ||
|
2b185a1105 | ||
|
75e33d8a56 | ||
|
8f4b5b4bdb | ||
|
95cea06dd3 | ||
|
ec2543c23f | ||
|
d27e8c1bbf | ||
|
353ee1228c | ||
|
ba20b61c43 | ||
|
b45f642868 | ||
|
9ed7ccab75 | ||
|
ceced7cc91 | ||
|
1db26cb41e | ||
|
6840415b6c | ||
|
06539c925c | ||
|
addb4e6891 | ||
|
fb290c411b | ||
|
89db960c05 | ||
|
2cde58037d | ||
|
d1be614a10 | ||
|
93c7c8c518 | ||
|
c83a35d090 | ||
|
d31a4e3443 | ||
|
c2f8de94e8 | ||
|
f46560d2bf | ||
|
a1acb504ee | ||
|
3d79eef227 | ||
|
efe0d2a931 | ||
|
cbd5bdfd88 | ||
|
6f2e6c4cb2 | ||
|
84f48ee3eb | ||
|
49793aa655 | ||
|
4869f46ab6 | ||
|
5e5beb9837 | ||
|
f7184c8ed5 | ||
|
2e1b81b380 | ||
|
30cf274815 | ||
|
b15c799d8c | ||
|
b6b3178e3d | ||
|
334b6670e1 | ||
|
5fc030c3f6 | ||
|
ca3afa8ac4 | ||
|
878f401ad2 | ||
|
99f9c1529d | ||
|
369e6ba2c2 | ||
|
8254602449 | ||
|
a0a5aad3c2 | ||
|
f107aa3cea | ||
|
cd7b9b604e | ||
|
1bbc8823da | ||
|
30de45a6f4 | ||
|
f9e5350d5a | ||
|
1471491124 | ||
|
c1da7128da | ||
|
f33468767e | ||
|
76fbc103b0 | ||
|
972206eb0f | ||
|
b5067c07f8 | ||
|
c3410cd13e | ||
|
d18f2282c8 | ||
|
23b32cbacf | ||
|
21e9b2f2ce | ||
|
92a0dad2c2 | ||
|
4f4c8a4fb9 | ||
|
898d1de875 |
5
.github/DISCUSSION_TEMPLATE/report-a-bug.yml
vendored
5
.github/DISCUSSION_TEMPLATE/report-a-bug.yml
vendored
@ -6,7 +6,7 @@ body:
|
||||
value: |
|
||||
Use this form to submit a reproducible bug in Frigate or Frigate's UI.
|
||||
|
||||
Before submitting your bug report, please [search the discussions][discussions], look at recent open and closed [pull requests][prs], read the [official Frigate documentation][docs], and read the [Frigate FAQ][faq] pinned at the Discussion page to see if your bug has already been fixed by the developers or reported by the community.
|
||||
Before submitting your bug report, please ask the AI with the "Ask AI" button on the [official documentation site][ai] about your issue, [search the discussions][discussions], look at recent open and closed [pull requests][prs], read the [official Frigate documentation][docs], and read the [Frigate FAQ][faq] pinned at the Discussion page to see if your bug has already been fixed by the developers or reported by the community.
|
||||
|
||||
**If you are unsure if your issue is actually a bug or not, please submit a support request first.**
|
||||
|
||||
@ -14,6 +14,7 @@ body:
|
||||
[prs]: https://www.github.com/blakeblackshear/frigate/pulls
|
||||
[docs]: https://docs.frigate.video
|
||||
[faq]: https://github.com/blakeblackshear/frigate/discussions/12724
|
||||
[ai]: https://docs.frigate.video
|
||||
- type: checkboxes
|
||||
attributes:
|
||||
label: Checklist
|
||||
@ -26,6 +27,8 @@ body:
|
||||
- label: I have tried a different browser to see if it is related to my browser.
|
||||
required: true
|
||||
- label: I have tried reproducing the issue in [incognito mode](https://www.computerworld.com/article/1719851/how-to-go-incognito-in-chrome-firefox-safari-and-edge.html) to rule out problems with any third party extensions or plugins I have installed.
|
||||
- label: I have asked the AI at https://docs.frigate.video about my issue.
|
||||
required: true
|
||||
- type: textarea
|
||||
id: description
|
||||
attributes:
|
||||
|
2
Makefile
2
Makefile
@ -1,7 +1,7 @@
|
||||
default_target: local
|
||||
|
||||
COMMIT_HASH := $(shell git log -1 --pretty=format:"%h"|tail -1)
|
||||
VERSION = 0.16.0
|
||||
VERSION = 0.16.1
|
||||
IMAGE_REPO ?= ghcr.io/blakeblackshear/frigate
|
||||
GITHUB_REF_NAME ?= $(shell git rev-parse --abbrev-ref HEAD)
|
||||
BOARDS= #Initialized empty
|
||||
|
@ -152,7 +152,7 @@ ARG TARGETARCH
|
||||
# Use a separate container to build wheels to prevent build dependencies in final image
|
||||
RUN apt-get -qq update \
|
||||
&& apt-get -qq install -y \
|
||||
apt-transport-https wget \
|
||||
apt-transport-https wget unzip \
|
||||
&& apt-get -qq update \
|
||||
&& apt-get -qq install -y \
|
||||
python3.11 \
|
||||
|
@ -2,18 +2,25 @@
|
||||
|
||||
set -euxo pipefail
|
||||
|
||||
SQLITE3_VERSION="96c92aba00c8375bc32fafcdf12429c58bd8aabfcadab6683e35bbb9cdebf19e" # 3.46.0
|
||||
SQLITE3_VERSION="3.46.1"
|
||||
PYSQLITE3_VERSION="0.5.3"
|
||||
|
||||
# Fetch the source code for the latest release of Sqlite.
|
||||
# Fetch the pre-built sqlite amalgamation instead of building from source
|
||||
if [[ ! -d "sqlite" ]]; then
|
||||
wget https://www.sqlite.org/src/tarball/sqlite.tar.gz?r=${SQLITE3_VERSION} -O sqlite.tar.gz
|
||||
tar xzf sqlite.tar.gz
|
||||
cd sqlite/
|
||||
LIBS="-lm" ./configure --disable-tcl --enable-tempstore=always
|
||||
make sqlite3.c
|
||||
mkdir sqlite
|
||||
cd sqlite
|
||||
|
||||
# Download the pre-built amalgamation from sqlite.org
|
||||
# For SQLite 3.46.1, the amalgamation version is 3460100
|
||||
SQLITE_AMALGAMATION_VERSION="3460100"
|
||||
|
||||
wget https://www.sqlite.org/2024/sqlite-amalgamation-${SQLITE_AMALGAMATION_VERSION}.zip -O sqlite-amalgamation.zip
|
||||
unzip sqlite-amalgamation.zip
|
||||
mv sqlite-amalgamation-${SQLITE_AMALGAMATION_VERSION}/* .
|
||||
rmdir sqlite-amalgamation-${SQLITE_AMALGAMATION_VERSION}
|
||||
rm sqlite-amalgamation.zip
|
||||
|
||||
cd ../
|
||||
rm sqlite.tar.gz
|
||||
fi
|
||||
|
||||
# Grab the pysqlite3 source code.
|
||||
|
@ -57,9 +57,16 @@ fi
|
||||
|
||||
# arch specific packages
|
||||
if [[ "${TARGETARCH}" == "amd64" ]]; then
|
||||
# Install non-free version of i965 driver
|
||||
sed -i -E "/^Components: main$/s/main/main contrib non-free non-free-firmware/" "/etc/apt/sources.list.d/debian.sources" \
|
||||
&& apt-get -qq update \
|
||||
&& apt-get install --no-install-recommends --no-install-suggests -y i965-va-driver-shaders \
|
||||
&& sed -i -E "/^Components: main contrib non-free non-free-firmware$/s/main contrib non-free non-free-firmware/main/" "/etc/apt/sources.list.d/debian.sources" \
|
||||
&& apt-get update
|
||||
|
||||
# install amd / intel-i965 driver packages
|
||||
apt-get -qq install --no-install-recommends --no-install-suggests -y \
|
||||
i965-va-driver intel-gpu-tools onevpl-tools \
|
||||
intel-gpu-tools onevpl-tools \
|
||||
libva-drm2 \
|
||||
mesa-va-drivers radeontop
|
||||
|
||||
|
@ -13,6 +13,7 @@ RUN sed -i "/https:\/\//d" /requirements-wheels.txt
|
||||
RUN sed -i "/onnxruntime/d" /requirements-wheels.txt
|
||||
RUN pip3 wheel --wheel-dir=/rk-wheels -c /requirements-wheels.txt -r /requirements-wheels-rk.txt
|
||||
RUN rm -rf /rk-wheels/opencv_python-*
|
||||
RUN rm -rf /rk-wheels/torch-*
|
||||
|
||||
FROM deps AS rk-frigate
|
||||
ARG TARGETARCH
|
||||
|
@ -99,6 +99,12 @@ genai:
|
||||
model: gemini-1.5-flash
|
||||
```
|
||||
|
||||
:::note
|
||||
|
||||
To use a different Gemini-compatible API endpoint, set the `GEMINI_BASE_URL` environment variable to your provider's API URL.
|
||||
|
||||
:::
|
||||
|
||||
## OpenAI
|
||||
|
||||
OpenAI does not have a free tier for their API. With the release of gpt-4o, pricing has been reduced and each generation should cost fractions of a cent if you choose to go this route.
|
||||
|
@ -365,8 +365,8 @@ detectors:
|
||||
|
||||
model:
|
||||
model_type: rfdetr
|
||||
width: 560
|
||||
height: 560
|
||||
width: 320
|
||||
height: 320
|
||||
input_tensor: nchw
|
||||
input_dtype: float
|
||||
path: /config/model_cache/rfdetr.onnx
|
||||
@ -616,8 +616,8 @@ detectors:
|
||||
|
||||
model:
|
||||
model_type: rfdetr
|
||||
width: 560
|
||||
height: 560
|
||||
width: 320
|
||||
height: 320
|
||||
input_tensor: nchw
|
||||
input_dtype: float
|
||||
path: /config/model_cache/rfdetr.onnx
|
||||
@ -777,8 +777,8 @@ model:
|
||||
labelmap_path: /labelmap/coco-80.txt
|
||||
input_tensor: nchw
|
||||
input_pixel_format: rgb
|
||||
width: 320
|
||||
height: 320
|
||||
width: 320 # MUST match the chosen model i.e yolov7-320 -> 320, yolov4-416 -> 416
|
||||
height: 320 # MUST match the chosen model i.e yolov7-320 -> 320 yolov4-416 -> 416
|
||||
```
|
||||
|
||||
## Rockchip platform
|
||||
@ -983,22 +983,21 @@ Make sure you change the batch size to 1 before exporting.
|
||||
|
||||
### Download RF-DETR Model
|
||||
|
||||
To export as ONNX:
|
||||
RF-DETR can be exported as ONNX by running the command below. You can copy and paste the whole thing to your terminal and execute, altering `MODEL_SIZE=Nano` in the first line to `Nano`, `Small`, or `Medium` size.
|
||||
|
||||
1. `pip3 install rfdetr`
|
||||
2. `python3`
|
||||
3. `from rfdetr import RFDETRBase`
|
||||
4. `x = RFDETRBase()`
|
||||
5. `x.export()`
|
||||
|
||||
#### Additional Configuration
|
||||
|
||||
The input tensor resolution can be customized:
|
||||
|
||||
```python
|
||||
from rfdetr import RFDETRBase
|
||||
x = RFDETRBase(resolution=560) # resolution must be a multiple of 56
|
||||
x.export()
|
||||
```sh
|
||||
docker build . --build-arg MODEL_SIZE=Nano --output . -f- <<'EOF'
|
||||
FROM python:3.11 AS build
|
||||
RUN apt-get update && apt-get install --no-install-recommends -y libgl1 && rm -rf /var/lib/apt/lists/*
|
||||
COPY --from=ghcr.io/astral-sh/uv:0.8.0 /uv /bin/
|
||||
WORKDIR /rfdetr
|
||||
RUN uv pip install --system rfdetr onnx onnxruntime onnxsim onnx-graphsurgeon
|
||||
ARG MODEL_SIZE
|
||||
RUN python3 -c "from rfdetr import RFDETR${MODEL_SIZE}; x = RFDETR${MODEL_SIZE}(resolution=320); x.export()"
|
||||
FROM scratch
|
||||
ARG MODEL_SIZE
|
||||
COPY --from=build /rfdetr/output/inference_model.onnx /rfdetr-${MODEL_SIZE}.onnx
|
||||
EOF
|
||||
```
|
||||
|
||||
### Downloading YOLO-NAS Model
|
||||
|
@ -438,7 +438,7 @@ record:
|
||||
# Optional: Number of minutes to wait between cleanup runs (default: shown below)
|
||||
# This can be used to reduce the frequency of deleting recording segments from disk if you want to minimize i/o
|
||||
expire_interval: 60
|
||||
# Optional: Sync recordings with disk on startup and once a day (default: shown below).
|
||||
# Optional: Two-way sync recordings database with disk on startup and once a day (default: shown below).
|
||||
sync_recordings: False
|
||||
# Optional: Retention settings for recording
|
||||
retain:
|
||||
|
@ -166,16 +166,12 @@ There are improved capabilities in newer GPU architectures that TensorRT can ben
|
||||
Inference speeds will vary greatly depending on the GPU and the model used.
|
||||
`tiny` variants are faster than the equivalent non-tiny model, some known examples are below:
|
||||
|
||||
| Name | YOLOv7 Inference Time | YOLO-NAS Inference Time | RF-DETR Inference Time |
|
||||
| --------------- | --------------------- | ------------------------- | ------------------------- |
|
||||
| GTX 1060 6GB | ~ 7 ms | | |
|
||||
| GTX 1070 | ~ 6 ms | | |
|
||||
| GTX 1660 SUPER | ~ 4 ms | | |
|
||||
| RTX 3050 | 5 - 7 ms | 320: ~ 10 ms 640: ~ 16 ms | 336: ~ 16 ms 560: ~ 40 ms |
|
||||
| RTX 3070 Mobile | ~ 5 ms | | |
|
||||
| RTX 3070 | 4 - 6 ms | 320: ~ 6 ms 640: ~ 12 ms | 336: ~ 14 ms 560: ~ 36 ms |
|
||||
| Quadro P400 2GB | 20 - 25 ms | | |
|
||||
| Quadro P2000 | ~ 12 ms | | |
|
||||
| Name | YOLOv9 Inference Time | YOLO-NAS Inference Time | RF-DETR Inference Time |
|
||||
| --------------- | --------------------- | ------------------------- | ---------------------- |
|
||||
| RTX 3050 | t-320: 15 ms | 320: ~ 10 ms 640: ~ 16 ms | Nano-320: ~ 12 ms |
|
||||
| RTX 3070 | t-320: 11 ms | 320: ~ 8 ms 640: ~ 14 ms | Nano-320: ~ 9 ms |
|
||||
| RTX A4000 | | 320: ~ 15 ms | |
|
||||
| Tesla P40 | | 320: ~ 105 ms | |
|
||||
|
||||
### ROCm - AMD GPU
|
||||
|
||||
|
@ -43,7 +43,7 @@ The following ports are used by Frigate and can be mapped via docker as required
|
||||
| `8971` | Authenticated UI and API access without TLS. Reverse proxies should use this port. |
|
||||
| `5000` | Internal unauthenticated UI and API access. Access to this port should be limited. Intended to be used within the docker network for services that integrate with Frigate. |
|
||||
| `8554` | RTSP restreaming. By default, these streams are unauthenticated. Authentication can be configured in go2rtc section of config. |
|
||||
| `8555` | WebRTC connections for low latency live views. |
|
||||
| `8555` | WebRTC connections for cameras with two-way talk support. |
|
||||
|
||||
#### Common Docker Compose storage configurations
|
||||
|
||||
|
74
docs/docs/frigate/planning_setup.md
Normal file
74
docs/docs/frigate/planning_setup.md
Normal file
@ -0,0 +1,74 @@
|
||||
---
|
||||
id: planning_setup
|
||||
title: Planning a New Installation
|
||||
---
|
||||
|
||||
Choosing the right hardware for your Frigate NVR setup is important for optimal performance and a smooth experience. This guide will walk you through the key considerations, focusing on the number of cameras and the hardware required for efficient object detection.
|
||||
|
||||
## Key Considerations
|
||||
|
||||
### Number of Cameras and Simultaneous Activity
|
||||
|
||||
The most fundamental factor in your hardware decision is the number of cameras you plan to use. However, it's not just about the raw count; it's also about how many of those cameras are likely to see activity and require object detection simultaneously.
|
||||
|
||||
When motion is detected in a camera's feed, regions of that frame are sent to your chosen [object detection hardware](/configuration/object_detectors).
|
||||
|
||||
- **Low Simultaneous Activity (1-6 cameras with occasional motion)**: If you have a few cameras in areas with infrequent activity (e.g., a seldom-used backyard, a quiet interior), the demand on your object detection hardware will be lower. A single, entry-level AI accelerator will suffice.
|
||||
- **Moderate Simultaneous Activity (6-12 cameras with some overlapping motion)**: For setups with more cameras, especially in areas like a busy street or a property with multiple access points, it's more likely that several cameras will capture activity at the same time. This increases the load on your object detection hardware, requiring more processing power.
|
||||
- **High Simultaneous Activity (12+ cameras or highly active zones)**: Large installations or scenarios where many cameras frequently capture activity (e.g., busy street with overview, identification, dedicated LPR cameras, etc.) will necessitate robust object detection capabilities. You'll likely need multiple entry-level AI accelerators or a more powerful single unit such as a discrete GPU.
|
||||
- **Commercial Installations (40+ cameras)**: Commercial installations or scenarios where a substantial number of cameras capture activity (e.g., a commercial property, an active public space) will necessitate robust object detection capabilities. You'll likely need a modern discrete GPU.
|
||||
|
||||
### Video Decoding
|
||||
|
||||
Modern CPUs with integrated GPUs (Intel Quick Sync, AMD VCN) or dedicated GPUs can significantly offload video decoding from the main CPU, freeing up resources. This is highly recommended, especially for multiple cameras.
|
||||
|
||||
:::tip
|
||||
|
||||
For commercial installations it is important to verify the number of supported concurrent streams on your GPU, many consumer GPUs max out at ~20 concurrent camera streams.
|
||||
|
||||
:::
|
||||
|
||||
## Hardware Considerations
|
||||
|
||||
### Object Detection
|
||||
|
||||
There are many different hardware options for object detection depending on priorities and available hardware. See [the recommended hardware page](./hardware.md#detectors) for more specifics on what hardware is recommended for object detection.
|
||||
|
||||
### Storage
|
||||
|
||||
Storage is an important consideration when planning a new installation. To get a more precise estimate of your storage requirements, you can use an IP camera storage calculator. Websites like [IPConfigure Storage Calculator](https://calculator.ipconfigure.com/) can help you determine the necessary disk space based on your camera settings.
|
||||
|
||||
|
||||
#### SSDs (Solid State Drives)
|
||||
|
||||
SSDs are an excellent choice for Frigate, offering high speed and responsiveness. The older concern that SSDs would quickly "wear out" from constant video recording is largely no longer valid for modern consumer and enterprise-grade SSDs.
|
||||
|
||||
- Longevity: Modern SSDs are designed with advanced wear-leveling algorithms and significantly higher "Terabytes Written" (TBW) ratings than earlier models. For typical home NVR use, a good quality SSD will likely outlast the useful life of your NVR hardware itself.
|
||||
- Performance: SSDs excel at handling the numerous small write operations that occur during continuous video recording and can significantly improve the responsiveness of the Frigate UI and clip retrieval.
|
||||
- Silence and Efficiency: SSDs produce no noise and consume less power than traditional HDDs.
|
||||
|
||||
#### HDDs (Hard Disk Drives)
|
||||
|
||||
Traditional Hard Disk Drives (HDDs) remain a great and often more cost-effective option for long-term video storage, especially for larger setups where raw capacity is prioritized.
|
||||
|
||||
- Cost-Effectiveness: HDDs offer the best cost per gigabyte, making them ideal for storing many days, weeks, or months of continuous footage.
|
||||
- Capacity: HDDs are available in much larger capacities than most consumer SSDs, which is beneficial for extensive video archives.
|
||||
- NVR-Rated Drives: If choosing an HDD, consider drives specifically designed for surveillance (NVR) use, such as Western Digital Purple or Seagate SkyHawk. These drives are engineered for 24/7 operation and continuous write workloads, offering improved reliability compared to standard desktop drives.
|
||||
|
||||
Determining Your Storage Needs
|
||||
The amount of storage you need will depend on several factors:
|
||||
|
||||
- Number of Cameras: More cameras naturally require more space.
|
||||
- Resolution and Framerate: Higher resolution (e.g., 4K) and higher framerate (e.g., 30fps) streams consume significantly more storage.
|
||||
- Recording Method: Continuous recording uses the most space. motion-only recording or object-triggered recording can save space, but may miss some footage.
|
||||
- Retention Period: How many days, weeks, or months of footage do you want to keep?
|
||||
|
||||
#### Network Storage (NFS/SMB)
|
||||
|
||||
While supported, using network-attached storage (NAS) for recordings can introduce latency and network dependency considerations. For optimal performance and reliability, it is generally recommended to have local storage for your Frigate recordings. If using a NAS, ensure your network connection to it is robust and fast (Gigabit Ethernet at minimum) and that the NAS itself can handle the continuous write load.
|
||||
|
||||
### RAM (Memory)
|
||||
|
||||
- **Basic Minimum: 4GB RAM**: This is generally sufficient for a very basic Frigate setup with a few cameras and a dedicated object detection accelerator, without running any enrichments. Performance might be tight, especially with higher resolution streams or numerous detections.
|
||||
- **Minimum for Enrichments: 8GB RAM**: If you plan to utilize Frigate's enrichment features (e.g., facial recognition, license plate recognition, or other AI models that run alongside standard object detection), 8GB of RAM should be considered the minimum. Enrichments require additional memory to load and process their respective models and data.
|
||||
- **Recommended: 16GB RAM**: For most users, especially those with many cameras (8+) or who plan to heavily leverage enrichments, 16GB of RAM is highly recommended. This provides ample headroom for smooth operation, reduces the likelihood of swapping to disk (which can impact performance), and allows for future expansion.
|
@ -5,7 +5,7 @@ title: Updating
|
||||
|
||||
# Updating Frigate
|
||||
|
||||
The current stable version of Frigate is **0.15.0**. The release notes and any breaking changes for this version can be found on the [Frigate GitHub releases page](https://github.com/blakeblackshear/frigate/releases/tag/v0.15.0).
|
||||
The current stable version of Frigate is **0.16.0**. The release notes and any breaking changes for this version can be found on the [Frigate GitHub releases page](https://github.com/blakeblackshear/frigate/releases/tag/v0.16.0).
|
||||
|
||||
Keeping Frigate up to date ensures you benefit from the latest features, performance improvements, and bug fixes. The update process varies slightly depending on your installation method (Docker, Home Assistant Addon, etc.). Below are instructions for the most common setups.
|
||||
|
||||
@ -33,21 +33,21 @@ If you’re running Frigate via Docker (recommended method), follow these steps:
|
||||
2. **Update and Pull the Latest Image**:
|
||||
|
||||
- If using Docker Compose:
|
||||
- Edit your `docker-compose.yml` file to specify the desired version tag (e.g., `0.15.0` instead of `0.14.1`). For example:
|
||||
- Edit your `docker-compose.yml` file to specify the desired version tag (e.g., `0.16.0` instead of `0.15.2`). For example:
|
||||
```yaml
|
||||
services:
|
||||
frigate:
|
||||
image: ghcr.io/blakeblackshear/frigate:0.15.0
|
||||
image: ghcr.io/blakeblackshear/frigate:0.16.0
|
||||
```
|
||||
- Then pull the image:
|
||||
```bash
|
||||
docker pull ghcr.io/blakeblackshear/frigate:0.15.0
|
||||
docker pull ghcr.io/blakeblackshear/frigate:0.16.0
|
||||
```
|
||||
- **Note for `stable` Tag Users**: If your `docker-compose.yml` uses the `stable` tag (e.g., `ghcr.io/blakeblackshear/frigate:stable`), you don’t need to update the tag manually. The `stable` tag always points to the latest stable release after pulling.
|
||||
- If using `docker run`:
|
||||
- Pull the image with the appropriate tag (e.g., `0.15.0`, `0.15.0-tensorrt`, or `stable`):
|
||||
- Pull the image with the appropriate tag (e.g., `0.16.0`, `0.16.0-tensorrt`, or `stable`):
|
||||
```bash
|
||||
docker pull ghcr.io/blakeblackshear/frigate:0.15.0
|
||||
docker pull ghcr.io/blakeblackshear/frigate:0.16.0
|
||||
```
|
||||
|
||||
3. **Start the Container**:
|
||||
@ -105,8 +105,8 @@ If an update causes issues:
|
||||
1. Stop Frigate.
|
||||
2. Restore your backed-up config file and database.
|
||||
3. Revert to the previous image version:
|
||||
- For Docker: Specify an older tag (e.g., `ghcr.io/blakeblackshear/frigate:0.14.1`) in your `docker run` command.
|
||||
- For Docker Compose: Edit your `docker-compose.yml`, specify the older version tag (e.g., `ghcr.io/blakeblackshear/frigate:0.14.1`), and re-run `docker compose up -d`.
|
||||
- For Docker: Specify an older tag (e.g., `ghcr.io/blakeblackshear/frigate:0.15.2`) in your `docker run` command.
|
||||
- For Docker Compose: Edit your `docker-compose.yml`, specify the older version tag (e.g., `ghcr.io/blakeblackshear/frigate:0.15.2`), and re-run `docker compose up -d`.
|
||||
- For Home Assistant: Reinstall the previous addon version manually via the repository if needed and restart the addon.
|
||||
4. Verify the old version is running again.
|
||||
|
||||
|
@ -15,10 +15,10 @@ At a high level, there are five processing steps that could be applied to a came
|
||||
%%{init: {"themeVariables": {"edgeLabelBackground": "transparent"}}}%%
|
||||
|
||||
flowchart LR
|
||||
Feed(Feed\nacquisition) --> Decode(Video\ndecoding)
|
||||
Decode --> Motion(Motion\ndetection)
|
||||
Motion --> Object(Object\ndetection)
|
||||
Feed --> Recording(Recording\nand\nvisualization)
|
||||
Feed(Feed acquisition) --> Decode(Video decoding)
|
||||
Decode --> Motion(Motion detection)
|
||||
Motion --> Object(Object detection)
|
||||
Feed --> Recording(Recording and visualization)
|
||||
Motion --> Recording
|
||||
Object --> Recording
|
||||
```
|
||||
|
@ -114,7 +114,7 @@ section.
|
||||
## Next steps
|
||||
|
||||
1. If the stream you added to go2rtc is also used by Frigate for the `record` or `detect` role, you can migrate your config to pull from the RTSP restream to reduce the number of connections to your camera as shown [here](/configuration/restream#reduce-connections-to-camera).
|
||||
2. You may also prefer to [setup WebRTC](/configuration/live#webrtc-extra-configuration) for slightly lower latency than MSE. Note that WebRTC only supports h264 and specific audio formats and may require opening ports on your router.
|
||||
2. You can [set up WebRTC](/configuration/live#webrtc-extra-configuration) if your camera supports two-way talk. Note that WebRTC only supports specific audio formats and may require opening ports on your router.
|
||||
|
||||
## Important considerations
|
||||
|
||||
|
@ -7,6 +7,7 @@ const sidebars: SidebarsConfig = {
|
||||
Frigate: [
|
||||
'frigate/index',
|
||||
'frigate/hardware',
|
||||
'frigate/planning_setup',
|
||||
'frigate/installation',
|
||||
'frigate/updating',
|
||||
'frigate/camera_setup',
|
||||
|
@ -20,7 +20,7 @@ from fastapi.encoders import jsonable_encoder
|
||||
from fastapi.params import Depends
|
||||
from fastapi.responses import JSONResponse, PlainTextResponse, StreamingResponse
|
||||
from markupsafe import escape
|
||||
from peewee import operator
|
||||
from peewee import SQL, operator
|
||||
from pydantic import ValidationError
|
||||
|
||||
from frigate.api.auth import require_role
|
||||
@ -685,7 +685,14 @@ def plusModels(request: Request, filterByCurrentModelDetector: bool = False):
|
||||
@router.get("/recognized_license_plates")
|
||||
def get_recognized_license_plates(split_joined: Optional[int] = None):
|
||||
try:
|
||||
events = Event.select(Event.data).distinct()
|
||||
query = (
|
||||
Event.select(
|
||||
SQL("json_extract(data, '$.recognized_license_plate') AS plate")
|
||||
)
|
||||
.where(SQL("json_extract(data, '$.recognized_license_plate') IS NOT NULL"))
|
||||
.distinct()
|
||||
)
|
||||
recognized_license_plates = [row[0] for row in query.tuples()]
|
||||
except Exception:
|
||||
return JSONResponse(
|
||||
content=(
|
||||
@ -694,14 +701,6 @@ def get_recognized_license_plates(split_joined: Optional[int] = None):
|
||||
status_code=404,
|
||||
)
|
||||
|
||||
recognized_license_plates = []
|
||||
for e in events:
|
||||
if e.data is not None and "recognized_license_plate" in e.data:
|
||||
recognized_license_plates.append(e.data["recognized_license_plate"])
|
||||
|
||||
while None in recognized_license_plates:
|
||||
recognized_license_plates.remove(None)
|
||||
|
||||
if split_joined:
|
||||
original_recognized_license_plates = recognized_license_plates.copy()
|
||||
for recognized_license_plate in original_recognized_license_plates:
|
||||
|
@ -214,7 +214,7 @@ async def register_face(request: Request, name: str, file: UploadFile):
|
||||
)
|
||||
|
||||
context: EmbeddingsContext = request.app.embeddings
|
||||
result = context.register_face(name, await file.read())
|
||||
result = None if context is None else context.register_face(name, await file.read())
|
||||
|
||||
if not isinstance(result, dict):
|
||||
return JSONResponse(
|
||||
|
@ -1,6 +1,6 @@
|
||||
from typing import Optional
|
||||
|
||||
from pydantic import BaseModel
|
||||
from pydantic import BaseModel, Field
|
||||
|
||||
DEFAULT_TIME_RANGE = "00:00,24:00"
|
||||
|
||||
@ -21,7 +21,14 @@ class EventsQueryParams(BaseModel):
|
||||
has_clip: Optional[int] = None
|
||||
has_snapshot: Optional[int] = None
|
||||
in_progress: Optional[int] = None
|
||||
include_thumbnails: Optional[int] = 1
|
||||
include_thumbnails: Optional[int] = Field(
|
||||
1,
|
||||
description=(
|
||||
"Deprecated. Thumbnail data is no longer included in the response. "
|
||||
"Use the /api/events/:event_id/thumbnail.:extension endpoint instead."
|
||||
),
|
||||
deprecated=True,
|
||||
)
|
||||
favorites: Optional[int] = None
|
||||
min_score: Optional[float] = None
|
||||
max_score: Optional[float] = None
|
||||
@ -40,7 +47,14 @@ class EventsSearchQueryParams(BaseModel):
|
||||
query: Optional[str] = None
|
||||
event_id: Optional[str] = None
|
||||
search_type: Optional[str] = "thumbnail"
|
||||
include_thumbnails: Optional[int] = 1
|
||||
include_thumbnails: Optional[int] = Field(
|
||||
1,
|
||||
description=(
|
||||
"Deprecated. Thumbnail data is no longer included in the response. "
|
||||
"Use the /api/events/:event_id/thumbnail.:extension endpoint instead."
|
||||
),
|
||||
deprecated=True,
|
||||
)
|
||||
limit: Optional[int] = 50
|
||||
cameras: Optional[str] = "all"
|
||||
labels: Optional[str] = "all"
|
||||
|
@ -724,15 +724,24 @@ def events_search(request: Request, params: EventsSearchQueryParams = Depends())
|
||||
|
||||
if (sort is None or sort == "relevance") and search_results:
|
||||
processed_events.sort(key=lambda x: x.get("search_distance", float("inf")))
|
||||
elif min_score is not None and max_score is not None and sort == "score_asc":
|
||||
elif sort == "score_asc":
|
||||
processed_events.sort(key=lambda x: x["data"]["score"])
|
||||
elif min_score is not None and max_score is not None and sort == "score_desc":
|
||||
elif sort == "score_desc":
|
||||
processed_events.sort(key=lambda x: x["data"]["score"], reverse=True)
|
||||
elif min_speed is not None and max_speed is not None and sort == "speed_asc":
|
||||
processed_events.sort(key=lambda x: x["data"]["average_estimated_speed"])
|
||||
elif min_speed is not None and max_speed is not None and sort == "speed_desc":
|
||||
elif sort == "speed_asc":
|
||||
processed_events.sort(
|
||||
key=lambda x: x["data"]["average_estimated_speed"], reverse=True
|
||||
key=lambda x: (
|
||||
x["data"].get("average_estimated_speed") is None,
|
||||
x["data"].get("average_estimated_speed"),
|
||||
)
|
||||
)
|
||||
elif sort == "speed_desc":
|
||||
processed_events.sort(
|
||||
key=lambda x: (
|
||||
x["data"].get("average_estimated_speed") is None,
|
||||
x["data"].get("average_estimated_speed", float("-inf")),
|
||||
),
|
||||
reverse=True,
|
||||
)
|
||||
elif sort == "date_asc":
|
||||
processed_events.sort(key=lambda x: x["start_time"])
|
||||
|
@ -142,15 +142,13 @@ def latest_frame(
|
||||
"regions": params.regions,
|
||||
}
|
||||
quality = params.quality
|
||||
mime_type = extension
|
||||
|
||||
if extension == "png":
|
||||
if extension == Extension.png:
|
||||
quality_params = None
|
||||
elif extension == "webp":
|
||||
elif extension == Extension.webp:
|
||||
quality_params = [int(cv2.IMWRITE_WEBP_QUALITY), quality]
|
||||
else:
|
||||
else: # jpg or jpeg
|
||||
quality_params = [int(cv2.IMWRITE_JPEG_QUALITY), quality]
|
||||
mime_type = "jpeg"
|
||||
|
||||
if camera_name in request.app.frigate_config.cameras:
|
||||
frame = frame_processor.get_current_frame(camera_name, draw_options)
|
||||
@ -193,18 +191,21 @@ def latest_frame(
|
||||
|
||||
frame = cv2.resize(frame, dsize=(width, height), interpolation=cv2.INTER_AREA)
|
||||
|
||||
_, img = cv2.imencode(f".{extension}", frame, quality_params)
|
||||
_, img = cv2.imencode(f".{extension.value}", frame, quality_params)
|
||||
return Response(
|
||||
content=img.tobytes(),
|
||||
media_type=f"image/{mime_type}",
|
||||
media_type=f"image/{extension.value}",
|
||||
headers={
|
||||
"Content-Type": f"image/{mime_type}",
|
||||
"Cache-Control": "no-store"
|
||||
if not params.store
|
||||
else "private, max-age=60",
|
||||
},
|
||||
)
|
||||
elif camera_name == "birdseye" and request.app.frigate_config.birdseye.restream:
|
||||
elif (
|
||||
camera_name == "birdseye"
|
||||
and request.app.frigate_config.birdseye.enabled
|
||||
and request.app.frigate_config.birdseye.restream
|
||||
):
|
||||
frame = cv2.cvtColor(
|
||||
frame_processor.get_current_frame(camera_name),
|
||||
cv2.COLOR_YUV2BGR_I420,
|
||||
@ -215,12 +216,11 @@ def latest_frame(
|
||||
|
||||
frame = cv2.resize(frame, dsize=(width, height), interpolation=cv2.INTER_AREA)
|
||||
|
||||
_, img = cv2.imencode(f".{extension}", frame, quality_params)
|
||||
_, img = cv2.imencode(f".{extension.value}", frame, quality_params)
|
||||
return Response(
|
||||
content=img.tobytes(),
|
||||
media_type=f"image/{mime_type}",
|
||||
media_type=f"image/{extension.value}",
|
||||
headers={
|
||||
"Content-Type": f"image/{mime_type}",
|
||||
"Cache-Control": "no-store"
|
||||
if not params.store
|
||||
else "private, max-age=60",
|
||||
|
@ -21,7 +21,12 @@ router = APIRouter(tags=[Tags.notifications])
|
||||
|
||||
@router.get("/notifications/pubkey")
|
||||
def get_vapid_pub_key(request: Request):
|
||||
if not request.app.frigate_config.notifications.enabled:
|
||||
config = request.app.frigate_config
|
||||
notifications_enabled = config.notifications.enabled
|
||||
camera_notifications_enabled = [
|
||||
c for c in config.cameras.values() if c.enabled and c.notifications.enabled
|
||||
]
|
||||
if not (notifications_enabled or camera_notifications_enabled):
|
||||
return JSONResponse(
|
||||
content=({"success": False, "message": "Notifications are not enabled."}),
|
||||
status_code=400,
|
||||
|
@ -250,6 +250,7 @@ class FrigateApp:
|
||||
and not genai_cameras
|
||||
and not self.config.lpr.enabled
|
||||
and not self.config.face_recognition.enabled
|
||||
and not self.config.classification.bird.enabled
|
||||
):
|
||||
return
|
||||
|
||||
|
@ -7,6 +7,7 @@ import multiprocessing as mp
|
||||
import os
|
||||
import signal
|
||||
import threading
|
||||
from json.decoder import JSONDecodeError
|
||||
from types import FrameType
|
||||
from typing import Any, Optional, Union
|
||||
|
||||
@ -73,13 +74,21 @@ class EmbeddingsContext:
|
||||
self.requestor = EmbeddingsRequestor()
|
||||
|
||||
# load stats from disk
|
||||
stats_file = os.path.join(CONFIG_DIR, ".search_stats.json")
|
||||
try:
|
||||
with open(os.path.join(CONFIG_DIR, ".search_stats.json"), "r") as f:
|
||||
with open(stats_file, "r") as f:
|
||||
data = json.loads(f.read())
|
||||
self.thumb_stats.from_dict(data["thumb_stats"])
|
||||
self.desc_stats.from_dict(data["desc_stats"])
|
||||
except FileNotFoundError:
|
||||
pass
|
||||
except JSONDecodeError:
|
||||
logger.warning("Failed to decode semantic search stats, clearing file")
|
||||
try:
|
||||
with open(stats_file, "w") as f:
|
||||
f.write("")
|
||||
except OSError as e:
|
||||
logger.error(f"Failed to clear corrupted stats file: {e}")
|
||||
|
||||
def stop(self):
|
||||
"""Write the stats to disk as JSON on exit."""
|
||||
|
@ -340,21 +340,22 @@ class EventCleanup(threading.Thread):
|
||||
.where(Event.has_clip == False, Event.has_snapshot == False)
|
||||
.iterator()
|
||||
)
|
||||
events_to_delete = [e.id for e in events]
|
||||
events_to_delete: list[Event] = [e for e in events]
|
||||
|
||||
for e in events:
|
||||
for e in events_to_delete:
|
||||
delete_event_thumbnail(e)
|
||||
|
||||
logger.debug(f"Found {len(events_to_delete)} events that can be expired")
|
||||
if len(events_to_delete) > 0:
|
||||
for i in range(0, len(events_to_delete), CHUNK_SIZE):
|
||||
chunk = events_to_delete[i : i + CHUNK_SIZE]
|
||||
ids_to_delete = [e.id for e in events_to_delete]
|
||||
for i in range(0, len(ids_to_delete), CHUNK_SIZE):
|
||||
chunk = ids_to_delete[i : i + CHUNK_SIZE]
|
||||
logger.debug(f"Deleting {len(chunk)} events from the database")
|
||||
Event.delete().where(Event.id << chunk).execute()
|
||||
|
||||
if self.config.semantic_search.enabled:
|
||||
self.db.delete_embeddings_description(event_ids=chunk)
|
||||
self.db.delete_embeddings_thumbnail(event_ids=chunk)
|
||||
logger.debug(f"Deleted {len(events_to_delete)} embeddings")
|
||||
logger.debug(f"Deleted {len(ids_to_delete)} embeddings")
|
||||
|
||||
logger.info("Exiting event cleanup...")
|
||||
|
@ -40,10 +40,15 @@ class GenAIClient:
|
||||
event: Event,
|
||||
) -> Optional[str]:
|
||||
"""Generate a description for the frame."""
|
||||
try:
|
||||
prompt = camera_config.genai.object_prompts.get(
|
||||
event.label,
|
||||
camera_config.genai.prompt,
|
||||
).format(**model_to_dict(event))
|
||||
except KeyError as e:
|
||||
logger.error(f"Invalid key in GenAI prompt: {e}")
|
||||
return None
|
||||
|
||||
logger.debug(f"Sending images to genai provider with prompt: {prompt}")
|
||||
return self._send(prompt, thumbnails)
|
||||
|
||||
|
@ -1329,7 +1329,11 @@ class PtzAutoTracker:
|
||||
|
||||
if camera_config.onvif.autotracking.enabled:
|
||||
if not self.autotracker_init[camera]:
|
||||
self._autotracker_setup(camera_config, camera)
|
||||
future = asyncio.run_coroutine_threadsafe(
|
||||
self._autotracker_setup(camera_config, camera), self.onvif.loop
|
||||
)
|
||||
# Wait for the coroutine to complete
|
||||
future.result()
|
||||
|
||||
if self.calibrating[camera]:
|
||||
logger.debug(f"{camera}: Calibrating camera")
|
||||
|
@ -66,7 +66,7 @@ def sync_recordings(limited: bool) -> None:
|
||||
|
||||
if float(len(recordings_to_delete)) / max(1, recordings.count()) > 0.5:
|
||||
logger.warning(
|
||||
f"Deleting {(float(len(recordings_to_delete)) / recordings.count()):2f}% of recordings DB entries, could be due to configuration error. Aborting..."
|
||||
f"Deleting {(len(recordings_to_delete) / max(1, recordings.count()) * 100):.2f}% of recordings DB entries, could be due to configuration error. Aborting..."
|
||||
)
|
||||
return False
|
||||
|
||||
@ -106,7 +106,7 @@ def sync_recordings(limited: bool) -> None:
|
||||
|
||||
if float(len(files_to_delete)) / max(1, len(files_on_disk)) > 0.5:
|
||||
logger.debug(
|
||||
f"Deleting {(float(len(files_to_delete)) / len(files_on_disk)):2f}% of recordings DB entries, could be due to configuration error. Aborting..."
|
||||
f"Deleting {(len(files_to_delete) / max(1, len(files_on_disk)) * 100):.2f}% of recordings DB entries, could be due to configuration error. Aborting..."
|
||||
)
|
||||
return False
|
||||
|
||||
|
@ -140,6 +140,7 @@
|
||||
"fr": "Français (French)",
|
||||
"ar": "العربية (Arabic)",
|
||||
"pt": "Português (Portuguese)",
|
||||
"ptBR": "Português brasileiro (Brazilian Portuguese)",
|
||||
"ru": "Русский (Russian)",
|
||||
"de": "Deutsch (German)",
|
||||
"ja": "日本語 (Japanese)",
|
||||
@ -164,6 +165,13 @@
|
||||
"yue": "粵語 (Cantonese)",
|
||||
"th": "ไทย (Thai)",
|
||||
"ca": "Català (Catalan)",
|
||||
"sr": "Српски (Serbian)",
|
||||
"sl": "Slovenščina (Slovenian)",
|
||||
"lt": "Lietuvių (Lithuanian)",
|
||||
"bg": "Български (Bulgarian)",
|
||||
"gl": "Galego (Galician)",
|
||||
"id": "Bahasa Indonesia (Indonesian)",
|
||||
"ur": "اردو (Urdu)",
|
||||
"withSystem": {
|
||||
"label": "Use the system settings for language"
|
||||
}
|
||||
|
@ -54,5 +54,9 @@
|
||||
"pant": "Huohottaa",
|
||||
"snort": "Haukkua",
|
||||
"cough": "Yskä",
|
||||
"sneeze": "Niistää"
|
||||
"sneeze": "Niistää",
|
||||
"throat_clearing": "Kurkun selvittäminen",
|
||||
"sniff": "Poimi",
|
||||
"run": "Käynnistä",
|
||||
"shuffle": "Sekoitus"
|
||||
}
|
||||
|
@ -65,6 +65,13 @@
|
||||
}
|
||||
},
|
||||
"streaming": {
|
||||
"label": "Kuvavirta"
|
||||
"label": "Kuvavirta",
|
||||
"restreaming": {
|
||||
"disabled": "Uudelleentoisto ei ole käytettävissä tällä kameralla.",
|
||||
"desc": {
|
||||
"title": "Määritä go2rtc saadaksesi lisäreaaliaikanäkymän vaihtoehtoja ja ääntä tälle kameralle.",
|
||||
"readTheDocumentation": "Lue dokumentaatio"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -38,7 +38,8 @@
|
||||
"label": "Piirteet",
|
||||
"hasVideoClip": "Videoleike löytyy",
|
||||
"submittedToFrigatePlus": {
|
||||
"label": "Lähetetty Frigate+:aan"
|
||||
"label": "Lähetetty Frigate+:aan",
|
||||
"tips": "Sinun on ensin suodatettava seuratut kohteet, joilla on tilannekuva.<br /><br />Kohteita, joilla ei ole tilannekuvaa, ei voida lähettää Frigate+:aan."
|
||||
},
|
||||
"hasSnapshot": "Tilannekuva löytyy"
|
||||
},
|
||||
@ -49,6 +50,13 @@
|
||||
"scoreAsc": "Kohteen pisteet (Nouseva)",
|
||||
"scoreDesc": "Kohteen pisteet (Laskeva)",
|
||||
"speedAsc": "Arvioitu nopeus (Nouseva)",
|
||||
"speedDesc": "Arvioitu nopeus (Laskeva)"
|
||||
"speedDesc": "Arvioitu nopeus (Laskeva)",
|
||||
"relevance": "Olennaisuus"
|
||||
},
|
||||
"cameras": {
|
||||
"label": "Kameran suodattimet",
|
||||
"all": {
|
||||
"title": "Kaikki kamerat"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -27,10 +27,12 @@
|
||||
"context": "Frigate lataa semanttista hakua varten vaadittavat upotusmallit. Tämä saattaa viedä useamman minuutin, riippuen yhteytesi nopeudesta.",
|
||||
"setup": {
|
||||
"visionModel": "Vision-malli",
|
||||
"textModel": "Tekstimalli"
|
||||
"textModel": "Tekstimalli",
|
||||
"textTokenizer": "Tekstin osioija"
|
||||
},
|
||||
"tips": {
|
||||
"documentation": "Lue dokumentaatio"
|
||||
"documentation": "Lue dokumentaatio",
|
||||
"context": "Saatat haluta uudelleenindeksoida seurattavien kohteiden upotukset, kun mallit on ladattu."
|
||||
},
|
||||
"error": "Tapahtui virhe. Tarkista Frigaten lokit."
|
||||
}
|
||||
@ -74,7 +76,8 @@
|
||||
"noImageFound": "Tältä aikaleimalta ei löytynyt kuvia.",
|
||||
"createObjectMask": "Luo kohdemaski",
|
||||
"scrollViewTips": "Vieritä katsoaksesi merkittäviä hetkiä kohteen elinkaarelta.",
|
||||
"autoTrackingTips": "Kohteen rajojen sijainti on epätarkka automaattisesti seuraaville kameroille."
|
||||
"autoTrackingTips": "Kohteen rajojen sijainti on epätarkka automaattisesti seuraaville kameroille.",
|
||||
"adjustAnnotationSettings": "Säädä merkintäasetuksia"
|
||||
},
|
||||
"trackedObjectDetails": "Seurattavien kohteiden tiedot",
|
||||
"type": {
|
||||
|
@ -14,7 +14,8 @@
|
||||
"person": "Henkilö",
|
||||
"timestamp": "Aikaleima",
|
||||
"subLabelScore": "Alinimikkeen pisteet",
|
||||
"face": "Kasvojen yksityiskohdat"
|
||||
"face": "Kasvojen yksityiskohdat",
|
||||
"scoreInfo": "Alatunnisteen pistemäärä on kaikkien tunnistettujen kasvojen varmuustasojen painotettu keskiarvo, joten se voi poiketa tilannekuvassa näkyvästä pistemäärästä."
|
||||
},
|
||||
"documentTitle": "Kasvokirjasto - Frigate",
|
||||
"deleteFaceAttempts": {
|
||||
@ -31,22 +32,34 @@
|
||||
"selectItem": "Valitse {{item}}",
|
||||
"train": {
|
||||
"empty": "Ei viimeaikaisia kasvojentunnistusyrityksiä",
|
||||
"title": "Koulutus"
|
||||
"title": "Koulutus",
|
||||
"aria": "Valitse kouluta"
|
||||
},
|
||||
"collections": "Kokoelmat",
|
||||
"steps": {
|
||||
"faceName": "Anna nimi kasvoille",
|
||||
"uploadFace": "Lähetä kasvokuva",
|
||||
"nextSteps": "Seuraavat vaiheet"
|
||||
"nextSteps": "Seuraavat vaiheet",
|
||||
"description": {
|
||||
"uploadFace": "Lataa kuva henkilöstä {{name}}, jossa hänen kasvonsa näkyvät suoraan edestä päin. Kuvaa ei tarvitse rajata pelkkiin kasvoihin."
|
||||
}
|
||||
},
|
||||
"createFaceLibrary": {
|
||||
"title": "Luo kokoelma",
|
||||
"desc": "Luo uusi kokoelma",
|
||||
"new": "Luo uusi kasvo"
|
||||
"new": "Luo uusi kasvo",
|
||||
"nextSteps": "Hyvän perustan luomiseksi huomioitavaa:<li>Käytä koulutus-välilehteä valitaksesi opetukseen kuvia kustakin tunnistetusta henkilöstä</li><li>Panosta mahdollisimman suoraan otettuihin kuviin; vältä kouluttamista kulmassa kuvatuilla kuvilla.</li></ul>"
|
||||
},
|
||||
"selectFace": "Valitse kasvo",
|
||||
"deleteFaceLibrary": {
|
||||
"title": "Poista nimi",
|
||||
"desc": "Haluatko varmasti poistaa kokoelman {{name}}? Tämä poistaa pysyvästi kaikki liitetyt kasvot."
|
||||
},
|
||||
"renameFace": {
|
||||
"title": "Uudelleennimeä kasvot",
|
||||
"desc": "Anna uusi nimi tälle {{name}}"
|
||||
},
|
||||
"button": {
|
||||
"deleteFaceAttempts": "Poista kasvot"
|
||||
}
|
||||
}
|
||||
|
@ -37,8 +37,26 @@
|
||||
"beforeDateBeLaterAfter": "'Ennen' ajan täytyy olla myöhemmin kun 'jälkeen' aika.",
|
||||
"afterDatebeEarlierBefore": "'Jälkeen' ajan täytyy olla aiemmin kun 'ennen' aika.",
|
||||
"minScoreMustBeLessOrEqualMaxScore": "Arvon 'min_score' täytyy olla pienempi tai yhtäsuuri kuin 'max_score'.",
|
||||
"maxScoreMustBeGreaterOrEqualMinScore": "Arvon 'max_score' täytyy olla suurempi tai yhtäsuuri kuin 'min_score'."
|
||||
}
|
||||
}
|
||||
"maxScoreMustBeGreaterOrEqualMinScore": "Arvon 'max_score' täytyy olla suurempi tai yhtäsuuri kuin 'min_score'.",
|
||||
"minSpeedMustBeLessOrEqualMaxSpeed": "'Minimi nopeus' tulee olla pienempi tai yhtäsuuri kuin 'maksimi nopeus'.",
|
||||
"maxSpeedMustBeGreaterOrEqualMinSpeed": "'Maksimi nopeus' tulee olla suurempi tai yhtä suuri kuin 'minimi nopeus'."
|
||||
}
|
||||
},
|
||||
"tips": {
|
||||
"desc": {
|
||||
"exampleLabel": "Esimerkki:"
|
||||
},
|
||||
"title": "Tekstisuodattimien käyttö"
|
||||
},
|
||||
"header": {
|
||||
"currentFilterType": "Suodata arvoja",
|
||||
"noFilters": "Suodattimet",
|
||||
"activeFilters": "Käytössä olevat suodattimet"
|
||||
}
|
||||
},
|
||||
"similaritySearch": {
|
||||
"title": "Samankaltaisten kohteiden haku",
|
||||
"active": "Samankaltaisuushaku aktiivinen",
|
||||
"clear": "Poista samankaltaisuushaku"
|
||||
}
|
||||
}
|
||||
|
@ -44,7 +44,8 @@
|
||||
"gpuDecoder": "GPU-dekooderi",
|
||||
"gpuInfo": {
|
||||
"vainfoOutput": {
|
||||
"title": "Vainfon tulostus"
|
||||
"title": "Vainfon tulostus",
|
||||
"returnCode": "Paluuarvo: {{code}}"
|
||||
},
|
||||
"toast": {
|
||||
"success": "Kopioi GPU:n tiedot leikepöydälle"
|
||||
|
19
web/public/locales/gl/audio.json
Normal file
19
web/public/locales/gl/audio.json
Normal file
@ -0,0 +1,19 @@
|
||||
{
|
||||
"speech": "Fala",
|
||||
"babbling": "Balbuxo",
|
||||
"bicycle": "Bicicleta",
|
||||
"yell": "Berro",
|
||||
"car": "Coche",
|
||||
"crying": "Chorando",
|
||||
"sigh": "Suspiro",
|
||||
"singing": "Cantando",
|
||||
"motorcycle": "Motocicleta",
|
||||
"bus": "Bus",
|
||||
"train": "Tren",
|
||||
"boat": "Bote",
|
||||
"bird": "Paxaro",
|
||||
"cat": "Gato",
|
||||
"bellow": "Abaixo",
|
||||
"whoop": "Ei carballeira",
|
||||
"whispering": "Murmurando"
|
||||
}
|
13
web/public/locales/gl/common.json
Normal file
13
web/public/locales/gl/common.json
Normal file
@ -0,0 +1,13 @@
|
||||
{
|
||||
"time": {
|
||||
"untilForTime": "Até {{time}}",
|
||||
"untilForRestart": "Até que se reinicie Frigate.",
|
||||
"justNow": "Xusto agora",
|
||||
"last7": "Últimos 7 días",
|
||||
"last14": "Últimos 14 días",
|
||||
"thisWeek": "Esta semana",
|
||||
"today": "Hoxe",
|
||||
"untilRestart": "Ata o reinicio",
|
||||
"ago": "Fai {{timeAgo}}"
|
||||
}
|
||||
}
|
12
web/public/locales/gl/components/auth.json
Normal file
12
web/public/locales/gl/components/auth.json
Normal file
@ -0,0 +1,12 @@
|
||||
{
|
||||
"form": {
|
||||
"user": "Usuario/a",
|
||||
"password": "Contrasinal",
|
||||
"errors": {
|
||||
"passwordRequired": "Contrasinal obrigatorio",
|
||||
"unknownError": "Erro descoñecido. Revisa os logs.",
|
||||
"usernameRequired": "Usuario/a obrigatorio"
|
||||
},
|
||||
"login": "Iniciar sesión"
|
||||
}
|
||||
}
|
20
web/public/locales/gl/components/camera.json
Normal file
20
web/public/locales/gl/components/camera.json
Normal file
@ -0,0 +1,20 @@
|
||||
{
|
||||
"group": {
|
||||
"label": "Grupos de cámaras",
|
||||
"add": "Engadir Grupo de cámaras",
|
||||
"delete": {
|
||||
"confirm": {
|
||||
"title": "Confirma o borrado",
|
||||
"desc": "Seguro/a que queres borrar o Grupo de cámaras <em>{{name}}</em>?"
|
||||
},
|
||||
"label": "Borrar o Grupo de Cámaras"
|
||||
},
|
||||
"name": {
|
||||
"placeholder": "Introduce un nome…",
|
||||
"errorMessage": {
|
||||
"nameMustNotPeriod": "Grupo de Cámaras non debe conter un punto."
|
||||
}
|
||||
},
|
||||
"edit": "Editar o Grupo de Cámaras"
|
||||
}
|
||||
}
|
21
web/public/locales/gl/components/dialog.json
Normal file
21
web/public/locales/gl/components/dialog.json
Normal file
@ -0,0 +1,21 @@
|
||||
{
|
||||
"restart": {
|
||||
"title": "Estás seguro/a que queres reiniciar Frigate?",
|
||||
"button": "Reiniciar",
|
||||
"restarting": {
|
||||
"button": "Forzar reinicio",
|
||||
"content": "Esta páxina recargarase en {{countdown}} segundos.",
|
||||
"title": "Frigate está Reiniciando"
|
||||
}
|
||||
},
|
||||
"explore": {
|
||||
"plus": {
|
||||
"review": {
|
||||
"question": {
|
||||
"label": "Confirma esta etiqueta para Frigate Plus",
|
||||
"ask_an": "E isto un obxecto <code>{{label}}</code>?"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
16
web/public/locales/gl/components/filter.json
Normal file
16
web/public/locales/gl/components/filter.json
Normal file
@ -0,0 +1,16 @@
|
||||
{
|
||||
"filter": "Filtrar",
|
||||
"labels": {
|
||||
"label": "Etiquetas",
|
||||
"count_one": "{{count}} Etiqueta",
|
||||
"all": {
|
||||
"short": "Etiquetas",
|
||||
"title": "Todas as Etiquetas"
|
||||
}
|
||||
},
|
||||
"zones": {
|
||||
"all": {
|
||||
"title": "Tódalas zonas"
|
||||
}
|
||||
}
|
||||
}
|
8
web/public/locales/gl/components/icons.json
Normal file
8
web/public/locales/gl/components/icons.json
Normal file
@ -0,0 +1,8 @@
|
||||
{
|
||||
"iconPicker": {
|
||||
"selectIcon": "Selecciona unha icona",
|
||||
"search": {
|
||||
"placeholder": "Pesquisar unha icona…"
|
||||
}
|
||||
}
|
||||
}
|
10
web/public/locales/gl/components/input.json
Normal file
10
web/public/locales/gl/components/input.json
Normal file
@ -0,0 +1,10 @@
|
||||
{
|
||||
"button": {
|
||||
"downloadVideo": {
|
||||
"label": "Descargar vídeo",
|
||||
"toast": {
|
||||
"success": "O teu vídeo de revisión comezou a descargarse."
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
14
web/public/locales/gl/components/player.json
Normal file
14
web/public/locales/gl/components/player.json
Normal file
@ -0,0 +1,14 @@
|
||||
{
|
||||
"noRecordingsFoundForThisTime": "Non se atoparon grabacións para ese período",
|
||||
"noPreviewFound": "Non se atopou previsualización",
|
||||
"submitFrigatePlus": {
|
||||
"submit": "Enviar",
|
||||
"title": "Enviar este frame a Frigate+?"
|
||||
},
|
||||
"stats": {
|
||||
"streamType": {
|
||||
"title": "Tipo de emisión:"
|
||||
}
|
||||
},
|
||||
"noPreviewFoundFor": "Vista Previa non atopada para {{cameraName}}"
|
||||
}
|
18
web/public/locales/gl/objects.json
Normal file
18
web/public/locales/gl/objects.json
Normal file
@ -0,0 +1,18 @@
|
||||
{
|
||||
"person": "Persoa",
|
||||
"bicycle": "Bicicleta",
|
||||
"airplane": "Avión",
|
||||
"motorcycle": "Motocicleta",
|
||||
"bus": "Bus",
|
||||
"train": "Tren",
|
||||
"boat": "Bote",
|
||||
"traffic_light": "Luces de tráfico",
|
||||
"fire_hydrant": "Boca de incendio",
|
||||
"street_sign": "Sinal de tráfico",
|
||||
"stop_sign": "Sinal de Stop",
|
||||
"parking_meter": "Parquímetro",
|
||||
"bench": "Banco",
|
||||
"bird": "Paxaro",
|
||||
"cat": "Gato",
|
||||
"car": "Coche"
|
||||
}
|
12
web/public/locales/gl/views/configEditor.json
Normal file
12
web/public/locales/gl/views/configEditor.json
Normal file
@ -0,0 +1,12 @@
|
||||
{
|
||||
"documentTitle": "Editor de configuración - Frigate",
|
||||
"configEditor": "Editor de Preferencias",
|
||||
"saveOnly": "Só gardar",
|
||||
"toast": {
|
||||
"error": {
|
||||
"savingError": "Erro gardando configuración"
|
||||
}
|
||||
},
|
||||
"saveAndRestart": "Gardar e Reiniciar",
|
||||
"copyConfig": "Copiar Configuración"
|
||||
}
|
10
web/public/locales/gl/views/events.json
Normal file
10
web/public/locales/gl/views/events.json
Normal file
@ -0,0 +1,10 @@
|
||||
{
|
||||
"alerts": "Alertas",
|
||||
"detections": "Deteccións",
|
||||
"allCameras": "Tódalas cámaras",
|
||||
"timeline.aria": "Selecciona liña de tempo",
|
||||
"motion": {
|
||||
"only": "Só movemento",
|
||||
"label": "Movemento"
|
||||
}
|
||||
}
|
12
web/public/locales/gl/views/explore.json
Normal file
12
web/public/locales/gl/views/explore.json
Normal file
@ -0,0 +1,12 @@
|
||||
{
|
||||
"documentTitle": "Explorar - Frigate",
|
||||
"generativeAI": "IA xenerativa",
|
||||
"exploreMore": "Explorar máis obxectos {{label}}",
|
||||
"exploreIsUnavailable": {
|
||||
"title": "Explorar non está Dispoñible",
|
||||
"embeddingsReindexing": {
|
||||
"finishingShortly": "Rematando ceo",
|
||||
"startingUp": "Comezando…"
|
||||
}
|
||||
}
|
||||
}
|
10
web/public/locales/gl/views/exports.json
Normal file
10
web/public/locales/gl/views/exports.json
Normal file
@ -0,0 +1,10 @@
|
||||
{
|
||||
"documentTitle": "Exportar - Frigate",
|
||||
"search": "Pesquisar",
|
||||
"deleteExport.desc": "Seguro que queres borrar {{exportName}}?",
|
||||
"editExport": {
|
||||
"saveExport": "Garda exportación"
|
||||
},
|
||||
"deleteExport": "Borrar exportación",
|
||||
"noExports": "Non se atoparon exportacións"
|
||||
}
|
11
web/public/locales/gl/views/faceLibrary.json
Normal file
11
web/public/locales/gl/views/faceLibrary.json
Normal file
@ -0,0 +1,11 @@
|
||||
{
|
||||
"description": {
|
||||
"addFace": "Navegar para engadir unha nova colección á Libraría de Caras.",
|
||||
"placeholder": "Introduce un nome para esta colección",
|
||||
"invalidName": "Nome non válido. Os nomes só poden incluír letras, números, espazos, apóstrofes, guións baixos e guións."
|
||||
},
|
||||
"details": {
|
||||
"unknown": "Descoñecido",
|
||||
"person": "Persoa"
|
||||
}
|
||||
}
|
19
web/public/locales/gl/views/live.json
Normal file
19
web/public/locales/gl/views/live.json
Normal file
@ -0,0 +1,19 @@
|
||||
{
|
||||
"documentTitle": "Directo - Frigate",
|
||||
"documentTitle.withCamera": "{{camera}} - Directo - Frigate",
|
||||
"twoWayTalk": {
|
||||
"disable": "Deshabilita a Conversa de dous sentidos",
|
||||
"enable": "Habilitar a Conversa de dous sentidos"
|
||||
},
|
||||
"ptz": {
|
||||
"move": {
|
||||
"clickMove": {
|
||||
"label": "Pincha no frame para centrar a cámara"
|
||||
}
|
||||
}
|
||||
},
|
||||
"cameraAudio": {
|
||||
"enable": "Habilitar Audio de cámara"
|
||||
},
|
||||
"lowBandwidthMode": "Modo de Baixa Banda Ancha"
|
||||
}
|
11
web/public/locales/gl/views/recording.json
Normal file
11
web/public/locales/gl/views/recording.json
Normal file
@ -0,0 +1,11 @@
|
||||
{
|
||||
"filter": "Filtrar",
|
||||
"export": "Exportar",
|
||||
"calendar": "Calendario",
|
||||
"toast": {
|
||||
"error": {
|
||||
"noValidTimeSelected": "Rango de tempo inválido"
|
||||
}
|
||||
},
|
||||
"filters": "Filtros"
|
||||
}
|
15
web/public/locales/gl/views/search.json
Normal file
15
web/public/locales/gl/views/search.json
Normal file
@ -0,0 +1,15 @@
|
||||
{
|
||||
"search": "Pesquisar",
|
||||
"savedSearches": "Pesquisas gardadas",
|
||||
"button": {
|
||||
"save": "Gardar pesquisa",
|
||||
"filterActive": "Filtros activos",
|
||||
"clear": "Borrar pesquisa"
|
||||
},
|
||||
"filter": {
|
||||
"label": {
|
||||
"cameras": "Cámaras"
|
||||
}
|
||||
},
|
||||
"searchFor": "Procurar por {{inputValue}}"
|
||||
}
|
11
web/public/locales/gl/views/settings.json
Normal file
11
web/public/locales/gl/views/settings.json
Normal file
@ -0,0 +1,11 @@
|
||||
{
|
||||
"documentTitle": {
|
||||
"default": "Preferencias - Frigate",
|
||||
"authentication": "Configuracións de Autenticación - Frigate",
|
||||
"camera": "Configuracións da Cámara - Frigate",
|
||||
"general": "Configuracións xerais - Frigate",
|
||||
"notifications": "Configuración de Notificacións - Frigate",
|
||||
"enrichments": "Configuración complementarias - Frigate",
|
||||
"masksAndZones": "Editor de máscaras e zonas - Frigate"
|
||||
}
|
||||
}
|
17
web/public/locales/gl/views/system.json
Normal file
17
web/public/locales/gl/views/system.json
Normal file
@ -0,0 +1,17 @@
|
||||
{
|
||||
"documentTitle": {
|
||||
"cameras": "Estatísticas de cámaras - Frigate",
|
||||
"storage": "Estatísticas de Almacenamento - Frigate",
|
||||
"general": "Estatísticas Xerais - Frigate",
|
||||
"enrichments": "Estatísticas complementarias - Frigate",
|
||||
"logs": {
|
||||
"frigate": "Rexistros de Frigate - Frigate"
|
||||
}
|
||||
},
|
||||
"title": "Sistema",
|
||||
"logs": {
|
||||
"download": {
|
||||
"label": "Descargar logs"
|
||||
}
|
||||
}
|
||||
}
|
@ -5,7 +5,7 @@
|
||||
"untilForRestart": "Amíg a Frigate újraindul.",
|
||||
"untilRestart": "Amíg újraindul",
|
||||
"justNow": "Most",
|
||||
"ago": "{{timeAgo}} ezelőtt",
|
||||
"ago": "Ennyi ideje: {{timeAgo}}",
|
||||
"today": "Ma",
|
||||
"yesterday": "Tegnap",
|
||||
"last7": "Elmúlt 7 nap",
|
||||
@ -14,15 +14,15 @@
|
||||
"thisWeek": "Ezen a héten",
|
||||
"lastWeek": "Előző héten",
|
||||
"thisMonth": "Ebben a hónapban",
|
||||
"lastMonth": "Előző hónap",
|
||||
"lastMonth": "Előző hónapban",
|
||||
"5minutes": "5 perc",
|
||||
"10minutes": "10 perc",
|
||||
"30minutes": "30 perc",
|
||||
"1hour": "1 óra",
|
||||
"12hours": "12 óra",
|
||||
"24hours": "24 óra",
|
||||
"pm": "PM",
|
||||
"am": "AM",
|
||||
"pm": "du",
|
||||
"am": "de",
|
||||
"yr": "{{time}} év",
|
||||
"mo": "{{time}} hónap",
|
||||
"d": "{{time}} nap",
|
||||
@ -41,38 +41,38 @@
|
||||
"day_one": "{{time}} nap",
|
||||
"day_other": "{{time}} napok",
|
||||
"formattedTimestamp": {
|
||||
"24hour": "HHH n, ÓÓ:pp:mm",
|
||||
"12hour": "HHH d, ó:pp:mm aaa"
|
||||
"24hour": "MMM d, HH:mm:ss",
|
||||
"12hour": "MMM d, h:mm:ss aaa"
|
||||
},
|
||||
"formattedTimestampMonthDayYear": {
|
||||
"12hour": "HHH d, éééé",
|
||||
"24hour": "HHH n, éééé"
|
||||
"12hour": "MMM d, yyyy",
|
||||
"24hour": "MMM d, yyyy"
|
||||
},
|
||||
"formattedTimestampHourMinute": {
|
||||
"24hour": "ÓÓ:pp",
|
||||
"12hour": "ó:pp aaa"
|
||||
"24hour": "HH:mm",
|
||||
"12hour": "h:mm aaa"
|
||||
},
|
||||
"formattedTimestamp2": {
|
||||
"24hour": "n HHH ÓÓ:pp:mm",
|
||||
"12hour": "HH/NN ó:pp:mma"
|
||||
"24hour": "d MMM HH:mm:ss",
|
||||
"12hour": "MM/dd h:mm:ssa"
|
||||
},
|
||||
"formattedTimestampHourMinuteSecond": {
|
||||
"24hour": "ÓÓ:pp:mm",
|
||||
"12hour": "ó:pp:mm aaa"
|
||||
"24hour": "HH:mm:ss",
|
||||
"12hour": "h:mm:ss aaa"
|
||||
},
|
||||
"formattedTimestampMonthDayYearHourMinute": {
|
||||
"24hour": "HHH n éééé, ÓÓ:pp",
|
||||
"12hour": "HHH n éééé, ó:pp aaa"
|
||||
"24hour": "MMM d yyyy, HH:mm",
|
||||
"12hour": "MMM d yyyy, h:mm aaa"
|
||||
},
|
||||
"formattedTimestampFilename": {
|
||||
"24hour": "HH-nn-éé-ÓÓ-pp-mm",
|
||||
"12hour": "HH-nn-éé-ó-pp-mm-a"
|
||||
"24hour": "yy-MM-dd-HH-mm-ss",
|
||||
"12hour": "yy-MM-dd-h-mm-ss-a"
|
||||
},
|
||||
"formattedTimestampMonthDayHourMinute": {
|
||||
"24hour": "HHH n, ÓÓ:pp",
|
||||
"12hour": "HHH n, ó:pp aaa"
|
||||
"24hour": "MMM d, HH:mm",
|
||||
"12hour": "MMM d, h:mm aaa"
|
||||
},
|
||||
"formattedTimestampMonthDay": "HHH n"
|
||||
"formattedTimestampMonthDay": "MMM d"
|
||||
},
|
||||
"menu": {
|
||||
"darkMode": {
|
||||
|
@ -22,7 +22,7 @@
|
||||
"ask_a": "Ez a tárgy egy <code>{{label}}</code>?",
|
||||
"label": "Erősítse meg ezt a cimkét a Frigate plus felé",
|
||||
"ask_an": "Ez a tárgy egy <code>{{label}}</code>?",
|
||||
"ask_full": "Ez egy <code>{{untranslatedLabel}}</code>{{translatedLabel}} tárgy?"
|
||||
"ask_full": "Ez a tárgy egy <code>{{untranslatedLabel}}</code> ({{translatedLabel}})?"
|
||||
}
|
||||
}
|
||||
},
|
||||
|
@ -31,7 +31,7 @@
|
||||
"recordings": {
|
||||
"documentTitle": "Felvételek - Frigate"
|
||||
},
|
||||
"markTheseItemsAsReviewed": "Ezen elwmek megjelölése áttekintettként",
|
||||
"markTheseItemsAsReviewed": "Ezen elemek megjelölése áttekintettként",
|
||||
"markAsReviewed": "Megjelölés Áttekintettként",
|
||||
"selected_one": "{{count}} kiválasztva",
|
||||
"selected_other": "{{count}} kiválasztva"
|
||||
|
@ -6,7 +6,7 @@
|
||||
"classification": "Osztályozási beállítások - Frigate",
|
||||
"masksAndZones": "Maszk és zónaszerkesztő - Frigate",
|
||||
"object": "Hibakeresés - Frigate",
|
||||
"general": "Áltlános beállítások - Frigate",
|
||||
"general": "Áltlános Beállítások - Frigate",
|
||||
"frigatePlus": "Frigate+ beállítások - Frigate",
|
||||
"notifications": "Értesítések beállítása - Frigate",
|
||||
"motionTuner": "Mozgás Hangoló - Frigate",
|
||||
@ -42,7 +42,7 @@
|
||||
"desc": "Automatikusan váltson át a kamera élő nézetére, amikor aktivitást észlel. Ha ez az opció ki van kapcsolva, akkor az Élő irányítópulton a statikus kameraképek csak percenként egyszer frissülnek."
|
||||
},
|
||||
"playAlertVideos": {
|
||||
"label": "Riadó Videók Lejátszása",
|
||||
"label": "Riasztási Videók Lejátszása",
|
||||
"desc": "Alapértelmezetten az Élő irányítópulton a legutóbbi riasztások kis, ismétlődő videóként jelennek meg. Kapcsolja ki ezt az opciót, ha csak állóképet szeretne megjeleníteni a legutóbbi riasztásokról ezen az eszközön/böngészőben."
|
||||
}
|
||||
},
|
||||
@ -143,7 +143,7 @@
|
||||
"success": "A kiegészítő beállítások elmentésre kerültek. A módosítások alkalmazásához indítsa újra a Frigate-et."
|
||||
},
|
||||
"unsavedChanges": "Mentetlen gazdagítási beállítás változtatások",
|
||||
"title": "Kiegészítés Beállítások",
|
||||
"title": "Kiegészítők Beállítása",
|
||||
"restart_required": "Újraindítás szükséges (a kiegészítő beállítások megváltoztak)"
|
||||
},
|
||||
"notification": {
|
||||
|
@ -16,7 +16,8 @@
|
||||
},
|
||||
"review": {
|
||||
"question": {
|
||||
"label": "Konfirmasi label ini untuk Frigate Plus"
|
||||
"label": "Konfirmasi label ini untuk Frigate Plus",
|
||||
"ask_a": "Apakah objek ini adalah sebuah<code>{{label}}</code>?"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -11,5 +11,6 @@
|
||||
"alert": "Tidak ada peringatan untuk ditinjau",
|
||||
"motion": "Data gerakan tidak ditemukan"
|
||||
},
|
||||
"timeline.aria": "Pilih timeline"
|
||||
"timeline.aria": "Pilih timeline",
|
||||
"timeline": "Linimasa"
|
||||
}
|
||||
|
@ -7,7 +7,10 @@
|
||||
"context": "Jelajahi dapat digunakan setelah embedding objek yang dilacak selesai di-reindex.",
|
||||
"startingUp": "Sedang memulai…",
|
||||
"estimatedTime": "Perkiraan waktu tersisa:",
|
||||
"finishingShortly": "Selesai sesaat lagi"
|
||||
"finishingShortly": "Selesai sesaat lagi",
|
||||
"step": {
|
||||
"thumbnailsEmbedded": "Keluku dilampirkan "
|
||||
}
|
||||
}
|
||||
},
|
||||
"details": {
|
||||
|
@ -8,5 +8,6 @@
|
||||
"delete": "Hapus pencarian yang disimpan",
|
||||
"filterInformation": "Saring Informasi",
|
||||
"filterActive": "Filter aktif"
|
||||
}
|
||||
},
|
||||
"trackedObjectId": "Tracked Object ID"
|
||||
}
|
||||
|
1
web/public/locales/ko/audio.json
Normal file
1
web/public/locales/ko/audio.json
Normal file
@ -0,0 +1 @@
|
||||
{}
|
1
web/public/locales/ko/common.json
Normal file
1
web/public/locales/ko/common.json
Normal file
@ -0,0 +1 @@
|
||||
{}
|
1
web/public/locales/ko/components/auth.json
Normal file
1
web/public/locales/ko/components/auth.json
Normal file
@ -0,0 +1 @@
|
||||
{}
|
1
web/public/locales/ko/components/camera.json
Normal file
1
web/public/locales/ko/components/camera.json
Normal file
@ -0,0 +1 @@
|
||||
{}
|
1
web/public/locales/ko/components/dialog.json
Normal file
1
web/public/locales/ko/components/dialog.json
Normal file
@ -0,0 +1 @@
|
||||
{}
|
1
web/public/locales/ko/components/filter.json
Normal file
1
web/public/locales/ko/components/filter.json
Normal file
@ -0,0 +1 @@
|
||||
{}
|
1
web/public/locales/ko/components/icons.json
Normal file
1
web/public/locales/ko/components/icons.json
Normal file
@ -0,0 +1 @@
|
||||
{}
|
1
web/public/locales/ko/components/input.json
Normal file
1
web/public/locales/ko/components/input.json
Normal file
@ -0,0 +1 @@
|
||||
{}
|
1
web/public/locales/ko/components/player.json
Normal file
1
web/public/locales/ko/components/player.json
Normal file
@ -0,0 +1 @@
|
||||
{}
|
1
web/public/locales/ko/objects.json
Normal file
1
web/public/locales/ko/objects.json
Normal file
@ -0,0 +1 @@
|
||||
{}
|
1
web/public/locales/ko/views/configEditor.json
Normal file
1
web/public/locales/ko/views/configEditor.json
Normal file
@ -0,0 +1 @@
|
||||
{}
|
1
web/public/locales/ko/views/events.json
Normal file
1
web/public/locales/ko/views/events.json
Normal file
@ -0,0 +1 @@
|
||||
{}
|
1
web/public/locales/ko/views/explore.json
Normal file
1
web/public/locales/ko/views/explore.json
Normal file
@ -0,0 +1 @@
|
||||
{}
|
1
web/public/locales/ko/views/exports.json
Normal file
1
web/public/locales/ko/views/exports.json
Normal file
@ -0,0 +1 @@
|
||||
{}
|
1
web/public/locales/ko/views/faceLibrary.json
Normal file
1
web/public/locales/ko/views/faceLibrary.json
Normal file
@ -0,0 +1 @@
|
||||
{}
|
1
web/public/locales/ko/views/live.json
Normal file
1
web/public/locales/ko/views/live.json
Normal file
@ -0,0 +1 @@
|
||||
{}
|
1
web/public/locales/ko/views/recording.json
Normal file
1
web/public/locales/ko/views/recording.json
Normal file
@ -0,0 +1 @@
|
||||
{}
|
1
web/public/locales/ko/views/search.json
Normal file
1
web/public/locales/ko/views/search.json
Normal file
@ -0,0 +1 @@
|
||||
{}
|
1
web/public/locales/ko/views/settings.json
Normal file
1
web/public/locales/ko/views/settings.json
Normal file
@ -0,0 +1 @@
|
||||
{}
|
1
web/public/locales/ko/views/system.json
Normal file
1
web/public/locales/ko/views/system.json
Normal file
@ -0,0 +1 @@
|
||||
{}
|
38
web/public/locales/lt/audio.json
Normal file
38
web/public/locales/lt/audio.json
Normal file
@ -0,0 +1,38 @@
|
||||
{
|
||||
"camera": "Kamera",
|
||||
"speech": "Kalbėjimas",
|
||||
"bicycle": "Dviratis",
|
||||
"car": "Automobilis",
|
||||
"motorcycle": "Motociklas",
|
||||
"bus": "Autobusas",
|
||||
"train": "Traukinys",
|
||||
"boat": "Valtis",
|
||||
"bird": "Paukštis",
|
||||
"cat": "Katė",
|
||||
"dog": "Šuo",
|
||||
"horse": "Arklys",
|
||||
"sheep": "Avis",
|
||||
"babbling": "Burbėjimas",
|
||||
"yell": "Šūksnis",
|
||||
"skateboard": "Riedlentė",
|
||||
"door": "Durys",
|
||||
"mouse": "Pelė",
|
||||
"keyboard": "Klaviatūra",
|
||||
"sink": "Kriauklė",
|
||||
"blender": "Plakiklis",
|
||||
"clock": "Laikrodis",
|
||||
"scissors": "Žirklės",
|
||||
"hair_dryer": "Plaukų Džiovintuvas",
|
||||
"toothbrush": "Dantų šepetėlis",
|
||||
"vehicle": "Mašina",
|
||||
"animal": "Gyvūnas",
|
||||
"bark": "Lojimas",
|
||||
"goat": "Ožka",
|
||||
"bellow": "Apačioje",
|
||||
"whoop": "Rėkavimas",
|
||||
"whispering": "Šnabždėjimas",
|
||||
"laughter": "Juokas",
|
||||
"snicker": "Kikenimas",
|
||||
"crying": "Verkimas",
|
||||
"singing": "Dainavimas"
|
||||
}
|
214
web/public/locales/lt/common.json
Normal file
214
web/public/locales/lt/common.json
Normal file
@ -0,0 +1,214 @@
|
||||
{
|
||||
"time": {
|
||||
"untilForTime": "Iki {{time}}",
|
||||
"untilForRestart": "Iki kol Frigate persikraus.",
|
||||
"untilRestart": "Iki perkrovimo",
|
||||
"ago": "prieš {{timeAgo}}",
|
||||
"justNow": "Ką tik",
|
||||
"today": "Šiandien",
|
||||
"yesterday": "Vakar",
|
||||
"last7": "Paskutinės 7 dienos",
|
||||
"last14": "Paskutinės 14 dienų",
|
||||
"last30": "Paskutinės 30 dienų",
|
||||
"thisWeek": "Šią Savaitę",
|
||||
"lastWeek": "Praeitą Savaitę",
|
||||
"thisMonth": "Šį Mėnesį",
|
||||
"lastMonth": "Praeitą Mėnesį",
|
||||
"5minutes": "5 minutės",
|
||||
"10minutes": "10 minučių",
|
||||
"30minutes": "30 minučių",
|
||||
"1hour": "1 valandą",
|
||||
"12hours": "12 valandų",
|
||||
"24hours": "24 valandos",
|
||||
"pm": "pm",
|
||||
"am": "am",
|
||||
"yr": "{{time}}m",
|
||||
"year_one": "{{time}} metai",
|
||||
"year_few": "{{time}} metai",
|
||||
"year_other": "{{time}} metų",
|
||||
"mo": "{{time}}mėn",
|
||||
"month_one": "{{time}} mėnuo",
|
||||
"month_few": "{{time}} mėnesiai",
|
||||
"month_other": "{{time}} mėnesių",
|
||||
"d": "{{time}}d",
|
||||
"day_one": "{{time}} diena",
|
||||
"day_few": "{{time}} dienos",
|
||||
"day_other": "{{time}} dienų",
|
||||
"h": "{{time}}v",
|
||||
"hour_one": "{{time}} valanda",
|
||||
"hour_few": "{{time}} valandos",
|
||||
"hour_other": "{{time}} valandų",
|
||||
"m": "{{time}}min",
|
||||
"minute_one": "{{time}} minutė",
|
||||
"minute_few": "{{time}} minutės",
|
||||
"minute_other": "{{time}} minučių",
|
||||
"s": "{{time}}s",
|
||||
"second_one": "{{time}} sekundė",
|
||||
"second_few": "{{time}} sekundės",
|
||||
"second_other": "{{time}} sekundžių",
|
||||
"formattedTimestamp": {
|
||||
"12hour": ""
|
||||
}
|
||||
},
|
||||
"unit": {
|
||||
"speed": {
|
||||
"kph": "kmh"
|
||||
},
|
||||
"length": {
|
||||
"feet": "pėdos",
|
||||
"meters": "metrai"
|
||||
}
|
||||
},
|
||||
"label": {
|
||||
"back": "Eiti atgal"
|
||||
},
|
||||
"button": {
|
||||
"apply": "Pritaikyti",
|
||||
"reset": "Atstatyti",
|
||||
"done": "Baigta",
|
||||
"enabled": "Įjungta",
|
||||
"enable": "Įjungti",
|
||||
"disabled": "Išjungta",
|
||||
"disable": "Išjungti",
|
||||
"save": "Išsaugoti",
|
||||
"saving": "Saugoma…",
|
||||
"cancel": "Atšaukti",
|
||||
"close": "Užverti",
|
||||
"copy": "Kopijuoti",
|
||||
"back": "Atgal",
|
||||
"history": "Istorija",
|
||||
"fullscreen": "Pilnas Ekranas",
|
||||
"exitFullscreen": "Išeiti iš Pilno Ekrano",
|
||||
"pictureInPicture": "Paveikslėlis Paveiksle",
|
||||
"twoWayTalk": "Dvikryptis Kalbėjimas",
|
||||
"cameraAudio": "Kameros Garsas",
|
||||
"on": "",
|
||||
"edit": "Redaguoti",
|
||||
"copyCoordinates": "Kopijuoti koordinates",
|
||||
"delete": "Ištrinti",
|
||||
"yes": "Taip",
|
||||
"no": "Ne",
|
||||
"download": "Atsisiųsti",
|
||||
"info": "",
|
||||
"suspended": "Pristatbdytas",
|
||||
"unsuspended": "Atnaujinti",
|
||||
"play": "Groti",
|
||||
"unselect": "Atžymėti",
|
||||
"export": "Eksportuoti",
|
||||
"deleteNow": "Trinti Dabar",
|
||||
"next": "Kitas"
|
||||
},
|
||||
"menu": {
|
||||
"system": "Sistema",
|
||||
"systemMetrics": "Sistemos duomenys",
|
||||
"configuration": "Konfiguracija",
|
||||
"systemLogs": "Sistemos įrašai",
|
||||
"settings": "Nustatymai",
|
||||
"configurationEditor": "Konfiguracijos Redaktorius",
|
||||
"languages": "Kalbos",
|
||||
"language": {
|
||||
"en": "Anglų",
|
||||
"es": "Ispanų",
|
||||
"zhCN": "Kinų (supaprastinta)",
|
||||
"fr": "Prancūzų",
|
||||
"ar": "Arabų",
|
||||
"pt": "Portugalų",
|
||||
"ru": "Rusų",
|
||||
"de": "Vokiečių",
|
||||
"ja": "Japonų",
|
||||
"tr": "Turkų",
|
||||
"it": "Italų",
|
||||
"nl": "Olandų",
|
||||
"sv": "Švedų",
|
||||
"cs": "Čekų",
|
||||
"nb": "Norvegų",
|
||||
"vi": "Vietnamiečių",
|
||||
"fa": "Persų",
|
||||
"pl": "Lenkų",
|
||||
"uk": "Ukrainos",
|
||||
"el": "Graikų",
|
||||
"ro": "Romūnijos",
|
||||
"hu": "Vengrų",
|
||||
"fi": "Suomių",
|
||||
"da": "Danų",
|
||||
"sk": "Slovėnų",
|
||||
"withSystem": {
|
||||
"label": "Kalbai naudoti sistemos nustatymus"
|
||||
}
|
||||
},
|
||||
"appearance": "Išvaizda",
|
||||
"darkMode": {
|
||||
"label": "Tamsusis Rėžimas",
|
||||
"light": "Šviesus",
|
||||
"dark": "Tamsus",
|
||||
"withSystem": {
|
||||
"label": "Šviesiam ar tamsiam rėžimui naudoti sistemos nustatymus"
|
||||
}
|
||||
},
|
||||
"withSystem": "Sistema",
|
||||
"theme": {
|
||||
"label": "Tema",
|
||||
"blue": "Mėlyna",
|
||||
"green": "Žalia",
|
||||
"nord": "Šiaurietiška",
|
||||
"red": "Raudona",
|
||||
"highcontrast": "Didelio Kontrasto",
|
||||
"default": "Numatyta"
|
||||
},
|
||||
"help": "Pagalba",
|
||||
"documentation": {
|
||||
"title": "Dokumentacija",
|
||||
"label": "Frigate dokumentacija"
|
||||
},
|
||||
"restart": "Perkrauti Frigate",
|
||||
"live": {
|
||||
"title": "Tiesiogiai",
|
||||
"allCameras": "Visos Kameros",
|
||||
"cameras": {
|
||||
"title": "Kameros",
|
||||
"count_one": "{{count}} Kamera",
|
||||
"count_few": "{{count}} Kameros",
|
||||
"count_other": "{{count}} Kamerų"
|
||||
}
|
||||
},
|
||||
"review": "Peržiūros",
|
||||
"explore": "Iškoti",
|
||||
"export": "Eksportuoti",
|
||||
"faceLibrary": "Veidų Biblioteka",
|
||||
"user": {
|
||||
"title": "Vartotojas",
|
||||
"account": "Paskyra",
|
||||
"current": "Esamas vartotojas: {{user}}",
|
||||
"anonymous": "neidentifikuotas",
|
||||
"logout": "atsijungti",
|
||||
"setPassword": "Nustatyti Slaptažodi"
|
||||
}
|
||||
},
|
||||
"toast": {
|
||||
"copyUrlToClipboard": "URL nukopijuotas į atmintį.",
|
||||
"save": {
|
||||
"title": "Išsaugoti",
|
||||
"error": {
|
||||
"title": "Nepavyko išsaugoti konfiguracijos pakeitimų: {{errorMessage}}",
|
||||
"noMessage": "Nepavyko išsaugoti konfiguracijos pakeitimų"
|
||||
}
|
||||
}
|
||||
},
|
||||
"role": {
|
||||
"title": "Rolė",
|
||||
"admin": "Adminas",
|
||||
"viewer": "Žiūrėtojas",
|
||||
"desc": "Adminai turi pilną prieigą prie visų Frigate vartotojo sąsajos fukncijų. Žiūrėtojai yra apriboti peržiūrėti kameras, peržiūrų įrašus ir istorinius įrašus."
|
||||
},
|
||||
"pagination": {
|
||||
"label": "puslapiavimas",
|
||||
"previous": {
|
||||
"title": "Ankstesnis",
|
||||
"label": "Eiti į ankstesnį puslapį"
|
||||
},
|
||||
"next": {
|
||||
"title": "Sekantis",
|
||||
"label": "Eiti į sekantį puslapį"
|
||||
}
|
||||
}
|
||||
}
|
15
web/public/locales/lt/components/auth.json
Normal file
15
web/public/locales/lt/components/auth.json
Normal file
@ -0,0 +1,15 @@
|
||||
{
|
||||
"form": {
|
||||
"user": "Vartotojo vardas",
|
||||
"password": "Slaptažodis",
|
||||
"login": "Prisijungti",
|
||||
"errors": {
|
||||
"usernameRequired": "Vartotojo vardas yra privalomas",
|
||||
"passwordRequired": "Slaptažodis yra privalomas",
|
||||
"rateLimit": "Viršytos nustatytos ribos. Pabandykite vėliau.",
|
||||
"loginFailed": "Prisijungti nepavyko",
|
||||
"unknownError": "Nežinoma klaida. Patikrinkite įrašus.",
|
||||
"webUnknownError": "Nežinoma klaida. Patikrinkite konsolės įrašus."
|
||||
}
|
||||
}
|
||||
}
|
22
web/public/locales/lt/components/camera.json
Normal file
22
web/public/locales/lt/components/camera.json
Normal file
@ -0,0 +1,22 @@
|
||||
{
|
||||
"group": {
|
||||
"label": "Kamerų Grupės",
|
||||
"add": "Sukurti Kamerų Grupę",
|
||||
"edit": "Modifikuoti Kamerų Grupę",
|
||||
"delete": {
|
||||
"label": "Ištrinti Kamerų Grupę",
|
||||
"confirm": {
|
||||
"title": "Patvirtinti ištrynimą",
|
||||
"desc": "Ar tikrai norite ištrinti šią kamerų grupę <em>{{name}}</em>?"
|
||||
}
|
||||
},
|
||||
"name": {
|
||||
"label": "Pavadinimas",
|
||||
"placeholder": "Įveskite pavadinimą…",
|
||||
"errorMessage": {
|
||||
"mustLeastCharacters": "Kamerų grupės pavadinimas turi būti bent 2 simbolių.",
|
||||
"exists": "Kamerų grupės pavadinimas jau egzistuoja."
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
25
web/public/locales/lt/components/dialog.json
Normal file
25
web/public/locales/lt/components/dialog.json
Normal file
@ -0,0 +1,25 @@
|
||||
{
|
||||
"restart": {
|
||||
"title": "Ar įsitikinę kad norite perkrauti Frigate?",
|
||||
"button": "Perkrauti",
|
||||
"restarting": {
|
||||
"title": "Frigate Persikrauna",
|
||||
"content": "Šis puslapis persikraus už {{countdown}} sekundžių.",
|
||||
"button": "Priverstinai Perkrauti Dabar"
|
||||
}
|
||||
},
|
||||
"explore": {
|
||||
"plus": {
|
||||
"review": {
|
||||
"question": {
|
||||
"ask_a": "Ar šis objektas yra <code>{{label}}</code>?",
|
||||
"ask_an": "Ar šis objektas yra <code>{{label}}</code>?",
|
||||
"label": "Patvirtinti šią etiketę į Frigate Plus"
|
||||
}
|
||||
},
|
||||
"submitToPlus": {
|
||||
"label": "Pateiktį į Frigate+"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
19
web/public/locales/lt/components/filter.json
Normal file
19
web/public/locales/lt/components/filter.json
Normal file
@ -0,0 +1,19 @@
|
||||
{
|
||||
"filter": "Filtras",
|
||||
"labels": {
|
||||
"label": "Etiketės",
|
||||
"all": {
|
||||
"title": "Visos Etiketės",
|
||||
"short": "Etiketės"
|
||||
},
|
||||
"count_one": "{{count}} Etiketė",
|
||||
"count_other": "{{count}} Etiketės"
|
||||
},
|
||||
"zones": {
|
||||
"label": "Zonos",
|
||||
"all": {
|
||||
"title": "Visos Zonos",
|
||||
"short": "Zonos"
|
||||
}
|
||||
}
|
||||
}
|
8
web/public/locales/lt/components/icons.json
Normal file
8
web/public/locales/lt/components/icons.json
Normal file
@ -0,0 +1,8 @@
|
||||
{
|
||||
"iconPicker": {
|
||||
"selectIcon": "Pasirinkti ikoną",
|
||||
"search": {
|
||||
"placeholder": "Surasti ikoną…"
|
||||
}
|
||||
}
|
||||
}
|
10
web/public/locales/lt/components/input.json
Normal file
10
web/public/locales/lt/components/input.json
Normal file
@ -0,0 +1,10 @@
|
||||
{
|
||||
"button": {
|
||||
"downloadVideo": {
|
||||
"label": "Parsisiųsti Video",
|
||||
"toast": {
|
||||
"success": "Jūsų peržiūros elemento parsisiuntimas pradėtas."
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
51
web/public/locales/lt/components/player.json
Normal file
51
web/public/locales/lt/components/player.json
Normal file
@ -0,0 +1,51 @@
|
||||
{
|
||||
"noRecordingsFoundForThisTime": "Šiam laiko tarpui įrašų nerasta",
|
||||
"noPreviewFound": "Peržiūrų nerasta",
|
||||
"noPreviewFoundFor": "Peržiūrų nerasta {{cameraName}}",
|
||||
"submitFrigatePlus": {
|
||||
"title": "Pateikti šį kadrą į Frigate+?",
|
||||
"submit": "Pateikti"
|
||||
},
|
||||
"livePlayerRequiredIOSVersion": "iOS 17.1 ar naujesni yra privalomi šiam tiesioginės transliacijos tipui.",
|
||||
"streamOffline": {
|
||||
"title": "Transliacija nepasiekiama",
|
||||
"desc": "Jokių transliacijos kadrų negauta iš {{cameraName}}<code>detect</code>, patikrinkite klaidų sąrašus"
|
||||
},
|
||||
"cameraDisabled": "Kamera yra išjungta",
|
||||
"stats": {
|
||||
"streamType": {
|
||||
"title": "Transliacijos Tipas:",
|
||||
"short": "Tipas"
|
||||
},
|
||||
"bandwidth": {
|
||||
"title": "Pralaidumas:",
|
||||
"short": "Pralaidumas"
|
||||
},
|
||||
"latency": {
|
||||
"title": "Vėlavimas:",
|
||||
"value": "{{seconds}} sekundžių",
|
||||
"short": {
|
||||
"title": "Vėlavimas",
|
||||
"value": "{{seconds}} sek"
|
||||
}
|
||||
},
|
||||
"totalFrames": "Iš viso Kadrų:",
|
||||
"droppedFrames": {
|
||||
"title": "Pamestų Kadrų:",
|
||||
"short": {
|
||||
"title": "Pamesti",
|
||||
"value": "{{droppedFrames}} kadrai"
|
||||
}
|
||||
},
|
||||
"decodedFrames": "Dekoduoti Kadrai:",
|
||||
"droppedFrameRate": "Pamestų Kadrų Dažnis:"
|
||||
},
|
||||
"toast": {
|
||||
"success": {
|
||||
"submittedFrigatePlus": "Kadras sėkmingai pateiktas į Frigate+"
|
||||
},
|
||||
"error": {
|
||||
"submitFrigatePlusFailed": "Nepavyko pateikti kadro į Frigate+"
|
||||
}
|
||||
}
|
||||
}
|
118
web/public/locales/lt/objects.json
Normal file
118
web/public/locales/lt/objects.json
Normal file
@ -0,0 +1,118 @@
|
||||
{
|
||||
"person": "Žmogus",
|
||||
"bicycle": "Dviratis",
|
||||
"car": "Automobilis",
|
||||
"motorcycle": "Motociklas",
|
||||
"airplane": "Lėktuvas",
|
||||
"bus": "Autobusas",
|
||||
"train": "Traukinys",
|
||||
"boat": "Valtis",
|
||||
"traffic_light": "Šviesoforas",
|
||||
"fire_hydrant": "Hidrantas",
|
||||
"street_sign": "Kelio ženklas",
|
||||
"stop_sign": "Stop ženklas",
|
||||
"parking_meter": "Stovėjimo automatas",
|
||||
"bench": "Suoliukas",
|
||||
"bird": "Paukštis",
|
||||
"cat": "Katė",
|
||||
"dog": "Šuo",
|
||||
"horse": "Arklys",
|
||||
"sheep": "Avis",
|
||||
"cow": "Karvė",
|
||||
"elephant": "Dramblys",
|
||||
"bear": "Lokys",
|
||||
"zebra": "Zebras",
|
||||
"giraffe": "Žirafa",
|
||||
"hat": "Kepurė",
|
||||
"backpack": "Kuprinė",
|
||||
"umbrella": "Skėtis",
|
||||
"shoe": "Batas",
|
||||
"eye_glasses": "Akiniai",
|
||||
"handbag": "Rankinė",
|
||||
"tie": "Kaklaraštis",
|
||||
"suitcase": "Lagaminas",
|
||||
"frisbee": "Skraidanti lėkštė",
|
||||
"snowboard": "Snieglentė",
|
||||
"skis": "Slidės",
|
||||
"sports_ball": "Sporto Kamuolys",
|
||||
"kite": "Aitvaras",
|
||||
"baseball_bat": "Beisbolo lazda",
|
||||
"baseball_glove": "Beisbolo Pirštinė",
|
||||
"skateboard": "Riedlentė",
|
||||
"surfboard": "Banglentė",
|
||||
"tennis_racket": "Teniso Raketė",
|
||||
"bottle": "Butelis",
|
||||
"plate": "Lėkštė",
|
||||
"wine_glass": "Vyno Taurė",
|
||||
"cup": "Puodelis",
|
||||
"fork": "Šakutė",
|
||||
"knife": "Peilis",
|
||||
"spoon": "Šaukštas",
|
||||
"bowl": "Dubuo",
|
||||
"banana": "Bananas",
|
||||
"apple": "Obuolys",
|
||||
"sandwich": "Sumuštinis",
|
||||
"orange": "Apelsinas",
|
||||
"broccoli": "Brokolis",
|
||||
"carrot": "Morka",
|
||||
"hot_dog": "Hot Dog",
|
||||
"pizza": "Pica",
|
||||
"donut": "Spurga",
|
||||
"cake": "Tortas",
|
||||
"chair": "Kėdė",
|
||||
"couch": "Sofa",
|
||||
"potted_plant": "Pasodintas Augalas",
|
||||
"bed": "Lova",
|
||||
"mirror": "Veidrodis",
|
||||
"dining_table": "Valgomasis Stalas",
|
||||
"window": "Langas",
|
||||
"desk": "Stalas",
|
||||
"toilet": "Tualetas",
|
||||
"door": "Durys",
|
||||
"tv": "TV",
|
||||
"laptop": "Nešiojamasis Kompiuteris",
|
||||
"mouse": "Pelė",
|
||||
"remote": "Nuotolinis valdymo pultas",
|
||||
"keyboard": "Klaviatūra",
|
||||
"cell_phone": "Mobilus Telefonas",
|
||||
"microwave": "Mikrobangų krosnelė",
|
||||
"oven": "Orkaitė",
|
||||
"toaster": "Skrudintuvas",
|
||||
"sink": "Kriauklė",
|
||||
"refrigerator": "Šaldiklis",
|
||||
"blender": "Plakiklis",
|
||||
"book": "Knyga",
|
||||
"clock": "Laikrodis",
|
||||
"vase": "Vaza",
|
||||
"scissors": "Žirklės",
|
||||
"teddy_bear": "Pliušinis Meškiukas",
|
||||
"hair_dryer": "Plaukų Džiovintuvas",
|
||||
"toothbrush": "Dantų šepetėlis",
|
||||
"hair_brush": "Plaukų šepetys",
|
||||
"vehicle": "Mašina",
|
||||
"squirrel": "Voverė",
|
||||
"deer": "Elnias",
|
||||
"animal": "Gyvūnas",
|
||||
"bark": "Lojimas",
|
||||
"fox": "Lapė",
|
||||
"goat": "Ožka",
|
||||
"rabbit": "Triušis",
|
||||
"raccoon": "Meškėnas",
|
||||
"robot_lawnmower": "Robotas Vejapjovė",
|
||||
"waste_bin": "Šiukšliadėžė",
|
||||
"on_demand": "Pagal Poreikį",
|
||||
"face": "Veidas",
|
||||
"license_plate": "Registracijos Numeris",
|
||||
"package": "Pakuotė",
|
||||
"bbq_grill": "BBQ kepsninė",
|
||||
"amazon": "",
|
||||
"usps": "",
|
||||
"ups": "",
|
||||
"fedex": "",
|
||||
"dhl": "",
|
||||
"an_post": "",
|
||||
"purolator": "",
|
||||
"postnl": "",
|
||||
"nzpost": "",
|
||||
"postnord": ""
|
||||
}
|
16
web/public/locales/lt/views/configEditor.json
Normal file
16
web/public/locales/lt/views/configEditor.json
Normal file
@ -0,0 +1,16 @@
|
||||
{
|
||||
"documentTitle": "Konfiguracijos redaktorius - Frigate",
|
||||
"configEditor": "Konfiguracijos Redaktorius",
|
||||
"copyConfig": "Kopijuoti Konfiguraciją",
|
||||
"saveAndRestart": "Išsaugoti ir Perkrauti",
|
||||
"saveOnly": "Tik Išsaugoti",
|
||||
"confirm": "Išeiti neišsaugant?",
|
||||
"toast": {
|
||||
"success": {
|
||||
"copyToClipboard": "Konfiguracija nukopijuota į atmintį."
|
||||
},
|
||||
"error": {
|
||||
"savingError": "Klaida išsaugant konfiguraciją"
|
||||
}
|
||||
}
|
||||
}
|
38
web/public/locales/lt/views/events.json
Normal file
38
web/public/locales/lt/views/events.json
Normal file
@ -0,0 +1,38 @@
|
||||
{
|
||||
"motion": {
|
||||
"label": "Judesys",
|
||||
"only": "Tik judesys"
|
||||
},
|
||||
"allCameras": "Visos kameros",
|
||||
"timeline": "Laiko juosta",
|
||||
"timeline.aria": "Pasirink laiko juostą",
|
||||
"events": {
|
||||
"label": "Įvykiai",
|
||||
"aria": "Pasirinkti įvykius",
|
||||
"noFoundForTimePeriod": "Šiam laiko periodui įvykių nėrasta."
|
||||
},
|
||||
"calendarFilter": {
|
||||
"last24Hours": "Paskutinė para"
|
||||
},
|
||||
"selected_one": "{{count}} pasirinktas",
|
||||
"selected_other": "{{count}} pasirinkta",
|
||||
"camera": "Kamera",
|
||||
"alerts": "Įspėjimai",
|
||||
"detections": "Aptikimai",
|
||||
"empty": {
|
||||
"alert": "Nėra pranešimų peržiūrai",
|
||||
"detection": "Nėra aptikimų peržiūrai",
|
||||
"motion": "Duomenų apie judesius nėra"
|
||||
},
|
||||
"documentTitle": "Peržiūros - Frigate",
|
||||
"recordings": {
|
||||
"documentTitle": "Įrašai - Frigate"
|
||||
},
|
||||
"markAsReviewed": "Pažymėti kaip peržiūrėtą",
|
||||
"markTheseItemsAsReviewed": "Pažymėti šiuos įrašus kaip peržiūrėtus",
|
||||
"newReviewItems": {
|
||||
"label": "Pamatyti naujus peržiūros įrašus",
|
||||
"button": "Nauji Įrašai Peržiūrėjimui"
|
||||
},
|
||||
"detected": "aptikta"
|
||||
}
|
14
web/public/locales/lt/views/explore.json
Normal file
14
web/public/locales/lt/views/explore.json
Normal file
@ -0,0 +1,14 @@
|
||||
{
|
||||
"documentTitle": "Tyrinėti - Frigate",
|
||||
"generativeAI": "Generatyvinis DI",
|
||||
"exploreMore": "Apžvelgti daugiau {{label}} objektų",
|
||||
"exploreIsUnavailable": {
|
||||
"embeddingsReindexing": {
|
||||
"startingUp": "Paleidžiama…",
|
||||
"estimatedTime": "Apytikris likęs laikas:"
|
||||
}
|
||||
},
|
||||
"details": {
|
||||
"timestamp": "Laiko žyma"
|
||||
}
|
||||
}
|
17
web/public/locales/lt/views/exports.json
Normal file
17
web/public/locales/lt/views/exports.json
Normal file
@ -0,0 +1,17 @@
|
||||
{
|
||||
"search": "Paieška",
|
||||
"documentTitle": "Eksportuoti - Frigate",
|
||||
"noExports": "Eksportuotų įrašų nerasta",
|
||||
"deleteExport": "Ištrinti Eksportuotą Įrašą",
|
||||
"deleteExport.desc": "Esate įsitikine, kad norite ištrinti {{exportName}}?",
|
||||
"editExport": {
|
||||
"title": "Pervadinti Eksportuojamą įrašą",
|
||||
"desc": "Įveskite nauja pavadinimą šiam eksportuojamam įrašui.",
|
||||
"saveExport": "Išsaugoti Eksportuojamą Įrašą"
|
||||
},
|
||||
"toast": {
|
||||
"error": {
|
||||
"renameExportFailed": "Nepavyko pervadinti eksportuojamo įrašo: {{errorMessage}}"
|
||||
}
|
||||
}
|
||||
}
|
13
web/public/locales/lt/views/faceLibrary.json
Normal file
13
web/public/locales/lt/views/faceLibrary.json
Normal file
@ -0,0 +1,13 @@
|
||||
{
|
||||
"description": {
|
||||
"addFace": "Apžiūrėkite naujų kolekcijų pridėjimą prie Veidų Bibliotekos.",
|
||||
"placeholder": "Įveskite pavadinimą šiai kolekcijai",
|
||||
"invalidName": "Netinkamas vardas. Vardai gali turėti tik raides, numerius, tarpus, apostrofus, pabraukimus ir brukšnelius."
|
||||
},
|
||||
"details": {
|
||||
"person": "Žmogus",
|
||||
"face": "Veido detelės",
|
||||
"timestamp": "Laiko žyma",
|
||||
"unknown": "Nežinoma"
|
||||
}
|
||||
}
|
13
web/public/locales/lt/views/live.json
Normal file
13
web/public/locales/lt/views/live.json
Normal file
@ -0,0 +1,13 @@
|
||||
{
|
||||
"documentTitle": "Gyvai - Frigate",
|
||||
"documentTitle.withCamera": "{{camera}} - Tiesiogiai - Frigate",
|
||||
"lowBandwidthMode": "Mažo-pralaidumo Rėžimas",
|
||||
"cameraAudio": {
|
||||
"enable": "Įgalinti Kamerų Garsą",
|
||||
"disable": "Išjungti Kamerų Garsą"
|
||||
},
|
||||
"twoWayTalk": {
|
||||
"enable": "Įgalinti Dvipusį Pokalbį",
|
||||
"disable": "Išjungti Dvipusį Pokalbį"
|
||||
}
|
||||
}
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user