forked from Github/frigate
Compare commits
4 Commits
v0.8.0-bet
...
v0.8.0-bet
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
2bc8736fd9 | ||
|
|
e9b3b09cc2 | ||
|
|
ca337c32b4 | ||
|
|
24b8bd7c85 |
@@ -871,6 +871,9 @@ Returns data for a single event.
|
|||||||
### `/events/<id>/snapshot.jpg`
|
### `/events/<id>/snapshot.jpg`
|
||||||
Returns a snapshot for the event id optimized for notifications. Works while the event is in progress and after completion. Passing `?format=android` will convert the thumbnail to 2:1 aspect ratio.
|
Returns a snapshot for the event id optimized for notifications. Works while the event is in progress and after completion. Passing `?format=android` will convert the thumbnail to 2:1 aspect ratio.
|
||||||
|
|
||||||
|
### `/clips/<camera>-<id>.mp4`
|
||||||
|
Video clip for the given camera and event id.
|
||||||
|
|
||||||
[Back to top](#documentation)
|
[Back to top](#documentation)
|
||||||
|
|
||||||
## MQTT Topics
|
## MQTT Topics
|
||||||
|
|||||||
@@ -38,13 +38,6 @@ class FrigateApp():
|
|||||||
self.camera_metrics = {}
|
self.camera_metrics = {}
|
||||||
|
|
||||||
def ensure_dirs(self):
|
def ensure_dirs(self):
|
||||||
tmpfs_size = self.config.save_clips.tmpfs_cache_size
|
|
||||||
if tmpfs_size:
|
|
||||||
logger.info(f"Creating tmpfs of size {tmpfs_size}")
|
|
||||||
rc = os.system(f"mount -t tmpfs -o size={tmpfs_size} tmpfs {CACHE_DIR}")
|
|
||||||
if rc != 0:
|
|
||||||
logger.error(f"Failed to create tmpfs, error code: {rc}")
|
|
||||||
|
|
||||||
for d in [RECORD_DIR, CLIPS_DIR, CACHE_DIR]:
|
for d in [RECORD_DIR, CLIPS_DIR, CACHE_DIR]:
|
||||||
if not os.path.exists(d) and not os.path.islink(d):
|
if not os.path.exists(d) and not os.path.islink(d):
|
||||||
logger.info(f"Creating directory: {d}")
|
logger.info(f"Creating directory: {d}")
|
||||||
@@ -52,6 +45,13 @@ class FrigateApp():
|
|||||||
else:
|
else:
|
||||||
logger.debug(f"Skipping directory: {d}")
|
logger.debug(f"Skipping directory: {d}")
|
||||||
|
|
||||||
|
tmpfs_size = self.config.save_clips.tmpfs_cache_size
|
||||||
|
if tmpfs_size:
|
||||||
|
logger.info(f"Creating tmpfs of size {tmpfs_size}")
|
||||||
|
rc = os.system(f"mount -t tmpfs -o size={tmpfs_size} tmpfs {CACHE_DIR}")
|
||||||
|
if rc != 0:
|
||||||
|
logger.error(f"Failed to create tmpfs, error code: {rc}")
|
||||||
|
|
||||||
def init_logger(self):
|
def init_logger(self):
|
||||||
self.log_process = mp.Process(target=log_process, args=(self.log_queue,), name='log_process')
|
self.log_process = mp.Process(target=log_process, args=(self.log_queue,), name='log_process')
|
||||||
self.log_process.daemon = True
|
self.log_process.daemon = True
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
import base64
|
import base64
|
||||||
import json
|
import json
|
||||||
|
import logging
|
||||||
import os
|
import os
|
||||||
from typing import Dict
|
from typing import Dict
|
||||||
|
|
||||||
@@ -11,6 +12,8 @@ import yaml
|
|||||||
|
|
||||||
from frigate.const import RECORD_DIR, CLIPS_DIR, CACHE_DIR
|
from frigate.const import RECORD_DIR, CLIPS_DIR, CACHE_DIR
|
||||||
|
|
||||||
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
DETECTORS_SCHEMA = vol.Schema(
|
DETECTORS_SCHEMA = vol.Schema(
|
||||||
{
|
{
|
||||||
vol.Required(str): {
|
vol.Required(str): {
|
||||||
@@ -743,7 +746,9 @@ class CameraConfig():
|
|||||||
cv2.fillPoly(mask_img, pts=[contour], color=(0))
|
cv2.fillPoly(mask_img, pts=[contour], color=(0))
|
||||||
else:
|
else:
|
||||||
mask_file = cv2.imread(f"/config/{mask}", cv2.IMREAD_GRAYSCALE)
|
mask_file = cv2.imread(f"/config/{mask}", cv2.IMREAD_GRAYSCALE)
|
||||||
if not mask_file.size == 0:
|
if mask_file is None or mask_file.size == 0:
|
||||||
|
logger.warning(f"Could not read mask file {mask}")
|
||||||
|
else:
|
||||||
mask_img[np.where(mask_file==[0])] = [0]
|
mask_img[np.where(mask_file==[0])] = [0]
|
||||||
|
|
||||||
def _get_ffmpeg_cmd(self, ffmpeg_input):
|
def _get_ffmpeg_cmd(self, ffmpeg_input):
|
||||||
|
|||||||
@@ -98,9 +98,9 @@ class RecordingMaintainer(threading.Thread):
|
|||||||
delete_before[name] = datetime.datetime.now().timestamp() - SECONDS_IN_DAY*camera.record.retain_days
|
delete_before[name] = datetime.datetime.now().timestamp() - SECONDS_IN_DAY*camera.record.retain_days
|
||||||
|
|
||||||
for p in Path('/media/frigate/recordings').rglob("*.mp4"):
|
for p in Path('/media/frigate/recordings').rglob("*.mp4"):
|
||||||
if not p.parent in delete_before:
|
if not p.parent.name in delete_before:
|
||||||
continue
|
continue
|
||||||
if p.stat().st_mtime < delete_before[p.parent]:
|
if p.stat().st_mtime < delete_before[p.parent.name]:
|
||||||
p.unlink(missing_ok=True)
|
p.unlink(missing_ok=True)
|
||||||
|
|
||||||
def run(self):
|
def run(self):
|
||||||
|
|||||||
Reference in New Issue
Block a user