add bas64 encoded thumbnail to the database

This commit is contained in:
Blake Blackshear 2020-11-15 08:50:49 -06:00
parent 946d655cee
commit 1b5b02d286
3 changed files with 8 additions and 4 deletions

View File

@ -180,7 +180,8 @@ class EventProcessor(threading.Thread):
end_time=event_data['end_time'], end_time=event_data['end_time'],
top_score=event_data['top_score'], top_score=event_data['top_score'],
false_positive=event_data['false_positive'], false_positive=event_data['false_positive'],
zones=list(event_data['entered_zones']) zones=list(event_data['entered_zones']),
thumbnail=event_data['thumbnail']
) )
if len(self.cached_clips) > 0 and not event_data['false_positive']: if len(self.cached_clips) > 0 and not event_data['false_positive']:

View File

@ -11,3 +11,4 @@ class Event(Model):
top_score = FloatField() top_score = FloatField()
false_positive = BooleanField() false_positive = BooleanField()
zones = JSONField() zones = JSONField()
thumbnail = TextField()

View File

@ -1,4 +1,5 @@
import copy import copy
import base64
import datetime import datetime
import hashlib import hashlib
import itertools import itertools
@ -138,7 +139,7 @@ class TrackedObject():
self.current_zones = current_zones self.current_zones = current_zones
def to_dict(self): def to_dict(self, include_thumbnail: bool = False):
return { return {
'id': self.obj_data['id'], 'id': self.obj_data['id'],
'camera': self.camera, 'camera': self.camera,
@ -153,7 +154,8 @@ class TrackedObject():
'area': self.obj_data['area'], 'area': self.obj_data['area'],
'region': self.obj_data['region'], 'region': self.obj_data['region'],
'current_zones': self.current_zones.copy(), 'current_zones': self.current_zones.copy(),
'entered_zones': list(self.entered_zones).copy() 'entered_zones': list(self.entered_zones).copy(),
'thumbnail': base64.b64encode(self.get_jpg_bytes()).decode('utf-8') if include_thumbnail else None
} }
def get_jpg_bytes(self): def get_jpg_bytes(self):
@ -405,7 +407,7 @@ class TrackedObjectProcessor(threading.Thread):
thumbnail_file_name = f"{camera}-{obj.obj_data['id']}.jpg" thumbnail_file_name = f"{camera}-{obj.obj_data['id']}.jpg"
with open(os.path.join(self.config.save_clips.clips_dir, thumbnail_file_name), 'wb') as f: with open(os.path.join(self.config.save_clips.clips_dir, thumbnail_file_name), 'wb') as f:
f.write(obj.get_jpg_bytes()) f.write(obj.get_jpg_bytes())
self.event_queue.put(('end', camera, obj.to_dict())) self.event_queue.put(('end', camera, obj.to_dict(include_thumbnail=True)))
def snapshot(camera, obj: TrackedObject): def snapshot(camera, obj: TrackedObject):
self.client.publish(f"{self.topic_prefix}/{camera}/{obj.obj_data['label']}/snapshot", obj.get_jpg_bytes(), retain=True) self.client.publish(f"{self.topic_prefix}/{camera}/{obj.obj_data['label']}/snapshot", obj.get_jpg_bytes(), retain=True)