mirror of
https://github.com/blakeblackshear/frigate.git
synced 2026-11-03 04:10:33 +03:00
Compare commits
37
Commits
bb064ab7db
...
12042c1d73
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
12042c1d73 | ||
|
|
e6fcb60efb | ||
|
|
b6acc3c6c2 | ||
|
|
c943ecfc85 | ||
|
|
2b4907a9fb | ||
|
|
dac8f8e80b | ||
|
|
bfc074c91f | ||
|
|
5902182730 | ||
|
|
d6fe217f66 | ||
|
|
2b627f12c1 | ||
|
|
e89e8ca356 | ||
|
|
63cddfa6a4 | ||
|
|
0315f89d4b | ||
|
|
302cca6791 | ||
|
|
d64dddadc3 | ||
|
|
de9bb3945a | ||
|
|
577d28beb5 | ||
|
|
ead1896c12 | ||
|
|
fb291f2eee | ||
|
|
62effbeed6 | ||
|
|
f80f92c484 | ||
|
|
e8096c271a | ||
|
|
31abe9d1af | ||
|
|
b3d598b64b | ||
|
|
ea131e1663 | ||
|
|
3d4dd3ac4b | ||
|
|
933a7f1a3f | ||
|
|
4e5e8e3c59 | ||
|
|
b3ce4486b9 | ||
|
|
06e3d0ac5d | ||
|
|
28e3e1ec74 | ||
|
|
fa07109a85 | ||
|
|
910059281f | ||
|
|
ef44c18c07 | ||
|
|
06b059c36a | ||
|
|
26d31300e6 | ||
|
|
0013555528 |
@@ -15,12 +15,24 @@ from frigate.const import (
|
||||
)
|
||||
from frigate.ffmpeg_presets import parse_preset_hardware_acceleration_encode
|
||||
from frigate.util.config import find_config_file, resolve_ffmpeg_path
|
||||
from frigate.util.services import is_restricted_go2rtc_source
|
||||
from frigate.util.services import (
|
||||
is_go2rtc_arbitrary_exec_allowed,
|
||||
is_restricted_go2rtc_source,
|
||||
)
|
||||
|
||||
sys.path.remove("/opt/frigate")
|
||||
|
||||
yaml = YAML()
|
||||
|
||||
FRIGATE_ENV_VARS = {k: v for k, v in os.environ.items() if k.startswith("FRIGATE_")}
|
||||
# read docker secret files as env vars too
|
||||
if os.path.isdir("/run/secrets"):
|
||||
for secret_file in os.listdir("/run/secrets"):
|
||||
if secret_file.startswith("FRIGATE_"):
|
||||
FRIGATE_ENV_VARS[secret_file] = (
|
||||
Path(os.path.join("/run/secrets", secret_file)).read_text().strip()
|
||||
)
|
||||
|
||||
config_file = find_config_file()
|
||||
|
||||
try:
|
||||
@@ -100,7 +112,7 @@ for name in list(go2rtc_config.get("streams", {})):
|
||||
|
||||
if isinstance(stream, str):
|
||||
try:
|
||||
formatted_stream = substitute_frigate_vars(stream)
|
||||
formatted_stream = stream.format(**FRIGATE_ENV_VARS)
|
||||
if is_restricted_go2rtc_source(formatted_stream):
|
||||
print(
|
||||
f"[ERROR] Stream '{name}' uses a restricted source (echo/expr/exec) which is disabled by default for security. "
|
||||
@@ -119,7 +131,7 @@ for name in list(go2rtc_config.get("streams", {})):
|
||||
filtered_streams = []
|
||||
for i, stream_item in enumerate(stream):
|
||||
try:
|
||||
formatted_stream = substitute_frigate_vars(stream_item)
|
||||
formatted_stream = stream_item.format(**FRIGATE_ENV_VARS)
|
||||
if is_restricted_go2rtc_source(formatted_stream):
|
||||
print(
|
||||
f"[ERROR] Stream '{name}' item {i + 1} uses a restricted source (echo/expr/exec) which is disabled by default for security. "
|
||||
@@ -143,6 +155,20 @@ for name in list(go2rtc_config.get("streams", {})):
|
||||
)
|
||||
del go2rtc_config["streams"][name]
|
||||
|
||||
elif isinstance(stream, dict):
|
||||
# The map form ({"url": ...}) lets go2rtc resolve the source
|
||||
# recursively, so it is effectively a dynamic way to generate the URL
|
||||
# for a stream. That can only be backed by an exec source, so it cannot
|
||||
# be allowed unless arbitrary exec is explicitly enabled. When it is
|
||||
# enabled, leave the map untouched for go2rtc to resolve.
|
||||
if not is_go2rtc_arbitrary_exec_allowed():
|
||||
print(
|
||||
f"[ERROR] Stream '{name}' uses a dynamic source format which is disabled by default for security. "
|
||||
f"Set GO2RTC_ALLOW_ARBITRARY_EXEC=true to enable arbitrary exec sources."
|
||||
)
|
||||
del go2rtc_config["streams"][name]
|
||||
continue
|
||||
|
||||
# add birdseye restream stream if enabled
|
||||
if config.get("birdseye", {}).get("restream", False):
|
||||
birdseye: dict[str, Any] = config.get("birdseye")
|
||||
|
||||
@@ -7,6 +7,8 @@ import ConfigTabs from "@site/src/components/ConfigTabs";
|
||||
import TabItem from "@theme/TabItem";
|
||||
import NavPath from "@site/src/components/NavPath";
|
||||
|
||||
Frigate has two kinds of masks: motion masks and object filter masks. Both are narrow tools for fine-tuning, **not for hiding an area from Frigate**. Masks should be used sparingly; in most cases where users reach for one, a [zone](zones.md) with `required_zones` is the right tool instead. See [Which tool do I need?](#which-tool-do-i-need) and [Common mistakes](#common-mistakes) below if you're new to Frigate's mask behavior.
|
||||
|
||||
## Motion masks
|
||||
|
||||
Motion masks are used to prevent unwanted types of motion from triggering detection. Try watching the Debug feed (Settings --> Debug) with `Motion Boxes` enabled to see what may be regularly detected as motion. For example, you want to mask out your timestamp, the sky, rooftops, etc. Keep in mind that this mask only prevents motion from being detected and does not prevent objects from being detected if object detection was started due to motion in unmasked areas. Motion is also used during object tracking to refine the object detection area in the next frame. _Over-masking will make it more difficult for objects to be tracked._
|
||||
@@ -21,7 +23,16 @@ Object filter masks can be used to filter out stubborn false positives in fixed
|
||||
|
||||

|
||||
|
||||
## Creating masks
|
||||
## Which tool do I need?
|
||||
|
||||
| What you're trying to do | Recommended tool | How it works |
|
||||
| ------------------------------------------------------------------------------------------------------------------------------ | ----------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||
| Don't get alerts or recordings for activity in an area (e.g., the sidewalk in front of your house) | A [zone](zones.md) combined with `review.alerts.required_zones` (and/or `review.detections.required_zones`) | Frigate keeps detecting and tracking activity in the area, but a review item is only created once the bottom-center of an object's bounding box enters a required zone. |
|
||||
| Stop a stubborn false positive at a specific fixed spot (e.g., a tree base that keeps being detected as a person) | An **object filter mask** for that object type | Any detection of that object type whose bounding-box bottom-center lands inside the mask is treated as a false positive and discarded. |
|
||||
| Ignore motion in an area that obviously isn't an object of interest (e.g., the camera timestamp, sky, flags, treetops swaying) | A **motion mask** | Motion inside the mask is ignored when deciding whether to run object detection. Objects can still be detected in a motion masked area if motion elsewhere in the frame triggers detection. |
|
||||
| Stop tracking an object type altogether on this camera (e.g., you never care about cats) | Remove the object from the camera's [`objects.track`](objects.md) list | Frigate skips this object type entirely on this camera, regardless of where it appears. |
|
||||
|
||||
## Using the mask creator
|
||||
|
||||
<ConfigTabs>
|
||||
<TabItem value="ui">
|
||||
@@ -124,3 +135,14 @@ This is what `required_zones` are for. You should define a zone (remember this i
|
||||
> Maybe my specific situation just warrants this. I've just been having a hard time understanding the relevance of this information - it seems to be that it's exactly what would be expected when "masking out" an area of ANY image.
|
||||
|
||||
That may be the case for you. Frigate will definitely work harder tracking people on the sidewalk to make sure it doesn't miss anyone who steps foot on your stoop. The trade off with the way you have it now is slower recognition of objects and potential misses. That may be acceptable based on your needs. Also, if your resolution is low enough on the detect stream, your regions may already be so big that they grab the entire object anyway.
|
||||
|
||||
## Common mistakes
|
||||
|
||||
**"I added a motion mask to ignore my driveway/sidewalk."**
|
||||
A motion mask doesn't hide an area from Frigate. Objects can still be detected and tracked inside a masked area. The mask only stops motion _in that area_ from triggering object detection. If you want activity on the sidewalk to never produce a review item, define a [zone](zones.md) over the area you DO care about (your stoop, your driveway) and add it to `review.alerts.required_zones`. Frigate will still see people on the sidewalk, but it won't create an alert until they cross into the zone.
|
||||
|
||||
**"I added an object filter mask because I don't care about cars in my yard."**
|
||||
Object filter masks are for stubborn false positives at fixed locations, not for filtering whole areas or whole object types. If you only want alerts when a car enters the driveway, use a [zone](zones.md) with `required_zones`. If you don't care about a whole object type on this camera, remove it from [`objects.track`](objects.md).
|
||||
|
||||
**"I masked everything except a thin strip on my stoop."**
|
||||
Heavy masking hurts tracking. Frigate uses motion near a tracked object's previous bounding box to decide where to look in the next frame; with most of the frame masked, an object walking from an unmasked area into a masked one effectively disappears and gets picked up as a "new" object when it reappears. For example: someone walks down your sidewalk, stops under a tree (masked area) to tie their shoe, then continues. Frigate sees that as two separate people and can create two separate review items. Because Frigate needs several consecutive frames above the confidence threshold to commit to a detection, each re-appearance can also delay or miss alerts. Use `required_zones` for "only alert me about this spot" and leave the surrounding area unmasked so tracking stays intact.
|
||||
|
||||
@@ -124,3 +124,19 @@ cameras:
|
||||
width: 1280
|
||||
height: 720
|
||||
```
|
||||
|
||||
### Why does Frigate keep creating new events for my parked car?
|
||||
|
||||
Stationary tracking is designed to _prevent_ this — a parked car should stay one tracked object and not generate new events. If you're getting repeated events for the same car, it's likely that Frigate is losing the tracked object and re-detecting it as a new one.
|
||||
|
||||
Open one of the events in Explore → **Tracking Details**. If the detection scores are low (< 70% or so), the model isn't confident the parked car is a car. This is common with the free [COCO-trained](https://cocodataset.org/#explore) object detection models on steep/top-down angles, partially occluded cars, foliage, or low-light footage. When detections fall below `min_score` for too many frames the tracker loses the object, and the next confident frame creates a brand new one.
|
||||
|
||||
What helps:
|
||||
|
||||
- **Improve the view** — even a small angle change that gets more of the car visible could lift scores enough to stabilize tracking.
|
||||
- **Use a more accurate model** — switching from `mobiledet` to `yolov9`, or stepping up to a larger variant like `yolov9-s` over `yolov9-t`, can help (at the cost of inference time, and still on the COCO dataset). The biggest gains usually come from fine-tuning a model on images from your own cameras so it learns your specific scene. [Frigate+](https://frigate.video/plus) is a paid option that does this - models are trained on security-camera footage and can be fine-tuned on images you submit from your own setup.
|
||||
- **Don't set `detect -> stationary -> max_frames` for `car`** — it artificially ends tracking and forces re-detection as a new object. See [Stationary Objects](../configuration/stationary_objects.md).
|
||||
- **Restrict alerts to the areas you care about** with `required_zones` — see [Zones](../configuration/zones.md#restricting-alerts-and-detections-to-specific-zones). Make sure those zones use the default `loitering_time: 0` unless you specifically want the review item to stay open until the car leaves.
|
||||
- **Filter impossible locations** with [object filter masks](../configuration/masks.md#object-filter-masks) if cars are being detected on rooftops, treetops, etc.
|
||||
|
||||
See [Object Filters](../configuration/object_filters.md) for more on tuning `min_score` and `threshold` — note that raising them too high will make this exact problem worse.
|
||||
|
||||
Vendored
+14
@@ -7393,6 +7393,13 @@ components:
|
||||
required:
|
||||
- value
|
||||
title: CameraSetBody
|
||||
ChaptersEnum:
|
||||
type: string
|
||||
enum:
|
||||
- none
|
||||
- recording_segments
|
||||
- review_items
|
||||
title: ChaptersEnum
|
||||
ChatCompletionRequest:
|
||||
properties:
|
||||
messages:
|
||||
@@ -8119,6 +8126,13 @@ components:
|
||||
- type: 'null'
|
||||
title: Export case ID
|
||||
description: ID of the export case to assign this export to
|
||||
chapters:
|
||||
anyOf:
|
||||
- $ref: '#/components/schemas/ChaptersEnum'
|
||||
- type: 'null'
|
||||
title: Chapter mode
|
||||
description: Optional chapter metadata to embed in the export. When
|
||||
omitted, the camera's configured export chapter mode is used.
|
||||
type: object
|
||||
title: ExportRecordingsBody
|
||||
ExportRecordingsCustomBody:
|
||||
|
||||
@@ -147,6 +147,19 @@ def go2rtc_camera_stream(request: Request, stream_name: str):
|
||||
)
|
||||
def go2rtc_add_stream(request: Request, stream_name: str, src: str = ""):
|
||||
"""Add or update a go2rtc stream configuration."""
|
||||
if src and is_restricted_go2rtc_source(src):
|
||||
logger.warning(
|
||||
"Rejected go2rtc stream '%s' with restricted source type (echo/expr/exec)",
|
||||
stream_name,
|
||||
)
|
||||
return JSONResponse(
|
||||
content={
|
||||
"success": False,
|
||||
"message": "Restricted stream source type",
|
||||
},
|
||||
status_code=400,
|
||||
)
|
||||
|
||||
try:
|
||||
params = {"name": stream_name}
|
||||
if src:
|
||||
|
||||
@@ -3,7 +3,10 @@ from typing import Optional, Union
|
||||
from pydantic import BaseModel, Field
|
||||
from pydantic.json_schema import SkipJsonSchema
|
||||
|
||||
from frigate.record.export import PlaybackSourceEnum
|
||||
from frigate.record.export import (
|
||||
ChaptersEnum,
|
||||
PlaybackSourceEnum,
|
||||
)
|
||||
|
||||
|
||||
class ExportRecordingsBody(BaseModel):
|
||||
@@ -18,6 +21,14 @@ class ExportRecordingsBody(BaseModel):
|
||||
max_length=30,
|
||||
description="ID of the export case to assign this export to",
|
||||
)
|
||||
chapters: Optional[ChaptersEnum] = Field(
|
||||
default=None,
|
||||
title="Chapter mode",
|
||||
description=(
|
||||
"Optional chapter metadata to embed in the export. When omitted, "
|
||||
"the camera's configured export chapter mode is used."
|
||||
),
|
||||
)
|
||||
|
||||
|
||||
class ExportRecordingsCustomBody(BaseModel):
|
||||
|
||||
@@ -68,6 +68,7 @@ from frigate.jobs.export import (
|
||||
from frigate.models import Export, ExportCase, Previews, Recordings
|
||||
from frigate.record.export import (
|
||||
DEFAULT_TIME_LAPSE_FFMPEG_ARGS,
|
||||
ChaptersEnum,
|
||||
PlaybackSourceEnum,
|
||||
validate_ffmpeg_args,
|
||||
)
|
||||
@@ -128,6 +129,15 @@ def _validate_export_case(export_case_id: Optional[str]) -> Optional[JSONRespons
|
||||
def _sanitize_existing_image(
|
||||
image_path: Optional[str],
|
||||
) -> tuple[Optional[str], Optional[JSONResponse]]:
|
||||
# sanitize_filepath normalizes "\" to "/" but leaves ".." intact, so a path
|
||||
# like "clips\..\..\etc/passwd" passes the CLIPS_DIR prefix check yet still
|
||||
# escapes the directory once resolved. A valid snapshot path never uses "..".
|
||||
if image_path and ".." in image_path:
|
||||
return None, JSONResponse(
|
||||
content={"success": False, "message": "Invalid image path"},
|
||||
status_code=400,
|
||||
)
|
||||
|
||||
existing_image = sanitize_filepath(image_path) if image_path else None
|
||||
|
||||
if existing_image and not existing_image.startswith(CLIPS_DIR):
|
||||
@@ -254,6 +264,7 @@ def _build_export_job(
|
||||
ffmpeg_input_args: Optional[str] = None,
|
||||
ffmpeg_output_args: Optional[str] = None,
|
||||
cpu_fallback: bool = False,
|
||||
chapters: Optional[ChaptersEnum] = None,
|
||||
) -> ExportJob:
|
||||
return ExportJob(
|
||||
id=_generate_export_id(camera_name),
|
||||
@@ -267,6 +278,7 @@ def _build_export_job(
|
||||
ffmpeg_input_args=ffmpeg_input_args,
|
||||
ffmpeg_output_args=ffmpeg_output_args,
|
||||
cpu_fallback=cpu_fallback,
|
||||
chapters=chapters,
|
||||
)
|
||||
|
||||
|
||||
@@ -725,6 +737,9 @@ def export_recordings_batch(
|
||||
sanitized_images[index],
|
||||
PlaybackSourceEnum.recordings,
|
||||
export_case_id,
|
||||
chapters=request.app.frigate_config.cameras[
|
||||
item.camera
|
||||
].record.export.chapters,
|
||||
)
|
||||
try:
|
||||
start_export_job(request.app.frigate_config, export_job)
|
||||
@@ -803,6 +818,14 @@ def export_recording(
|
||||
|
||||
export_case_id = body.export_case_id
|
||||
|
||||
# a chapters value in the request body overrides the camera's export config
|
||||
camera_config = request.app.frigate_config.cameras[camera_name]
|
||||
chapters = (
|
||||
body.chapters
|
||||
if body.chapters is not None
|
||||
else camera_config.record.export.chapters
|
||||
)
|
||||
|
||||
# Attaching to an existing case requires admin. Single-export for
|
||||
# cameras the user can access is otherwise non-admin; we only gate
|
||||
# the case-attachment side effect.
|
||||
@@ -839,6 +862,7 @@ def export_recording(
|
||||
existing_image,
|
||||
playback_source,
|
||||
export_case_id,
|
||||
chapters=chapters,
|
||||
)
|
||||
try:
|
||||
start_export_job(request.app.frigate_config, export_job)
|
||||
|
||||
+32
-13
@@ -60,6 +60,19 @@ logger = logging.getLogger(__name__)
|
||||
router = APIRouter(tags=[Tags.media])
|
||||
|
||||
|
||||
def _resolve_cache_age(max_cache_age: int) -> int:
|
||||
"""Return max_cache_age as an int.
|
||||
|
||||
When a media handler is invoked directly by another handler instead of
|
||||
through its route, FastAPI doesn't resolve the Query() default and
|
||||
max_cache_age arrives as the Query object; fall back to its int default.
|
||||
"""
|
||||
if isinstance(max_cache_age, int):
|
||||
return max_cache_age
|
||||
|
||||
return max_cache_age.default
|
||||
|
||||
|
||||
@router.get("/{camera_name}", dependencies=[Depends(require_camera_access)])
|
||||
async def mjpeg_feed(
|
||||
request: Request,
|
||||
@@ -413,7 +426,9 @@ async def submit_recording_snapshot_to_plus(
|
||||
)
|
||||
|
||||
nd = cv2.imdecode(np.frombuffer(image_data, dtype=np.int8), cv2.IMREAD_COLOR)
|
||||
request.app.frigate_config.plus_api.upload_image(nd, camera_name)
|
||||
await asyncio.to_thread(
|
||||
request.app.frigate_config.plus_api.upload_image, nd, camera_name
|
||||
)
|
||||
|
||||
return JSONResponse(
|
||||
content={
|
||||
@@ -936,7 +951,7 @@ async def event_thumbnail(
|
||||
thumbnail_bytes,
|
||||
media_type=extension.get_mime_type(),
|
||||
headers={
|
||||
"Cache-Control": f"private, max-age={max_cache_age}"
|
||||
"Cache-Control": f"private, max-age={_resolve_cache_age(max_cache_age)}"
|
||||
if event_complete
|
||||
else "no-store",
|
||||
},
|
||||
@@ -1270,14 +1285,14 @@ async def event_preview(request: Request, event_id: str):
|
||||
end_ts = start_ts + (
|
||||
min(event.end_time - event.start_time, 20) if event.end_time else 20
|
||||
)
|
||||
return preview_gif(request, event.camera, start_ts, end_ts)
|
||||
return await preview_gif(request, event.camera, start_ts, end_ts)
|
||||
|
||||
|
||||
@router.get(
|
||||
"/{camera_name}/start/{start_ts}/end/{end_ts}/preview.gif",
|
||||
dependencies=[Depends(require_camera_access)],
|
||||
)
|
||||
def preview_gif(
|
||||
async def preview_gif(
|
||||
request: Request,
|
||||
camera_name: str,
|
||||
start_ts: float,
|
||||
@@ -1340,7 +1355,8 @@ def preview_gif(
|
||||
"-",
|
||||
]
|
||||
|
||||
process = sp.run(
|
||||
process = await asyncio.to_thread(
|
||||
sp.run,
|
||||
ffmpeg_cmd,
|
||||
capture_output=True,
|
||||
)
|
||||
@@ -1419,7 +1435,8 @@ def preview_gif(
|
||||
"-",
|
||||
]
|
||||
|
||||
process = sp.run(
|
||||
process = await asyncio.to_thread(
|
||||
sp.run,
|
||||
ffmpeg_cmd,
|
||||
input=str.encode("\n".join(selected_previews)),
|
||||
capture_output=True,
|
||||
@@ -1438,7 +1455,7 @@ def preview_gif(
|
||||
gif_bytes,
|
||||
media_type="image/gif",
|
||||
headers={
|
||||
"Cache-Control": f"private, max-age={max_cache_age}",
|
||||
"Cache-Control": f"private, max-age={_resolve_cache_age(max_cache_age)}",
|
||||
"Content-Type": "image/gif",
|
||||
},
|
||||
)
|
||||
@@ -1448,7 +1465,7 @@ def preview_gif(
|
||||
"/{camera_name}/start/{start_ts}/end/{end_ts}/preview.mp4",
|
||||
dependencies=[Depends(require_camera_access)],
|
||||
)
|
||||
def preview_mp4(
|
||||
async def preview_mp4(
|
||||
request: Request,
|
||||
camera_name: str,
|
||||
start_ts: float,
|
||||
@@ -1528,7 +1545,8 @@ def preview_mp4(
|
||||
path,
|
||||
]
|
||||
|
||||
process = sp.run(
|
||||
process = await asyncio.to_thread(
|
||||
sp.run,
|
||||
ffmpeg_cmd,
|
||||
capture_output=True,
|
||||
)
|
||||
@@ -1604,7 +1622,8 @@ def preview_mp4(
|
||||
path,
|
||||
]
|
||||
|
||||
process = sp.run(
|
||||
process = await asyncio.to_thread(
|
||||
sp.run,
|
||||
ffmpeg_cmd,
|
||||
input=str.encode("\n".join(selected_previews)),
|
||||
capture_output=True,
|
||||
@@ -1619,7 +1638,7 @@ def preview_mp4(
|
||||
|
||||
headers = {
|
||||
"Content-Description": "File Transfer",
|
||||
"Cache-Control": f"private, max-age={max_cache_age}",
|
||||
"Cache-Control": f"private, max-age={_resolve_cache_age(max_cache_age)}",
|
||||
"Content-Type": "video/mp4",
|
||||
"Content-Length": str(os.path.getsize(path)),
|
||||
# nginx: https://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_ignore_headers
|
||||
@@ -1657,9 +1676,9 @@ async def review_preview(
|
||||
)
|
||||
|
||||
if format == "gif":
|
||||
return preview_gif(request, review.camera, start_ts, end_ts)
|
||||
return await preview_gif(request, review.camera, start_ts, end_ts)
|
||||
else:
|
||||
return preview_mp4(request, review.camera, start_ts, end_ts)
|
||||
return await preview_mp4(request, review.camera, start_ts, end_ts)
|
||||
|
||||
|
||||
@router.get(
|
||||
|
||||
+39
-7
@@ -72,11 +72,16 @@ _WS_VIEWER_TOPICS = frozenset(
|
||||
}
|
||||
)
|
||||
|
||||
# Camera-scoped command topics a camera-authorized (non-admin) user may send.
|
||||
_WS_CAMERA_COMMAND_TOPICS = frozenset({"ptz"})
|
||||
|
||||
|
||||
def _check_ws_authorization(
|
||||
topic: str,
|
||||
role_header: str | None,
|
||||
separator: str,
|
||||
roles_config: dict[str, list[str]] | None = None,
|
||||
camera_names: set[str] | None = None,
|
||||
) -> bool:
|
||||
"""Check if a WebSocket message is authorized.
|
||||
|
||||
@@ -84,6 +89,10 @@ def _check_ws_authorization(
|
||||
topic: The message topic.
|
||||
role_header: The HTTP_REMOTE_ROLE header value, or None.
|
||||
separator: The role separator character from proxy config.
|
||||
roles_config: The auth.roles mapping (role -> allowed cameras), used to
|
||||
authorize camera-scoped commands for non-admin users.
|
||||
camera_names: All configured camera names, used to resolve a role's
|
||||
allowed cameras.
|
||||
|
||||
Returns:
|
||||
True if authorized, False if blocked.
|
||||
@@ -93,16 +102,33 @@ def _check_ws_authorization(
|
||||
return False
|
||||
|
||||
# No role header: default to viewer (fail-closed)
|
||||
if role_header is None:
|
||||
return topic in _WS_VIEWER_TOPICS
|
||||
roles = [r.strip() for r in role_header.split(separator)] if role_header else []
|
||||
|
||||
# Check if any role is admin
|
||||
roles = [r.strip() for r in role_header.split(separator)]
|
||||
# Admin can send anything
|
||||
if "admin" in roles:
|
||||
return True
|
||||
|
||||
# Non-admin: only viewer topics allowed
|
||||
return topic in _WS_VIEWER_TOPICS
|
||||
# Read-only topics any authenticated user can send
|
||||
if topic in _WS_VIEWER_TOPICS:
|
||||
return True
|
||||
|
||||
# Camera-scoped command like "<camera>/ptz": allow when the user's role(s)
|
||||
# grant access to that camera.
|
||||
parts = topic.split("/")
|
||||
if (
|
||||
roles_config is not None
|
||||
and len(parts) == 2
|
||||
and parts[1] in _WS_CAMERA_COMMAND_TOPICS
|
||||
):
|
||||
allowed: set[str] = set()
|
||||
# No role header maps to the default viewer role (e.g. proxy-only setups)
|
||||
for role in roles or ["viewer"]:
|
||||
allowed.update(
|
||||
User.get_allowed_cameras(role, roles_config, camera_names or set())
|
||||
)
|
||||
return parts[0] in allowed
|
||||
|
||||
return False
|
||||
|
||||
|
||||
# ---- Outbound filtering ---------------------------------------------------
|
||||
@@ -449,6 +475,8 @@ class WebSocketClient(Communicator):
|
||||
class _WebSocketHandler(WebSocket):
|
||||
receiver = self._dispatcher
|
||||
role_separator = self.config.proxy.separator or ","
|
||||
roles_config = self.config.auth.roles
|
||||
camera_names = set(self.config.cameras.keys())
|
||||
|
||||
def received_message(self, message: WebSocket.received_message) -> None: # type: ignore[name-defined]
|
||||
try:
|
||||
@@ -470,7 +498,11 @@ class WebSocketClient(Communicator):
|
||||
self.environ.get("HTTP_REMOTE_ROLE") if self.environ else None
|
||||
)
|
||||
if self.environ is not None and not _check_ws_authorization(
|
||||
topic, role_header, self.role_separator
|
||||
topic,
|
||||
role_header,
|
||||
self.role_separator,
|
||||
self.roles_config,
|
||||
self.camera_names,
|
||||
):
|
||||
logger.warning(
|
||||
"Blocked unauthorized WebSocket message: topic=%s, role=%s",
|
||||
|
||||
@@ -9,6 +9,7 @@ from frigate.review.types import SeverityEnum
|
||||
from ..base import FrigateBaseModel
|
||||
|
||||
__all__ = [
|
||||
"ChaptersEnum",
|
||||
"RecordConfig",
|
||||
"RecordExportConfig",
|
||||
"RecordPreviewConfig",
|
||||
@@ -86,6 +87,12 @@ class RecordPreviewConfig(FrigateBaseModel):
|
||||
)
|
||||
|
||||
|
||||
class ChaptersEnum(str, Enum):
|
||||
none = "none"
|
||||
recording_segments = "recording_segments"
|
||||
review_items = "review_items"
|
||||
|
||||
|
||||
class RecordExportConfig(FrigateBaseModel):
|
||||
hwaccel_args: Union[str, list[str]] = Field(
|
||||
default="auto",
|
||||
@@ -98,6 +105,10 @@ class RecordExportConfig(FrigateBaseModel):
|
||||
title="Maximum concurrent exports",
|
||||
description="Maximum number of export jobs to process at the same time.",
|
||||
)
|
||||
chapters: ChaptersEnum = Field(
|
||||
default=ChaptersEnum.review_items,
|
||||
title="Chapter metadata to embed in exported recordings",
|
||||
)
|
||||
|
||||
|
||||
class RecordConfig(FrigateBaseModel):
|
||||
|
||||
@@ -13,6 +13,7 @@ from peewee import DoesNotExist
|
||||
|
||||
from frigate.comms.inter_process import InterProcessRequestor
|
||||
from frigate.config import FrigateConfig
|
||||
from frigate.config.camera.record import ChaptersEnum
|
||||
from frigate.const import UPDATE_JOB_STATE
|
||||
from frigate.jobs.job import Job
|
||||
from frigate.models import Export
|
||||
@@ -55,6 +56,7 @@ class ExportJob(Job):
|
||||
ffmpeg_input_args: Optional[str] = None
|
||||
ffmpeg_output_args: Optional[str] = None
|
||||
cpu_fallback: bool = False
|
||||
chapters: Optional[ChaptersEnum] = None
|
||||
current_step: str = "queued"
|
||||
progress_percent: float = 0.0
|
||||
|
||||
@@ -343,6 +345,7 @@ class ExportJobManager:
|
||||
job.ffmpeg_input_args,
|
||||
job.ffmpeg_output_args,
|
||||
job.cpu_fallback,
|
||||
job.chapters,
|
||||
on_progress=self._make_progress_callback(job),
|
||||
)
|
||||
|
||||
|
||||
+113
-5
@@ -17,6 +17,7 @@ import pytz # type: ignore[import-untyped]
|
||||
from peewee import DoesNotExist
|
||||
|
||||
from frigate.config import FfmpegConfig, FrigateConfig
|
||||
from frigate.config.camera.record import ChaptersEnum
|
||||
from frigate.const import (
|
||||
CACHE_DIR,
|
||||
CLIPS_DIR,
|
||||
@@ -217,6 +218,7 @@ class RecordingExporter(threading.Thread):
|
||||
ffmpeg_input_args: Optional[str] = None,
|
||||
ffmpeg_output_args: Optional[str] = None,
|
||||
cpu_fallback: bool = False,
|
||||
chapters: Optional[ChaptersEnum] = None,
|
||||
on_progress: Optional[Callable[[str, float], None]] = None,
|
||||
) -> None:
|
||||
super().__init__()
|
||||
@@ -232,6 +234,7 @@ class RecordingExporter(threading.Thread):
|
||||
self.ffmpeg_input_args = ffmpeg_input_args
|
||||
self.ffmpeg_output_args = ffmpeg_output_args
|
||||
self.cpu_fallback = cpu_fallback
|
||||
self.chapters = chapters
|
||||
self.on_progress = on_progress
|
||||
|
||||
# ensure export thumb dir
|
||||
@@ -509,6 +512,74 @@ class RecordingExporter(threading.Thread):
|
||||
|
||||
return meta_path
|
||||
|
||||
def _build_recording_segment_chapter_metadata_file(
|
||||
self, recordings: list
|
||||
) -> Optional[str]:
|
||||
"""Write an FFmpeg metadata file with one chapter per recording segment.
|
||||
|
||||
Each chapter's title is the segment's wallclock start time in
|
||||
strict ISO 8601 form so a viewer can map any point in the
|
||||
export's playback timeline back to real-world time without
|
||||
OCR-ing a burnt-in timestamp. Chapter offsets are computed in
|
||||
*output time*: the VOD endpoint concatenates recording clips
|
||||
back-to-back, so wall-clock gaps between recordings collapse in
|
||||
the produced video. Returns ``None`` when there are no
|
||||
recordings or every segment is empty after clipping.
|
||||
"""
|
||||
if not recordings:
|
||||
return None
|
||||
|
||||
tz_name = self.config.ui.timezone
|
||||
tz: Optional[datetime.tzinfo] = None
|
||||
if tz_name:
|
||||
try:
|
||||
tz = pytz.timezone(tz_name)
|
||||
except pytz.UnknownTimeZoneError:
|
||||
tz = None
|
||||
if tz is None:
|
||||
tz = datetime.timezone.utc
|
||||
|
||||
chapter_blocks: list[str] = []
|
||||
output_offset_ms = 0
|
||||
for rec in recordings:
|
||||
clipped_start = max(float(rec.start_time), float(self.start_time))
|
||||
clipped_end = min(float(rec.end_time), float(self.end_time))
|
||||
if clipped_end <= clipped_start:
|
||||
continue
|
||||
|
||||
duration_ms = int(round((clipped_end - clipped_start) * 1000))
|
||||
if duration_ms <= 0:
|
||||
continue
|
||||
|
||||
title = datetime.datetime.fromtimestamp(clipped_start, tz=tz).isoformat(
|
||||
timespec="seconds"
|
||||
)
|
||||
chapter_blocks.append(
|
||||
"[CHAPTER]\n"
|
||||
"TIMEBASE=1/1000\n"
|
||||
f"START={output_offset_ms}\n"
|
||||
f"END={output_offset_ms + duration_ms}\n"
|
||||
f"title={title}"
|
||||
)
|
||||
output_offset_ms += duration_ms
|
||||
|
||||
if not chapter_blocks:
|
||||
return None
|
||||
|
||||
meta_path = self._chapter_metadata_path()
|
||||
try:
|
||||
with open(meta_path, "w", encoding="utf-8") as f:
|
||||
f.write(";FFMETADATA1\n")
|
||||
f.write("\n".join(chapter_blocks))
|
||||
f.write("\n")
|
||||
except OSError:
|
||||
logger.exception(
|
||||
"Failed to write chapter metadata file for export %s", self.export_id
|
||||
)
|
||||
return None
|
||||
|
||||
return meta_path
|
||||
|
||||
def save_thumbnail(self, id: str) -> str:
|
||||
thumb_path = os.path.join(CLIPS_DIR, f"export/{id}.webp")
|
||||
|
||||
@@ -672,7 +743,18 @@ class RecordingExporter(threading.Thread):
|
||||
)
|
||||
).split(" ")
|
||||
else:
|
||||
chapters_path = self._build_chapter_metadata_file(recordings)
|
||||
# Realtime/stream-copy export. Embed chapter metadata according to
|
||||
# the camera's configured chapter mode: per-recording-segment
|
||||
# timestamps or per-review-item titles.
|
||||
if self.chapters == ChaptersEnum.recording_segments:
|
||||
chapters_path = self._build_recording_segment_chapter_metadata_file(
|
||||
recordings
|
||||
)
|
||||
elif self.chapters == ChaptersEnum.review_items:
|
||||
chapters_path = self._build_chapter_metadata_file(recordings)
|
||||
else:
|
||||
chapters_path = None
|
||||
|
||||
chapter_args = (
|
||||
f" -i {chapters_path} -map 0 -dn -map_metadata 1"
|
||||
if chapters_path
|
||||
@@ -684,7 +766,19 @@ class RecordingExporter(threading.Thread):
|
||||
|
||||
# add metadata
|
||||
title = f"Frigate Recording for {self.camera}, {self.get_datetime_from_timestamp(self.start_time)} - {self.get_datetime_from_timestamp(self.end_time)}"
|
||||
ffmpeg_cmd.extend(["-metadata", f"title={title}"])
|
||||
creation_time = datetime.datetime.fromtimestamp(
|
||||
self.start_time, tz=datetime.timezone.utc
|
||||
).strftime("%Y-%m-%dT%H:%M:%S.%fZ")
|
||||
ffmpeg_cmd.extend(
|
||||
[
|
||||
"-metadata",
|
||||
f"title={title}",
|
||||
"-metadata",
|
||||
f"creation_time={creation_time}",
|
||||
"-metadata",
|
||||
f"comment=Camera: {self.camera}",
|
||||
]
|
||||
)
|
||||
|
||||
ffmpeg_cmd.append(video_path)
|
||||
|
||||
@@ -770,18 +864,32 @@ class RecordingExporter(threading.Thread):
|
||||
self.config.ffmpeg.ffmpeg_path,
|
||||
hwaccel_args,
|
||||
f"{self.ffmpeg_input_args} {TIMELAPSE_DATA_INPUT_ARGS} {ffmpeg_input}".strip(),
|
||||
f"{self.ffmpeg_output_args} -movflags +faststart {video_path}".strip(),
|
||||
f"{self.ffmpeg_output_args} -movflags +faststart".strip(),
|
||||
EncodeTypeEnum.timelapse,
|
||||
)
|
||||
).split(" ")
|
||||
else:
|
||||
ffmpeg_cmd = (
|
||||
f"{self.config.ffmpeg.ffmpeg_path} -hide_banner {ffmpeg_input} {codec} -movflags +faststart {video_path}"
|
||||
f"{self.config.ffmpeg.ffmpeg_path} -hide_banner {ffmpeg_input} {codec} -movflags +faststart"
|
||||
).split(" ")
|
||||
|
||||
# add metadata
|
||||
title = f"Frigate Preview for {self.camera}, {self.get_datetime_from_timestamp(self.start_time)} - {self.get_datetime_from_timestamp(self.end_time)}"
|
||||
ffmpeg_cmd.extend(["-metadata", f"title={title}"])
|
||||
creation_time = datetime.datetime.fromtimestamp(
|
||||
self.start_time, tz=datetime.timezone.utc
|
||||
).strftime("%Y-%m-%dT%H:%M:%S.%fZ")
|
||||
ffmpeg_cmd.extend(
|
||||
[
|
||||
"-metadata",
|
||||
f"title={title}",
|
||||
"-metadata",
|
||||
f"creation_time={creation_time}",
|
||||
"-metadata",
|
||||
f"comment=Camera: {self.camera}",
|
||||
]
|
||||
)
|
||||
|
||||
ffmpeg_cmd.append(video_path)
|
||||
|
||||
return ffmpeg_cmd, playlist_lines
|
||||
|
||||
|
||||
@@ -650,6 +650,8 @@ class RecordingMaintainer(threading.Thread):
|
||||
"copy",
|
||||
"-movflags",
|
||||
"+faststart",
|
||||
"-metadata",
|
||||
f"creation_time={start_time.strftime('%Y-%m-%dT%H:%M:%S.%fZ')}",
|
||||
file_path,
|
||||
stderr=asyncio.subprocess.PIPE,
|
||||
stdout=asyncio.subprocess.DEVNULL,
|
||||
|
||||
@@ -11,6 +11,16 @@ class TestCheckWsAuthorization(unittest.TestCase):
|
||||
|
||||
DEFAULT_SEPARATOR = ","
|
||||
|
||||
# admin/viewer are reserved and always map to all cameras (empty list);
|
||||
# custom roles map to a specific set of cameras.
|
||||
ROLES_CONFIG = {
|
||||
"admin": [],
|
||||
"viewer": [],
|
||||
"yard": ["front_door", "backyard"],
|
||||
"garage_only": ["garage"],
|
||||
}
|
||||
CAMERA_NAMES = {"front_door", "backyard", "garage"}
|
||||
|
||||
# --- IPC topic blocking (unconditional, regardless of role) ---
|
||||
|
||||
def test_ipc_topic_blocked_for_admin(self):
|
||||
@@ -161,6 +171,124 @@ class TestCheckWsAuthorization(unittest.TestCase):
|
||||
_check_ws_authorization("onConnect", None, self.DEFAULT_SEPARATOR)
|
||||
)
|
||||
|
||||
# --- Camera-scoped PTZ access (non-admin with camera access) ---
|
||||
|
||||
def test_viewer_can_ptz_camera_with_access(self):
|
||||
# viewer maps to all cameras, so PTZ is allowed
|
||||
self.assertTrue(
|
||||
_check_ws_authorization(
|
||||
"front_door/ptz",
|
||||
"viewer",
|
||||
self.DEFAULT_SEPARATOR,
|
||||
self.ROLES_CONFIG,
|
||||
self.CAMERA_NAMES,
|
||||
)
|
||||
)
|
||||
|
||||
def test_custom_role_can_ptz_assigned_camera(self):
|
||||
self.assertTrue(
|
||||
_check_ws_authorization(
|
||||
"front_door/ptz",
|
||||
"yard",
|
||||
self.DEFAULT_SEPARATOR,
|
||||
self.ROLES_CONFIG,
|
||||
self.CAMERA_NAMES,
|
||||
)
|
||||
)
|
||||
|
||||
def test_custom_role_blocked_from_ptz_unassigned_camera(self):
|
||||
self.assertFalse(
|
||||
_check_ws_authorization(
|
||||
"garage/ptz",
|
||||
"yard",
|
||||
self.DEFAULT_SEPARATOR,
|
||||
self.ROLES_CONFIG,
|
||||
self.CAMERA_NAMES,
|
||||
)
|
||||
)
|
||||
|
||||
def test_multiple_roles_union_camera_access_for_ptz(self):
|
||||
# "yard" covers front_door/backyard, "garage_only" covers garage
|
||||
self.assertTrue(
|
||||
_check_ws_authorization(
|
||||
"garage/ptz",
|
||||
"yard,garage_only",
|
||||
self.DEFAULT_SEPARATOR,
|
||||
self.ROLES_CONFIG,
|
||||
self.CAMERA_NAMES,
|
||||
)
|
||||
)
|
||||
|
||||
def test_unknown_role_blocked_from_ptz(self):
|
||||
self.assertFalse(
|
||||
_check_ws_authorization(
|
||||
"front_door/ptz",
|
||||
"nonexistent",
|
||||
self.DEFAULT_SEPARATOR,
|
||||
self.ROLES_CONFIG,
|
||||
self.CAMERA_NAMES,
|
||||
)
|
||||
)
|
||||
|
||||
def test_no_role_header_treated_as_viewer_for_ptz(self):
|
||||
# proxy-only / auth-disabled setups default to the viewer role
|
||||
self.assertTrue(
|
||||
_check_ws_authorization(
|
||||
"front_door/ptz",
|
||||
None,
|
||||
self.DEFAULT_SEPARATOR,
|
||||
self.ROLES_CONFIG,
|
||||
self.CAMERA_NAMES,
|
||||
)
|
||||
)
|
||||
|
||||
def test_camera_access_does_not_grant_set_commands(self):
|
||||
# camera access enables PTZ only, not config-changing "set" commands
|
||||
self.assertFalse(
|
||||
_check_ws_authorization(
|
||||
"front_door/detect/set",
|
||||
"yard",
|
||||
self.DEFAULT_SEPARATOR,
|
||||
self.ROLES_CONFIG,
|
||||
self.CAMERA_NAMES,
|
||||
)
|
||||
)
|
||||
|
||||
def test_ptz_autotracker_stays_admin_only(self):
|
||||
# ptz_autotracker is a config toggle, not a live-view action
|
||||
self.assertFalse(
|
||||
_check_ws_authorization(
|
||||
"front_door/ptz_autotracker/set",
|
||||
"viewer",
|
||||
self.DEFAULT_SEPARATOR,
|
||||
self.ROLES_CONFIG,
|
||||
self.CAMERA_NAMES,
|
||||
)
|
||||
)
|
||||
|
||||
def test_admin_can_ptz_any_camera_with_config(self):
|
||||
self.assertTrue(
|
||||
_check_ws_authorization(
|
||||
"garage/ptz",
|
||||
"admin",
|
||||
self.DEFAULT_SEPARATOR,
|
||||
self.ROLES_CONFIG,
|
||||
self.CAMERA_NAMES,
|
||||
)
|
||||
)
|
||||
|
||||
def test_ipc_topic_still_blocked_with_camera_access(self):
|
||||
# IPC topics are blocked unconditionally, even with camera access
|
||||
self.assertFalse(
|
||||
_check_ws_authorization(
|
||||
UPDATE_CAMERA_ACTIVITY,
|
||||
"viewer",
|
||||
self.DEFAULT_SEPARATOR,
|
||||
self.ROLES_CONFIG,
|
||||
self.CAMERA_NAMES,
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
|
||||
@@ -790,7 +790,7 @@ def get_hailo_temps() -> dict[str, float]:
|
||||
return temps
|
||||
|
||||
|
||||
def _go2rtc_arbitrary_exec_allowed() -> bool:
|
||||
def is_go2rtc_arbitrary_exec_allowed() -> bool:
|
||||
"""Read the GO2RTC_ALLOW_ARBITRARY_EXEC override from env, docker
|
||||
secrets, or the Home Assistant add-on options file."""
|
||||
raw: Optional[str] = None
|
||||
@@ -822,7 +822,7 @@ def is_restricted_go2rtc_source(stream_source: str) -> bool:
|
||||
and the GO2RTC_ALLOW_ARBITRARY_EXEC override is not set."""
|
||||
if not stream_source.strip().startswith(("echo:", "expr:", "exec:")):
|
||||
return False
|
||||
return not _go2rtc_arbitrary_exec_allowed()
|
||||
return not is_go2rtc_arbitrary_exec_allowed()
|
||||
|
||||
|
||||
def ffprobe_stream(ffmpeg, path: str, detailed: bool = False) -> sp.CompletedProcess:
|
||||
|
||||
@@ -149,5 +149,17 @@
|
||||
"cluck": "قرقرة",
|
||||
"cock_a_doodle_doo": "كوكو-كو-كوووووو",
|
||||
"turkey": "ديك رومى",
|
||||
"gobble": "كركرة"
|
||||
"gobble": "كركرة",
|
||||
"tearing": "يمزق",
|
||||
"ping": "طنّة",
|
||||
"clang": "صوت رنين",
|
||||
"squeal": "يصرخ",
|
||||
"creak": "صرير",
|
||||
"sizzle": "صوت الأزيز",
|
||||
"clicking": "النقر",
|
||||
"clickety_clack": "طقطقة",
|
||||
"rumble": "الحلبة",
|
||||
"skateboard": "لوح تزلج",
|
||||
"echo": "صدى الصوت",
|
||||
"noise": "ازعاج"
|
||||
}
|
||||
|
||||
@@ -22,5 +22,6 @@
|
||||
"mouse": "فأر",
|
||||
"keyboard": "لوحة المفاتيح",
|
||||
"goat": "معزة",
|
||||
"sheep": "غنم"
|
||||
"sheep": "غنم",
|
||||
"skateboard": "لوح تزلج"
|
||||
}
|
||||
|
||||
@@ -355,8 +355,43 @@
|
||||
"steam_whistle": "Парна свирка",
|
||||
"mechanisms": "Механизми",
|
||||
"clock": "Часовник",
|
||||
"tick": "",
|
||||
"tick": "Тик",
|
||||
"tick-tock": "Тиктакане",
|
||||
"gears": "Зъбни колела",
|
||||
"sewing_machine": "Шиеща машина"
|
||||
"sewing_machine": "Шиеща машина",
|
||||
"sound_effect": "Звуков ефект",
|
||||
"tubular_bells": "Тръбни камбани",
|
||||
"mallet_percussion": "Ударни чукчета",
|
||||
"marimba": "Маримба",
|
||||
"glockenspiel": "Металлофон",
|
||||
"steelpan": "Пан барабан",
|
||||
"string_section": "Струнна група",
|
||||
"jingle_bell": "Звънче",
|
||||
"chime": "Звънече",
|
||||
"wind_chime": "Вятърен звън",
|
||||
"singing_bowl": "Пееща купа",
|
||||
"ambient_music": "Амбиентна музика",
|
||||
"new-age_music": "Музика от ново поколение",
|
||||
"vocal_music": "Вокална музика",
|
||||
"gurgling": "Бълбукане",
|
||||
"light_engine": "Лек двигател",
|
||||
"medium_engine": "Среден двигател",
|
||||
"heavy_engine": "Тежък двигател",
|
||||
"ratchet": "Тресчотка",
|
||||
"hammer": "Ръчен чук",
|
||||
"pulleys": "Макари",
|
||||
"mechanical_fan": "Механичен вентилатор",
|
||||
"air_conditioning": "Климатик",
|
||||
"cash_register": "Каса",
|
||||
"printer": "Принтер",
|
||||
"camera": "Камера",
|
||||
"tools": "Инструменти",
|
||||
"artillery_fire": "Артилерийски огън",
|
||||
"boom": "Гръм",
|
||||
"glass": "Стъкло",
|
||||
"crack": "Пукнатина",
|
||||
"wood": "Дърво",
|
||||
"silence": "Тишина",
|
||||
"liquid": "Течност",
|
||||
"splash": "Разливам"
|
||||
}
|
||||
|
||||
@@ -63,13 +63,17 @@
|
||||
"untilRestart": "До рестарт",
|
||||
"mo": "{{time}}мес",
|
||||
"m": "{{time}}м",
|
||||
"s": "{{time}}с"
|
||||
"s": "{{time}}с",
|
||||
"never": "Никога",
|
||||
"formattedTimestampMonthDayYearHourMinute": {
|
||||
"12hour": "d MMM yyyy, h:mm aaa"
|
||||
}
|
||||
},
|
||||
"button": {
|
||||
"apply": "Приложи",
|
||||
"reset": "Нулиране",
|
||||
"done": "Готово",
|
||||
"disabled": "Деактивирано",
|
||||
"disabled": "Изключено",
|
||||
"save": "Запази",
|
||||
"saving": "Запазване…",
|
||||
"cancel": "Отказ",
|
||||
@@ -80,7 +84,7 @@
|
||||
"delete": "Изтриване",
|
||||
"yes": "Да",
|
||||
"download": "Изтегляне",
|
||||
"enabled": "Активирано",
|
||||
"enabled": "Включено",
|
||||
"history": "История",
|
||||
"back": "Назад",
|
||||
"fullscreen": "Цял екран",
|
||||
@@ -99,8 +103,8 @@
|
||||
"export": "Експортиране",
|
||||
"deleteNow": "Изтрии сега",
|
||||
"next": "Следващ",
|
||||
"disable": "Деактивирай",
|
||||
"enable": "Активирай"
|
||||
"disable": "Изключи",
|
||||
"enable": "Включи"
|
||||
},
|
||||
"menu": {
|
||||
"live": {
|
||||
|
||||
@@ -30,5 +30,10 @@
|
||||
"title": "Всички дати",
|
||||
"short": "Дати"
|
||||
}
|
||||
}
|
||||
},
|
||||
"more": "Още филтри",
|
||||
"reset": {
|
||||
"label": "Рестартирай филтрите по подразбиране"
|
||||
},
|
||||
"timeRange": "Времеви диапазон"
|
||||
}
|
||||
|
||||
@@ -34,7 +34,8 @@
|
||||
},
|
||||
"submitFrigatePlus": {
|
||||
"title": "Да се изпрати ли този кадър към Frigate+?",
|
||||
"submit": "Изпрати"
|
||||
"submit": "Изпрати",
|
||||
"previewError": "Не можe да се зареди предварителен преглед на моментната снимка. Записът може да не е наличен в момента."
|
||||
},
|
||||
"noPreviewFound": "Не е намерен предварителен преглед",
|
||||
"noRecordingsFoundForThisTime": "За това време не са намерени записи",
|
||||
@@ -47,5 +48,6 @@
|
||||
"error": {
|
||||
"submitFrigatePlusFailed": "Неуспешно изпратен кадър към Frigate+"
|
||||
}
|
||||
}
|
||||
},
|
||||
"cameraOff": "Камерата е изключена"
|
||||
}
|
||||
|
||||
@@ -1 +1,69 @@
|
||||
{}
|
||||
{
|
||||
"label": "Конфигурация на камерата",
|
||||
"timestamp_style": {
|
||||
"label": "Стил на времева щампа",
|
||||
"format": {
|
||||
"label": "Формат на времева щампа"
|
||||
},
|
||||
"color": {
|
||||
"red": {
|
||||
"label": "Червено",
|
||||
"description": "Червен компонент (0-255) за времева щампа."
|
||||
},
|
||||
"green": {
|
||||
"description": "Зелен компонент (0-255) за времева щампа.",
|
||||
"label": "Зелено"
|
||||
},
|
||||
"blue": {
|
||||
"description": "Син компонент (0-255) за времева щампа.",
|
||||
"label": "Синьо"
|
||||
},
|
||||
"label": "Цвят на времева щампа",
|
||||
"description": "RGB стойности за текста на времева щампа (всички стойности 0-255)."
|
||||
},
|
||||
"thickness": {
|
||||
"description": "Дебелина на текстовата линия за времева щампа.",
|
||||
"label": "Дебелина на времева щампа"
|
||||
},
|
||||
"effect": {
|
||||
"label": "Ефект на времева щампа",
|
||||
"description": "Визуален ефект на времева щампа (без, плътен, сянка)."
|
||||
},
|
||||
"position": {
|
||||
"label": "Позиция на времева щампа",
|
||||
"description": "Позиция за времева щампа на снимката (гл/гд/дл/дд)."
|
||||
}
|
||||
},
|
||||
"audio_transcription": {
|
||||
"label": "Аудио транскрипция",
|
||||
"live_enabled": {
|
||||
"label": "Транскрипция на живо"
|
||||
}
|
||||
},
|
||||
"snapshots": {
|
||||
"quality": {
|
||||
"label": "Качество на моментната снимка"
|
||||
},
|
||||
"required_zones": {
|
||||
"label": "Задължителни зони",
|
||||
"description": "Зони в които обект трябва да влезе за да се запази моментна снимка."
|
||||
},
|
||||
"height": {
|
||||
"label": "Височина на моментната снимка"
|
||||
},
|
||||
"retain": {
|
||||
"default": {
|
||||
"description": "Дни по подразбиране за задържане на моментните снимки."
|
||||
}
|
||||
}
|
||||
},
|
||||
"semantic_search": {
|
||||
"label": "Семантично търсене",
|
||||
"triggers": {
|
||||
"label": "Спусък",
|
||||
"friendly_name": {
|
||||
"label": "Удобно име"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,5 +4,148 @@
|
||||
"session_length": {
|
||||
"label": "Продължителност на сесията"
|
||||
}
|
||||
},
|
||||
"version": {
|
||||
"label": "Текуща версия на конфигурацията",
|
||||
"description": "Версия на активната конфигурация. Помага за проследяване на промени от миграция или форматиране."
|
||||
},
|
||||
"safe_mode": {
|
||||
"label": "Безопасен режим",
|
||||
"description": "При избор, Frigate ще стартира в безопасен режим за отстраняване на неизправности."
|
||||
},
|
||||
"environment_vars": {
|
||||
"label": "Променливи",
|
||||
"description": "Параметри за стартиране на Frigate в Home Assistant OS. Non-HAOS потребителите трябва да използват Docker конфигурация."
|
||||
},
|
||||
"logger": {
|
||||
"label": "Логове",
|
||||
"default": {
|
||||
"label": "Ниво на логовете"
|
||||
}
|
||||
},
|
||||
"timestamp_style": {
|
||||
"label": "Стил на времева щампа",
|
||||
"format": {
|
||||
"label": "Формат на времева щампа"
|
||||
},
|
||||
"color": {
|
||||
"red": {
|
||||
"label": "Червено",
|
||||
"description": "Червен компонент (0-255) за времева щампа."
|
||||
},
|
||||
"green": {
|
||||
"description": "Зелен компонент (0-255) за времева щампа.",
|
||||
"label": "Зелено"
|
||||
},
|
||||
"blue": {
|
||||
"description": "Син компонент (0-255) за времева щампа.",
|
||||
"label": "Синьо"
|
||||
},
|
||||
"label": "Цвят на времева щампа",
|
||||
"description": "RGB стойности за текста на времева щампа (всички стойности 0-255)."
|
||||
},
|
||||
"thickness": {
|
||||
"description": "Дебелина на текстовата линия за времева щампа.",
|
||||
"label": "Дебелина на времева щампа"
|
||||
},
|
||||
"effect": {
|
||||
"label": "Ефект на времева щампа",
|
||||
"description": "Визуален ефект на времева щампа (без, плътен, сянка)."
|
||||
},
|
||||
"position": {
|
||||
"label": "Позиция на времева щампа",
|
||||
"description": "Позиция за времева щампа на снимката (гл/гд/дл/дд)."
|
||||
}
|
||||
},
|
||||
"audio_transcription": {
|
||||
"label": "Аудио транскрипция",
|
||||
"enabled": {
|
||||
"label": "Включи аудио транскрипцията"
|
||||
},
|
||||
"language": {
|
||||
"label": "Език на транскрипция"
|
||||
},
|
||||
"device": {
|
||||
"label": "Устройство за транскрипция"
|
||||
},
|
||||
"model_size": {
|
||||
"label": "Големина на модела"
|
||||
},
|
||||
"live_enabled": {
|
||||
"label": "Транскрипция на живо"
|
||||
}
|
||||
},
|
||||
"snapshots": {
|
||||
"quality": {
|
||||
"label": "Качество на моментната снимка"
|
||||
},
|
||||
"required_zones": {
|
||||
"label": "Задължителни зони",
|
||||
"description": "Зони в които обект трябва да влезе за да се запази моментна снимка."
|
||||
},
|
||||
"height": {
|
||||
"label": "Височина на моментната снимка"
|
||||
},
|
||||
"retain": {
|
||||
"default": {
|
||||
"description": "Дни по подразбиране за задържане на моментните снимки."
|
||||
}
|
||||
}
|
||||
},
|
||||
"classification": {
|
||||
"label": "Класификация на обекти",
|
||||
"bird": {
|
||||
"label": "Конфигурация за класификация на птици",
|
||||
"enabled": {
|
||||
"label": "Класификация на птици",
|
||||
"description": "Клацификация на птици (Вкл./Изкл.)."
|
||||
},
|
||||
"threshold": {
|
||||
"label": "Минимален резултат"
|
||||
}
|
||||
},
|
||||
"custom": {
|
||||
"label": "Потребителски класификационни модели",
|
||||
"enabled": {
|
||||
"label": "Включи модел",
|
||||
"description": "Потребителски класификационнен модел (Вкл./Изкл.)."
|
||||
},
|
||||
"name": {
|
||||
"label": "Име на модел"
|
||||
},
|
||||
"save_attempts": {
|
||||
"label": "Опити за запазване"
|
||||
},
|
||||
"state_config": {
|
||||
"motion": {
|
||||
"label": "Изпълни при движение"
|
||||
},
|
||||
"interval": {
|
||||
"label": "Интервал за класификация"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"semantic_search": {
|
||||
"label": "Семантично търсене",
|
||||
"enabled": {
|
||||
"label": "Включи семантично търсене",
|
||||
"description": "Семантично търсене (Вкл./Изкл.)."
|
||||
},
|
||||
"reindex": {
|
||||
"label": "Реиндексирай при стартиране"
|
||||
},
|
||||
"model_size": {
|
||||
"label": "Големина на модел"
|
||||
},
|
||||
"device": {
|
||||
"label": "Устройство"
|
||||
},
|
||||
"triggers": {
|
||||
"label": "Спусък",
|
||||
"friendly_name": {
|
||||
"label": "Удобно име"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -24,5 +24,6 @@
|
||||
"hair_dryer": "Сешоар",
|
||||
"toothbrush": "Четка за зъби",
|
||||
"scissors": "Ножица",
|
||||
"clock": "Часовник"
|
||||
"clock": "Часовник",
|
||||
"airplane": "Самолет"
|
||||
}
|
||||
|
||||
@@ -2,5 +2,13 @@
|
||||
"documentTitle": "Модели за класификация - Frigate",
|
||||
"description": {
|
||||
"invalidName": "Невалидно име. Имената могат да съдържат единствено: букви, числа, празни места, долни черти и тирета."
|
||||
},
|
||||
"details": {
|
||||
"scoreInfo": "Резултатът представлява средната степен на увереност в класификацията при всички засечки на този обект."
|
||||
},
|
||||
"wizard": {
|
||||
"step1": {
|
||||
"classificationAttribute": "Атрибут"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -14,5 +14,6 @@
|
||||
"detections": "Засичания",
|
||||
"motion": {
|
||||
"label": "Движение"
|
||||
}
|
||||
},
|
||||
"camera": "Камера"
|
||||
}
|
||||
|
||||
@@ -5,10 +5,69 @@
|
||||
"mismatch_one": "{{count}} недостъпен обект беше открит и включен в този елемент за преглед. Тези обекти или не са квалифицирани като предупреждение или откриване, или вече са били изчистени/изтрити.",
|
||||
"mismatch_other": "{{count}} недостъпни обекта бяха открити и включени в този елемент за преглед. Тези обекти или не са квалифицирани като предупреждение или откриване, или вече са били изчистени/изтрити."
|
||||
}
|
||||
},
|
||||
"editLPR": {
|
||||
"title": "Редактиране на регистрационния номер"
|
||||
},
|
||||
"editAttributes": {
|
||||
"title": "Редактиране на атрибутите"
|
||||
},
|
||||
"topScore": {
|
||||
"label": "Най-силен резултат"
|
||||
},
|
||||
"estimatedSpeed": "Естимирана скорост",
|
||||
"objects": "Обекти",
|
||||
"camera": "Камера",
|
||||
"zones": "Зони",
|
||||
"timestamp": "Времева щампа",
|
||||
"button": {
|
||||
"findSimilar": "Намери подобни",
|
||||
"regenerate": {
|
||||
"title": "Регенерирай",
|
||||
"label": "Регенерирай описанието на следените обекти"
|
||||
}
|
||||
},
|
||||
"description": {
|
||||
"label": "Описание",
|
||||
"placeholder": "Описание на следените обекти"
|
||||
}
|
||||
},
|
||||
"trackedObjectsCount_one": "{{count}} проследен обект ",
|
||||
"trackedObjectsCount_other": "{{count}} проследени обекта ",
|
||||
"documentTitle": "Разгледай - Фригейт",
|
||||
"generativeAI": "Генеративен Изкъствен Интелект"
|
||||
"generativeAI": "Генеративен Изкъствен Интелект",
|
||||
"itemMenu": {
|
||||
"downloadSnapshot": {
|
||||
"aria": "Сваляне на моментна снимка/кадър"
|
||||
},
|
||||
"viewTrackingDetails": {
|
||||
"label": "Виж детайли за следенето",
|
||||
"aria": "Покажи детайли за следенето"
|
||||
},
|
||||
"findSimilar": {
|
||||
"label": "Намери подобни"
|
||||
},
|
||||
"submitToPlus": {
|
||||
"label": "Изпрати към Frigate+",
|
||||
"aria": "Изпрати към Frigate Plus"
|
||||
},
|
||||
"viewInHistory": {
|
||||
"label": "Виж в история",
|
||||
"aria": "Виж в история"
|
||||
},
|
||||
"more": {
|
||||
"aria": "Повече"
|
||||
}
|
||||
},
|
||||
"dialog": {
|
||||
"confirmDelete": {
|
||||
"title": "Потвърди изтриване"
|
||||
}
|
||||
},
|
||||
"aiAnalysis": {
|
||||
"title": "AI Анализ"
|
||||
},
|
||||
"concerns": {
|
||||
"label": "Притеснения"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -17,7 +17,58 @@
|
||||
},
|
||||
"toast": {
|
||||
"error": {
|
||||
"renameExportFailed": "Неуспешно преименуване на експорт: {{errorMessage}}"
|
||||
"renameExportFailed": "Неуспешно преименуване на експорт: {{errorMessage}}",
|
||||
"assignCaseFailed": "Неуспешно обновяване на възложен случай: {{errorMessage}}",
|
||||
"caseSaveFailed": "Неуспешно запазен случай: {{errorMessage}}",
|
||||
"caseDeleteFailed": "Неуспешно изтрит случай: {{errorMessage}}"
|
||||
}
|
||||
},
|
||||
"deleteCase": {
|
||||
"desc": "Сигурен ли сте, че искате да изтриете {{caseName}}?",
|
||||
"label": "Изтрии случай"
|
||||
},
|
||||
"caseDialog": {
|
||||
"nameLabel": "Име на случай",
|
||||
"descriptionLabel": "Описание"
|
||||
},
|
||||
"toolbar": {
|
||||
"editCase": "Редактирай случай",
|
||||
"deleteCase": "Изтрии случай"
|
||||
},
|
||||
"caseCard": {
|
||||
"emptyCase": "Все още няма експорти"
|
||||
},
|
||||
"jobCard": {
|
||||
"defaultName": "{{camera}} експортиране",
|
||||
"queued": "На опашката",
|
||||
"running": "В ход",
|
||||
"preparing": "Подготвяне",
|
||||
"copying": "Копиране",
|
||||
"encoding": "Енкодиране",
|
||||
"encodingRetry": "Енкодиране (повторно)",
|
||||
"finalizing": "Финализиране"
|
||||
},
|
||||
"caseView": {
|
||||
"noDescription": "Без описание",
|
||||
"createdAt": "Създаден {{value}}",
|
||||
"exportCount_one": "1 експорт",
|
||||
"exportCount_other": "{{count}} експорти",
|
||||
"cameraCount_one": "1 камера",
|
||||
"cameraCount_other": "{{count}} камери",
|
||||
"showMore": "Покажи повече",
|
||||
"showLess": "Покажи по-малко"
|
||||
},
|
||||
"bulkActions": {
|
||||
"delete": "Изтрии",
|
||||
"deleteNow": "Изтрии сега"
|
||||
},
|
||||
"bulkDelete": {
|
||||
"title": "Изтрии експорти",
|
||||
"desc_one": "Сигурни ли сте , че искате да изтриете {{count}} експорта?"
|
||||
},
|
||||
"bulkToast": {
|
||||
"success": {
|
||||
"delete": "Успешно изтрити експорти"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -15,5 +15,8 @@
|
||||
"addFace": "Добавете нова колекция във библиотеката за лица при качването на първата ви снимка.",
|
||||
"placeholder": "Напишете име за тази колекция",
|
||||
"invalidName": "Невалидно име. Имената могат да съдържат единствено: букви, числа, празни места, долни черти и тирета."
|
||||
},
|
||||
"details": {
|
||||
"timestamp": "Времева щампа"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -16,7 +16,8 @@
|
||||
"move": {
|
||||
"clickMove": {
|
||||
"enable": "Включи кликване за преместване",
|
||||
"disable": "Изключи кликване за преместване"
|
||||
"disable": "Изключи кликване за преместване",
|
||||
"label": "Кликнете в центъра на кадъра за да центрирате камерата"
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -26,7 +27,8 @@
|
||||
},
|
||||
"recording": {
|
||||
"enable": "Включи запис",
|
||||
"disable": "Изключи запис"
|
||||
"disable": "Изключи запис",
|
||||
"disabledInConfig": "\"Записване\" трябва първо да се вкючи през настройките за тази камера."
|
||||
},
|
||||
"snapshots": {
|
||||
"enable": "Включи моментни снимки",
|
||||
@@ -38,7 +40,9 @@
|
||||
},
|
||||
"camera": {
|
||||
"enable": "Включи камера",
|
||||
"disable": "Изключи камера"
|
||||
"disable": "Изключи камера",
|
||||
"turnOn": "Включване на камера",
|
||||
"turnOff": "Изключване на камера"
|
||||
},
|
||||
"detect": {
|
||||
"enable": "Включи разпознаване",
|
||||
@@ -65,5 +69,16 @@
|
||||
"cameraEnabled": "Камерата е включена"
|
||||
},
|
||||
"documentTitle": "Наживо - Frigate",
|
||||
"documentTitle.withCamera": "{{camera}} - На живо - Фригейт"
|
||||
"documentTitle.withCamera": "{{camera}} - На живо - Фригейт",
|
||||
"noCameras": {
|
||||
"default": {
|
||||
"buttonText": "Добави камера"
|
||||
},
|
||||
"group": {
|
||||
"title": "Няма камери в групата",
|
||||
"description": "Тази група няма добавени или включени камери.",
|
||||
"buttonText": "Управление на групите"
|
||||
}
|
||||
},
|
||||
"lowBandwidthMode": "Режим ограничена/бавна връзка"
|
||||
}
|
||||
|
||||
@@ -24,6 +24,9 @@
|
||||
},
|
||||
"state": {
|
||||
"submitted": "Enviat"
|
||||
},
|
||||
"toast": {
|
||||
"error": "No s'ha pogut enviar a Frigate+. Si us plau, comproveu la vostra connexió de xarxa i torneu-ho a provar."
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -107,7 +110,14 @@
|
||||
"queueingButton": "S'estan posant a la cua les exportacions...",
|
||||
"exportButton_one": "Exporta 1 càmera",
|
||||
"exportButton_many": "Exporta {{count}} càmeres",
|
||||
"exportButton_other": "Exporta {{count}} càmeres"
|
||||
"exportButton_other": "Exporta {{count}} càmeres",
|
||||
"searchOrSelectGroup": "Cerca, o selecciona un grup de càmeres...",
|
||||
"selectAll": "Selecciona totes les càmeres",
|
||||
"clearSelection": "Neteja la selecció",
|
||||
"selectWithActivity": "Càmeres amb objectes rastrejats",
|
||||
"selectGroup": "Selecciona un grup",
|
||||
"noMatchingCameras": "No hi ha càmeres que coincideixin amb la cerca",
|
||||
"selectedCount": "{{selected}} / {{total}} seleccionats"
|
||||
},
|
||||
"multi": {
|
||||
"title_one": "Exporta {{count}} ressenyes",
|
||||
|
||||
@@ -29,7 +29,7 @@
|
||||
},
|
||||
"listen": {
|
||||
"label": "Tipus d'escoltes",
|
||||
"description": "Llista de tipus d'esdeveniment d'àudio a detectar (per exemple: escorça, focarmalarma, crit, parla, crida)."
|
||||
"description": "Llista de tipus d'esdeveniment d'àudio a detectar (per exemple: escorça, focarmalarma, parla, crida)."
|
||||
},
|
||||
"filters": {
|
||||
"label": "Filtres d'àudio",
|
||||
@@ -152,11 +152,11 @@
|
||||
}
|
||||
},
|
||||
"ffmpeg": {
|
||||
"label": "FFmpeg",
|
||||
"description": "Paràmetres del FFmpeg que inclouen la ruta dels binaris, args, opcions de hwaccel i args de sortida per rol.",
|
||||
"label": "Fluxos (FFmpeg)",
|
||||
"description": "Les entrades de flux de càmera i les opcions del FFmpeg, incloent-hi el camí binari, els arguments, l'hwaccel i els arguments de sortida per rol.",
|
||||
"path": {
|
||||
"label": "Ruta FFmpeg",
|
||||
"description": "Ruta al binari FFmpeg a usar o un àlies de versió («5.0» o «7.0»)."
|
||||
"description": "Ruta al binari FFmpeg a usar o un àlies de versió («7.0» o «8.0»)."
|
||||
},
|
||||
"global_args": {
|
||||
"label": "Arguments globals del FFmpeg",
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
"description": "Paràmetres del FFmpeg que inclouen la ruta dels binaris, args, opcions de hwaccel i args de sortida per rol.",
|
||||
"path": {
|
||||
"label": "Ruta FFmpeg",
|
||||
"description": "Ruta al binari FFmpeg a usar o un àlies de versió («5.0» o «7.0»)."
|
||||
"description": "Ruta al binari FFmpeg a usar o un àlies de versió («7.0» o «8.0»)."
|
||||
},
|
||||
"global_args": {
|
||||
"label": "Arguments globals del FFmpeg",
|
||||
@@ -2018,7 +2018,7 @@
|
||||
},
|
||||
"listen": {
|
||||
"label": "Tipus d'escoltes",
|
||||
"description": "Llista de tipus d'esdeveniment d'àudio a detectar (per exemple: escorça, focarmalarma, crit, parla, crida)."
|
||||
"description": "Llista de tipus d'esdeveniment d'àudio a detectar (per exemple: escorça, focarmalarma, parla, crida)."
|
||||
},
|
||||
"filters": {
|
||||
"label": "Filtres d'àudio",
|
||||
|
||||
@@ -68,7 +68,7 @@
|
||||
"integrationObjectClassification": "Classificació de l'objecte",
|
||||
"integrationAudioTranscription": "Transcripció d'àudio",
|
||||
"cameraDetect": "Detecció d'objectes",
|
||||
"cameraFfmpeg": "FFmpeg",
|
||||
"cameraFfmpeg": "Fluxos (FFmpeg)",
|
||||
"cameraRecording": "Enregistrament",
|
||||
"cameraSnapshots": "Instantànies",
|
||||
"cameraMotion": "Detecció de moviment",
|
||||
@@ -1689,7 +1689,17 @@
|
||||
}
|
||||
},
|
||||
"cameraInputs": {
|
||||
"itemTitle": "Flux {{index}}"
|
||||
"itemTitle": "Flux {{index}}",
|
||||
"sourceMode": {
|
||||
"restream": "Restream (go2rtc)",
|
||||
"manual": "Camí d'entrada manual",
|
||||
"go2rtcStreamLabel": "flux go2rtc",
|
||||
"go2rtcStreamPlaceholder": "Selecciona un flux go2rtc",
|
||||
"noGo2rtcStreams": "No s'ha configurat cap flux go2rtc",
|
||||
"go2rtcStreamSearch": "Cerca fluxos...",
|
||||
"availableStreams": "Fluxos disponibles",
|
||||
"noMatchingStreams": "No hi ha fluxos coincidents"
|
||||
}
|
||||
},
|
||||
"restartRequiredField": "Reinicia requerit",
|
||||
"restartRequiredFooter": "S'ha canviat la configuració - es requereix reiniciar",
|
||||
@@ -2084,6 +2094,13 @@
|
||||
},
|
||||
"onvif": {
|
||||
"autotrackingNoZones": "Autotraquejar requereix al menys una zona. Defineix una zona per aquesta cámera a Mascares/Zones, després usa'l com a requerit a la part inferior."
|
||||
},
|
||||
"ffmpeg": {
|
||||
"hwaccelManualNotRecommended": "No es recomanen arguments manuals d'acceleració de maquinari. Tret que existeixi un requisit específic, seleccioneu el predefinit que coincideixi amb el vostre maquinari."
|
||||
},
|
||||
"model": {
|
||||
"optimizedFor320": "Frigate està optimitzada per a un model 320x320, que és la millor opció per a la majoria de configuracions. Un model 640x640 és més lent i només ajuda en escenaris específics.",
|
||||
"inputDimensionsNotDetectResolution": "L'amplada i l'alçada del model d'entrada són les dimensions d'entrada del model de detecció d'objectes, no la resolució de detecció de la càmera. Haurien de coincidir amb les dimensions del model que esteu utilitzant - típicament una mida quadrada com 320x320 o 640x640."
|
||||
}
|
||||
},
|
||||
"modelSize": {
|
||||
|
||||
@@ -191,7 +191,22 @@
|
||||
},
|
||||
"audio": "Àudio:",
|
||||
"cameraProbeInfo": "Informació del sondeig de la càmera {{camera}}",
|
||||
"streamDataFromFFPROBE": "Les dades de la transmissió són obtingudes mitjançant <code>ffprobe</code>."
|
||||
"streamDataFromFFPROBE": "Les dades de la transmissió són obtingudes mitjançant <code>ffprobe</code>.",
|
||||
"keyframes": {
|
||||
"title": "Anàlisi de fotogrames clau",
|
||||
"analyzing": "S'estan analitzant els fotogrames clau... queden {{seconds}} segons",
|
||||
"stillAnalyzing": "Encara s'estan analitzant els fotogrames clau...",
|
||||
"recordStream": "Registre de flux:",
|
||||
"keyframeCount": "Fotogrames clau observats:",
|
||||
"observedDuration": "Durada observada:",
|
||||
"gap": "Espai de fotogrames clau (mín / avg / max):",
|
||||
"segmentLength": "Longitud del segment d'enregistrament:",
|
||||
"ok": "Fotogrames clau cada ,{{seconds}}s, bons per enregistrar i reproduir.",
|
||||
"warning": "Els fotogrames clau dispersos o variables (espai més llarg .{{seconds}}s), probablement un còdec intel·ligent (H.264+/H.265+), això no és recomanable.",
|
||||
"error": "El buit dels fotogrames clau ( the{{seconds}}s) excedeix la longitud del segment d'enregistrament ({{segmentTime}}s). Alguns segments poden no tenir un fotograma clau, el qual trenca la reproducció. Desactiva el còdec intel·ligent/+ a la càmera o escurça el seu interval de fotogrames clau.",
|
||||
"unknown": "No s'ha pogut determinar l'espaiat dels fotogrames clau.",
|
||||
"recordDisabled": "L'enregistrament està desactivat per a aquesta càmera."
|
||||
}
|
||||
},
|
||||
"title": "Càmeres",
|
||||
"overview": "Visió general",
|
||||
|
||||
@@ -180,7 +180,7 @@
|
||||
"rats": "Rotter",
|
||||
"patter": "Dråbelyd",
|
||||
"insect": "Insekt",
|
||||
"cricket": "Cricket",
|
||||
"cricket": "Fårekylling",
|
||||
"guitar": "Guitar",
|
||||
"electric_guitar": "Elektrisk Guitar",
|
||||
"bass_guitar": "Basguitar",
|
||||
@@ -195,5 +195,16 @@
|
||||
"rimshot": "Kantslag",
|
||||
"drum_roll": "Trommehvirvel",
|
||||
"bass_drum": "Stortromme",
|
||||
"techno": "Techno"
|
||||
"techno": "Techno",
|
||||
"mosquito": "Myg",
|
||||
"fly": "Flue",
|
||||
"buzz": "Summen",
|
||||
"frog": "Frø",
|
||||
"croak": "Kvæk",
|
||||
"snake": "Slange",
|
||||
"rattle": "Klapren",
|
||||
"whale_vocalization": "Hvallyde",
|
||||
"music": "Musik",
|
||||
"musical_instrument": "Musikinstrument",
|
||||
"plucked_string_instrument": "Strengeinstrument"
|
||||
}
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
"am": "am",
|
||||
"year_one": "{{time}} år",
|
||||
"year_other": "{{time}} år",
|
||||
"mo": "{{time}}må",
|
||||
"mo": "{{time}}md.",
|
||||
"month_one": "{{time}} måned",
|
||||
"month_other": "{{time}} måneder",
|
||||
"d": "{{time}}d",
|
||||
@@ -121,18 +121,18 @@
|
||||
"back": "Tilbage",
|
||||
"history": "Historik",
|
||||
"fullscreen": "Fuldskærm",
|
||||
"exitFullscreen": "Afslut Fludskærm",
|
||||
"pictureInPicture": "Billede i Billede",
|
||||
"twoWayTalk": "2 vejs samtale",
|
||||
"cameraAudio": "Kamera Lyd",
|
||||
"on": "ON",
|
||||
"off": "OFF",
|
||||
"exitFullscreen": "Afslut Fuldskærm",
|
||||
"pictureInPicture": "Billede i billede",
|
||||
"twoWayTalk": "Samtale",
|
||||
"cameraAudio": "Kameralyd",
|
||||
"on": "Til",
|
||||
"off": "Fra",
|
||||
"edit": "Rediger",
|
||||
"copyCoordinates": "Kopier koordinater",
|
||||
"delete": "Slet",
|
||||
"yes": "Ja",
|
||||
"no": "Nej",
|
||||
"download": "Download",
|
||||
"download": "Hent",
|
||||
"info": "Info",
|
||||
"suspended": "Sat på pause",
|
||||
"unsuspended": "Genoptag",
|
||||
@@ -141,7 +141,19 @@
|
||||
"export": "Eksporter",
|
||||
"deleteNow": "Slet nu",
|
||||
"next": "Næste",
|
||||
"continue": "Fortsæt"
|
||||
"continue": "Fortsæt",
|
||||
"add": "Tilføj",
|
||||
"applying": "Anvender…",
|
||||
"undo": "Annuler",
|
||||
"copiedToClipboard": "Kopieret til udklipsholder",
|
||||
"modified": "Ændret",
|
||||
"overridden": "Overskrevet",
|
||||
"resetToGlobal": "Gendan til global",
|
||||
"resetToDefault": "Gendan standard",
|
||||
"saveAll": "Gem alle",
|
||||
"savingAll": "Gemmer alle…",
|
||||
"undoAll": "Fortryd alle",
|
||||
"retry": "Prøv igen"
|
||||
},
|
||||
"menu": {
|
||||
"system": "System",
|
||||
@@ -194,7 +206,9 @@
|
||||
"gl": "Galego (Galisisk)",
|
||||
"id": "Bahasa Indonesia (Indonesisk)",
|
||||
"ur": "اردو (Urdu)",
|
||||
"hr": "Hrvatski (Kroatisk)"
|
||||
"hr": "Hrvatski (Kroatisk)",
|
||||
"zhHant": "繁體中文 (Traditionel Kinesisk)",
|
||||
"bs": "Bosanski (Bosnisk)"
|
||||
},
|
||||
"appearance": "Udseende",
|
||||
"darkMode": {
|
||||
@@ -243,7 +257,11 @@
|
||||
"logout": "Log ud",
|
||||
"setPassword": "Vælg kodeord"
|
||||
},
|
||||
"classification": "Kategorisering"
|
||||
"classification": "Kategorisering",
|
||||
"profiles": "Profiler",
|
||||
"actions": "Handlinger",
|
||||
"features": "Funktioner",
|
||||
"chat": "Chat"
|
||||
},
|
||||
"toast": {
|
||||
"copyUrlToClipboard": "Kopieret URL til udklipsholder.",
|
||||
@@ -252,13 +270,14 @@
|
||||
"error": {
|
||||
"title": "Ændringer kunne ikke gemmes: {{errorMessage}}",
|
||||
"noMessage": "Kunne ikke gemme konfigurationsændringer"
|
||||
}
|
||||
},
|
||||
"success": "Gemte ændringerne i konfigurationen."
|
||||
}
|
||||
},
|
||||
"role": {
|
||||
"title": "Rolle",
|
||||
"admin": "Admin",
|
||||
"viewer": "Viewer",
|
||||
"viewer": "Seer",
|
||||
"desc": "Admins har fuld adgang til Frigate UI. Viewers er begrænset til at se kameraer, gennemse items, og historik i UI."
|
||||
},
|
||||
"pagination": {
|
||||
@@ -296,5 +315,10 @@
|
||||
},
|
||||
"information": {
|
||||
"pixels": "{{area}}px"
|
||||
},
|
||||
"no_items": "Intet fundet",
|
||||
"validation_errors": "Valideringsfejl",
|
||||
"credentialField": {
|
||||
"savedPlaceholder": "Gemt - efterlad blank for at bevare nuværende"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
"setting": {
|
||||
"label": "Kamera Streaming Indstillinger",
|
||||
"title": "{{cameraName}} Streaming Indstillinger",
|
||||
"desc": "Skift de live streaming muligheder for denne kameragruppes dashboard. <em> Disse indstillinger er enheds- og browserspecifikke.</em>",
|
||||
"desc": "Skift indstillingerne for direkte visning af denne kameragruppes dashboard. <em> Disse indstillinger er enheds- og browserspecifikke.</em>",
|
||||
"audioIsAvailable": "Lyd er tilgængelig for denne stream",
|
||||
"audioIsUnavailable": "Lyd er ikke tilgængelig for denne strøm",
|
||||
"audio": {
|
||||
@@ -67,7 +67,10 @@
|
||||
"desc": "Aktivér kun denne mulighed, hvis kameraets live stream viser farve artefakter og har en diagonal linje på højre side af billedet."
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"showAll": "Vis alle kameragrupper",
|
||||
"showLess": "Vis mindre",
|
||||
"editGroups": "Rediger kameragrupper"
|
||||
},
|
||||
"debug": {
|
||||
"options": {
|
||||
@@ -81,6 +84,7 @@
|
||||
"zones": "Zoner",
|
||||
"mask": "Maske",
|
||||
"motion": "Bevægelse",
|
||||
"regions": "Regioner"
|
||||
"regions": "Regioner",
|
||||
"paths": "Stier"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"restart": {
|
||||
"title": "Er du sikker på at du vil genstarte Frigate?",
|
||||
"title": "Er du sikker på, at du vil genstarte Frigate?",
|
||||
"button": "Genstart",
|
||||
"restarting": {
|
||||
"title": "Frigate genstarter",
|
||||
@@ -21,8 +21,46 @@
|
||||
"ask_a": "Er dette objekt et <code>{{label}}</code>?",
|
||||
"ask_an": "Er dette objekt en <code>{{label}}</code>?",
|
||||
"ask_full": "Er dette objekt en <code>{{untranslatedLabel}}</code> ({{translatedLabel}})?"
|
||||
},
|
||||
"state": {
|
||||
"submitted": "Indsendt"
|
||||
},
|
||||
"toast": {
|
||||
"error": "Fejl under indsendelse til Frigate+. Kontroller venligst din netværksforbindelse og prøv igen."
|
||||
}
|
||||
}
|
||||
},
|
||||
"video": {
|
||||
"viewInHistory": "Se i historik"
|
||||
}
|
||||
},
|
||||
"export": {
|
||||
"time": {
|
||||
"fromTimeline": "Vælg fra tidslinje",
|
||||
"lastHour_one": "Sidste time",
|
||||
"lastHour_other": "Sidste {{count}} timer",
|
||||
"custom": "Tidsinterval",
|
||||
"start": {
|
||||
"title": "Starttidspunkt",
|
||||
"label": "Vælg starttidspunkt"
|
||||
},
|
||||
"end": {
|
||||
"title": "Sluttidspunkt",
|
||||
"label": "Vælg sluttidspunkt"
|
||||
}
|
||||
},
|
||||
"name": {
|
||||
"placeholder": "Navngiv eksport"
|
||||
},
|
||||
"case": {
|
||||
"newCaseOption": "Opret ny sag",
|
||||
"newCaseNamePlaceholder": "Nyt sagsnavn",
|
||||
"newCaseDescriptionPlaceholder": "Sagsbeskrivelse",
|
||||
"label": "Sag",
|
||||
"nonAdminHelp": "En ny sag oprettes til disse eksporter.",
|
||||
"placeholder": "Vælg en sag"
|
||||
},
|
||||
"select": "Vælg",
|
||||
"export": "Eksporter"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -14,6 +14,7 @@
|
||||
"notifications": "Notifikations indstillinger - Frigate"
|
||||
},
|
||||
"menu": {
|
||||
"ui": "Brugergrænseflade"
|
||||
"ui": "Brugergrænseflade",
|
||||
"profiles": "Profiler"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
"toothbrush": "Zahnbürste",
|
||||
"bicycle": "Fahrrad",
|
||||
"door": "Tür",
|
||||
"keyboard": "Klaviatur",
|
||||
"keyboard": "Klavier",
|
||||
"bus": "Bus",
|
||||
"horse": "Pferd",
|
||||
"cat": "Katze",
|
||||
@@ -123,7 +123,7 @@
|
||||
"chicken": "Huhn",
|
||||
"sitar": "Sitar",
|
||||
"ukulele": "Ukulele",
|
||||
"tapping": "Klopfen",
|
||||
"tapping": "Tippen",
|
||||
"flapping_wings": "Flügelschlagen",
|
||||
"strum": "Herumklimpern",
|
||||
"electronic_organ": "Elektrische Orgel",
|
||||
|
||||
@@ -42,7 +42,7 @@
|
||||
"untilRestart": "Bis zum Neustart",
|
||||
"justNow": "Gerade",
|
||||
"pm": "nachmittags",
|
||||
"mo": "{{time}} Mon",
|
||||
"mo": "{{time}} Mon.",
|
||||
"formattedTimestamp": {
|
||||
"12hour": "d. MMM, hh:mm:ss aaa",
|
||||
"24hour": "dd. MMM, hh:mm:ss aaa"
|
||||
@@ -193,7 +193,7 @@
|
||||
"gl": "Galego (Galicisch)",
|
||||
"id": "Bahasa Indonesia (Indonesisch)",
|
||||
"hr": "Hrvatski (Kroatisch)",
|
||||
"bs": "Bosnisch",
|
||||
"bs": "Bosanski (Bosnisch)",
|
||||
"zhHant": "Traditional Chinese"
|
||||
},
|
||||
"appearance": "Erscheinung",
|
||||
|
||||
@@ -68,7 +68,10 @@
|
||||
},
|
||||
"label": "Kamera Gruppen",
|
||||
"edit": "Kameragruppe bearbeiten",
|
||||
"success": "Kameragruppe {{name}} wurde gespeichert."
|
||||
"success": "Kameragruppe {{name}} wurde gespeichert.",
|
||||
"showAll": "Alle Kameragruppen anzeigen",
|
||||
"showLess": "Weniger anzeigen",
|
||||
"editGroups": "Kameragruppen bearbeiten"
|
||||
},
|
||||
"debug": {
|
||||
"options": {
|
||||
|
||||
@@ -105,14 +105,21 @@
|
||||
"cameraSelection": "Kameras",
|
||||
"cameraSelectionHelp": "Kameras, die in diesem Zeitbereich Objekte verfolgen, sind vorausgewählt",
|
||||
"checkingActivity": "Kameraaktivität wird überprüft...",
|
||||
"noCameras": "keine kamaeras verfügbar",
|
||||
"noCameras": "Keine Kameras verfügbar",
|
||||
"detectionCount_one": "1 verfolgtes Objekt",
|
||||
"detectionCount_other": "{{count}} verfolgtesObjekte",
|
||||
"nameLabel": "Export Name",
|
||||
"detectionCount_other": "{{count}} verfolgte Objekte",
|
||||
"nameLabel": "Exportname",
|
||||
"namePlaceholder": "Optionaler Basisname für diese Exporte",
|
||||
"queueingButton": "Exporte werden in die Warteschlange gestellt...",
|
||||
"exportButton_one": "Export 1 Kamera",
|
||||
"exportButton_other": "xport {{count}} Kameras"
|
||||
"exportButton_other": "xport {{count}} Kameras",
|
||||
"searchOrSelectGroup": "Suchen, oder Kameragruppe auswählen...",
|
||||
"selectAll": "Alle Kameras auswählen",
|
||||
"clearSelection": "Auswahl löschen",
|
||||
"selectWithActivity": "Kameras mit verfolgten Objekten",
|
||||
"selectGroup": "Gruppe auswählen",
|
||||
"noMatchingCameras": "Der Suche entsprechen keine Kameras",
|
||||
"selectedCount": "{{selected}} / {{total}} ausgewählt"
|
||||
},
|
||||
"multi": {
|
||||
"title_one": "1 Bewertung exportieren",
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
"description": "Mindest-RMS-Lautstärkeschwelle, die für die Audioerkennung erforderlich ist; niedrigere Werte erhöhen die Empfindlichkeit (z. B. 200 hoch, 500 mittel, 1000 niedrig)."
|
||||
},
|
||||
"listen": {
|
||||
"description": "Liste der zu erkennenden Audioereignisse (z.B: bellen, Feueralarm, schreien, sprechen, rufen).",
|
||||
"description": "Liste der zu erkennenden Audioereignisse (z.B: bellen, Feueralarm, Gespräche, Rufen).",
|
||||
"label": "Hörtypen"
|
||||
},
|
||||
"filters": {
|
||||
@@ -204,11 +204,11 @@
|
||||
"description": "Einstellungen zum Aktivieren und Verwalten von Benachrichtigungen für diese Kamera."
|
||||
},
|
||||
"ffmpeg": {
|
||||
"label": "FFmpeg",
|
||||
"description": "FFmpeg-Einstellungen, einschließlich Binärpfad, Argumente, hwaccel-Optionen und rollenspezifische Ausgabeargumente.",
|
||||
"label": "Streams (FFmpeg)",
|
||||
"description": "Kamera-Stream-Eingaben und FFmpeg-Optionen, einschließlich Binärpfad, Argumente, hwaccel und rollenspezifische Ausgabeargumente.",
|
||||
"path": {
|
||||
"label": "FFmpeg-Pfad",
|
||||
"description": "Pfad zur zu verwendenden FFmpeg-Binärdatei oder ein Versionsalias („5.0” oder „7.0”)."
|
||||
"description": "Pfad zur zu verwendenden FFmpeg-Binärdatei oder ein Versionsalias („7.0” oder „8.0”)."
|
||||
},
|
||||
"global_args": {
|
||||
"label": "Globale Argumente von FFmpeg",
|
||||
@@ -770,6 +770,10 @@
|
||||
"dashboard": {
|
||||
"label": "In der Benutzeroberfläche anzeigen",
|
||||
"description": "Schalte ein, ob diese Kamera überall in der Benutzeroberfläche von „Frigate“ sichtbar ist. Wenn du diese Option deaktivierst, musst du die Konfiguration manuell bearbeiten, um diese Kamera wieder in der Benutzeroberfläche anzuzeigen."
|
||||
},
|
||||
"review": {
|
||||
"label": "In der Überprüfung anzeigen",
|
||||
"description": "Legen Sie fest, ob diese Kamera in der Übersicht angezeigt wird (auf der Übersichtsseite sowie im Kamerafilter, in der Bewegungsübersicht und in der Verlaufsansicht)."
|
||||
}
|
||||
},
|
||||
"snapshots": {
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
"description": "Mindest-RMS-Lautstärkeschwelle, die für die Audioerkennung erforderlich ist; niedrigere Werte erhöhen die Empfindlichkeit (z. B. 200 hoch, 500 mittel, 1000 niedrig)."
|
||||
},
|
||||
"listen": {
|
||||
"description": "Liste der zu erkennenden Audioereignisse (z.B: bellen, Feueralarm, schreien, sprechen, rufen).",
|
||||
"description": "Liste der zu erkennenden Audioereignisse (z.B: bellen, Feueralarm, Gespräche, Rufen).",
|
||||
"label": "Hörtypen"
|
||||
},
|
||||
"filters": {
|
||||
@@ -380,7 +380,7 @@
|
||||
"description": "FFmpeg-Einstellungen, einschließlich Binärpfad, Argumente, hwaccel-Optionen und rollenspezifische Ausgabeargumente.",
|
||||
"path": {
|
||||
"label": "FFmpeg-Pfad",
|
||||
"description": "Pfad zur zu verwendenden FFmpeg-Binärdatei oder ein Versionsalias („5.0” oder „7.0”)."
|
||||
"description": "Pfad zur zu verwendenden FFmpeg-Binärdatei oder ein Versionsalias („7.0” oder „8.0”)."
|
||||
},
|
||||
"global_args": {
|
||||
"label": "Globale Argumente von FFmpeg",
|
||||
@@ -1934,6 +1934,10 @@
|
||||
"dashboard": {
|
||||
"label": "In der Benutzeroberfläche anzeigen",
|
||||
"description": "Schalte ein, ob diese Kamera überall in der Benutzeroberfläche von „Frigate“ sichtbar ist. Wenn du diese Option deaktivierst, musst du die Konfiguration manuell bearbeiten, um diese Kamera wieder in der Benutzeroberfläche anzuzeigen."
|
||||
},
|
||||
"review": {
|
||||
"label": "In der Überprüfung anzeigen",
|
||||
"description": "Legen Sie fest, ob diese Kamera in der Übersicht angezeigt wird (auf der Übersichtsseite sowie im Kamerafilter, in der Bewegungsübersicht und in der Verlaufsansicht)."
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -90,7 +90,7 @@
|
||||
"laptop": "Laptop",
|
||||
"mouse": "Maus",
|
||||
"goat": "Ziege",
|
||||
"keyboard": "Klaviatur",
|
||||
"keyboard": "Klavier",
|
||||
"cell_phone": "Handy",
|
||||
"remote": "Fernbedienung",
|
||||
"airplane": "Flugzeug",
|
||||
|
||||
@@ -46,7 +46,7 @@
|
||||
"threshold": "Empfindlichkeitsschwelle",
|
||||
"thresholdDesc": "Niedrigere Werte erkennen geringere Veränderungen (1–255)",
|
||||
"minArea": "Mindestwechselbereich",
|
||||
"minAreaDesc": "Mindestanteil der untersuchten Region, der sich ändern muss, damit die Veränderung als signifikant gilt",
|
||||
"minAreaDesc": "Mindestgröße eines einzelnen sich bewegenden Bereichs, ausgedrückt als Prozentsatz des untersuchten Bereichs",
|
||||
"frameSkip": "Bild überspringen",
|
||||
"frameSkipDesc": "Verarbeite jeden N-ten Frame. Stelle diesen Wert auf die Bildrate deiner Kamera ein, um einen Frame pro Sekunde zu verarbeiten (z. B. 5 für eine Kamera mit 5 FPS, 30 für eine Kamera mit 30 FPS). Höhere Werte sorgen für eine schnellere Verarbeitung, können jedoch kurze Bewegungsabläufe übersehen.",
|
||||
"maxResults": "Maximale Ergebnisse",
|
||||
@@ -72,6 +72,9 @@
|
||||
"framesDecoded": "Rahmen decodiert",
|
||||
"wallTime": "Suchzeit",
|
||||
"segmentErrors": "Segmentfehler",
|
||||
"seconds": "{{seconds}}s"
|
||||
}
|
||||
"seconds": "{{seconds}}s",
|
||||
"minutesSeconds": "{{minutes}}m {{seconds}}s",
|
||||
"scanSummary": "{{segments}} Segmente · {{time}}"
|
||||
},
|
||||
"scanning": "Wird gescannt {{time}}"
|
||||
}
|
||||
|
||||
@@ -70,7 +70,7 @@
|
||||
"integrationObjectClassification": "Objekt Klassifizierung",
|
||||
"integrationAudioTranscription": "Audio-Transkription",
|
||||
"cameraDetect": "Objekterkennung",
|
||||
"cameraFfmpeg": "FFmpeg",
|
||||
"cameraFfmpeg": "Streams (FFmpeg)",
|
||||
"cameraRecording": "Aufnahme",
|
||||
"cameraSnapshots": "Momentaufnahme",
|
||||
"cameraMotion": "Bewegungserkennung",
|
||||
@@ -1376,12 +1376,16 @@
|
||||
"details": {
|
||||
"edit": "Kameradaten bearbeiten",
|
||||
"title": "Kameradaten bearbeiten",
|
||||
"description": "Aktualisieren Sie den Anzeigenamen und die externe URL, die für diese Kamera in der gesamten Frigate-Benutzeroberfläche verwendet werden.",
|
||||
"description": "Aktualisieren Sie den Anzeigenamen, die externe URL und die Sichtbarkeit, die für diese Kamera in der gesamten Frigate-Benutzeroberfläche verwendet werden.",
|
||||
"friendlyNameLabel": "Display Name",
|
||||
"friendlyNameHelp": "Der in der Benutzeroberfläche von „Frigate“ für diese Kamera angezeigte Spitzname. Lassen Sie das Feld leer, um die Kamera-ID zu verwenden.",
|
||||
"webuiUrlLabel": "URL der Web-Benutzeroberfläche",
|
||||
"webuiUrlHelp": "URL, um die Web-Benutzeroberfläche der Kamera direkt aus der Debug-Ansicht aufzurufen. Lassen Sie das Feld leer, um den Link zu deaktivieren.",
|
||||
"webuiUrlInvalid": "Es muss sich um eine gültige URL handeln (z. B. https://example.com)."
|
||||
"webuiUrlInvalid": "Es muss sich um eine gültige URL handeln (z. B. https://example.com).",
|
||||
"dashboardLabel": "Im Live-Dashboard anzeigen",
|
||||
"dashboardHelp": "Diese Kamera im Live-Dashboard anzeigen.",
|
||||
"reviewLabel": "In der Überprüfung anzeigen",
|
||||
"reviewHelp": "Zeige diese Kamera in der Übersicht an, einschließlich des Kamerafilters, der Bewegungsübersicht und der Verlaufsansicht."
|
||||
},
|
||||
"label": "Kamerazustand",
|
||||
"description": "Legen Sie den Betriebszustand für jede Kamera fest.<br /><br /><strong>Ein</strong>: Streams werden normal verarbeitet.<br /><strong>Aus</strong>: Die Verarbeitung wird vorübergehend angehalten. Diese Einstellung bleibt bei einem Neustart von Frigate nicht erhalten.<br /><strong>Deaktiviert</strong>: Die Verarbeitung wird beendet und die Änderung in Ihrer Konfiguration gespeichert. Um eine deaktivierte Kamera wieder zu aktivieren, ist ein Neustart erforderlich.<br /><br /><em>Hinweis: Die Deaktivierung hat keine Auswirkungen auf go2rtc-Restreams.</em><br /><br />Ziehen Sie den Griff, um die Reihenfolge der aktiven Kameras in der Benutzeroberfläche anzupassen, einschließlich des Live-Dashboards und der Dropdown-Menüs zur Kameraauswahl.",
|
||||
@@ -1764,7 +1768,17 @@
|
||||
}
|
||||
},
|
||||
"cameraInputs": {
|
||||
"itemTitle": "Stream {{index}}"
|
||||
"itemTitle": "Stream {{index}}",
|
||||
"sourceMode": {
|
||||
"restream": "Restream (go2rtc)",
|
||||
"manual": "Pfad für die manuelle Eingabe",
|
||||
"go2rtcStreamLabel": "go2rtc stream",
|
||||
"go2rtcStreamPlaceholder": "Wählen Sie einen go2rtc-Stream aus",
|
||||
"noGo2rtcStreams": "Es sind keine go2rtc-Streams konfiguriert",
|
||||
"go2rtcStreamSearch": "Suche Streams...",
|
||||
"availableStreams": "Verfügbare Streams",
|
||||
"noMatchingStreams": "Keine passenden Streams"
|
||||
}
|
||||
},
|
||||
"restartRequiredField": "Neustart erforderlich",
|
||||
"restartRequiredFooter": "Konfiguration geändert – Neustart erforderlich",
|
||||
@@ -2082,7 +2096,11 @@
|
||||
"fpsGreaterThanFive": "Es wird nicht empfohlen, den Wert für die FPS-Erkennung auf mehr als 5 zu setzen. Höhere Werte können zu Leistungseinbußen führen und bieten keinerlei Vorteile.",
|
||||
"disabled": "Die Objekterkennung ist deaktiviert. Momentaufnahmen, Überprüfungselemente und Erweiterungsfunktionen wie Gesichtserkennung, Kennzeichenerkennung und generative KI funktionieren nicht.",
|
||||
"resolutionShouldBeMultipleOfFour": "Um optimale Ergebnisse zu erzielen, sollten Breite und Höhe ein Vielfaches von 4 sein. Andere gerade Werte können zu visuellen Artefakten oder leichten Verzerrungen im Erkennungsstrom führen.",
|
||||
"aspectRatioMismatch": "Die von Ihnen eingegebene Breite und Höhe stimmen nicht mit dem Seitenverhältnis Ihrer aktuell erkannten Auflösung überein. Dies kann zu einem gestreckten oder verzerrten Bild führen."
|
||||
"aspectRatioMismatch": "Die von Ihnen eingegebene Breite und Höhe stimmen nicht mit dem Seitenverhältnis Ihrer aktuell erkannten Auflösung überein. Dies kann zu einem gestreckten oder verzerrten Bild führen.",
|
||||
"maxFramesSet": "Die Festlegung einer maximalen Bildrate überschreibt das Standardverhalten und deaktiviert die Verfolgung stationärer Objekte. Dies ist nur in sehr wenigen Fällen erforderlich; verwenden Sie diese Option daher mit Bedacht.",
|
||||
"squareResolution": "Eine quadratische Erkennungsauflösung ist ungewöhnlich. Die Erkennungsbreite und -höhe sollten dem Seitenverhältnis Ihrer Kamera entsprechen (zum Beispiel 16:9) und nicht den Abmessungen des Objekterkennungsmodells. Ein nicht übereinstimmendes Seitenverhältnis kann das Bild verzerren und die Erkennungsgenauigkeit beeinträchtigen.",
|
||||
"resolutionHigh": "Diese Erkennungsauflösung liegt über der empfohlenen Wert und kann zu einem erhöhten Ressourcenverbrauch führen, ohne die Erkennungsgenauigkeit zu verbessern. Für die meisten Kameras wird eine Erkennungsauflösung von maximal 1080p empfohlen.",
|
||||
"globalResolutionMultipleCameras": "Bei der Konfiguration mehrerer Kameras wird eine globale Erkennungsauflösung festgelegt. Sofern nicht alle Kameras dieselbe Auflösung und dasselbe Seitenverhältnis aufweisen, sollten die Erkennungsbreite und -höhe für jede Kamera separat festgelegt werden, um dem nativen Seitenverhältnis der jeweiligen Kamera zu entsprechen."
|
||||
},
|
||||
"faceRecognition": {
|
||||
"globalDisabled": "Die Gesichtserkennungserweiterung muss aktiviert sein, damit die Gesichtserkennungsfunktionen bei dieser Kamera funktionieren.",
|
||||
@@ -2115,6 +2133,13 @@
|
||||
},
|
||||
"onvif": {
|
||||
"autotrackingNoZones": "Für die automatische Verfolgung ist mindestens eine Zone erforderlich. Definieren Sie unter „Masken / Zonen“ eine Zone für diese Kamera und legen Sie diese anschließend unten als erforderliche Zone fest."
|
||||
},
|
||||
"ffmpeg": {
|
||||
"hwaccelManualNotRecommended": "Explizite Definitionen der Hardware-beschleunigungs Variablen sind nicht empfohlen. Wähle die Voreinstellung die zu deiner Hardware passt, außer wenn spezifische Anforderungen eine andere Konfiguration erfordern."
|
||||
},
|
||||
"model": {
|
||||
"optimizedFor320": "Frigate ist für ein 320x320-Modell optimiert, was für die meisten Konfigurationen die beste Wahl ist. Ein 640x640-Modell ist langsamer und bietet nur in bestimmten Szenarien Vorteile.",
|
||||
"inputDimensionsNotDetectResolution": "Die Eingangsbreite und -höhe des Modells beziehen sich auf die Abmessungen des Objekterkennungsmodells und nicht auf die Erkennungsauflösung Ihrer Kamera. Sie sollten mit den Abmessungen des von Ihnen verwendeten Modells übereinstimmen – in der Regel quadratische Abmessungen wie 320×320 oder 640×640."
|
||||
}
|
||||
},
|
||||
"birdseye": {
|
||||
|
||||
@@ -173,7 +173,22 @@
|
||||
"tips": {
|
||||
"title": "Kamera-Untersuchsungsinfo"
|
||||
},
|
||||
"aspectRatio": "Seitenverhältnis"
|
||||
"aspectRatio": "Seitenverhältnis",
|
||||
"keyframes": {
|
||||
"title": "Keyframe-Analyse",
|
||||
"analyzing": "Keyframes werden analysiert... Noch {{seconds}} Sekunden",
|
||||
"stillAnalyzing": "Keyframes werden noch analysiert...",
|
||||
"recordStream": "Stream aufzeichnen:",
|
||||
"keyframeCount": "Beobachtete Keyframes:",
|
||||
"observedDuration": "Beobachtete Dauer:",
|
||||
"gap": "Keyframe-Abstand (min. / durchschnittlich / max.):",
|
||||
"segmentLength": "Länge des Aufzeichnungssegments:",
|
||||
"ok": "Keyframes alle ~{{seconds}}s, gut geeignet für Aufzeichnung und Wiedergabe.",
|
||||
"warning": "Seltene oder unregelmäßige Keyframes (längste Lücke ~{{seconds}}s), wahrscheinlich ein „Smart“-Codec (H.264+/H.265+); dies wird nicht empfohlen.",
|
||||
"error": "Die Lücke zwischen den Keyframes (~{{seconds}}s) überschreitet die Länge des Aufzeichnungssegments ({{segmentTime}}s). Einige Segmente enthalten möglicherweise keinen Keyframe, was zu einer Unterbrechung der Wiedergabe führt. Deaktivieren Sie den Smart/+-Codec an der Kamera oder verkürzen Sie dessen Keyframe-Intervall.",
|
||||
"unknown": "Der Abstand zwischen den Keyframes konnte nicht ermittelt werden.",
|
||||
"recordDisabled": "Die Aufzeichnung ist für diese Kamera deaktiviert."
|
||||
}
|
||||
},
|
||||
"overview": "Übersicht",
|
||||
"label": {
|
||||
|
||||
@@ -61,5 +61,14 @@
|
||||
"yodeling": "Λαρυγγισμός",
|
||||
"chant": "Ύμνος",
|
||||
"mantra": "Μάντρα",
|
||||
"synthetic_singing": "Συνθετικό Τραγούδι"
|
||||
"synthetic_singing": "Συνθετικό Τραγούδι",
|
||||
"rapping": "Χτύπημα",
|
||||
"humming": "Μουρμουρητό",
|
||||
"groan": "Aναστεναγμός",
|
||||
"grunt": "Μούγκρισμα",
|
||||
"gasp": "Ανάσα",
|
||||
"pant": "Λαχάνιασμα",
|
||||
"snort": "Ρουθούνισμα",
|
||||
"cough": "Βήχας",
|
||||
"throat_clearing": "Ξεροβήξιμο"
|
||||
}
|
||||
|
||||
@@ -109,7 +109,9 @@
|
||||
"no": "Όχι",
|
||||
"download": "Κατέβασμα",
|
||||
"info": "Πληροφορίες",
|
||||
"history": "Ιστορία"
|
||||
"history": "Ιστορία",
|
||||
"on": "Ενεργοποίηση",
|
||||
"off": "Απενεργοποίηση"
|
||||
},
|
||||
"unit": {
|
||||
"speed": {
|
||||
@@ -117,7 +119,8 @@
|
||||
"kph": "χλμ/ώρα"
|
||||
},
|
||||
"length": {
|
||||
"meters": "μέτρα"
|
||||
"meters": "μέτρα",
|
||||
"feet": "πόδια"
|
||||
},
|
||||
"data": {
|
||||
"kbps": "kB/s",
|
||||
@@ -134,7 +137,8 @@
|
||||
"show": "Εμφάνιση {{item}}",
|
||||
"ID": "ID",
|
||||
"none": "Κανένα",
|
||||
"all": "Όλα"
|
||||
"all": "Όλα",
|
||||
"other": "άλλο"
|
||||
},
|
||||
"toast": {
|
||||
"save": {
|
||||
|
||||
@@ -493,6 +493,9 @@
|
||||
"max_concurrent": {
|
||||
"label": "Maximum concurrent exports",
|
||||
"description": "Maximum number of export jobs to process at the same time."
|
||||
},
|
||||
"chapters": {
|
||||
"label": "Chapter metadata to embed in exported recordings"
|
||||
}
|
||||
},
|
||||
"preview": {
|
||||
|
||||
@@ -1035,6 +1035,9 @@
|
||||
"max_concurrent": {
|
||||
"label": "Maximum concurrent exports",
|
||||
"description": "Maximum number of export jobs to process at the same time."
|
||||
},
|
||||
"chapters": {
|
||||
"label": "Chapter metadata to embed in exported recordings"
|
||||
}
|
||||
},
|
||||
"preview": {
|
||||
|
||||
@@ -119,7 +119,14 @@
|
||||
"queueingButton": "Poniendo exportaciones en cola...",
|
||||
"exportButton_one": "Exportar 1 cámara",
|
||||
"exportButton_many": "Exportar {{count}} cámaras",
|
||||
"exportButton_other": "Exportar {{count}} cámaras"
|
||||
"exportButton_other": "Exportar {{count}} cámaras",
|
||||
"searchOrSelectGroup": "Busca o selecciona un grupo de cámaras…",
|
||||
"selectAll": "Seleccionar todas las cámaras",
|
||||
"clearSelection": "Borrar selección",
|
||||
"selectWithActivity": "Cámaras con objetos rastreados",
|
||||
"selectGroup": "Seleccionar grupo",
|
||||
"noMatchingCameras": "Ninguna cámara coincide con tu búsqueda",
|
||||
"selectedCount": "{{selected}} / {{total}} seleccionadas"
|
||||
},
|
||||
"multi": {
|
||||
"title_one": "Exportar 1 revisión",
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
},
|
||||
"listen": {
|
||||
"label": "Tipos de escucha",
|
||||
"description": "Lista de tipos de eventos de audio a detectar (por ejemplo: ladrido, alarma de incendios, grito, voz, alarido)."
|
||||
"description": "Lista de tipos de eventos de audio a detectar (por ejemplo: ladrar, alarma de incendio, habla, gritar)."
|
||||
},
|
||||
"filters": {
|
||||
"label": "Filtros de audio",
|
||||
@@ -744,7 +744,7 @@
|
||||
"label": "Tiempo de reintento de FFmpeg"
|
||||
},
|
||||
"path": {
|
||||
"description": "Ruta al binario de FFmpeg que se va a utilizar o un alias de versión (\"5.0\" o \"7.0\").",
|
||||
"description": "Ruta al binario de FFmpeg que se va a utilizar o un alias de versión (\"7.0\" o \"8.0\").",
|
||||
"label": "Ruta de FFmpeg"
|
||||
},
|
||||
"output_args": {
|
||||
@@ -759,8 +759,8 @@
|
||||
"description": "Argumentos de salida predeterminados para los flujos con rol de grabación."
|
||||
}
|
||||
},
|
||||
"description": "Configuración de FFmpeg, incluyendo la ruta del binario, argumentos, opciones de aceleración por hardware y argumentos de salida por rol.",
|
||||
"label": "FFmpeg",
|
||||
"description": "Entradas de flujo de la cámara y opciones de FFmpeg, incluida la ruta del binario, argumentos, aceleración por hardware y argumentos de salida por rol.",
|
||||
"label": "Flujos (FFmpeg)",
|
||||
"global_args": {
|
||||
"label": "Argumentos globales de FFmpeg",
|
||||
"description": "Argumentos globales pasados a los procesos de FFmpeg."
|
||||
|
||||
@@ -39,7 +39,7 @@
|
||||
},
|
||||
"listen": {
|
||||
"label": "Tipos de escucha",
|
||||
"description": "Lista de tipos de eventos de audio a detectar (por ejemplo: ladrido, alarma de incendios, grito, voz, alarido)."
|
||||
"description": "Lista de tipos de eventos de audio a detectar (por ejemplo: ladrar, alarma de incendio, habla, gritar)."
|
||||
},
|
||||
"filters": {
|
||||
"label": "Filtros de audio",
|
||||
@@ -1234,7 +1234,7 @@
|
||||
"label": "Tiempo de reintento de FFmpeg"
|
||||
},
|
||||
"path": {
|
||||
"description": "Ruta al binario de FFmpeg que se va a utilizar o un alias de versión (\"5.0\" o \"7.0\").",
|
||||
"description": "Ruta al binario de FFmpeg que se va a utilizar o un alias de versión (\"7.0\" o \"8.0\").",
|
||||
"label": "Ruta de FFmpeg"
|
||||
},
|
||||
"output_args": {
|
||||
|
||||
@@ -72,7 +72,7 @@
|
||||
"integrationObjectClassification": "Clasificación de objetos",
|
||||
"integrationAudioTranscription": "Transcripción de audio",
|
||||
"cameraDetect": "Detección de objetos",
|
||||
"cameraFfmpeg": "FFmpeg",
|
||||
"cameraFfmpeg": "Flujos (FFmpeg)",
|
||||
"cameraRecording": "Grabación",
|
||||
"cameraSnapshots": "Instantáneas",
|
||||
"cameraMotion": "Detección de movimiento",
|
||||
@@ -1720,7 +1720,17 @@
|
||||
}
|
||||
},
|
||||
"cameraInputs": {
|
||||
"itemTitle": "Flujo {{index}}"
|
||||
"itemTitle": "Flujo {{index}}",
|
||||
"sourceMode": {
|
||||
"restream": "Retransmisión (go2rtc)",
|
||||
"manual": "Ruta de entrada manual",
|
||||
"go2rtcStreamLabel": "Flujo go2rtc",
|
||||
"go2rtcStreamPlaceholder": "Selecciona un flujo go2rtc",
|
||||
"noGo2rtcStreams": "No hay flujos go2rtc configurados",
|
||||
"go2rtcStreamSearch": "Buscar flujos…",
|
||||
"availableStreams": "Flujos disponibles",
|
||||
"noMatchingStreams": "No hay flujos coincidentes"
|
||||
}
|
||||
},
|
||||
"restartRequiredField": "Reinicio necesario",
|
||||
"restartRequiredFooter": "Configuración modificada - reinicio necesario",
|
||||
@@ -2020,6 +2030,9 @@
|
||||
},
|
||||
"onvif": {
|
||||
"autotrackingNoZones": "El seguimiento automático requiere al menos una zona. Define una zona para esta cámara en Máscaras / Zonas y, a continuación, establécela como zona obligatoria a continuación."
|
||||
},
|
||||
"ffmpeg": {
|
||||
"hwaccelManualNotRecommended": "No son remontados los argumentos de aceleración por hardware manual. A no ser que un requisito específico exista, seleccione la preselección que coincida con su hardware."
|
||||
}
|
||||
},
|
||||
"resetToDefaultDescription": "Esto restablecerá todos los ajustes de esta sección a sus valores predeterminados. Esta acción no se puede deshacer.",
|
||||
|
||||
@@ -81,16 +81,16 @@
|
||||
"gpuInfo": {
|
||||
"vainfoOutput": {
|
||||
"title": "Salida de Vainfo",
|
||||
"returnCode": "Código de Retorno: {{code}}",
|
||||
"processOutput": "Salida del Proceso:",
|
||||
"processError": "Error del Proceso:"
|
||||
"returnCode": "Código de retorno: {{code}}",
|
||||
"processOutput": "Salida del proceso:",
|
||||
"processError": "Error del proceso:"
|
||||
},
|
||||
"nvidiaSMIOutput": {
|
||||
"cudaComputerCapability": "Capacidad de Cómputo CUDA: {{cuda_compute}}",
|
||||
"cudaComputerCapability": "Capacidad de cómputo CUDA: {{cuda_compute}}",
|
||||
"title": "Salida de Nvidia SMI",
|
||||
"driver": "Controlador: {{driver}}",
|
||||
"name": "Nombre: {{name}}",
|
||||
"vbios": "Información de VBios: {{vbios}}"
|
||||
"vbios": "Informe de VBios: {{vbios}}"
|
||||
},
|
||||
"toast": {
|
||||
"success": "Información de GPU copiada al portapapeles"
|
||||
@@ -104,7 +104,7 @@
|
||||
},
|
||||
"gpuMemory": "Memoria de GPU",
|
||||
"npuMemory": "Memoria de NPU",
|
||||
"npuUsage": "Uso de NPU",
|
||||
"npuUsage": "Modo de empleo de NPU",
|
||||
"intelGpuWarning": {
|
||||
"title": "Aviso de estadísticas Intel GPU",
|
||||
"message": "Estadísticas de GPU no disponibles",
|
||||
@@ -122,7 +122,7 @@
|
||||
"go2rtc": "go2rtc",
|
||||
"recording": "grabación",
|
||||
"review_segment": "revisar segmento",
|
||||
"embeddings": "embeddings",
|
||||
"embeddings": "empotrados",
|
||||
"audio_detector": "detector de audio"
|
||||
}
|
||||
}
|
||||
@@ -165,8 +165,8 @@
|
||||
"codec": "Codec:",
|
||||
"fetching": "Obteniendo Datos de la Cámara",
|
||||
"stream": "Flujo {{idx}}",
|
||||
"video": "Video:",
|
||||
"fps": "FPS:",
|
||||
"video": "Vídeo:",
|
||||
"fps": "CPS:",
|
||||
"resolution": "Resolución:",
|
||||
"error": "Error: {{error}}",
|
||||
"unknown": "Desconocido",
|
||||
@@ -174,7 +174,22 @@
|
||||
"tips": {
|
||||
"title": "Información de Sondeo de la Cámara"
|
||||
},
|
||||
"aspectRatio": "Relación de aspecto"
|
||||
"aspectRatio": "Relación de aspecto",
|
||||
"keyframes": {
|
||||
"title": "Análisis de clave fotograma",
|
||||
"recordStream": "Flujo de grabación:",
|
||||
"segmentLength": "Longitud de segmento en grabación:",
|
||||
"unknown": "No pudo determinar el espaciado del fotograma.",
|
||||
"analyzing": "Analizando fotogramas clave… {{seconds}} segundos restantes",
|
||||
"stillAnalyzing": "Todavía analizando fotogramas clave…",
|
||||
"keyframeCount": "Fotogramas clave observados:",
|
||||
"observedDuration": "Duración observada:",
|
||||
"gap": "Brecha de fotogramas clave (mín / med / máx):",
|
||||
"recordDisabled": "La grabación está desactivada para esta cámara.",
|
||||
"ok": "Cuadros cada ~{{seconds}}s, bueno para grabación y reproducción.",
|
||||
"warning": "Fotograma clave escaso o variable (hueco más largo ~{{seconds}}s), probablemente un códec inteligente (H.264+/H.265+), esto no es recomendado.",
|
||||
"error": "El intervalo entre fotogramas clave (~{{seconds}} s) supera la duración del segmento de grabación ({{segmentTime}} s). Es posible que algunos segmentos no contengan ningún fotograma clave, lo que impedirá su reproducción. Desactiva el códec inteligente (+) de la cámara o reduce el intervalo entre fotogramas clave."
|
||||
}
|
||||
},
|
||||
"framesAndDetections": "Fotogramas / Detecciones",
|
||||
"label": {
|
||||
@@ -204,9 +219,9 @@
|
||||
},
|
||||
"connectionQuality": {
|
||||
"excellent": "Excelente",
|
||||
"poor": "Debil",
|
||||
"title": "Calidad de la conexión",
|
||||
"fps": "Cuadros por segundo",
|
||||
"poor": "Pobre",
|
||||
"title": "Calidad de Conexión",
|
||||
"fps": "CPS",
|
||||
"expectedFps": "Cuadros por segundo esperados",
|
||||
"reconnectsLastHour": "Reconexiones (última hora)",
|
||||
"unusable": "No usable",
|
||||
@@ -222,25 +237,25 @@
|
||||
"infPerSecond": "Inferencias Por Segundo",
|
||||
"embeddings": {
|
||||
"plate_recognition_speed": "Velocidad de Reconocimiento de Matrículas",
|
||||
"face_embedding_speed": "Velocidad de Incrustación de Rostros",
|
||||
"image_embedding_speed": "Velocidad de Incrustación de Imágenes",
|
||||
"text_embedding_speed": "Velocidad de Incrustación de Texto",
|
||||
"face_embedding_speed": "Velocidad de Empotrado Facial",
|
||||
"image_embedding_speed": "Velocidad de Empotrado de Imagen",
|
||||
"text_embedding_speed": "Velocidad de Empotrado de Texto",
|
||||
"face_recognition_speed": "Velocidad de Reconocimiento Facial",
|
||||
"text_embedding": "Incrustación de Texto",
|
||||
"text_embedding": "Empotrado de Texto",
|
||||
"face_recognition": "Reconocimiento Facial",
|
||||
"plate_recognition": "Reconocimiento de Matrículas",
|
||||
"yolov9_plate_detection": "Detección de Matrículas YOLOv9",
|
||||
"image_embedding": "Incrustación de Imágenes",
|
||||
"image_embedding": "Empotrado de Imagen",
|
||||
"yolov9_plate_detection_speed": "Velocidad de Detección de Matrículas YOLOv9",
|
||||
"review_description": "Revisión de descripción",
|
||||
"review_description_speed": "Velocidad de revisión de la descripción",
|
||||
"review_description_events_per_second": "Revisión de la descripción",
|
||||
"review_description_speed": "Revisión de velocidad de descripción",
|
||||
"review_description_events_per_second": "Revisión de Descripción",
|
||||
"object_description": "Descripción de Objeto",
|
||||
"object_description_speed": "Velocidad de descripción de objeto",
|
||||
"object_description_events_per_second": "Descripción de objeto",
|
||||
"object_description_speed": "Velocidad de Descripción de Objeto",
|
||||
"object_description_events_per_second": "Descripción de Objeto",
|
||||
"classification": "Clasificación de {{name}}",
|
||||
"classification_speed": "Velocidad de clasificación de {{name}}",
|
||||
"classification_events_per_second": "Clasificacion de eventos por segundo de {{name}}"
|
||||
"classification_speed": "Velocidad de Clasificación de {{name}}",
|
||||
"classification_events_per_second": "Clasificación de Eventos por Segundo de {{name}}"
|
||||
},
|
||||
"title": "Enriquecimientos",
|
||||
"averageInf": "Tiempo promedio de inferencia"
|
||||
@@ -249,7 +264,7 @@
|
||||
"ffmpegHighCpuUsage": "{{camera}} tiene un uso elevado de CPU por FFmpeg ({{ffmpegAvg}}%)",
|
||||
"detectHighCpuUsage": "{{camera}} tiene un uso elevado de CPU por detección ({{detectAvg}}%)",
|
||||
"healthy": "El sistema está saludable",
|
||||
"reindexingEmbeddings": "Reindexando incrustaciones ({{processed}}% completado)",
|
||||
"reindexingEmbeddings": "Reindexando empotrados ({{processed}}% completado)",
|
||||
"detectIsSlow": "{{detect}} es lento ({{speed}} ms)",
|
||||
"cameraIsOffline": "{{camera}} está desconectada",
|
||||
"detectIsVerySlow": "{{detect}} es muy lento ({{speed}} ms)",
|
||||
|
||||
@@ -189,7 +189,8 @@
|
||||
"id": "Bahasa Indonesia (Indonésien)",
|
||||
"ur": "اردو (Ourdou)",
|
||||
"hr": "Hrvatski (Croate)",
|
||||
"bs": "Bosanski (Bosnien)"
|
||||
"bs": "Bosanski (Bosnien)",
|
||||
"zhHant": "繁體中文 (chinois traditionnel)"
|
||||
},
|
||||
"appearance": "Apparence",
|
||||
"darkMode": {
|
||||
|
||||
@@ -26,7 +26,9 @@
|
||||
"points_many": "{{count}} points",
|
||||
"points_other": "{{count}} points",
|
||||
"undo": "Annuler le dernier point",
|
||||
"reset": "Réinitialiser le polygone"
|
||||
"reset": "Réinitialiser le polygone",
|
||||
"drawMode": "Dessiner",
|
||||
"moveMode": "Déplacer"
|
||||
},
|
||||
"motionHeatmapLabel": "Carte thermique des mouvements",
|
||||
"dialog": {
|
||||
@@ -36,6 +38,14 @@
|
||||
},
|
||||
"timeRange": {
|
||||
"title": "Plage de recherche",
|
||||
"start": "Plage de recherche"
|
||||
"start": "Début de la plage de recherche",
|
||||
"end": "Fin de la plage de recherche"
|
||||
},
|
||||
"settings": {
|
||||
"title": "Paramètres de recherche",
|
||||
"parallelMode": "Mode parallèle",
|
||||
"parallelModeDesc": "Scanner plusieurs plages d'enregistrement simultanément (plus rapide ; nécessite plus de ressources de décodage)",
|
||||
"threshold": "Seuil de sensitivité",
|
||||
"thresholdDesc": "Des valeurs basses détectent de plus petits changements (1-255)"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -112,7 +112,7 @@
|
||||
},
|
||||
"gpuTemperature": "Température du GPU",
|
||||
"npuTemperature": "Température du NPU",
|
||||
"gpuCompute": "Calcul / Encodage GPU"
|
||||
"gpuCompute": "Calcul GPU / Encodage"
|
||||
},
|
||||
"otherProcesses": {
|
||||
"title": "Autres processus",
|
||||
@@ -122,7 +122,7 @@
|
||||
"go2rtc": "go2rtc",
|
||||
"recording": "enregistrement",
|
||||
"review_segment": "Segment d'activité",
|
||||
"embeddings": "embeddings",
|
||||
"embeddings": "intégrations",
|
||||
"audio_detector": "détecteur audio"
|
||||
}
|
||||
}
|
||||
@@ -173,7 +173,22 @@
|
||||
"error": "Erreur : {{error}}",
|
||||
"codec": "Codec :",
|
||||
"video": "Vidéo :",
|
||||
"aspectRatio": "rapport d'aspect"
|
||||
"aspectRatio": "rapport d'aspect",
|
||||
"keyframes": {
|
||||
"title": "Analyse par image clef",
|
||||
"analyzing": "Analyse des images clefs... {{seconds}} secondes restantes",
|
||||
"stillAnalyzing": "Analyse des images clefs toujours en cours ...",
|
||||
"recordStream": "Flux d'enregistrement :",
|
||||
"keyframeCount": "Images clefs observées :",
|
||||
"observedDuration": "Durée observée :",
|
||||
"gap": "Écart en images clefs (min / moy / max) :",
|
||||
"segmentLength": "Durée du segment d'enregistrement :",
|
||||
"ok": "Images clefs chaque ~{{seconds}}s, convient à l'enregistrement et au visionnement.",
|
||||
"warning": "Images clefs fragmentées ou variables (plus grand écart d'environ {{seconds}}s), vraisemblablement un codec intelligent (H.264+/H.265+), non-recommendé.",
|
||||
"error": "L'écart en images clefs (~{{seconds}}) dépasse la longueur du segment d'enregistrement ({{segmentTime}}). Certains segments n'ont peut-être pas de clef, ce qui corrompt la lecture. Désactiver le codec intelligent/+ sur la caméra ou raccourcir son intervalle en images clefs.",
|
||||
"unknown": "Impossible de déterminer l'espacement en images clefs.",
|
||||
"recordDisabled": "L'enregistrement est désactivé pour cette caméra."
|
||||
}
|
||||
},
|
||||
"framesAndDetections": "Images / Détections",
|
||||
"label": {
|
||||
@@ -196,7 +211,7 @@
|
||||
"overview": "Vue d'ensemble",
|
||||
"toast": {
|
||||
"success": {
|
||||
"copyToClipboard": "Données de la sonde copiées dans le presse-papiers"
|
||||
"copyToClipboard": "Données de la sonde copiées dans le presse-papiers."
|
||||
},
|
||||
"error": {
|
||||
"unableToProbeCamera": "Impossible d'interroger la caméra : {{errorMessage}}"
|
||||
@@ -212,6 +227,9 @@
|
||||
"expectedFps": "IPS attendues",
|
||||
"reconnectsLastHour": "Reconnexions (dernière heure)",
|
||||
"stallsLastHour": "Baisses de qualité (dernière heure)"
|
||||
},
|
||||
"noCameras": {
|
||||
"title": "Aucune caméra trouvée"
|
||||
}
|
||||
},
|
||||
"lastRefreshed": "Dernier rafraichissement : ",
|
||||
|
||||
@@ -81,7 +81,8 @@
|
||||
"thisMonth": "החודש",
|
||||
"inProgress": "בתהליך",
|
||||
"invalidStartTime": "זמן התחלה לא תקין",
|
||||
"invalidEndTime": "זמן סיום לא תקין"
|
||||
"invalidEndTime": "זמן סיום לא תקין",
|
||||
"never": "אף פעם"
|
||||
},
|
||||
"unit": {
|
||||
"speed": {
|
||||
@@ -146,7 +147,8 @@
|
||||
"download": "הורדה",
|
||||
"info": "מידע",
|
||||
"next": "הבא",
|
||||
"continue": "המשך"
|
||||
"continue": "המשך",
|
||||
"add": "להוסיף"
|
||||
},
|
||||
"menu": {
|
||||
"system": "מערכת",
|
||||
|
||||
@@ -426,5 +426,12 @@
|
||||
"chink": "Csörömpölés",
|
||||
"shatter": "Összetörés",
|
||||
"field_recording": "Helyszíni felvétel",
|
||||
"noise": "Zaj"
|
||||
"noise": "Zaj",
|
||||
"liquid": "Folyadék",
|
||||
"splash": "Csobbanás",
|
||||
"slosh": "Löttyenés",
|
||||
"trickle": "Csörgedezés",
|
||||
"gush": "Folyás",
|
||||
"stir": "Kavarás",
|
||||
"thump": "Puffanás"
|
||||
}
|
||||
|
||||
@@ -14,5 +14,6 @@
|
||||
"attachment_chip_remove": "Melléklet eltávolítása",
|
||||
"open_in_explore": "Megnyitás Böngészőben",
|
||||
"attachment_picker_paste_label": "Vagy illeszd be az esemény ID-t",
|
||||
"attachment_picker_attach": "Melléklet"
|
||||
"attachment_picker_attach": "Melléklet",
|
||||
"arguments": "Argumentumok:"
|
||||
}
|
||||
|
||||
@@ -189,7 +189,11 @@
|
||||
"face_recognition": "Arcfelismerés",
|
||||
"plate_recognition": "Rendszám Felismerés",
|
||||
"yolov9_plate_detection_speed": "YOLOv9 Rendszám Felismerés Sebesség",
|
||||
"yolov9_plate_detection": "YOLOv9 Rendszám Észlelés"
|
||||
"yolov9_plate_detection": "YOLOv9 Rendszám Észlelés",
|
||||
"classification_events_per_second": "{{name}} Osztályozási események másodpercenként",
|
||||
"classification_speed": "{{name}} Osztályozási sebesség",
|
||||
"classification": "{{name}} Osztályozás",
|
||||
"object_description_events_per_second": "Objektum leírás"
|
||||
},
|
||||
"infPerSecond": "Inferencia Per Másodperc",
|
||||
"title": "Kiegészítések"
|
||||
|
||||
@@ -126,7 +126,8 @@
|
||||
"ur": "اردو (Urdu)",
|
||||
"withSystem": {
|
||||
"label": "Gunakan pengaturan sistem untuk bahasa"
|
||||
}
|
||||
},
|
||||
"zhHant": "繁體中文 (Tionghoa Tradisional)"
|
||||
},
|
||||
"appearance": "Tampilan",
|
||||
"darkMode": {
|
||||
|
||||
@@ -42,12 +42,49 @@
|
||||
"stream": "Siaran",
|
||||
"placeholder": "Pilih stream",
|
||||
"streamMethod": {
|
||||
"label": "Metode Streaming"
|
||||
"label": "Metode Streaming",
|
||||
"placeholder": "Pilih satu metode streaming",
|
||||
"method": {
|
||||
"noStreaming": {
|
||||
"label": "Tidak Streaming",
|
||||
"desc": "Gambar kamera hanya diperbarui sekali per menit dan tidak akan ada live streaming."
|
||||
},
|
||||
"smartStreaming": {
|
||||
"label": "Streaming cerdas (disarankan)",
|
||||
"desc": "Streaming cerdas akan memperbarui gambar kamera sekali per menit saat tidak ada aktivitas yang terdeteksi untuk menghemat bandwidth dan sumber daya. Ketika aktivitas terdeteksi, gambar akan otomatis beralih ke live stream."
|
||||
},
|
||||
"continuousStreaming": {
|
||||
"desc": {
|
||||
"title": "Kamera akan selalu live stream selama muncul di dashboard, meskipun tidak ada aktivitas yang terdeteksi.",
|
||||
"warning": "Streaming Terus Menerus dapat menyebabkan penggunaan bandwidth yang tinggi dan masalah performa. Gunakan dengan hati-hati."
|
||||
},
|
||||
"label": "Streaming Terus Menerus"
|
||||
}
|
||||
}
|
||||
},
|
||||
"compatibilityMode": {
|
||||
"label": "Mode Kompatibilitas",
|
||||
"desc": "Aktifkan opsi ini hanya jika live stream kamera Anda menampilkan artefak warna dan memiliki garis diagonal di sisi kanan gambar."
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"showAll": "Tampilkan semua grup kamera",
|
||||
"showLess": "Lebih sedikit",
|
||||
"editGroups": "Sunting Grup Kamera"
|
||||
},
|
||||
"debug": {
|
||||
"boundingBox": "Batas Kotak"
|
||||
"boundingBox": "Batas Kotak",
|
||||
"options": {
|
||||
"label": "Pengaturan",
|
||||
"title": "Opsi",
|
||||
"showOptions": "Lihat Opsi",
|
||||
"hideOptions": "Sembunyikan Opsi"
|
||||
},
|
||||
"zones": "Zona",
|
||||
"motion": "Gerakan",
|
||||
"regions": "Wilayah",
|
||||
"timestamp": "Timestamp",
|
||||
"mask": "Masker",
|
||||
"paths": "Path"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -52,12 +52,73 @@
|
||||
"export": "Ekspor",
|
||||
"selectOrExport": "Pilih atau Ekspor",
|
||||
"toast": {
|
||||
"success": "Berhasil memulai ekspor. Lihat file pada halaman ekspor."
|
||||
}
|
||||
"success": "Berhasil memulai ekspor. Lihat file pada halaman ekspor.",
|
||||
"queued": "Ekspor diantrekan. Lihat progres di halaman ekspor.",
|
||||
"view": "Melihat",
|
||||
"batchSuccess_other": "{{count}} Ekspor dimulai. Membuka kasusnya sekarang.",
|
||||
"batchPartial": "Ekspor berhasil dimulai sebanyak {{successful}} dari total {{total}} ekspor. Kamera yang gagal: {{failedCameras}}",
|
||||
"batchFailed": "Gagal memulai ekspor sebanyak {{total}}. Kamera yang gagal: {{failedCameras}}"
|
||||
},
|
||||
"case": {
|
||||
"newCaseOption": "Membuat Kasus Baru",
|
||||
"newCaseNamePlaceholder": "Nama Kasus Baru",
|
||||
"newCaseDescriptionPlaceholder": "Deskripsi Kasus",
|
||||
"label": "Kasus",
|
||||
"nonAdminHelp": "Kasus Baru akan Dibuat untuk Ekspor ini.",
|
||||
"placeholder": "Pilih Kasus"
|
||||
},
|
||||
"tabs": {
|
||||
"export": "Kamera Tunggal",
|
||||
"multiCamera": "Multi Kamera"
|
||||
},
|
||||
"multiCamera": {
|
||||
"timeRange": "Rentang Waktu",
|
||||
"selectFromTimeline": "Pilih dari Timeline",
|
||||
"cameraSelection": "Kamera",
|
||||
"checkingActivity": "Memeriksa Aktivitas Kamera...",
|
||||
"noCameras": "Tidak ada Kamera Tersedia",
|
||||
"detectionCount_other": "{{count}} Objek terlacak",
|
||||
"nameLabel": "Nama Ekspor",
|
||||
"exportButton_other": "Ekspor {{count}} kamera",
|
||||
"cameraSelectionHelp": "Kamera dengan objek yang dilacak dalam rentang waktu ini telah dipilih sebelumnya",
|
||||
"queueingButton": "Mengantrekan ekspor...",
|
||||
"clearSelection": "Hapus pilihan",
|
||||
"selectWithActivity": "Kamera dengan objek yang dilacak",
|
||||
"selectGroup": "Pilih grup",
|
||||
"noMatchingCameras": "Tidak ada kamera yang sesuai dengan pencarian Anda",
|
||||
"selectedCount": "{{terpilih}} / {{total}} terpilih",
|
||||
"namePlaceholder": "Nama dasar opsional untuk ekspor ini"
|
||||
},
|
||||
"multi": {
|
||||
"title_other": "Ekspor {{count}} Ulasan",
|
||||
"toast": {
|
||||
"startedNoCase_other": "{{count}} Ekspor Dimulai.",
|
||||
"started_other": "{{count}} ekspor dimulai. Membuka kasusnya sekarang.",
|
||||
"partial": "Memulai {{successful}} dari {{total}} ekspor. Gagal: {{failedItems}}",
|
||||
"failed": "Gagal memulai {{total}} ekspor. Gagal: {{failedItems}}"
|
||||
},
|
||||
"description": "Ekspor setiap ulasan yang dipilih. Semua Ekspor akan dikelompokkan dalam satu kasus.",
|
||||
"descriptionNoCase": "Ekspor setiap ulasan yang dipilih.",
|
||||
"exportButton_other": "Ekspor {{count}} ulasan",
|
||||
"exportingButton": "Mengekspor...",
|
||||
"caseNamePlaceholder": "Ekspor tinjauan - {{tanggal}}"
|
||||
},
|
||||
"queueing": "Mengantrekan Ekspor..."
|
||||
},
|
||||
"search": {
|
||||
"saveSearch": {
|
||||
"overwrite": "{{searchName}} sudah ada. Menyimpan akan menimpa file yang sudah ada."
|
||||
}
|
||||
},
|
||||
"streaming": {
|
||||
"restreaming": {
|
||||
"disabled": "Fitur restreaming tidak diaktifkan untuk kamera ini.",
|
||||
"desc": {
|
||||
"title": "Instal go2rtc untuk opsi tampilan langsung dan audio tambahan untuk kamera ini."
|
||||
}
|
||||
},
|
||||
"showStats": {
|
||||
"label": "Tampilkan statistik streaming"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -132,53 +132,111 @@
|
||||
}
|
||||
},
|
||||
"mqtt": {
|
||||
"label": "MQTT"
|
||||
"label": "MQTT",
|
||||
"description": "Impostazioni di pubblicazione delle immagini via MQTT.",
|
||||
"enabled": {
|
||||
"label": "Invia immagine",
|
||||
"description": "Abilita la pubblicazione delle istantanee dell'immagine per gli oggetti sui topic MQTT per questa telecamera."
|
||||
},
|
||||
"timestamp": {
|
||||
"label": "Aggiungi timestamp",
|
||||
"description": "Sovraimprime un timestamp sulle immagini pubblicate su MQTT."
|
||||
},
|
||||
"bounding_box": {
|
||||
"label": "Aggiungi riquadro di delimitazione",
|
||||
"description": "Disegna i riquadri di delimitazione sulle immagini pubblicate tramite MQTT."
|
||||
},
|
||||
"crop": {
|
||||
"label": "Ritaglia immagine",
|
||||
"description": "Ritaglia le immagini pubblicate su MQTT in base al riquadro di delimitazione dell'oggetto rilevato."
|
||||
},
|
||||
"height": {
|
||||
"label": "Altezza immagine",
|
||||
"description": "Altezza (in pixel) a cui ridimensionare le immagini pubblicate tramite MQTT."
|
||||
},
|
||||
"required_zones": {
|
||||
"label": "Zone richieste",
|
||||
"description": "Zone in cui un oggetto deve entrare affinché venga pubblicata un'immagine MQTT."
|
||||
},
|
||||
"quality": {
|
||||
"label": "Qualità JPEG",
|
||||
"description": "Qualità JPEG per le immagini pubblicate su MQTT (0-100)."
|
||||
}
|
||||
},
|
||||
"onvif": {
|
||||
"tls_insecure": {
|
||||
"label": "Disabilita verifica TLS"
|
||||
"label": "Disabilita verifica TLS",
|
||||
"description": "Salta la verifica TLS e disabilita l'autenticazione digest per ONVIF (non sicuro; utilizzare solo in reti sicure)."
|
||||
},
|
||||
"profile": {
|
||||
"label": "Profilo ONVIF"
|
||||
"label": "Profilo ONVIF",
|
||||
"description": "Profilo multimediale ONVIF specifico da utilizzare per il controllo PTZ, identificato tramite token o nome. Se non impostato, viene selezionato automaticamente il primo profilo con una configurazione PTZ valida."
|
||||
},
|
||||
"autotracking": {
|
||||
"label": "Tracciamento automatico",
|
||||
"enabled": {
|
||||
"label": "Abilita il tracciamento automatico"
|
||||
"label": "Abilita il tracciamento automatico",
|
||||
"description": "Abilita o disabilita il tracciamento automatico della telecamera PTZ per gli oggetti rilevati."
|
||||
},
|
||||
"calibrate_on_startup": {
|
||||
"label": "Calibra all'avvio"
|
||||
"label": "Calibra all'avvio",
|
||||
"description": "Misura la velocità dei motori PTZ all'avvio per migliorare la precisione del tracciamento. Frigate aggiornerà la configurazione con i valori di movement_weights dopo la calibrazione."
|
||||
},
|
||||
"zooming": {
|
||||
"label": "Modalità ingrandimento"
|
||||
"label": "Modalità ingrandimento",
|
||||
"description": "Controlla il comportamento dello zoom: disabled (solo pan/tilt), absolute (più compatibile) o relative (pan/tilt/zoom simultanei)."
|
||||
},
|
||||
"zoom_factor": {
|
||||
"label": "Fattore di ingrandimento"
|
||||
"label": "Fattore di ingrandimento",
|
||||
"description": "Controlla il livello di zoom sugli oggetti tracciati. Valori più bassi mantengono una porzione maggiore della scena visibile; valori più alti aumentano lo zoom ma potrebbero far perdere il tracciamento. Valori compresi tra 0.1 e 0.75."
|
||||
},
|
||||
"track": {
|
||||
"label": "Oggetti tracciati",
|
||||
"description": "Elenco dei tipi di oggetto che dovrebbero attivare il tracciamento automatico."
|
||||
},
|
||||
"required_zones": {
|
||||
"label": "Zone richieste"
|
||||
"label": "Zone richieste",
|
||||
"description": "Gli oggetti devono entrare in una di queste zone prima che inizi il tracciamento automatico."
|
||||
},
|
||||
"timeout": {
|
||||
"label": "Scadenza di ritorno",
|
||||
"description": "Attendi questo numero di secondi dopo aver perso il tracciamento prima di riportare la telecamera nella posizione preimpostata."
|
||||
},
|
||||
"movement_weights": {
|
||||
"description": "Valori di calibrazione generati automaticamente dalla calibrazione della telecamera. Non modificare manualmente."
|
||||
"description": "Valori di calibrazione generati automaticamente dalla calibrazione della telecamera. Non modificare manualmente.",
|
||||
"label": "Pesi del movimento"
|
||||
},
|
||||
"enabled_in_config": {
|
||||
"label": "Stato originale del tracciamento automatico"
|
||||
"label": "Stato originale del tracciamento automatico",
|
||||
"description": "Campo interno per tracciare se il tracciamento automatico era abilitato nella configurazione."
|
||||
},
|
||||
"description": "Traccia automaticamente gli oggetti in movimento e li mantiene centrati nell'inquadratura utilizzando i movimenti della telecamera PTZ.",
|
||||
"return_preset": {
|
||||
"label": "Preset di ritorno",
|
||||
"description": "Nome del preset ONVIF configurato nel firmware della telecamera a cui ritornare al termine del tracciamento."
|
||||
}
|
||||
},
|
||||
"ignore_time_mismatch": {
|
||||
"label": "Ignora la discrepanza oraria"
|
||||
"label": "Ignora la discrepanza oraria",
|
||||
"description": "Ignora le differenze di sincronizzazione oraria tra la telecamera e il server Frigate per la comunicazione ONVIF."
|
||||
},
|
||||
"label": "ONVIF",
|
||||
"port": {
|
||||
"label": "Porta ONVIF"
|
||||
"label": "Porta ONVIF",
|
||||
"description": "Numero di porta per il servizio ONVIF."
|
||||
},
|
||||
"description": "Impostazioni della connessione ONVIF e del tracciamento automatico PTZ per questa telecamera.",
|
||||
"host": {
|
||||
"label": "Host ONVIF",
|
||||
"description": "Host (e schema opzionale) per il servizio ONVIF di questa telecamera."
|
||||
},
|
||||
"user": {
|
||||
"label": "Nome utente ONVIF",
|
||||
"description": "Nome utente per l'autenticazione ONVIF; alcuni dispositivi richiedono un utente amministratore per l'ONVIF."
|
||||
},
|
||||
"password": {
|
||||
"label": "Password ONVIF",
|
||||
"description": "Password per l'autenticazione ONVIF."
|
||||
}
|
||||
},
|
||||
"detect": {
|
||||
@@ -363,20 +421,20 @@
|
||||
"description": "Numero massimo di processi di esportazione da elaborare contemporaneamente."
|
||||
}
|
||||
},
|
||||
"description": "Impostazioni di registrazione e conservazione per questa videocamera.",
|
||||
"description": "Impostazioni di registrazione e conservazione per questa telecamera.",
|
||||
"enabled": {
|
||||
"label": "Abilita Registrazione",
|
||||
"label": "Abilita registrazione",
|
||||
"description": "Attiva o disattiva la registrazione per questa telecamera."
|
||||
},
|
||||
"expire_interval": {
|
||||
"label": "Intervallo pulizia registrazioni",
|
||||
"label": "Intervallo di pulizia registrazioni",
|
||||
"description": "Minuti tra i cicli di pulizia che rimuovono i segmenti di registrazione scaduti."
|
||||
},
|
||||
"continuous": {
|
||||
"label": "Conservazione continua",
|
||||
"description": "Numero di giorni per cui conservare le registrazioni, indipendentemente dagli oggetti tracciati o dal movimento. Impostare su 0 se si desidera conservare solo le registrazioni relative agli avvisi e ai rilevamenti.",
|
||||
"days": {
|
||||
"label": "Giorni di Conservazione",
|
||||
"label": "Giorni di conservazione",
|
||||
"description": "Numero di giorni di conservazione delle registrazioni."
|
||||
}
|
||||
},
|
||||
@@ -384,7 +442,7 @@
|
||||
"label": "Conservazione movimento",
|
||||
"description": "Numero di giorni per cui conservare le registrazioni attivate dal movimento, indipendentemente dagli oggetti tracciati. Impostare su 0 se si desidera conservare solo le registrazioni relative ad allarmi e rilevamenti.",
|
||||
"days": {
|
||||
"label": "Giorni di Conservazione",
|
||||
"label": "Giorni di conservazione",
|
||||
"description": "Numero di giorni di conservazione delle registrazioni."
|
||||
}
|
||||
},
|
||||
@@ -392,12 +450,12 @@
|
||||
"label": "Conservazione rilevamento",
|
||||
"description": "Impostazioni relative alla conservazione delle registrazioni per gli eventi di rilevamento, comprese le durate prima e dopo l'acquisizione.",
|
||||
"pre_capture": {
|
||||
"label": "Secondi di pre-acquisizione",
|
||||
"description": "Numero di secondi precedenti l'evento di rilevamento da includere nella registrazione."
|
||||
"label": "Secondi prima della cattura",
|
||||
"description": "Numero di secondi precedenti all'evento di rilevamento da includere nella registrazione."
|
||||
},
|
||||
"post_capture": {
|
||||
"label": "Secondi di post-acquisizione",
|
||||
"description": "Numero di secondi successivi l'evento di rilevamento da includere nella registrazione."
|
||||
"label": "Secondi dopo la cattura",
|
||||
"description": "Numero di secondi successivi all'evento di rilevamento da includere nella registrazione."
|
||||
},
|
||||
"retain": {
|
||||
"label": "Conservazione eventi",
|
||||
@@ -414,13 +472,13 @@
|
||||
},
|
||||
"alerts": {
|
||||
"label": "Conservazione avvisi",
|
||||
"description": "Impostazioni di conservazione delle registrazioni per gli eventi di avviso, incluse le durate di pre e post-acquisizione.",
|
||||
"description": "Impostazioni di conservazione delle registrazioni per gli eventi di avviso, incluse le durate prima e dopo la cattura.",
|
||||
"pre_capture": {
|
||||
"label": "Secondi di pre-acquisizione",
|
||||
"description": "Numero di secondi antecedenti all'evento di rilevamento da includere nella registrazione."
|
||||
"label": "Secondi prima della cattura",
|
||||
"description": "Numero di secondi precedenti all'evento di rilevamento da includere nella registrazione."
|
||||
},
|
||||
"post_capture": {
|
||||
"label": "Secondi di post-acquisizione",
|
||||
"label": "Secondi dopo la cattura",
|
||||
"description": "Numero di secondi successivi all'evento di rilevamento da includere nella registrazione."
|
||||
},
|
||||
"retain": {
|
||||
@@ -461,7 +519,40 @@
|
||||
"description": "Sovraimprime un timestamp sulle istantanee provenienti dalle API."
|
||||
},
|
||||
"bounding_box": {
|
||||
"label": "Sovrimpressione riquadro di delimitazione"
|
||||
"label": "Sovrimpressione riquadro di delimitazione",
|
||||
"description": "Disegna i riquadri di delimitazione per gli oggetti tracciati sulle istantanee provenienti dalle API."
|
||||
},
|
||||
"crop": {
|
||||
"label": "Ritaglia istantanea",
|
||||
"description": "Ritaglia le istantanee provenienti dalle API in base al riquadro di delimitazione dell'oggetto rilevato."
|
||||
},
|
||||
"required_zones": {
|
||||
"label": "Zone richieste",
|
||||
"description": "Zone in cui un oggetto deve entrare affinché venga salvata un'istantanea."
|
||||
},
|
||||
"height": {
|
||||
"label": "Altezza istantanea",
|
||||
"description": "Altezza (in pixel) a cui ridimensionare le istantanee provenienti dalle API; lascia vuoto per mantenere la dimensione originale."
|
||||
},
|
||||
"retain": {
|
||||
"label": "Conservazione istantanee",
|
||||
"description": "Impostazioni di conservazione per le istantanee, inclusi i giorni predefiniti e le eccezioni per singolo oggetto.",
|
||||
"default": {
|
||||
"label": "Conservazione predefinita",
|
||||
"description": "Numero predefinito di giorni per cui conservare le istantanee."
|
||||
},
|
||||
"mode": {
|
||||
"label": "Modalità di conservazione",
|
||||
"description": "Modalità di conservazione: tutti (salva tutti i segmenti), movimento (salva i segmenti con movimento) o oggetti_attivi (salva i segmenti con oggetti attivi)."
|
||||
},
|
||||
"objects": {
|
||||
"label": "Conservazione oggetti",
|
||||
"description": "Eccezioni per singolo oggetto relativi ai giorni di conservazione delle istantanee."
|
||||
}
|
||||
},
|
||||
"quality": {
|
||||
"label": "Qualità istantanee",
|
||||
"description": "Qualità di codifica per le istantanee salvate (0-100)."
|
||||
}
|
||||
},
|
||||
"motion": {
|
||||
@@ -492,10 +583,12 @@
|
||||
"description": "Se impostato su un valore compreso tra 0.0 e 110, e se in un singolo fotogramma cambia una porzione dell'immagine superiore a tale frazione, il rilevatore non restituirà alcun riquadro di movimento e si ricalibrerà immediatamente. Ciò consente di risparmiare risorse della CPU e ridurre i falsi positivi in caso di fulmini, temporali, ecc., ma potrebbe comportare la mancata rilevazione di eventi reali, come ad esempio il tracciamento automatico di un oggetto da parte di una telecamera PTZ. Il compromesso consiste nel scegliere se sacrificare alcuni megabyte di registrazioni o rivedere un paio di brevi video. Lasciare non impostato (Nessuno) per disabilitare questa funzione."
|
||||
},
|
||||
"delta_alpha": {
|
||||
"description": "Fattore di fusione alfa utilizzato nel calcolo della differenza tra fotogrammi per il calcolo del movimento."
|
||||
"description": "Fattore di fusione alfa utilizzato nel calcolo della differenza tra fotogrammi per il calcolo del movimento.",
|
||||
"label": "Delta alfa"
|
||||
},
|
||||
"frame_alpha": {
|
||||
"description": "Valore alfa utilizzato durante la fusione dei fotogrammi per la preelaborazione del movimento."
|
||||
"description": "Valore alfa utilizzato durante la fusione dei fotogrammi per la preelaborazione del movimento.",
|
||||
"label": "Frame alfa"
|
||||
},
|
||||
"frame_height": {
|
||||
"label": "Altezza del frame",
|
||||
@@ -510,7 +603,8 @@
|
||||
"description": "Secondi di attesa dopo l'ultimo movimento prima di pubblicare uno stato 'off' MQTT."
|
||||
},
|
||||
"enabled_in_config": {
|
||||
"description": "Indica se il rilevamento del movimento era abilitato nella configurazione statica originale."
|
||||
"description": "Indica se il rilevamento del movimento era abilitato nella configurazione statica originale.",
|
||||
"label": "Stato movimento originale"
|
||||
},
|
||||
"raw_mask": {
|
||||
"label": "Maschera grezza"
|
||||
@@ -548,11 +642,11 @@
|
||||
},
|
||||
"min_score": {
|
||||
"label": "Confidenza minima",
|
||||
"description": "Livello minimo di confidenza del rilevamento per singolo fotogramma richiesto affinché l'oggetto venga conteggiato."
|
||||
"description": "Livello minimo di confidenza nel rilevamento in un singolo fotogramma richiesto affinché l'oggetto venga conteggiato."
|
||||
},
|
||||
"mask": {
|
||||
"label": "Maschera filtro",
|
||||
"description": "Coordinate del poligono che definisce l'area all'interno dell'inquadratura in cui si applica questo filtro."
|
||||
"description": "Coordinate del poligono che definiscono la posizione di applicazione di questo filtro all'interno dell'inquadratura."
|
||||
},
|
||||
"raw_mask": {
|
||||
"label": "Maschera grezza"
|
||||
@@ -560,40 +654,42 @@
|
||||
},
|
||||
"mask": {
|
||||
"label": "Maschera oggetto",
|
||||
"description": "Poligono di maschera utilizzato per impedire il rilevamento di oggetti in aree specificate."
|
||||
"description": "Poligono di mascheramento utilizzato per impedire il rilevamento di oggetti in aree specifiche."
|
||||
},
|
||||
"genai": {
|
||||
"label": "Configurazione degli oggetti GenAI",
|
||||
"description": "Opzioni GenAI per la descrizione degli oggetti tracciati e l'invio dei fotogrammi per la generazione.",
|
||||
"enabled": {
|
||||
"label": "Abilita GenAI",
|
||||
"description": "Abilita di default la generazione tramite GenAI delle descrizioni degli oggetti monitorati."
|
||||
"description": "Abilita in modo predefinito la generazione di descrizioni da parte di GenAI per gli oggetti tracciati."
|
||||
},
|
||||
"use_snapshot": {
|
||||
"label": "Usa istantanee",
|
||||
"label": "Utilizza istantanee",
|
||||
"description": "Utilizza le istantanee degli oggetti anziché le miniature per la generazione di descrizioni con GenAI."
|
||||
},
|
||||
"prompt": {
|
||||
"description": "Modello di prompt predefinito utilizzato per la generazione di descrizioni con GenAI."
|
||||
"description": "Modello di richiesta predefinito utilizzato per la generazione di descrizioni con GenAI.",
|
||||
"label": "Richiesta di didascalia"
|
||||
},
|
||||
"object_prompts": {
|
||||
"description": "Prompt specifici per ogni oggetto per personalizzare i risultati di GenAI in base a etichette specifiche."
|
||||
"description": "Richieste specifiche per ogni oggetto per personalizzare i risultati di GenAI in base a etichette specifiche.",
|
||||
"label": "Richiesta di oggetto"
|
||||
},
|
||||
"objects": {
|
||||
"label": "Oggetti GenAI",
|
||||
"description": "Elenco delle etichette degli oggetti da inviare a GenAI per impostazione predefinita."
|
||||
"description": "Elenco di etichette degli oggetti da inviare a GenAI per impostazione predefinita."
|
||||
},
|
||||
"required_zones": {
|
||||
"label": "Zone obbligatorie",
|
||||
"description": "Zone che devono essere inserite affinché gli oggetti possano essere utilizzati per la generazione di descrizioni tramite GenAI."
|
||||
"label": "Zone richieste",
|
||||
"description": "Zone che devono essere inserite affinché gli oggetti siano idonei alla generazione della descrizione GenAI."
|
||||
},
|
||||
"debug_save_thumbnails": {
|
||||
"label": "Salva miniature",
|
||||
"description": "Salva le miniature inviate a GenAI per il debug e la revisione."
|
||||
"description": "Salva le miniature inviate a GenAI per la correzione e la revisione."
|
||||
},
|
||||
"send_triggers": {
|
||||
"label": "Attivatori GenAI",
|
||||
"description": "Definisce quando i frame devono essere inviati a GenAI (al termine, dopo gli aggiornamenti, ecc.).",
|
||||
"label": "Attivazioni GenAI",
|
||||
"description": "Definisce quando i fotogrammi devono essere inviati a GenAI (alla fine, dopo gli aggiornamenti, ecc.).",
|
||||
"tracked_object_end": {
|
||||
"label": "Invia alla fine",
|
||||
"description": "Invia una richiesta a GenAI quando l'oggetto tracciato termina."
|
||||
@@ -629,25 +725,60 @@
|
||||
}
|
||||
},
|
||||
"timestamp_style": {
|
||||
"label": "Stile orario"
|
||||
"label": "Stile orario",
|
||||
"description": "Opzioni di stile per i timestamp applicati alle istantanee e alla vista di Debug.",
|
||||
"position": {
|
||||
"label": "Posizione timestamp",
|
||||
"description": "Posizione del timestamp sull'immagine (tl/tr/bl/br)."
|
||||
},
|
||||
"format": {
|
||||
"label": "Formato timestamp",
|
||||
"description": "Stringa di formato data/ora utilizzata per i timestamp (codici di formato datetime di Python)."
|
||||
},
|
||||
"color": {
|
||||
"label": "Colore timestamp",
|
||||
"description": "Valori di colore RGB per il testo del timestamp (tutti i valori da 0 a 255).",
|
||||
"red": {
|
||||
"label": "Rosso",
|
||||
"description": "Componente rosso (0-255) per il colore del timestamp."
|
||||
},
|
||||
"green": {
|
||||
"label": "Verde",
|
||||
"description": "Componente verde (0-255) per il colore del timestamp."
|
||||
},
|
||||
"blue": {
|
||||
"label": "Blu",
|
||||
"description": "Componente blu (0-255) per il colore del timestamp."
|
||||
}
|
||||
},
|
||||
"thickness": {
|
||||
"label": "Spessore timestamp",
|
||||
"description": "Spessore della linea del testo del timestamp."
|
||||
},
|
||||
"effect": {
|
||||
"label": "Effetto timestamp",
|
||||
"description": "Effetto visivo per il testo del timestamp (none, solid, shadow)."
|
||||
}
|
||||
},
|
||||
"notifications": {
|
||||
"label": "Notifiche",
|
||||
"enabled": {
|
||||
"label": "Abilita le notifiche"
|
||||
"label": "Abilita le notifiche",
|
||||
"description": "Abilita o disabilita le notifiche per questa telecamera."
|
||||
},
|
||||
"email": {
|
||||
"label": "Email di notifica",
|
||||
"description": "Indirizzo email utilizzato per le notifiche push o richiesto da alcuni fornitori di servizi di notifica."
|
||||
},
|
||||
"cooldown": {
|
||||
"label": "Periodo di raffreddamento",
|
||||
"label": "Tempo di attesa tra notifiche",
|
||||
"description": "Tempo di attesa (in secondi) tra le notifiche per evitare di inviare spam ai destinatari."
|
||||
},
|
||||
"enabled_in_config": {
|
||||
"label": "Stato delle notifiche originali",
|
||||
"description": "Indica se le notifiche erano abilitate nella configurazione statica originale."
|
||||
}
|
||||
},
|
||||
"description": "Impostazioni per abilitare e controllare le notifiche per questa telecamera."
|
||||
},
|
||||
"birdseye": {
|
||||
"label": "Birdseye",
|
||||
@@ -671,7 +802,7 @@
|
||||
"label": "Attivatori",
|
||||
"friendly_name": {
|
||||
"label": "Nome descrittivo",
|
||||
"description": "Nome descrittivo opzionale visualizzato nell'interfaccia utente per questo innesco."
|
||||
"description": "Nome descrittivo opzionale visualizzato nell'interfaccia utente per questo attivatore."
|
||||
},
|
||||
"description": "Azioni e criteri di corrispondenza per gli attivatori della ricerca semantica specifici della telecamera.",
|
||||
"enabled": {
|
||||
@@ -720,17 +851,23 @@
|
||||
"ui": {
|
||||
"description": "Visualizza l'ordine e la visibilità di questa telecamera nell'interfaccia utente. L'ordine influisce sul cruscotto predefinito. Per un controllo più granulare, utilizza i gruppi di telecamere.",
|
||||
"order": {
|
||||
"description": "L'ordine numerico viene utilizzato per ordinare le telecamere nell'interfaccia utente (cruscotto ed elenchi predefiniti); i numeri più grandi compaiono successivamente."
|
||||
"description": "L'ordine numerico viene utilizzato per ordinare le telecamere nell'interfaccia utente (cruscotto ed elenchi predefiniti); i numeri più grandi compaiono successivamente.",
|
||||
"label": "Ordine interfaccia utente"
|
||||
},
|
||||
"dashboard": {
|
||||
"label": "Mostra nell'interfaccia utente",
|
||||
"description": "Abilita o disabilita la visualizzazione di questa telecamera in ogni punto dell'interfaccia utente di Frigate. Disabilitando questa opzione, sarà necessario modificare manualmente la configurazione per visualizzare nuovamente la telecamera nell'interfaccia utente."
|
||||
},
|
||||
"label": "Interfaccia utente telecamera"
|
||||
"label": "Interfaccia utente telecamera",
|
||||
"review": {
|
||||
"label": "Mostra in revisione",
|
||||
"description": "Abilita o disabilita la visibilità di questa telecamera nella sezione di revisione (la pagina di revisione e il relativo filtro telecamera, la revisione del movimento e la vista della cronologia)."
|
||||
}
|
||||
},
|
||||
"zones": {
|
||||
"enabled": {
|
||||
"label": "Abilitata"
|
||||
"label": "Abilitata",
|
||||
"description": "Abilita o disabilita questa zona. Le zone disabilitate vengono ignorate durante l'esecuzione."
|
||||
},
|
||||
"label": "Zone",
|
||||
"friendly_name": {
|
||||
@@ -740,11 +877,81 @@
|
||||
"filters": {
|
||||
"raw_mask": {
|
||||
"label": "Maschera grezza"
|
||||
},
|
||||
"label": "Filtri Zona",
|
||||
"description": "Filtri da applicare agli oggetti all'interno di questa zona. Utilizzati per ridurre i falsi positivi o limitare quali oggetti sono considerati presenti nella zona.",
|
||||
"min_area": {
|
||||
"label": "Area minima oggetto",
|
||||
"description": "Area minima del riquadro di delimitazione (in pixel o percentuale) richiesta per questo tipo di oggetto. Può essere in pixel (int) o in percentuale (float compreso tra 0.000001 e 0.99)."
|
||||
},
|
||||
"max_area": {
|
||||
"label": "Area massima oggetto",
|
||||
"description": "Area massima del riquadro di delimitazione (in pixel o percentuale) richiesta per questo tipo di oggetto. Può essere espressa in pixel (numero intero) o in percentuale (valore decimale compreso tra 0.000001 e 0.99)."
|
||||
},
|
||||
"min_ratio": {
|
||||
"label": "Rapporto di aspetto minimo",
|
||||
"description": "Rapporto minimo tra larghezza e altezza richiesto affinché il riquadro di delimitazione sia valido."
|
||||
},
|
||||
"max_ratio": {
|
||||
"label": "Rapporto di aspetto massimo",
|
||||
"description": "Rapporto massimo tra larghezza e altezza richiesto affinché il riquadro di delimitazione sia valido."
|
||||
},
|
||||
"threshold": {
|
||||
"label": "Soglia di confidenza",
|
||||
"description": "Soglia di confidenza media di rilevamento necessaria affinché l'oggetto sia considerato un vero positivo."
|
||||
},
|
||||
"min_score": {
|
||||
"label": "Confidenza minima",
|
||||
"description": "Livello minimo di confidenza nel rilevamento in un singolo fotogramma richiesto affinché l'oggetto venga conteggiato."
|
||||
},
|
||||
"mask": {
|
||||
"label": "Maschera filtro",
|
||||
"description": "Coordinate del poligono che definiscono la posizione di applicazione di questo filtro all'interno dell'inquadratura."
|
||||
}
|
||||
},
|
||||
"description": "Le zone consentono di definire un'area specifica dell'inquadratura per determinare se un oggetto si trova o meno all'interno di una particolare area.",
|
||||
"enabled_in_config": {
|
||||
"label": "Mantieni traccia dello stato originale della zona."
|
||||
},
|
||||
"coordinates": {
|
||||
"label": "Coordinate",
|
||||
"description": "Coordinate del poligono che definiscono l'area della zona. Può essere una stringa separata da virgole o un elenco di stringhe di coordinate. Le coordinate devono essere relative (0-1) o assolute (legacy)."
|
||||
},
|
||||
"distances": {
|
||||
"label": "Distanze reali",
|
||||
"description": "Distanze reali opzionali per ciascun lato del quadrilatero della zona, utilizzate per i calcoli di velocità o distanza. Deve avere esattamente 4 valori se impostato."
|
||||
},
|
||||
"inertia": {
|
||||
"label": "Fotogrammi di inerzia",
|
||||
"description": "Numero di fotogrammi consecutivi in cui un oggetto deve essere rilevato nella zona prima di essere considerato presente. Aiuta a filtrare i rilevamenti transitori."
|
||||
},
|
||||
"loitering_time": {
|
||||
"label": "Secondi di stazionamento",
|
||||
"description": "Numero di secondi per cui un oggetto deve rimanere nella zona per essere considerato in stazionamento nella stessa. Imposta a 0 per disabilitare il rilevamento dello stazionamento."
|
||||
},
|
||||
"speed_threshold": {
|
||||
"label": "Velocità minima",
|
||||
"description": "Velocità minima (in unità reali se le distanze sono impostate) richiesta affinché un oggetto sia considerato presente nella zona. Utilizzata per gli attivatori di zona basati sulla velocità."
|
||||
},
|
||||
"objects": {
|
||||
"label": "Oggetti attivatori",
|
||||
"description": "Elenco dei tipi di oggetto (dalla labelmap) che possono attivare questa zona. Può essere una stringa o un elenco di stringhe. Se vuoto, vengono considerati tutti gli oggetti."
|
||||
}
|
||||
},
|
||||
"type": {
|
||||
"description": "Tipo di telecamera",
|
||||
"label": "Tipo di telecamera"
|
||||
},
|
||||
"best_image_timeout": {
|
||||
"label": "Timeout immagine migliore",
|
||||
"description": "Quanto tempo attendere per l'immagine con il punteggio di accuratezza più alto."
|
||||
},
|
||||
"webui_url": {
|
||||
"label": "URL telecamera",
|
||||
"description": "URL per visitare direttamente la telecamera dalla pagina di sistema"
|
||||
},
|
||||
"enabled_in_config": {
|
||||
"label": "Stato telecamera originale",
|
||||
"description": "Mantiene traccia dello stato originale della telecamera."
|
||||
}
|
||||
}
|
||||
|
||||
@@ -99,6 +99,10 @@
|
||||
"hash_iterations": {
|
||||
"description": "Numero di iterazioni PBKDF2-SHA256 da utilizzare per criptare le password utente.",
|
||||
"label": "Iterazioni di crittografia"
|
||||
},
|
||||
"admin_first_time_login": {
|
||||
"label": "Flag primo accesso amministratore",
|
||||
"description": "Quando impostato su true, l'interfaccia utente può mostrare un link di aiuto nella pagina di login per informare gli utenti su come accedere dopo un ripristino della password di amministratore. "
|
||||
}
|
||||
},
|
||||
"ffmpeg": {
|
||||
@@ -175,11 +179,17 @@
|
||||
"label": "Numero di processi di rilevamento",
|
||||
"description": "Il numero di processi utilizzati per l'inferenza basata sulla CPU."
|
||||
},
|
||||
"description": "Rilevatore CPU TFLite che esegue modelli TensorFlow Lite sulla CPU di sistema senza accelerazione hardware. Sconsigliato."
|
||||
"description": "Rilevatore CPU TFLite che esegue modelli TensorFlow Lite sulla CPU di sistema senza accelerazione hardware. Sconsigliato.",
|
||||
"label": "CPU"
|
||||
},
|
||||
"label": "Dispositivo di rilevamento",
|
||||
"hailo8l": {
|
||||
"description": "Rilevatore Hailo-8/Hailo-8L che utilizza modelli HEF e l'SDK HailoRT per l'inferenza sul dispositivo Hailo."
|
||||
"description": "Rilevatore Hailo-8/Hailo-8L che utilizza modelli HEF e l'SDK HailoRT per l'inferenza sul dispositivo Hailo.",
|
||||
"label": "Hailo-8/Hailo-8L",
|
||||
"device": {
|
||||
"label": "Tipo di dispositivo",
|
||||
"description": "Il dispositivo da utilizzare per l'inferenza Hailo (ad es. 'PCIe', 'M.2')."
|
||||
}
|
||||
},
|
||||
"openvino": {
|
||||
"description": "Rilevatore OpenVINO per CPU AMD e Intel, GPU Intel e dispositivo Intel VPU."
|
||||
@@ -192,6 +202,111 @@
|
||||
},
|
||||
"type": {
|
||||
"label": "Tipo"
|
||||
},
|
||||
"description": "Configurazione per i rilevatori di oggetti (backend CPU, GPU, ONNX) e impostazioni del modello specifiche per il rilevatore.",
|
||||
"model": {
|
||||
"label": "Configurazione del modello specifica del rilevatore",
|
||||
"description": "Opzioni di configurazione del modello specifiche del rilevatore (percorso, dimensioni di input, ecc.).",
|
||||
"path": {
|
||||
"label": "Percorso del modello di rilevamento oggetti personalizzato",
|
||||
"description": "Percorso di un file del modello di rilevamento personalizzato (o plus://<model_id> per i modelli Frigate+)."
|
||||
},
|
||||
"labelmap_path": {
|
||||
"label": "Mappa delle etichette (label map) per il rilevatore di oggetti personalizzato",
|
||||
"description": "Percorso di un file labelmap che mappa le classi numeriche in etichette testuali per il rilevatore."
|
||||
},
|
||||
"width": {
|
||||
"label": "Larghezza di input del modello di rilevamento oggetti",
|
||||
"description": "Larghezza del tensore di input del modello in pixel."
|
||||
},
|
||||
"height": {
|
||||
"label": "Altezza di input del modello di rilevamento oggetti",
|
||||
"description": "Altezza del tensore di input del modello in pixel."
|
||||
},
|
||||
"labelmap": {
|
||||
"label": "Personalizzazione labelmap",
|
||||
"description": "Sostituzioni o voci di rimappatura da unire alla labelmap standard."
|
||||
},
|
||||
"attributes_map": {
|
||||
"label": "Mappa delle etichette oggetto con le relative etichette di attributo",
|
||||
"description": "Mappatura dalle etichette oggetto alle etichette di attributo utilizzata per allegare metadati (ad esempio 'car' -> ['license_plate'])."
|
||||
},
|
||||
"input_tensor": {
|
||||
"label": "Forma del tensore di input del modello",
|
||||
"description": "Formato del tensore richiesto dal modello: 'nhwc' o 'nchw'."
|
||||
},
|
||||
"input_pixel_format": {
|
||||
"label": "Formato colore dei pixel di input del modello",
|
||||
"description": "Spazio colore dei pixel richiesto dal modello: 'rgb', 'bgr' o 'yuv'."
|
||||
},
|
||||
"input_dtype": {
|
||||
"label": "Tipo di dati di input del modello (Dtype)",
|
||||
"description": "Tipo di dati del tensore di input del modello (ad esempio 'float32')."
|
||||
},
|
||||
"model_type": {
|
||||
"label": "Tipo di modello di rilevamento oggetti",
|
||||
"description": "Tipo di architettura del modello del rilevatore (ssd, yolox, yolonas) utilizzato da alcuni rilevatori per l'ottimizzazione."
|
||||
}
|
||||
},
|
||||
"model_path": {
|
||||
"label": "Percorso del modello specifico del rilevatore",
|
||||
"description": "Percorso del file binario del modello del rilevatore, se richiesto dal rilevatore scelto."
|
||||
},
|
||||
"axengine": {
|
||||
"label": "NPU AXEngine",
|
||||
"description": "Rilevatore NPU AXERA AX650N/AX8850N che esegue file .axmodel compilati tramite il runtime AXEngine."
|
||||
},
|
||||
"deepstack": {
|
||||
"label": "DeepStack",
|
||||
"description": "Rilevatore DeepStack/CodeProject.AI che invia immagini a una API HTTP DeepStack remota per l'inferenza. Non consigliato.",
|
||||
"api_url": {
|
||||
"label": "URL API DeepStack",
|
||||
"description": "L'URL delle API DeepStack."
|
||||
},
|
||||
"api_timeout": {
|
||||
"label": "Timeout API DeepStack (in secondi)",
|
||||
"description": "Tempo massimo consentito per una richiesta alle API DeepStack."
|
||||
},
|
||||
"api_key": {
|
||||
"label": "Chiave API DeepStack (se richiesta)",
|
||||
"description": "Chiave API opzionale per i servizi DeepStack autenticati."
|
||||
}
|
||||
},
|
||||
"degirum": {
|
||||
"label": "DeGirum",
|
||||
"description": "Rilevatore DeGirum per l'esecuzione di modelli tramite il cloud DeGirum o servizi di inferenza locali.",
|
||||
"zoo": {
|
||||
"label": "Model Zoo",
|
||||
"description": "Percorso o URL del model zoo di DeGirum."
|
||||
},
|
||||
"token": {
|
||||
"label": "Token Cloud DeGirum",
|
||||
"description": "Token per l'accesso al Cloud DeGirum."
|
||||
}
|
||||
},
|
||||
"edgetpu": {
|
||||
"label": "EdgeTPU",
|
||||
"description": "Rilevatore EdgeTPU che esegue modelli TensorFlow Lite compilati per Coral EdgeTPU utilizzando il delegate EdgeTPU.",
|
||||
"device": {
|
||||
"label": "Tipo di dispositivo",
|
||||
"description": "Il dispositivo da utilizzare per l'inferenza EdgeTPU (ad es. 'usb', 'pci')."
|
||||
}
|
||||
},
|
||||
"memryx": {
|
||||
"label": "MemryX",
|
||||
"description": "Rilevatore MemryX MX3 che esegue modelli DFP compilati su acceleratori MemryX.",
|
||||
"device": {
|
||||
"label": "Percorso del dispositivo",
|
||||
"description": "Il dispositivo da utilizzare per l'inferenza MemryX (ad es. 'PCIe')."
|
||||
}
|
||||
},
|
||||
"onnx": {
|
||||
"label": "ONNX",
|
||||
"description": "Rilevatore ONNX per l'esecuzione di modelli ONNX; utilizzerà i backend di accelerazione disponibili (CUDA/ROCm/OpenVINO) quando presenti.",
|
||||
"device": {
|
||||
"label": "Tipo di dispositivo",
|
||||
"description": "Il dispositivo da utilizzare per l'inferenza ONNX (ad es. 'AUTO', 'CPU', 'GPU')."
|
||||
}
|
||||
}
|
||||
},
|
||||
"audio_transcription": {
|
||||
@@ -266,49 +381,78 @@
|
||||
},
|
||||
"onvif": {
|
||||
"tls_insecure": {
|
||||
"label": "Disabilita verifica TLS"
|
||||
"label": "Disabilita verifica TLS",
|
||||
"description": "Salta la verifica TLS e disabilita l'autenticazione digest per ONVIF (non sicuro; utilizzare solo in reti sicure)."
|
||||
},
|
||||
"profile": {
|
||||
"label": "Profilo ONVIF"
|
||||
"label": "Profilo ONVIF",
|
||||
"description": "Profilo multimediale ONVIF specifico da utilizzare per il controllo PTZ, identificato tramite token o nome. Se non impostato, viene selezionato automaticamente il primo profilo con una configurazione PTZ valida."
|
||||
},
|
||||
"autotracking": {
|
||||
"label": "Tracciamento automatico",
|
||||
"enabled": {
|
||||
"label": "Abilita il tracciamento automatico"
|
||||
"label": "Abilita il tracciamento automatico",
|
||||
"description": "Abilita o disabilita il tracciamento automatico della telecamera PTZ per gli oggetti rilevati."
|
||||
},
|
||||
"calibrate_on_startup": {
|
||||
"label": "Calibra all'avvio"
|
||||
"label": "Calibra all'avvio",
|
||||
"description": "Misura la velocità dei motori PTZ all'avvio per migliorare la precisione del tracciamento. Frigate aggiornerà la configurazione con i valori di movement_weights dopo la calibrazione."
|
||||
},
|
||||
"zooming": {
|
||||
"label": "Modalità ingrandimento"
|
||||
"label": "Modalità ingrandimento",
|
||||
"description": "Controlla il comportamento dello zoom: disabled (solo pan/tilt), absolute (più compatibile) o relative (pan/tilt/zoom simultanei)."
|
||||
},
|
||||
"zoom_factor": {
|
||||
"label": "Fattore di ingrandimento"
|
||||
"label": "Fattore di ingrandimento",
|
||||
"description": "Controlla il livello di zoom sugli oggetti tracciati. Valori più bassi mantengono una porzione maggiore della scena visibile; valori più alti aumentano lo zoom ma potrebbero far perdere il tracciamento. Valori compresi tra 0.1 e 0.75."
|
||||
},
|
||||
"track": {
|
||||
"label": "Oggetti tracciati",
|
||||
"description": "Elenco dei tipi di oggetto che dovrebbero attivare il tracciamento automatico."
|
||||
},
|
||||
"required_zones": {
|
||||
"label": "Zone richieste"
|
||||
"label": "Zone richieste",
|
||||
"description": "Gli oggetti devono entrare in una di queste zone prima che inizi il tracciamento automatico."
|
||||
},
|
||||
"timeout": {
|
||||
"label": "Scadenza di ritorno",
|
||||
"description": "Attendi questo numero di secondi dopo aver perso il tracciamento prima di riportare la telecamera nella posizione preimpostata."
|
||||
},
|
||||
"movement_weights": {
|
||||
"description": "Valori di calibrazione generati automaticamente dalla calibrazione della telecamera. Non modificare manualmente."
|
||||
"description": "Valori di calibrazione generati automaticamente dalla calibrazione della telecamera. Non modificare manualmente.",
|
||||
"label": "Pesi del movimento"
|
||||
},
|
||||
"enabled_in_config": {
|
||||
"label": "Stato originale del tracciamento automatico"
|
||||
"label": "Stato originale del tracciamento automatico",
|
||||
"description": "Campo interno per tracciare se il tracciamento automatico era abilitato nella configurazione."
|
||||
},
|
||||
"description": "Traccia automaticamente gli oggetti in movimento e li mantiene centrati nell'inquadratura utilizzando i movimenti della telecamera PTZ.",
|
||||
"return_preset": {
|
||||
"label": "Preset di ritorno",
|
||||
"description": "Nome del preset ONVIF configurato nel firmware della telecamera a cui ritornare al termine del tracciamento."
|
||||
}
|
||||
},
|
||||
"ignore_time_mismatch": {
|
||||
"label": "Ignora la discrepanza oraria"
|
||||
"label": "Ignora la discrepanza oraria",
|
||||
"description": "Ignora le differenze di sincronizzazione oraria tra la telecamera e il server Frigate per la comunicazione ONVIF."
|
||||
},
|
||||
"label": "ONVIF",
|
||||
"port": {
|
||||
"label": "Porta ONVIF"
|
||||
"label": "Porta ONVIF",
|
||||
"description": "Numero di porta per il servizio ONVIF."
|
||||
},
|
||||
"description": "Impostazioni della connessione ONVIF e del tracciamento automatico PTZ per questa telecamera.",
|
||||
"host": {
|
||||
"label": "Host ONVIF",
|
||||
"description": "Host (e schema opzionale) per il servizio ONVIF di questa telecamera."
|
||||
},
|
||||
"user": {
|
||||
"label": "Nome utente ONVIF",
|
||||
"description": "Nome utente per l'autenticazione ONVIF; alcuni dispositivi richiedono un utente amministratore per l'ONVIF."
|
||||
},
|
||||
"password": {
|
||||
"label": "Password ONVIF",
|
||||
"description": "Password per l'autenticazione ONVIF."
|
||||
}
|
||||
},
|
||||
"detect": {
|
||||
@@ -413,7 +557,11 @@
|
||||
},
|
||||
"default_role": {
|
||||
"label": "Ruolo predefinito",
|
||||
"description": "Ruolo predefinito assegnato agli utenti autenticati tramite proxy quando non si applica alcuna mappatura dei ruoli (amministratore o visualizzatore)."
|
||||
"description": "Ruolo predefinito assegnato agli utenti autenticati tramite proxy quando non si applica nessuna mappatura dei ruoli."
|
||||
},
|
||||
"separator": {
|
||||
"label": "Carattere separatore",
|
||||
"description": "Carattere utilizzato per separare valori multipli forniti negli header del proxy."
|
||||
}
|
||||
},
|
||||
"review": {
|
||||
@@ -507,7 +655,19 @@
|
||||
},
|
||||
"ui": {
|
||||
"label": "Interfaccia utente",
|
||||
"description": "Preferenze dell'interfaccia utente come fuso orario, formato di data/ora e unità di misura."
|
||||
"description": "Preferenze dell'interfaccia utente come fuso orario, formato di data/ora e unità di misura.",
|
||||
"timezone": {
|
||||
"label": "Fuso orario",
|
||||
"description": "Fuso orario opzionale da visualizzare nell'interfaccia utente (se non impostato, viene usata l'ora locale del browser)."
|
||||
},
|
||||
"time_format": {
|
||||
"label": "Formato Ora",
|
||||
"description": "Formato dell'ora da utilizzare nell'interfaccia utente (browser, 12 ore o 24 ore)."
|
||||
},
|
||||
"unit_system": {
|
||||
"label": "Sistema di unità di misura",
|
||||
"description": "Sistema di unità di misura per la visualizzazione (metrico o imperiale) utilizzato nell'interfaccia utente e nei messaggi MQTT."
|
||||
}
|
||||
},
|
||||
"profiles": {
|
||||
"label": "Profili",
|
||||
@@ -532,17 +692,18 @@
|
||||
}
|
||||
},
|
||||
"enabled": {
|
||||
"label": "Abilita Registrazione"
|
||||
"label": "Abilita registrazione",
|
||||
"description": "Attiva o disattiva la registrazione per tutte le telecamere; l'impostazione può essere modificata per ogni singola telecamera."
|
||||
},
|
||||
"expire_interval": {
|
||||
"label": "Intervallo pulizia registrazioni",
|
||||
"label": "Intervallo di pulizia registrazioni",
|
||||
"description": "Minuti tra i cicli di pulizia che rimuovono i segmenti di registrazione scaduti."
|
||||
},
|
||||
"continuous": {
|
||||
"label": "Conservazione continua",
|
||||
"description": "Numero di giorni per cui conservare le registrazioni, indipendentemente dagli oggetti tracciati o dal movimento. Impostare su 0 se si desidera conservare solo le registrazioni relative agli avvisi e ai rilevamenti.",
|
||||
"days": {
|
||||
"label": "Giorni di Conservazione",
|
||||
"label": "Giorni di conservazione",
|
||||
"description": "Numero di giorni di conservazione delle registrazioni."
|
||||
}
|
||||
},
|
||||
@@ -550,7 +711,7 @@
|
||||
"label": "Conservazione movimento",
|
||||
"description": "Numero di giorni per cui conservare le registrazioni attivate dal movimento, indipendentemente dagli oggetti tracciati. Impostare su 0 se si desidera conservare solo le registrazioni relative ad allarmi e rilevamenti.",
|
||||
"days": {
|
||||
"label": "Giorni di Conservazione",
|
||||
"label": "Giorni di conservazione",
|
||||
"description": "Numero di giorni di conservazione delle registrazioni."
|
||||
}
|
||||
},
|
||||
@@ -558,12 +719,12 @@
|
||||
"label": "Conservazione rilevamento",
|
||||
"description": "Impostazioni relative alla conservazione delle registrazioni per gli eventi di rilevamento, comprese le durate prima e dopo l'acquisizione.",
|
||||
"pre_capture": {
|
||||
"label": "Secondi di pre-acquisizione",
|
||||
"description": "Numero di secondi precedenti l'evento di rilevamento da includere nella registrazione."
|
||||
"label": "Secondi prima della cattura",
|
||||
"description": "Numero di secondi precedenti all'evento di rilevamento da includere nella registrazione."
|
||||
},
|
||||
"post_capture": {
|
||||
"label": "Secondi di post-acquisizione",
|
||||
"description": "Numero di secondi successivi l'evento di rilevamento da includere nella registrazione."
|
||||
"label": "Secondi dopo la cattura",
|
||||
"description": "Numero di secondi successivi all'evento di rilevamento da includere nella registrazione."
|
||||
},
|
||||
"retain": {
|
||||
"label": "Conservazione eventi",
|
||||
@@ -580,13 +741,13 @@
|
||||
},
|
||||
"alerts": {
|
||||
"label": "Conservazione avvisi",
|
||||
"description": "Impostazioni di conservazione delle registrazioni per gli eventi di avviso, incluse le durate di pre e post-acquisizione.",
|
||||
"description": "Impostazioni di conservazione delle registrazioni per gli eventi di avviso, incluse le durate prima e dopo la cattura.",
|
||||
"pre_capture": {
|
||||
"label": "Secondi di pre-acquisizione",
|
||||
"description": "Numero di secondi antecedenti all'evento di rilevamento da includere nella registrazione."
|
||||
"label": "Secondi prima della cattura",
|
||||
"description": "Numero di secondi precedenti all'evento di rilevamento da includere nella registrazione."
|
||||
},
|
||||
"post_capture": {
|
||||
"label": "Secondi di post-acquisizione",
|
||||
"label": "Secondi dopo la cattura",
|
||||
"description": "Numero di secondi successivi all'evento di rilevamento da includere nella registrazione."
|
||||
},
|
||||
"retain": {
|
||||
@@ -613,7 +774,8 @@
|
||||
"enabled_in_config": {
|
||||
"label": "Stato registrazione originale",
|
||||
"description": "Indica se la registrazione era abilitata nella configurazione statica originale."
|
||||
}
|
||||
},
|
||||
"description": "Impostazioni di registrazione e conservazione vengono applicate alle telecamere a meno che non vengano modificate singolarmente per ciascuna telecamera."
|
||||
},
|
||||
"snapshots": {
|
||||
"label": "Istantanee",
|
||||
@@ -625,7 +787,40 @@
|
||||
"description": "Sovraimprime un timestamp sulle istantanee provenienti dalle API."
|
||||
},
|
||||
"bounding_box": {
|
||||
"label": "Sovrimpressione riquadro di delimitazione"
|
||||
"label": "Sovrimpressione riquadro di delimitazione",
|
||||
"description": "Disegna i riquadri di delimitazione per gli oggetti tracciati sulle istantanee provenienti dalle API."
|
||||
},
|
||||
"crop": {
|
||||
"label": "Ritaglia istantanea",
|
||||
"description": "Ritaglia le istantanee provenienti dalle API in base al riquadro di delimitazione dell'oggetto rilevato."
|
||||
},
|
||||
"required_zones": {
|
||||
"label": "Zone richieste",
|
||||
"description": "Zone in cui un oggetto deve entrare affinché venga salvata un'istantanea."
|
||||
},
|
||||
"height": {
|
||||
"label": "Altezza istantanea",
|
||||
"description": "Altezza (in pixel) a cui ridimensionare le istantanee provenienti dalle API; lascia vuoto per mantenere la dimensione originale."
|
||||
},
|
||||
"retain": {
|
||||
"label": "Conservazione istantanee",
|
||||
"description": "Impostazioni di conservazione per le istantanee, inclusi i giorni predefiniti e le eccezioni per singolo oggetto.",
|
||||
"default": {
|
||||
"label": "Conservazione predefinita",
|
||||
"description": "Numero predefinito di giorni per cui conservare le istantanee."
|
||||
},
|
||||
"mode": {
|
||||
"label": "Modalità di conservazione",
|
||||
"description": "Modalità di conservazione: tutti (salva tutti i segmenti), movimento (salva i segmenti con movimento) o oggetti_attivi (salva i segmenti con oggetti attivi)."
|
||||
},
|
||||
"objects": {
|
||||
"label": "Conservazione oggetti",
|
||||
"description": "Eccezioni per singolo oggetto relativi ai giorni di conservazione delle istantanee."
|
||||
}
|
||||
},
|
||||
"quality": {
|
||||
"label": "Qualità istantanee",
|
||||
"description": "Qualità di codifica per le istantanee salvate (0-100)."
|
||||
}
|
||||
},
|
||||
"motion": {
|
||||
@@ -654,10 +849,12 @@
|
||||
"description": "Se impostato su un valore compreso tra 0.0 e 110, e se in un singolo fotogramma cambia una porzione dell'immagine superiore a tale frazione, il rilevatore non restituirà alcun riquadro di movimento e si ricalibrerà immediatamente. Ciò consente di risparmiare risorse della CPU e ridurre i falsi positivi in caso di fulmini, temporali, ecc., ma potrebbe comportare la mancata rilevazione di eventi reali, come ad esempio il tracciamento automatico di un oggetto da parte di una telecamera PTZ. Il compromesso consiste nel scegliere se sacrificare alcuni megabyte di registrazioni o rivedere un paio di brevi video. Lasciare non impostato (Nessuno) per disabilitare questa funzione."
|
||||
},
|
||||
"delta_alpha": {
|
||||
"description": "Fattore di fusione alfa utilizzato nel calcolo della differenza tra fotogrammi per il calcolo del movimento."
|
||||
"description": "Fattore di fusione alfa utilizzato nel calcolo della differenza tra fotogrammi per il calcolo del movimento.",
|
||||
"label": "Delta alfa"
|
||||
},
|
||||
"frame_alpha": {
|
||||
"description": "Valore alfa utilizzato durante la fusione dei fotogrammi per la preelaborazione del movimento."
|
||||
"description": "Valore alfa utilizzato durante la fusione dei fotogrammi per la preelaborazione del movimento.",
|
||||
"label": "Frame alfa"
|
||||
},
|
||||
"frame_height": {
|
||||
"label": "Altezza del frame",
|
||||
@@ -672,7 +869,8 @@
|
||||
"description": "Secondi di attesa dopo l'ultimo movimento prima di pubblicare uno stato 'off' MQTT."
|
||||
},
|
||||
"enabled_in_config": {
|
||||
"description": "Indica se il rilevamento del movimento era abilitato nella configurazione statica originale."
|
||||
"description": "Indica se il rilevamento del movimento era abilitato nella configurazione statica originale.",
|
||||
"label": "Stato movimento originale"
|
||||
},
|
||||
"raw_mask": {
|
||||
"label": "Maschera grezza"
|
||||
@@ -710,11 +908,11 @@
|
||||
},
|
||||
"min_score": {
|
||||
"label": "Confidenza minima",
|
||||
"description": "Livello minimo di confidenza del rilevamento per singolo fotogramma richiesto affinché l'oggetto venga conteggiato."
|
||||
"description": "Livello minimo di confidenza nel rilevamento in un singolo fotogramma richiesto affinché l'oggetto venga conteggiato."
|
||||
},
|
||||
"mask": {
|
||||
"label": "Maschera filtro",
|
||||
"description": "Coordinate del poligono che definisce l'area all'interno dell'inquadratura in cui si applica questo filtro."
|
||||
"description": "Coordinate del poligono che definiscono la posizione di applicazione di questo filtro all'interno dell'inquadratura."
|
||||
},
|
||||
"raw_mask": {
|
||||
"label": "Maschera grezza"
|
||||
@@ -722,40 +920,42 @@
|
||||
},
|
||||
"mask": {
|
||||
"label": "Maschera oggetto",
|
||||
"description": "Poligono di maschera utilizzato per impedire il rilevamento di oggetti in aree specificate."
|
||||
"description": "Poligono di mascheramento utilizzato per impedire il rilevamento di oggetti in aree specifiche."
|
||||
},
|
||||
"genai": {
|
||||
"label": "Configurazione degli oggetti GenAI",
|
||||
"description": "Opzioni GenAI per la descrizione degli oggetti tracciati e l'invio dei fotogrammi per la generazione.",
|
||||
"enabled": {
|
||||
"label": "Abilita GenAI",
|
||||
"description": "Abilita di default la generazione tramite GenAI delle descrizioni degli oggetti monitorati."
|
||||
"description": "Abilita in modo predefinito la generazione di descrizioni da parte di GenAI per gli oggetti tracciati."
|
||||
},
|
||||
"use_snapshot": {
|
||||
"label": "Usa istantanee",
|
||||
"label": "Utilizza istantanee",
|
||||
"description": "Utilizza le istantanee degli oggetti anziché le miniature per la generazione di descrizioni con GenAI."
|
||||
},
|
||||
"prompt": {
|
||||
"description": "Modello di prompt predefinito utilizzato per la generazione di descrizioni con GenAI."
|
||||
"description": "Modello di richiesta predefinito utilizzato per la generazione di descrizioni con GenAI.",
|
||||
"label": "Richiesta di didascalia"
|
||||
},
|
||||
"object_prompts": {
|
||||
"description": "Prompt specifici per ogni oggetto per personalizzare i risultati di GenAI in base a etichette specifiche."
|
||||
"description": "Richieste specifiche per ogni oggetto per personalizzare i risultati di GenAI in base a etichette specifiche.",
|
||||
"label": "Richiesta di oggetto"
|
||||
},
|
||||
"objects": {
|
||||
"label": "Oggetti GenAI",
|
||||
"description": "Elenco delle etichette degli oggetti da inviare a GenAI per impostazione predefinita."
|
||||
"description": "Elenco di etichette degli oggetti da inviare a GenAI per impostazione predefinita."
|
||||
},
|
||||
"required_zones": {
|
||||
"label": "Zone obbligatorie",
|
||||
"description": "Zone che devono essere inserite affinché gli oggetti possano essere utilizzati per la generazione di descrizioni tramite GenAI."
|
||||
"label": "Zone richieste",
|
||||
"description": "Zone che devono essere inserite affinché gli oggetti siano idonei alla generazione della descrizione GenAI."
|
||||
},
|
||||
"debug_save_thumbnails": {
|
||||
"label": "Salva miniature",
|
||||
"description": "Salva le miniature inviate a GenAI per il debug e la revisione."
|
||||
"description": "Salva le miniature inviate a GenAI per la correzione e la revisione."
|
||||
},
|
||||
"send_triggers": {
|
||||
"label": "Attivatori GenAI",
|
||||
"description": "Definisce quando i frame devono essere inviati a GenAI (al termine, dopo gli aggiornamenti, ecc.).",
|
||||
"label": "Attivazioni GenAI",
|
||||
"description": "Definisce quando i fotogrammi devono essere inviati a GenAI (alla fine, dopo gli aggiornamenti, ecc.).",
|
||||
"tracked_object_end": {
|
||||
"label": "Invia alla fine",
|
||||
"description": "Invia una richiesta a GenAI quando l'oggetto tracciato termina."
|
||||
@@ -776,6 +976,24 @@
|
||||
"filters_attribute": {
|
||||
"raw_mask": {
|
||||
"label": "Maschera grezza"
|
||||
},
|
||||
"min_ratio": {
|
||||
"label": "Rapporto di aspetto minimo",
|
||||
"description": "Rapporto minimo tra larghezza e altezza richiesto affinché il riquadro di delimitazione sia valido."
|
||||
},
|
||||
"max_ratio": {
|
||||
"label": "Rapporto di aspetto massimo",
|
||||
"description": "Rapporto massimo tra larghezza e altezza richiesto affinché il riquadro di delimitazione sia valido."
|
||||
},
|
||||
"threshold": {
|
||||
"label": "Soglia di confidenza"
|
||||
},
|
||||
"min_score": {
|
||||
"label": "Confidenza minima"
|
||||
},
|
||||
"mask": {
|
||||
"label": "Maschera filtro",
|
||||
"description": "Coordinate del poligono che definiscono la posizione di applicazione di questo filtro all'interno dell'inquadratura."
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -795,7 +1013,39 @@
|
||||
}
|
||||
},
|
||||
"timestamp_style": {
|
||||
"label": "Stile orario"
|
||||
"label": "Stile orario",
|
||||
"position": {
|
||||
"label": "Posizione timestamp",
|
||||
"description": "Posizione del timestamp sull'immagine (tl/tr/bl/br)."
|
||||
},
|
||||
"format": {
|
||||
"label": "Formato timestamp",
|
||||
"description": "Stringa di formato data/ora utilizzata per i timestamp (codici di formato datetime di Python)."
|
||||
},
|
||||
"color": {
|
||||
"label": "Colore timestamp",
|
||||
"description": "Valori di colore RGB per il testo del timestamp (tutti i valori da 0 a 255).",
|
||||
"red": {
|
||||
"label": "Rosso",
|
||||
"description": "Componente rosso (0-255) per il colore del timestamp."
|
||||
},
|
||||
"green": {
|
||||
"label": "Verde",
|
||||
"description": "Componente verde (0-255) per il colore del timestamp."
|
||||
},
|
||||
"blue": {
|
||||
"label": "Blu",
|
||||
"description": "Componente blu (0-255) per il colore del timestamp."
|
||||
}
|
||||
},
|
||||
"thickness": {
|
||||
"label": "Spessore timestamp",
|
||||
"description": "Spessore della linea del testo del timestamp."
|
||||
},
|
||||
"effect": {
|
||||
"label": "Effetto timestamp",
|
||||
"description": "Effetto visivo per il testo del timestamp (none, solid, shadow)."
|
||||
}
|
||||
},
|
||||
"database": {
|
||||
"label": "Database",
|
||||
@@ -824,7 +1074,7 @@
|
||||
"description": "Indirizzo email utilizzato per le notifiche push o richiesto da alcuni fornitori di servizi di notifica."
|
||||
},
|
||||
"cooldown": {
|
||||
"label": "Periodo di raffreddamento",
|
||||
"label": "Tempo di attesa tra notifiche",
|
||||
"description": "Tempo di attesa (in secondi) tra le notifiche per evitare di inviare spam ai destinatari."
|
||||
},
|
||||
"enabled_in_config": {
|
||||
@@ -857,10 +1107,44 @@
|
||||
}
|
||||
},
|
||||
"tls": {
|
||||
"label": "TLS"
|
||||
"label": "TLS",
|
||||
"description": "Impostazioni TLS per gli endpoint web di Frigate (porta 8971).",
|
||||
"enabled": {
|
||||
"label": "Abilita TLS",
|
||||
"description": "Abilita il protocollo TLS per l'interfaccia utente web e le API di Frigate sulla porta TLS configurata."
|
||||
}
|
||||
},
|
||||
"telemetry": {
|
||||
"label": "Telemetria"
|
||||
"label": "Telemetria",
|
||||
"description": "Opzioni di telemetria e statistiche di sistema, incluso il monitoraggio della GPU e della larghezza di banda di rete.",
|
||||
"network_interfaces": {
|
||||
"label": "Interfacce di rete",
|
||||
"description": "Elenco dei prefissi dei nomi delle interfacce di rete da monitorare per le statistiche sulla larghezza di banda."
|
||||
},
|
||||
"stats": {
|
||||
"label": "Statistiche di sistema",
|
||||
"description": "Opzioni per abilitare/disabilitare la raccolta di varie statistiche di sistema e della GPU.",
|
||||
"amd_gpu_stats": {
|
||||
"label": "Statistiche GPU AMD",
|
||||
"description": "Abilita la raccolta delle statistiche della GPU AMD, se presente una GPU AMD."
|
||||
},
|
||||
"intel_gpu_stats": {
|
||||
"label": "Statistiche GPU Intel",
|
||||
"description": "Abilita la raccolta delle statistiche della GPU Intel, se presente una GPU Intel."
|
||||
},
|
||||
"network_bandwidth": {
|
||||
"label": "Larghezza di banda di rete",
|
||||
"description": "Abilita il monitoraggio della larghezza di banda di rete per singolo processo per i processi ffmpeg della telecamera e per i rilevatori (richiede capability specifiche)."
|
||||
},
|
||||
"intel_gpu_device": {
|
||||
"label": "Dispositivo GPU Intel",
|
||||
"description": "Indirizzo bus PCI o percorso del dispositivo DRM (es. /dev/dri/card1) utilizzato per associare le statistiche della GPU Intel a un dispositivo specifico quando ne sono presenti molteplici."
|
||||
}
|
||||
},
|
||||
"version_check": {
|
||||
"label": "Controllo versione",
|
||||
"description": "Abilita un controllo in uscita per rilevare se è disponibile una versione più recente di Frigate."
|
||||
}
|
||||
},
|
||||
"birdseye": {
|
||||
"label": "Birdseye",
|
||||
@@ -887,7 +1171,7 @@
|
||||
"label": "Attivatori",
|
||||
"friendly_name": {
|
||||
"label": "Nome descrittivo",
|
||||
"description": "Nome descrittivo opzionale visualizzato nell'interfaccia utente per questo innesco."
|
||||
"description": "Nome descrittivo opzionale visualizzato nell'interfaccia utente per questo attivatore."
|
||||
},
|
||||
"description": "Azioni e criteri di corrispondenza per gli attivatori della ricerca semantica specifici della telecamera.",
|
||||
"enabled": {
|
||||
|
||||
@@ -202,8 +202,8 @@
|
||||
"aria": "Invia a Frigate Plus"
|
||||
},
|
||||
"addTrigger": {
|
||||
"label": "Aggiungi innesco",
|
||||
"aria": "Aggiungi un innesco per questo oggetto tracciato"
|
||||
"label": "Aggiungi attivatore",
|
||||
"aria": "Aggiungi un attivatore per questo oggetto tracciato"
|
||||
},
|
||||
"audioTranscription": {
|
||||
"label": "Trascrivere",
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
"disable": "Disabilita audio bidirezionale"
|
||||
},
|
||||
"snapshots": {
|
||||
"enable": "Abilita istantanee",
|
||||
"enable": "Abilita Istantanee",
|
||||
"disable": "Disabilita istantanee"
|
||||
},
|
||||
"manualRecording": {
|
||||
|
||||
@@ -212,7 +212,7 @@
|
||||
"type": {
|
||||
"zone": "zona",
|
||||
"motion_mask": "maschera di movimento",
|
||||
"object_mask": "maschera di oggetto"
|
||||
"object_mask": "maschera oggetto"
|
||||
},
|
||||
"revertOverride": {
|
||||
"title": "Ripristina la configurazione di base",
|
||||
@@ -447,7 +447,7 @@
|
||||
"users": "Utenti",
|
||||
"frigateplus": "Frigate+",
|
||||
"enrichments": "Miglioramenti",
|
||||
"triggers": "Inneschi",
|
||||
"triggers": "Attivatori",
|
||||
"roles": "Ruoli",
|
||||
"cameraManagement": "Gestione della telecamera",
|
||||
"cameraReview": "Revisiona",
|
||||
@@ -896,22 +896,22 @@
|
||||
"restart_required": "Riavvio richiesto (impostazioni di miglioramento modificate)"
|
||||
},
|
||||
"triggers": {
|
||||
"documentTitle": "Inneschi",
|
||||
"documentTitle": "Attivatori",
|
||||
"management": {
|
||||
"title": "Inneschi",
|
||||
"desc": "Gestisci gli inneschi per {{camera}}. Utilizza il tipo miniatura per attivare miniature simili all'oggetto tracciato selezionato e il tipo descrizione per attivare descrizioni simili al testo specificato."
|
||||
"title": "Attivatori",
|
||||
"desc": "Gestisci gli attivatori per {{camera}}. Utilizza il tipo miniatura per attivare miniature simili all'oggetto tracciato selezionato e il tipo descrizione per attivare descrizioni simili al testo specificato."
|
||||
},
|
||||
"addTrigger": "Aggiungi innesco",
|
||||
"addTrigger": "Aggiungi attivatore",
|
||||
"table": {
|
||||
"name": "Nome",
|
||||
"type": "Tipo",
|
||||
"content": "Contenuto",
|
||||
"threshold": "Soglia",
|
||||
"actions": "Azioni",
|
||||
"noTriggers": "Nessun innesco configurato per questa telecamera.",
|
||||
"noTriggers": "Nessun attivatore configurato per questa telecamera.",
|
||||
"edit": "Modifica",
|
||||
"deleteTrigger": "Elimina innesco",
|
||||
"lastTriggered": "Ultimo innesco"
|
||||
"deleteTrigger": "Elimina attivatore",
|
||||
"lastTriggered": "Ultimo attivatore"
|
||||
},
|
||||
"type": {
|
||||
"thumbnail": "Miniatura",
|
||||
@@ -925,34 +925,34 @@
|
||||
},
|
||||
"dialog": {
|
||||
"createTrigger": {
|
||||
"title": "Crea innesco",
|
||||
"desc": "Crea un innesco per la telecamera {{camera}}"
|
||||
"title": "Crea attivatore",
|
||||
"desc": "Crea un attivatore per la telecamera {{camera}}"
|
||||
},
|
||||
"editTrigger": {
|
||||
"title": "Modifica innesco",
|
||||
"desc": "Modifica le impostazioni per l'innesco della telecamera {{camera}}"
|
||||
"title": "Modifica attivatore",
|
||||
"desc": "Modifica le impostazioni per l'attivatore della telecamera {{camera}}"
|
||||
},
|
||||
"deleteTrigger": {
|
||||
"title": "Elimina innesco",
|
||||
"desc": "Vuoi davvero eliminare l'innesco <strong>{{triggerName}}</strong>? Questa azione non può essere annullata."
|
||||
"title": "Elimina attivatore",
|
||||
"desc": "Vuoi davvero eliminare l'attivatore <strong>{{triggerName}}</strong>? Questa azione non può essere annullata."
|
||||
},
|
||||
"form": {
|
||||
"name": {
|
||||
"title": "Nome",
|
||||
"placeholder": "Assegna un nome a questo innesco",
|
||||
"placeholder": "Assegna un nome a questo attivatore",
|
||||
"error": {
|
||||
"minLength": "Il campo deve contenere almeno 2 caratteri.",
|
||||
"invalidCharacters": "Il campo può contenere solo lettere, numeri, caratteri di sottolineatura e trattini.",
|
||||
"alreadyExists": "Per questa telecamera esiste già un innesco con questo nome."
|
||||
"alreadyExists": "Per questa telecamera esiste già un attivatore con questo nome."
|
||||
},
|
||||
"description": "Inserisci un nome o una descrizione univoca per identificare questo innesco"
|
||||
"description": "Inserisci un nome o una descrizione univoca per identificare questo attivatore"
|
||||
},
|
||||
"enabled": {
|
||||
"description": "Abilita o disabilita questo innesco"
|
||||
"description": "Abilita o disabilita questo attivatore"
|
||||
},
|
||||
"type": {
|
||||
"title": "Tipo",
|
||||
"placeholder": "Seleziona il tipo di innesco",
|
||||
"placeholder": "Seleziona il tipo di attivatore",
|
||||
"description": "Si attiva quando viene rilevata una descrizione di un oggetto simile tracciato",
|
||||
"thumbnail": "Attiva quando viene rilevata una miniatura di un oggetto simile tracciato"
|
||||
},
|
||||
@@ -960,7 +960,7 @@
|
||||
"title": "Contenuto",
|
||||
"imagePlaceholder": "Seleziona una miniatura",
|
||||
"textPlaceholder": "Inserisci il contenuto del testo",
|
||||
"imageDesc": "Vengono visualizzate solo le 100 miniature più recenti. Se non riesci a trovare la miniatura desiderata, controlla gli oggetti precedenti in Esplora e imposta un innesco dal menu.",
|
||||
"imageDesc": "Vengono visualizzate solo le 100 miniature più recenti. Se non riesci a trovare la miniatura desiderata, controlla gli oggetti precedenti in Esplora e imposta un attivatore dal menu.",
|
||||
"textDesc": "Inserisci il testo per attivare questa azione quando viene rilevata una descrizione simile dell'oggetto tracciato.",
|
||||
"error": {
|
||||
"required": "Il contenuto è obbligatorio."
|
||||
@@ -972,11 +972,11 @@
|
||||
"min": "La soglia deve essere almeno 0",
|
||||
"max": "La soglia deve essere al massimo 1"
|
||||
},
|
||||
"desc": "Imposta la soglia di similarità per questo innesco. Una soglia più alta indica che è necessaria una corrispondenza più vicina per attivare l'innesco."
|
||||
"desc": "Imposta la soglia di similarità per questo attivatore. Una soglia più alta indica che è necessaria una corrispondenza più vicina per attivare l'attivatore."
|
||||
},
|
||||
"actions": {
|
||||
"title": "Azioni",
|
||||
"desc": "Per impostazione predefinita, Frigate invia un messaggio MQTT per tutti gli inneschi. Le sottoetichette aggiungono il nome dell'innesco all'etichetta dell'oggetto. Gli attributi sono metadati ricercabili, memorizzati separatamente nei metadati dell'oggetto tracciato.",
|
||||
"desc": "Per impostazione predefinita, Frigate invia un messaggio MQTT per tutti gli attivatori. Le sottoetichette aggiungono il nome dell'attivatore all'etichetta dell'oggetto. Gli attributi sono metadati ricercabili, memorizzati separatamente nei metadati dell'oggetto tracciato.",
|
||||
"error": {
|
||||
"min": "È necessario selezionare almeno un'azione."
|
||||
}
|
||||
@@ -990,30 +990,30 @@
|
||||
},
|
||||
"toast": {
|
||||
"success": {
|
||||
"createTrigger": "L'innesco {{name}} è stato creato correttamente.",
|
||||
"updateTrigger": "L'innesco {{name}} è stato aggiornato correttamente.",
|
||||
"deleteTrigger": "L'innesco {{name}} è stato eliminato correttamente."
|
||||
"createTrigger": "L'attivatore {{name}} è stato creato correttamente.",
|
||||
"updateTrigger": "L'attivatore {{name}} è stato aggiornato correttamente.",
|
||||
"deleteTrigger": "L'attivatore {{name}} è stato eliminato correttamente."
|
||||
},
|
||||
"error": {
|
||||
"createTriggerFailed": "Impossibile creare l'innesco: {{errorMessage}}",
|
||||
"updateTriggerFailed": "Impossibile aggiornare l'innesco: {{errorMessage}}",
|
||||
"deleteTriggerFailed": "Impossibile eliminare l'innesco: {{errorMessage}}"
|
||||
"createTriggerFailed": "Impossibile creare l'attivatore: {{errorMessage}}",
|
||||
"updateTriggerFailed": "Impossibile aggiornare l'attivatore: {{errorMessage}}",
|
||||
"deleteTriggerFailed": "Impossibile eliminare l'attivatore: {{errorMessage}}"
|
||||
}
|
||||
},
|
||||
"semanticSearch": {
|
||||
"title": "La ricerca semantica è disabilitata",
|
||||
"desc": "Per utilizzare gli inneschi, è necessario abilitare la ricerca semantica."
|
||||
"desc": "Per utilizzare gli attivatori, è necessario abilitare la ricerca semantica."
|
||||
},
|
||||
"wizard": {
|
||||
"title": "Crea innesco",
|
||||
"title": "Crea attivatore",
|
||||
"step1": {
|
||||
"description": "Configura le impostazioni di base per il tuo innesco."
|
||||
"description": "Configura le impostazioni di base per il tuo attivatore."
|
||||
},
|
||||
"step2": {
|
||||
"description": "Imposta il contenuto che attiverà questa azione."
|
||||
},
|
||||
"step3": {
|
||||
"description": "Configura la soglia e le azioni per questo innesco."
|
||||
"description": "Configura la soglia e le azioni per questo attivatore."
|
||||
},
|
||||
"steps": {
|
||||
"nameAndType": "Nome e tipo",
|
||||
@@ -2030,10 +2030,10 @@
|
||||
"desc": "La griglia di regioni è un algoritmo di ottimizzazione che apprende dove gli oggetti di diverse dimensioni appaiono tipicamente nel campo visivo di ciascuna telecamera. Frigate utilizza questi dati per dimensionare in modo efficiente le regioni di rilevamento. La griglia viene creata automaticamente nel tempo a partire dai dati degli oggetti tracciati.",
|
||||
"clear": "Pulisci griglia di regioni",
|
||||
"clearConfirmTitle": "Pulisci griglia di regioni",
|
||||
"clearConfirmDesc": "La pulizia della griglia di regioni non è consigliata a meno che non si sia recentemente modificato il modello del rilevatore o la posizione fisica della telecamera, riscontrando problemi di tracciamento degli oggetti. La griglia verrà ricostruita automaticamente nel tempo man mano che gli oggetti vengono tracciati. Per rendere effettive le modifiche è necessario riavviare Frigate.",
|
||||
"clearSuccess": "Griglia di regioni pulita con successo",
|
||||
"clearError": "Impossibile pulire la griglia di regioni",
|
||||
"restartRequired": "È necessario riavviare il sistema affinché le modifiche alla griglia di regioni abbiano effetto"
|
||||
"clearConfirmDesc": "La pulizia della griglia delle regioni non è consigliata, a meno che non sia stata modificata di recente la dimensione del modello del rilevatore, oppure sia stata cambiata la posizione fisica della telecamera e si riscontrino problemi di tracciamento degli oggetti. La griglia verrà ricostruita automaticamente nel tempo man mano che gli oggetti vengono tracciati. È richiesto un riavvio di Frigate affinché le modifiche abbiano effetto.",
|
||||
"clearSuccess": "Griglia delle regioni pulita con successo",
|
||||
"clearError": "Impossibile pulire la griglia delle regioni",
|
||||
"restartRequired": "È necessario riavviare il sistema affinché le modifiche alla griglia delle regioni abbiano effetto"
|
||||
}
|
||||
},
|
||||
"retainMode": {
|
||||
|
||||
@@ -216,7 +216,8 @@
|
||||
"id": "Bahasa Indonesia (Indonesisch)",
|
||||
"ur": "اردو (Urdu)",
|
||||
"hr": "Hrvatski (Kroatisch)",
|
||||
"zhHant": "繁體中文 (Traditioneel Chinees)"
|
||||
"zhHant": "繁體中文 (Traditioneel Chinees)",
|
||||
"bs": "Bosanksi (Bosnisch)"
|
||||
},
|
||||
"darkMode": {
|
||||
"label": "Donkere modus",
|
||||
@@ -267,7 +268,10 @@
|
||||
"anonymous": "anoniem"
|
||||
},
|
||||
"classification": "Classificatie",
|
||||
"profiles": "Profielen"
|
||||
"profiles": "Profielen",
|
||||
"actions": "Acties",
|
||||
"features": "Functies",
|
||||
"chat": "Chat"
|
||||
},
|
||||
"toast": {
|
||||
"copyUrlToClipboard": "URL naar klembord gekopieerd.",
|
||||
@@ -276,7 +280,8 @@
|
||||
"error": {
|
||||
"title": "Opslaan van configuratiewijzigingen mislukt: {{errorMessage}}",
|
||||
"noMessage": "Het opslaan van configuratiewijzigingen is mislukt"
|
||||
}
|
||||
},
|
||||
"success": "De configuratie aanpassingen zijn succesvol opgeslagen."
|
||||
}
|
||||
},
|
||||
"role": {
|
||||
@@ -323,5 +328,7 @@
|
||||
},
|
||||
"credentialField": {
|
||||
"savedPlaceholder": "Opgeslagen - leeg laten om huidige te behouden"
|
||||
}
|
||||
},
|
||||
"no_items": "Geen items",
|
||||
"validation_errors": "Validatie fouten"
|
||||
}
|
||||
|
||||
@@ -67,11 +67,14 @@
|
||||
"endTimeMustAfterStartTime": "Eindtijd moet na starttijd zijn"
|
||||
},
|
||||
"success": "Export is succesvol gestart. Bekijk het bestand op de exportpagina.",
|
||||
"view": "Weergeven"
|
||||
"view": "Weergeven",
|
||||
"queued": "Export staat in de wachtrij. Bekijk voortgang op de exports pagina."
|
||||
},
|
||||
"fromTimeline": {
|
||||
"saveExport": "Export opslaan",
|
||||
"previewExport": "Export vooraf bekijken"
|
||||
"previewExport": "Export vooraf bekijken",
|
||||
"useThisRange": "Gebruik dit bereik",
|
||||
"queueingExport": "Export in wachtrij zetten..."
|
||||
},
|
||||
"export": "Exporteren",
|
||||
"selectOrExport": "Selecteren of exporteren",
|
||||
@@ -107,7 +110,17 @@
|
||||
"title_one": "Review 1 exporteren",
|
||||
"title_other": "{{count}} reviews exporteren",
|
||||
"description": "Exporteer alle geselecteerde reviews. Alle exports worden samengevoegd in één case.",
|
||||
"descriptionNoCase": "Exporteer elke geselecteerde review."
|
||||
"descriptionNoCase": "Exporteer elke geselecteerde review.",
|
||||
"toast": {
|
||||
"startedNoCase_one": "1 export gestart.",
|
||||
"startedNoCase_other": "{{count}} Exports gestart.",
|
||||
"partial": "{{successful}} van {{total}} exports gestart. Mislukte items: {{failedItems}}",
|
||||
"failed": "Het starten van {{total}} exports is mislukt. Mislukt: {{failedItems}}"
|
||||
},
|
||||
"exportingButton": "Exporteren...",
|
||||
"exportButton_one": "Exporteer 1 revisie",
|
||||
"exportButton_other": "Exporteer {{count}} revisies",
|
||||
"caseNamePlaceholder": "Inspecteer export - {{date}}"
|
||||
}
|
||||
},
|
||||
"streaming": {
|
||||
@@ -155,6 +168,14 @@
|
||||
"error": "Verwijderen mislukt: {{error}}",
|
||||
"success": "De videobeelden die aan de geselecteerde beoordelingsitems zijn gekoppeld, zijn succesvol verwijderd."
|
||||
}
|
||||
},
|
||||
"shareTimestamp": {
|
||||
"label": "Tijdstempel delen",
|
||||
"title": "Tijdstempel delen",
|
||||
"description": "Deel een URL met tijdstempel van de huidige positie in de afspeler of kies een aangepaste tijdstempel. Let op: dit is geen openbare deel-URL en is alleen toegankelijk voor gebruikers die toegang hebben tot Frigate en deze camera.",
|
||||
"custom": "Aangepaste tijdstempel",
|
||||
"button": "Deel tijdstempel URL",
|
||||
"shareTitle": "Frigate Beoordelingstijdstempel: {{camera}}"
|
||||
}
|
||||
},
|
||||
"imagePicker": {
|
||||
|
||||
@@ -167,7 +167,8 @@
|
||||
"saveAll": "Zapisz wszystkie",
|
||||
"savingAll": "Zapisywanie wszystkich…",
|
||||
"undoAll": "Cofnij wszystko",
|
||||
"retry": "Powtórz"
|
||||
"retry": "Powtórz",
|
||||
"resetToGlobal": "Przywróć ustawienie globalne"
|
||||
},
|
||||
"menu": {
|
||||
"system": "System",
|
||||
@@ -274,7 +275,10 @@
|
||||
"settings": "Ustawienia",
|
||||
"export": "Eksportuj",
|
||||
"classification": "Klasyfikacja",
|
||||
"profiles": "Profile"
|
||||
"profiles": "Profile",
|
||||
"actions": "Akcje",
|
||||
"features": "Funkcje",
|
||||
"chat": "Czat"
|
||||
},
|
||||
"role": {
|
||||
"viewer": "Przeglądający",
|
||||
@@ -328,5 +332,10 @@
|
||||
"field": {
|
||||
"optional": "Opcjonalny",
|
||||
"internalID": "Wewnętrzny identyfikator używany przez Frigate w konfiguracji i bazie danych"
|
||||
},
|
||||
"no_items": "Brak elementów",
|
||||
"validation_errors": "Błędy walidacji",
|
||||
"credentialField": {
|
||||
"savedPlaceholder": "Zapisano — pozostaw puste, aby zachować bieżącą wartość"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -72,11 +72,24 @@
|
||||
"endTimeMustAfterStartTime": "Czas zakończenia musi być późniejszy niż czas rozpoczęcia",
|
||||
"noVaildTimeSelected": "Nie wybrano prawidłowego zakresu czasu"
|
||||
},
|
||||
"view": "Widok"
|
||||
"view": "Widok",
|
||||
"queued": "Eksport dodany do kolejki. Postęp można sprawdzić na stronie eksportów.",
|
||||
"batchSuccess_one": "Rozpoczęto 1 eksport. Otwieranie przypadku.",
|
||||
"batchSuccess_few": "Rozpoczęto {{count}} eksporty Otwieranie przypadku.",
|
||||
"batchSuccess_many": "Rozpoczęto {{count}} eksportów. Otwieranie przypadku.",
|
||||
"batchPartial": "Rozpoczęto {{successful}} z {{total}} eksportów. Nieudane kamery: {{failedCameras}}",
|
||||
"batchFailed": "Nie udało się uruchomić {{total}} eksportów. Nieudane kamery: {{failedCameras}}",
|
||||
"batchQueuedSuccess_one": "Eksport dodany do kolejki. Otwieranie przypadku.",
|
||||
"batchQueuedSuccess_few": "Dodano {{count}} eksportydo kolejki. Otwieranie przypadku.",
|
||||
"batchQueuedSuccess_many": "Dodano {{count}} eksportów do kolejki. Otwieranie przypadku.",
|
||||
"batchQueuedPartial": "Dodano do kolejki {{successful}} z {{total}} eksportów. Nieudane kamery: {{failedCameras}}",
|
||||
"batchQueueFailed": "Nie udało się dodać do kolejki {{total}} eksportów. Nieudane kamery: {{failedCameras}}"
|
||||
},
|
||||
"fromTimeline": {
|
||||
"saveExport": "Zapisz Eksport",
|
||||
"previewExport": "Podgląd Eksportu"
|
||||
"previewExport": "Podgląd Eksportu",
|
||||
"queueingExport": "Kolejkowanie eksportu...",
|
||||
"useThisRange": "Użyj tego zakresu"
|
||||
},
|
||||
"multiCamera": {
|
||||
"timeRange": "Zakres czasu",
|
||||
@@ -88,7 +101,54 @@
|
||||
"detectionCount_one": "{{count}} śledzony obiekt",
|
||||
"detectionCount_few": "{{count}} śledzone obiekty",
|
||||
"detectionCount_many": "{{count}} śledzonych obiektów",
|
||||
"nameLabel": "Wyeksportuj nazwę"
|
||||
"nameLabel": "Wyeksportuj nazwę",
|
||||
"namePlaceholder": "Opcjonalna nazwa bazowa eksportów",
|
||||
"queueingButton": "Kolejkowanie eksportów...",
|
||||
"exportButton_one": "Eksport 1 kamery",
|
||||
"exportButton_few": "Eksport {{count}} kamer",
|
||||
"exportButton_many": "Eksport {{count}} kamer",
|
||||
"searchOrSelectGroup": "Szukaj lub wybierz grupę kamer ...",
|
||||
"selectAll": "Wybierz wszystkie kamery",
|
||||
"clearSelection": "Wyczyść wybór",
|
||||
"selectWithActivity": "Kamery z obiektami śledzonymi",
|
||||
"selectGroup": "Wybierz grupę",
|
||||
"noMatchingCameras": "Nie ma kamer spełniających Twoje wyszukiwanie",
|
||||
"selectedCount": "{{selected}} / {{total}} wybrane"
|
||||
},
|
||||
"case": {
|
||||
"newCaseOption": "Utwórz nowy przypadek",
|
||||
"newCaseNamePlaceholder": "Nazwa nowego przypadku",
|
||||
"newCaseDescriptionPlaceholder": "Opis przypadku",
|
||||
"label": "Przypadek",
|
||||
"nonAdminHelp": "Dla tych eksportów zostanie utworzony nowy przypadek.",
|
||||
"placeholder": "Wybierz przypadek"
|
||||
},
|
||||
"queueing": "Dodawanie eksportu do kolejki...",
|
||||
"tabs": {
|
||||
"export": "Pojedyncza kamera",
|
||||
"multiCamera": "Wiele kamer"
|
||||
},
|
||||
"multi": {
|
||||
"title_one": "Eksport 1 recenzji",
|
||||
"title_few": "Eksport {{count}} recenzji",
|
||||
"title_many": "Eksport {{count}} recenzji",
|
||||
"description": "Eksportuj każdą wybraną recenzję. Wszystkie eksporty zostaną pogrupowane w jednym przypadku.",
|
||||
"descriptionNoCase": "Eksportuj każdą wybraną recenzję.",
|
||||
"caseNamePlaceholder": "Eksport recenzji – {{date}}",
|
||||
"exportButton_one": "Eksport 1 recenzji",
|
||||
"exportButton_few": "Eksport {{count}} recenzji",
|
||||
"exportButton_many": "Eksport {{count}} recenzji",
|
||||
"exportingButton": "Eksportowanie...",
|
||||
"toast": {
|
||||
"started_one": "Rozpoczęto 1 eksport. Otwieranie przypadku.",
|
||||
"started_few": "Rozpoczęto {{count}} eksportów. Otwieranie przypadku.",
|
||||
"started_many": "Rozpoczęto {{count}} eksportów. Otwieranie przypadku.",
|
||||
"startedNoCase_one": "Rozpoczęto 1 eksport.",
|
||||
"startedNoCase_few": "Rozpoczęto {{count}} eksportów.",
|
||||
"startedNoCase_many": "Rozpoczęto {{count}} eksportów.",
|
||||
"partial": "Rozpoczęto {{successful}} z {{total}} eksportów. Niepowodzenia: {{failedItems}}",
|
||||
"failed": "Nie udało się uruchomić {{total}} eksportów. Niepowodzenia: {{failedItems}}"
|
||||
}
|
||||
}
|
||||
},
|
||||
"recording": {
|
||||
@@ -107,6 +167,14 @@
|
||||
"success": "Nagrania wideo powiązane z wybranymi elementami przeglądu zostały pomyślnie usunięte.",
|
||||
"error": "Nie udało się usunąć: {{error}}"
|
||||
}
|
||||
},
|
||||
"shareTimestamp": {
|
||||
"label": "Udostępnij znacznik czasu",
|
||||
"title": "Udostępnij znacznik czasu",
|
||||
"description": "Udostępnij adres URL z aktualnym znacznikiem czasu pozycji odtwarzacza lub wybierz niestandardowy znacznik czasu. Należy pamiętać, że nie jest to publiczny link udostępniania i jest dostępny wyłącznie dla użytkowników mających dostęp do Frigate i tej kamery.",
|
||||
"custom": "Własny znacznik czasu",
|
||||
"button": "Udostępnij adres URL ze znacznikiem czasu",
|
||||
"shareTitle": "Znacznik czasu przeglądu Frigate: {{camera}}"
|
||||
}
|
||||
},
|
||||
"streaming": {
|
||||
|
||||
@@ -176,7 +176,7 @@
|
||||
"description": "Włączone"
|
||||
},
|
||||
"audio": {
|
||||
"label": "Zdarzenia audio",
|
||||
"label": "Wykrywanie dźwięku",
|
||||
"description": "Ustawienia detekcji zdarzeń audio dla tej kamery.",
|
||||
"enabled": {
|
||||
"label": "Włącz detekcję audio",
|
||||
@@ -196,7 +196,11 @@
|
||||
},
|
||||
"filters": {
|
||||
"label": "Filtry audio",
|
||||
"description": "Ustawienia filtrów dla poszczególnych typów audio, takie jak progi pewności, używane do redukcji fałszywych alarmów."
|
||||
"description": "Ustawienia filtrów dla poszczególnych typów audio, takie jak progi pewności, używane do redukcji fałszywych alarmów.",
|
||||
"threshold": {
|
||||
"label": "Minimalna pewność wykrycia dźwięku",
|
||||
"description": "Minimalny próg pewności, aby zdarzenie audio zostało zliczone."
|
||||
}
|
||||
},
|
||||
"enabled_in_config": {
|
||||
"label": "Pierwotny stan audio",
|
||||
@@ -224,10 +228,18 @@
|
||||
},
|
||||
"birdseye": {
|
||||
"mode": {
|
||||
"label": "Tryb śledzenia"
|
||||
"label": "Tryb śledzenia",
|
||||
"description": "Tryb uwzględniania kamer w widoku z lotu ptaka: „obiekty”, „ruch” lub „ciągły”."
|
||||
},
|
||||
"order": {
|
||||
"label": "Pozycja"
|
||||
"label": "Pozycja",
|
||||
"description": "Pozycja numeryczna określająca kolejność kamery w układzie widoku z lotu ptaka."
|
||||
},
|
||||
"label": "Widok z lotu ptaka",
|
||||
"description": "Ustawienia widoku z lotu ptaka „Birdseye”, który łączy obraz z wielu kamer w jeden układ.",
|
||||
"enabled": {
|
||||
"label": "Włącz widok z lotu ptaka",
|
||||
"description": "Włącz lub wyłącz funkcję widoku z lotu ptaka."
|
||||
}
|
||||
},
|
||||
"detect": {
|
||||
@@ -236,7 +248,58 @@
|
||||
"description": "Włącza lub wyłącza wykrywanie obiektów dla tej kamery."
|
||||
},
|
||||
"stationary": {
|
||||
"label": "Konfiguracja obiektów stacjonarnych"
|
||||
"label": "Konfiguracja obiektów stacjonarnych",
|
||||
"description": "Ustawienia wykrywania i obsługi obiektów statycznych przez określony czas.",
|
||||
"interval": {
|
||||
"label": "Okres bezruchu",
|
||||
"description": "Częstotliwość (w klatkach) sprawdzania detekcji dla obiektów nieruchomych."
|
||||
},
|
||||
"threshold": {
|
||||
"label": "Próg bezruchu",
|
||||
"description": "Liczba klatek bez zmiany pozycji potrzebna do uznania obiektu za nieruchomy."
|
||||
},
|
||||
"max_frames": {
|
||||
"label": "Maksymalna liczba klatek",
|
||||
"description": "Ogranicza czas śledzenia nieruchomych obiektów przed ich usunięciem.",
|
||||
"default": {
|
||||
"label": "Domyślna maks. liczba klatek",
|
||||
"description": "Domyślna maksymalna liczba klatek śledzenia nieruchomego obiektu przed zatrzymaniem."
|
||||
},
|
||||
"objects": {
|
||||
"label": "Maksymalna liczba klatek obiektu",
|
||||
"description": "Nadpisania dla poszczególnych obiektów określające maksymalną liczbę klatek śledzenia nieruchomych obiektów."
|
||||
}
|
||||
},
|
||||
"classifier": {
|
||||
"label": "Włącz klasyfikator wizualny",
|
||||
"description": "Użyj klasyfikatora wizualnego do wykrywania rzeczywiście nieruchomych obiektów, nawet gdy ramki ograniczające drżą."
|
||||
}
|
||||
},
|
||||
"label": "Wykrywanie obiektów",
|
||||
"description": "Ustawienia roli „detection/detect” używanej do wykrywania obiektów i inicjalizacji trackerów.",
|
||||
"height": {
|
||||
"label": "Wysokość wykrywania",
|
||||
"description": "Wysokość (w pikselach) klatek używanych w strumieniu detekcji; pozostaw puste, aby użyć natywnej rozdzielczości strumienia."
|
||||
},
|
||||
"width": {
|
||||
"label": "Szerokość wykrywania",
|
||||
"description": "Szerokość (w pikselach) klatek używanych w strumieniu detekcji; pozostaw puste, aby użyć natywnej rozdzielczości strumienia."
|
||||
},
|
||||
"fps": {
|
||||
"label": "FPS wykrywania",
|
||||
"description": "Docelowa liczba klatek na sekundę używana do detekcji; niższe wartości zmniejszają użycie CPU (zalecana wartość to 5, ustaw wyższą — maksymalnie 10 — tylko jeśli śledzisz bardzo szybko poruszające się obiekty)."
|
||||
},
|
||||
"min_initialized": {
|
||||
"label": "Minimalna liczba klatek inicjalizacyjnych",
|
||||
"description": "Liczba kolejnych trafień detekcji wymagana do utworzenia śledzonego obiektu. Zwiększenie wartości zmniejsza liczbę fałszywych inicjalizacji. Wartość domyślna to fps podzielone przez 2."
|
||||
},
|
||||
"max_disappeared": {
|
||||
"label": "Maksymalna liczba pominiętych klatek",
|
||||
"description": "Liczba klatek bez detekcji, po której obiekt śledzony jest uznawany za utracony."
|
||||
},
|
||||
"annotation_offset": {
|
||||
"label": "Przesunięcie oznaczenia",
|
||||
"description": "Liczba milisekund przesunięcia adnotacji detekcji w celu lepszego dopasowania ramek ograniczających na osi czasu do nagrań; wartość może być dodatnia lub ujemna."
|
||||
}
|
||||
},
|
||||
"face_recognition": {
|
||||
@@ -245,6 +308,33 @@
|
||||
"enabled": {
|
||||
"label": "Włącz rozpoznawanie twarzy",
|
||||
"description": "Włącz lub wyłącz rozpoznawanie twarzy."
|
||||
},
|
||||
"min_area": {
|
||||
"label": "Minimalny obszar twarzy",
|
||||
"description": "Minimalny obszar twarzy (w pikselach) wymagany do podjęcia próby rozpoznania."
|
||||
}
|
||||
},
|
||||
"ffmpeg": {
|
||||
"label": "Strumienie (FFmpeg)",
|
||||
"output_args": {
|
||||
"detect": {
|
||||
"description": "Domyślne argumenty wyjściowe dla strumieni z rolą detekcji."
|
||||
},
|
||||
"record": {
|
||||
"description": "Domyślne argumenty wyjściowe dla strumieni z rolą zapisu."
|
||||
}
|
||||
},
|
||||
"retry_interval": {
|
||||
"label": "Czas ponownej próby FFmpeg",
|
||||
"description": "Czas (w sekundach) przed ponownym uruchomieniem utraconego strumienia kamery. Domyślnie: 10."
|
||||
},
|
||||
"apple_compatibility": {
|
||||
"label": "Kompatybilność z Apple",
|
||||
"description": "Włącz tagowanie HEVC, aby zapewnić lepszą zgodność z odtwarzaczami Apple podczas nagrywania w formacie H.265."
|
||||
},
|
||||
"gpu": {
|
||||
"label": "Indeks GPU",
|
||||
"description": "Domyślny indeks karty graficznej używany do akceleracji sprzętowej, jeśli jest dostępna."
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"audio": {
|
||||
"label": "Zdarzenia audio",
|
||||
"label": "Wykrywanie dźwięku",
|
||||
"enabled": {
|
||||
"label": "Włącz detekcję audio"
|
||||
},
|
||||
@@ -18,7 +18,11 @@
|
||||
},
|
||||
"filters": {
|
||||
"label": "Filtry audio",
|
||||
"description": "Ustawienia filtrów dla poszczególnych typów audio, takie jak progi pewności, używane do redukcji fałszywych alarmów."
|
||||
"description": "Ustawienia filtrów dla poszczególnych typów audio, takie jak progi pewności, używane do redukcji fałszywych alarmów.",
|
||||
"threshold": {
|
||||
"label": "Minimalna pewność wykrycia dźwięku",
|
||||
"description": "Minimalny próg pewności, aby zdarzenie audio zostało zliczone."
|
||||
}
|
||||
},
|
||||
"enabled_in_config": {
|
||||
"label": "Pierwotny stan audio",
|
||||
@@ -71,10 +75,18 @@
|
||||
},
|
||||
"birdseye": {
|
||||
"mode": {
|
||||
"label": "Tryb śledzenia"
|
||||
"label": "Tryb śledzenia",
|
||||
"description": "Tryb uwzględniania kamer w widoku z lotu ptaka: „obiekty”, „ruch” lub „ciągły”."
|
||||
},
|
||||
"order": {
|
||||
"label": "Pozycja"
|
||||
"label": "Pozycja",
|
||||
"description": "Pozycja numeryczna określająca kolejność kamery w układzie widoku z lotu ptaka."
|
||||
},
|
||||
"label": "Widok z lotu ptaka",
|
||||
"description": "Ustawienia widoku z lotu ptaka „Birdseye”, który łączy obraz z wielu kamer w jeden układ.",
|
||||
"enabled": {
|
||||
"label": "Włącz widok z lotu ptaka",
|
||||
"description": "Włącz lub wyłącz funkcję widoku z lotu ptaka."
|
||||
}
|
||||
},
|
||||
"detect": {
|
||||
@@ -82,13 +94,90 @@
|
||||
"label": "Włącz wykrywanie obiektów"
|
||||
},
|
||||
"stationary": {
|
||||
"label": "Konfiguracja obiektów stacjonarnych"
|
||||
"label": "Konfiguracja obiektów stacjonarnych",
|
||||
"description": "Ustawienia wykrywania i obsługi obiektów statycznych przez określony czas.",
|
||||
"interval": {
|
||||
"label": "Okres bezruchu",
|
||||
"description": "Częstotliwość (w klatkach) sprawdzania detekcji dla obiektów nieruchomych."
|
||||
},
|
||||
"threshold": {
|
||||
"label": "Próg bezruchu",
|
||||
"description": "Liczba klatek bez zmiany pozycji potrzebna do uznania obiektu za nieruchomy."
|
||||
},
|
||||
"max_frames": {
|
||||
"label": "Maksymalna liczba klatek",
|
||||
"description": "Ogranicza czas śledzenia nieruchomych obiektów przed ich usunięciem.",
|
||||
"default": {
|
||||
"label": "Domyślna maks. liczba klatek",
|
||||
"description": "Domyślna maksymalna liczba klatek śledzenia nieruchomego obiektu przed zatrzymaniem."
|
||||
},
|
||||
"objects": {
|
||||
"label": "Maksymalna liczba klatek obiektu",
|
||||
"description": "Nadpisania dla poszczególnych obiektów określające maksymalną liczbę klatek śledzenia nieruchomych obiektów."
|
||||
}
|
||||
},
|
||||
"classifier": {
|
||||
"label": "Włącz klasyfikator wizualny",
|
||||
"description": "Użyj klasyfikatora wizualnego do wykrywania rzeczywiście nieruchomych obiektów, nawet gdy ramki ograniczające drżą."
|
||||
}
|
||||
},
|
||||
"label": "Wykrywanie obiektów",
|
||||
"description": "Ustawienia roli „detection/detect” używanej do wykrywania obiektów i inicjalizacji trackerów.",
|
||||
"height": {
|
||||
"label": "Wysokość wykrywania",
|
||||
"description": "Wysokość (w pikselach) klatek używanych w strumieniu detekcji; pozostaw puste, aby użyć natywnej rozdzielczości strumienia."
|
||||
},
|
||||
"width": {
|
||||
"label": "Szerokość wykrywania",
|
||||
"description": "Szerokość (w pikselach) klatek używanych w strumieniu detekcji; pozostaw puste, aby użyć natywnej rozdzielczości strumienia."
|
||||
},
|
||||
"fps": {
|
||||
"label": "FPS wykrywania",
|
||||
"description": "Docelowa liczba klatek na sekundę używana do detekcji; niższe wartości zmniejszają użycie CPU (zalecana wartość to 5, ustaw wyższą — maksymalnie 10 — tylko jeśli śledzisz bardzo szybko poruszające się obiekty)."
|
||||
},
|
||||
"min_initialized": {
|
||||
"label": "Minimalna liczba klatek inicjalizacyjnych",
|
||||
"description": "Liczba kolejnych trafień detekcji wymagana do utworzenia śledzonego obiektu. Zwiększenie wartości zmniejsza liczbę fałszywych inicjalizacji. Wartość domyślna to fps podzielone przez 2."
|
||||
},
|
||||
"max_disappeared": {
|
||||
"label": "Maksymalna liczba pominiętych klatek",
|
||||
"description": "Liczba klatek bez detekcji, po której obiekt śledzony jest uznawany za utracony."
|
||||
},
|
||||
"annotation_offset": {
|
||||
"label": "Przesunięcie oznaczenia",
|
||||
"description": "Liczba milisekund przesunięcia adnotacji detekcji w celu lepszego dopasowania ramek ograniczających na osi czasu do nagrań; wartość może być dodatnia lub ujemna."
|
||||
}
|
||||
},
|
||||
"face_recognition": {
|
||||
"label": "Rozpoznawanie twarzy",
|
||||
"enabled": {
|
||||
"label": "Włącz rozpoznawanie twarzy"
|
||||
},
|
||||
"min_area": {
|
||||
"label": "Minimalny obszar twarzy",
|
||||
"description": "Minimalny obszar twarzy (w pikselach) wymagany do podjęcia próby rozpoznania."
|
||||
}
|
||||
},
|
||||
"ffmpeg": {
|
||||
"output_args": {
|
||||
"detect": {
|
||||
"description": "Domyślne argumenty wyjściowe dla strumieni z rolą detekcji."
|
||||
},
|
||||
"record": {
|
||||
"description": "Domyślne argumenty wyjściowe dla strumieni z rolą zapisu."
|
||||
}
|
||||
},
|
||||
"retry_interval": {
|
||||
"label": "Czas ponownej próby FFmpeg",
|
||||
"description": "Czas (w sekundach) przed ponownym uruchomieniem utraconego strumienia kamery. Domyślnie: 10."
|
||||
},
|
||||
"apple_compatibility": {
|
||||
"label": "Kompatybilność z Apple",
|
||||
"description": "Włącz tagowanie HEVC, aby zapewnić lepszą zgodność z odtwarzaczami Apple podczas nagrywania w formacie H.265."
|
||||
},
|
||||
"gpu": {
|
||||
"label": "Indeks GPU",
|
||||
"description": "Domyślny indeks karty graficznej używany do akceleracji sprzętowej, jeśli jest dostępna."
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -30,7 +30,8 @@
|
||||
"trainedModel": "Model pomyślnie wytrenowany.",
|
||||
"trainingModel": "Pomyślnie uruchomiono trenowanie modelu.",
|
||||
"updatedModel": "Pomyślnie zaktualizowane ustawienia modelu",
|
||||
"renamedCategory": "Pomyślnie zmieniono nazwę klasy na {{name}}"
|
||||
"renamedCategory": "Pomyślnie zmieniono nazwę klasy na {{name}}",
|
||||
"reclassifiedImage": "Pomyślne przeklasyfikowanie obrazu"
|
||||
},
|
||||
"error": {
|
||||
"deleteImageFailed": "Nie udało się usunąć: {{errorMessage}}",
|
||||
@@ -40,7 +41,8 @@
|
||||
"trainingFailed": "Trening modelu zakończył się niepowodzeniem. Sprawdź logi Frigate aby uzyskać więcej informacji.",
|
||||
"updateModelFailed": "Nie udało się zaktualizować modelu: {{errorMessage}}",
|
||||
"trainingFailedToStart": "Nie udało się rozpocząć trenowania modelu: {{errorMessage}}",
|
||||
"renameCategoryFailed": "Nie udało się zmienić nazwy klasy: {{errorMessage}}"
|
||||
"renameCategoryFailed": "Nie udało się zmienić nazwy klasy: {{errorMessage}}",
|
||||
"reclassifyFailed": "Niepowodzenie zmiany klasyfikacji obrazu: {{errorMessage}}"
|
||||
}
|
||||
},
|
||||
"deleteCategory": {
|
||||
@@ -191,7 +193,14 @@
|
||||
"missingStatesWarning": {
|
||||
"title": "Przykłady brakujących stanów",
|
||||
"description": "Aby uzyskać najlepsze wyniki, zaleca się wybranie przykładów dla wszystkich stanów. Można kontynuować bez wybierania wszystkich stanów, ale model nie zostanie wytrenowany, dopóki wszystkie stany nie będą miały obrazów. Po kontynuowaniu należy użyć widoku Ostatnie klasyfikacje, aby sklasyfikować obrazy dla brakujących stanów, a następnie wytrenować model."
|
||||
},
|
||||
"refreshExamples": "Generuj nowe przykłady",
|
||||
"refreshConfirm": {
|
||||
"title": "Czy generować nowe przykłady?",
|
||||
"description": "Spowoduje to wygenerowanie nowego zestawu obrazów i wyczyszczenie wszystkich zaznaczeń, w tym dotychczasowych klas. Konieczne będzie ponowne wybranie przykładów dla wszystkich klas."
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"reclassifyImageAs": "Klasyfikuj jako:",
|
||||
"reclassifyImage": "Zmiana klasyfikacji obrazu"
|
||||
}
|
||||
|
||||
@@ -497,5 +497,6 @@
|
||||
"echo": "Eco",
|
||||
"mains_hum": "Zumbido Elétrico",
|
||||
"sidetone": "Retorno de Voz",
|
||||
"throbbing": "Latejante"
|
||||
"throbbing": "Latejante",
|
||||
"sodeling": "Soldagem"
|
||||
}
|
||||
|
||||
@@ -210,7 +210,8 @@
|
||||
"id": "Bahasa Indonesia (Indonésio)",
|
||||
"ur": "اردو (Urdu)",
|
||||
"hr": "Hrvatski (Croata)",
|
||||
"bs": "Bosanski (Bósnio)"
|
||||
"bs": "Bosanski (Bósnio)",
|
||||
"zhHant": "Chinês Tradicional"
|
||||
},
|
||||
"systemLogs": "Logs de sistema",
|
||||
"settings": "Configurações",
|
||||
|
||||
@@ -68,7 +68,10 @@
|
||||
}
|
||||
},
|
||||
"birdseye": "Visão Panorâmica"
|
||||
}
|
||||
},
|
||||
"showAll": "Exibir todos os grupos de câmeras",
|
||||
"showLess": "Mostrar menos",
|
||||
"editGroups": "Editar grupos de câmeras"
|
||||
},
|
||||
"debug": {
|
||||
"options": {
|
||||
|
||||
@@ -24,6 +24,9 @@
|
||||
},
|
||||
"state": {
|
||||
"submitted": "Enviado"
|
||||
},
|
||||
"toast": {
|
||||
"error": "Falha ao enviar para o Frigate+. Verifique sua conexão de rede e tente novamente."
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -56,15 +59,24 @@
|
||||
"toast": {
|
||||
"success": "Exportação iniciada com sucesso. Veja o arquivo na tela exportar.",
|
||||
"error": {
|
||||
"failed": "Falha em iniciar exportação: {{error}}",
|
||||
"failed": "Falha ao iniciar exportação: {{error}}",
|
||||
"endTimeMustAfterStartTime": "Tempo de finalização deve ser após tempo de início",
|
||||
"noVaildTimeSelected": "Nenhuma faixa de tempo válida selecionada"
|
||||
},
|
||||
"view": "Ver"
|
||||
"view": "Ver",
|
||||
"batchQueuedSuccess_one": "1 exportação na fila. Abrindo o caso agora.",
|
||||
"batchQueuedSuccess_many": "{{count}} exportações colocadas na fila. Abrindo o caso agora.",
|
||||
"batchQueuedSuccess_other": "",
|
||||
"batchQueuedPartial": "{{successful}} de {{total}} exportações na fila. Câmeras com falha: {{failedCameras}}",
|
||||
"batchQueueFailed": "Falha ao enfileirar {{total}} exportações. Câmeras com falha: {{failedCameras}}",
|
||||
"batchPartial": "Iniciadas {{successful}} de {{total}} exportações. Câmeras com falha: {{failedCameras}}",
|
||||
"batchFailed": "Falha ao iniciar {{total}} exportações. Câmeras com falha: {{failedCameras}}"
|
||||
},
|
||||
"fromTimeline": {
|
||||
"saveExport": "Salvar Exportação",
|
||||
"previewExport": "Pré-Visualizar Exportação"
|
||||
"previewExport": "Pré-Visualizar Exportação",
|
||||
"queueingExport": "Enfileirando exportação...",
|
||||
"useThisRange": "Use esta faixa"
|
||||
},
|
||||
"case": {
|
||||
"label": "Caso",
|
||||
@@ -94,7 +106,14 @@
|
||||
"queueingButton": "Exportações na fila...",
|
||||
"exportButton_one": "Exportar câmera",
|
||||
"exportButton_many": "Exportar {{count}} câmeras",
|
||||
"exportButton_other": "Exportar {{count}} câmeras"
|
||||
"exportButton_other": "Exportar {{count}} câmeras",
|
||||
"searchOrSelectGroup": "Procurar, ou selecionar um grupo de câmeras...",
|
||||
"selectAll": "Selecionar todas as câmeras",
|
||||
"clearSelection": "Limpar seleção",
|
||||
"selectWithActivity": "Câmeras com rastreamento de objetos",
|
||||
"selectGroup": "Selecione grupo",
|
||||
"noMatchingCameras": "Nenhuma câmera corresponde à sua pesquisa",
|
||||
"selectedCount": "{{selected}} / {{total}} selecionados"
|
||||
},
|
||||
"multi": {
|
||||
"title_one": "Exportar análise",
|
||||
@@ -106,7 +125,12 @@
|
||||
"exportButton_one": "Exportar análise",
|
||||
"exportButton_many": "Exportar {{count}} análises",
|
||||
"exportButton_other": "Exportar {{count}} análises",
|
||||
"exportingButton": "Exportando..."
|
||||
"exportingButton": "Exportando...",
|
||||
"toast": {
|
||||
"started_one": "Uma exportação iniciada. Abrindo o caso agora.",
|
||||
"started_many": "Iniciadas {{count}} exportações. Abrindo o caso agora.",
|
||||
"started_other": ""
|
||||
}
|
||||
}
|
||||
},
|
||||
"streaming": {
|
||||
@@ -154,6 +178,14 @@
|
||||
"export": "Exportar",
|
||||
"deleteNow": "Deletar Agora",
|
||||
"markAsUnreviewed": "Marcar como não revisado"
|
||||
},
|
||||
"shareTimestamp": {
|
||||
"label": "Compartilhar marca de tempo",
|
||||
"title": "Compartilhar marca de tempo",
|
||||
"description": "Compartilhe uma URL com marca de tempo da posição atual da reprodução ou escolha uma marca de tempo personalizada. Observe que esta não é uma URL de compartilhamento público e só pode ser acessada por usuários que tenham acesso ao Frigate e a esta câmera.",
|
||||
"custom": "Marcação de data/hora personalizado",
|
||||
"button": "Compartilhar URL com marcação de tempo",
|
||||
"shareTitle": "Marcação de data/hora da análise do Frigate: {{camera}}"
|
||||
}
|
||||
},
|
||||
"imagePicker": {
|
||||
|
||||
@@ -4,7 +4,8 @@
|
||||
"noPreviewFoundFor": "Nenhuma Pré-Visualização Encontrada em {{cameraName}}",
|
||||
"submitFrigatePlus": {
|
||||
"title": "Enviar esse frame para Frigate+?",
|
||||
"submit": "Enviar"
|
||||
"submit": "Enviar",
|
||||
"previewError": "Não foi possível carregar a prévia do instantâneo. A gravação pode não estar disponível no momento."
|
||||
},
|
||||
"livePlayerRequiredIOSVersion": "iOS 17.1 ou superior é necessário para esse tipo de transmissão ao vivo.",
|
||||
"streamOffline": {
|
||||
@@ -47,5 +48,6 @@
|
||||
"error": {
|
||||
"submitFrigatePlusFailed": "Falha em submeter quadro ao Frigate+"
|
||||
}
|
||||
}
|
||||
},
|
||||
"cameraOff": "A câmera está desligada"
|
||||
}
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
"description": "Habilitado"
|
||||
},
|
||||
"audio": {
|
||||
"label": "Eventos de áudio",
|
||||
"label": "Detecção de áudio",
|
||||
"description": "Configurações para detecção de eventos baseados em áudio para esta câmera.",
|
||||
"enabled": {
|
||||
"label": "Habilitar detecção de áudio",
|
||||
@@ -28,11 +28,15 @@
|
||||
},
|
||||
"listen": {
|
||||
"label": "Tipos de escuta",
|
||||
"description": "Lista de tipos de eventos de áudio a serem detectados (por exemplo: latido, alarme de incêndio, grito, fala, berro)."
|
||||
"description": "Lista de tipos de eventos de áudio a serem detectados (por exemplo: latido, alarme de incêndio, fala, grito)."
|
||||
},
|
||||
"filters": {
|
||||
"label": "Filtros de áudio",
|
||||
"description": "Configurações de filtro por tipo de áudio, como limites de confiança, usadas para reduzir falsos positivos."
|
||||
"description": "Configurações de filtro por tipo de áudio, como limites de confiança, usadas para reduzir falsos positivos.",
|
||||
"threshold": {
|
||||
"label": "Confiança mínima do áudio",
|
||||
"description": "Limite mínimo de confiança para que o evento de áudio seja contabilizado."
|
||||
}
|
||||
},
|
||||
"enabled_in_config": {
|
||||
"label": "Estado de áudio original",
|
||||
@@ -47,11 +51,122 @@
|
||||
"audio_transcription": {
|
||||
"label": "Transcrição de áudio",
|
||||
"enabled": {
|
||||
"label": "Habilitar transcrição"
|
||||
"label": "Habilitar transcrição",
|
||||
"description": "Ative ou desative a transcrição de eventos de áudio acionada manualmente."
|
||||
},
|
||||
"live_enabled": {
|
||||
"label": "Transcrição em tempo real"
|
||||
"label": "Transcrição em tempo real",
|
||||
"description": "Ative a transcrição ao vivo por streaming para o áudio à medida que ele é recebido."
|
||||
},
|
||||
"description": "Configurações de transcrição de áudio e voz ao vivo para eventos e legendas em tempo real."
|
||||
"description": "Configurações de transcrição de áudio e voz ao vivo para eventos e legendas em tempo real.",
|
||||
"enabled_in_config": {
|
||||
"label": "Estado original da transcrição"
|
||||
}
|
||||
},
|
||||
"detect": {
|
||||
"enabled": {
|
||||
"label": "Ativar detecção de objetos",
|
||||
"description": "Ative ou desative a detecção de objetos para esta câmera."
|
||||
},
|
||||
"height": {
|
||||
"label": "Detectar altura",
|
||||
"description": "Altura (em pixels) dos quadros usados para o fluxo de detecção; deixe em branco para usar a resolução nativa do fluxo."
|
||||
},
|
||||
"width": {
|
||||
"label": "Detectar largura",
|
||||
"description": "Largura (em pixels) dos quadros usados para o fluxo de detecção; deixe em branco para usar a resolução nativa do fluxo."
|
||||
},
|
||||
"fps": {
|
||||
"label": "Detectar FPS",
|
||||
"description": "Taxa de quadros por segundo desejada para a execução da detecção; valores mais baixos reduzem o uso da CPU (o valor recomendado é 5; defina um valor mais alto — no máximo 10 — apenas se estiver rastreando objetos que se movem extremamente rápido)."
|
||||
},
|
||||
"min_initialized": {
|
||||
"label": "Quadros de inicialização mínimos",
|
||||
"description": "Número de detecções consecutivas necessárias antes de criar um objeto rastreado. Aumente esse valor para reduzir inicializações falsas. O valor padrão é o fps dividido por 2."
|
||||
},
|
||||
"max_disappeared": {
|
||||
"label": "Máximo de quadros perdidos",
|
||||
"description": "Número de quadros sem detecção antes que um objeto rastreado seja considerado desaparecido."
|
||||
},
|
||||
"stationary": {
|
||||
"label": "Configuração de objetos estáticos",
|
||||
"description": "Configurações para detectar e gerenciar objetos que permanecem parados por um período de tempo.",
|
||||
"interval": {
|
||||
"label": "Intervalo estacionário",
|
||||
"description": "Com que frequência (em quadros) realizar uma verificação de detecção para confirmar um objeto estacionário."
|
||||
},
|
||||
"threshold": {
|
||||
"label": "Limiar estacionário",
|
||||
"description": "Número de quadros sem alteração de posição necessários para marcar um objeto como estacionário."
|
||||
},
|
||||
"max_frames": {
|
||||
"label": "Quadros máximos",
|
||||
"description": "Limita por quanto tempo objetos estacionários são rastreados antes de serem descartados.",
|
||||
"default": {
|
||||
"label": "Máximo de quadros padrão",
|
||||
"description": "Número máximo padrão de quadros para rastrear um objeto estacionário antes de parar."
|
||||
},
|
||||
"objects": {
|
||||
"label": "Quadros máximos do objeto",
|
||||
"description": "Substituições por objeto para o número máximo de quadros de rastreamento de objetos estacionários."
|
||||
}
|
||||
},
|
||||
"classifier": {
|
||||
"label": "Ativar classificador visual",
|
||||
"description": "Use um classificador visual para detectar objetos verdadeiramente estacionários, mesmo quando as caixas delimitadoras oscilam."
|
||||
}
|
||||
},
|
||||
"annotation_offset": {
|
||||
"label": "Deslocamento da anotação",
|
||||
"description": "Milissegundos para deslocar as anotações de detecção, a fim de alinhar melhor as caixas delimitadoras da linha do tempo com as gravações; pode ser um valor positivo ou negativo."
|
||||
},
|
||||
"label": "Detecção de Objetos",
|
||||
"description": "Configurações para a função de detecção (*detect*) usada para executar a detecção de objetos e inicializar rastreadores."
|
||||
},
|
||||
"face_recognition": {
|
||||
"label": "Reconhecimento facial",
|
||||
"description": "Configurações de detecção e reconhecimento facial para esta câmera.",
|
||||
"enabled": {
|
||||
"label": "Ativar reconhecimento facial",
|
||||
"description": "Ative ou desative o reconhecimento facial."
|
||||
},
|
||||
"min_area": {
|
||||
"label": "Área mínima do rosto",
|
||||
"description": "Área mínima (em pixels) da caixa delimitadora de um rosto detectado necessária para tentar o reconhecimento."
|
||||
}
|
||||
},
|
||||
"ffmpeg": {
|
||||
"label": "Fluxos (FFmpeg)",
|
||||
"description": "Entradas de fluxo de câmera e opções do FFmpeg, incluindo caminho do binário, argumentos, aceleração de hardware (hwaccel) e argumentos de saída por função.",
|
||||
"path": {
|
||||
"label": "Caminho do FFmpeg",
|
||||
"description": "Caminho para o binário do FFmpeg a ser utilizado ou um alias de versão (\"7.0\" ou \"8.0\")."
|
||||
},
|
||||
"global_args": {
|
||||
"label": "Argumentos globais do FFmpeg",
|
||||
"description": "Argumentos globais passados para processos do FFmpeg."
|
||||
},
|
||||
"hwaccel_args": {
|
||||
"label": "Argumentos de aceleração de hardware",
|
||||
"description": "Argumentos de aceleração de hardware para o FFmpeg. Recomenda-se o uso de predefinições específicas do provedor."
|
||||
},
|
||||
"input_args": {
|
||||
"label": "Argumentos de entrada"
|
||||
}
|
||||
},
|
||||
"birdseye": {
|
||||
"mode": {
|
||||
"label": "Modo de rastreamento",
|
||||
"description": "Modo de inclusão de câmeras no Birdseye: 'objetos', 'movimento' ou 'contínuo'."
|
||||
},
|
||||
"order": {
|
||||
"label": "Posição",
|
||||
"description": "Posição numérica que controla a ordem da câmera no layout de vista aérea (Birdseye)."
|
||||
},
|
||||
"label": "Birdseye",
|
||||
"description": "Configurações para a visualização composta \"Birdseye\", que combina múltiplas transmissões de câmera em um único layout.",
|
||||
"enabled": {
|
||||
"label": "Ativar Birdseye"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -34,11 +34,15 @@
|
||||
},
|
||||
"listen": {
|
||||
"label": "Tipos de escuta",
|
||||
"description": "Lista de tipos de eventos de áudio a serem detectados (por exemplo: latido, alarme de incêndio, grito, fala, berro)."
|
||||
"description": "Lista de tipos de eventos de áudio a serem detectados (por exemplo: latido, alarme de incêndio, fala, grito)."
|
||||
},
|
||||
"filters": {
|
||||
"label": "Filtros de áudio",
|
||||
"description": "Configurações de filtro por tipo de áudio, como limites de confiança, usadas para reduzir falsos positivos."
|
||||
"description": "Configurações de filtro por tipo de áudio, como limites de confiança, usadas para reduzir falsos positivos.",
|
||||
"threshold": {
|
||||
"label": "Confiança mínima do áudio",
|
||||
"description": "Limite mínimo de confiança para que o evento de áudio seja contabilizado."
|
||||
}
|
||||
},
|
||||
"enabled_in_config": {
|
||||
"label": "Estado de áudio original",
|
||||
@@ -47,7 +51,8 @@
|
||||
"num_threads": {
|
||||
"label": "Threads de detecção",
|
||||
"description": "Número de threads a serem usadas para o processamento de detecção de áudio."
|
||||
}
|
||||
},
|
||||
"label": "Detecção de áudio"
|
||||
},
|
||||
"auth": {
|
||||
"label": "Autenticação",
|
||||
@@ -82,8 +87,110 @@
|
||||
"audio_transcription": {
|
||||
"label": "Transcrição de áudio",
|
||||
"live_enabled": {
|
||||
"label": "Transcrição em tempo real"
|
||||
"label": "Transcrição em tempo real",
|
||||
"description": "Ative a transcrição ao vivo por streaming para o áudio à medida que ele é recebido."
|
||||
},
|
||||
"description": "Configurações de transcrição de áudio e voz ao vivo para eventos e legendas em tempo real."
|
||||
},
|
||||
"detect": {
|
||||
"enabled": {
|
||||
"label": "Ativar detecção de objetos"
|
||||
},
|
||||
"height": {
|
||||
"label": "Detectar altura",
|
||||
"description": "Altura (em pixels) dos quadros usados para o fluxo de detecção; deixe em branco para usar a resolução nativa do fluxo."
|
||||
},
|
||||
"width": {
|
||||
"label": "Detectar largura",
|
||||
"description": "Largura (em pixels) dos quadros usados para o fluxo de detecção; deixe em branco para usar a resolução nativa do fluxo."
|
||||
},
|
||||
"fps": {
|
||||
"label": "Detectar FPS",
|
||||
"description": "Taxa de quadros por segundo desejada para a execução da detecção; valores mais baixos reduzem o uso da CPU (o valor recomendado é 5; defina um valor mais alto — no máximo 10 — apenas se estiver rastreando objetos que se movem extremamente rápido)."
|
||||
},
|
||||
"min_initialized": {
|
||||
"label": "Quadros de inicialização mínimos",
|
||||
"description": "Número de detecções consecutivas necessárias antes de criar um objeto rastreado. Aumente esse valor para reduzir inicializações falsas. O valor padrão é o fps dividido por 2."
|
||||
},
|
||||
"max_disappeared": {
|
||||
"label": "Máximo de quadros perdidos",
|
||||
"description": "Número de quadros sem detecção antes que um objeto rastreado seja considerado desaparecido."
|
||||
},
|
||||
"stationary": {
|
||||
"label": "Configuração de objetos estáticos",
|
||||
"description": "Configurações para detectar e gerenciar objetos que permanecem parados por um período de tempo.",
|
||||
"interval": {
|
||||
"label": "Intervalo estacionário",
|
||||
"description": "Com que frequência (em quadros) realizar uma verificação de detecção para confirmar um objeto estacionário."
|
||||
},
|
||||
"threshold": {
|
||||
"label": "Limiar estacionário",
|
||||
"description": "Número de quadros sem alteração de posição necessários para marcar um objeto como estacionário."
|
||||
},
|
||||
"max_frames": {
|
||||
"label": "Quadros máximos",
|
||||
"description": "Limita por quanto tempo objetos estacionários são rastreados antes de serem descartados.",
|
||||
"default": {
|
||||
"label": "Máximo de quadros padrão",
|
||||
"description": "Número máximo padrão de quadros para rastrear um objeto estacionário antes de parar."
|
||||
},
|
||||
"objects": {
|
||||
"label": "Quadros máximos do objeto",
|
||||
"description": "Substituições por objeto para o número máximo de quadros de rastreamento de objetos estacionários."
|
||||
}
|
||||
},
|
||||
"classifier": {
|
||||
"label": "Ativar classificador visual",
|
||||
"description": "Use um classificador visual para detectar objetos verdadeiramente estacionários, mesmo quando as caixas delimitadoras oscilam."
|
||||
}
|
||||
},
|
||||
"annotation_offset": {
|
||||
"label": "Deslocamento da anotação",
|
||||
"description": "Milissegundos para deslocar as anotações de detecção, a fim de alinhar melhor as caixas delimitadoras da linha do tempo com as gravações; pode ser um valor positivo ou negativo."
|
||||
},
|
||||
"label": "Detecção de Objetos",
|
||||
"description": "Configurações para a função de detecção (*detect*) usada para executar a detecção de objetos e inicializar rastreadores."
|
||||
},
|
||||
"face_recognition": {
|
||||
"label": "Reconhecimento facial",
|
||||
"enabled": {
|
||||
"label": "Ativar reconhecimento facial"
|
||||
},
|
||||
"min_area": {
|
||||
"label": "Área mínima do rosto",
|
||||
"description": "Área mínima (em pixels) da caixa delimitadora de um rosto detectado necessária para tentar o reconhecimento."
|
||||
}
|
||||
},
|
||||
"ffmpeg": {
|
||||
"path": {
|
||||
"label": "Caminho do FFmpeg",
|
||||
"description": "Caminho para o binário do FFmpeg a ser utilizado ou um alias de versão (\"7.0\" ou \"8.0\")."
|
||||
},
|
||||
"global_args": {
|
||||
"label": "Argumentos globais do FFmpeg",
|
||||
"description": "Argumentos globais passados para processos do FFmpeg."
|
||||
},
|
||||
"hwaccel_args": {
|
||||
"label": "Argumentos de aceleração de hardware",
|
||||
"description": "Argumentos de aceleração de hardware para o FFmpeg. Recomenda-se o uso de predefinições específicas do provedor."
|
||||
},
|
||||
"input_args": {
|
||||
"label": "Argumentos de entrada"
|
||||
}
|
||||
},
|
||||
"birdseye": {
|
||||
"mode": {
|
||||
"label": "Modo de rastreamento",
|
||||
"description": "Modo de inclusão de câmeras no Birdseye: 'objetos', 'movimento' ou 'contínuo'."
|
||||
},
|
||||
"order": {
|
||||
"label": "Posição",
|
||||
"description": "Posição numérica que controla a ordem da câmera no layout de vista aérea (Birdseye)."
|
||||
},
|
||||
"label": "Birdseye",
|
||||
"description": "Configurações para a visualização composta \"Birdseye\", que combina múltiplas transmissões de câmera em um único layout.",
|
||||
"enabled": {
|
||||
"label": "Ativar Birdseye"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -64,5 +64,10 @@
|
||||
"retention": "Retenção",
|
||||
"events": "Eventos"
|
||||
}
|
||||
},
|
||||
"ffmpeg": {
|
||||
"cameras": {
|
||||
"cameraFfmpeg": "Argumentos do FFmpeg específicos para a câmera"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -28,5 +28,8 @@
|
||||
"detectRequired": "Pelo menos um fluxo de entrada deve ter a função 'detectar' atribuída.",
|
||||
"hwaccelDetectOnly": "Somente o fluxo de entrada com a função de detecção pode definir argumentos de aceleração de hardware."
|
||||
}
|
||||
},
|
||||
"detect": {
|
||||
"dimensionMustBeEven": "Deve ser um número par."
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1 +1,63 @@
|
||||
{}
|
||||
{
|
||||
"documentTitle": "Frigate-Chat",
|
||||
"title": "Chat-Frigate",
|
||||
"subtitle": "Seu assistente de IA para gerenciamento de câmeras e insights",
|
||||
"placeholder": "Pergunte o que quiser...",
|
||||
"error": "Algo deu errado. Por favor, tente novamente.",
|
||||
"processing": "Processando...",
|
||||
"toolsUsed": "Usado: {{tools}}",
|
||||
"showTools": "Mostrar ferramentas ({{count}})",
|
||||
"hideTools": "Ocultar ferramentas",
|
||||
"call": "Chamar",
|
||||
"result": "Resultado",
|
||||
"arguments": "Argumentos:",
|
||||
"response": "Resposta:",
|
||||
"attachment_chip_label": "{{label}} em {{camera}}",
|
||||
"attachment_chip_remove": "Remover anexo",
|
||||
"open_in_explore": "Abrir no Explorar",
|
||||
"attach_event_aria": "Anexar evento {{eventId}}",
|
||||
"attachment_picker_paste_label": "Ou cole o ID do evento",
|
||||
"attachment_picker_attach": "Anexar",
|
||||
"attachment_picker_placeholder": "Anexar um evento",
|
||||
"quick_reply_find_similar": "Encontre avistamentos semelhantes",
|
||||
"quick_reply_tell_me_more": "Conte-me mais sobre isso",
|
||||
"quick_reply_when_else": "Em que outra ocasião isso foi visto?",
|
||||
"quick_reply_find_similar_text": "Encontre avistamentos semelhantes a este.",
|
||||
"quick_reply_tell_me_more_text": "Conte-me mais sobre este.",
|
||||
"quick_reply_when_else_text": "Em que outra ocasião isso foi visto?",
|
||||
"anchor": "Referência",
|
||||
"similarity_score": "Semelhança",
|
||||
"no_similar_objects_found": "Nenhum objeto semelhante encontrado.",
|
||||
"semantic_search_required": "A busca semântica deve estar habilitada para encontrar objetos semelhantes.",
|
||||
"send": "Enviar",
|
||||
"suggested_requests": "Experimente perguntar:",
|
||||
"starting_requests": {
|
||||
"show_recent_events": "Mostrar eventos recentes",
|
||||
"show_camera_status": "Mostrar status da câmera",
|
||||
"recap": "O que aconteceu enquanto eu estava fora?",
|
||||
"watch_camera": "Monitore uma câmera em busca de atividade"
|
||||
},
|
||||
"starting_requests_prompts": {
|
||||
"show_recent_events": "Mostre-me os eventos recentes da última hora",
|
||||
"show_camera_status": "Qual é o status atual das minhas câmeras?",
|
||||
"recap": "O que aconteceu enquanto eu estava fora?",
|
||||
"watch_camera": "Fique de olho na porta da frente e me avise se alguém aparecer"
|
||||
},
|
||||
"new_chat": "Novo chat",
|
||||
"settings": {
|
||||
"title": "Configurações do chat",
|
||||
"show_stats": {
|
||||
"title": "Mostrar estatísticas",
|
||||
"desc": "Exibir a taxa de geração e o tamanho do contexto para respostas de chat.",
|
||||
"while_generating": "Durante a geração",
|
||||
"always": "Sempre"
|
||||
},
|
||||
"auto_scroll": {
|
||||
"title": "Rolagem automática",
|
||||
"desc": "Acompanhe as novas mensagens à medida que chegam."
|
||||
}
|
||||
},
|
||||
"stats": {
|
||||
"context": "{{tokens}} tokens"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
"toast": {
|
||||
"success": {
|
||||
"deletedCategory_one": "Classe Apagada",
|
||||
"deletedCategory_many": "",
|
||||
"deletedCategory_many": "Classes apagadas",
|
||||
"deletedCategory_other": "",
|
||||
"deletedImage_one": "Imagen Apagada",
|
||||
"deletedImage_many": "Imagens Apagadas",
|
||||
@@ -94,7 +94,14 @@
|
||||
},
|
||||
"noModels": {
|
||||
"object": {
|
||||
"title": "Nenhum Modelo de Classificação de Objetos"
|
||||
"title": "Nenhum Modelo de Classificação de Objetos",
|
||||
"description": "Crie um modelo personalizado para classificar objetos detectados.",
|
||||
"buttonText": "Criar modelo de objeto"
|
||||
},
|
||||
"state": {
|
||||
"title": "Modelos de Classificação Sem Estado",
|
||||
"description": "Crie um modelo personalizado para monitorar e classificar mudanças de estado em áreas específicas da câmera.",
|
||||
"buttonText": "Criar modelo de estado"
|
||||
}
|
||||
},
|
||||
"deleteDatasetImages": {
|
||||
@@ -104,5 +111,13 @@
|
||||
"title": "Editar Modelo de Classificação",
|
||||
"descriptionState": "Edite as classes deste modelo de classificação de estado. As alterações exigirão treinar novamente o modelo.",
|
||||
"descriptionObject": "Edite o tipo de objeto e tipo de classificação para este modelo de classificação de objeto."
|
||||
},
|
||||
"reclassifyImageAs": "Reclassificar imagem como:",
|
||||
"reclassifyImage": "Reclassificar imagem",
|
||||
"wizard": {
|
||||
"title": "Criar nova classificação",
|
||||
"steps": {
|
||||
"nameAndDefine": "Nomear e definir"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -72,7 +72,11 @@
|
||||
"title": "Reconhecimentos Recentes",
|
||||
"aria": "Selecionar reconhecimentos recentes",
|
||||
"empty": "Não há tentativas recentes de reconhecimento facial",
|
||||
"titleShort": "Recente"
|
||||
"titleShort": "Recente",
|
||||
"emptyNoLibrary": {
|
||||
"title": "Carregue uma foto de rosto",
|
||||
"description": "Você deve adicionar pelo menos um rosto à biblioteca para que o reconhecimento facial funcione."
|
||||
}
|
||||
},
|
||||
"selectFace": "Selecionar Rosto",
|
||||
"trainFaceAs": "Treinar Rosto como:",
|
||||
@@ -89,7 +93,8 @@
|
||||
"renamedFace": "O rosto foi renomeado com sucesso para {{name}}",
|
||||
"deletedName_one": "{{count}} rosto foi deletado com sucesso.",
|
||||
"deletedName_many": "{{count}} rostos foram deletados com sucesso.",
|
||||
"deletedName_other": "{{count}} rostos foram deletados com sucesso."
|
||||
"deletedName_other": "{{count}} rostos foram deletados com sucesso.",
|
||||
"reclassifiedFace": "Rosto reclassificado com sucesso."
|
||||
},
|
||||
"error": {
|
||||
"uploadingImageFailed": "Falha ao enviar a imagem: {{errorMessage}}",
|
||||
@@ -98,7 +103,10 @@
|
||||
"deleteNameFailed": "Falha ao deletar nome: {{errorMessage}}",
|
||||
"renameFaceFailed": "Falha ao renomear rosto: {{errorMessage}}",
|
||||
"trainFailed": "Falha ao treinar: {{errorMessage}}",
|
||||
"updateFaceScoreFailed": "Falha ao atualizar pontuação de rosto: {{errorMessage}}"
|
||||
"updateFaceScoreFailed": "Falha ao atualizar pontuação de rosto: {{errorMessage}}",
|
||||
"reclassifyFailed": "Falha ao reclassificar o rosto: {{errorMessage}}"
|
||||
}
|
||||
}
|
||||
},
|
||||
"reclassifyFaceAs": "Reclassificar rosto como:",
|
||||
"reclassifyFace": "Reclassificar rosto"
|
||||
}
|
||||
|
||||
@@ -58,7 +58,9 @@
|
||||
},
|
||||
"camera": {
|
||||
"enable": "Ativar Câmera",
|
||||
"disable": "Desabilitar Câmera"
|
||||
"disable": "Desabilitar Câmera",
|
||||
"turnOn": "Ligar a câmera",
|
||||
"turnOff": "Desligar a câmera"
|
||||
},
|
||||
"muteCameras": {
|
||||
"enable": "Silenciar Todas as Câmeras",
|
||||
@@ -70,7 +72,8 @@
|
||||
},
|
||||
"recording": {
|
||||
"enable": "Ativar Gravação",
|
||||
"disable": "Desativar Gravação"
|
||||
"disable": "Desativar Gravação",
|
||||
"disabledInConfig": "A gravação deve ser habilitada primeiro nas configurações desta câmera."
|
||||
},
|
||||
"snapshots": {
|
||||
"enable": "Permitir Capturas de Imagem",
|
||||
@@ -150,7 +153,8 @@
|
||||
"snapshots": "Capturas de Imagem",
|
||||
"audioDetection": "Detecção de Áudio",
|
||||
"autotracking": "Auto Rastreamento",
|
||||
"transcription": "Transcrição de Áudio"
|
||||
"transcription": "Transcrição de Áudio",
|
||||
"camera": "Câmera"
|
||||
},
|
||||
"history": {
|
||||
"label": "Exibir gravação histórica"
|
||||
|
||||
@@ -425,5 +425,76 @@
|
||||
"chop": "Corte",
|
||||
"eruption": "Erupção",
|
||||
"environmental_noise": "Ruído Ambiental",
|
||||
"field_recording": "Gravação de Campo"
|
||||
"field_recording": "Gravação de Campo",
|
||||
"change_ringing": "Mudar Toque",
|
||||
"shofar": "Berrante",
|
||||
"liquid": "Líquido",
|
||||
"splash": "Respingar",
|
||||
"slosh": "Respingo",
|
||||
"squish": "Esmagar",
|
||||
"drip": "Pingar",
|
||||
"pour": "Entornar",
|
||||
"trickle": "Gotejar",
|
||||
"gush": "Jorrar",
|
||||
"fill": "Preencher",
|
||||
"spray": "Borrifar",
|
||||
"pump": "Bombear",
|
||||
"stir": "Mexer",
|
||||
"boiling": "A ferver",
|
||||
"sonar": "Sonar",
|
||||
"arrow": "Flecha",
|
||||
"whoosh": "Uau",
|
||||
"thump": "Baque",
|
||||
"thunk": "Tombo",
|
||||
"electronic_tuner": "Afinador Eletrônico",
|
||||
"effects_unit": "Unidade de Efeitos",
|
||||
"chorus_effect": "Efeito Coro",
|
||||
"basketball_bounce": "Quique da bola",
|
||||
"bang": "Batida",
|
||||
"slap": "Tapa",
|
||||
"whack": "Bater",
|
||||
"smash": "Esmagar",
|
||||
"breaking": "A quebrar",
|
||||
"bouncing": "A quicar",
|
||||
"whip": "Chicote",
|
||||
"flap": "Guia",
|
||||
"scratch": "Arranhão",
|
||||
"scrape": "Raspagem",
|
||||
"rub": "Esfregar",
|
||||
"roll": "Rolar",
|
||||
"crushing": "Esmagamento",
|
||||
"crumpling": "Amarrotar",
|
||||
"tearing": "A rasgar",
|
||||
"beep": "Bip",
|
||||
"ping": "Pingo",
|
||||
"ding": "Campainha",
|
||||
"clang": "Estridente",
|
||||
"squeal": "Guincho",
|
||||
"creak": "Ranger",
|
||||
"rustle": "Farfalhar",
|
||||
"whir": "Zumbir",
|
||||
"clatter": "Barulho",
|
||||
"sizzle": "Chiado",
|
||||
"clicking": "A clicar",
|
||||
"clickety_clack": "Tique-taque",
|
||||
"rumble": "Estrondo",
|
||||
"plop": "Ploft",
|
||||
"hum": "Zumbir",
|
||||
"boing": "Poin",
|
||||
"crunch": "Mastigar",
|
||||
"sine_wave": "Onda Senoidal",
|
||||
"harmonic": "Harmonica",
|
||||
"chirp_tone": "Som Agudo",
|
||||
"pulse": "Pulso",
|
||||
"inside": "Dentro",
|
||||
"outside": "Fora",
|
||||
"reverberation": "Reverberação",
|
||||
"echo": "Eco",
|
||||
"noise": "Ruído",
|
||||
"mains_hum": "Zumbido Elétrico",
|
||||
"distortion": "Distorção",
|
||||
"sidetone": "Retorno de Voz",
|
||||
"cacophony": "Cacofonia",
|
||||
"throbbing": "Latejante",
|
||||
"vibration": "Vibração"
|
||||
}
|
||||
|
||||
@@ -90,7 +90,8 @@
|
||||
},
|
||||
"inProgress": "Em andamento",
|
||||
"invalidStartTime": "Horário de início inválido",
|
||||
"invalidEndTime": "Horário de término inválido"
|
||||
"invalidEndTime": "Horário de término inválido",
|
||||
"never": "Nunca"
|
||||
},
|
||||
"unit": {
|
||||
"speed": {
|
||||
@@ -146,7 +147,19 @@
|
||||
"next": "Seguinte",
|
||||
"play": "Tocar",
|
||||
"pictureInPicture": "Imagem sobre Imagem",
|
||||
"continue": "Continuar"
|
||||
"continue": "Continuar",
|
||||
"add": "Adicionar",
|
||||
"applying": "A aplicar…",
|
||||
"undo": "Desfazer",
|
||||
"copiedToClipboard": "Copiado para a área de transferência",
|
||||
"modified": "Modificado",
|
||||
"overridden": "Substituído",
|
||||
"resetToGlobal": "Redefinir para o Global",
|
||||
"resetToDefault": "Redefinir para o Padrão",
|
||||
"saveAll": "Gravar Tudo",
|
||||
"savingAll": "A gravar tudo…",
|
||||
"undoAll": "Desfazer Tudo",
|
||||
"retry": "Tente novamente"
|
||||
},
|
||||
"label": {
|
||||
"back": "Voltar",
|
||||
@@ -154,7 +167,8 @@
|
||||
"show": "Exibir {{item}}",
|
||||
"ID": "ID",
|
||||
"none": "Nenhum",
|
||||
"all": "Todos"
|
||||
"all": "Todos",
|
||||
"other": "Outros"
|
||||
},
|
||||
"menu": {
|
||||
"user": {
|
||||
@@ -226,7 +240,10 @@
|
||||
"bg": "Búlgaro",
|
||||
"gl": "Galego",
|
||||
"id": "Indonésio Bahasa",
|
||||
"ur": "Urdu"
|
||||
"ur": "Urdu",
|
||||
"hr": "Hrvatski (Croata)",
|
||||
"bs": "Bosanski (Bósnio)",
|
||||
"zhHant": "繁體中文 (Chinês Tradicional)"
|
||||
},
|
||||
"appearance": "Aparência",
|
||||
"darkMode": {
|
||||
@@ -257,7 +274,11 @@
|
||||
"explore": "Explorar",
|
||||
"review": "Rever",
|
||||
"uiPlayground": "Área de Testes da IU",
|
||||
"classification": "Classificação"
|
||||
"classification": "Classificação",
|
||||
"profiles": "Perfis",
|
||||
"actions": "Ações",
|
||||
"features": "Funcionalidades",
|
||||
"chat": "Chat"
|
||||
},
|
||||
"pagination": {
|
||||
"previous": {
|
||||
@@ -284,7 +305,8 @@
|
||||
"error": {
|
||||
"noMessage": "Não foi possível guardar as alterações da configuração",
|
||||
"title": "Não foi possível guardar as alterações da configuração: {{errorMessage}}"
|
||||
}
|
||||
},
|
||||
"success": "Alterações gravadas com sucesso."
|
||||
}
|
||||
},
|
||||
"accessDenied": {
|
||||
@@ -310,5 +332,10 @@
|
||||
"field": {
|
||||
"optional": "Opcional",
|
||||
"internalID": "o Frigate utiliza o ID na configuração e no banco de dados"
|
||||
},
|
||||
"no_items": "Sem elementos",
|
||||
"validation_errors": "Erros de validação",
|
||||
"credentialField": {
|
||||
"savedPlaceholder": "Gravado - deixar em branco para manter a atual"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -68,7 +68,10 @@
|
||||
"stream": "Transmissão"
|
||||
},
|
||||
"birdseye": "Vista Aérea"
|
||||
}
|
||||
},
|
||||
"showAll": "Mostrar todos os Grupos de Câmeras",
|
||||
"showLess": "Mostrar Menos",
|
||||
"editGroups": "Editar Grupos de Câmeras"
|
||||
},
|
||||
"debug": {
|
||||
"options": {
|
||||
@@ -82,6 +85,7 @@
|
||||
"zones": "Zonas",
|
||||
"mask": "Máscara",
|
||||
"motion": "Movimento",
|
||||
"regions": "Regiões"
|
||||
"regions": "Regiões",
|
||||
"paths": "Caminhos"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -36,6 +36,9 @@
|
||||
"ask_a": "Este objeto é um <code>{{label}}</code>?",
|
||||
"ask_an": "Este objeto é um <code>{{label}}</code>?",
|
||||
"ask_full": "Este objeto é um <code>{{untranslatedLabel}}</code> ({{translatedLabel}})?"
|
||||
},
|
||||
"toast": {
|
||||
"error": "Não foi possível submeter para Frigate+. Por favor verifique a sua connecção e tente novamente."
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -76,6 +79,13 @@
|
||||
"select": "Selecionar",
|
||||
"name": {
|
||||
"placeholder": "Nome da Exportação"
|
||||
},
|
||||
"case": {
|
||||
"newCaseOption": "Criar um novo caso",
|
||||
"newCaseNamePlaceholder": "Nome do novo caso"
|
||||
},
|
||||
"multiCamera": {
|
||||
"selectFromTimeline": "Selecionar da Timeline"
|
||||
}
|
||||
},
|
||||
"streaming": {
|
||||
|
||||
@@ -28,7 +28,8 @@
|
||||
"triggers": "Gatilhos",
|
||||
"cameraManagement": "Gestão",
|
||||
"cameraReview": "Rever",
|
||||
"roles": "Papéis"
|
||||
"roles": "Papéis",
|
||||
"profiles": "Perfis"
|
||||
},
|
||||
"dialog": {
|
||||
"unsavedChanges": {
|
||||
|
||||
@@ -29,7 +29,7 @@
|
||||
},
|
||||
"listen": {
|
||||
"label": "Tipuri ascultate",
|
||||
"description": "Lista de evenimente audio de detectat (ex: lătrat, alarmă_incendiu, țipăt, vorbire)."
|
||||
"description": "Lista de evenimente audio de detectat (ex: lătrat, alarmă_incendiu, vorbire)."
|
||||
},
|
||||
"filters": {
|
||||
"label": "Filtre audio",
|
||||
@@ -152,11 +152,11 @@
|
||||
}
|
||||
},
|
||||
"ffmpeg": {
|
||||
"label": "FFmpeg",
|
||||
"description": "Setări FFmpeg: cale binar, argumente, accelerare hardware și ieșiri per rol.",
|
||||
"label": "Stream-uri (FFmpeg)",
|
||||
"description": "Intrările stream-ului camerei și opțiunile FFmpeg, inclusiv calea către binar, argumentele, hwaccel și argumentele de ieșire per rol.",
|
||||
"path": {
|
||||
"label": "Cale FFmpeg",
|
||||
"description": "Calea către binarul FFmpeg sau un alias de versiune (\"5.0\" sau \"7.0\")."
|
||||
"description": "Calea către binarul FFmpeg sau un alias de versiune (\"7.0\" sau \"8.0\")."
|
||||
},
|
||||
"global_args": {
|
||||
"label": "Argumente globale FFmpeg",
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user