mirror of
https://github.com/opencv/opencv.git
synced 2025-01-18 14:13:15 +08:00
allow multiple detectors
This commit is contained in:
parent
469eeea370
commit
11f3927c58
@ -7,6 +7,8 @@ import sys, os, os.path, glob, math, cv2
|
|||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
import numpy
|
import numpy
|
||||||
|
|
||||||
|
plot_colors = ['b', 'r', 'g', 'c', 'm']
|
||||||
|
|
||||||
# "key" : ( b, g, r)
|
# "key" : ( b, g, r)
|
||||||
bgr = { "red" : ( 0, 0, 255),
|
bgr = { "red" : ( 0, 0, 255),
|
||||||
"green" : ( 0, 255, 0),
|
"green" : ( 0, 255, 0),
|
||||||
@ -19,7 +21,7 @@ if __name__ == "__main__":
|
|||||||
parser = argparse.ArgumentParser(description = 'Plot ROC curve using Caltech mathod of per image detection performance estimation.')
|
parser = argparse.ArgumentParser(description = 'Plot ROC curve using Caltech mathod of per image detection performance estimation.')
|
||||||
|
|
||||||
# positional
|
# positional
|
||||||
parser.add_argument("cascade", help = "Path to the tested detector.")
|
parser.add_argument("cascade", help = "Path to the tested detector.", nargs='+')
|
||||||
parser.add_argument("input", help = "Image sequence pattern.")
|
parser.add_argument("input", help = "Image sequence pattern.")
|
||||||
parser.add_argument("annotations", help = "Path to the annotations.")
|
parser.add_argument("annotations", help = "Path to the annotations.")
|
||||||
|
|
||||||
@ -34,47 +36,53 @@ if __name__ == "__main__":
|
|||||||
|
|
||||||
args = parser.parse_args()
|
args = parser.parse_args()
|
||||||
|
|
||||||
# parse annotations
|
print args.cascade
|
||||||
|
# # parse annotations
|
||||||
|
sft.initPlot()
|
||||||
samples = call_parser(args.anttn_format, args.annotations)
|
samples = call_parser(args.anttn_format, args.annotations)
|
||||||
cascade = sft.cascade(args.min_scale, args.max_scale, args.nscales, args.cascade)
|
for idx, each in enumerate(args.cascade):
|
||||||
pattern = args.input
|
print each
|
||||||
camera = cv2.VideoCapture(pattern)
|
cascade = sft.cascade(args.min_scale, args.max_scale, args.nscales, each)
|
||||||
|
pattern = args.input
|
||||||
|
camera = cv2.VideoCapture(pattern)
|
||||||
|
|
||||||
# for plotting over dataset
|
# for plotting over dataset
|
||||||
nannotated = 0
|
nannotated = 0
|
||||||
nframes = 0
|
nframes = 0
|
||||||
|
|
||||||
confidenses = []
|
confidenses = []
|
||||||
tp = []
|
tp = []
|
||||||
|
|
||||||
while True:
|
while True:
|
||||||
ret, img = camera.read()
|
ret, img = camera.read()
|
||||||
if not ret:
|
if not ret:
|
||||||
break;
|
break;
|
||||||
|
|
||||||
name = pattern % (nframes,)
|
name = pattern % (nframes,)
|
||||||
_, tail = os.path.split(name)
|
_, tail = os.path.split(name)
|
||||||
|
|
||||||
boxes = samples[tail]
|
boxes = samples[tail]
|
||||||
boxes = sft.norm_acpect_ratio(boxes, 0.5)
|
boxes = sft.norm_acpect_ratio(boxes, 0.5)
|
||||||
|
|
||||||
nannotated = nannotated + len(boxes)
|
nannotated = nannotated + len(boxes)
|
||||||
nframes = nframes + 1
|
nframes = nframes + 1
|
||||||
rects, confs = cascade.detect(img, rois = None)
|
rects, confs = cascade.detect(img, rois = None)
|
||||||
|
|
||||||
if confs is None:
|
if confs is None:
|
||||||
continue
|
continue
|
||||||
|
|
||||||
dts = sft.convert2detections(rects, confs)
|
dts = sft.convert2detections(rects, confs)
|
||||||
|
|
||||||
confs = confs.tolist()[0]
|
confs = confs.tolist()[0]
|
||||||
confs.sort(lambda x, y : -1 if (x - y) > 0 else 1)
|
confs.sort(lambda x, y : -1 if (x - y) > 0 else 1)
|
||||||
confidenses = confidenses + confs
|
confidenses = confidenses + confs
|
||||||
|
|
||||||
matched = sft.match(boxes, dts)
|
matched = sft.match(boxes, dts)
|
||||||
tp = tp + matched
|
tp = tp + matched
|
||||||
|
|
||||||
print nframes, nannotated
|
print nframes, nannotated
|
||||||
|
|
||||||
fppi, miss_rate = sft.computeROC(confidenses, tp, nannotated, nframes)
|
fppi, miss_rate = sft.computeROC(confidenses, tp, nannotated, nframes)
|
||||||
sft.plotLogLog(fppi, miss_rate)
|
sft.plotLogLog(fppi, miss_rate, plot_colors[idx])
|
||||||
|
|
||||||
|
sft.showPlot("roc_curve.png")
|
@ -55,7 +55,7 @@ def crop_rect(rect, factor):
|
|||||||
|
|
||||||
#
|
#
|
||||||
|
|
||||||
def plotLogLog(fppi, miss_rate):
|
def initPlot():
|
||||||
|
|
||||||
fig, ax = plt.subplots()
|
fig, ax = plt.subplots()
|
||||||
fig.canvas.draw()
|
fig.canvas.draw()
|
||||||
@ -63,22 +63,19 @@ def plotLogLog(fppi, miss_rate):
|
|||||||
plt.xlabel("fppi")
|
plt.xlabel("fppi")
|
||||||
plt.ylabel("miss rate")
|
plt.ylabel("miss rate")
|
||||||
plt.title("ROC curve Bahnhof")
|
plt.title("ROC curve Bahnhof")
|
||||||
|
|
||||||
# plt.yticks( [0.05, 0.10, 0.20, 0.30, 0.40, 0.50, 0.64, 0.80])
|
|
||||||
# ylabels = [item.get_text() for item in ax.get_yticklabels()]
|
|
||||||
# ax.set_yticklabels( ylabels )
|
|
||||||
plt.grid(True)
|
plt.grid(True)
|
||||||
|
|
||||||
# plt.xticks( [pow(10, -4), pow(10, -3), pow(10, -2), pow(10, -1), pow(10, 0), pow(10, 1)])
|
|
||||||
# xlabels = [item.get_text() for item in ax.get_xticklabels()]
|
|
||||||
# ax.set_xticklabels( xlabels )
|
|
||||||
plt.xscale('log')
|
plt.xscale('log')
|
||||||
plt.yscale('log')
|
plt.yscale('log')
|
||||||
|
|
||||||
plt.semilogy(fppi, miss_rate, color='m', linewidth=2)
|
def showPlot(name):
|
||||||
|
plt.savefig(name)
|
||||||
plt.show()
|
plt.show()
|
||||||
|
|
||||||
|
|
||||||
|
def plotLogLog(fppi, miss_rate, c):
|
||||||
|
plt.semilogy(fppi, miss_rate, color = c, linewidth = 2)
|
||||||
|
|
||||||
|
|
||||||
def draw_rects(img, rects, color, l = lambda x, y : x + y):
|
def draw_rects(img, rects, color, l = lambda x, y : x + y):
|
||||||
if rects is not None:
|
if rects is not None:
|
||||||
for x1, y1, x2, y2 in rects:
|
for x1, y1, x2, y2 in rects:
|
||||||
|
Loading…
Reference in New Issue
Block a user