From 48f13a5f366853d4d995a38f7f59777d1ea970d2 Mon Sep 17 00:00:00 2001 From: Nick Mowen Date: Thu, 18 May 2023 11:20:14 -0600 Subject: [PATCH] Store full frame for thumbnail --- frigate/events/external.py | 22 +++++++--------------- frigate/images/external-event.png | Bin 2167 -> 0 bytes 2 files changed, 7 insertions(+), 15 deletions(-) delete mode 100644 frigate/images/external-event.png diff --git a/frigate/events/external.py b/frigate/events/external.py index 87befe559..c3177185f 100644 --- a/frigate/events/external.py +++ b/frigate/events/external.py @@ -34,6 +34,7 @@ class ExternalEventProcessor: sub_label: Optional[str], duration: Optional[int], include_recording: bool, + draw: dict[str, any], snapshot_frame: any, ) -> str: now = datetime.datetime.now().timestamp() @@ -43,10 +44,7 @@ class ExternalEventProcessor: rand_id = "".join(random.choices(string.ascii_lowercase + string.digits, k=6)) event_id = f"{now}-{rand_id}" - self._write_snapshots(camera_config, label, event_id, snapshot_frame) - - if not self.default_thumbnail: - self._calculate_thumbnail_bytes() + thumbnail = self._write_images(camera_config, label, event_id, draw, snapshot_frame) self.queue.put( ( @@ -60,7 +58,7 @@ class ExternalEventProcessor: "camera": camera, "start_time": now, "end_time": now + duration if duration is not None else None, - "thumbnail": self.default_thumbnail, + "thumbnail": thumbnail, "has_clip": camera_config.record.enabled and include_recording, "has_snapshot": True, }, @@ -76,22 +74,14 @@ class ExternalEventProcessor: (EventTypeEnum.api, "end", None, {"id": event_id, "end_time": now}) ) - def _calculate_thumbnail_bytes(self) -> None: - thumbnail = glob.glob("/opt/frigate/frigate/images/external-event.png") - - if len(thumbnail) > 0: - with open("/opt/frigate/frigate/images/external-event.png", "rb") as img: - img_bytes = img.read() - self.default_thumbnail = base64.b64encode(img_bytes).decode("utf-8") - - def _write_snapshots( + def _write_images( self, camera_config: CameraConfig, label: str, event_id: str, draw: dict[str, any], img_bytes: any, - ) -> None: + ) -> str: # write clean snapshot if enabled if camera_config.snapshots.clean_copy: ret, png = cv2.imencode(".png", img_bytes) @@ -132,3 +122,5 @@ class ExternalEventProcessor: "wb", ) as j: j.write(jpg.tobytes()) + + return base64.b64encode(jpg.tobytes()).decode("utf-8") diff --git a/frigate/images/external-event.png b/frigate/images/external-event.png deleted file mode 100644 index f2006d3773d8c597b1448aa5657fd6985014a646..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2167 zcmbtVc|4ox7XD%vB5f@{gvw;5Xh~u#l_pfBL~X%nwYQ6%Ah9GB)l`kDQfqTjyQ21r zwm(5=GRDw0T5HRUind(k>a8d(Gm+NZq&0f){qxTI{myrubH3+1=RNNq@0UUJaE5?& z!2ke2TnKn?iT9V9l7i$tTSPw~aUiO<^I?EBq_-#uQbYV)LfzegeG;q$$b)tPvQmoV z0YJKd{AUaRM?tV{>ZBNRT3b##W^YQ(nXM%qXmeXzTeO)4+QI@UVIZmJDYSqDB!&9z7m+`8@FCQo zI8qFa6itCkbpryU&(UxQgtXE2`m#?NDfDY63UzBN$$)6-7qmIb485%_DaA^&7|%FT zh@`Vr-_9KSnfYJ2tv*<^wE2H*=F6m?vyxHmz*zM5vDtxj&dewRfP#?=-r@TM&{FB? za6Mm*^(d*q4$b$=PRWMwnZ{~PoS9s+uW__r5N?a>;XZg5Z~eqdMQlx9oP ziiG>{(DI|b_AL!m4(2ch9X5y$qu^lf?#IM(4ZVcfZwdSrv~#ke$~~~1>Fy525oZOup9p4 z6V`lf*J68SbJ8NK8sgqmm1Hxc=CIcBz7EL;DcQDFsX2^q*d3tYT7S@9HwmgK;u~fK zHMNYczTpH6kYRwbfjn!sQs(}V+(+@%1;7IJ!E{V2?d;B$|-K&-y{{ei%FIJEi8} zaM)Ps(-qVcXD@YsmCiknx*|lBDc})XzbXUC)4#JKjzVk{w6>_dhOP*Yap?_{CGC*p zRA_qZ#)nst>82O|RkKX+6)W@@ET9re)H!=Yytb{`kL^2lM&1E-{!(!j<@1RR_3(pP zP4NcVmr-W9F(D+jIemTqBhJRL-3N^TKx`T0q{C3oXEAYsz0XUYvd{Gz(gv($PiqV@ zoi09Z&pmTF@wlelg1cr>1`GEsWY zn@;6z2tW!)7&DFl2Kaf$AgXn2pha@9INgZV)KUKtu z?U{WQdVY%2_pxK=VrjmWD?@yn0IzW|zc|(0HBq$JGhIv~Tqu``&sVic5&_ZB`rE@{ zvuUak{*7eWR~_wtf7)V{-lq@FUZf$qeE6+yw`P#YzWTe$&7N=%t#aDJXi~=9?*nBM z^kY*BJslz-R~nm}WYU)ojvsl0+^+snOH>UvEtUHgsZj=MFA)Dm|2Bg%)R^0YYhmK)*W zeDC?<>RvP2`y)*I6>wf&wsSeIvWa!({NqlYnydd1Pp|fG2%_K*r8`2O6%N;PL?GQ9 zUd`?S+r-7ovu_BiT~x<>?o}Cvqhj=+g8Y3OD~cLn>JN8W7b+Jr>pBi)NA{brnkpmi zF?K9AXq1}SS6^k>i)2C*FtV@G%4H*_xJQH0)(8C@;H0e~GKNSNmrg^k#r;tLtfX@0`LkyG)JMQct7A zOA#qQcAZMas5CWSd8|F*GoxHg>;evX5 yF<5CSCEc{bZFx!jn7wlSFI=wD+gYFR>g;{Bnj)JK)3?&Uugeh+JnOK3%D({tkaipZ