From 503678df16d0192421dad0f6ddd1df770873ad22 Mon Sep 17 00:00:00 2001
From: wu_xinjun <bent20140204@outlook.com>
Date: 星期四, 16 六月 2022 10:34:53 +0800
Subject: [PATCH] dust cleaner installed!
---
src/engine/devices.py | 181 +++++++++++++++++++++++----------------------
1 files changed, 92 insertions(+), 89 deletions(-)
diff --git a/src/engine/devices.py b/src/engine/devices.py
index 29f4340..07f5d32 100644
--- a/src/engine/devices.py
+++ b/src/engine/devices.py
@@ -14,7 +14,11 @@
# sys.path.insert(0, src_path)
from ..protos import aerial_pb2 as pb
+from .DustCleaner import DustCleaner
+from .MessageThreads import send_logs_tool, send_images_tool
+
+######################################### CAMERAS ############################################
class cameraController(object):
def __init__(self,
@@ -66,45 +70,15 @@
def _generate_msg(self,logs:List[str],images:List):
- # constract a images message
- imagesMsg = pb.ImagesMessage()
- imagesMsg.source = self.device_id
- curr_time = datetime.now().strftime('%Y-%m-%d-%H-%M-%S')
- imagesMsg.timestamp = curr_time
- log_rk = self.routing_key+".logs.test0"
- image_rk = self.routing_key+".images.test0"
+ send_logs_tool(logs=logs,
+ logs_queue=self.logs_queue,
+ source=self.device_id,
+ routing_key=self.routing_key+".logs.test0")
- for log, img in zip(logs,images):
-
- # encoding the images to the bytes
- # encode_params = [int(cv2.IMWRITE_JPEG_QUALITY), self.image_quality]
- # image_encoded = cv2.imencode(".jpg",single_img,encode_params)
- if img is not None:
- success,image_encoded = cv2.imencode(".jpg",img)
- if success:
- image_bytes = image_encoded.tobytes()
- image_length = len(image_bytes)
- # add the encoded image to msg
- image_item = imagesMsg.Image.add()
- image_item.length = image_length
- image_item.data = image_bytes
-
- if log is not None:
- # constract a logs message
- logsMsg = pb.LogsMessage()
- logsMsg.source = self.device_id
- logsMsg.timestamp = f"{time.asctime()}"
- logsMsg.context = log
- # convert the proto object to string
- logsMsg_bytes = logsMsg.SerializeToString()
- # add logsmsg to queue
- self.logs_queue.put([log_rk,logsMsg_bytes])
-
-
- # converting the pb image msg to bytes
- imageMsg_bytes = imagesMsg.SerializeToString()
- # add the imageMsg to the queue
- self.images_queue.put([image_rk,imageMsg_bytes])
+ send_images_tool(images=images,
+ images_queue=self.images_queue,
+ source=self.device_id,
+ routing_key=self.routing_key+".images.test0")
def _capture_image(self,mode:str = "capture"):
@@ -168,68 +142,97 @@
self.routing_key = self.init_routing_key
+
+######################################## MICROWAVE ###########################################
class microwaveController(object):
pass
-class dustCleanerController(object):
-
- pass
+####################################### DUST CLEANER #########################################
+class dustCleanerController(DustCleaner):
+ def __init__(self, com, bps, timeout, logs_queue, device_id,routing_key):
+ super().__init__(com, bps, timeout)
-class CaptureThread(threading.Thread):
- """
- camera capture thread
- """
- def __init__(self, cameras, msg_queue, interval, device_id,image_quality = 95):
- """init the thread"""
- threading.Thread.__init__(self)
- self.cameras = cameras
- self.msg_queue = msg_queue
- self.interval = interval
- self.image_quality = image_quality
- self.is_stop = False
+ self.logs_queue = logs_queue
self.device_id = device_id
+ self.routing_key = routing_key
+ self._check_cleaner()
- def stop(self):
- """stop the thread"""
- self.is_stop = True
-# TODO鏍规嵁鏂扮殑鏁版嵁缁撴瀯淇敼闃熸秷鎭槦鍒椼��
- def run(self):
- print("CaptureThread started")
- encode_param = [int(cv2.IMWRITE_JPEG_QUALITY), self.image_quality]
- self.next_time = time.time() + self.interval
- while not self.is_stop:
- this_time = time.time()
- if this_time > self.next_time:
- for i in range(len(self.cameras)):
- _, frame = self.cameras[i].read()
- capture_time = time.time()
- _, encimg = cv2.imencode('.jpg', frame, encode_param)
- if frame is not None:
- np_array = np.asarray(encimg) # frame 杞崲涓簄umpy鏁扮粍
- byte_array = np_array.tobytes() # numpy鏁扮粍杞崲涓篵yte鏁扮粍
- # convert the image to pb.DataField
- imagedata = pb.DataField()
- imagedata.data = byte_array
- imagedata.length = len(byte_array)
+ def _check_cleaner(self):
- data_str = imagedata.SerializeToString()
+ success = self.Open()
- # create protobuf message
- data_msg = pb.CapturedData()
- data_msg.generate_time = capture_time
- data_msg.generate_device = self.device_id
- data_msg.camera_port = i
- data_msg.image_data = data_str
+ log = "Unknown log."
+ if success:
+ log = f"The port [{self.port}] refered to the dust cleaner is open."
+ else:
+ log = f"The port [{self.port}] refered to the dust cleaner can not open."
+
+ # display
+ print(f"{time.asctime()} | {log}")
+
+ send_logs_tool(logs=[log],
+ logs_queue=self.logs_queue,
+ source = self.device_id,
+ routing_key=self.routing_key+".logs.test0")
+
+
+
+# class CaptureThread(threading.Thread):
+# """
+# camera capture thread
+# """
+# def __init__(self, cameras, msg_queue, interval, device_id,image_quality = 95):
+# """init the thread"""
+# threading.Thread.__init__(self)
+# self.cameras = cameras
+# self.msg_queue = msg_queue
+# self.interval = interval
+# self.image_quality = image_quality
+# self.is_stop = False
+# self.device_id = device_id
+
+# def stop(self):
+# """stop the thread"""
+# self.is_stop = True
+
+# # TODO鏍规嵁鏂扮殑鏁版嵁缁撴瀯淇敼闃熸秷鎭槦鍒椼��
+# def run(self):
+# print("CaptureThread started")
+# encode_param = [int(cv2.IMWRITE_JPEG_QUALITY), self.image_quality]
+# self.next_time = time.time() + self.interval
+# while not self.is_stop:
+# this_time = time.time()
+# if this_time > self.next_time:
+# for i in range(len(self.cameras)):
+# _, frame = self.cameras[i].read()
+# capture_time = time.time()
+# _, encimg = cv2.imencode('.jpg', frame, encode_param)
+# if frame is not None:
+# np_array = np.asarray(encimg) # frame 杞崲涓簄umpy鏁扮粍
+# byte_array = np_array.tobytes() # numpy鏁扮粍杞崲涓篵yte鏁扮粍
+# # convert the image to pb.DataField
+# imagedata = pb.DataField()
+# imagedata.data = byte_array
+# imagedata.length = len(byte_array)
+
+# data_str = imagedata.SerializeToString()
+
+# # create protobuf message
+# data_msg = pb.CapturedData()
+# data_msg.generate_time = capture_time
+# data_msg.generate_device = self.device_id
+# data_msg.camera_port = i
+# data_msg.image_data = data_str
- # add message to queue
- self.msg_queue.put(data_msg)
+# # add message to queue
+# self.msg_queue.put(data_msg)
- self.next_time += self.interval
- time.sleep(0.1)
- for camera in self.cameras:
- camera.release()
- print("CaptureThread stopped")
\ No newline at end of file
+# self.next_time += self.interval
+# time.sleep(0.1)
+# for camera in self.cameras:
+# camera.release()
+# print("CaptureThread stopped")
\ No newline at end of file
--
Gitblit v1.9.1