forked from opencv/opencv
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- parse idl - replase option parser with argument parser
- Loading branch information
marina.kolpakova
committed
Feb 1, 2013
1 parent
8cd509e
commit ca08101
Showing
3 changed files
with
112 additions
and
63 deletions.
There are no files selected for viewing
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,70 @@ | ||
#!/usr/bin/env python | ||
|
||
import argparse | ||
import sft | ||
|
||
import sys, os, os.path, glob, math, cv2 | ||
from datetime import datetime | ||
import numpy | ||
|
||
def call_parser(f, a): | ||
return eval( "sft.parse_" + f + "('" + a + "')") | ||
|
||
if __name__ == "__main__": | ||
parser = argparse.ArgumentParser(description = 'Plot ROC curve using Caltech mathod of per image detection performance estimation.') | ||
|
||
# positional | ||
parser.add_argument("cascade", help = "Path to the tested detector.") | ||
parser.add_argument("input", help = "Image sequence pattern.") | ||
parser.add_argument("annotations", help = "Path to the annotations.") | ||
|
||
# optional | ||
parser.add_argument("-m", "--min_scale", dest = "min_scale", type = float, metavar= "fl", help = "Minimum scale to be tested.", default = 0.4) | ||
parser.add_argument("-M", "--max_scale", dest = "max_scale", type = float, metavar= "fl", help = "Maximum scale to be tested.", default = 5.0) | ||
parser.add_argument("-o", "--output", dest = "output", type = str, metavar= "path", help = "Path to store resultiong image.", default = "./roc.png") | ||
parser.add_argument("-n", "--nscales", dest = "nscales", type = int, metavar= "n", help = "Prefered count of scales from min to max.", default = 55) | ||
|
||
# required | ||
parser.add_argument("-f", "--anttn-format", dest = "anttn_format", choices = ['inria', 'caltech', "idl"], help = "Annotation file for test sequence.", required = True) | ||
|
||
args = parser.parse_args() | ||
|
||
samples = call_parser(args.anttn_format, args.annotations) | ||
|
||
# where we use nms cv::SCascade::DOLLAR == 2 | ||
cascade = cv2.SCascade(args.min_scale, args.max_scale, args.nscales, 2) | ||
xml = cv2.FileStorage(args.cascade, 0) | ||
dom = xml.getFirstTopLevelNode() | ||
assert cascade.load(dom) | ||
|
||
frame = 0 | ||
pattern = args.input | ||
camera = cv2.VideoCapture(args.input) | ||
while True: | ||
ret, img = camera.read() | ||
if not ret: | ||
break; | ||
|
||
name = pattern % (frame,) | ||
qq = pattern.format(frame) | ||
_, tail = os.path.split(name) | ||
|
||
boxes = samples[tail] | ||
if boxes is not None: | ||
sft.draw_rects(img, boxes, (255, 0, 0), lambda x, y : y) | ||
|
||
frame = frame + 1 | ||
|
||
# sample = samples[] | ||
|
||
|
||
|
||
rects, confs = cascade.detect(img, rois = None) | ||
|
||
# # draw results | ||
if rects is not None: | ||
sft.draw_rects(img, rects[0], (0, 255, 0)) | ||
|
||
cv2.imshow("result", img); | ||
if (cv2.waitKey (5) != -1): | ||
break; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,42 @@ | ||
#!/usr/bin/env python | ||
|
||
import cv2, re, glob | ||
|
||
def draw_rects(img, rects, color, l = lambda x, y : x + y): | ||
if rects is not None: | ||
for x1, y1, x2, y2 in rects: | ||
cv2.rectangle(img, (x1, y1), (l(x1, x2), l(y1, y2)), color, 2) | ||
|
||
class Sample: | ||
def __init__(self, bbs, img): | ||
self.image = img | ||
self.bbs = bb | ||
|
||
def parse_inria(ipath, f): | ||
bbs = [] | ||
path = None | ||
for l in f: | ||
box = None | ||
if l.startswith("Bounding box"): | ||
b = [x.strip() for x in l.split(":")[1].split("-")] | ||
c = [x[1:-1].split(",") for x in b] | ||
d = [int(x) for x in sum(c, [])] | ||
bbs.append(d) | ||
|
||
if l.startswith("Image filename"): | ||
path = l.split('"')[-2] | ||
|
||
return Sample(path, bbs) | ||
|
||
def glob_set(pattern): | ||
return [__n for __n in glob.iglob(pattern)] #glob.iglob(pattern) | ||
|
||
# parse ETH idl file | ||
def parse_idl(f): | ||
map = {} | ||
for l in open(f): | ||
l = re.sub(r"^\"left\/", "{\"", l) | ||
l = re.sub(r"\:", ":[", l) | ||
l = re.sub(r"(\;|\.)$", "]}", l) | ||
map.update(eval(l)) | ||
return map |