fix rabbit consumer

This commit is contained in:
Alex Bezdieniezhnykh
2025-03-07 14:33:02 +02:00
parent 4e8c67995a
commit edf685fabc
3 changed files with 101 additions and 58 deletions
+49 -19
View File
@@ -1,6 +1,8 @@
import datetime
import os
import msgpack
import json
import datetime
class Detection:
@@ -17,21 +19,49 @@ class Detection:
return f'{self.cls}: {self.x:.2f} {self.y:.2f} {self.w:.2f} {self.h:.2f}, prob: {(self.confidence * 100):.1f}%'
class AnnotationCreatedMessage:
class AnnotationCreatedMessageNarrow:
def __init__(self, msgpack_bytes):
unpacked_data = msgpack.unpackb(msgpack_bytes)
self.createdDate = unpacked_data.get(0)
unpacked_data = msgpack.unpackb(msgpack_bytes, strict_map_key=False)
self.name = unpacked_data.get(1)
self.originalMediaName = unpacked_data.get(2)
self.time = unpacked_data.get(3)
self.imageExtension = unpacked_data.get(4)
detections_json_str = unpacked_data.get(5)
self.createdEmail = unpacked_data.get(2)
class AnnotationCreatedMessage:
last_offset = None
def __init__(self, msgpack_bytes):
unpacked_data = self.read_rabbit(msgpack_bytes)
ts = unpacked_data[0]
self.createdDate = datetime.datetime.utcfromtimestamp(ts.seconds) + datetime.timedelta(microseconds=ts.nanoseconds/1000)
self.name = unpacked_data[1]
self.originalMediaName = unpacked_data[2]
self.time = datetime.timedelta(microseconds=unpacked_data[3]/10)
self.imageExtension = unpacked_data[4]
detections_json_str = unpacked_data[5]
self.detections = self._parse_detections(detections_json_str)
self.image = unpacked_data.get(6)
self.createdRole = unpacked_data.get(7)
self.createdEmail = unpacked_data.get(8)
self.source = unpacked_data.get(9)
self.status = unpacked_data.get(10)
self.image = unpacked_data[6]
self.createdRole = unpacked_data[7]
self.createdEmail = unpacked_data[8]
self.source = unpacked_data[9]
self.status = unpacked_data[10]
@staticmethod
def read_rabbit(message_bytes):
if AnnotationCreatedMessage.last_offset is not None:
try:
unpacked_data = msgpack.unpackb(message_bytes[AnnotationCreatedMessage.last_offset:], raw=False, strict_map_key=False)
return unpacked_data
except Exception:
pass
for offset in range(3, 15):
try:
unpacked_data = msgpack.unpackb(message_bytes[offset:], raw=False, strict_map_key=False)
AnnotationCreatedMessage.last_offset = offset
return unpacked_data
except Exception:
pass
raise Exception(f'Cannot read rabbit message! Bytes: {message_bytes}')
def __str__(self):
if self.detections:
@@ -46,13 +76,13 @@ class AnnotationCreatedMessage:
if detections_json_str:
detections_list = json.loads(detections_json_str)
return [Detection(
d.get('AnnotationName'),
d.get('ClassNumber'),
d.get('CenterX'),
d.get('CenterY'),
d.get('Height'),
d.get('Width'),
d.get('Probability')
d.get('an'),
d.get('cl'),
d.get('x'),
d.get('y'),
d.get('w'),
d.get('h'),
d.get('p')
) for d in detections_list]
return []