implement positive sample extraction

pull/322/head
marina.kolpakova 12 years ago
parent 92e50d952f
commit 31687178d2
  1. 119
      apps/sft/misk/scale_caltech.py

@ -4,21 +4,15 @@ import sys, os, os.path, glob, math, cv2
from datetime import datetime from datetime import datetime
from optparse import OptionParser from optparse import OptionParser
import re import re
import numpy as np
start_templates = ["lbl", "pos", "occl"]
class Sample: def extract(f):
def __init__(self, l):
self
if __name__ == "__main__":
f = open("/home/kellan/datasets/caltech/set00/V004.txt")
person = re.compile("^lbl=\'person\'\s+str=(\d+)\s+end=(\d+)\s+hide=0$") person = re.compile("^lbl=\'person\'\s+str=(\d+)\s+end=(\d+)\s+hide=0$")
newobj = re.compile("^lbl=\'(\w+)\'\s+str=(\d+)\s+end=(\d+)\s+hide=0$") newobj = re.compile("^lbl=\'(\w+)\'\s+str=(\d+)\s+end=(\d+)\s+hide=0$")
pos = re.compile("^pos\s=(\[[((\d+\.+\d*)|\s+|\;)]*\])$") pos = re.compile("^pos\s=(\[[((\d+\.+\d*)|\s+|\;)]*\])$")
nonarray = re.compile("\;\s+(?!\])|\s+(?!\])") nonarray = re.compile("\;\s+(?!\])|\s+(?!\])")
lastSemicolon = re.compile("\;\s+(?=\])") lastSemicolon = re.compile("\;\s+(?=\])")
qqq = re.compile("(?=\[)\b(?=\d*)")
goNext = 0 goNext = 0
start = 0 start = 0
@ -66,5 +60,112 @@ if __name__ == "__main__":
img = cv2.imread(file) img = cv2.imread(file)
cv2.rectangle(img, (int(x), int(y)), (int(x + w), int(y + h)), (0,255,0), 2) cv2.rectangle(img, (int(x), int(y)), (int(x + w), int(y + h)), (0,255,0), 2)
cv2.imshow("sample", img) cv2.imshow("sample", img)
cv2.waitKey(0) cv2.waitKey(50)
def showPeople(f, path, opath):
newobj = re.compile("^lbl=\'(\w+)\'\s+str=(\d+)\s+end=(\d+)\s+hide=0$")
pos = re.compile("^pos\s=(\[[((\d+\.+\d*)|\s+|\;)]*\])$")
occl = re.compile("^occl\s*=(\[[0-1|\s]*\])$")
goNext = 0
start = 0
end = 0
person_id = -1;
boxes = []
occls = []
for l in f:
m = newobj.match(l)
if m is not None:
print m.group(1)
if m.group(1) == "person":
goNext = 1
start = int(m.group(2))
end = int(m.group(3))
person_id = person_id + 1
print m.group(1), person_id, start, end
else:
goNext = 0
else:
m = pos.match(l)
if m is not None:
if not goNext:
continue
strarr = re.sub(r"\s", ", ", re.sub(r"\;\s+(?=\])", "]", re.sub(r"\;\s+(?!\])", "],[", re.sub(r"(\[)(\d)", "\\1[\\2", m.group(1)))))
boxes = eval(strarr)
else:
m = occl.match(l)
if m is not None:
occls = eval(re.sub(r"\s+(?!\])", ",", m.group(1)))
if len(boxes) > 0 and len(boxes) == len(occls):
print len(boxes)
for idx, box in enumerate(boxes):
color = (8, 107, 255)
if occls[idx] == 1:
continue
# color = (255, 107, 8)
x = box[0]
y = box[1]
w = box[2]
h = box[3]
id = int(start) - 1 + idx
file = os.path.join(path, "I0%04d.jpg" % id)
print file
if (start + id) < end and w > 5 and h > 47:
img = cv2.imread(file)
fname = re.sub(r"^.*\/(set[0-1]\d)\/(V0\d\d)\.(seq)/(I\d+).jpg$", "\\1_\\2_\\4", file)#os.path.basename(file)
fname = os.path.join(opath, fname + "_%04d." % person_id + "png")
try:
print "->", fname
submat = img[int(y):int(y + h), int(x):int(x + w),:]
cv2.imwrite(fname, submat)
except:
print "something wrong... go next."
pass
cv2.rectangle(img, (int(x), int(y)), (int(x + w), int(y + h)), color, 1)
cv2.imshow("person", img)
c = cv2.waitKey(10)
if c == 27:
exit(0)
if __name__ == "__main__":
parser = OptionParser()
parser.add_option("-i", "--input", dest="input", metavar="DIRECTORY", type="string",
help="path to the Caltech dataset folder.")
parser.add_option("-o", "--output", dest="output", metavar="DIRECTORY", type="string",
help="path to store data", default=".")
(options, args) = parser.parse_args()
if not options.input:
parser.error("Caltech dataset folder is required.")
opath = os.path.join(options.output, datetime.now().strftime("raw_ge48-" + "-%Y-%m-%d-%H-%M-%S"))
os.mkdir(opath)
# mat = cv2.imread("/home/kellan/datasets/INRIArescaled/training_set/pos/octave_-1/sample_0.png");
# cv2.rectangle(mat, (10, 10), (42, 74), (8, 107, 255), 1)
# cv2.imshow("person", mat)
# cv2.waitKey(0)
# if c == 27:
# exit(0)
gl = glob.iglob( os.path.join(options.input, "set[0-1][0-9]/V0[0-9][0-9].txt"))
for each in gl:
path, ext = os.path.splitext(each)
path = path + ".seq"
print path
showPeople(open(each), path, opath)
# f = open("/home/kellan/datasets/caltech/set00/V004.txt")
# extract(f)

Loading…
Cancel
Save