Skip to content

Commit

Permalink
update benchmark script to mirror actual frigate use
Browse files Browse the repository at this point in the history
  • Loading branch information
blakeblackshear committed Mar 4, 2020
1 parent a5bef89 commit 1734c05
Showing 1 changed file with 73 additions and 12 deletions.
85 changes: 73 additions & 12 deletions benchmark.py
Original file line number Diff line number Diff line change
@@ -1,18 +1,79 @@
import statistics
import os
from statistics import mean
import multiprocessing as mp
import numpy as np
import time
from frigate.edgetpu import ObjectDetector
import datetime
from frigate.edgetpu import ObjectDetector, EdgeTPUProcess, RemoteObjectDetector, load_labels

object_detector = ObjectDetector()
my_frame = np.expand_dims(np.full((300,300,3), 1, np.uint8), axis=0)
labels = load_labels('/labelmap.txt')

frame = np.zeros((300,300,3), np.uint8)
input_frame = np.expand_dims(frame, axis=0)
######
# Minimal same process runner
######
# object_detector = ObjectDetector()
# tensor_input = np.expand_dims(np.full((300,300,3), 0, np.uint8), axis=0)

detection_times = []
# start = datetime.datetime.now().timestamp()

for x in range(0, 100):
start = time.monotonic()
object_detector.detect_raw(input_frame)
detection_times.append(time.monotonic()-start)
# frame_times = []
# for x in range(0, 1000):
# start_frame = datetime.datetime.now().timestamp()

print(f"Average inference time: {statistics.mean(detection_times)*1000:.2f}ms")
# 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.")

0 comments on commit 1734c05

Please sign in to comment.