12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 |
- import os
- from statistics import mean
- import multiprocessing as mp
- import numpy as np
- import datetime
- from frigate.edgetpu import LocalObjectDetector, EdgeTPUProcess, RemoteObjectDetector, load_labels
- my_frame = np.expand_dims(np.full((300,300,3), 1, np.uint8), axis=0)
- labels = load_labels('/labelmap.txt')
- ######
- # Minimal same process runner
- ######
- # object_detector = ObjectDetector()
- # tensor_input = np.expand_dims(np.full((300,300,3), 0, np.uint8), axis=0)
- # start = datetime.datetime.now().timestamp()
- # frame_times = []
- # for x in range(0, 1000):
- # start_frame = datetime.datetime.now().timestamp()
- # tensor_input[:] = my_frame
- # detections = object_detector.detect_raw(tensor_input)
- # parsed_detections = []
- # for d in detections:
- # if d[1] < 0.4:
- # break
- # parsed_detections.append((
- # labels[int(d[0])],
- # float(d[1]),
- # (d[2], d[3], d[4], d[5])
- # ))
- # frame_times.append(datetime.datetime.now().timestamp()-start_frame)
- # duration = datetime.datetime.now().timestamp()-start
- # print(f"Processed for {duration:.2f} seconds.")
- # print(f"Average frame processing time: {mean(frame_times)*1000:.2f}ms")
- ######
- # Separate process runner
- ######
- def start(id, num_detections, detection_queue):
- object_detector = RemoteObjectDetector(str(id), '/labelmap.txt', detection_queue)
- start = datetime.datetime.now().timestamp()
- frame_times = []
- for x in range(0, num_detections):
- start_frame = datetime.datetime.now().timestamp()
- detections = object_detector.detect(my_frame)
- frame_times.append(datetime.datetime.now().timestamp()-start_frame)
- duration = datetime.datetime.now().timestamp()-start
- print(f"{id} - Processed for {duration:.2f} seconds.")
- print(f"{id} - Average frame processing time: {mean(frame_times)*1000:.2f}ms")
- edgetpu_process = EdgeTPUProcess()
- # start(1, 1000, edgetpu_process.detect_lock, edgetpu_process.detect_ready, edgetpu_process.frame_ready)
- ####
- # Multiple camera processes
- ####
- camera_processes = []
- for x in range(0, 10):
- camera_process = mp.Process(target=start, args=(x, 100, edgetpu_process.detection_queue))
- camera_process.daemon = True
- camera_processes.append(camera_process)
- start = datetime.datetime.now().timestamp()
- for p in camera_processes:
- p.start()
- for p in camera_processes:
- p.join()
- duration = datetime.datetime.now().timestamp()-start
- print(f"Total - Processed for {duration:.2f} seconds.")
|