mirror of
https://github.com/blakeblackshear/frigate.git
synced 2026-02-06 11:31:53 -05:00
Compare commits
46 Commits
dependabot
...
fix-log-le
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
5615ec82dc | ||
|
|
c9055ea941 | ||
|
|
c9ba851f0d | ||
|
|
a8ab82937b | ||
|
|
21e4b36c7c | ||
|
|
06141b900e | ||
|
|
011e7a1ce6 | ||
|
|
81d5e80dd2 | ||
|
|
3b79b34c07 | ||
|
|
7d8d2c5521 | ||
|
|
7fcce67c2a | ||
|
|
87da12c453 | ||
|
|
522630487b | ||
|
|
77eb5d6012 | ||
|
|
7339961636 | ||
|
|
c34fd3b0d5 | ||
|
|
00c8c407c5 | ||
|
|
b17e5a3eff | ||
|
|
8b3c8a0ade | ||
|
|
2fe5e06fed | ||
|
|
e9db966097 | ||
|
|
4d63a74fd6 | ||
|
|
b6e5894650 | ||
|
|
62b880a4b2 | ||
|
|
5984346623 | ||
|
|
a394d37bfe | ||
|
|
a407f08db6 | ||
|
|
2cd14341e0 | ||
|
|
9285c5e10a | ||
|
|
74ac45d0af | ||
|
|
2f06cfe50c | ||
|
|
9413f1c46d | ||
|
|
fee3050886 | ||
|
|
9d572ba8cb | ||
|
|
9267d006ce | ||
|
|
e6e2b74034 | ||
|
|
0a307edce9 | ||
|
|
59a959430d | ||
|
|
2d83992284 | ||
|
|
e4fe021279 | ||
|
|
b4520d9e2f | ||
|
|
3b6814fbc9 | ||
|
|
338d85a9a2 | ||
|
|
4131252a3b | ||
|
|
50ac5a1483 | ||
|
|
ea39bb3565 |
388
.github/copilot-instructions.md
vendored
388
.github/copilot-instructions.md
vendored
@@ -1,3 +1,385 @@
|
||||
- For Frigate NVR, never write strings in the frontend directly. Since the project uses `react-i18next`, use `t()` and write the English string in the relevant translations file in `web/public/locales/en`.
|
||||
- Always conform new and refactored code to the existing coding style in the project.
|
||||
- Always have a way to test your work and confirm your changes. When running backend tests, use `python3 -u -m unittest`.
|
||||
# GitHub Copilot Instructions for Frigate NVR
|
||||
|
||||
This document provides coding guidelines and best practices for contributing to Frigate NVR, a complete and local NVR designed for Home Assistant with AI object detection.
|
||||
|
||||
## Project Overview
|
||||
|
||||
Frigate NVR is a realtime object detection system for IP cameras that uses:
|
||||
|
||||
- **Backend**: Python 3.13+ with FastAPI, OpenCV, TensorFlow/ONNX
|
||||
- **Frontend**: React with TypeScript, Vite, TailwindCSS
|
||||
- **Architecture**: Multiprocessing design with ZMQ and MQTT communication
|
||||
- **Focus**: Minimal resource usage with maximum performance
|
||||
|
||||
## Code Review Guidelines
|
||||
|
||||
When reviewing code, do NOT comment on:
|
||||
|
||||
- Missing imports - Static analysis tooling catches these
|
||||
- Code formatting - Ruff (Python) and Prettier (TypeScript/React) handle formatting
|
||||
- Minor style inconsistencies already enforced by linters
|
||||
|
||||
## Python Backend Standards
|
||||
|
||||
### Python Requirements
|
||||
|
||||
- **Compatibility**: Python 3.13+
|
||||
- **Language Features**: Use modern Python features:
|
||||
- Pattern matching
|
||||
- Type hints (comprehensive typing preferred)
|
||||
- f-strings (preferred over `%` or `.format()`)
|
||||
- Dataclasses
|
||||
- Async/await patterns
|
||||
|
||||
### Code Quality Standards
|
||||
|
||||
- **Formatting**: Ruff (configured in `pyproject.toml`)
|
||||
- **Linting**: Ruff with rules defined in project config
|
||||
- **Type Checking**: Use type hints consistently
|
||||
- **Testing**: unittest framework - use `python3 -u -m unittest` to run tests
|
||||
- **Language**: American English for all code, comments, and documentation
|
||||
|
||||
### Logging Standards
|
||||
|
||||
- **Logger Pattern**: Use module-level logger
|
||||
|
||||
```python
|
||||
import logging
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
```
|
||||
|
||||
- **Format Guidelines**:
|
||||
- No periods at end of log messages
|
||||
- No sensitive data (keys, tokens, passwords)
|
||||
- Use lazy logging: `logger.debug("Message with %s", variable)`
|
||||
- **Log Levels**:
|
||||
- `debug`: Development and troubleshooting information
|
||||
- `info`: Important runtime events (startup, shutdown, state changes)
|
||||
- `warning`: Recoverable issues that should be addressed
|
||||
- `error`: Errors that affect functionality but don't crash the app
|
||||
- `exception`: Use in except blocks to include traceback
|
||||
|
||||
### Error Handling
|
||||
|
||||
- **Exception Types**: Choose most specific exception available
|
||||
- **Try/Catch Best Practices**:
|
||||
- Only wrap code that can throw exceptions
|
||||
- Keep try blocks minimal - process data after the try/except
|
||||
- Avoid bare exceptions except in background tasks
|
||||
|
||||
Bad pattern:
|
||||
|
||||
```python
|
||||
try:
|
||||
data = await device.get_data() # Can throw
|
||||
# ❌ Don't process data inside try block
|
||||
processed = data.get("value", 0) * 100
|
||||
result = processed
|
||||
except DeviceError:
|
||||
logger.error("Failed to get data")
|
||||
```
|
||||
|
||||
Good pattern:
|
||||
|
||||
```python
|
||||
try:
|
||||
data = await device.get_data() # Can throw
|
||||
except DeviceError:
|
||||
logger.error("Failed to get data")
|
||||
return
|
||||
|
||||
# ✅ Process data outside try block
|
||||
processed = data.get("value", 0) * 100
|
||||
result = processed
|
||||
```
|
||||
|
||||
### Async Programming
|
||||
|
||||
- **External I/O**: All external I/O operations must be async
|
||||
- **Best Practices**:
|
||||
- Avoid sleeping in loops - use `asyncio.sleep()` not `time.sleep()`
|
||||
- Avoid awaiting in loops - use `asyncio.gather()` instead
|
||||
- No blocking calls in async functions
|
||||
- Use `asyncio.create_task()` for background operations
|
||||
- **Thread Safety**: Use proper synchronization for shared state
|
||||
|
||||
### Documentation Standards
|
||||
|
||||
- **Module Docstrings**: Concise descriptions at top of files
|
||||
```python
|
||||
"""Utilities for motion detection and analysis."""
|
||||
```
|
||||
- **Function Docstrings**: Required for public functions and methods
|
||||
|
||||
```python
|
||||
async def process_frame(frame: ndarray, config: Config) -> Detection:
|
||||
"""Process a video frame for object detection.
|
||||
|
||||
Args:
|
||||
frame: The video frame as numpy array
|
||||
config: Detection configuration
|
||||
|
||||
Returns:
|
||||
Detection results with bounding boxes
|
||||
"""
|
||||
```
|
||||
|
||||
- **Comment Style**:
|
||||
- Explain the "why" not just the "what"
|
||||
- Keep lines under 88 characters when possible
|
||||
- Use clear, descriptive comments
|
||||
|
||||
### File Organization
|
||||
|
||||
- **API Endpoints**: `frigate/api/` - FastAPI route handlers
|
||||
- **Configuration**: `frigate/config/` - Configuration parsing and validation
|
||||
- **Detectors**: `frigate/detectors/` - Object detection backends
|
||||
- **Events**: `frigate/events/` - Event management and storage
|
||||
- **Utilities**: `frigate/util/` - Shared utility functions
|
||||
|
||||
## Frontend (React/TypeScript) Standards
|
||||
|
||||
### Internationalization (i18n)
|
||||
|
||||
- **CRITICAL**: Never write user-facing strings directly in components
|
||||
- **Always use react-i18next**: Import and use the `t()` function
|
||||
|
||||
```tsx
|
||||
import { useTranslation } from "react-i18next";
|
||||
|
||||
function MyComponent() {
|
||||
const { t } = useTranslation(["views/live"]);
|
||||
return <div>{t("camera_not_found")}</div>;
|
||||
}
|
||||
```
|
||||
|
||||
- **Translation Files**: Add English strings to the appropriate json files in `web/public/locales/en`
|
||||
- **Namespaces**: Organize translations by feature/view (e.g., `views/live`, `common`, `views/system`)
|
||||
|
||||
### Code Quality
|
||||
|
||||
- **Linting**: ESLint (see `web/.eslintrc.cjs`)
|
||||
- **Formatting**: Prettier with Tailwind CSS plugin
|
||||
- **Type Safety**: TypeScript strict mode enabled
|
||||
- **Testing**: Vitest for unit tests
|
||||
|
||||
### Component Patterns
|
||||
|
||||
- **UI Components**: Use Radix UI primitives (in `web/src/components/ui/`)
|
||||
- **Styling**: TailwindCSS with `cn()` utility for class merging
|
||||
- **State Management**: React hooks (useState, useEffect, useCallback, useMemo)
|
||||
- **Data Fetching**: Custom hooks with proper loading and error states
|
||||
|
||||
### ESLint Rules
|
||||
|
||||
Key rules enforced:
|
||||
|
||||
- `react-hooks/rules-of-hooks`: error
|
||||
- `react-hooks/exhaustive-deps`: error
|
||||
- `no-console`: error (use proper logging or remove)
|
||||
- `@typescript-eslint/no-explicit-any`: warn (always use proper types instead of `any`)
|
||||
- Unused variables must be prefixed with `_`
|
||||
- Comma dangles required for multiline objects/arrays
|
||||
|
||||
### File Organization
|
||||
|
||||
- **Pages**: `web/src/pages/` - Route components
|
||||
- **Views**: `web/src/views/` - Complex view components
|
||||
- **Components**: `web/src/components/` - Reusable components
|
||||
- **Hooks**: `web/src/hooks/` - Custom React hooks
|
||||
- **API**: `web/src/api/` - API client functions
|
||||
- **Types**: `web/src/types/` - TypeScript type definitions
|
||||
|
||||
## Testing Requirements
|
||||
|
||||
### Backend Testing
|
||||
|
||||
- **Framework**: Python unittest
|
||||
- **Run Command**: `python3 -u -m unittest`
|
||||
- **Location**: `frigate/test/`
|
||||
- **Coverage**: Aim for comprehensive test coverage of core functionality
|
||||
- **Pattern**: Use `TestCase` classes with descriptive test method names
|
||||
```python
|
||||
class TestMotionDetection(unittest.TestCase):
|
||||
def test_detects_motion_above_threshold(self):
|
||||
# Test implementation
|
||||
```
|
||||
|
||||
### Test Best Practices
|
||||
|
||||
- Always have a way to test your work and confirm your changes
|
||||
- Write tests for bug fixes to prevent regressions
|
||||
- Test edge cases and error conditions
|
||||
- Mock external dependencies (cameras, APIs, hardware)
|
||||
- Use fixtures for test data
|
||||
|
||||
## Development Commands
|
||||
|
||||
### Python Backend
|
||||
|
||||
```bash
|
||||
# Run all tests
|
||||
python3 -u -m unittest
|
||||
|
||||
# Run specific test file
|
||||
python3 -u -m unittest frigate.test.test_ffmpeg_presets
|
||||
|
||||
# Check formatting (Ruff)
|
||||
ruff format --check frigate/
|
||||
|
||||
# Apply formatting
|
||||
ruff format frigate/
|
||||
|
||||
# Run linter
|
||||
ruff check frigate/
|
||||
```
|
||||
|
||||
### Frontend (from web/ directory)
|
||||
|
||||
```bash
|
||||
# Start dev server (AI agents should never run this directly unless asked)
|
||||
npm run dev
|
||||
|
||||
# Build for production
|
||||
npm run build
|
||||
|
||||
# Run linter
|
||||
npm run lint
|
||||
|
||||
# Fix linting issues
|
||||
npm run lint:fix
|
||||
|
||||
# Format code
|
||||
npm run prettier:write
|
||||
```
|
||||
|
||||
### Docker Development
|
||||
|
||||
AI agents should never run these commands directly unless instructed.
|
||||
|
||||
```bash
|
||||
# Build local image
|
||||
make local
|
||||
|
||||
# Build debug image
|
||||
make debug
|
||||
```
|
||||
|
||||
## Common Patterns
|
||||
|
||||
### API Endpoint Pattern
|
||||
|
||||
```python
|
||||
from fastapi import APIRouter, Request
|
||||
from frigate.api.defs.tags import Tags
|
||||
|
||||
router = APIRouter(tags=[Tags.Events])
|
||||
|
||||
@router.get("/events")
|
||||
async def get_events(request: Request, limit: int = 100):
|
||||
"""Retrieve events from the database."""
|
||||
# Implementation
|
||||
```
|
||||
|
||||
### Configuration Access
|
||||
|
||||
```python
|
||||
# Access Frigate configuration
|
||||
config: FrigateConfig = request.app.frigate_config
|
||||
camera_config = config.cameras["front_door"]
|
||||
```
|
||||
|
||||
### Database Queries
|
||||
|
||||
```python
|
||||
from frigate.models import Event
|
||||
|
||||
# Use Peewee ORM for database access
|
||||
events = (
|
||||
Event.select()
|
||||
.where(Event.camera == camera_name)
|
||||
.order_by(Event.start_time.desc())
|
||||
.limit(limit)
|
||||
)
|
||||
```
|
||||
|
||||
## Common Anti-Patterns to Avoid
|
||||
|
||||
### ❌ Avoid These
|
||||
|
||||
```python
|
||||
# Blocking operations in async functions
|
||||
data = requests.get(url) # ❌ Use async HTTP client
|
||||
time.sleep(5) # ❌ Use asyncio.sleep()
|
||||
|
||||
# Hardcoded strings in React components
|
||||
<div>Camera not found</div> # ❌ Use t("camera_not_found")
|
||||
|
||||
# Missing error handling
|
||||
data = await api.get_data() # ❌ No exception handling
|
||||
|
||||
# Bare exceptions in regular code
|
||||
try:
|
||||
value = await sensor.read()
|
||||
except Exception: # ❌ Too broad
|
||||
logger.error("Failed")
|
||||
```
|
||||
|
||||
### ✅ Use These Instead
|
||||
|
||||
```python
|
||||
# Async operations
|
||||
import aiohttp
|
||||
async with aiohttp.ClientSession() as session:
|
||||
async with session.get(url) as response:
|
||||
data = await response.json()
|
||||
|
||||
await asyncio.sleep(5) # ✅ Non-blocking
|
||||
|
||||
# Translatable strings in React
|
||||
const { t } = useTranslation();
|
||||
<div>{t("camera_not_found")}</div> # ✅ Translatable
|
||||
|
||||
# Proper error handling
|
||||
try:
|
||||
data = await api.get_data()
|
||||
except ApiException as err:
|
||||
logger.error("API error: %s", err)
|
||||
raise
|
||||
|
||||
# Specific exceptions
|
||||
try:
|
||||
value = await sensor.read()
|
||||
except SensorException as err: # ✅ Specific
|
||||
logger.exception("Failed to read sensor")
|
||||
```
|
||||
|
||||
## Project-Specific Conventions
|
||||
|
||||
### Configuration Files
|
||||
|
||||
- Main config: `config/config.yml`
|
||||
|
||||
### Directory Structure
|
||||
|
||||
- Backend code: `frigate/`
|
||||
- Frontend code: `web/`
|
||||
- Docker files: `docker/`
|
||||
- Documentation: `docs/`
|
||||
- Database migrations: `migrations/`
|
||||
|
||||
### Code Style Conformance
|
||||
|
||||
Always conform new and refactored code to the existing coding style in the project:
|
||||
|
||||
- Follow established patterns in similar files
|
||||
- Match indentation and formatting of surrounding code
|
||||
- Use consistent naming conventions (snake_case for Python, camelCase for TypeScript)
|
||||
- Maintain the same level of verbosity in comments and docstrings
|
||||
|
||||
## Additional Resources
|
||||
|
||||
- Documentation: https://docs.frigate.video
|
||||
- Main Repository: https://github.com/blakeblackshear/frigate
|
||||
- Home Assistant Integration: https://github.com/blakeblackshear/frigate-hass-integration
|
||||
|
||||
@@ -2,15 +2,19 @@
|
||||
|
||||
# Update package list and install dependencies
|
||||
sudo apt-get update
|
||||
sudo apt-get install -y build-essential cmake git wget
|
||||
sudo apt-get install -y build-essential cmake git wget linux-headers-$(uname -r)
|
||||
|
||||
hailo_version="4.21.0"
|
||||
arch=$(uname -m)
|
||||
|
||||
if [[ $arch == "x86_64" ]]; then
|
||||
sudo apt install -y linux-headers-$(uname -r);
|
||||
else
|
||||
sudo apt install -y linux-modules-extra-$(uname -r);
|
||||
if [[ $arch == "aarch64" ]]; then
|
||||
source /etc/os-release
|
||||
os_codename=$VERSION_CODENAME
|
||||
echo "Detected OS codename: $os_codename"
|
||||
fi
|
||||
|
||||
if [ "$os_codename" = "trixie" ]; then
|
||||
sudo apt install -y dkms
|
||||
fi
|
||||
|
||||
# Clone the HailoRT driver repository
|
||||
@@ -47,3 +51,4 @@ sudo udevadm control --reload-rules && sudo udevadm trigger
|
||||
|
||||
echo "HailoRT driver installation complete."
|
||||
echo "reboot your system to load the firmware!"
|
||||
echo "Driver version: $(modinfo -F version hailo_pci)"
|
||||
|
||||
@@ -29,6 +29,10 @@ auth:
|
||||
reset_admin_password: true
|
||||
```
|
||||
|
||||
## Password guidance
|
||||
|
||||
Constructing secure passwords and managing them properly is important. Frigate requires a minimum length of 12 characters. For guidance on password standards see [NIST SP 800-63B](https://pages.nist.gov/800-63-3/sp800-63b.html). To learn what makes a password truly secure, read this [article](https://medium.com/peerio/how-to-build-a-billion-dollar-password-3d92568d9277).
|
||||
|
||||
## Login failure rate limiting
|
||||
|
||||
In order to limit the risk of brute force attacks, rate limiting is available for login failures. This is implemented with SlowApi, and the string notation for valid values is available in [the documentation](https://limits.readthedocs.io/en/stable/quickstart.html#examples).
|
||||
|
||||
@@ -381,6 +381,7 @@ Start with ["Why isn't my license plate being detected and recognized?"](#why-is
|
||||
```yaml
|
||||
lpr:
|
||||
enabled: true
|
||||
device: CPU
|
||||
debug_save_plates: true
|
||||
```
|
||||
|
||||
|
||||
@@ -214,6 +214,12 @@ The `exec:`, `echo:`, and `expr:` sources are disabled by default for security.
|
||||
|
||||
:::
|
||||
|
||||
:::warning
|
||||
|
||||
The `exec:`, `echo:`, and `expr:` sources are disabled by default for security. You must set `GO2RTC_ALLOW_ARBITRARY_EXEC=true` to use them. See [Security: Restricted Stream Sources](#security-restricted-stream-sources) for more information.
|
||||
|
||||
:::
|
||||
|
||||
NOTE: The output will need to be passed with two curly braces `{{output}}`
|
||||
|
||||
```yaml
|
||||
|
||||
@@ -167,7 +167,7 @@ Inference speeds vary greatly depending on the CPU or GPU used, some known examp
|
||||
| Intel N100 | ~ 15 ms | s-320: 30 ms | 320: ~ 25 ms | | Can only run one detector instance |
|
||||
| Intel N150 | ~ 15 ms | t-320: 16 ms s-320: 24 ms | | | |
|
||||
| Intel Iris XE | ~ 10 ms | t-320: 6 ms t-640: 14 ms s-320: 8 ms s-640: 16 ms | 320: ~ 10 ms 640: ~ 20 ms | 320-n: 33 ms | |
|
||||
| Intel NPU | ~ 6 ms | s-320: 11 ms | 320: ~ 14 ms 640: ~ 34 ms | 320-n: 40 ms | |
|
||||
| Intel NPU | ~ 6 ms | s-320: 11 ms s-640: 30 ms | 320: ~ 14 ms 640: ~ 34 ms | 320-n: 40 ms | |
|
||||
| Intel Arc A310 | ~ 5 ms | t-320: 7 ms t-640: 11 ms s-320: 8 ms s-640: 15 ms | 320: ~ 8 ms 640: ~ 14 ms | | |
|
||||
| Intel Arc A380 | ~ 6 ms | | 320: ~ 10 ms 640: ~ 22 ms | 336: 20 ms 448: 27 ms | |
|
||||
| Intel Arc A750 | ~ 4 ms | | 320: ~ 8 ms | | |
|
||||
|
||||
@@ -112,42 +112,65 @@ The Hailo-8 and Hailo-8L AI accelerators are available in both M.2 and HAT form
|
||||
|
||||
:::warning
|
||||
|
||||
The Raspberry Pi kernel includes an older version of the Hailo driver that is incompatible with Frigate. You **must** follow the installation steps below to install the correct driver version, and you **must** disable the built-in kernel driver as described in step 1.
|
||||
On Raspberry Pi OS **Bookworm**, the kernel includes an older version of the Hailo driver that is incompatible with Frigate. You **must** follow the installation steps below to install the correct driver version, and you **must** disable the built-in kernel driver as described in step 1.
|
||||
|
||||
On Raspberry Pi OS **Trixie**, the Hailo driver is no longer shipped with the kernel. It is installed via DKMS, and the conflict described below does not apply. You can simply run the installation script.
|
||||
|
||||
:::
|
||||
|
||||
1. **Disable the built-in Hailo driver (Raspberry Pi only)**:
|
||||
1. **Disable the built-in Hailo driver (Raspberry Pi Bookworm OS only)**:
|
||||
|
||||
:::note
|
||||
|
||||
If you are **not** using a Raspberry Pi, skip this step and proceed directly to step 2.
|
||||
If you are **not** using a Raspberry Pi with **Bookworm OS**, skip this step and proceed directly to step 2.
|
||||
|
||||
If you are using Raspberry Pi with **Trixie OS**, also skip this step and proceed directly to step 2.
|
||||
|
||||
:::
|
||||
|
||||
If you are using a Raspberry Pi, you need to blacklist the built-in kernel Hailo driver to prevent conflicts. First, check if the driver is currently loaded:
|
||||
First, check if the driver is currently loaded:
|
||||
|
||||
```bash
|
||||
lsmod | grep hailo
|
||||
```
|
||||
|
||||
|
||||
If it shows `hailo_pci`, unload it:
|
||||
|
||||
```bash
|
||||
sudo rmmod hailo_pci
|
||||
sudo modprobe -r hailo_pci
|
||||
```
|
||||
|
||||
Now blacklist the driver to prevent it from loading on boot:
|
||||
|
||||
Then locate the built-in kernel driver and rename it so it cannot be loaded.
|
||||
Renaming allows the original driver to be restored later if needed.
|
||||
First, locate the currently installed kernel module:
|
||||
|
||||
```bash
|
||||
echo "blacklist hailo_pci" | sudo tee /etc/modprobe.d/blacklist-hailo_pci.conf
|
||||
modinfo -n hailo_pci
|
||||
```
|
||||
|
||||
Update initramfs to ensure the blacklist takes effect:
|
||||
|
||||
Example output:
|
||||
|
||||
```
|
||||
/lib/modules/6.6.31+rpt-rpi-2712/kernel/drivers/media/pci/hailo/hailo_pci.ko.xz
|
||||
```
|
||||
Save the module path to a variable:
|
||||
|
||||
```bash
|
||||
sudo update-initramfs -u
|
||||
BUILTIN=$(modinfo -n hailo_pci)
|
||||
```
|
||||
|
||||
And rename the module by appending .bak:
|
||||
|
||||
```bash
|
||||
sudo mv "$BUILTIN" "${BUILTIN}.bak"
|
||||
```
|
||||
|
||||
Now refresh the kernel module map so the system recognizes the change:
|
||||
|
||||
```bash
|
||||
sudo depmod -a
|
||||
```
|
||||
|
||||
Reboot your Raspberry Pi:
|
||||
|
||||
```bash
|
||||
@@ -160,9 +183,9 @@ The Raspberry Pi kernel includes an older version of the Hailo driver that is in
|
||||
lsmod | grep hailo
|
||||
```
|
||||
|
||||
This command should return no results. If it still shows `hailo_pci`, the blacklist did not take effect properly and you may need to check for other Hailo packages installed via apt that are loading the driver.
|
||||
This command should return no results.
|
||||
|
||||
2. **Run the installation script**:
|
||||
3. **Run the installation script**:
|
||||
|
||||
Download the installation script:
|
||||
|
||||
@@ -190,7 +213,7 @@ The Raspberry Pi kernel includes an older version of the Hailo driver that is in
|
||||
- Download and install the required firmware
|
||||
- Set up udev rules
|
||||
|
||||
3. **Reboot your system**:
|
||||
4. **Reboot your system**:
|
||||
|
||||
After the script completes successfully, reboot to load the firmware:
|
||||
|
||||
@@ -198,7 +221,7 @@ The Raspberry Pi kernel includes an older version of the Hailo driver that is in
|
||||
sudo reboot
|
||||
```
|
||||
|
||||
4. **Verify the installation**:
|
||||
5. **Verify the installation**:
|
||||
|
||||
After rebooting, verify that the Hailo device is available:
|
||||
|
||||
@@ -212,6 +235,38 @@ The Raspberry Pi kernel includes an older version of the Hailo driver that is in
|
||||
lsmod | grep hailo_pci
|
||||
```
|
||||
|
||||
Verify the driver version:
|
||||
|
||||
```bash
|
||||
cat /sys/module/hailo_pci/version
|
||||
```
|
||||
|
||||
Verify that the firmware was installed correctly:
|
||||
|
||||
```bash
|
||||
ls -l /lib/firmware/hailo/hailo8_fw.bin
|
||||
```
|
||||
|
||||
**Optional: Fix PCIe descriptor page size error**
|
||||
|
||||
If you encounter the following error:
|
||||
|
||||
```
|
||||
[HailoRT] [error] CHECK failed - max_desc_page_size given 16384 is bigger than hw max desc page size 4096
|
||||
```
|
||||
|
||||
Create a configuration file to force the correct descriptor page size:
|
||||
|
||||
```bash
|
||||
echo 'options hailo_pci force_desc_page_size=4096' | sudo tee /etc/modprobe.d/hailo_pci.conf
|
||||
```
|
||||
|
||||
and reboot:
|
||||
|
||||
```bash
|
||||
sudo reboot
|
||||
```
|
||||
|
||||
#### Setup
|
||||
|
||||
To set up Frigate, follow the default installation instructions, for example: `ghcr.io/blakeblackshear/frigate:stable`
|
||||
|
||||
@@ -350,21 +350,15 @@ def validate_password_strength(password: str) -> tuple[bool, Optional[str]]:
|
||||
Validate password strength.
|
||||
|
||||
Returns a tuple of (is_valid, error_message).
|
||||
|
||||
Longer passwords are harder to crack than shorter complex ones.
|
||||
https://pages.nist.gov/800-63-3/sp800-63b.html
|
||||
"""
|
||||
if not password:
|
||||
return False, "Password cannot be empty"
|
||||
|
||||
if len(password) < 8:
|
||||
return False, "Password must be at least 8 characters long"
|
||||
|
||||
if not any(c.isupper() for c in password):
|
||||
return False, "Password must contain at least one uppercase letter"
|
||||
|
||||
if not any(c.isdigit() for c in password):
|
||||
return False, "Password must contain at least one digit"
|
||||
|
||||
if not any(c in '!@#$%^&*(),.?":{}|<>' for c in password):
|
||||
return False, "Password must contain at least one special character"
|
||||
if len(password) < 12:
|
||||
return False, "Password must be at least 12 characters long"
|
||||
|
||||
return True, None
|
||||
|
||||
@@ -800,7 +794,7 @@ def get_users():
|
||||
"/users",
|
||||
dependencies=[Depends(require_role(["admin"]))],
|
||||
summary="Create new user",
|
||||
description='Creates a new user with the specified username, password, and role. Requires admin role. Password must meet strength requirements: minimum 8 characters, at least one uppercase letter, at least one digit, and at least one special character (!@#$%^&*(),.?":{} |<>).',
|
||||
description="Creates a new user with the specified username, password, and role. Requires admin role. Password must be at least 12 characters long.",
|
||||
)
|
||||
def create_user(
|
||||
request: Request,
|
||||
@@ -817,6 +811,15 @@ def create_user(
|
||||
content={"message": f"Role must be one of: {', '.join(config_roles)}"},
|
||||
status_code=400,
|
||||
)
|
||||
|
||||
# Validate password strength
|
||||
is_valid, error_message = validate_password_strength(body.password)
|
||||
if not is_valid:
|
||||
return JSONResponse(
|
||||
content={"message": error_message},
|
||||
status_code=400,
|
||||
)
|
||||
|
||||
role = body.role or "viewer"
|
||||
password_hash = hash_password(body.password, iterations=HASH_ITERATIONS)
|
||||
User.insert(
|
||||
@@ -851,7 +854,7 @@ def delete_user(request: Request, username: str):
|
||||
"/users/{username}/password",
|
||||
dependencies=[Depends(allow_any_authenticated())],
|
||||
summary="Update user password",
|
||||
description="Updates a user's password. Users can only change their own password unless they have admin role. Requires the current password to verify identity for non-admin users. Password must meet strength requirements: minimum 8 characters, at least one uppercase letter, at least one digit, and at least one special character (!@#$%^&*(),.?\":{} |<>). If user changes their own password, a new JWT cookie is automatically issued.",
|
||||
description="Updates a user's password. Users can only change their own password unless they have admin role. Requires the current password to verify identity for non-admin users. Password must be at least 12 characters long. If user changes their own password, a new JWT cookie is automatically issued.",
|
||||
)
|
||||
async def update_password(
|
||||
request: Request,
|
||||
|
||||
@@ -73,7 +73,7 @@ def get_faces():
|
||||
face_dict[name] = []
|
||||
|
||||
for file in filter(
|
||||
lambda f: (f.lower().endswith((".webp", ".png", ".jpg", ".jpeg"))),
|
||||
lambda f: f.lower().endswith((".webp", ".png", ".jpg", ".jpeg")),
|
||||
os.listdir(face_dir),
|
||||
):
|
||||
face_dict[name].append(file)
|
||||
@@ -582,7 +582,7 @@ def get_classification_dataset(name: str):
|
||||
dataset_dict[category_name] = []
|
||||
|
||||
for file in filter(
|
||||
lambda f: (f.lower().endswith((".webp", ".png", ".jpg", ".jpeg"))),
|
||||
lambda f: f.lower().endswith((".webp", ".png", ".jpg", ".jpeg")),
|
||||
os.listdir(category_dir),
|
||||
):
|
||||
dataset_dict[category_name].append(file)
|
||||
@@ -693,7 +693,7 @@ def get_classification_images(name: str):
|
||||
status_code=200,
|
||||
content=list(
|
||||
filter(
|
||||
lambda f: (f.lower().endswith((".webp", ".png", ".jpg", ".jpeg"))),
|
||||
lambda f: f.lower().endswith((".webp", ".png", ".jpg", ".jpeg")),
|
||||
os.listdir(train_dir),
|
||||
)
|
||||
),
|
||||
|
||||
@@ -108,12 +108,13 @@ class GenAIReviewConfig(FrigateBaseModel):
|
||||
default="""### Normal Activity Indicators (Level 0)
|
||||
- Known/verified people in any zone at any time
|
||||
- People with pets in residential areas
|
||||
- Routine residential vehicle access during daytime/evening (6 AM - 10 PM): entering, exiting, loading/unloading items — normal commute and travel patterns
|
||||
- Deliveries or services during daytime/evening (6 AM - 10 PM): carrying packages to doors/porches, placing items, leaving
|
||||
- Services/maintenance workers with visible tools, uniforms, or service vehicles during daytime
|
||||
- Activity confined to public areas only (sidewalks, streets) without entering property at any time
|
||||
|
||||
### Suspicious Activity Indicators (Level 1)
|
||||
- **Testing or attempting to open doors/windows/handles on vehicles or buildings** — ALWAYS Level 1 regardless of time or duration
|
||||
- **Checking or probing vehicle/building access**: trying handles without entering, peering through windows, examining multiple vehicles, or possessing break-in tools — Level 1
|
||||
- **Unidentified person in private areas (driveways, near vehicles/buildings) during late night/early morning (11 PM - 5 AM)** — ALWAYS Level 1 regardless of activity or duration
|
||||
- Taking items that don't belong to them (packages, objects from porches/driveways)
|
||||
- Climbing or jumping fences/barriers to access property
|
||||
@@ -133,8 +134,8 @@ Evaluate in this order:
|
||||
1. **If person is verified/known** → Level 0 regardless of time or activity
|
||||
2. **If person is unidentified:**
|
||||
- Check time: If late night/early morning (11 PM - 5 AM) AND in private areas (driveways, near vehicles/buildings) → Level 1
|
||||
- Check actions: If testing doors/handles, taking items, climbing → Level 1
|
||||
- Otherwise, if daytime/evening (6 AM - 10 PM) with clear legitimate purpose (delivery, service worker) → Level 0
|
||||
- Check actions: If probing access (trying handles without entering, checking multiple vehicles), taking items, climbing → Level 1
|
||||
- Otherwise, if daytime/evening (6 AM - 10 PM) with clear legitimate purpose (delivery, service, routine vehicle access) → Level 0
|
||||
3. **Escalate to Level 2 if:** Weapons, break-in tools, forced entry in progress, violence, or active property damage visible (escalates from Level 0 or 1)
|
||||
|
||||
The mere presence of an unidentified person in private areas during late night hours is inherently suspicious and warrants human review, regardless of what activity they appear to be doing or how brief the sequence is.""",
|
||||
|
||||
@@ -97,7 +97,7 @@ class CustomStateClassificationProcessor(RealTimeProcessorApi):
|
||||
self.interpreter.allocate_tensors()
|
||||
self.tensor_input_details = self.interpreter.get_input_details()
|
||||
self.tensor_output_details = self.interpreter.get_output_details()
|
||||
self.labelmap = load_labels(labelmap_path, prefill=0)
|
||||
self.labelmap = load_labels(labelmap_path, prefill=0, indexed=False)
|
||||
self.classifications_per_second.start()
|
||||
|
||||
def __update_metrics(self, duration: float) -> None:
|
||||
@@ -398,7 +398,7 @@ class CustomObjectClassificationProcessor(RealTimeProcessorApi):
|
||||
self.interpreter.allocate_tensors()
|
||||
self.tensor_input_details = self.interpreter.get_input_details()
|
||||
self.tensor_output_details = self.interpreter.get_output_details()
|
||||
self.labelmap = load_labels(labelmap_path, prefill=0)
|
||||
self.labelmap = load_labels(labelmap_path, prefill=0, indexed=False)
|
||||
|
||||
def __update_metrics(self, duration: float) -> None:
|
||||
self.classifications_per_second.update()
|
||||
@@ -419,14 +419,21 @@ class CustomObjectClassificationProcessor(RealTimeProcessorApi):
|
||||
"""
|
||||
if object_id not in self.classification_history:
|
||||
self.classification_history[object_id] = []
|
||||
logger.debug(f"Created new classification history for {object_id}")
|
||||
|
||||
self.classification_history[object_id].append(
|
||||
(current_label, current_score, current_time)
|
||||
)
|
||||
|
||||
history = self.classification_history[object_id]
|
||||
logger.debug(
|
||||
f"History for {object_id}: {len(history)} entries, latest=({current_label}, {current_score})"
|
||||
)
|
||||
|
||||
if len(history) < 3:
|
||||
logger.debug(
|
||||
f"History for {object_id} has {len(history)} entries, need at least 3"
|
||||
)
|
||||
return None, 0.0
|
||||
|
||||
label_counts = {}
|
||||
@@ -445,14 +452,27 @@ class CustomObjectClassificationProcessor(RealTimeProcessorApi):
|
||||
best_count = label_counts[best_label]
|
||||
|
||||
consensus_threshold = total_attempts * 0.6
|
||||
logger.debug(
|
||||
f"Consensus calc for {object_id}: label_counts={label_counts}, "
|
||||
f"best_label={best_label}, best_count={best_count}, "
|
||||
f"total={total_attempts}, threshold={consensus_threshold}"
|
||||
)
|
||||
|
||||
if best_count < consensus_threshold:
|
||||
logger.debug(
|
||||
f"No consensus for {object_id}: {best_count} < {consensus_threshold}"
|
||||
)
|
||||
return None, 0.0
|
||||
|
||||
avg_score = sum(label_scores[best_label]) / len(label_scores[best_label])
|
||||
|
||||
if best_label == "none":
|
||||
logger.debug(f"Filtering 'none' label for {object_id}")
|
||||
return None, 0.0
|
||||
|
||||
logger.debug(
|
||||
f"Consensus reached for {object_id}: {best_label} with avg_score={avg_score}"
|
||||
)
|
||||
return best_label, avg_score
|
||||
|
||||
def process_frame(self, obj_data, frame):
|
||||
@@ -560,17 +580,30 @@ class CustomObjectClassificationProcessor(RealTimeProcessorApi):
|
||||
)
|
||||
|
||||
if score < self.model_config.threshold:
|
||||
logger.debug(f"Score {score} is less than threshold.")
|
||||
logger.debug(
|
||||
f"{self.model_config.name}: Score {score} < threshold {self.model_config.threshold} for {object_id}, skipping"
|
||||
)
|
||||
return
|
||||
|
||||
sub_label = self.labelmap[best_id]
|
||||
|
||||
logger.debug(
|
||||
f"{self.model_config.name}: Object {object_id} (label={obj_data['label']}) passed threshold with sub_label={sub_label}, score={score}"
|
||||
)
|
||||
|
||||
consensus_label, consensus_score = self.get_weighted_score(
|
||||
object_id, sub_label, score, now
|
||||
)
|
||||
|
||||
logger.debug(
|
||||
f"{self.model_config.name}: get_weighted_score returned consensus_label={consensus_label}, consensus_score={consensus_score} for {object_id}"
|
||||
)
|
||||
|
||||
if consensus_label is not None:
|
||||
camera = obj_data["camera"]
|
||||
logger.debug(
|
||||
f"{self.model_config.name}: Publishing sub_label={consensus_label} for {obj_data['label']} object {object_id} on {camera}"
|
||||
)
|
||||
|
||||
if (
|
||||
self.model_config.object_config.classification_type
|
||||
@@ -662,7 +695,7 @@ def write_classification_attempt(
|
||||
# delete oldest face image if maximum is reached
|
||||
try:
|
||||
files = sorted(
|
||||
filter(lambda f: (f.endswith(".webp")), os.listdir(folder)),
|
||||
filter(lambda f: f.endswith(".webp"), os.listdir(folder)),
|
||||
key=lambda f: os.path.getctime(os.path.join(folder, f)),
|
||||
reverse=True,
|
||||
)
|
||||
|
||||
@@ -539,7 +539,7 @@ class FaceRealTimeProcessor(RealTimeProcessorApi):
|
||||
cv2.imwrite(file, frame)
|
||||
|
||||
files = sorted(
|
||||
filter(lambda f: (f.endswith(".webp")), os.listdir(folder)),
|
||||
filter(lambda f: f.endswith(".webp"), os.listdir(folder)),
|
||||
key=lambda f: os.path.getctime(os.path.join(folder, f)),
|
||||
reverse=True,
|
||||
)
|
||||
|
||||
@@ -633,7 +633,7 @@ class EmbeddingMaintainer(threading.Thread):
|
||||
|
||||
camera, frame_name, _, _, motion_boxes, _ = data
|
||||
|
||||
if not camera or len(motion_boxes) == 0 or camera not in self.config.cameras:
|
||||
if not camera or camera not in self.config.cameras:
|
||||
return
|
||||
|
||||
camera_config = self.config.cameras[camera]
|
||||
@@ -660,8 +660,10 @@ class EmbeddingMaintainer(threading.Thread):
|
||||
return
|
||||
|
||||
for processor in self.realtime_processors:
|
||||
if dedicated_lpr_enabled and isinstance(
|
||||
processor, LicensePlateRealTimeProcessor
|
||||
if (
|
||||
dedicated_lpr_enabled
|
||||
and len(motion_boxes) > 0
|
||||
and isinstance(processor, LicensePlateRealTimeProcessor)
|
||||
):
|
||||
processor.process_frame(camera, yuv_frame, True)
|
||||
|
||||
|
||||
@@ -15,6 +15,16 @@ logger = logging.getLogger(__name__)
|
||||
|
||||
def should_update_db(prev_event: Event, current_event: Event) -> bool:
|
||||
"""If current_event has updated fields and (clip or snapshot)."""
|
||||
# If event is ending and was previously saved, always update to set end_time
|
||||
# This ensures events are properly ended even when alerts/detections are disabled
|
||||
# mid-event (which can cause has_clip/has_snapshot to become False)
|
||||
if (
|
||||
prev_event["end_time"] is None
|
||||
and current_event["end_time"] is not None
|
||||
and (prev_event["has_clip"] or prev_event["has_snapshot"])
|
||||
):
|
||||
return True
|
||||
|
||||
if current_event["has_clip"] or current_event["has_snapshot"]:
|
||||
# if this is the first time has_clip or has_snapshot turned true
|
||||
if not prev_event["has_clip"] and not prev_event["has_snapshot"]:
|
||||
|
||||
@@ -99,8 +99,8 @@ When forming your description:
|
||||
## Response Format
|
||||
|
||||
Your response MUST be a flat JSON object with:
|
||||
- `title` (string): A concise, direct title that describes the primary action or event in the sequence, not just what you literally see. Use spatial context when available to make titles more meaningful. When multiple objects/actions are present, prioritize whichever is most prominent or occurs first. Use names from "Objects in Scene" based on what you visually observe. If you see both a name and an unidentified object of the same type but visually observe only one person/object, use ONLY the name. Examples: "Joe walking dog", "Person taking out trash", "Vehicle arriving in driveway", "Joe accessing vehicle", "Person leaving porch for driveway".
|
||||
- `scene` (string): A narrative description of what happens across the sequence from start to finish, in chronological order. Start by describing how the sequence begins, then describe the progression of events. **Describe all significant movements and actions in the order they occur.** For example, if a vehicle arrives and then a person exits, describe both actions sequentially. **Only describe actions you can actually observe happening in the frames provided.** Do not infer or assume actions that aren't visible (e.g., if you see someone walking but never see them sit, don't say they sat down). Include setting, detected objects, and their observable actions. Avoid speculation or filling in assumed behaviors. Your description should align with and support the threat level you assign.
|
||||
- `title` (string): A concise, grammatically complete title in the format "[Subject] [action verb] [context]" that matches your scene description. Use names from "Objects in Scene" when you visually observe them.
|
||||
- `shortSummary` (string): A brief 2-sentence summary of the scene, suitable for notifications. Should capture the key activity and context without full detail. This should be a condensed version of the scene description above.
|
||||
- `confidence` (float): 0-1 confidence in your analysis. Higher confidence when objects/actions are clearly visible and context is unambiguous. Lower confidence when the sequence is unclear, objects are partially obscured, or context is ambiguous.
|
||||
- `potential_threat_level` (integer): 0, 1, or 2 as defined in "Normal Activity Patterns for This Property" above. Your threat level must be consistent with your scene description and the guidance above.
|
||||
|
||||
@@ -26,15 +26,16 @@ LOG_HANDLER.setFormatter(
|
||||
|
||||
# filter out norfair warning
|
||||
LOG_HANDLER.addFilter(
|
||||
lambda record: not record.getMessage().startswith(
|
||||
"You are using a scalar distance function"
|
||||
lambda record: (
|
||||
not record.getMessage().startswith("You are using a scalar distance function")
|
||||
)
|
||||
)
|
||||
|
||||
# filter out tflite logging
|
||||
LOG_HANDLER.addFilter(
|
||||
lambda record: "Created TensorFlow Lite XNNPACK delegate for CPU."
|
||||
not in record.getMessage()
|
||||
lambda record: (
|
||||
"Created TensorFlow Lite XNNPACK delegate for CPU." not in record.getMessage()
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
|
||||
@@ -208,8 +208,10 @@ class RecordingMaintainer(threading.Thread):
|
||||
processed_segment_count = len(
|
||||
list(
|
||||
filter(
|
||||
lambda r: r["start_time"].timestamp()
|
||||
< most_recently_processed_frame_time,
|
||||
lambda r: (
|
||||
r["start_time"].timestamp()
|
||||
< most_recently_processed_frame_time
|
||||
),
|
||||
grouped_recordings[camera],
|
||||
)
|
||||
)
|
||||
|
||||
@@ -129,7 +129,9 @@ def get_ffmpeg_arg_list(arg: Any) -> list:
|
||||
return arg if isinstance(arg, list) else shlex.split(arg)
|
||||
|
||||
|
||||
def load_labels(path: Optional[str], encoding="utf-8", prefill=91):
|
||||
def load_labels(
|
||||
path: Optional[str], encoding="utf-8", prefill=91, indexed: bool | None = None
|
||||
):
|
||||
"""Loads labels from file (with or without index numbers).
|
||||
Args:
|
||||
path: path to label file.
|
||||
@@ -146,11 +148,12 @@ def load_labels(path: Optional[str], encoding="utf-8", prefill=91):
|
||||
if not lines:
|
||||
return {}
|
||||
|
||||
if lines[0].split(" ", maxsplit=1)[0].isdigit():
|
||||
if indexed != False and lines[0].split(" ", maxsplit=1)[0].isdigit():
|
||||
pairs = [line.split(" ", maxsplit=1) for line in lines]
|
||||
labels.update({int(index): label.strip() for index, label in pairs})
|
||||
else:
|
||||
labels.update({index: line.strip() for index, line in enumerate(lines)})
|
||||
|
||||
return labels
|
||||
|
||||
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
{
|
||||
"train": {
|
||||
"titleShort": "الأخيرة"
|
||||
}
|
||||
},
|
||||
"documentTitle": "تصنيف النماذج - Frigate"
|
||||
}
|
||||
|
||||
@@ -60,7 +60,7 @@
|
||||
"cough": "Tos",
|
||||
"throat_clearing": "Carraspeig",
|
||||
"sneeze": "Esternut",
|
||||
"sniff": "Fregit nasal",
|
||||
"sniff": "olorar",
|
||||
"run": "Córrer",
|
||||
"shuffle": "Passos arrossegats",
|
||||
"footsteps": "Passos",
|
||||
@@ -97,7 +97,7 @@
|
||||
"moo": "Mugir",
|
||||
"cowbell": "Esquellot",
|
||||
"pig": "Porc",
|
||||
"oink": "Oink",
|
||||
"oink": "Oinc",
|
||||
"bleat": "Brama",
|
||||
"fowl": "Au de corral",
|
||||
"chicken": "Pollastre",
|
||||
@@ -439,37 +439,37 @@
|
||||
"inside": "Interior",
|
||||
"pulse": "Pols",
|
||||
"outside": "Fora",
|
||||
"chirp_tone": "To de grinyol",
|
||||
"chirp_tone": "Gisclada",
|
||||
"harmonic": "Harmònic",
|
||||
"sine_wave": "Ona sinus",
|
||||
"crunch": "Cruixit",
|
||||
"hum": "Taral·lejar",
|
||||
"plop": "Chof",
|
||||
"hum": "Zunzum",
|
||||
"plop": "Xip-xap",
|
||||
"clickety_clack": "Clic-Clac",
|
||||
"clicking": "Clicant",
|
||||
"clatter": "Soroll",
|
||||
"clatter": "Rebombori",
|
||||
"chird": "Piular",
|
||||
"liquid": "Líquid",
|
||||
"splash": "Xof",
|
||||
"slosh": "Xip-xap",
|
||||
"boing": "Boing",
|
||||
"zing": "Fiu",
|
||||
"rumble": "Bum-bum",
|
||||
"sizzle": "Xiu-xiu",
|
||||
"splash": "Esquitx",
|
||||
"slosh": "Xipolleig",
|
||||
"boing": "Rebot",
|
||||
"zing": "Zunzum agut",
|
||||
"rumble": "Retombori",
|
||||
"sizzle": "Crepitació",
|
||||
"whir": "Brrrm",
|
||||
"rustle": "Fru-Fru",
|
||||
"creak": "Clic-clac",
|
||||
"clang": "Clang",
|
||||
"rustle": "Frec",
|
||||
"creak": "Rascada",
|
||||
"clang": "Soroll metàl·lic",
|
||||
"squish": "Xaf",
|
||||
"drip": "Plic-plic",
|
||||
"pour": "Glug-glug",
|
||||
"trickle": "Xiulet",
|
||||
"gush": "Xuuuix",
|
||||
"fill": "Glug-glug",
|
||||
"ding": "Ding",
|
||||
"ping": "Ping",
|
||||
"beep": "Bip",
|
||||
"squeal": "Xiscle",
|
||||
"drip": "Goteig",
|
||||
"pour": "Abocament",
|
||||
"trickle": "Raig fi",
|
||||
"gush": "Raig fort",
|
||||
"fill": "Ompliment",
|
||||
"ding": "Ting",
|
||||
"ping": "Ressò",
|
||||
"beep": "Pitit",
|
||||
"squeal": "Chirrit",
|
||||
"crumpling": "Arrugant-se",
|
||||
"rub": "Fregar",
|
||||
"scrape": "Raspar",
|
||||
@@ -480,13 +480,13 @@
|
||||
"smash": "Aixafar",
|
||||
"whack": "Cop",
|
||||
"slap": "Bufetada",
|
||||
"bang": "Bang",
|
||||
"bang": "Cop fort",
|
||||
"basketball_bounce": "Rebot de bàsquet",
|
||||
"chorus_effect": "Efecte de cor",
|
||||
"effects_unit": "Unitat d'Efectes",
|
||||
"electronic_tuner": "Afinador electrònic",
|
||||
"thunk": "Bruix",
|
||||
"thump": "Cop fort",
|
||||
"thump": "Soroll sord",
|
||||
"whoosh": "Xiuxiueig",
|
||||
"arrow": "Fletxa",
|
||||
"sonar": "Sonar",
|
||||
|
||||
@@ -201,7 +201,8 @@
|
||||
},
|
||||
"inProgress": "En curs",
|
||||
"invalidStartTime": "Hora d'inici no vàlida",
|
||||
"invalidEndTime": "Hora de finalització no vàlida"
|
||||
"invalidEndTime": "Hora de finalització no vàlida",
|
||||
"never": "Mai"
|
||||
},
|
||||
"unit": {
|
||||
"speed": {
|
||||
|
||||
@@ -184,6 +184,16 @@
|
||||
"restricted": {
|
||||
"title": "No hi ha càmeres disponibles",
|
||||
"description": "No teniu permís per veure cap càmera en aquest grup."
|
||||
},
|
||||
"default": {
|
||||
"title": "No s'ha configurat cap càmera",
|
||||
"description": "Comenceu connectant una càmera a Frigate.",
|
||||
"buttonText": "Afegeix una càmera"
|
||||
},
|
||||
"group": {
|
||||
"title": "No hi ha càmeres al grup",
|
||||
"description": "Aquest grup de càmeres no té càmeres assignades o habilitades.",
|
||||
"buttonText": "Gestiona els grups"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -954,7 +954,7 @@
|
||||
"useDigestAuthDescription": "Usa l'autenticació de resum HTTP per a ONVIF. Algunes càmeres poden requerir un nom d'usuari/contrasenya ONVIF dedicat en lloc de l'usuari administrador estàndard."
|
||||
},
|
||||
"save": {
|
||||
"failure": "SS'ha produït un error en desar {{cameraName}}.",
|
||||
"failure": "S'ha produït un error en desar {{cameraName}}.",
|
||||
"success": "S'ha desat correctament la càmera nova {{cameraName}}."
|
||||
},
|
||||
"testResultLabels": {
|
||||
@@ -1211,11 +1211,11 @@
|
||||
"cameraReview": {
|
||||
"object_descriptions": {
|
||||
"title": "Descripcions d'objectes generadors d'IA",
|
||||
"desc": "Activa/desactiva temporalment les descripcions d'objectes generatius d'IA per a aquesta càmera. Quan està desactivat, les descripcions generades per IA no se sol·licitaran per als objectes rastrejats en aquesta càmera."
|
||||
"desc": "Activa/desactiva temporalment les descripcions d'objectes generatius d'IA per a aquesta càmera fins que es reiniciï Frigate. Quan està desactivat, les descripcions generades per IA no se sol·licitaran per als objectes rastrejats en aquesta càmera."
|
||||
},
|
||||
"review_descriptions": {
|
||||
"title": "Descripcions de la IA generativa",
|
||||
"desc": "Activa/desactiva temporalment les descripcions de revisió de la IA generativa per a aquesta càmera. Quan està desactivat, les descripcions generades per IA no se sol·licitaran per als elements de revisió d'aquesta càmera."
|
||||
"desc": "Activa/desactiva temporalment les descripcions de la IA Generativa per a aquesta càmera fins que es reiniciï Frigate. Quan està desactivat, les descripcions generades per IA no se sol·licitaran per als elements de revisió d'aquesta càmera."
|
||||
},
|
||||
"review": {
|
||||
"title": "Revisió",
|
||||
|
||||
@@ -78,7 +78,11 @@
|
||||
"formattedTimestampFilename": {
|
||||
"24hour": "dd-MM-yy-HH-mm-ss",
|
||||
"12hour": "dd-MM.yy-h-mm-ss-a"
|
||||
}
|
||||
},
|
||||
"never": "Nikdy",
|
||||
"inProgress": "Zpracovává se",
|
||||
"invalidStartTime": "Neplatný čas začátku",
|
||||
"invalidEndTime": "Neplatný čas konce"
|
||||
},
|
||||
"button": {
|
||||
"twoWayTalk": "Obousměrná komunikace",
|
||||
@@ -115,10 +119,17 @@
|
||||
"unselect": "Zrušit výběr",
|
||||
"deleteNow": "Smazat hned",
|
||||
"next": "Další",
|
||||
"export": "Exportovat"
|
||||
"export": "Exportovat",
|
||||
"continue": "Pokračovat"
|
||||
},
|
||||
"label": {
|
||||
"back": "Jdi zpět"
|
||||
"back": "Jdi zpět",
|
||||
"hide": "Skrýt {{item}}",
|
||||
"show": "Zobrazit {{item}}",
|
||||
"ID": "ID",
|
||||
"none": "Nic",
|
||||
"all": "Vše",
|
||||
"other": "Ostatní"
|
||||
},
|
||||
"unit": {
|
||||
"speed": {
|
||||
@@ -128,6 +139,14 @@
|
||||
"length": {
|
||||
"feet": "stopa",
|
||||
"meters": "metry"
|
||||
},
|
||||
"data": {
|
||||
"kbps": "kB/s",
|
||||
"mbps": "MB/s",
|
||||
"gbps": "GB/s",
|
||||
"kbph": "kB/hodinu",
|
||||
"mbph": "MB/hodinu",
|
||||
"gbph": "GB/hodinu"
|
||||
}
|
||||
},
|
||||
"selectItem": "Vybrat {{item}}",
|
||||
@@ -230,7 +249,8 @@
|
||||
"uiPlayground": "UI hřiště",
|
||||
"faceLibrary": "Knihovna Obličejů",
|
||||
"configurationEditor": "Editor Konfigurace",
|
||||
"withSystem": "Systém"
|
||||
"withSystem": "Systém",
|
||||
"classification": "Klasifikace"
|
||||
},
|
||||
"pagination": {
|
||||
"previous": {
|
||||
@@ -270,5 +290,17 @@
|
||||
"viewer": "Divák",
|
||||
"desc": "Správci mají plný přístup ke všem funkcím v uživatelském rozhraní Frigate. Diváci jsou omezeni na sledování kamer, položek přehledu a historických záznamů v UI."
|
||||
},
|
||||
"readTheDocumentation": "Přečtěte si dokumentaci"
|
||||
"readTheDocumentation": "Přečtěte si dokumentaci",
|
||||
"list": {
|
||||
"two": "{{0}} a {{1}}",
|
||||
"many": "{{items}}, a {{last}}",
|
||||
"separatorWithSpace": ", "
|
||||
},
|
||||
"field": {
|
||||
"optional": "Volitelné",
|
||||
"internalID": "Interní ID Frigate používá v konfiguraci a databázi"
|
||||
},
|
||||
"information": {
|
||||
"pixels": "{{area}}px"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -44,7 +44,8 @@
|
||||
"button": {
|
||||
"markAsReviewed": "Označit jako zkontrolované",
|
||||
"deleteNow": "Smazat hned",
|
||||
"export": "Exportovat"
|
||||
"export": "Exportovat",
|
||||
"markAsUnreviewed": "Označit jako nezkontrolované"
|
||||
}
|
||||
},
|
||||
"export": {
|
||||
@@ -67,12 +68,13 @@
|
||||
"export": "Exportovat",
|
||||
"selectOrExport": "Vybrat pro Export",
|
||||
"toast": {
|
||||
"success": "Export úspěšně spuštěn. Soubor najdete v adresáři /exports.",
|
||||
"success": "Export úspěšně spuštěn. Soubor najdete na stránce exportů.",
|
||||
"error": {
|
||||
"failed": "Chyba spuštění exportu: {{error}}",
|
||||
"endTimeMustAfterStartTime": "Čas konce musí být po čase začátku",
|
||||
"noVaildTimeSelected": "Není vybráno žádné platné časové období"
|
||||
}
|
||||
},
|
||||
"view": "Zobrazení"
|
||||
},
|
||||
"fromTimeline": {
|
||||
"saveExport": "Uložit export",
|
||||
@@ -116,6 +118,7 @@
|
||||
"search": {
|
||||
"placeholder": "Hledej pomocí štítku nebo podštítku..."
|
||||
},
|
||||
"noImages": "Nebyly nalezeny žádné náhledy pro tuto kameru"
|
||||
"noImages": "Nebyly nalezeny žádné náhledy pro tuto kameru",
|
||||
"unknownLabel": "Uložený obrázek Spouštěče"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -132,5 +132,9 @@
|
||||
},
|
||||
"count_one": "Třída {{count}}",
|
||||
"count_other": "Třídy {{count}}"
|
||||
},
|
||||
"attributes": {
|
||||
"label": "Atributy Klasifikace",
|
||||
"all": "Všechny Atributy"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -38,10 +38,65 @@
|
||||
"deleteImageFailed": "Chyba při mazání: {{errorMessage}}",
|
||||
"deleteCategoryFailed": "Chyba při mazání třídy: {{errorMessage}}",
|
||||
"deleteModelFailed": "Chyba při mazání modelu: {{errorMessage}}",
|
||||
"categorizeFailed": "Chyba při mazání obrázku: {{errorMessage}}"
|
||||
"categorizeFailed": "Chyba při mazání obrázku: {{errorMessage}}",
|
||||
"trainingFailed": "Trénování modelu selhalo. Zkontrolujte logy Frigate pro zjištění detailů.",
|
||||
"trainingFailedToStart": "Chyba spuštění trénování modelu: {{errorMessage}}",
|
||||
"updateModelFailed": "Chyba aktualizace modelu: {{errorMessage}}",
|
||||
"renameCategoryFailed": "Chyba přejmenování třídy: {{errorMessage}}"
|
||||
}
|
||||
},
|
||||
"train": {
|
||||
"titleShort": "Nedávný"
|
||||
}
|
||||
"titleShort": "Nedávný",
|
||||
"title": "Předchozí klasifikace",
|
||||
"aria": "Vybrat předchozí Klasifikace"
|
||||
},
|
||||
"deleteModel": {
|
||||
"desc_one": "Jste si jistí, že chcete odstranit {{count}} model? Tím trvale odstraníte všechny související data včetně obrázků a tréninkových dat. Tato akce je nevratná.",
|
||||
"desc_few": "Jste si jistí, že chcete odstranit {{count}} modely? Tím trvale odstraníte všechny související data včetně obrázků a tréninkových dat. Tato akce je nevratná.",
|
||||
"desc_other": "Jste si jistí, že chcete odstranit {{count}} modelů? Tím trvale odstraníte všechny související data včetně obrázků a tréninkových dat. Tato akce je nevratná."
|
||||
},
|
||||
"deleteDatasetImages": {
|
||||
"desc_one": "Opravdu chcete odstranit {{count}} obrázek z {{dataset}}? Tato akce je nevratná a vyžaduje přetrénování modelu.",
|
||||
"desc_few": "Opravdu chcete odstranit {{count}} obrázky z {{dataset}}? Tato akce je nevratná a vyžaduje přetrénování modelu.",
|
||||
"desc_other": "Opravdu chcete odstranit {{count}} obrázků z {{dataset}}? Tato akce je nevratná a vyžaduje přetrénování modelu.",
|
||||
"title": "Smazat obrázky datové sady"
|
||||
},
|
||||
"deleteTrainImages": {
|
||||
"desc_one": "Opravdu chcete odstranit {{count}} obrázek? Tato akce je nevratná.",
|
||||
"desc_few": "Opravdu chcete odstranit {{count}} obrázky? Tato akce je nevratná.",
|
||||
"desc_other": "Opravdu chcete odstranit {{count}} obrázků? Tato akce je nevratná.",
|
||||
"title": "Odstranit tréninkové obrázky"
|
||||
},
|
||||
"wizard": {
|
||||
"step3": {
|
||||
"allImagesRequired_one": "Prosím, zařaďte všechny obrázky. Zbývá {{count}} obrázek.",
|
||||
"allImagesRequired_few": "Prosím, zařaďte všechny obrázky. Zbývají {{count}} obrázky.",
|
||||
"allImagesRequired_other": "Prosím, zařaďte všechny obrázky. Zbývá {{count}} obrázků.",
|
||||
"trainingStarted": "Trénování úspěšně spuštěno",
|
||||
"generateSuccess": "Vzorové obrázky byly úspěšně vytvořeny"
|
||||
}
|
||||
},
|
||||
"deleteCategory": {
|
||||
"title": "Smazat Třídu",
|
||||
"desc": "Opravdu chcete odstranit třídu {{name}}? Tím se na trvalo odstraní všechny související obrázky a bude potřeba přetrénovat model.",
|
||||
"minClassesTitle": "Nemůžete smazat třídu",
|
||||
"minClassesDesc": "Klasifikační model musí mít alespoň 2 třídy. Než tuto třídu odstraníte přidejte další třídu."
|
||||
},
|
||||
"edit": {
|
||||
"descriptionObject": "Upravte typ objektu a typ klasifikace pro tento model klasifikace.",
|
||||
"stateClassesInfo": "Poznámka: Změna tříd stavů vyžaduje přetrénování modelu s aktualizovanými třídami."
|
||||
},
|
||||
"renameCategory": {
|
||||
"title": "Přejmenovat třídu",
|
||||
"desc": "Vložte nové jméno pro {{name}}. Aby se změna názvu projevila, bude nutné model znovu natrénovat."
|
||||
},
|
||||
"description": {
|
||||
"invalidName": "Neplatné jméno. Jméno můžou obsahovat pouze písmena, čísla, mezery, apostrofy, podtržítka a spojovníky."
|
||||
},
|
||||
"categories": "Třídy",
|
||||
"createCategory": {
|
||||
"new": "Vytvořit novou Třídu"
|
||||
},
|
||||
"categorizeImageAs": "Klasifikovat obrázek jako:",
|
||||
"categorizeImage": "Klasifikovat obrázek"
|
||||
}
|
||||
|
||||
@@ -9,14 +9,18 @@
|
||||
"empty": {
|
||||
"alert": "Nejsou žádné výstrahy na kontrolu",
|
||||
"detection": "Nejsou žádné detekce na kontrolu",
|
||||
"motion": "Nenalezena žádná data o pohybu"
|
||||
"motion": "Nenalezena žádná data o pohybu",
|
||||
"recordingsDisabled": {
|
||||
"title": "Nahrávání musí být povoleno",
|
||||
"description": "Položky revize lze pro kameru vytvořit pouze tehdy, je-li pro ni povoleno nahrávání."
|
||||
}
|
||||
},
|
||||
"timeline": "Časová osa",
|
||||
"timeline.aria": "Zvolit časovou osu",
|
||||
"events": {
|
||||
"label": "Události",
|
||||
"aria": "Zvolit události",
|
||||
"noFoundForTimePeriod": "Pro toto období nebyly nalezeny žádné události."
|
||||
"noFoundForTimePeriod": "Pro toto časové období nebyly nalezeny žádné události."
|
||||
},
|
||||
"documentTitle": "Revize - Frigate",
|
||||
"camera": "Kamera",
|
||||
@@ -26,8 +30,8 @@
|
||||
"markAsReviewed": "Označit jako zkontrolované",
|
||||
"markTheseItemsAsReviewed": "Označit tyto položky jako zkontrolované",
|
||||
"newReviewItems": {
|
||||
"label": "Zobrazit nové položky na kontrolu",
|
||||
"button": "Nové položky na kontrolu"
|
||||
"label": "Zobrazit nové položky revize",
|
||||
"button": "Nové položky revize"
|
||||
},
|
||||
"recordings": {
|
||||
"documentTitle": "Záznamy - Frigate"
|
||||
@@ -42,8 +46,22 @@
|
||||
"detail": {
|
||||
"label": "Detail",
|
||||
"noDataFound": "Žádná detailní data k prohlédnutí",
|
||||
"aria": "Přepnout detailní zobrazení",
|
||||
"aria": "Přepnout zobrazení detailů",
|
||||
"trackedObject_other": "{{count}} objektů",
|
||||
"trackedObject_one": "{{count}} objektů"
|
||||
}
|
||||
"trackedObject_one": "{{count}} objekt",
|
||||
"noObjectDetailData": "Nejsou k dispozici žádné podrobné údaje o objektu.",
|
||||
"settings": "Nastavení Detailního Zobrazení",
|
||||
"alwaysExpandActive": {
|
||||
"title": "Vždy rozbalit aktivní",
|
||||
"desc": "Vždy zobrazit podrobnosti objektu aktivní položky revize, pokud jsou k dispozici."
|
||||
}
|
||||
},
|
||||
"objectTrack": {
|
||||
"trackedPoint": "Sledovaný bod",
|
||||
"clickToSeek": "Kliknutím přeskočte na tento čas"
|
||||
},
|
||||
"select_all": "Vše",
|
||||
"normalActivity": "Normální",
|
||||
"needsReview": "Potřebuje revizi",
|
||||
"securityConcern": "Obava o bezpečnost"
|
||||
}
|
||||
|
||||
@@ -24,7 +24,8 @@
|
||||
"regenerate": "Od {{provider}} byl vyžádán nový popis. V závislosti na rychlosti vašeho poskytovatele může obnovení nového popisu nějakou dobu trvat.",
|
||||
"updatedSublabel": "Úspěšně aktualizovaný podružný štítek.",
|
||||
"updatedLPR": "Úspěšně aktualizovaná SPZ.",
|
||||
"audioTranscription": "Požádání o přepis zvuku bylo úspěšné."
|
||||
"audioTranscription": "Požádání o přepis zvuku bylo úspěšné. V závislosti na rychlosti Vašeho Frigate serveru může přepis trvat nějaký čas než bude dokončen.",
|
||||
"updatedAttributes": "Atributy byly úspěšně aktualizovány."
|
||||
},
|
||||
"error": {
|
||||
"regenerate": "Chyba volání {{provider}} pro nový popis: {{errorMessage}}",
|
||||
@@ -206,7 +207,7 @@
|
||||
"dialog": {
|
||||
"confirmDelete": {
|
||||
"title": "Potvrdit smazání",
|
||||
"desc": "Odstraněním tohoto sledovaného objektu se odstraní snímek, všechna uložená vložení a všechny související položky životního cyklu objektu. Zaznamenaný záznam tohoto sledovaného objektu v zobrazení Historie <em>NEBUDE</em> smazán.<br /><br />Opravdu chcete pokračovat?"
|
||||
"desc": "Odstraněním tohoto sledovaného objektu se odstraní snímek, všechna uložená vložení a všechny související položky s podrobnostmi o sledování. Zaznamenaný záznam tohoto sledovaného objektu v zobrazení Historie <em>NEBUDE</em> smazán.<br /><br />Opravdu chcete pokračovat?"
|
||||
}
|
||||
},
|
||||
"trackedObjectDetails": "Detaily sledovaných objektů",
|
||||
@@ -214,7 +215,9 @@
|
||||
"details": "detaily",
|
||||
"snapshot": "snímek",
|
||||
"video": "video",
|
||||
"object_lifecycle": "životní cyklus objektu"
|
||||
"object_lifecycle": "životní cyklus objektu",
|
||||
"thumbnail": "Náhled",
|
||||
"tracking_details": "detaily sledování"
|
||||
},
|
||||
"noTrackedObjects": "Žádné sledované objekty nebyly nalezeny",
|
||||
"fetchingTrackedObjectsFailed": "Chyba při načítání sledovaných objektů: {{errorMessage}}",
|
||||
@@ -224,5 +227,49 @@
|
||||
},
|
||||
"concerns": {
|
||||
"label": "Obavy"
|
||||
},
|
||||
"trackingDetails": {
|
||||
"title": "Detaily Sledování",
|
||||
"noImageFound": "Nebyl nalezen obrázek pro tuto časovou značku.",
|
||||
"createObjectMask": "Vytvořit Masku Objektu",
|
||||
"adjustAnnotationSettings": "Upravte nastavení poznámek",
|
||||
"scrollViewTips": "Klikněte pro zobrazení významných okamžiků z životního cyklu tohoto objektu.",
|
||||
"autoTrackingTips": "Pozice ohraničujících rámečků budou nepřesné pro kamery s automatickým sledováním.",
|
||||
"count": "{{first}} z {{second}}",
|
||||
"trackedPoint": "Sledovaný Bod",
|
||||
"lifecycleItemDesc": {
|
||||
"visible": "Detekován {{label}}",
|
||||
"entered_zone": "{{label}} vstoupil do {{zones}}",
|
||||
"active": "{{label}} se stal aktivním",
|
||||
"stationary": "{{label}} se zastavil",
|
||||
"attribute": {
|
||||
"faceOrLicense_plate": "Pro {{label}} zjištěn {{attribute}}"
|
||||
},
|
||||
"header": {
|
||||
"ratio": "Poměr",
|
||||
"area": "Oblast",
|
||||
"score": "Skóre"
|
||||
}
|
||||
},
|
||||
"annotationSettings": {
|
||||
"title": "Nastavení anotací",
|
||||
"showAllZones": {
|
||||
"title": "Zobrazit všechny zóny",
|
||||
"desc": "Vždy zobrazovat zóny na snímcích, na kterých objekty vstoupili do zóny."
|
||||
},
|
||||
"offset": {
|
||||
"label": "Odsazení anotace",
|
||||
"desc": "Tato data pocházejí z detekčního kanálu vaší kamery, ale překrývají se s obrázky ze záznamového kanálu. Je nepravděpodobné, že by oba streamy byly dokonale synchronizované. V důsledku toho se ohraničovací rámeček a záznam nebudou dokonale srovnávat. Toto nastavení můžete použít k časovému posunutí anotací dopředu nebo dozadu, abyste je lépe zarovnali se zaznamenaným záznamem.",
|
||||
"millisecondsToOffset": "Milisekundy na posunutí detekce anotací. <em>Výchozí: 0</em>",
|
||||
"tips": "Snižte hodnotu, pokud je přehrávané video před ohraničením a body cesty, nebo zvyšte hodnotu, pokud je přehrávané video za nimi. Hodnota může být i záporná.",
|
||||
"toast": {
|
||||
"success": "Odsazení anotací pro {{camera}} bylo uloženo do konfiguračního souboru."
|
||||
}
|
||||
}
|
||||
},
|
||||
"carousel": {
|
||||
"previous": "Předcházející snímek",
|
||||
"next": "Další snímek"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"imageEntry": {
|
||||
"dropInstructions": "Přetáhněte obrázek zde, nebo klikněte na výběr",
|
||||
"dropInstructions": "Přetáhněte obrázek sem, nebo klikněte na výběr",
|
||||
"maxSize": "Maximální velikost: {{size}}MB",
|
||||
"dropActive": "Přetáhněte obrázek zde…",
|
||||
"validation": {
|
||||
@@ -10,7 +10,7 @@
|
||||
"createFaceLibrary": {
|
||||
"new": "Vytvořit nový obličej",
|
||||
"desc": "Vytvořit novou kolekci",
|
||||
"nextSteps": "Chcete-li vybudovat pevný základ:<li>Použijte kartu Trénování k výběru a trénování na snímcích pro každou detekovanou osobu.</li><li>Pro nejlepší výsledky se zaměřte na přímé snímky; vyhněte se trénování snímků, které zachycují obličeje pod úhlem.</li></ul>",
|
||||
"nextSteps": "Chcete-li vybudovat pevný základ:<li>Použijte kartu Nedávná Rozpoznání k výběru a trénování na snímcích pro každou detekovanou osobu.</li><li>Pro nejlepší výsledky se zaměřte na přímé snímky; vyhněte se trénování snímků, které zachycují obličeje pod úhlem.</li></ul>",
|
||||
"title": "Vytvořit kolekci"
|
||||
},
|
||||
"details": {
|
||||
@@ -44,7 +44,7 @@
|
||||
"description": {
|
||||
"addFace": "Přidejte novou kolekci do Knihovny obličejů nahráním prvního obrázku.",
|
||||
"placeholder": "Zadejte název pro tuto kolekci",
|
||||
"invalidName": "Neplatný název. Názvy mohou obsahovat pouze písmena, čísla, mezery, apostrofy, podtržítka a pomlčky."
|
||||
"invalidName": "Neplatné jméno. Jméno můžou obsahovat pouze písmena, čísla, mezery, apostrofy, podtržítka a spojovníky."
|
||||
},
|
||||
"documentTitle": "Knihovna obličejů - Frigate",
|
||||
"uploadFaceImage": {
|
||||
|
||||
@@ -86,7 +86,7 @@
|
||||
"enable": "Ukázat statistiky streamu"
|
||||
},
|
||||
"manualRecording": {
|
||||
"title": "Nahrávání na vyžádání",
|
||||
"title": "Na požádání",
|
||||
"playInBackground": {
|
||||
"label": "Přehrát na pozadí",
|
||||
"desc": "Povolte tuto volbu pro pokračování streamování i když je přehrávač skrytý."
|
||||
@@ -103,7 +103,7 @@
|
||||
"started": "Manuálně spuštěno nahrávání na požádání.",
|
||||
"ended": "Ukončeno manuální nahrávání na vyžádání.",
|
||||
"recordDisabledTips": "Protože je v konfiguraci této kamery nahrávání zakázáno nebo omezeno, bude uložen pouze snímek.",
|
||||
"tips": "Spustit ruční událost na základě nastavení uchovávání záznamů této kamery."
|
||||
"tips": "Stáhněte si aktuální snímek nebo spusťte ruční událost na základě nastavení uchování záznamu této kamery."
|
||||
},
|
||||
"streamingSettings": "Nastavení Streamování",
|
||||
"audio": "Zvuk",
|
||||
@@ -167,5 +167,11 @@
|
||||
"transcription": {
|
||||
"enable": "Povolit živý přepis zvuku",
|
||||
"disable": "Zakázat živý přepis zvuku"
|
||||
},
|
||||
"snapshot": {
|
||||
"takeSnapshot": "Stáhnout aktuální snímek",
|
||||
"noVideoSource": "Pro snímek není k dispozici žádné video.",
|
||||
"captureFailed": "Zachycení snímku selhalo.",
|
||||
"downloadStarted": "Stažení snímku spuštěno."
|
||||
}
|
||||
}
|
||||
|
||||
@@ -134,7 +134,7 @@
|
||||
"name": {
|
||||
"inputPlaceHolder": "Zadejte jméno…",
|
||||
"title": "Jméno",
|
||||
"tips": "Název musí mít alespoň 2 znaky a nesmí být shodný s názvem kamery nebo jiné zóny."
|
||||
"tips": "Název musí mít alespoň 2 znaky, musí obsahovat alespoň jedno písmeno a nesmí být shodný s názvem kamery nebo jiné zóny této kamery."
|
||||
},
|
||||
"inertia": {
|
||||
"title": "Setrvačnost",
|
||||
@@ -160,7 +160,7 @@
|
||||
}
|
||||
},
|
||||
"toast": {
|
||||
"success": "Zóna {{zoneName}} byla uložena. Restartujte Frigate pro aplikování změn."
|
||||
"success": "Zóna {{zoneName}} byla uložena."
|
||||
},
|
||||
"label": "Zóny",
|
||||
"desc": {
|
||||
@@ -199,8 +199,8 @@
|
||||
"clickDrawPolygon": "Kliknutím nakreslíte polygon do obrázku.",
|
||||
"toast": {
|
||||
"success": {
|
||||
"title": "{{polygonName}} byl uložen. Restartujte Frigate pro aplikování změn.",
|
||||
"noName": "Maska Detekce pohybu byla uložena. Restartujte Frigate pro aplikování změn."
|
||||
"title": "{{polygonName}} byl uložen.",
|
||||
"noName": "Maska Detekce pohybu byla uložena."
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -284,8 +284,8 @@
|
||||
"clickDrawPolygon": "Kliknutím nakreslete polygon do obrázku.",
|
||||
"toast": {
|
||||
"success": {
|
||||
"title": "{{polygonName}} byl uložen. Restartujte Frigate pro aplikování změn.",
|
||||
"noName": "Maska Objektu byla uložena. Restartujte Frigate pro aplikování změn."
|
||||
"title": "{{polygonName}} byl uložen.",
|
||||
"noName": "Maska Objektu byla uložena."
|
||||
}
|
||||
},
|
||||
"point_one": "{{count}} bod",
|
||||
@@ -322,7 +322,7 @@
|
||||
"noCamera": "Žádná Kamera"
|
||||
},
|
||||
"general": {
|
||||
"title": "Hlavní nastavení",
|
||||
"title": "Nastavení rozhraní",
|
||||
"liveDashboard": {
|
||||
"title": "Živý dashboard",
|
||||
"automaticLiveView": {
|
||||
@@ -332,6 +332,13 @@
|
||||
"playAlertVideos": {
|
||||
"label": "Přehrát videa s výstrahou",
|
||||
"desc": "Ve výchozím nastavení se nedávná upozornění na ovládacím panelu Živě přehrávají jako malá opakující se videa. Vypněte tuto možnost, chcete-li na tomto zařízení/prohlížeči zobrazovat pouze statický obrázek nedávných výstrah."
|
||||
},
|
||||
"displayCameraNames": {
|
||||
"label": "Vždy zobrazit názvy kamer",
|
||||
"desc": "Vždy zobrazit názvy kamer v čipu na ovládacím panelu živého náhledu s více kamerami."
|
||||
},
|
||||
"liveFallbackTimeout": {
|
||||
"label": "Časový limit pádu živého přehrávání"
|
||||
}
|
||||
},
|
||||
"storedLayouts": {
|
||||
@@ -629,11 +636,11 @@
|
||||
"actions": "Akce",
|
||||
"noUsers": "Žádní uživatelé nebyli nalezeni.",
|
||||
"changeRole": "Změnit roli uživatele",
|
||||
"password": "Heslo",
|
||||
"password": "Resetovat Heslo",
|
||||
"deleteUser": "Smazat uživatele",
|
||||
"role": "Role"
|
||||
},
|
||||
"updatePassword": "Aktualizovat heslo",
|
||||
"updatePassword": "Resetovat heslo",
|
||||
"toast": {
|
||||
"success": {
|
||||
"createUser": "Uživatel {{user}} úspěšně vytvořen",
|
||||
@@ -743,7 +750,7 @@
|
||||
"triggers": {
|
||||
"documentTitle": "Spouštěče",
|
||||
"management": {
|
||||
"title": "Správa spouštěčů",
|
||||
"title": "Spouštěče",
|
||||
"desc": "Spravovat spouštěče pro {{camera}}. Použít typ miniatury ke spuštění u miniatur podobných vybranému sledovanému objektu a typ popisu ke spuštění u popisů podobných zadanému textu."
|
||||
},
|
||||
"addTrigger": "Přidat spouštěč",
|
||||
@@ -782,10 +789,10 @@
|
||||
"form": {
|
||||
"name": {
|
||||
"title": "Název",
|
||||
"placeholder": "Zadejte název spouštěče",
|
||||
"placeholder": "Pojmenujte tento spouštěč",
|
||||
"error": {
|
||||
"minLength": "Název musí mít alespoň 2 znaky.",
|
||||
"invalidCharacters": "Jméno může obsahovat pouze písmena, číslice, podtržítka a pomlčky.",
|
||||
"minLength": "Pole musí mít alespoň 2 znaky.",
|
||||
"invalidCharacters": "Pole může obsahovat pouze písmena, číslice, podtržítka a pomlčky.",
|
||||
"alreadyExists": "Spouštěč s tímto názvem již pro tuto kameru existuje."
|
||||
}
|
||||
},
|
||||
@@ -798,9 +805,9 @@
|
||||
},
|
||||
"content": {
|
||||
"title": "Obsah",
|
||||
"imagePlaceholder": "Vybrat obrázek",
|
||||
"imagePlaceholder": "Vyberte miniaturu",
|
||||
"textPlaceholder": "Zadat textový obsah",
|
||||
"imageDesc": "Vybrat obrázek, který spustí tuto akci, když bude detekován podobný obrázek.",
|
||||
"imageDesc": "Je zobrazeno pouze posledních 100 miniatur. Pokud nemůžete najít požadovanou miniaturu, prosím zkontrolujte dřívější objekty v Prozkoumat a nastavte spouštěč ze tamějšího menu.",
|
||||
"textDesc": "Zadejte text, který spustí tuto akci, když bude zjištěn podobný popis sledovaného objektu.",
|
||||
"error": {
|
||||
"required": "Obsah je povinný."
|
||||
@@ -808,7 +815,7 @@
|
||||
},
|
||||
"actions": {
|
||||
"title": "Akce",
|
||||
"desc": "Ve výchozím nastavení Frigate odesílá MQTT zprávu pro všechny spouštěče. Zvolte dodatečnou akci, která se má provést, když se tento spouštěč aktivuje.",
|
||||
"desc": "Ve výchozím nastavení Frigate odesílá MQTT zprávu pro všechny spouštěče. Podřazené popisky přidávají název spouštěče k popisku objektu. Atributy jsou prohledávatelná metadata uložená samostatně v metadatech sledovaného objektu.",
|
||||
"error": {
|
||||
"min": "Musí být vybrána alespoň jedna akce."
|
||||
}
|
||||
@@ -850,9 +857,9 @@
|
||||
"createRole": "Role {{role}} byla úspěšně vytvořena",
|
||||
"updateCameras": "Kamery byly aktualizovány pro roli {{role}}",
|
||||
"deleteRole": "Role {{role}} byla úspěšně smazána",
|
||||
"userRolesUpdated_one": "{{count}} uživatel(ů) přiřazených k této roli bylo aktualizováno na „Divák“, který má přístup ke všem kamerám.",
|
||||
"userRolesUpdated_few": "",
|
||||
"userRolesUpdated_other": ""
|
||||
"userRolesUpdated_one": "{{count}} uživatel přiřazený k této roli byl aktualizován na „diváka“, který má přístup ke všem kamerám.",
|
||||
"userRolesUpdated_few": "{{count}} uživatelé přiřazení k této roli bylo aktualizováno na „diváky“, kteří mají přístup ke všem kamerám.",
|
||||
"userRolesUpdated_other": "{{count}} uživatelů přiřazených k této roli bylo aktualizováno na „diváky“, kteří mají přístup ke všem kamerám."
|
||||
},
|
||||
"error": {
|
||||
"createRoleFailed": "Nepodařilo se vytvořit roli: {{errorMessage}}",
|
||||
@@ -896,5 +903,36 @@
|
||||
"title": "Správa role diváka",
|
||||
"desc": "Spravujte vlastní role diváků a jejich oprávnění k přístupu ke kamerám pro tuto instanci Frigate."
|
||||
}
|
||||
},
|
||||
"cameraWizard": {
|
||||
"save": {
|
||||
"success": "Nová kamera {{cameraName}} úspěšně uložena."
|
||||
},
|
||||
"step2": {
|
||||
"testSuccess": "Test připojení v pořádku!",
|
||||
"probeSuccessful": "Sonda úspěšná",
|
||||
"probeNoSuccess": "Sonda neúspěšná"
|
||||
},
|
||||
"step3": {
|
||||
"testSuccess": "Test streamu v pořádku!"
|
||||
},
|
||||
"step4": {
|
||||
"reconnectionSuccess": "Opakované připojení úspěšné.",
|
||||
"streamValidated": "Stream {{number}} úspěšně ověřený"
|
||||
}
|
||||
},
|
||||
"cameraManagement": {
|
||||
"cameraConfig": {
|
||||
"toast": {
|
||||
"success": "Kamera {{cameraName}} úspěšně uložena"
|
||||
}
|
||||
}
|
||||
},
|
||||
"cameraReview": {
|
||||
"reviewClassification": {
|
||||
"toast": {
|
||||
"success": "Konfigurace Klasifikací Revizí byla uložena. Restartujte Frigate pro aplikování změn."
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -112,12 +112,23 @@
|
||||
"gpuUsage": "Využití CPU",
|
||||
"gpuMemory": "Paměť GPU",
|
||||
"gpuEncoder": "GPU kodér",
|
||||
"gpuDecoder": "GPU Dekodér"
|
||||
"gpuDecoder": "GPU Dekodér",
|
||||
"intelGpuWarning": {
|
||||
"title": "Upozornění Intel GPU Stats",
|
||||
"message": "Statistiky GPU nedostupné",
|
||||
"description": "Toto je známá chyba v nástrojích Intel pro hlášení statistik GPU (intel_gpu_top), která selhává a opakovaně vrací využití GPU 0 %, a to i v případech, kdy na (i)GPU správně běží hardwarová akcelerace a detekce objektů. Nejedná se o chybu Frigate. Můžete restartovat hostitele, abyste problém dočasně vyřešili a potvrdili, že GPU funguje správně. Toto neovlivňuje výkon."
|
||||
}
|
||||
},
|
||||
"otherProcesses": {
|
||||
"title": "Ostatní procesy",
|
||||
"processCpuUsage": "Využití CPU procesy",
|
||||
"processMemoryUsage": "Využití paměti procesy"
|
||||
"processMemoryUsage": "Využití paměti procesy",
|
||||
"series": {
|
||||
"go2rtc": "go2rtc",
|
||||
"recording": "nahrávání",
|
||||
"review_segment": "revidovat segment",
|
||||
"embeddings": "vložení"
|
||||
}
|
||||
},
|
||||
"title": "Hlavní"
|
||||
},
|
||||
|
||||
@@ -84,5 +84,116 @@
|
||||
"babbling": "Pludren",
|
||||
"yell": "Råb",
|
||||
"whoop": "Jubel",
|
||||
"snicker": "Smålatter"
|
||||
"snicker": "Smålatter",
|
||||
"bird": "Fugl",
|
||||
"cat": "Kat",
|
||||
"dog": "Hund",
|
||||
"horse": "Hest",
|
||||
"sheep": "Får",
|
||||
"mouse": "Mus",
|
||||
"keyboard": "Tastatur",
|
||||
"blender": "Mixer",
|
||||
"hair_dryer": "Føntørrer",
|
||||
"animal": "Dyr",
|
||||
"bark": "Gø",
|
||||
"goat": "Gæd",
|
||||
"sigh": "Suk",
|
||||
"singing": "Synger",
|
||||
"choir": "Kor",
|
||||
"yodeling": "Jodlen",
|
||||
"chant": "Messe",
|
||||
"mantra": "Meditationsmantra",
|
||||
"child_singing": "Barn Synger",
|
||||
"synthetic_singing": "Syntetisk Sang",
|
||||
"rapping": "Rapper",
|
||||
"humming": "Nynner",
|
||||
"groan": "Støn",
|
||||
"grunt": "Grynt",
|
||||
"whistling": "Fløjter",
|
||||
"breathing": "Vejrtrækning",
|
||||
"wheeze": "Hæsende vejrtrækning",
|
||||
"snoring": "Snorker",
|
||||
"gasp": "Gisp",
|
||||
"pant": "Anstrengende vejrtrækning",
|
||||
"snort": "Fnyse",
|
||||
"cough": "Hoster",
|
||||
"throat_clearing": "Rømmer sig",
|
||||
"sneeze": "Nyser",
|
||||
"sniff": "Snøfter",
|
||||
"run": "Løb",
|
||||
"shuffle": "Trække fødderne",
|
||||
"footsteps": "Fodtrin",
|
||||
"chewing": "Tygger",
|
||||
"biting": "Bider",
|
||||
"gargling": "Gurgler",
|
||||
"stomach_rumble": "Maverumlen",
|
||||
"burping": "Bøvser",
|
||||
"hiccup": "Hikke",
|
||||
"fart": "Prut",
|
||||
"hands": "Hænder",
|
||||
"finger_snapping": "Knipse fingere",
|
||||
"clapping": "Klapper",
|
||||
"heartbeat": "Hjertebanken",
|
||||
"heart_murmur": "Hjertemislyd",
|
||||
"cheering": "Hujen",
|
||||
"applause": "Bifald",
|
||||
"chatter": "Snak",
|
||||
"crowd": "Forsamling",
|
||||
"children_playing": "Børn leger",
|
||||
"pets": "Kæledyr",
|
||||
"yip": "Jubel",
|
||||
"howl": "Hyl",
|
||||
"bow_wow": "Vov vov",
|
||||
"growling": "Knurren",
|
||||
"whimper_dog": "Hundeklynk",
|
||||
"purr": "Spinde",
|
||||
"meow": "Meaw",
|
||||
"hiss": "Hvæser",
|
||||
"caterwaul": "Kattejammer",
|
||||
"livestock": "Husdyr",
|
||||
"oink": "Nøf",
|
||||
"bleat": "Brægen",
|
||||
"vibration": "Vibration",
|
||||
"fowl": "Fjerkræ",
|
||||
"chicken": "Kylling",
|
||||
"cluck": "Kagle",
|
||||
"cock_a_doodle_doo": "Kykeliky",
|
||||
"turkey": "Kalkun",
|
||||
"gobble": "Kalkunlyd",
|
||||
"duck": "And",
|
||||
"quack": "Rap",
|
||||
"goose": "Gås",
|
||||
"honk": "Dyt",
|
||||
"wild_animals": "Vilde dyr",
|
||||
"roaring_cats": "Brølende katte",
|
||||
"roar": "Brøl",
|
||||
"chirp": "Pip",
|
||||
"squawk": "Skræppen",
|
||||
"pigeon": "Due",
|
||||
"coo": "Kurre",
|
||||
"crow": "Krage",
|
||||
"caw": "Kragelyd",
|
||||
"owl": "Ugle",
|
||||
"hoot": "Uglehyl",
|
||||
"flapping_wings": "Vingeslag",
|
||||
"dogs": "Hunde",
|
||||
"rats": "Rotter",
|
||||
"patter": "Dråbelyd",
|
||||
"insect": "Insekt",
|
||||
"cricket": "Cricket",
|
||||
"guitar": "Guitar",
|
||||
"electric_guitar": "Elektrisk Guitar",
|
||||
"bass_guitar": "Basguitar",
|
||||
"acoustic_guitar": "Akustisk Guitar",
|
||||
"steel_guitar": "Stål Guitar",
|
||||
"tapping": "Tapping på guitar",
|
||||
"strum": "Slå an",
|
||||
"banjo": "Banjo",
|
||||
"sitar": "Sitar",
|
||||
"mandolin": "Mandolin",
|
||||
"snare_drum": "Lilletromme",
|
||||
"rimshot": "Kantslag",
|
||||
"drum_roll": "Trommehvirvel",
|
||||
"bass_drum": "Stortromme",
|
||||
"techno": "Techno"
|
||||
}
|
||||
|
||||
@@ -24,13 +24,13 @@
|
||||
"am": "am",
|
||||
"year_one": "{{time}} år",
|
||||
"year_other": "{{time}} år",
|
||||
"mo": "{{time}}mo",
|
||||
"mo": "{{time}}må",
|
||||
"month_one": "{{time}} måned",
|
||||
"month_other": "{{time}} måneder",
|
||||
"d": "{{time}}d",
|
||||
"day_one": "{{time}} dag",
|
||||
"day_other": "{{time}} dage",
|
||||
"h": "{{time}}h",
|
||||
"h": "{{time}}t",
|
||||
"yr": "{{time}}yr",
|
||||
"hour_one": "{{time}} time",
|
||||
"hour_other": "{{time}} timer",
|
||||
@@ -41,11 +41,11 @@
|
||||
"second_one": "{{time}} sekund",
|
||||
"second_other": "{{time}} sekunder",
|
||||
"formattedTimestamp": {
|
||||
"12hour": "MMM d, h:mm:ss aaa",
|
||||
"24hour": "MMM d, HH:mm:ss"
|
||||
"12hour": "d MMM, h:mm:ss aaa",
|
||||
"24hour": "d. MMM, HH:mm:ss"
|
||||
},
|
||||
"formattedTimestamp2": {
|
||||
"12hour": "MM/dd h:mm:ssa",
|
||||
"12hour": "dd/MM h:mm:ss",
|
||||
"24hour": "d MMM HH:mm:ss"
|
||||
},
|
||||
"formattedTimestampHourMinute": {
|
||||
@@ -57,22 +57,26 @@
|
||||
"24hour": "HH:mm:ss"
|
||||
},
|
||||
"formattedTimestampMonthDayHourMinute": {
|
||||
"12hour": "MMM d, h:mm aaa",
|
||||
"24hour": "MMM d, HH:mm"
|
||||
"12hour": "d MMM, h:mm aaa",
|
||||
"24hour": "d MMM, HH:mm"
|
||||
},
|
||||
"formattedTimestampMonthDayYear": {
|
||||
"12hour": "MMM d, yyyy",
|
||||
"24hour": "MMM d, yyyy"
|
||||
"12hour": "d MMM, yyyy",
|
||||
"24hour": "d MMM, yyyy"
|
||||
},
|
||||
"formattedTimestampMonthDayYearHourMinute": {
|
||||
"12hour": "MMM d yyyy, h:mm aaa",
|
||||
"24hour": "MMM d yyyy, HH:mm"
|
||||
"12hour": "d MMM yyyy, h:mm aaa",
|
||||
"24hour": "d MMM yyyy, HH:mm"
|
||||
},
|
||||
"formattedTimestampMonthDay": "MMM d",
|
||||
"formattedTimestampMonthDay": "d MMM",
|
||||
"formattedTimestampFilename": {
|
||||
"12hour": "MM-dd-yy-h-mm-ss-a",
|
||||
"24hour": "MM-dd-yy-HH-mm-ss"
|
||||
}
|
||||
"12hour": "dd-MM-yy-h-mm-ss-a",
|
||||
"24hour": "dd-MM-yy-HH-mm-ss"
|
||||
},
|
||||
"never": "Aldrig",
|
||||
"inProgress": "Under behandling",
|
||||
"invalidStartTime": "Ugyldig starttid",
|
||||
"invalidEndTime": "Ugyldig sluttid"
|
||||
},
|
||||
"unit": {
|
||||
"speed": {
|
||||
@@ -82,14 +86,28 @@
|
||||
"length": {
|
||||
"feet": "fod",
|
||||
"meters": "meter"
|
||||
},
|
||||
"data": {
|
||||
"kbps": "kB/s",
|
||||
"mbps": "MB/s",
|
||||
"gbps": "GB/s",
|
||||
"kbph": "kB/time",
|
||||
"mbph": "MB/time",
|
||||
"gbph": "GB/time"
|
||||
}
|
||||
},
|
||||
"label": {
|
||||
"back": "Gå tilbage"
|
||||
"back": "Gå tilbage",
|
||||
"hide": "Skjul {{item}}",
|
||||
"show": "Vis {{item}}",
|
||||
"ID": "ID",
|
||||
"none": "Ingen",
|
||||
"all": "Alle",
|
||||
"other": "Andet"
|
||||
},
|
||||
"button": {
|
||||
"apply": "Anvend",
|
||||
"reset": "Reset",
|
||||
"reset": "Nulstil",
|
||||
"done": "Udført",
|
||||
"enabled": "Aktiveret",
|
||||
"enable": "Aktiver",
|
||||
@@ -116,21 +134,22 @@
|
||||
"no": "Nej",
|
||||
"download": "Download",
|
||||
"info": "Info",
|
||||
"suspended": "Suspenderet",
|
||||
"unsuspended": "Ophæv suspendering",
|
||||
"suspended": "Sat på pause",
|
||||
"unsuspended": "Genoptag",
|
||||
"play": "Afspil",
|
||||
"unselect": "Fravælg",
|
||||
"export": "Eksporter",
|
||||
"deleteNow": "Slet nu",
|
||||
"next": "Næste"
|
||||
"next": "Næste",
|
||||
"continue": "Fortsæt"
|
||||
},
|
||||
"menu": {
|
||||
"system": "System",
|
||||
"systemMetrics": "System metrics",
|
||||
"systemMetrics": "Systemstatistik",
|
||||
"configuration": "Konfiguration",
|
||||
"systemLogs": "System logs",
|
||||
"systemLogs": "Systemlogfiler",
|
||||
"settings": "Indstillinger",
|
||||
"configurationEditor": "Konfiguratons Editor",
|
||||
"configurationEditor": "Konfigurationsværktøj",
|
||||
"languages": "Sprog",
|
||||
"language": {
|
||||
"en": "English (Engelsk)",
|
||||
@@ -165,8 +184,16 @@
|
||||
"th": "ไทย (Thai)",
|
||||
"ca": "Català (Katalansk)",
|
||||
"withSystem": {
|
||||
"label": "Brug system indstillinger for sprog"
|
||||
}
|
||||
"label": "Brug systemindstillinger for sprog"
|
||||
},
|
||||
"ptBR": "Português brasileiro (Brasiliansk Portugisisk)",
|
||||
"sr": "Српски (Serbisk)",
|
||||
"sl": "Slovenščina (Slovensk)",
|
||||
"lt": "Lietuvių (Litauisk)",
|
||||
"bg": "Български (Bulgarsk)",
|
||||
"gl": "Galego (Galisisk)",
|
||||
"id": "Bahasa Indonesia (Indonesisk)",
|
||||
"ur": "اردو (Urdu)"
|
||||
},
|
||||
"appearance": "Udseende",
|
||||
"darkMode": {
|
||||
@@ -185,7 +212,7 @@
|
||||
"nord": "Nord",
|
||||
"red": "Rød",
|
||||
"highcontrast": "Høj Kontrast",
|
||||
"default": "Default"
|
||||
"default": "Standard"
|
||||
},
|
||||
"help": "Hjælp",
|
||||
"documentation": {
|
||||
@@ -202,19 +229,20 @@
|
||||
"count_other": "{{count}} Kameraer"
|
||||
}
|
||||
},
|
||||
"review": "Review",
|
||||
"review": "Gennemse",
|
||||
"explore": "Udforsk",
|
||||
"export": "Eksporter",
|
||||
"uiPlayground": "UI sandkasse",
|
||||
"faceLibrary": "Face Library",
|
||||
"faceLibrary": "Ansigtsarkiv",
|
||||
"user": {
|
||||
"title": "Bruger",
|
||||
"account": "Konto",
|
||||
"current": "Aktiv bruger: {{user}}",
|
||||
"anonymous": "anonym",
|
||||
"logout": "Logout",
|
||||
"logout": "Log ud",
|
||||
"setPassword": "Set Password"
|
||||
}
|
||||
},
|
||||
"classification": "Kategorisering"
|
||||
},
|
||||
"toast": {
|
||||
"copyUrlToClipboard": "Kopieret URL til klippebord.",
|
||||
@@ -252,8 +280,20 @@
|
||||
"notFound": {
|
||||
"documentTitle": "Ikke fundet - Frigate",
|
||||
"title": "404",
|
||||
"desc": "Side ikke fundet"
|
||||
"desc": "Siden blev ikke fundet"
|
||||
},
|
||||
"selectItem": "Vælg {{item}}",
|
||||
"readTheDocumentation": "Læs dokumentationen"
|
||||
"readTheDocumentation": "Læs dokumentationen",
|
||||
"list": {
|
||||
"two": "{{0}} og {{1}}",
|
||||
"many": "{{items}}, og {{last}}",
|
||||
"separatorWithSpace": ", "
|
||||
},
|
||||
"field": {
|
||||
"optional": "Valgfrit",
|
||||
"internalID": "Det interne ID som Frigate bruger i konfigurationen og databasen"
|
||||
},
|
||||
"information": {
|
||||
"pixels": "{{area}}px"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -8,7 +8,8 @@
|
||||
"passwordRequired": "Kodeord kræves",
|
||||
"loginFailed": "Login fejlede",
|
||||
"unknownError": "Ukendt fejl. Tjek logs.",
|
||||
"rateLimit": "Grænsen for forespørgsler er overskredet. Prøv igen senere."
|
||||
"rateLimit": "Grænsen for forespørgsler er overskredet. Prøv igen senere.",
|
||||
"webUnknownError": "Ukendt fejl. Tjek konsollogs."
|
||||
},
|
||||
"firstTimeLogin": "Forsøger du at logge ind for første gang? Loginoplysningerne står i Frigate-loggene."
|
||||
}
|
||||
|
||||
@@ -14,8 +14,73 @@
|
||||
"label": "Navn",
|
||||
"placeholder": "Indtast et navn…",
|
||||
"errorMessage": {
|
||||
"mustLeastCharacters": "Kameragruppens navn skal være mindst 2 tegn."
|
||||
"mustLeastCharacters": "Kameragruppens navn skal være mindst 2 tegn.",
|
||||
"exists": "Kameragruppenavn findes allerede.",
|
||||
"nameMustNotPeriod": "Kameragruppenavn må ikke indeholde en periode.",
|
||||
"invalid": "Ugyldigt kamera gruppenavn."
|
||||
}
|
||||
},
|
||||
"cameras": {
|
||||
"label": "Kameraer",
|
||||
"desc": "Vælg kameraer til denne gruppe."
|
||||
},
|
||||
"icon": "Ikon",
|
||||
"success": "Kameragruppe ({{name}}) er blevet gemt.",
|
||||
"camera": {
|
||||
"birdseye": "Fugleøje",
|
||||
"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>",
|
||||
"audioIsAvailable": "Lyd er tilgængelig for denne stream",
|
||||
"audioIsUnavailable": "Lyd er ikke tilgængelig for denne strøm",
|
||||
"audio": {
|
||||
"tips": {
|
||||
"title": "Lyd skal komme fra dit kamera og konfigureret i go2rtc til denne stream."
|
||||
}
|
||||
},
|
||||
"stream": "Stream",
|
||||
"placeholder": "Vælg en stream",
|
||||
"streamMethod": {
|
||||
"label": "Streaming Metode",
|
||||
"placeholder": "Vælg en streaming metode",
|
||||
"method": {
|
||||
"noStreaming": {
|
||||
"label": "Ingen Streaming",
|
||||
"desc": "Kamerabilleder vil kun opdatere én gang i minuttet og ingen live streaming vil forekomme."
|
||||
},
|
||||
"smartStreaming": {
|
||||
"label": "Smart Streaming (anbefalet)",
|
||||
"desc": "Smart streaming vil opdatere dit kamerabillede én gang i minuttet, når der ikke sker noget, for at spare båndbredde og ressourcer. Når der registreres aktivitet, skifter billedet problemfrit til en live stream."
|
||||
},
|
||||
"continuousStreaming": {
|
||||
"label": "Kontinuerlig Streaming",
|
||||
"desc": {
|
||||
"title": "Kamerabillede vil altid være en live stream, når det er synligt på instrumentbrættet, selv om der ikke registreres nogen aktivitet.",
|
||||
"warning": "Kontinuerlig streaming kan forårsage højt båndbreddeforbrug og ydelsesproblemer. Brug med omtanke."
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"compatibilityMode": {
|
||||
"label": "Kompatibilitetstilstand",
|
||||
"desc": "Aktivér kun denne mulighed, hvis kameraets live stream viser farve artefakter og har en diagonal linje på højre side af billedet."
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"debug": {
|
||||
"options": {
|
||||
"label": "Indstillinger",
|
||||
"title": "Valgmuligheder",
|
||||
"showOptions": "Vis muligheder",
|
||||
"hideOptions": "Skjul muligheder"
|
||||
},
|
||||
"boundingBox": "Afgrænsningsfelt",
|
||||
"timestamp": "Tidsstempel",
|
||||
"zones": "Zoner",
|
||||
"mask": "Maske",
|
||||
"motion": "Bevægelse",
|
||||
"regions": "Regioner"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
"iconPicker": {
|
||||
"selectIcon": "Vælg et ikon",
|
||||
"search": {
|
||||
"placeholder": "Søg efter ikoner…"
|
||||
"placeholder": "Søg efter et ikon…"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -11,5 +11,28 @@
|
||||
"streamOffline": {
|
||||
"title": "Stream offline",
|
||||
"desc": "Der er ikke modtaget nogen frames på {{cameraName}}-<code>detect</code>-streamen, tjek fejlloggene."
|
||||
},
|
||||
"stats": {
|
||||
"streamType": {
|
||||
"title": "Stream type:",
|
||||
"short": "Type"
|
||||
},
|
||||
"bandwidth": {
|
||||
"title": "Bandbredde:",
|
||||
"short": "Bandbredde"
|
||||
},
|
||||
"latency": {
|
||||
"title": "Latenstid:",
|
||||
"value": "{{seconds}} sekunder",
|
||||
"short": {
|
||||
"title": "Latenstid",
|
||||
"value": "{{seconds}} sek"
|
||||
}
|
||||
},
|
||||
"droppedFrames": {
|
||||
"short": {
|
||||
"title": "Tabt"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -14,5 +14,107 @@
|
||||
"sink": "Håndvask",
|
||||
"toothbrush": "Tandbørste",
|
||||
"scissors": "Saks",
|
||||
"clock": "Ur"
|
||||
"clock": "Ur",
|
||||
"fire_hydrant": "Brandhane",
|
||||
"street_sign": "Gadeskilt",
|
||||
"stop_sign": "Stopskilt",
|
||||
"parking_meter": "Parkeringsautomat",
|
||||
"bench": "Bænk",
|
||||
"bird": "Fugl",
|
||||
"cat": "Kat",
|
||||
"dog": "Hund",
|
||||
"horse": "Hest",
|
||||
"sheep": "Får",
|
||||
"cow": "Ko",
|
||||
"elephant": "Elefant",
|
||||
"bear": "Bjørn",
|
||||
"zebra": "Zebra",
|
||||
"giraffe": "Giraf",
|
||||
"hat": "Hat",
|
||||
"backpack": "Rygsæk",
|
||||
"umbrella": "Paraply",
|
||||
"shoe": "Sko",
|
||||
"eye_glasses": "Briller",
|
||||
"handbag": "Håndtaske",
|
||||
"tie": "Slips",
|
||||
"suitcase": "Kuffert",
|
||||
"frisbee": "Frisbee",
|
||||
"skis": "Ski",
|
||||
"snowboard": "Snowboard",
|
||||
"sports_ball": "Bold",
|
||||
"kite": "Drage",
|
||||
"baseball_bat": "Baseball Bat",
|
||||
"baseball_glove": "Baseball hanske",
|
||||
"surfboard": "Surfbræt",
|
||||
"tennis_racket": "Tennis ketcher",
|
||||
"bottle": "Flaske",
|
||||
"plate": "Tallerken",
|
||||
"wine_glass": "Vinglas",
|
||||
"cup": "Kop",
|
||||
"fork": "Gaffel",
|
||||
"knife": "Kniv",
|
||||
"spoon": "Ske",
|
||||
"bowl": "Skål",
|
||||
"banana": "Banan",
|
||||
"apple": "Æble",
|
||||
"sandwich": "Sandwich",
|
||||
"orange": "Appelsin",
|
||||
"broccoli": "Broccoli",
|
||||
"carrot": "Gulerod",
|
||||
"hot_dog": "Hotdog",
|
||||
"pizza": "Pizza",
|
||||
"donut": "Donut",
|
||||
"cake": "Kage",
|
||||
"chair": "Stol",
|
||||
"couch": "Sofa",
|
||||
"potted_plant": "Potteplante",
|
||||
"bed": "Seng",
|
||||
"mirror": "Spejl",
|
||||
"dining_table": "Spisebord",
|
||||
"window": "Vindue",
|
||||
"desk": "Bord",
|
||||
"toilet": "Toilet",
|
||||
"tv": "Fjernsyn",
|
||||
"laptop": "Bærebar computer",
|
||||
"mouse": "Mus",
|
||||
"remote": "Fjernbetjening",
|
||||
"keyboard": "Tastatur",
|
||||
"cell_phone": "Mobiltelefon",
|
||||
"microwave": "Mikrobølgeovn",
|
||||
"oven": "Ovn",
|
||||
"toaster": "Brødrister",
|
||||
"refrigerator": "Køleskab",
|
||||
"blender": "Mixer",
|
||||
"book": "Bog",
|
||||
"vase": "Vase",
|
||||
"teddy_bear": "Bamse",
|
||||
"hair_dryer": "Føntørrer",
|
||||
"hair_brush": "Hårbørste",
|
||||
"squirrel": "Egern",
|
||||
"deer": "Hjort",
|
||||
"animal": "Dyr",
|
||||
"bark": "Gø",
|
||||
"fox": "Ræv",
|
||||
"goat": "Gæd",
|
||||
"rabbit": "Kanin",
|
||||
"raccoon": "Vaskebjørn",
|
||||
"robot_lawnmower": "Robotplæneklipper",
|
||||
"waste_bin": "Affaldsspand",
|
||||
"on_demand": "Manuel optagelse",
|
||||
"face": "Ansigt",
|
||||
"license_plate": "Nummerplade",
|
||||
"package": "Pakke",
|
||||
"bbq_grill": "Grill",
|
||||
"amazon": "Amazon levering",
|
||||
"usps": "USPS levering",
|
||||
"ups": "UPS levering",
|
||||
"fedex": "FedEx levering",
|
||||
"dhl": "DHL levering",
|
||||
"an_post": "An Post levering",
|
||||
"purolator": "Purolator levering",
|
||||
"postnl": "PostNL levering",
|
||||
"nzpost": "NZPost levering",
|
||||
"postnord": "PostNord levering",
|
||||
"gls": "GLS levering",
|
||||
"dpd": "DPD levering"
|
||||
}
|
||||
|
||||
@@ -1,18 +1,187 @@
|
||||
{
|
||||
"documentTitle": "Klassifikationsmodeller",
|
||||
"documentTitle": "Kategoriseringsmodeller - Frigate",
|
||||
"details": {
|
||||
"scoreInfo": "Scoren repræsenterer den gennemsnitlige klassifikationssikkerhed på tværs af alle registreringer af dette objekt.",
|
||||
"unknown": "Ukendt"
|
||||
"scoreInfo": "Scoren viser den gennemsnitlige sikkerhed for kategoriseringen på tværs af alle registreringer af dette objekt.",
|
||||
"unknown": "Ukendt",
|
||||
"none": "Ingen"
|
||||
},
|
||||
"description": {
|
||||
"invalidName": "Ugyldigt navn. Navne må kun indeholde bogstaver, tal, mellemrum, apostroffer, understregninger og bindestreger."
|
||||
},
|
||||
"button": {
|
||||
"deleteClassificationAttempts": "Slet klassifikationsbilleder",
|
||||
"deleteClassificationAttempts": "Slet kategoriseringsbilleder",
|
||||
"renameCategory": "Omdøb klasse",
|
||||
"deleteCategory": "Slet klasse",
|
||||
"deleteImages": "Slet billeder",
|
||||
"trainModel": "Træn model",
|
||||
"addClassification": "Tilføj klassifikation"
|
||||
"addClassification": "Tilføj Kategori",
|
||||
"deleteModels": "Slet modeller",
|
||||
"editModel": "Rediger model"
|
||||
},
|
||||
"tooltip": {
|
||||
"trainingInProgress": "Modellen er ved at blive trænet",
|
||||
"noNewImages": "Der er ingen nye billeder at lære af. Kategorisér flere billeder i datasættet først.",
|
||||
"noChanges": "Ingen ændringer i datasættet siden sidste træning.",
|
||||
"modelNotReady": "Modellen er ikke klar til træning"
|
||||
},
|
||||
"toast": {
|
||||
"success": {
|
||||
"deletedCategory": "Slettet kategori",
|
||||
"deletedImage": "Slettede billeder",
|
||||
"deletedModel_one": "{{count}} model er nu slettet",
|
||||
"deletedModel_other": "{{count}} modeller er nu slettet",
|
||||
"categorizedImage": "Billedet er nu kategoriseret",
|
||||
"trainedModel": "Modellen er klar.",
|
||||
"trainingModel": "Modeltræning er started.",
|
||||
"updatedModel": "Modellens indstillinger er opdateret",
|
||||
"renamedCategory": "Kategorien er omdøbt til {{name}}"
|
||||
},
|
||||
"error": {
|
||||
"deleteImageFailed": "Fejl under sletning: {{errorMessage}}",
|
||||
"deleteCategoryFailed": "Sletning af kategori fejlede: {{errorMessage}}",
|
||||
"deleteModelFailed": "Sletning af model fejlede: {{errorMessage}}",
|
||||
"categorizeFailed": "Kategorisering af billedet fejlede: {{errorMessage}}",
|
||||
"trainingFailed": "Træning af modellen fejlede. Check Frigate loggen.",
|
||||
"trainingFailedToStart": "Opstart af modeltræning fejlede: {{errorMessage}}",
|
||||
"updateModelFailed": "Ændring af modellen fejlede: {{errorMessage}}",
|
||||
"renameCategoryFailed": "Kan ikke omdøbe kategorien: {{errorMessage}}"
|
||||
}
|
||||
},
|
||||
"deleteCategory": {
|
||||
"title": "Slet kategori",
|
||||
"desc": "Er du sikker på at du vil slette kategorien {{name}}? Dette kan ikke fortrydes og sletter alle tilhørende billeder samt træning af modellen.",
|
||||
"minClassesTitle": "Kan ikke slette Kategori",
|
||||
"minClassesDesc": "Modellen skal have mindst 2 kategorier. Tilføj en kategori, før du sletter denne."
|
||||
},
|
||||
"deleteModel": {
|
||||
"title": "Slet Kategoriseringsmodellen",
|
||||
"desc_one": "Er du sikker på, at du vil slette {{count}} model? Dette vil permanent slette alle tilknyttede data, inkl. billeder og træningsdata. Denne handling kan ikke fortrydes.",
|
||||
"desc_other": "Er du sikker på, at du vil slette {{count}} modeller? Dette vil permanent slette alle tilknyttede data, inkl. billeder og træningsdata. Denne handling kan ikke fortrydes.",
|
||||
"single": "Er du sikker på, at du vil slette {{name}}? Dette vil permanent slette alle tilknyttede data, inklusive billeder og træningsdata. Denne handling kan ikke fortrydes."
|
||||
},
|
||||
"train": {
|
||||
"title": "Nyeste kategorier",
|
||||
"titleShort": "Nyeste",
|
||||
"aria": "Vælg de nyeste kategorier"
|
||||
},
|
||||
"categories": "Kategorier",
|
||||
"createCategory": {
|
||||
"new": "Opret en ny kategori"
|
||||
},
|
||||
"categorizeImageAs": "Kategoriser billedet som:",
|
||||
"categorizeImage": "Kategoriser billedet",
|
||||
"menu": {
|
||||
"objects": "Genstande",
|
||||
"states": "Statestik"
|
||||
},
|
||||
"noModels": {
|
||||
"object": {
|
||||
"title": "Ingen kategoriseringsmodeller for genstande",
|
||||
"description": "Opret en model, der kan kategorisere genstande.",
|
||||
"buttonText": "Opret Genstands Model"
|
||||
},
|
||||
"state": {
|
||||
"title": "Ingen modeller til genstandstilstande",
|
||||
"description": "Opret en brugerdefineret model til at overvåge og kategorisere tilstandsændringer i specifikke kamerområder.",
|
||||
"buttonText": "Opret tilstandsmodel"
|
||||
}
|
||||
},
|
||||
"wizard": {
|
||||
"step1": {
|
||||
"type": "Type",
|
||||
"typeState": "Tilstand",
|
||||
"typeObject": "Genstand",
|
||||
"objectLabel": "Genstands mærkat",
|
||||
"objectLabelPlaceholder": "Vælg genstands type...",
|
||||
"classificationType": "Kategoriseringstype",
|
||||
"classificationTypeTip": "Udforsk kategoriseringstyper",
|
||||
"errors": {
|
||||
"nameLength": "Modellens navn må højst være 64 tegn",
|
||||
"nameOnlyNumbers": "Modellens navn skal indeholde bogstaver",
|
||||
"classRequired": "Der mangler en kategori",
|
||||
"classesUnique": "Kategorinavne skal være unikke",
|
||||
"noneNotAllowed": "Kategorinavnet 'none' er ikke tilladt",
|
||||
"stateRequiresTwoClasses": "Tilstandsmodeller har brug for 2 kategorier",
|
||||
"objectLabelRequired": "Vælg genstands mærkat",
|
||||
"objectTypeRequired": "Vælg kategoriseringstype",
|
||||
"nameRequired": "Modelnavn er påkrævet"
|
||||
},
|
||||
"description": "Tilstandsmodeller overvåger faste kameraområder for ændringer (f.eks. dør åben/lukket). Genstandsmodeller tilføjer kategoriseringer til detekterede genstande (f.eks. kendte dyr, leveringspersoner osv.).",
|
||||
"name": "Navn",
|
||||
"namePlaceholder": "Skriv modelnavn...",
|
||||
"classificationTypeDesc": "Underetiketter tilføjer ekstra tekst til genstandens etiket (f.eks. 'Person: UPS'). Attributter er søgbare metadata, der opbevares separat i genstandens metadata.",
|
||||
"classificationSubLabel": "Underetiketter",
|
||||
"classificationAttribute": "Attribut",
|
||||
"classes": "Kategori",
|
||||
"states": "Tilstande",
|
||||
"classesTip": "Lær om kategorier",
|
||||
"classesStateDesc": "Definér de forskellige tilstande, dit kameraområde kan være i. For eksempel: 'åben' og 'lukket' for en garageport.",
|
||||
"classesObjectDesc": "Definér de forskellige kategorier, som detekterede genstande skal kategoriseres i. For eksempel: 'leveringsperson', 'beboer', 'fremmed' til kategorisering af personer.",
|
||||
"classPlaceholder": "Skriv kategorinavn..."
|
||||
},
|
||||
"step2": {
|
||||
"description": "Vælg kameraer, og definer det område, der skal overvåges for hvert kamera. Modellen vil kategorisere tilstanden i disse områder.",
|
||||
"cameras": "Kameraer",
|
||||
"selectCamera": "Vælg Kamera",
|
||||
"noCameras": "Klik + for at tilføje kamera",
|
||||
"selectCameraPrompt": "Vælg et kamera fra listen for at definere dets overvågningsområde"
|
||||
},
|
||||
"step3": {
|
||||
"selectImagesPrompt": "Vælg alle billeder med: {{className}}",
|
||||
"selectImagesDescription": "Klik på billederne for at vælge dem. Klik på Fortsæt, når du er færdig med denne kategori.",
|
||||
"allImagesRequired_one": "Venligst kategoriser alle billeder. {{count}} billede tilbage.",
|
||||
"allImagesRequired_other": "Venligst kategoriser alle billeder. {{count}} billeder tilbage.",
|
||||
"generating": {
|
||||
"title": "Genererer testbilleder",
|
||||
"description": "Frigate henter repræsentative billeder fra dine optagelser. Det kan tage et øjeblik..."
|
||||
},
|
||||
"training": {
|
||||
"title": "Træningsmodel",
|
||||
"description": "Din model trænes i baggrunden. Luk denne dialog, og din model vil begynde at køre, så snart træningen er færdig."
|
||||
},
|
||||
"retryGenerate": "Forsøg at generere igen",
|
||||
"noImages": "Ingen prøvebilleder blev genereret",
|
||||
"classifying": "Kategoriserer og træner...",
|
||||
"trainingStarted": "Træningen er startet",
|
||||
"modelCreated": "Model er oprettet. Brug visningen af nylige kategoriseringer til at tilføje billeder for de manglende tilstande, og træn modellen derefter.",
|
||||
"errors": {
|
||||
"noCameras": "Ingen kamera konfigureret",
|
||||
"noObjectLabel": "Ingen genstandsmærkat valgt",
|
||||
"generateFailed": "Kunne ikke generere eksempler: {{error}}",
|
||||
"generationFailed": "Der opstod en fejl under genereringen. Prøv igen.",
|
||||
"classifyFailed": "Kunne ikke kategorisere billederne: {{error}}"
|
||||
},
|
||||
"generateSuccess": "Eksempelbilleder er nu genereret",
|
||||
"missingStatesWarning": {
|
||||
"title": "Manglende tilstandseksempler",
|
||||
"description": "Det anbefales at vælge eksempler for alle tilstande for at opnå de bedste resultater. Du kan fortsætte uden at vælge alle tilstande, men modellen bliver ikke trænet, før alle tilstande har billeder. Efter du fortsætter, kan du bruge visningen Seneste kategoriseringer til at kategorisere billeder for de manglende tilstande og derefter træne modellen."
|
||||
}
|
||||
},
|
||||
"title": "Opret ny kategorisering",
|
||||
"steps": {
|
||||
"nameAndDefine": "Navn og definition",
|
||||
"stateArea": "Tilstandsområde",
|
||||
"chooseExamples": "Vælg Eksempler"
|
||||
}
|
||||
},
|
||||
"edit": {
|
||||
"title": "Rediger kategoriseringsmodel",
|
||||
"descriptionState": "Rediger kategorierne for denne model til genstandstilstande. Ændringer kræver, at modellen trænes igen.",
|
||||
"descriptionObject": "Rediger genstandstypen og kategoriseringstypen for denne genstandskategoriseringsmodel.",
|
||||
"stateClassesInfo": "Bemærk: Ændring af tilstandskategorier kræver, at modellen trænes igen med de opdaterede kategorier."
|
||||
},
|
||||
"deleteDatasetImages": {
|
||||
"title": "Slet billeder i datasættet",
|
||||
"desc_one": "Er du sikker på, at du vil slette {{count}} billede fra {{dataset}}? Denne handling kan ikke fortrydes og kræver, at modellen trænes igen.",
|
||||
"desc_other": "Er du sikker på, at du vil slette {{count}} billeder fra {{dataset}}? Denne handling kan ikke fortrydes og kræver, at modellen trænes igen."
|
||||
},
|
||||
"deleteTrainImages": {
|
||||
"title": "Slet trænings billeder",
|
||||
"desc_one": "Er du sikker på, at du vil slette {{count}} billede? Denne handling kan ikke fortrydes.",
|
||||
"desc_other": "Er du sikker på, at du vil slette {{count}} billeder? Denne handling kan ikke fortrydes."
|
||||
},
|
||||
"renameCategory": {
|
||||
"title": "Omdøb Kategori",
|
||||
"desc": "Indtast et nyt navn til {{name}}. Modellen skal trænes igen, før navneændringen træder i kraft."
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,8 +3,16 @@
|
||||
"copyConfig": "Kopiér konfiguration",
|
||||
"saveAndRestart": "Gem & Genstart",
|
||||
"saveOnly": "Kun gem",
|
||||
"configEditor": "Konfigurationseditor",
|
||||
"safeConfigEditor": "Konfigurationseditor (Sikker tilstand)",
|
||||
"safeModeDescription": "Frigate er i sikker tilstand på grund af en fejl ved validering af konfigurationen.",
|
||||
"confirm": "Afslut uden at gemme?"
|
||||
"configEditor": "Konfigurationsværktøj",
|
||||
"safeConfigEditor": "Konfigurationsværktøj (Sikker tilstand)",
|
||||
"safeModeDescription": "Frigate er i sikker tilstand på grund af valideringsfejl af konfigurationen.",
|
||||
"confirm": "Afslut uden at gemme?",
|
||||
"toast": {
|
||||
"success": {
|
||||
"copyToClipboard": "Konfigurationen er kopieret."
|
||||
},
|
||||
"error": {
|
||||
"savingError": "Kan ikke gemme konfigurationen"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -11,6 +11,21 @@
|
||||
"empty": {
|
||||
"alert": "Der er ingen advarsler at gennemgå",
|
||||
"detection": "Der er ingen registreringer at gennemgå",
|
||||
"motion": "Ingen bevægelsesdata fundet"
|
||||
"motion": "Ingen bevægelsesdata fundet",
|
||||
"recordingsDisabled": {
|
||||
"title": "Optagelser skal være aktiveret"
|
||||
}
|
||||
},
|
||||
"documentTitle": "Gennemse - Frigate",
|
||||
"recordings": {
|
||||
"documentTitle": "Optagelser - Frigate"
|
||||
},
|
||||
"calendarFilter": {
|
||||
"last24Hours": "Sidste 24 timer"
|
||||
},
|
||||
"markAsReviewed": "Marker som gennemset",
|
||||
"markTheseItemsAsReviewed": "Marker disse som gennemset",
|
||||
"detail": {
|
||||
"aria": "Skift til detaljevisning"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -8,5 +8,11 @@
|
||||
"desc": "Indtast et nyt navn for denne eksport."
|
||||
},
|
||||
"noExports": "Ingen eksporter fundet",
|
||||
"deleteExport": "Slet eksport"
|
||||
"deleteExport": "Slet eksport",
|
||||
"tooltip": {
|
||||
"shareExport": "Del eksport",
|
||||
"downloadVideo": "Download video",
|
||||
"editName": "Rediger navn",
|
||||
"deleteExport": "Slette eksport"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -15,5 +15,8 @@
|
||||
"uploadFaceImage": {
|
||||
"title": "Upload ansigtsbillede",
|
||||
"desc": "Upload et billede for at scanne efter ansigter og inkludere det for {{pageToggle}}"
|
||||
},
|
||||
"train": {
|
||||
"titleShort": "Nyeste"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -8,5 +8,6 @@
|
||||
"filterInformation": "Filter information",
|
||||
"filterActive": "Filtre aktiv",
|
||||
"clear": "Ryd søgning"
|
||||
}
|
||||
},
|
||||
"trackedObjectId": "Sporet genstands-ID"
|
||||
}
|
||||
|
||||
@@ -84,7 +84,8 @@
|
||||
},
|
||||
"inProgress": "Im Gange",
|
||||
"invalidStartTime": "Ungültige Startzeit",
|
||||
"invalidEndTime": "Ungültige Endzeit"
|
||||
"invalidEndTime": "Ungültige Endzeit",
|
||||
"never": "Nie"
|
||||
},
|
||||
"button": {
|
||||
"save": "Speichern",
|
||||
|
||||
@@ -178,6 +178,16 @@
|
||||
"restricted": {
|
||||
"title": "Keine Kamera verfügbar",
|
||||
"description": "Sie haben keine Berechtigung, Kameras in dieser Gruppe anzuzeigen."
|
||||
},
|
||||
"default": {
|
||||
"title": "Keine Kameras konfiguriert",
|
||||
"description": "Zum Start eine Kamera mit Frigate verbinden.",
|
||||
"buttonText": "Kamera hinzufügen"
|
||||
},
|
||||
"group": {
|
||||
"title": "Keine Kameras in der Gruppe",
|
||||
"description": "Diese Kameragruppe hat keine zugewiesenen oder aktiven Kameras.",
|
||||
"buttonText": "Gruppen verwalten"
|
||||
}
|
||||
},
|
||||
"snapshot": {
|
||||
|
||||
@@ -1265,11 +1265,11 @@
|
||||
"title": "Kamera-Einstellungen überprüfen",
|
||||
"object_descriptions": {
|
||||
"title": "Generative KI Objektbeschreibungen",
|
||||
"desc": "Aktiviere/deaktiviere vorübergehend die Objektbeschreibungen durch Generative KI für diese Kamera. Wenn diese Option deaktiviert ist, werden keine KI-generierten Beschreibungen für verfolgte Objekte dieser Kamera erstellt."
|
||||
"desc": "Aktiviere/deaktiviere vorübergehend die Objektbeschreibungen durch generative KI für diese Kamera. Wenn diese Option deaktiviert ist, werden keine KI-generierten Beschreibungen für verfolgte Objekte dieser Kamera erstellt."
|
||||
},
|
||||
"review_descriptions": {
|
||||
"title": "Generative KI Review Beschreibungen",
|
||||
"desc": "Generative KI Review Beschreibungen für diese Kamera vorübergehend aktivieren/deaktivieren. Wenn diese Option deaktiviert ist, werden für die Review Elemente dieser Kamera keine KI-generierten Beschreibungen angefordert."
|
||||
"desc": "Aktivieren/deaktivieren Sie vorübergehend die generativen KI-Überprüfungsbeschreibungen für diese Kamera, bis Frigate neu gestartet wird. Wenn diese Option deaktiviert ist, werden für Überprüfungselemente auf dieser Kamera keine KI-generierten Beschreibungen angefordert."
|
||||
},
|
||||
"review": {
|
||||
"title": "Überprüfung",
|
||||
|
||||
@@ -75,7 +75,8 @@
|
||||
"s": "{{time}}δ",
|
||||
"inProgress": "Σε εξέλιξη",
|
||||
"invalidStartTime": "Μη έγκυρη ώρα έναρξης",
|
||||
"invalidEndTime": "Μη έγκυρη ώρα λήξης"
|
||||
"invalidEndTime": "Μη έγκυρη ώρα λήξης",
|
||||
"never": "Ποτέ"
|
||||
},
|
||||
"menu": {
|
||||
"live": {
|
||||
|
||||
@@ -2,6 +2,13 @@
|
||||
"documentTitle": "Μοντέλα Ταξινόμησης - Frigate",
|
||||
"details": {
|
||||
"scoreInfo": "Η βαθμολογία αντιπροσωπεύει την κατά μέσο όρο ταξινομική εμπιστοσύνη μεταξύ όλων των ανιχνεύσεων αυτού του αντικειμένου.",
|
||||
"none": "Καμία"
|
||||
"none": "Καμία",
|
||||
"unknown": "Άγνωστο"
|
||||
},
|
||||
"button": {
|
||||
"deleteClassificationAttempts": "Διαγραφή Εικόνων Ταξινόμησης",
|
||||
"deleteImages": "Διαγραφή Εικόνων",
|
||||
"trainModel": "Εκπαίδευση Μοντέλου",
|
||||
"addClassification": "Προσθήκη Ταξινόμησης"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -9,7 +9,10 @@
|
||||
"empty": {
|
||||
"alert": "Δεν υπάρχουν ειδοποιήσεις για εξέταση",
|
||||
"detection": "Δεν υπάρχουν εντοπισμοί για εξέταση",
|
||||
"motion": "Δεν βρέθηκαν στοιχεία κίνησης"
|
||||
"motion": "Δεν βρέθηκαν στοιχεία κίνησης",
|
||||
"recordingsDisabled": {
|
||||
"title": "Οι καταγραφές πρέπει να είναι ενεργοποιημένες"
|
||||
}
|
||||
},
|
||||
"timeline": "Χρονολόγιο",
|
||||
"timeline.aria": "Επιλογή χρονοσειράς",
|
||||
|
||||
@@ -193,6 +193,7 @@
|
||||
"yue": "粵語 (Cantonese)",
|
||||
"th": "ไทย (Thai)",
|
||||
"ca": "Català (Catalan)",
|
||||
"hr": "Hrvatski (Croatian)",
|
||||
"sr": "Српски (Serbian)",
|
||||
"sl": "Slovenščina (Slovenian)",
|
||||
"lt": "Lietuvių (Lithuanian)",
|
||||
|
||||
@@ -2,7 +2,8 @@
|
||||
"description": {
|
||||
"addFace": "Add a new collection to the Face Library by uploading your first image.",
|
||||
"placeholder": "Enter a name for this collection",
|
||||
"invalidName": "Invalid name. Names can only include letters, numbers, spaces, apostrophes, underscores, and hyphens."
|
||||
"invalidName": "Invalid name. Names can only include letters, numbers, spaces, apostrophes, underscores, and hyphens.",
|
||||
"nameCannotContainHash": "Name cannot contain #."
|
||||
},
|
||||
"details": {
|
||||
"timestamp": "Timestamp",
|
||||
|
||||
@@ -468,6 +468,11 @@
|
||||
}
|
||||
},
|
||||
"polygonDrawing": {
|
||||
"type": {
|
||||
"zone": "zone",
|
||||
"motion_mask": "motion mask",
|
||||
"object_mask": "object mask"
|
||||
},
|
||||
"removeLastPoint": "Remove last point",
|
||||
"reset": {
|
||||
"label": "Clear all points"
|
||||
@@ -728,10 +733,7 @@
|
||||
},
|
||||
"requirements": {
|
||||
"title": "Password requirements:",
|
||||
"length": "At least 8 characters",
|
||||
"uppercase": "At least one uppercase letter",
|
||||
"digit": "At least one digit",
|
||||
"special": "At least one special character (!@#$%^&*(),.?\":{}|<>)"
|
||||
"length": "At least 12 characters"
|
||||
},
|
||||
"match": "Passwords match",
|
||||
"notMatch": "Passwords don't match"
|
||||
|
||||
@@ -90,7 +90,8 @@
|
||||
},
|
||||
"inProgress": "En progreso",
|
||||
"invalidStartTime": "Hora de inicio no válida",
|
||||
"invalidEndTime": "Hora de finalización no válida"
|
||||
"invalidEndTime": "Hora de finalización no válida",
|
||||
"never": "Nunca"
|
||||
},
|
||||
"menu": {
|
||||
"settings": "Ajustes",
|
||||
@@ -267,7 +268,8 @@
|
||||
"show": "Mostrar {{item}}",
|
||||
"ID": "ID",
|
||||
"none": "Ninguno",
|
||||
"all": "Todas"
|
||||
"all": "Todas",
|
||||
"other": "Otro"
|
||||
},
|
||||
"role": {
|
||||
"title": "Rol",
|
||||
|
||||
@@ -135,7 +135,7 @@
|
||||
"count_other": "{{count}} Clases"
|
||||
},
|
||||
"attributes": {
|
||||
"label": "Clasificación de Atributos",
|
||||
"label": "Atributos de Clasificación",
|
||||
"all": "Todos los Atributos"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -62,7 +62,7 @@
|
||||
"details": {
|
||||
"scoreInfo": "La puntuación representa la confianza media de clasificación en todas las detecciones de este objeto.",
|
||||
"unknown": "Desconocido",
|
||||
"none": "Nada"
|
||||
"none": "Ninguna"
|
||||
},
|
||||
"categorizeImage": "Clasificar Imagen",
|
||||
"menu": {
|
||||
|
||||
@@ -14,5 +14,5 @@
|
||||
"documentTitle": "Editor de Configuración - Frigate",
|
||||
"confirm": "¿Salir sin guardar?",
|
||||
"safeConfigEditor": "Editor de Configuración (Modo Seguro)",
|
||||
"safeModeDescription": "Frigate esta en modo seguro debido a un error en la configuración."
|
||||
"safeModeDescription": "Frigate esta en modo seguro debido a un error en la validación de la configuración."
|
||||
}
|
||||
|
||||
@@ -178,6 +178,16 @@
|
||||
"restricted": {
|
||||
"title": "No hay cámaras disponibles",
|
||||
"description": "No tiene permiso para ver ninguna cámara en este grupo."
|
||||
},
|
||||
"default": {
|
||||
"title": "No hay Cámaras Configuradas",
|
||||
"description": "Comienza conectando una cámara a Frigate.",
|
||||
"buttonText": "Añadir Cámara"
|
||||
},
|
||||
"group": {
|
||||
"title": "No hay Cámaras en Grupo",
|
||||
"description": "Estae grupo de cámaras no tiene cámaras asignadas o habilitadas.",
|
||||
"buttonText": "Gestionar Grupos"
|
||||
}
|
||||
},
|
||||
"snapshot": {
|
||||
|
||||
@@ -52,7 +52,7 @@
|
||||
},
|
||||
"title": "Panel en directo",
|
||||
"displayCameraNames": {
|
||||
"label": "Siempre mostrar nombres de las Camaras",
|
||||
"label": "Siempre mostrar nombres de las Cámaras",
|
||||
"desc": "Siempre mostrar nombres de cámaras en la vista en vivo multi-cámara."
|
||||
},
|
||||
"liveFallbackTimeout": {
|
||||
@@ -708,7 +708,7 @@
|
||||
"unsavedChanges": "Cambios en la configuración de Frigate+ no guardados"
|
||||
},
|
||||
"enrichments": {
|
||||
"title": "Configuración de Análisis Avanzado",
|
||||
"title": "Configuración de Enriquecimientos",
|
||||
"unsavedChanges": "Cambios sin guardar en la configuración de Análisis Avanzado",
|
||||
"birdClassification": {
|
||||
"title": "Clasificación de Aves",
|
||||
@@ -1191,11 +1191,11 @@
|
||||
"title": "Configuración de revisión de la cámara",
|
||||
"object_descriptions": {
|
||||
"title": "Descripciones de objetos de IA generativa",
|
||||
"desc": "Habilite o deshabilite temporalmente las descripciones de objetos generadas por IA para esta cámara. Al deshabilitarlas, no se solicitarán descripciones generadas por IA para los objetos rastreados en esta cámara."
|
||||
"desc": "Habilite o deshabilite temporalmente las descripciones de objetos generadas por IA para esta cámara hasta que Frigate se reinicie. Al deshabilitarlas, no se solicitarán descripciones generadas por IA para los objetos rastreados en esta cámara."
|
||||
},
|
||||
"review_descriptions": {
|
||||
"title": "Revisión de descripciones de IA generativa",
|
||||
"desc": "Habilita o deshabilita temporalmente las revisión de descripciones generadas por IA para esta cámara. Al deshabilitarlas, no se solicitarán descripciones generadas por IA para los elementos de revisión de esta cámara."
|
||||
"desc": "Habilita o deshabilita temporalmente las revisión de descripciones generadas por IA para esta cámara hasta que Frigate se reinicie. Al deshabilitarlas, no se solicitarán descripciones generadas por IA para los elementos de revisión de esta cámara."
|
||||
},
|
||||
"review": {
|
||||
"title": "Revisar",
|
||||
|
||||
@@ -90,7 +90,9 @@
|
||||
"series": {
|
||||
"go2rtc": "go2rtc",
|
||||
"recording": "grabación",
|
||||
"review_segment": "revisar segmento"
|
||||
"review_segment": "revisar segmento",
|
||||
"embeddings": "embeddings",
|
||||
"audio_detector": "detector de audio"
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -190,7 +192,7 @@
|
||||
"classification_speed": "Velocidad de clasificación de {{name}}",
|
||||
"classification_events_per_second": "Clasificacion de eventos por segundo de {{name}}"
|
||||
},
|
||||
"title": "Enriquecimientos",
|
||||
"title": "Enriquicimientos",
|
||||
"averageInf": "Tiempo promedio de inferencia"
|
||||
},
|
||||
"stats": {
|
||||
|
||||
@@ -75,7 +75,8 @@
|
||||
"12hour": "dd. MMM yyyy, hh:mm aaa",
|
||||
"24hour": "dd. MMM yyyy, HH:mm"
|
||||
},
|
||||
"formattedTimestampMonthDay": "dd. MMM"
|
||||
"formattedTimestampMonthDay": "dd. MMM",
|
||||
"never": "Mitte kunagi"
|
||||
},
|
||||
"menu": {
|
||||
"user": {
|
||||
|
||||
@@ -10,7 +10,8 @@
|
||||
"objectDetection": "Objektide tuvastamine",
|
||||
"audioDetection": "Heli tuvastus",
|
||||
"transcription": "Heli üleskirjutus",
|
||||
"snapshots": "Hetkvõtted"
|
||||
"snapshots": "Hetkvõtted",
|
||||
"autotracking": "Automaatne jälgimine"
|
||||
},
|
||||
"documentTitle": "Otseülekanne - Frigate",
|
||||
"documentTitle.withCamera": "{{camera}} - Otseülekanne - Frigate",
|
||||
@@ -95,6 +96,10 @@
|
||||
"playInBackground": {
|
||||
"label": "Esita taustal",
|
||||
"tips": "Selle eelistusega saad määrata, et voogedastus jääb tööle ka siis, kui meesiaesitaja on suletud."
|
||||
},
|
||||
"audio": {
|
||||
"available": "Selles voogedastuses on heliriba saadaval",
|
||||
"unavailable": "Selles voogedastuses pole heliriba saadaval"
|
||||
}
|
||||
},
|
||||
"notifications": "Teavitused",
|
||||
@@ -129,6 +134,25 @@
|
||||
"restricted": {
|
||||
"title": "Ühtegi kaamerat pole saadaval",
|
||||
"description": "Sul pole õigust ühegi selle grupi kaamera vaatamiseks."
|
||||
},
|
||||
"title": "Ühtegi kaamerat pole seadistatud",
|
||||
"description": "Alustamiseks ühenda mõni kaamera Frigate'iga."
|
||||
},
|
||||
"effectiveRetainMode": {
|
||||
"modes": {
|
||||
"active_objects": "Aktiivsed objektid",
|
||||
"all": "Kõik",
|
||||
"motion": "Liikumine"
|
||||
}
|
||||
},
|
||||
"editLayout": {
|
||||
"label": "Muuda paigutust",
|
||||
"group": {
|
||||
"label": "Muuda kaameragruppi"
|
||||
},
|
||||
"exitEdit": "Välju muutmisest"
|
||||
},
|
||||
"history": {
|
||||
"label": "Näita varasemat sisu"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1 +1,11 @@
|
||||
{}
|
||||
{
|
||||
"documentTitle": "Luokittelumallit - Frigate",
|
||||
"details": {
|
||||
"scoreInfo": "Pistemäärä edustaa tämän objektin kaikkien havaintojen keskimääräistä luokitteluvarmuutta.",
|
||||
"none": "Ei mitään"
|
||||
},
|
||||
"button": {
|
||||
"deleteImages": "Poista kuvat",
|
||||
"trainModel": "Kouluta malli"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -13,5 +13,8 @@
|
||||
"title": "Nimeä uudelleen",
|
||||
"desc": "Anna uusi nimi viedylle kohteelle.",
|
||||
"saveExport": "Tallenna vienti"
|
||||
},
|
||||
"tooltip": {
|
||||
"editName": "Muokkaa nimeä"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -10,7 +10,8 @@
|
||||
"object": "Virheenjäljitys - Frigate",
|
||||
"authentication": "Autentikointiuasetukset - Frigate",
|
||||
"notifications": "Ilmoitusasetukset - Frigate",
|
||||
"enrichments": "Laajennusasetukset – Frigate"
|
||||
"enrichments": "Laajennusasetukset – Frigate",
|
||||
"cameraManagement": "Hallitse Kameroita - Frigate"
|
||||
},
|
||||
"menu": {
|
||||
"ui": "Käyttöliittymä",
|
||||
|
||||
@@ -90,7 +90,8 @@
|
||||
},
|
||||
"inProgress": "En cours",
|
||||
"invalidStartTime": "Heure de début invalide",
|
||||
"invalidEndTime": "Heure de fin invalide"
|
||||
"invalidEndTime": "Heure de fin invalide",
|
||||
"never": "Jamais"
|
||||
},
|
||||
"button": {
|
||||
"apply": "Appliquer",
|
||||
@@ -279,7 +280,8 @@
|
||||
"show": "Afficher {{item}}",
|
||||
"ID": "ID",
|
||||
"none": "Aucun",
|
||||
"all": "Tous"
|
||||
"all": "Tous",
|
||||
"other": "Autre"
|
||||
},
|
||||
"unit": {
|
||||
"speed": {
|
||||
|
||||
@@ -178,6 +178,16 @@
|
||||
"restricted": {
|
||||
"title": "Aucune caméra disponible",
|
||||
"description": "Vous n'avez pas la permission de visionner les caméras de ce groupe."
|
||||
},
|
||||
"default": {
|
||||
"title": "Aucune caméra configurée",
|
||||
"description": "Pour commencer, connectez une caméra à Frigate.",
|
||||
"buttonText": "Ajouter une caméra"
|
||||
},
|
||||
"group": {
|
||||
"title": "Aucune caméra dans le groupe",
|
||||
"description": "Ce groupe de caméras ne contient aucune caméra assignée ou activée.",
|
||||
"buttonText": "Gérer les groupes"
|
||||
}
|
||||
},
|
||||
"snapshot": {
|
||||
|
||||
@@ -1278,11 +1278,11 @@
|
||||
"title": "Paramètres des activités caméra",
|
||||
"object_descriptions": {
|
||||
"title": "Descriptions d'objets par l'IA générative",
|
||||
"desc": "Active ou désactive temporairement les descriptions d'objets générées par l'IA générative pour cette caméra. Lorsque cette option est désactivée, aucune description par l'IA n'est générée pour les objets suivis sur cette caméra."
|
||||
"desc": "Activez ou désactivez temporairement les descriptions par IA générative jusqu'au redémarrage. Si désactivé, l'IA ne sera plus sollicitée pour décrire les objets suivis sur cette caméra."
|
||||
},
|
||||
"review_descriptions": {
|
||||
"title": "Descriptions des activités par l'IA générative",
|
||||
"desc": "Active ou désactive temporairement les descriptions par l'IA générative pour cette caméra. Lorsque cette option est désactivée, aucune description nouvelle n'est générée pour les activités sur cette caméra."
|
||||
"desc": "Activez ou désactivez temporairement les descriptions d'activités par IA générative jusqu'au redémarrage. Si désactivé, l'IA ne sera plus sollicitée pour décrire les activités sur cette caméra."
|
||||
},
|
||||
"review": {
|
||||
"title": "Activités",
|
||||
|
||||
@@ -89,7 +89,10 @@
|
||||
"processMemoryUsage": "Utilisation mémoire du processus",
|
||||
"series": {
|
||||
"go2rtc": "go2rtc",
|
||||
"recording": "enregistrement"
|
||||
"recording": "enregistrement",
|
||||
"review_segment": "Segment d'activité",
|
||||
"embeddings": "embeddings",
|
||||
"audio_detector": "détecteur audio"
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -147,11 +150,11 @@
|
||||
"cameraFfmpeg": "{{camName}} FFmpeg",
|
||||
"cameraSkippedDetectionsPerSecond": "{{camName}} détections ignorées par seconde",
|
||||
"overallDetectionsPerSecond": "Moyenne de détections par seconde",
|
||||
"overallFramesPerSecond": "Moyenne d'images par seconde (IPS)",
|
||||
"overallFramesPerSecond": "images par seconde (global)",
|
||||
"overallSkippedDetectionsPerSecond": "Moyenne de détections ignorées par seconde",
|
||||
"cameraCapture": "{{camName}} capture",
|
||||
"cameraDetect": "{{camName}} détection",
|
||||
"cameraFramesPerSecond": "{{camName}} images par seconde (IPS)",
|
||||
"cameraFramesPerSecond": "{{camName}} images par seconde",
|
||||
"cameraDetectionsPerSecond": "{{camName}} détections par seconde"
|
||||
},
|
||||
"overview": "Vue d'ensemble",
|
||||
|
||||
@@ -81,7 +81,8 @@
|
||||
},
|
||||
"inProgress": "U tijeku",
|
||||
"invalidStartTime": "Nevažeće vrijeme početka",
|
||||
"invalidEndTime": "Nevažeće vrijeme završetka"
|
||||
"invalidEndTime": "Nevažeće vrijeme završetka",
|
||||
"never": "Nikad"
|
||||
},
|
||||
"menu": {
|
||||
"live": {
|
||||
|
||||
@@ -29,9 +29,9 @@
|
||||
"camera": {
|
||||
"birdseye": "Ptičja perspektiva",
|
||||
"setting": {
|
||||
"label": "Postavke streamanja kamere",
|
||||
"title": "{{cameraName}} Streaming Postavke",
|
||||
"desc": "Promijenite opcije streamanja uživo za nadzornu ploču ove grupe kamera. <em>Ove postavke su specifične za uređaj/preglednik.</em>",
|
||||
"label": "Postavke emitiranja kamere",
|
||||
"title": "{{cameraName}} Postavke Emitiranja",
|
||||
"desc": "Promijenite opcije emitiranja uživo za nadzornu ploču ove grupe kamera. <em>Ove postavke su specifične za uređaj/preglednik.</em>",
|
||||
"audioIsAvailable": "Za ovaj prijenos dostupan je zvuk",
|
||||
"audioIsUnavailable": "Za ovaj prijenos zvuk nije dostupan",
|
||||
"audio": {
|
||||
@@ -39,15 +39,15 @@
|
||||
"title": "Audio mora dolaziti s vaše kamere i biti konfiguriran u go2rtc za ovaj prijenos."
|
||||
}
|
||||
},
|
||||
"stream": "Prijenos",
|
||||
"placeholder": "Izaberi prijenos",
|
||||
"stream": "Emitiranje",
|
||||
"placeholder": "Izaberi emitiranje",
|
||||
"streamMethod": {
|
||||
"label": "Metoda Prijenosa",
|
||||
"placeholder": "Odaberi metodu prijenosa",
|
||||
"label": "Metoda emitiranja",
|
||||
"placeholder": "Odaberi metodu emitiranja",
|
||||
"method": {
|
||||
"noStreaming": {
|
||||
"label": "Nema Prijenosa",
|
||||
"desc": "Slike s kamere bit će ažurirane samo jednom u minuti, a prijenos uživo neće biti dostupan."
|
||||
"label": "Nema emitiranja",
|
||||
"desc": "Slike s kamere bit će ažurirane samo jednom u minuti, a emitiranje uživo neće biti dostupno."
|
||||
},
|
||||
"smartStreaming": {
|
||||
"desc": "Pametno emitiranje ažurirat će sliku vaše kamere jednom u minuti kada nema prepoznatljive aktivnosti kako bi uštedjelo propusnost i resurse. Kada se detektira aktivnost, slika će se besprijekorno prebaciti na prijenos uživo.",
|
||||
|
||||
@@ -37,7 +37,7 @@
|
||||
"noPreviewFoundFor": "Pretpregled nije nađen za {{cameraName}}",
|
||||
"livePlayerRequiredIOSVersion": "iOS 17.1 ili noviji je potreban za ovu vrstu uživog prijenosa.",
|
||||
"streamOffline": {
|
||||
"title": "Stream nije dostupan",
|
||||
"title": "Emitiranje nije dostupno",
|
||||
"desc": "Slike nisu primljene sa {{cameraName}} <code>detect</code> stream-a, provjeri logove"
|
||||
},
|
||||
"toast": {
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
},
|
||||
"details": {
|
||||
"unknown": "Nepoznato",
|
||||
"none": "Nijedan",
|
||||
"none": "Nema",
|
||||
"scoreInfo": "Rezultat predstavlja prosječnu klasifikacijsku pouzdanost kroz sve detekcije ovog objekta."
|
||||
},
|
||||
"toast": {
|
||||
@@ -38,35 +38,155 @@
|
||||
"deleteImageFailed": "Neuspješno brisanje: {{errorMessage}}",
|
||||
"deleteCategoryFailed": "Neuspješno brisanje klase: {{errorMessage}}",
|
||||
"deleteModelFailed": "Nije uspjelo brisanje modela: {{errorMessage}}",
|
||||
"categorizeFailed": "Nije uspjelo kategoriziranje slike: {{errorMessage}}"
|
||||
"categorizeFailed": "Nije uspjelo kategoriziranje slike: {{errorMessage}}",
|
||||
"trainingFailed": "Neuspješno treniranje modela. Provjerite Frigate zapisnike za detalje.",
|
||||
"trainingFailedToStart": "Neuspješno pokretanje treniranja modela: {{errorMessage}}",
|
||||
"updateModelFailed": "Neuspješno ažuriranje modela: {{errorMessage}}",
|
||||
"renameCategoryFailed": "Neuspješno preimenovanje klase: {{errorMessage}}"
|
||||
}
|
||||
},
|
||||
"description": {
|
||||
"invalidName": "Nevaljano ime. Ime može samo uključivati slova, brojeve, razmake, navodnike, podcrte i crtice."
|
||||
},
|
||||
"train": {
|
||||
"titleShort": "Nedavno"
|
||||
"titleShort": "Nedavno",
|
||||
"aria": "Odaberi Nedavne Klasifikacije",
|
||||
"title": "Nedavne Klasifikacije"
|
||||
},
|
||||
"deleteModel": {
|
||||
"desc_one": "Jeste li sigurni da želite izbrisati {{count}} model? Ovo će trajno izbrisati sve povezane podatke, uključujući slike i podatke za treniranje. Ova radnja se ne može poništiti.",
|
||||
"desc_few": "Jeste li sigurni da želite izbrisati {{count}} modela? Ovo će trajno izbrisati sve povezane podatke, uključujući slike i podatke za treniranje. Ova radnja se ne može poništiti.",
|
||||
"desc_other": "Jeste li sigurni da želite izbrisati {{count}} modela? Ovo će trajno izbrisati sve povezane podatke, uključujući slike i podatke za treniranje. Ova radnja se ne može poništiti."
|
||||
"desc_other": "Jeste li sigurni da želite izbrisati {{count}} modela? Ovo će trajno izbrisati sve povezane podatke, uključujući slike i podatke za treniranje. Ova radnja se ne može poništiti.",
|
||||
"title": "Izbriši klasifikacijski model",
|
||||
"single": "Jesi li siguran da želiš izbrisati {{name}}? To će trajno izbrisati sve povezane podatke, uključujući slike i podatke za treniranje. Ova radnja se ne može poništiti."
|
||||
},
|
||||
"deleteDatasetImages": {
|
||||
"desc_one": "Jeste li sigurni da želite izbrisati {{count}} sliku iz {{dataset}}? Ova radnja se ne može poništiti i zahtijevat će ponovno treniranje modela.",
|
||||
"desc_few": "Jeste li sigurni da želite izbrisati {{count}} slike iz {{dataset}}? Ova radnja se ne može poništiti i zahtijevat će ponovno treniranje modela.",
|
||||
"desc_other": "Jeste li sigurni da želite izbrisati {{count}} slika iz {{dataset}}? Ova radnja se ne može poništiti i zahtijevat će ponovno treniranje modela."
|
||||
"desc_other": "Jeste li sigurni da želite izbrisati {{count}} slika iz {{dataset}}? Ova radnja se ne može poništiti i zahtijevat će ponovno treniranje modela.",
|
||||
"title": "Izbriši slike iz skupa podataka"
|
||||
},
|
||||
"deleteTrainImages": {
|
||||
"desc_one": "Jeste li sigurni da želite izbrisati {{count}} sliku? Ova radnja se ne može poništiti.",
|
||||
"desc_few": "Jeste li sigurni da želite izbrisati {{count}} slike? Ova radnja se ne može poništiti.",
|
||||
"desc_other": "Jeste li sigurni da želite izbrisati {{count}} slika? Ova radnja se ne može poništiti."
|
||||
"desc_other": "Jeste li sigurni da želite izbrisati {{count}} slika? Ova radnja se ne može poništiti.",
|
||||
"title": "Izbriši slike iz skupa za treniranje"
|
||||
},
|
||||
"wizard": {
|
||||
"step3": {
|
||||
"allImagesRequired_one": "Molimo klasificirajte sve slike. Preostala je {{count}} slika.",
|
||||
"allImagesRequired_few": "Molimo klasificirajte sve slike. Preostale su {{count}} slike.",
|
||||
"allImagesRequired_other": "Molimo klasificirajte sve slike. Preostalo je {{count}} slika."
|
||||
"allImagesRequired_other": "Molimo klasificirajte sve slike. Preostalo je {{count}} slika.",
|
||||
"selectImagesPrompt": "Odaberite sve slike s: {{className}}",
|
||||
"selectImagesDescription": "Kliknite na slike za odabir. Kliknite Nastavi kada završite s ovom klasom.",
|
||||
"generating": {
|
||||
"title": "Generiranje Primjeraka Slika",
|
||||
"description": "Frigate povlači reprezentativne slike iz vaših snimaka. Ovo može potrajati..."
|
||||
},
|
||||
"training": {
|
||||
"title": "Treniranje Modela",
|
||||
"description": "Vaš model se trenira u pozadini. Zatvorite ovaj dijalog, a model će početi raditi čim treniranje završi."
|
||||
},
|
||||
"retryGenerate": "Ponovi Generiranje",
|
||||
"noImages": "Nema generiranih primjeraka slika",
|
||||
"classifying": "Klasificiranje & Treniranje...",
|
||||
"trainingStarted": "Treniranje je uspješno pokrenuto",
|
||||
"modelCreated": "Model je uspješno kreiran. Koristite prikaz Nedavnih Klasifikacija za dodavanje slika za nedostajuća stanja, a zatim trenirajte model.",
|
||||
"errors": {
|
||||
"noCameras": "Nema konfiguriranih kamera",
|
||||
"noObjectLabel": "Nije odabrana oznaka objekta",
|
||||
"generateFailed": "Neuspjelo generiranje primjera: {{error}}",
|
||||
"generationFailed": "Generiranje nije uspjelo. Pokušajte ponovo.",
|
||||
"classifyFailed": "Neuspjela klasifikacija slika: {{error}}"
|
||||
},
|
||||
"generateSuccess": "Primjerci slika su uspješno generirani",
|
||||
"missingStatesWarning": {
|
||||
"title": "Nedostaju Primjeri Stanja",
|
||||
"description": "Preporučuje se odabrati primjere za sva stanja radi najboljih rezultata. Možete nastaviti bez odabira svih stanja, ali model neće biti treniran dok svi statusi nemaju slike. Nakon nastavka, koristite prikaz Nedavnih Klasifikacija za klasifikaciju slika za nedostajuća stanja, a zatim trenirajte model."
|
||||
}
|
||||
},
|
||||
"title": "Kreiraj Novu Klasifikaciju",
|
||||
"steps": {
|
||||
"nameAndDefine": "Naziv & Definicija",
|
||||
"stateArea": "Područje Stanja",
|
||||
"chooseExamples": "Odaberi Primjere"
|
||||
},
|
||||
"step1": {
|
||||
"description": "Modeli stanja prate fiksna područja kamere za promjene (npr. vrata otvorena/zatvorena). Modeli objekata dodaju klasifikacije detektiranim objektima (npr. poznate životinje, dostavljači, itd.).",
|
||||
"name": "Naziv",
|
||||
"namePlaceholder": "Unesite naziv modela...",
|
||||
"type": "Tip",
|
||||
"typeState": "Stanje",
|
||||
"typeObject": "Objekt",
|
||||
"objectLabel": "Oznaka Objekta",
|
||||
"objectLabelPlaceholder": "Odaberi tip objekta...",
|
||||
"classificationType": "Tip Klasifikacije",
|
||||
"classificationTypeTip": "Saznaj više o tipovima klasifikacije",
|
||||
"classificationTypeDesc": "Podoznake dodaju dodatni tekst na oznaku objekta (npr. 'Osoba: UPS'). Atributi su pretraživi metapodaci pohranjeni zasebno u metapodacima objekta.",
|
||||
"classificationSubLabel": "Podoznaka",
|
||||
"classificationAttribute": "Atribut",
|
||||
"classes": "Klase",
|
||||
"states": "Stanja",
|
||||
"classesTip": "Saznaj više o klasama",
|
||||
"classesStateDesc": "Definiraj različita stanja u kojima područje kamere može biti. Na primjer: 'otvoreno' i 'zatvoreno' za garažna vrata.",
|
||||
"classesObjectDesc": "Definiraj različite kategorije za klasifikaciju detektiranih objekata. Na primjer: 'dostavljač', 'stanar', 'nepoznata osoba' za klasifikaciju ljudi.",
|
||||
"classPlaceholder": "Unesite naziv klase...",
|
||||
"errors": {
|
||||
"nameRequired": "Naziv modela je obavezan",
|
||||
"nameLength": "Naziv modela mora imati najviše 64 znaka",
|
||||
"nameOnlyNumbers": "Naziv modela ne smije sadržavati samo brojeve",
|
||||
"classRequired": "Potrebna je barem 1 klasa",
|
||||
"classesUnique": "Nazivi klasa moraju biti jedinstveni",
|
||||
"noneNotAllowed": "Klasa 'none' nije dopuštena",
|
||||
"stateRequiresTwoClasses": "Modeli stanja zahtijevaju najmanje 2 klase",
|
||||
"objectLabelRequired": "Molimo odaberite oznaku objekta",
|
||||
"objectTypeRequired": "Molimo odaberite tip klasifikacije"
|
||||
}
|
||||
},
|
||||
"step2": {
|
||||
"description": "Odaberite kamere i definirajte područje praćenja za svaku kameru. Model će klasificirati stanje tih područja.",
|
||||
"cameras": "Kamere",
|
||||
"selectCamera": "Odaberi Kameru",
|
||||
"noCameras": "Kliknite + za dodavanje kamera",
|
||||
"selectCameraPrompt": "Odaberite kameru s popisa kako biste definirali područje praćenja"
|
||||
}
|
||||
},
|
||||
"deleteCategory": {
|
||||
"title": "Izbriši klasu",
|
||||
"desc": "Jesi li siguran da želiš izbrisati klasu {{name}}? To će trajno izbrisati sve povezane slike i zahtijevati ponovno treniranje modela.",
|
||||
"minClassesTitle": "Nije moguće izbrisati klasu",
|
||||
"minClassesDesc": "Model klasifikacije mora imati barem 2 klase. Dodaj još jednu klasu prije brisanja ove."
|
||||
},
|
||||
"edit": {
|
||||
"title": "Uredi model klasifikacije",
|
||||
"descriptionState": "Uredi klase za ovaj model klasifikacije stanja. Promjene zahtijevaju ponovno treniranje modela.",
|
||||
"descriptionObject": "Uredi tip objekta i tip klasifikacije za ovaj model klasifikacije objekata.",
|
||||
"stateClassesInfo": "Napomena: Promjena klasa stanja zahtijeva ponovno treniranje modela s ažuriranim klasama."
|
||||
},
|
||||
"renameCategory": {
|
||||
"title": "Preimenuj klasu",
|
||||
"desc": "Unesite novi naziv za {{name}}. Bit će potrebno ponovno trenirati model da promjena naziva stupi na snagu."
|
||||
},
|
||||
"categories": "Klase",
|
||||
"createCategory": {
|
||||
"new": "Kreiraj Novu Klasu"
|
||||
},
|
||||
"categorizeImageAs": "Klasificiraj Sliku Kao:",
|
||||
"categorizeImage": "Klasificiraj Sliku",
|
||||
"menu": {
|
||||
"objects": "Objekti",
|
||||
"states": "Stanja"
|
||||
},
|
||||
"noModels": {
|
||||
"object": {
|
||||
"title": "Nema Modela Klasifikacije Objekata",
|
||||
"description": "Kreiraj prilagođeni model za klasifikaciju detektiranih objekata.",
|
||||
"buttonText": "Kreiraj Model Objekta"
|
||||
},
|
||||
"state": {
|
||||
"title": "Nema Modela Klasifikacije Stanja",
|
||||
"description": "Kreiraj prilagođeni model za praćenje i klasifikaciju promjena stanja u određenim područjima kamere.",
|
||||
"buttonText": "Kreiraj Model Stanja"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
"visionModelFeatureExtractor": "Ekstraktor značajki modela vizije",
|
||||
"textTokenizer": "Tokenizator teksta"
|
||||
},
|
||||
"context": "Frigate preuzima potrebne modele ugrađivanja (embeddings) kako bi podržao značajku semantičkog pretraživanja. To može potrajati nekoliko minuta, ovisno o brzini vaše mrežne veze.",
|
||||
"context": "Frigate preuzima potrebne modele ugrađivanja kako bi podržao značajku semantičkog pretraživanja. To može potrajati nekoliko minuta, ovisno o brzini vaše mrežne veze.",
|
||||
"tips": {
|
||||
"context": "Možda ćete htjeti ponovno indeksirati ugrađivanja (embeddings) svojih praćenih objekata kada se modeli preuzmu."
|
||||
},
|
||||
@@ -34,8 +34,84 @@
|
||||
"tips": {
|
||||
"mismatch_one": "{{count}} nedostupan objekt je otkriven i uključen u ovaj pregledni stavak. Ti objekti ili nisu kvalificirani kao upozorenje ili detekcija, ili su već uklonjeni/izbrisani.",
|
||||
"mismatch_few": "{{count}} nedostupna objekta su otkrivena i uključena u ovaj pregledni stavak. Ti objekti ili nisu kvalificirani kao upozorenje ili detekcija, ili su već uklonjeni/izbrisani.",
|
||||
"mismatch_other": "{{count}} nedostupnih objekata je otkriveno i uključeno u ovaj pregledni stavak. Ti objekti ili nisu kvalificirani kao upozorenje ili detekcija, ili su već uklonjeni/izbrisani."
|
||||
"mismatch_other": "{{count}} nedostupnih objekata je otkriveno i uključeno u ovaj pregledni stavak. Ti objekti ili nisu kvalificirani kao upozorenje ili detekcija, ili su već uklonjeni/izbrisani.",
|
||||
"hasMissingObjects": "Prilagodite svoju konfiguraciju ako želite da Frigate sprema praćene objekte za sljedeće oznake: <em>{{objects}}</em>"
|
||||
},
|
||||
"title": "Detalji o pregledu stavke",
|
||||
"desc": "Detalji o pregledu stavke",
|
||||
"button": {
|
||||
"share": "Podijelite ovaj pregled",
|
||||
"viewInExplore": "Pogledaj u Istraži"
|
||||
},
|
||||
"toast": {
|
||||
"success": {
|
||||
"regenerate": "Zatražen je novi opis od {{provider}}. Ovisno o brzini vašeg pružatelja usluga, novi opis može trebati neko vrijeme da se regenerira.",
|
||||
"updatedSublabel": "Uspješno ažurirana podoznaka.",
|
||||
"updatedLPR": "Uspješno ažurirana registarska pločica.",
|
||||
"updatedAttributes": "Uspješno ažurirani atributi.",
|
||||
"audioTranscription": "Uspješno zatražena audio transkripcija. Ovisno o brzini vašeg Frigate servera, transkripcija može potrajati neko vrijeme."
|
||||
},
|
||||
"error": {
|
||||
"regenerate": "Neuspješno pozivanje {{provider}} za novi opis: {{errorMessage}}",
|
||||
"updatedSublabelFailed": "Nije uspjelo ažurirati podoznake: {{errorMessage}}",
|
||||
"updatedLPRFailed": "Neuspješno ažuriranje registarske pločice: {{errorMessage}}",
|
||||
"updatedAttributesFailed": "Neuspješno ažuriranje atributa: {{errorMessage}}",
|
||||
"audioTranscription": "Neuspješno zatraživanje audio transkripcije: {{errorMessage}}"
|
||||
}
|
||||
}
|
||||
},
|
||||
"label": "Oznaka",
|
||||
"editSubLabel": {
|
||||
"title": "Uredi podoznaku",
|
||||
"desc": "Unesite novu podoznaku za ovaj {{label}}",
|
||||
"descNoLabel": "Unesite novu oznaku podoznake za ovaj praćeni objekt"
|
||||
},
|
||||
"editLPR": {
|
||||
"title": "Uredi registarsku pločicu",
|
||||
"desc": "Unesite novu vrijednost registarske pločice za ovaj {{label}}",
|
||||
"descNoLabel": "Unesite novu vrijednost registarske pločice za ovaj praćeni objekt"
|
||||
},
|
||||
"editAttributes": {
|
||||
"title": "Atributi uređivanja",
|
||||
"desc": "Odaberite klasifikacijske atribute za ovaj {{label}}"
|
||||
},
|
||||
"snapshotScore": {
|
||||
"label": "Ocjena snimke"
|
||||
},
|
||||
"topScore": {
|
||||
"label": "Najbolja ocjena",
|
||||
"info": "Najviša ocjena je najviši medijan za praćeni objekt, pa se može razlikovati od rezultata prikazanog na sličici rezultata pretraživanja."
|
||||
},
|
||||
"score": {
|
||||
"label": "Ocjena"
|
||||
},
|
||||
"recognizedLicensePlate": "Priznata registarska pločica",
|
||||
"attributes": "Klasifikacijski atributi",
|
||||
"estimatedSpeed": "Procijenjena brzina",
|
||||
"objects": "Objekti",
|
||||
"camera": "Kamera",
|
||||
"zones": "Zone",
|
||||
"button": {
|
||||
"findSimilar": "Pronađite slične",
|
||||
"regenerate": {
|
||||
"title": "Regeneriraj",
|
||||
"label": "Ponovno generiranje opisa praćenog objekta"
|
||||
}
|
||||
},
|
||||
"description": {
|
||||
"label": "Opis",
|
||||
"placeholder": "Opis praćenog objekta",
|
||||
"aiTips": "Frigate neće tražiti opis od vašeg Generative AI pružatelja dok životni ciklus praćenog objekta ne završi."
|
||||
},
|
||||
"expandRegenerationMenu": "Proširi izbornik regeneracije",
|
||||
"regenerateFromSnapshot": "Regeneracija iz Snimki",
|
||||
"regenerateFromThumbnails": "Regeneracija iz sličica",
|
||||
"tips": {
|
||||
"descriptionSaved": "Uspješno spremljen opis",
|
||||
"saveDescriptionFailed": "Nije ažuriran opis: {{errorMessage}}"
|
||||
},
|
||||
"title": {
|
||||
"label": "Naslov"
|
||||
}
|
||||
},
|
||||
"trackedObjectDetails": "Detalji praćenog objekta",
|
||||
@@ -51,9 +127,124 @@
|
||||
"title": "Detalji Praćenja",
|
||||
"noImageFound": "Slika nije nađena za ovaj vremenski zapis.",
|
||||
"createObjectMask": "Napravi Masku Objekta",
|
||||
"adjustAnnotationSettings": "Podesi postavke anotacije"
|
||||
"adjustAnnotationSettings": "Podesi postavke anotacije",
|
||||
"scrollViewTips": "Kliknite za prikaz značajnih trenutaka životnog ciklusa ovog objekta.",
|
||||
"autoTrackingTips": "Pozicije ograničavajućih okvira bit će netočne za kamere s automatskim praćenjem.",
|
||||
"count": "{{first}} of {{second}}",
|
||||
"trackedPoint": "Praćena točka",
|
||||
"lifecycleItemDesc": {
|
||||
"visible": "{{label}} detektiran",
|
||||
"entered_zone": "{{label}} ušlo u {{zones}}",
|
||||
"active": "{{label}} postao aktivan",
|
||||
"stationary": "{{label}} je postao stacionaran",
|
||||
"attribute": {
|
||||
"faceOrLicense_plate": "{{attribute}} detektiran za {{label}}",
|
||||
"other": "{{label}} prepoznat kao {{attribute}}"
|
||||
},
|
||||
"gone": "{{label}} lijevo",
|
||||
"heard": "{{label}} zvuk detektiran",
|
||||
"external": "{{label}} detektiran",
|
||||
"header": {
|
||||
"zones": "Zone",
|
||||
"ratio": "Omjer",
|
||||
"area": "Površina",
|
||||
"score": "Ocjena"
|
||||
}
|
||||
},
|
||||
"annotationSettings": {
|
||||
"title": "Postavke anotacija",
|
||||
"showAllZones": {
|
||||
"title": "Pokaži sve zone",
|
||||
"desc": "Uvijek prikaži zone u okvirima gdje su objekti ušli u zonu."
|
||||
},
|
||||
"offset": {
|
||||
"label": "Pomak anotacija",
|
||||
"desc": "Ovi podaci dolaze s detekcijskog emitiranja vaše kamere, ali se prikazuju preko slika iz snimajućeg emitiranja. Malo je vjerojatno da su oba emitiranja potpuno sinkronizirana. Kao rezultat toga, okvir (bounding box) i snimka možda neće savršeno odgovarati. Ovom postavkom možete pomaknuti oznake unaprijed ili unatrag u vremenu kako bi bolje odgovarale snimljenoj snimci.",
|
||||
"millisecondsToOffset": "Milisekunde za pomicanje detekcije anotacija za. <em>Zadano: 0</em>",
|
||||
"tips": "Smanjite vrijednost ako je reprodukcija videa ispred kutija i točaka puta, a povećajte vrijednost ako je reprodukcija videa iza njih. Ta vrijednost može biti negativna.",
|
||||
"toast": {
|
||||
"success": "Pomak anotacija za {{camera}} spremljen je u konfiguracijsku datoteku."
|
||||
}
|
||||
}
|
||||
},
|
||||
"carousel": {
|
||||
"previous": "Prethodni slajd",
|
||||
"next": "Sljedeći slajd"
|
||||
}
|
||||
},
|
||||
"trackedObjectsCount_one": "{{count}} praćeni objekt ",
|
||||
"trackedObjectsCount_few": "{{count}} praćena objekta ",
|
||||
"trackedObjectsCount_other": "{{count}} praćenih objekata "
|
||||
"trackedObjectsCount_other": "{{count}} praćenih objekata ",
|
||||
"itemMenu": {
|
||||
"downloadVideo": {
|
||||
"label": "Preuzmi video",
|
||||
"aria": "Preuzmi video"
|
||||
},
|
||||
"downloadSnapshot": {
|
||||
"label": "Preuzmite snimku",
|
||||
"aria": "Preuzmite snimku"
|
||||
},
|
||||
"downloadCleanSnapshot": {
|
||||
"label": "Preuzmite čistu snimku",
|
||||
"aria": "Preuzmite čistu snimku"
|
||||
},
|
||||
"viewTrackingDetails": {
|
||||
"label": "Pogledajte detalje praćenja",
|
||||
"aria": "Prikaži detalje praćenja"
|
||||
},
|
||||
"findSimilar": {
|
||||
"label": "Pronađi slične",
|
||||
"aria": "Pronađi slične praćene objekte"
|
||||
},
|
||||
"addTrigger": {
|
||||
"label": "Dodaj okidač",
|
||||
"aria": "Dodajte okidač za ovaj praćeni objekt"
|
||||
},
|
||||
"audioTranscription": {
|
||||
"label": "Prepisivanje",
|
||||
"aria": "Zatražite audio transkripciju"
|
||||
},
|
||||
"submitToPlus": {
|
||||
"label": "Pošalji na Frigate+",
|
||||
"aria": "Pošalji na Frigate Plus"
|
||||
},
|
||||
"viewInHistory": {
|
||||
"label": "Pogled u povijest",
|
||||
"aria": "Pogled u povijest"
|
||||
},
|
||||
"deleteTrackedObject": {
|
||||
"label": "Izbriši ovaj praćeni objekt"
|
||||
},
|
||||
"showObjectDetails": {
|
||||
"label": "Prikaži putanju objekta"
|
||||
},
|
||||
"hideObjectDetails": {
|
||||
"label": "Put skrivanja objekta"
|
||||
}
|
||||
},
|
||||
"dialog": {
|
||||
"confirmDelete": {
|
||||
"title": "Potvrdi brisanje",
|
||||
"desc": "Brisanjem ovog praćenog objekta uklanja se snimka, sve spremljene ugradnje i svi povezani unosi o praćenju. Snimljeni materijal ovog praćenog objekta u prikazu Povijesti <em>NEĆE</em> biti izbrisan.<br /><br />Jeste li sigurni da želite nastaviti?"
|
||||
}
|
||||
},
|
||||
"noTrackedObjects": "Nema pronađenih praćenih objekata",
|
||||
"fetchingTrackedObjectsFailed": "Neuspješno dohvaćanje praćenih objekata: {{errorMessage}}",
|
||||
"searchResult": {
|
||||
"tooltip": "Pronađen {{type}} s pouzdanošću od {{confidence}}%",
|
||||
"previousTrackedObject": "Prethodni praćeni objekt",
|
||||
"nextTrackedObject": "Sljedeći praćeni objekt",
|
||||
"deleteTrackedObject": {
|
||||
"toast": {
|
||||
"success": "Praćeni objekt je uspješno izbrisan.",
|
||||
"error": "Neuspješno brisanje praćenog objekta: {{errorMessage}}"
|
||||
}
|
||||
}
|
||||
},
|
||||
"aiAnalysis": {
|
||||
"title": "Analiza umjetne inteligencije"
|
||||
},
|
||||
"concerns": {
|
||||
"label": "Zabrinutosti"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -96,6 +96,101 @@
|
||||
"disable": "Sakrij statistike emitiranja"
|
||||
},
|
||||
"manualRecording": {
|
||||
"title": "Na Zahtjev"
|
||||
"title": "Na Zahtjev",
|
||||
"tips": "Preuzmite trenutnu snimku ili pokrenite ručni događaj prema postavkama zadržavanja snimki ove kamere.",
|
||||
"playInBackground": {
|
||||
"label": "Reproduciraj u pozadini",
|
||||
"desc": "Omogući ovu opciju za nastavak emitiranja kada je prozor za reprodukciju skriven."
|
||||
},
|
||||
"showStats": {
|
||||
"label": "Prikaži statistike",
|
||||
"desc": "Omogući ovu opciju da se statistika emitiranja prikazuje preko prikaza kamere."
|
||||
},
|
||||
"debugView": "Debug prikaz",
|
||||
"start": "Pokreni snimanje na zahtjev",
|
||||
"started": "Pokrenuto ručno snimanje na zahtjev.",
|
||||
"failedToStart": "Neuspješno pokretanje ručnog snimanja na zahtjev.",
|
||||
"recordDisabledTips": "Budući da je snimanje onemogućeno ili ograničeno u konfiguraciji za ovu kameru, spremit će se samo jedna snimka.",
|
||||
"end": "Kraj snimanja na zahtjev",
|
||||
"ended": "Prekinuto je ručno snimanje na zahtjev.",
|
||||
"failedToEnd": "Neuspješno prekidanje ručnog snimanja na zahtjev."
|
||||
},
|
||||
"streamingSettings": "Postavke emitiranja",
|
||||
"notifications": "Obavijesti",
|
||||
"audio": "Audio",
|
||||
"suspend": {
|
||||
"forTime": "Pauziraj zbog: "
|
||||
},
|
||||
"stream": {
|
||||
"title": "Emitiranje",
|
||||
"audio": {
|
||||
"tips": {
|
||||
"title": "Zvuk mora biti izlazan iz vaše kamere i konfiguriran u go2rtc za ovaj stream."
|
||||
},
|
||||
"available": "Audio je dostupan za ovo emitiranje",
|
||||
"unavailable": "Audio nije dostupan za ovo emitiranje"
|
||||
},
|
||||
"debug": {
|
||||
"picker": "Odabir streama nije dostupan u debug načinu. Debug prikaz uvijek koristi emitiranje dodijeljeno ulozi detekcije."
|
||||
},
|
||||
"twoWayTalk": {
|
||||
"tips": "Vaš uređaj mora podržavati tu značajku, a WebRTC mora biti konfiguriran za dvosmjernu komunikaciju.",
|
||||
"available": "Za ovo emitiranje dostupan je dvosmjerni razgovor",
|
||||
"unavailable": "Dvosmjerni razgovor nije dostupan za ovo emitiranje"
|
||||
},
|
||||
"lowBandwidth": {
|
||||
"tips": "Prikaz uživo je u načinu rada s niskom propusnošću zbog međuspremnika ili grešaka u emitiranju.",
|
||||
"resetStream": "Resetiraj emitiranje"
|
||||
},
|
||||
"playInBackground": {
|
||||
"label": "Reproduciraj u pozadini",
|
||||
"tips": "Omogući ovu opciju za nastavak emitiranja kad je player skriven."
|
||||
}
|
||||
},
|
||||
"cameraSettings": {
|
||||
"title": "{{camera}} Postavke",
|
||||
"cameraEnabled": "Kamera omogućena",
|
||||
"objectDetection": "Detekcija objekata",
|
||||
"recording": "Snimanje",
|
||||
"snapshots": "Snimke",
|
||||
"audioDetection": "Detekcija zvuka",
|
||||
"transcription": "Audio transkripcija",
|
||||
"autotracking": "Automatsko praćenje"
|
||||
},
|
||||
"history": {
|
||||
"label": "Prikaži povijesne snimke"
|
||||
},
|
||||
"effectiveRetainMode": {
|
||||
"modes": {
|
||||
"all": "Svi",
|
||||
"motion": "Prijedlog",
|
||||
"active_objects": "Aktivni objekti"
|
||||
}
|
||||
},
|
||||
"editLayout": {
|
||||
"label": "Uredi raspored",
|
||||
"group": {
|
||||
"label": "Uredi Grupu Kamera"
|
||||
},
|
||||
"exitEdit": "Izlaz iz uređivanja"
|
||||
},
|
||||
"noCameras": {
|
||||
"title": "Nema konfiguriranih kamera",
|
||||
"description": "Započnite povezivanjem kamere na Frigate.",
|
||||
"buttonText": "Dodaj kameru",
|
||||
"restricted": {
|
||||
"title": "Nema dostupnih kamera",
|
||||
"description": "Nemate dopuštenje za gledanje kamera u ovoj grupi."
|
||||
},
|
||||
"default": {
|
||||
"title": "Nema konfiguriranih kamera",
|
||||
"description": "Započnite povezivanjem kamere na Frigate.",
|
||||
"buttonText": "Dodaj kameru"
|
||||
},
|
||||
"group": {
|
||||
"title": "Nema kamera u grupi",
|
||||
"description": "Ova grupa kamera nema dodijeljene niti omogućene kamere.",
|
||||
"buttonText": "Upravljanje grupama"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,14 +1,14 @@
|
||||
{
|
||||
"documentTitle": {
|
||||
"cameras": "Statistika kamera - Frigate",
|
||||
"general": "Generalne statistike - Frigate",
|
||||
"cameras": "Statistika Kamera - Frigate",
|
||||
"general": "Opća Statistika - Frigate",
|
||||
"logs": {
|
||||
"go2rtc": "Go2RTC Zapisnici- Frigate",
|
||||
"nginx": "Nginx Zapisnici - Frigate",
|
||||
"frigate": "Frigate Zapisnici - Frigate"
|
||||
"go2rtc": "Zapisnici Go2RTC - Frigate",
|
||||
"nginx": "Zapisnici Nginx - Frigate",
|
||||
"frigate": "Zapisnici Frigate - Frigate"
|
||||
},
|
||||
"storage": "Statistika pohrane - Frigate",
|
||||
"enrichments": "Statistika obogaćivanja - Frigate"
|
||||
"storage": "Statistika Pohrane - Frigate",
|
||||
"enrichments": "Statistika Obogaćenja - Frigate"
|
||||
},
|
||||
"title": "Sustav",
|
||||
"logs": {
|
||||
@@ -22,15 +22,15 @@
|
||||
"message": "Poruka"
|
||||
},
|
||||
"copy": {
|
||||
"label": "Kopiraj u Međuspremnik",
|
||||
"success": "Kopirani zapisnici u međuspremnik",
|
||||
"error": "Nisam mogao kopirati zapisnike u međuspremnik"
|
||||
"label": "Kopiraj u međuspremnik",
|
||||
"success": "Zapisnici kopirani u međuspremnik",
|
||||
"error": "Nije moguće kopirati zapisnike u međuspremnik"
|
||||
},
|
||||
"tips": "Zapisnici se prenose s poslužitelja",
|
||||
"tips": "Zapisnici se prenose sa servera",
|
||||
"toast": {
|
||||
"error": {
|
||||
"fetchingLogsFailed": "Greška dohvaćanja zapisnika: {{errorMessage}}",
|
||||
"whileStreamingLogs": "Pogreška tijekom prijenosa zapisnika: {{errorMessage}}"
|
||||
"fetchingLogsFailed": "Greška pri dohvaćanju zapisnika: {{errorMessage}}",
|
||||
"whileStreamingLogs": "Greška tijekom prijenosa zapisnika: {{errorMessage}}"
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -39,26 +39,170 @@
|
||||
"title": "Općenito",
|
||||
"detector": {
|
||||
"title": "Detektori",
|
||||
"inferenceSpeed": "Brzina izvođenja detektora",
|
||||
"temperature": "Temperatura Detektora",
|
||||
"cpuUsage": "Detektorova iskorištenost CPU-a",
|
||||
"cpuUsageInformation": "CPU korišten za pripremu ulaznih i izlaznih podataka za modele detekcije. Ova vrijednost ne mjeri korištenje tijekom izvođenja modela, čak ni ako se koristi GPU ili akcelerator.",
|
||||
"memoryUsage": "Detektorova Iskorištenost Memorije"
|
||||
"inferenceSpeed": "Brzina inferencije detektora",
|
||||
"temperature": "Temperatura detektora",
|
||||
"cpuUsage": "Upotreba CPU-a detektora",
|
||||
"cpuUsageInformation": "CPU korišten za pripremu ulaznih i izlaznih podataka za/od modela detekcije. Ova vrijednost ne mjeri korištenje za inferenciju, čak ni ako se koristi GPU ili akcelerator.",
|
||||
"memoryUsage": "Upotreba memorije detektora"
|
||||
},
|
||||
"hardwareInfo": {
|
||||
"title": "Informacije o hardveru",
|
||||
"gpuUsage": "Iskorištenost GPU-a",
|
||||
"gpuMemory": "GPU Memorija",
|
||||
"gpuEncoder": "GPU Enkoder",
|
||||
"gpuDecoder": "GPU Dekoder",
|
||||
"gpuUsage": "Upotreba GPU-a",
|
||||
"gpuMemory": "Memorija GPU-a",
|
||||
"gpuEncoder": "GPU Encoder",
|
||||
"gpuDecoder": "GPU Decoder",
|
||||
"gpuInfo": {
|
||||
"vainfoOutput": {
|
||||
"title": "Ispis Vainfo",
|
||||
"title": "Vainfo Izlaz",
|
||||
"returnCode": "Povratni kod: {{code}}",
|
||||
"processOutput": "Ispis procesa:",
|
||||
"processOutput": "Izlaz procesa:",
|
||||
"processError": "Greška procesa:"
|
||||
},
|
||||
"nvidiaSMIOutput": {
|
||||
"title": "Nvidia SMI Izlaz",
|
||||
"name": "Naziv: {{name}}",
|
||||
"driver": "Driver: {{driver}}",
|
||||
"cudaComputerCapability": "CUDA Compute Capability: {{cuda_compute}}",
|
||||
"vbios": "VBios Informacije: {{vbios}}"
|
||||
},
|
||||
"closeInfo": {
|
||||
"label": "Zatvori informacije o GPU-u"
|
||||
},
|
||||
"copyInfo": {
|
||||
"label": "Kopiraj informacije o GPU-u"
|
||||
},
|
||||
"toast": {
|
||||
"success": "Informacije o GPU-u kopirane u međuspremnik"
|
||||
}
|
||||
},
|
||||
"npuUsage": "Upotreba NPU-a",
|
||||
"npuMemory": "Memorija NPU-a",
|
||||
"intelGpuWarning": {
|
||||
"title": "Upozorenje Intel GPU Statistika",
|
||||
"message": "Statistika GPU-a nije dostupna",
|
||||
"description": "Ovo je poznata greška u Intelovim alatima za izvještavanje GPU statistike (intel_gpu_top) gdje će se podaci prekinuti i stalno prikazivati 0% korištenja GPU-a, čak i kada hardversko ubrzanje i detekcija objekata pravilno rade na (i)GPU-u. Ovo nije greška Frigate-a. Možete ponovno pokrenuti host da privremeno riješite problem i potvrdite da GPU radi ispravno. Ovo ne utječe na performanse."
|
||||
}
|
||||
},
|
||||
"otherProcesses": {
|
||||
"title": "Ostali Procesi",
|
||||
"processCpuUsage": "Upotreba CPU-a procesa",
|
||||
"processMemoryUsage": "Upotreba memorije procesa",
|
||||
"series": {
|
||||
"go2rtc": "go2rtc",
|
||||
"recording": "snimanje",
|
||||
"review_segment": "pregled segmenta",
|
||||
"embeddings": "ugrađivanja",
|
||||
"audio_detector": "audio detektor"
|
||||
}
|
||||
}
|
||||
},
|
||||
"storage": {
|
||||
"title": "Pohrana",
|
||||
"overview": "Pregled",
|
||||
"recordings": {
|
||||
"title": "Snimke",
|
||||
"tips": "Ova vrijednost predstavlja ukupno korištenje prostora za snimke u Frigate bazi podataka. Frigate ne prati korištenje prostora za sve datoteke na disku.",
|
||||
"earliestRecording": "Najranija dostupna snimka:"
|
||||
},
|
||||
"shm": {
|
||||
"title": "SHM (zajednička memorija) alokacija",
|
||||
"warning": "Trenutna veličina SHM od {{total}} MB je premala. Povećajte je na najmanje {{min_shm}} MB."
|
||||
},
|
||||
"cameraStorage": {
|
||||
"title": "Pohrana Kamere",
|
||||
"camera": "Kamera",
|
||||
"unusedStorageInformation": "Informacije o neiskorištenom prostoru",
|
||||
"storageUsed": "Pohrana",
|
||||
"percentageOfTotalUsed": "Postotak od ukupnog",
|
||||
"bandwidth": "Propusnost",
|
||||
"unused": {
|
||||
"title": "Neiskorišteno",
|
||||
"tips": "Ova vrijednost možda ne prikazuje točno slobodan prostor dostupan Frigate-u ako imate druge datoteke pohranjene na disku osim Frigate snimaka. Frigate ne prati korištenje prostora izvan svojih snimki."
|
||||
}
|
||||
}
|
||||
},
|
||||
"cameras": {
|
||||
"title": "Kamere",
|
||||
"overview": "Pregled",
|
||||
"info": {
|
||||
"aspectRatio": "Omjer stranica",
|
||||
"cameraProbeInfo": "{{camera}} Informacije ispitane od kamere",
|
||||
"streamDataFromFFPROBE": "Podaci emitiranja dohvaćeni su pomoću <code>ffprobe</code>.",
|
||||
"fetching": "Dohvaćanje podataka kamere",
|
||||
"stream": "Emitiranje {{idx}}",
|
||||
"video": "Video:",
|
||||
"codec": "Kodek:",
|
||||
"resolution": "Rezolucija:",
|
||||
"fps": "FPS:",
|
||||
"unknown": "Nepoznato",
|
||||
"audio": "Audio:",
|
||||
"error": "Greška: {{error}}",
|
||||
"tips": {
|
||||
"title": "Informacije Ispitivanja Kamere"
|
||||
}
|
||||
},
|
||||
"framesAndDetections": "Okviri / Detekcije",
|
||||
"label": {
|
||||
"camera": "kamera",
|
||||
"detect": "detekcija",
|
||||
"skipped": "preskočeno",
|
||||
"ffmpeg": "FFmpeg",
|
||||
"capture": "snimanje",
|
||||
"overallFramesPerSecond": "ukupni okviri po sekundi",
|
||||
"overallDetectionsPerSecond": "ukupne detekcije po sekundi",
|
||||
"overallSkippedDetectionsPerSecond": "ukupne preskočene detekcije po sekundi",
|
||||
"cameraFfmpeg": "{{camName}} FFmpeg",
|
||||
"cameraCapture": "{{camName}} snimanje",
|
||||
"cameraDetect": "{{camName}} detekcija",
|
||||
"cameraFramesPerSecond": "{{camName}} okviri po sekundi",
|
||||
"cameraDetectionsPerSecond": "{{camName}} detekcije po sekundi",
|
||||
"cameraSkippedDetectionsPerSecond": "{{camName}} preskočene detekcije po sekundi"
|
||||
},
|
||||
"toast": {
|
||||
"success": {
|
||||
"copyToClipboard": "Podaci probe kopirani u međuspremnik."
|
||||
},
|
||||
"error": {
|
||||
"unableToProbeCamera": "Nije moguće probati kameru: {{errorMessage}}"
|
||||
}
|
||||
}
|
||||
},
|
||||
"lastRefreshed": "Zadnje osvježavanje: ",
|
||||
"stats": {
|
||||
"ffmpegHighCpuUsage": "{{camera}} ima visoku upotrebu CPU-a za FFmpeg ({{ffmpegAvg}}%)",
|
||||
"detectHighCpuUsage": "{{camera}} ima visoku upotrebu CPU-a za detekciju ({{detectAvg}}%)",
|
||||
"healthy": "Sustav je zdrav",
|
||||
"reindexingEmbeddings": "Reindeksiranje embeddings ({{processed}}% završeno)",
|
||||
"cameraIsOffline": "{{camera}} je offline",
|
||||
"detectIsSlow": "{{detect}} je sporo ({{speed}} ms)",
|
||||
"detectIsVerySlow": "{{detect}} je vrlo sporo ({{speed}} ms)",
|
||||
"shmTooLow": "/dev/shm alokacija ({{total}} MB) treba biti povećana na najmanje {{min}} MB."
|
||||
},
|
||||
"enrichments": {
|
||||
"title": "Obogaćenja",
|
||||
"infPerSecond": "Inferencija po sekundi",
|
||||
"averageInf": "Prosječno vrijeme inferencije",
|
||||
"embeddings": {
|
||||
"image_embedding": "Ugrađivanja slike",
|
||||
"text_embedding": "Ugrađivanja teksta",
|
||||
"face_recognition": "Prepoznavanje lica",
|
||||
"plate_recognition": "Prepoznavanje registarskih pločica",
|
||||
"image_embedding_speed": "Brzina Image Embedding",
|
||||
"face_embedding_speed": "Brzina Face Embedding",
|
||||
"face_recognition_speed": "Brzina prepoznavanja lica",
|
||||
"plate_recognition_speed": "Brzina prepoznavanja registarskih pločica",
|
||||
"text_embedding_speed": "Brzina Text Embedding",
|
||||
"yolov9_plate_detection_speed": "Brzina YOLOv9 prepoznavanja pločica",
|
||||
"yolov9_plate_detection": "YOLOv9 Prepoznavanje pločica",
|
||||
"review_description": "Opis Pregleda",
|
||||
"review_description_speed": "Brzina Opisa Pregleda",
|
||||
"review_description_events_per_second": "Opis Pregleda",
|
||||
"object_description": "Opis Objekta",
|
||||
"object_description_speed": "Brzina Opisa Objekta",
|
||||
"object_description_events_per_second": "Opis Objekta",
|
||||
"classification": "{{name}} Klasifikacija",
|
||||
"classification_speed": "Brzina {{name}} Klasifikacije",
|
||||
"classification_events_per_second": "{{name}} Klasifikacija po događajima po sekundi"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -425,5 +425,6 @@
|
||||
"crack": "Törés",
|
||||
"chink": "Csörömpölés",
|
||||
"shatter": "Összetörés",
|
||||
"field_recording": "Helyszíni felvétel"
|
||||
"field_recording": "Helyszíni felvétel",
|
||||
"noise": "Zaj"
|
||||
}
|
||||
|
||||
@@ -72,7 +72,10 @@
|
||||
"24hour": "MMM d, HH:mm",
|
||||
"12hour": "MMM d, h:mm aaa"
|
||||
},
|
||||
"formattedTimestampMonthDay": "MMM d"
|
||||
"formattedTimestampMonthDay": "MMM d",
|
||||
"inProgress": "Folyamatban",
|
||||
"invalidStartTime": "Érvénytelen kezdeti idő",
|
||||
"never": "Soha"
|
||||
},
|
||||
"menu": {
|
||||
"darkMode": {
|
||||
@@ -269,7 +272,8 @@
|
||||
"next": "Következő"
|
||||
},
|
||||
"label": {
|
||||
"back": "Vissza"
|
||||
"back": "Vissza",
|
||||
"all": "Mind"
|
||||
},
|
||||
"readTheDocumentation": "Olvassa el a dokumentációt",
|
||||
"information": {
|
||||
|
||||
@@ -132,5 +132,9 @@
|
||||
},
|
||||
"count_one": "{{count}} Osztály",
|
||||
"count_other": "{{count}} Osztályok"
|
||||
},
|
||||
"attributes": {
|
||||
"label": "Osztályozási attribútumok",
|
||||
"all": "Minden attribútum"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -16,10 +16,15 @@
|
||||
"deletedModel_one": "Sikeresen törölt {{count}} modellt",
|
||||
"deletedModel_other": "",
|
||||
"categorizedImage": "A kép sikeresen osztályozva",
|
||||
"deletedCategory": "Osztály törlése"
|
||||
"deletedCategory": "Osztály törlése",
|
||||
"trainedModel": "Sikeresen betanított modell.",
|
||||
"trainingModel": "A modell tanítás sikeresen megkezdődött.",
|
||||
"updatedModel": "Modellkonfiguráció sikeresen frissítve",
|
||||
"renamedCategory": "Sikeresen átneveztük az osztályt {{name}} névre"
|
||||
},
|
||||
"error": {
|
||||
"deleteImageFailed": "Törlés sikertelen: {{errorMessage}}"
|
||||
"deleteImageFailed": "Törlés sikertelen: {{errorMessage}}",
|
||||
"deleteCategoryFailed": "Nem sikerült törölni az osztályt: {{errorMessage}}"
|
||||
}
|
||||
},
|
||||
"details": {
|
||||
@@ -43,5 +48,11 @@
|
||||
"noNewImages": "Nincsenek új képek a betanításhoz. Először osztályozzon több képet az adathalmazban.",
|
||||
"noChanges": "Az adathalmazban nem történt változás az utolsó betanítás óta.",
|
||||
"modelNotReady": "A modell nem áll készen a betanításra"
|
||||
},
|
||||
"menu": {
|
||||
"objects": "Objektumok"
|
||||
},
|
||||
"train": {
|
||||
"titleShort": "Friss"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,7 +3,11 @@
|
||||
"empty": {
|
||||
"detection": "Nincs megnézendő észlelés",
|
||||
"alert": "Nincs megnézendő riasztás",
|
||||
"motion": "Nem található mozgás"
|
||||
"motion": "Nem található mozgás",
|
||||
"recordingsDisabled": {
|
||||
"title": "A felvétel készítést engedélyezni kell",
|
||||
"description": "Csak akkor hozhatók létre áttekintési elemek egy kamerához, ha az adott kamerához engedélyezve vannak a felvételek."
|
||||
}
|
||||
},
|
||||
"detections": "Észlelések",
|
||||
"motion": {
|
||||
@@ -38,5 +42,17 @@
|
||||
"suspiciousActivity": "Gyanús Tevékenység",
|
||||
"threateningActivity": "Fenyegető Tevékenység",
|
||||
"zoomIn": "Nagyítás",
|
||||
"zoomOut": "Kicsinyítés"
|
||||
"zoomOut": "Kicsinyítés",
|
||||
"detail": {
|
||||
"trackedObject_other": "{{count}} objektum",
|
||||
"label": "Részletes",
|
||||
"noDataFound": "Nincsenek részletes adatok áttekintésre",
|
||||
"aria": "Részletes nézet kapcsolása",
|
||||
"trackedObject_one": "{{count}} objektum",
|
||||
"noObjectDetailData": "Nincsenek elérhető objektumrészlet adatok.",
|
||||
"settings": "Részletes nézet beállításai",
|
||||
"alwaysExpandActive": {
|
||||
"title": "Mindig kibontja az aktív részt"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -213,7 +213,9 @@
|
||||
"video": "videó",
|
||||
"object_lifecycle": "tárgy életciklus",
|
||||
"details": "részletek",
|
||||
"snapshot": "pillanatfelvétel"
|
||||
"snapshot": "pillanatfelvétel",
|
||||
"thumbnail": "bélyegkép",
|
||||
"tracking_details": "követési adatok"
|
||||
},
|
||||
"trackedObjectDetails": "Követett Tárgy Részletei",
|
||||
"exploreMore": "Fedezzen fel több {{label}} tárgyat",
|
||||
@@ -222,5 +224,21 @@
|
||||
},
|
||||
"concerns": {
|
||||
"label": "Aggodalmak"
|
||||
},
|
||||
"trackingDetails": {
|
||||
"lifecycleItemDesc": {
|
||||
"active": "{{label}} aktív lett",
|
||||
"attribute": {
|
||||
"other": "{{label}} felismerve mint {{attribute}}"
|
||||
},
|
||||
"external": "{{label}} érzékelve",
|
||||
"header": {
|
||||
"zones": "Zónák",
|
||||
"ratio": "Arány",
|
||||
"area": "Terület"
|
||||
}
|
||||
},
|
||||
"title": "Követési adatok",
|
||||
"noImageFound": "Nem található kép ehhez az időbélyeghez."
|
||||
}
|
||||
}
|
||||
|
||||
@@ -92,7 +92,8 @@
|
||||
"train": {
|
||||
"title": "Friss felismerések",
|
||||
"empty": "Nincs friss arcfelismerés",
|
||||
"aria": "Válassza ki a tanítást"
|
||||
"aria": "Válassza ki a tanítást",
|
||||
"titleShort": "Friss"
|
||||
},
|
||||
"pixels": "{{area}}px",
|
||||
"selectItem": "KIválasztani {{item}}-et"
|
||||
|
||||
@@ -778,6 +778,12 @@
|
||||
"semanticSearch": {
|
||||
"title": "Szemantikus keresés le van tiltva",
|
||||
"desc": "A Triggerek használatához engedélyezni kell a szemantikus keresést."
|
||||
},
|
||||
"wizard": {
|
||||
"steps": {
|
||||
"nameAndType": "Név és típus",
|
||||
"configureData": "Configurációs adatok"
|
||||
}
|
||||
}
|
||||
},
|
||||
"roles": {
|
||||
|
||||
@@ -121,12 +121,19 @@
|
||||
"gpuEncoder": "GPU Enkóder",
|
||||
"gpuDecoder": "GPU Dekóder",
|
||||
"npuUsage": "NPU Kihasználtság",
|
||||
"npuMemory": "NPU Memória"
|
||||
"npuMemory": "NPU Memória",
|
||||
"intelGpuWarning": {
|
||||
"message": "GPU statisztika nem érhető el"
|
||||
}
|
||||
},
|
||||
"otherProcesses": {
|
||||
"processMemoryUsage": "Folyamat Memória Kihasználtság",
|
||||
"title": "Egyéb Folyamatok",
|
||||
"processCpuUsage": "Folyamat CPU Kihasználtság"
|
||||
"processCpuUsage": "Folyamat CPU Kihasználtság",
|
||||
"series": {
|
||||
"go2rtc": "go2rtc",
|
||||
"recording": "felvétel"
|
||||
}
|
||||
}
|
||||
},
|
||||
"storage": {
|
||||
|
||||
@@ -85,5 +85,7 @@
|
||||
"snoring": "Ngorok",
|
||||
"cough": "Batuk",
|
||||
"clapping": "Tepukan",
|
||||
"camera": "Kamera"
|
||||
"camera": "Kamera",
|
||||
"wheeze": "Nafas",
|
||||
"gasp": "Tersedak"
|
||||
}
|
||||
|
||||
@@ -10,7 +10,22 @@
|
||||
"last7": "7 hari terakhir",
|
||||
"last14": "14 hari terakhir",
|
||||
"last30": "30 hari terakhir",
|
||||
"thisWeek": "Minggu Ini"
|
||||
"thisWeek": "Minggu Ini",
|
||||
"never": "Tidak Pernah",
|
||||
"lastWeek": "Minggu Lalu",
|
||||
"thisMonth": "Bulan Ini",
|
||||
"lastMonth": "Bulan Lalu",
|
||||
"5minutes": "5 menit",
|
||||
"10minutes": "10 menit",
|
||||
"30minutes": "30 menit",
|
||||
"1hour": "1 jam",
|
||||
"12hours": "12 jam",
|
||||
"24hours": "24 jam",
|
||||
"pm": "pm",
|
||||
"am": "am",
|
||||
"yr": "{{time}} tahun",
|
||||
"year_other": "{{time}} tahun",
|
||||
"mo": "{{time}} bulan"
|
||||
},
|
||||
"readTheDocumentation": "Baca dokumentasi"
|
||||
}
|
||||
|
||||
@@ -16,8 +16,38 @@
|
||||
"errorMessage": {
|
||||
"mustLeastCharacters": "Nama grup kamera minimal harus 2 karakter.",
|
||||
"exists": "Nama grup kamera sudah ada.",
|
||||
"nameMustNotPeriod": "Nama grup kamera tidak boleh ada titik."
|
||||
"nameMustNotPeriod": "Nama grup kamera tidak boleh ada titik.",
|
||||
"invalid": "Nama grup kamera tidak valid."
|
||||
}
|
||||
},
|
||||
"cameras": {
|
||||
"label": "Kamera",
|
||||
"desc": "Pilih kamera untuk grup ini."
|
||||
},
|
||||
"icon": "Ikon",
|
||||
"success": "Grup kamera {{name}} telah disimpan.",
|
||||
"camera": {
|
||||
"birdseye": "Mata Elang",
|
||||
"setting": {
|
||||
"label": "Pengaturan Streaming Kamera",
|
||||
"title": "Pengaturan Kamera {{cameraName}}",
|
||||
"desc": "Ubah pengaturan streaming untuk dasbor grup kamera ini. <em>Pengaturan ini spesifik untuk perangkat / browser tertentu.</em>",
|
||||
"audioIsAvailable": "Terdapat audio untuk stream ini",
|
||||
"audioIsUnavailable": "Tidak terdapat audio untuk stream ini",
|
||||
"audio": {
|
||||
"tips": {
|
||||
"title": "Audio harus dikeluarkan dari kamera Anda dan dikonfigurasi di go2rtc untuk stream ini."
|
||||
}
|
||||
},
|
||||
"stream": "Siaran",
|
||||
"placeholder": "Pilih stream",
|
||||
"streamMethod": {
|
||||
"label": "Metode Streaming"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"debug": {
|
||||
"boundingBox": "Batas Kotak"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -20,8 +20,43 @@
|
||||
"ask_a": "Apakah objek ini adalah sebuah<code>{{label}}</code>?",
|
||||
"ask_an": "Apakah objek ini <code>{{label}}</code>?",
|
||||
"ask_full": "Apakah ini object <code>{{untranslatedLabel}}</code> ({{translatedLabel}})?"
|
||||
},
|
||||
"state": {
|
||||
"submitted": "Terkirim"
|
||||
}
|
||||
}
|
||||
},
|
||||
"video": {
|
||||
"viewInHistory": "Lihat di Histori"
|
||||
}
|
||||
},
|
||||
"export": {
|
||||
"time": {
|
||||
"fromTimeline": "Pilih dari Linimasa",
|
||||
"lastHour_other": "{{count}} Jam Terakhir",
|
||||
"custom": "Kustom",
|
||||
"start": {
|
||||
"title": "Waktu Mulai",
|
||||
"label": "Pilih Waktu Mulai"
|
||||
},
|
||||
"end": {
|
||||
"title": "Waktu Akhir",
|
||||
"label": "Pilih Waktu Akhir"
|
||||
}
|
||||
},
|
||||
"name": {
|
||||
"placeholder": "Nama Ekspor"
|
||||
},
|
||||
"select": "Pilih",
|
||||
"export": "Ekspor",
|
||||
"selectOrExport": "Pilih atau Ekspor",
|
||||
"toast": {
|
||||
"success": "Berhasil memulai ekspor. Lihat file pada halaman ekspor."
|
||||
}
|
||||
},
|
||||
"search": {
|
||||
"saveSearch": {
|
||||
"overwrite": "{{searchName}} sudah ada. Menyimpan akan menimpa file yang sudah ada."
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -23,5 +23,35 @@
|
||||
},
|
||||
"count_one": "{{count}} Kelas",
|
||||
"count_other": "{{count}} Kelas"
|
||||
},
|
||||
"dates": {
|
||||
"selectPreset": "Pilih preset…",
|
||||
"all": {
|
||||
"title": "Semua Tanggal",
|
||||
"short": "Tanggal"
|
||||
}
|
||||
},
|
||||
"more": "Lebih Banyak",
|
||||
"reset": {
|
||||
"label": "Atur ulang filter ke default"
|
||||
},
|
||||
"timeRange": "Rentang Waktu",
|
||||
"subLabels": {
|
||||
"label": "Sublabel",
|
||||
"all": "Semua Sublabel"
|
||||
},
|
||||
"attributes": {
|
||||
"label": "Klasifikasi Atribut",
|
||||
"all": "Semua Atribut"
|
||||
},
|
||||
"score": "Skor",
|
||||
"estimatedSpeed": "Perkiraan Kecepatan {{unit}}",
|
||||
"features": {
|
||||
"label": "Fitur"
|
||||
},
|
||||
"cameras": {
|
||||
"all": {
|
||||
"short": "Kamera"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -16,6 +16,36 @@
|
||||
"streamType": {
|
||||
"title": "Tipe stream:",
|
||||
"short": "Jenis"
|
||||
},
|
||||
"bandwidth": {
|
||||
"title": "Bandwith:",
|
||||
"short": "Bandwith"
|
||||
},
|
||||
"latency": {
|
||||
"title": "Latensi:",
|
||||
"value": "{{seconds}} detik",
|
||||
"short": {
|
||||
"title": "Latensi",
|
||||
"value": "{{seconds}} detik"
|
||||
}
|
||||
},
|
||||
"totalFrames": "Total Frame:",
|
||||
"droppedFrames": {
|
||||
"title": "Frame Terbuang:",
|
||||
"short": {
|
||||
"title": "Terbuang",
|
||||
"value": "{{droppedFrames}} frame"
|
||||
}
|
||||
},
|
||||
"decodedFrames": "Decoded Frames:",
|
||||
"droppedFrameRate": "Frame Rate Terbuang:"
|
||||
},
|
||||
"toast": {
|
||||
"success": {
|
||||
"submittedFrigatePlus": "Berhasil mengirim frame ke Frigate+"
|
||||
},
|
||||
"error": {
|
||||
"submitFrigatePlusFailed": "Gagal mengirim frame ke Frigate+"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -17,5 +17,15 @@
|
||||
"goat": "Kambing",
|
||||
"sheep": "Domba",
|
||||
"bird": "Burung",
|
||||
"street_sign": "Rambu Jalan"
|
||||
"street_sign": "Rambu Jalan",
|
||||
"stop_sign": "Tanda Stop",
|
||||
"parking_meter": "Parkir Meter",
|
||||
"bench": "Kursi",
|
||||
"cow": "Sapi",
|
||||
"elephant": "Gajah",
|
||||
"bear": "Beruang",
|
||||
"zebra": "Zebra",
|
||||
"giraffe": "Jerapah",
|
||||
"hat": "Topi",
|
||||
"backpack": "Tas"
|
||||
}
|
||||
|
||||
@@ -12,5 +12,36 @@
|
||||
"addClassification": "Tambah Klasifikasi",
|
||||
"deleteModels": "Hapus Model",
|
||||
"editModel": "Ubah Model"
|
||||
},
|
||||
"tooltip": {
|
||||
"trainingInProgress": "Model dalam training",
|
||||
"noNewImages": "Tidak ada gambar untuk dilatih. Klasifikasikan gambar terlebih dahulu di dataset.",
|
||||
"noChanges": "Tidak ada perubahan dataset sejak latihan terakhir.",
|
||||
"modelNotReady": "Model tidak siap untuk dilatih"
|
||||
},
|
||||
"toast": {
|
||||
"success": {
|
||||
"deletedCategory": "Kelas dihapus",
|
||||
"deletedImage": "Image dihapus",
|
||||
"deletedModel_other": "Berhasil menghapus {{count}} model",
|
||||
"categorizedImage": "Berhasil Mengklasifikasikan Gambar",
|
||||
"trainedModel": "Berhasil melatih model.",
|
||||
"trainingModel": "Berhasil memulai pelatihan model.",
|
||||
"updatedModel": "Berhasil memperbarui konfigurasi model",
|
||||
"renamedCategory": "Berhasil mengganti nama class ke {{name}}"
|
||||
},
|
||||
"error": {
|
||||
"updateModelFailed": "Gagal melakukan perubahan pada model: {{errorMessage}}",
|
||||
"renameCategoryFailed": "Gagal merubah penamaan kelas: {{errorMessage}}",
|
||||
"deleteImageFailed": "Gagal menghapus: {{errorMessage}}",
|
||||
"deleteCategoryFailed": "Gagal menghapus kelas: {{errorMessage}}"
|
||||
}
|
||||
},
|
||||
"deleteCategory": {
|
||||
"title": "Kelas dihapus",
|
||||
"minClassesTitle": "Dilarang menghapus Kelas"
|
||||
},
|
||||
"train": {
|
||||
"titleShort": "Terkini"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -9,7 +9,11 @@
|
||||
"empty": {
|
||||
"detection": "Tidak ada deteksi untuk ditinjau",
|
||||
"alert": "Tidak ada peringatan untuk ditinjau",
|
||||
"motion": "Data gerakan tidak ditemukan"
|
||||
"motion": "Data gerakan tidak ditemukan",
|
||||
"recordingsDisabled": {
|
||||
"title": "Perekaman harus di aktifkan",
|
||||
"description": "Ulasan item hanya dapat dibuat untuk kamera jika perekaman diaktifkan untuk kamera tersebut."
|
||||
}
|
||||
},
|
||||
"timeline.aria": "Pilih timeline",
|
||||
"timeline": "Linimasa",
|
||||
@@ -24,8 +28,8 @@
|
||||
"label": "Detil",
|
||||
"noDataFound": "Tidak ada detil data untuk di review",
|
||||
"aria": "Beralih tampilan detil",
|
||||
"trackedObject_one": "objek",
|
||||
"trackedObject_other": "objek-objek",
|
||||
"trackedObject_one": "{{count}} objek",
|
||||
"trackedObject_other": "{{count}} objek",
|
||||
"noObjectDetailData": "Tidak ada data objek detil tersedia.",
|
||||
"settings": "Pengaturan Tampilan Detil",
|
||||
"alwaysExpandActive": {
|
||||
|
||||
@@ -10,12 +10,37 @@
|
||||
"finishingShortly": "Selesai sesaat lagi",
|
||||
"step": {
|
||||
"thumbnailsEmbedded": "Keluku dilampirkan ",
|
||||
"descriptionsEmbedded": "Deskripsi terlampir: "
|
||||
"descriptionsEmbedded": "Deskripsi terlampir: ",
|
||||
"trackedObjectsProcessed": "Objek yang dilacak diproses: "
|
||||
}
|
||||
},
|
||||
"downloadingModels": {
|
||||
"context": "Frigate sedang mengunduh model embedding yang diperlukan untuk mendukung fitur Pencarian Semantik. Proses ini mungkin memakan waktu beberapa menit tergantung pada kecepatan koneksi jaringan Anda.",
|
||||
"setup": {
|
||||
"visionModel": "Model vision",
|
||||
"visionModelFeatureExtractor": "Ekstraktor fitur model visi",
|
||||
"textModel": "Model teks",
|
||||
"textTokenizer": "Teks tokenizer"
|
||||
},
|
||||
"tips": {
|
||||
"context": "Anda mungkin ingin mengindeks ulang embeddings dari objek yang Anda lacak setelah model-model tersebut diunduh."
|
||||
},
|
||||
"error": "Terjadi eror. Periksa log Frigate."
|
||||
}
|
||||
},
|
||||
"details": {
|
||||
"timestamp": "Stempel waktu"
|
||||
},
|
||||
"exploreMore": "Eksplor lebih jauh objek-objek {{label}}"
|
||||
"exploreMore": "Eksplor lebih jauh objek-objek {{label}}",
|
||||
"trackedObjectDetails": "Detail Objek Terlacak",
|
||||
"type": {
|
||||
"details": "detail",
|
||||
"snapshot": "tangkapan layar",
|
||||
"thumbnail": "thumbnail",
|
||||
"video": "video",
|
||||
"tracking_details": "detail pelacakan"
|
||||
},
|
||||
"trackingDetails": {
|
||||
"title": "Detail Pelacakan"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -36,7 +36,8 @@
|
||||
"train": {
|
||||
"title": "Pengenalan Terkini",
|
||||
"aria": "Pilih pengenalan terkini",
|
||||
"empty": "Tidak ada percobaan pengenalan wajah baru-baru ini"
|
||||
"empty": "Tidak ada percobaan pengenalan wajah baru-baru ini",
|
||||
"titleShort": "Terkini"
|
||||
},
|
||||
"deleteFaceLibrary": {
|
||||
"title": "Hapus Nama",
|
||||
|
||||
@@ -16,7 +16,53 @@
|
||||
"label": "Klik kotak ini untuk menengahkan kamera",
|
||||
"enable": "Aktifkan klik untuk bergerak",
|
||||
"disable": "Non-aktifkan klik untuk bergerak"
|
||||
},
|
||||
"left": {
|
||||
"label": "Geser kamera PTZ ke kiri"
|
||||
},
|
||||
"up": {
|
||||
"label": "Geser kamera PTZ keatas"
|
||||
},
|
||||
"down": {
|
||||
"label": "Geser kamera PTZ kebawah"
|
||||
},
|
||||
"right": {
|
||||
"label": "Geser kamera PTZ ke kanan"
|
||||
}
|
||||
}
|
||||
},
|
||||
"zoom": {
|
||||
"in": {
|
||||
"label": "Perbesar kamera PTZ"
|
||||
},
|
||||
"out": {
|
||||
"label": "Perkecil kamera PTZ"
|
||||
}
|
||||
},
|
||||
"focus": {
|
||||
"in": {
|
||||
"label": "Fokus kamera PTZ kedalam"
|
||||
},
|
||||
"out": {
|
||||
"label": "Fokus kamera PTZ keluar"
|
||||
}
|
||||
},
|
||||
"frame": {
|
||||
"center": {
|
||||
"label": "Klik pada frame untuk menengahkan kamera PTZ"
|
||||
}
|
||||
},
|
||||
"presets": "Preset kamera PTZ"
|
||||
},
|
||||
"camera": {
|
||||
"enable": "Aktifkan Kamera",
|
||||
"disable": "Nonaktifkan Kamera"
|
||||
},
|
||||
"muteCameras": {
|
||||
"enable": "Bisukan Semua Kamera",
|
||||
"disable": "Bunyikan Semua Kamera"
|
||||
},
|
||||
"detect": {
|
||||
"enable": "Aktifkan Pendeteksi",
|
||||
"disable": "Nonaktifkan Pendeteksi"
|
||||
}
|
||||
}
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user