mirror of
				https://github.com/blakeblackshear/frigate.git
				synced 2025-10-27 10:52:11 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			126 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			126 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
from peewee import (
 | 
						|
    BooleanField,
 | 
						|
    CharField,
 | 
						|
    DateTimeField,
 | 
						|
    FloatField,
 | 
						|
    IntegerField,
 | 
						|
    Model,
 | 
						|
    TextField,
 | 
						|
)
 | 
						|
from playhouse.sqlite_ext import JSONField
 | 
						|
 | 
						|
 | 
						|
class Event(Model):  # type: ignore[misc]
 | 
						|
    id = CharField(null=False, primary_key=True, max_length=30)
 | 
						|
    label = CharField(index=True, max_length=20)
 | 
						|
    sub_label = CharField(max_length=100, null=True)
 | 
						|
    camera = CharField(index=True, max_length=20)
 | 
						|
    start_time = DateTimeField()
 | 
						|
    end_time = DateTimeField()
 | 
						|
    top_score = (
 | 
						|
        FloatField()
 | 
						|
    )  # TODO remove when columns can be dropped without rebuilding table
 | 
						|
    score = (
 | 
						|
        FloatField()
 | 
						|
    )  # TODO remove when columns can be dropped without rebuilding table
 | 
						|
    false_positive = BooleanField()
 | 
						|
    zones = JSONField()
 | 
						|
    thumbnail = TextField()
 | 
						|
    has_clip = BooleanField(default=True)
 | 
						|
    has_snapshot = BooleanField(default=True)
 | 
						|
    region = (
 | 
						|
        JSONField()
 | 
						|
    )  # TODO remove when columns can be dropped without rebuilding table
 | 
						|
    box = (
 | 
						|
        JSONField()
 | 
						|
    )  # TODO remove when columns can be dropped without rebuilding table
 | 
						|
    area = (
 | 
						|
        IntegerField()
 | 
						|
    )  # TODO remove when columns can be dropped without rebuilding table
 | 
						|
    retain_indefinitely = BooleanField(default=False)
 | 
						|
    ratio = FloatField(
 | 
						|
        default=1.0
 | 
						|
    )  # TODO remove when columns can be dropped without rebuilding table
 | 
						|
    plus_id = CharField(max_length=30)
 | 
						|
    model_hash = CharField(max_length=32)
 | 
						|
    detector_type = CharField(max_length=32)
 | 
						|
    model_type = CharField(max_length=32)
 | 
						|
    data = JSONField()  # ex: tracked object box, region, etc.
 | 
						|
 | 
						|
 | 
						|
class Timeline(Model):  # type: ignore[misc]
 | 
						|
    timestamp = DateTimeField()
 | 
						|
    camera = CharField(index=True, max_length=20)
 | 
						|
    source = CharField(index=True, max_length=20)  # ex: tracked object, audio, external
 | 
						|
    source_id = CharField(index=True, max_length=30)
 | 
						|
    class_type = CharField(max_length=50)  # ex: entered_zone, audio_heard
 | 
						|
    data = JSONField()  # ex: tracked object id, region, box, etc.
 | 
						|
 | 
						|
 | 
						|
class Regions(Model):  # type: ignore[misc]
 | 
						|
    camera = CharField(null=False, primary_key=True, max_length=20)
 | 
						|
    grid = JSONField()  # json blob of grid
 | 
						|
    last_update = DateTimeField()
 | 
						|
 | 
						|
 | 
						|
class Recordings(Model):  # type: ignore[misc]
 | 
						|
    id = CharField(null=False, primary_key=True, max_length=30)
 | 
						|
    camera = CharField(index=True, max_length=20)
 | 
						|
    path = CharField(unique=True)
 | 
						|
    start_time = DateTimeField()
 | 
						|
    end_time = DateTimeField()
 | 
						|
    duration = FloatField()
 | 
						|
    motion = IntegerField(null=True)
 | 
						|
    objects = IntegerField(null=True)
 | 
						|
    dBFS = IntegerField(null=True)
 | 
						|
    segment_size = FloatField(default=0)  # this should be stored as MB
 | 
						|
    regions = IntegerField(null=True)
 | 
						|
 | 
						|
 | 
						|
class Export(Model):  # type: ignore[misc]
 | 
						|
    id = CharField(null=False, primary_key=True, max_length=30)
 | 
						|
    camera = CharField(index=True, max_length=20)
 | 
						|
    name = CharField(index=True, max_length=100)
 | 
						|
    date = DateTimeField()
 | 
						|
    video_path = CharField(unique=True)
 | 
						|
    thumb_path = CharField(unique=True)
 | 
						|
    in_progress = BooleanField()
 | 
						|
 | 
						|
 | 
						|
class ReviewSegment(Model):  # type: ignore[misc]
 | 
						|
    id = CharField(null=False, primary_key=True, max_length=30)
 | 
						|
    camera = CharField(index=True, max_length=20)
 | 
						|
    start_time = DateTimeField()
 | 
						|
    end_time = DateTimeField()
 | 
						|
    has_been_reviewed = BooleanField(default=False)
 | 
						|
    severity = CharField(max_length=30)  # alert, detection
 | 
						|
    thumb_path = CharField(unique=True)
 | 
						|
    data = JSONField()  # additional data about detection like list of labels, zone, areas of significant motion
 | 
						|
 | 
						|
 | 
						|
class Previews(Model):  # type: ignore[misc]
 | 
						|
    id = CharField(null=False, primary_key=True, max_length=30)
 | 
						|
    camera = CharField(index=True, max_length=20)
 | 
						|
    path = CharField(unique=True)
 | 
						|
    start_time = DateTimeField()
 | 
						|
    end_time = DateTimeField()
 | 
						|
    duration = FloatField()
 | 
						|
 | 
						|
 | 
						|
# Used for temporary table in record/cleanup.py
 | 
						|
class RecordingsToDelete(Model):  # type: ignore[misc]
 | 
						|
    id = CharField(null=False, primary_key=False, max_length=30)
 | 
						|
 | 
						|
    class Meta:
 | 
						|
        temporary = True
 | 
						|
 | 
						|
 | 
						|
class User(Model):  # type: ignore[misc]
 | 
						|
    username = CharField(null=False, primary_key=True, max_length=30)
 | 
						|
    role = CharField(
 | 
						|
        max_length=20,
 | 
						|
        default="admin",
 | 
						|
    )
 | 
						|
    password_hash = CharField(null=False, max_length=120)
 | 
						|
    notification_tokens = JSONField()
 |