mirror of
https://github.com/blakeblackshear/frigate.git
synced 2026-02-02 01:05:20 +03:00
parent
c4a2014097
commit
f571473bf7
@ -242,4 +242,35 @@ Can be overridden at the camera level. See the [cameras configuration page](came
|
|||||||
rtmp:
|
rtmp:
|
||||||
# Optional: Enable the RTMP stream (default: True)
|
# Optional: Enable the RTMP stream (default: True)
|
||||||
enabled: True
|
enabled: True
|
||||||
|
```
|
||||||
|
|
||||||
|
## `timestamp_style`
|
||||||
|
|
||||||
|
Can be overridden at the camera level. See the [cameras configuration page](cameras.md) for more information about timestamp styling.
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
# Optional: in-feed timestamp style configuration
|
||||||
|
timestamp_style:
|
||||||
|
# Optional: Position of the timestamp (default: shown below)
|
||||||
|
# "tl" (top left), "tr" (top right), "bl" (bottom left), "br" (bottom right)
|
||||||
|
position: "tl"
|
||||||
|
# Optional: Format specifier conform to the Python package "datetime" (default: shown below)
|
||||||
|
# Additional Examples:
|
||||||
|
# german: "%d.%m.%Y %H:%M:%S"
|
||||||
|
format: "%m/%d/%Y %H:%M:%S"
|
||||||
|
# Optional: Color of font
|
||||||
|
color:
|
||||||
|
# All Required when color is specified (default: shown below)
|
||||||
|
red: 255
|
||||||
|
green: 255
|
||||||
|
blue: 255
|
||||||
|
# Optional: Scale factor for font (default: shown below)
|
||||||
|
scale: 1.0
|
||||||
|
# Optional: Line thickness of font (default: shown below)
|
||||||
|
thickness: 2
|
||||||
|
# Optional: Effect of lettering (default: shown below)
|
||||||
|
# None (No effect),
|
||||||
|
# "solid" (solid background in inverse color of font)
|
||||||
|
# "shadow" (shadow for font)
|
||||||
|
effect: None
|
||||||
```
|
```
|
||||||
@ -675,6 +675,9 @@ class FrigateConfig(BaseModel):
|
|||||||
default_factory=DetectConfig, title="Global object tracking configuration."
|
default_factory=DetectConfig, title="Global object tracking configuration."
|
||||||
)
|
)
|
||||||
cameras: Dict[str, CameraConfig] = Field(title="Camera configuration.")
|
cameras: Dict[str, CameraConfig] = Field(title="Camera configuration.")
|
||||||
|
timestamp_style: TimestampStyleConfig = Field(
|
||||||
|
default_factory=TimestampStyleConfig, title="Global timestamp style configuration."
|
||||||
|
)
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def runtime_config(self) -> FrigateConfig:
|
def runtime_config(self) -> FrigateConfig:
|
||||||
@ -695,6 +698,7 @@ class FrigateConfig(BaseModel):
|
|||||||
"motion": ...,
|
"motion": ...,
|
||||||
"detect": ...,
|
"detect": ...,
|
||||||
"ffmpeg": ...,
|
"ffmpeg": ...,
|
||||||
|
"timestamp_style": ...,
|
||||||
},
|
},
|
||||||
exclude_unset=True,
|
exclude_unset=True,
|
||||||
)
|
)
|
||||||
|
|||||||
@ -958,6 +958,81 @@ class TestConfig(unittest.TestCase):
|
|||||||
runtime_config = frigate_config.runtime_config
|
runtime_config = frigate_config.runtime_config
|
||||||
assert runtime_config.cameras["back"].rtmp.enabled
|
assert runtime_config.cameras["back"].rtmp.enabled
|
||||||
|
|
||||||
|
def test_global_timestamp_style(self):
|
||||||
|
|
||||||
|
config = {
|
||||||
|
"mqtt": {"host": "mqtt"},
|
||||||
|
"timestamp_style": {"position": "bl", "scale": 1.5},
|
||||||
|
"cameras": {
|
||||||
|
"back": {
|
||||||
|
"ffmpeg": {
|
||||||
|
"inputs": [
|
||||||
|
{
|
||||||
|
"path": "rtsp://10.0.0.1:554/video",
|
||||||
|
"roles": ["detect"],
|
||||||
|
},
|
||||||
|
]
|
||||||
|
},
|
||||||
|
}
|
||||||
|
},
|
||||||
|
}
|
||||||
|
frigate_config = FrigateConfig(**config)
|
||||||
|
assert config == frigate_config.dict(exclude_unset=True)
|
||||||
|
|
||||||
|
runtime_config = frigate_config.runtime_config
|
||||||
|
assert runtime_config.cameras["back"].timestamp_style.position == "bl"
|
||||||
|
assert runtime_config.cameras["back"].timestamp_style.scale == 1.5
|
||||||
|
|
||||||
|
def test_default_timestamp_style(self):
|
||||||
|
|
||||||
|
config = {
|
||||||
|
"mqtt": {"host": "mqtt"},
|
||||||
|
"cameras": {
|
||||||
|
"back": {
|
||||||
|
"ffmpeg": {
|
||||||
|
"inputs": [
|
||||||
|
{
|
||||||
|
"path": "rtsp://10.0.0.1:554/video",
|
||||||
|
"roles": ["detect"],
|
||||||
|
},
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
}
|
||||||
|
frigate_config = FrigateConfig(**config)
|
||||||
|
assert config == frigate_config.dict(exclude_unset=True)
|
||||||
|
|
||||||
|
runtime_config = frigate_config.runtime_config
|
||||||
|
assert runtime_config.cameras["back"].timestamp_style.position == "tl"
|
||||||
|
assert runtime_config.cameras["back"].timestamp_style.scale == 1.0
|
||||||
|
|
||||||
|
def test_global_timestamp_style_merge(self):
|
||||||
|
|
||||||
|
config = {
|
||||||
|
"mqtt": {"host": "mqtt"},
|
||||||
|
"rtmp": {"enabled": False},
|
||||||
|
"timestamp_style": {"position": "br", "scale": 2.0},
|
||||||
|
"cameras": {
|
||||||
|
"back": {
|
||||||
|
"ffmpeg": {
|
||||||
|
"inputs": [
|
||||||
|
{
|
||||||
|
"path": "rtsp://10.0.0.1:554/video",
|
||||||
|
"roles": ["detect"],
|
||||||
|
},
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"timestamp_style": {"position": "bl", "scale": 1.5},
|
||||||
|
}
|
||||||
|
},
|
||||||
|
}
|
||||||
|
frigate_config = FrigateConfig(**config)
|
||||||
|
assert config == frigate_config.dict(exclude_unset=True)
|
||||||
|
|
||||||
|
runtime_config = frigate_config.runtime_config
|
||||||
|
assert runtime_config.cameras["back"].timestamp_style.position == "bl"
|
||||||
|
assert runtime_config.cameras["back"].timestamp_style.scale == 1.5
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
unittest.main(verbosity=2)
|
unittest.main(verbosity=2)
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user