mirror of
https://github.com/blakeblackshear/frigate.git
synced 2025-02-18 00:16:41 +01:00
basic database model and api endpoint
This commit is contained in:
parent
422cd52049
commit
be1fcbbdf8
@ -17,6 +17,10 @@ import numpy as np
|
|||||||
import logging
|
import logging
|
||||||
from flask import Flask, Response, make_response, jsonify, request
|
from flask import Flask, Response, make_response, jsonify, request
|
||||||
import paho.mqtt.client as mqtt
|
import paho.mqtt.client as mqtt
|
||||||
|
from peewee import *
|
||||||
|
from playhouse.shortcuts import model_to_dict
|
||||||
|
from playhouse.sqlite_ext import *
|
||||||
|
from playhouse.flask_utils import FlaskDB
|
||||||
|
|
||||||
from frigate.video import capture_camera, track_camera, get_ffmpeg_input, get_frame_shape, CameraCapture, start_or_restart_ffmpeg
|
from frigate.video import capture_camera, track_camera, get_ffmpeg_input, get_frame_shape, CameraCapture, start_or_restart_ffmpeg
|
||||||
from frigate.object_processing import TrackedObjectProcessor
|
from frigate.object_processing import TrackedObjectProcessor
|
||||||
@ -43,6 +47,8 @@ if not os.path.exists(CACHE_DIR) and not os.path.islink(CACHE_DIR):
|
|||||||
if not os.path.exists(CLIPS_DIR) and not os.path.islink(CLIPS_DIR):
|
if not os.path.exists(CLIPS_DIR) and not os.path.islink(CLIPS_DIR):
|
||||||
os.makedirs(CLIPS_DIR)
|
os.makedirs(CLIPS_DIR)
|
||||||
|
|
||||||
|
DATABASE = f"sqliteext:///{os.path.join(CLIPS_DIR, 'frigate.db')}"
|
||||||
|
|
||||||
MQTT_HOST = CONFIG['mqtt']['host']
|
MQTT_HOST = CONFIG['mqtt']['host']
|
||||||
MQTT_PORT = CONFIG.get('mqtt', {}).get('port', 1883)
|
MQTT_PORT = CONFIG.get('mqtt', {}).get('port', 1883)
|
||||||
MQTT_TOPIC_PREFIX = CONFIG.get('mqtt', {}).get('topic_prefix', 'frigate')
|
MQTT_TOPIC_PREFIX = CONFIG.get('mqtt', {}).get('topic_prefix', 'frigate')
|
||||||
@ -78,6 +84,27 @@ GLOBAL_OBJECT_CONFIG = CONFIG.get('objects', {})
|
|||||||
WEB_PORT = CONFIG.get('web_port', 5000)
|
WEB_PORT = CONFIG.get('web_port', 5000)
|
||||||
DETECTORS = CONFIG.get('detectors', {'coral': {'type': 'edgetpu', 'device': 'usb'}})
|
DETECTORS = CONFIG.get('detectors', {'coral': {'type': 'edgetpu', 'device': 'usb'}})
|
||||||
|
|
||||||
|
# create a flask app
|
||||||
|
app = Flask(__name__)
|
||||||
|
app.config.from_object(__name__)
|
||||||
|
flask_db = FlaskDB(app)
|
||||||
|
db = flask_db.database
|
||||||
|
log = logging.getLogger('werkzeug')
|
||||||
|
log.setLevel(logging.ERROR)
|
||||||
|
|
||||||
|
class Event(flask_db.Model):
|
||||||
|
id = CharField(null=False, primary_key=True, max_length=30)
|
||||||
|
label = CharField(index=True, max_length=20)
|
||||||
|
camera = CharField(index=True, max_length=20)
|
||||||
|
start_time = DateTimeField(),
|
||||||
|
end_time = DateTimeField(),
|
||||||
|
top_score = FloatField(),
|
||||||
|
false_positive = BooleanField(),
|
||||||
|
zones = JSONField()
|
||||||
|
|
||||||
|
def init_db():
|
||||||
|
db.create_tables([Event], safe=True)
|
||||||
|
|
||||||
class FrigateWatchdog(threading.Thread):
|
class FrigateWatchdog(threading.Thread):
|
||||||
def __init__(self, camera_processes, config, detectors, detection_queue, out_events, tracked_objects_queue, stop_event):
|
def __init__(self, camera_processes, config, detectors, detection_queue, out_events, tracked_objects_queue, stop_event):
|
||||||
threading.Thread.__init__(self)
|
threading.Thread.__init__(self)
|
||||||
@ -302,14 +329,9 @@ def main():
|
|||||||
signal.signal(signal.SIGTERM, receiveSignal)
|
signal.signal(signal.SIGTERM, receiveSignal)
|
||||||
signal.signal(signal.SIGINT, receiveSignal)
|
signal.signal(signal.SIGINT, receiveSignal)
|
||||||
|
|
||||||
# create a flask app that encodes frames a mjpeg on demand
|
|
||||||
app = Flask(__name__)
|
|
||||||
log = logging.getLogger('werkzeug')
|
|
||||||
log.setLevel(logging.ERROR)
|
|
||||||
|
|
||||||
@app.route('/')
|
@app.route('/')
|
||||||
def ishealthy():
|
def ishealthy():
|
||||||
# return a healh
|
# return a health
|
||||||
return "Frigate is running. Alive and healthy!"
|
return "Frigate is running. Alive and healthy!"
|
||||||
|
|
||||||
@app.route('/debug/stack')
|
@app.route('/debug/stack')
|
||||||
@ -329,6 +351,13 @@ def main():
|
|||||||
os.kill(pid, signal.SIGUSR1)
|
os.kill(pid, signal.SIGUSR1)
|
||||||
return "check logs", 200
|
return "check logs", 200
|
||||||
|
|
||||||
|
@app.route('/events')
|
||||||
|
def events():
|
||||||
|
events = Event.select().dicts()
|
||||||
|
# if events is None:
|
||||||
|
# return jsonify([])
|
||||||
|
return jsonify([model_to_dict(e) for e in events])
|
||||||
|
|
||||||
@app.route('/debug/stats')
|
@app.route('/debug/stats')
|
||||||
def stats():
|
def stats():
|
||||||
stats = {}
|
stats = {}
|
||||||
@ -438,4 +467,5 @@ def main():
|
|||||||
object_processor.join()
|
object_processor.join()
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
|
init_db()
|
||||||
main()
|
main()
|
||||||
|
Loading…
Reference in New Issue
Block a user