Add bounding box area filtering.

Change-Id: I5b67933ef975f57bed4b5e40da781db1652a3eda
diff --git a/edgetpuvision/detect.py b/edgetpuvision/detect.py
index cc8894a..9373cf1 100644
--- a/edgetpuvision/detect.py
+++ b/edgetpuvision/detect.py
@@ -21,6 +21,10 @@
 from . import overlays
 from .utils import load_labels, input_image_size, same_input_image_sizes
 
+def area(obj):
+    x0, y0, x1, y1 = rect = obj.bounding_box.flatten().tolist()
+    return (x1 - x0) * (y1 - y0)
+
 def render_gen(args):
     engines = [DetectionEngine(m) for m in args.model.split(',')]
     assert same_input_image_sizes(engines)
@@ -36,15 +40,16 @@
     output = None
     while True:
         tensor, size, window, inference_rate, command = (yield output)
-
         if draw_overlay:
             start = time.monotonic()
             objs = engine.DetectWithInputTensor(tensor, threshold=args.threshold, top_k=args.top_k)
-            inference_time  = time.monotonic() - start
+            inference_time = time.monotonic() - start
 
             if labels and filtered_labels:
                 objs = [obj for obj in objs if labels[obj.label_id] in filtered_labels]
 
+            objs = [obj for obj in objs if args.min_area <= area(obj) <= args.max_area]
+
             output = overlays.detection(objs, labels, inference_time, inference_rate, size, window)
         else:
             output = None
@@ -70,6 +75,10 @@
                         help='Max number of objects to detect')
     parser.add_argument('--threshold', type=float, default=0.1,
                         help='Detection threshold')
+    parser.add_argument('--min_area', type=float, default=0.0,
+                        help='Min bounding box area')
+    parser.add_argument('--max_area', type=float, default=1.0,
+                        help='Max bounding box area')
     parser.add_argument('--filter', default=None)
     parser.add_argument('--fullscreen', default=False, action='store_true',
                         help='Fullscreen rendering')