def result(self, image_path, results, expected, compare=True): fullpath = path = os.path.abspath(os.path.join('data', image_path)) if self.resized_dir is not None: im = image.max_size(image.load(path), (320, 240)) path = os.path.join(self.resized_dir, os.path.basename(image_path)) print os.path.dirname(image_path) image.save(im, path) del im self.write('<tr>') self.write('<td rowspan="%(len)d"><a href="%(fullpath)s"><img src="%(path)s" width="320" /><br />%(imgpath)s</a></td>', fullpath=fullpath, path=path, imgpath=image_path, len=len(results)) for i,pair in enumerate(results.iteritems()): name,result = pair if i != 0: self.write("</tr><tr>") self.write('<td>%(name)s</td><td>%(score)r</td>', name=name, score=result[1]) self.write('<td class="%(cls)s">%(confirmed)s</td><td>%(expected)s</td>', cls="bad" if compare and result[2] != (name in expected) else "good", confirmed="Yes" if result[2] else "", expected="Yes" if name in expected else "") self.write('<td class="%(cls)s">%(timing).2f second(s)</td>', cls="bad" if compare and result[3] > 10 else "", timing=result[3]) self.write("</tr>")
def measure(im, debug=False): im2 = image.max_size(im, (800, 600)) b,g,r = image.split(im2) #cv.EqualizeHist(r,r) ##cv.EqualizeHist(g,g) ##cv.EqualizeHist(b,b) im2 = image.merge(b,g,r) eyes = 0 #objs = [] #for cascade in eye_cascades: # print cascade # cascade = cv.Load(cascade) # objs = filter_overlap(detect(im, cascade)) # draw_objects(im, objs, color=cv.RGB(0,255,0)) # eyes += len(objs) #faces = 0 if debug: im3 = cv.CloneImage(im2) faces = [] for cascade in face_cascades:#(face_cascades[0],face_cascades[-1]): cascade = cv.Load(cascade) detected_faces = detect(im2, cascade) faces += detected_faces if debug: for i,rect in enumerate(faces): rect.draw(im3, color=cv.RGB(255,16*i,16*i)) if debug: image.show(im3, "Faces + Repeats") faces = filter_overlap(faces) #print (objs[1], objs[6]) #draw_objects(im2, map(tuple, faces.keys())) for rect, count in faces.iteritems(): rect.draw(im2, color=cv.RGB(255,0,0)) #print (objs[3],objs[13]) #draw_objects(im, filter_overlap((objs[3],objs[13]))) #objs = [] #for cascade in body_cascades: # print cascade # cascade = cv.Load(cascade) # objs += detect(im, cascade) #draw_objects(im, filter_overlap(objs), color=cv.RGB(0,0,255)) #objs = [] #for cascade in mouth_cascades: # print cascade # cascade = cv.Load(cascade) # objs += detect(im, cascade) #draw_objects(im, filter_overlap(objs), color=cv.RGB(255,0,255)) score = 0 for face_rect, count in faces.iteritems(): score += count * 0.25 + 0.15 print faces if debug: image.show(im2, "Faces") return (im2, faces), score
def load(self, max_size=None): try: im = image.load(self.imgpath) except IOError: return None if max_size is not None: im = image.max_size(im, max_size) return im