summaryrefslogtreecommitdiff
path: root/megapixels/commands/cv/face_roi.py
diff options
context:
space:
mode:
Diffstat (limited to 'megapixels/commands/cv/face_roi.py')
-rw-r--r--megapixels/commands/cv/face_roi.py27
1 files changed, 16 insertions, 11 deletions
diff --git a/megapixels/commands/cv/face_roi.py b/megapixels/commands/cv/face_roi.py
index d7248aee..c3c2ac05 100644
--- a/megapixels/commands/cv/face_roi.py
+++ b/megapixels/commands/cv/face_roi.py
@@ -18,9 +18,9 @@ color_filters = {'color': 1, 'gray': 2, 'all': 3}
help='Override enum output filename CSV')
@click.option('-m', '--media', 'opt_dir_media', default=None,
help='Override enum media directory')
-@click.option('--data_store', 'opt_data_store',
+@click.option('--store', 'opt_data_store',
type=cfg.DataStoreVar,
- default=click_utils.get_default(types.DataStore.SSD),
+ default=click_utils.get_default(types.DataStore.HDD),
show_default=True,
help=click_utils.show_help(types.Dataset))
@click.option('--dataset', 'opt_dataset',
@@ -31,7 +31,7 @@ color_filters = {'color': 1, 'gray': 2, 'all': 3}
@click.option('--size', 'opt_size',
type=(int, int), default=(300, 300),
help='Output image size')
-@click.option('-t', '--detector-type', 'opt_detector_type',
+@click.option('-d', '--detector', 'opt_detector_type',
type=cfg.FaceDetectNetVar,
default=click_utils.get_default(types.FaceDetectNet.DLIB_CNN),
help=click_utils.show_help(types.FaceDetectNet))
@@ -52,10 +52,12 @@ color_filters = {'color': 1, 'gray': 2, 'all': 3}
help='Filter to keep color or grayscale images (color = keep color')
@click.option('--largest/--all-faces', 'opt_largest', is_flag=True, default=True,
help='Only keep largest face')
+@click.option('--zone', 'opt_zone', default=(0.0, 0.0), type=(float, float),
+ help='Face center must be located within zone region (0.5 = half width/height)')
@click.pass_context
def cli(ctx, opt_fp_in, opt_dir_media, opt_fp_out, opt_data_store, opt_dataset, opt_size, opt_detector_type,
opt_gpu, opt_conf_thresh, opt_pyramids, opt_slice, opt_display, opt_force, opt_color_filter,
- opt_largest):
+ opt_largest, opt_zone):
"""Converts frames with faces to CSV of ROIs"""
import sys
@@ -115,7 +117,7 @@ def cli(ctx, opt_fp_in, opt_dir_media, opt_fp_out, opt_data_store, opt_dataset,
data = []
for df_record in tqdm(df_records.itertuples(), total=len(df_records)):
- fp_im = data_store.face_image(str(df_record.subdir), str(df_record.fn), str(df_record.ext))
+ fp_im = data_store.face(str(df_record.subdir), str(df_record.fn), str(df_record.ext))
im = cv.imread(fp_im)
# filter out color or grayscale iamges
@@ -130,7 +132,7 @@ def cli(ctx, opt_fp_in, opt_dir_media, opt_fp_out, opt_data_store, opt_dataset,
continue
try:
- bboxes = detector.detect(im, size=opt_size, pyramids=opt_pyramids, largest=opt_largest)
+ bboxes = detector.detect(im, size=opt_size, pyramids=opt_pyramids, largest=opt_largest, zone=opt_zone)
except Exception as e:
log.error('could not detect: {}'.format(fp_im))
log.error('{}'.format(e))
@@ -142,14 +144,14 @@ def cli(ctx, opt_fp_in, opt_dir_media, opt_fp_out, opt_data_store, opt_dataset,
'x': bbox.x,
'y': bbox.y,
'w': bbox.w,
- 'h': bbox.h,
- 'image_width': im.shape[1],
- 'image_height': im.shape[0]}
+ 'h': bbox.h
+ }
data.append(roi)
+ if len(bboxes) == 0:
+ log.warn(f'no faces in: {fp_im}')
# debug display
if opt_display and len(bboxes):
- bbox_dim = bbox.to_dim(im.shape[:2][::-1]) # w,h
im_md = im_utils.resize(im, width=min(1200, opt_size[0]))
for bbox in bboxes:
bbox_dim = bbox.to_dim(im_md.shape[:2][::-1])
@@ -168,4 +170,7 @@ def cli(ctx, opt_fp_in, opt_dir_media, opt_fp_out, opt_data_store, opt_dataset,
file_utils.mkdirs(fp_out)
df = pd.DataFrame.from_dict(data)
df.index.name = 'index'
- df.to_csv(fp_out) \ No newline at end of file
+ df.to_csv(fp_out)
+ # save script
+ cmd_line = ' '.join(sys.argv)
+ file_utils.write_text(cmd_line, '{}.sh'.format(fp_out)) \ No newline at end of file