def predict(self, im, dets):
     
     h, w, c = im.shape
     dets = convert_to_square(dets, self.expand)
     dets[:, 0:4] = np.round(dets[:, 0:4])
     [dy, edy, dx, edx, y, ey, x, ex, tmpw, tmph] = pad(dets, w, h)
     num_boxes = dets.shape[0]
     cropped_ims = np.zeros((num_boxes, self.net_size, self.net_size, 3), dtype=np.float32)
     for i in range(num_boxes):
         tmp = np.zeros((tmph[i], tmpw[i], 3), dtype=np.uint8)
         tmp[dy[i]:edy[i] + 1, dx[i]:edx[i] + 1, :] = im[y[i]:ey[i] + 1, x[i]:ex[i] + 1, :]
         cropped_ims[i, :, :, :] = (cv2.resize(tmp, (self.net_size, self.net_size))-127.5) / 128
         
     # print(cropped_ims.shape)
     # cropped_ims.tofile('test_img.bin')
     # cls_scores, reg, landmark, animoji = self.L_ONet.predict(cropped_ims)
     cls_scores, reg,eye_eyebrow,mouth,multi = self.L_ONet.predict(cropped_ims)
     # print(reg.shape)
     # print(reg)
     #prob belongs to face
     cls_scores = cls_scores[:,1]        
     keep_inds = np.where(cls_scores > self.threshold)[0]        
     if len(keep_inds) > 0:
         #pickout filtered box
         boxes = dets[keep_inds]
         boxes[:, 4] = cls_scores[keep_inds]
         reg = reg[keep_inds]
         # landmark = landmark[keep_inds]
         # animoji = animoji[keep_inds]
         eye_eyebrow = eye_eyebrow[keep_inds]
         mouth = mouth[keep_inds]
         multi = multi[keep_inds]
         
     else:
         # return None, None, None, None, None
         return None, None, None,None,None,None
     
     wh = boxes[:,2:4] - boxes[:,0:2] + 1
     xy = boxes[:,0:2]
     # landmark = landmark.reshape(-1,5,2)*wh[:,None,:] + xy[:,None,:]
     # animoji = animoji.reshape(-1,70,2)*wh[:,None,:] + xy[:,None,:]       
     # eye = eye.reshape(-1,18,2)*wh[:,None,:] + xy[:,None,:]       
     eye_eyebrow = eye_eyebrow.reshape(-1,36,2)*wh[:,None,:] + xy[:,None,:]       
     mouth = mouth.reshape(-1,20,2)*wh[:,None,:] + xy[:,None,:]       
     multi = multi.reshape(-1,42,2)*wh[:,None,:] + xy[:,None,:]       
     
     boxes_c = calibrate_box(boxes, reg)
     
     
     boxes = boxes[py_nms(boxes, 0.6, "Minimum")]
     keep = py_nms(boxes_c, 0.6, "Minimum")
     boxes_c = boxes_c[keep]
     # landmark = landmark[keep]
     # animoji = animoji[keep]
     # eye = eye[keep]
     eye_eyebrow = eye_eyebrow[keep]
     mouth = mouth[keep]
     multi = multi[keep]
     # return boxes, boxes_c, landmark, animoji, reg
     return boxes, boxes_c, eye_eyebrow,mouth,multi, reg
    def predict(self, im, dets):
        h, w, c = im.shape
        dets = convert_to_square(dets)
        dets[:, 0:4] = np.round(dets[:, 0:4])

        [dy, edy, dx, edx, y, ey, x, ex, tmpw, tmph] = pad(dets, w, h)
        num_boxes = dets.shape[0]
        cropped_ims = np.zeros((num_boxes, self.net_size, self.net_size, 3),
                               dtype=np.float32)
        for i in range(num_boxes):
            tmp = np.zeros((tmph[i], tmpw[i], 3), dtype=np.uint8)
            tmp[dy[i]:edy[i] + 1, dx[i]:edx[i] + 1, :] = im[y[i]:ey[i] + 1,
                                                            x[i]:ex[i] + 1, :]
            cropped_ims[i, :, :, :] = (
                cv2.resize(tmp, (self.net_size, self.net_size)) - 127.5) / 128
        cls_scores, reg, _, _ = self.RNet.predict(cropped_ims)
        cls_scores = cls_scores[:, 1]
        keep_inds = np.where(cls_scores > self.threshold)[0]
        if len(keep_inds) > 0:
            boxes = dets[keep_inds]
            boxes[:, 4] = cls_scores[keep_inds]
            reg = reg[keep_inds]
        else:
            return None, None, None

        keep = py_nms(boxes, 0.6)
        boxes = boxes[keep]
        boxes_c = calibrate_box(boxes, reg[keep])
        return boxes, boxes_c, None
Exemple #3
0
    def predict(self, im, dets):
        threshold=0.6
        net_size = 24
    
        h, w, c = im.shape
        dets = convert_to_square(dets)
        dets[:, 0:4] = np.round(dets[:, 0:4])

        [dy, edy, dx, edx, y, ey, x, ex, tmpw, tmph] = pad(dets, w, h)
        num_boxes = dets.shape[0]
        cropped_ims = np.zeros((num_boxes, net_size, net_size, 3), dtype=np.float32)
        for i in range(num_boxes):
            tmp = np.zeros((tmph[i], tmpw[i], 3), dtype=np.uint8)
            tmp[dy[i]:edy[i] + 1, dx[i]:edx[i] + 1, :] = im[y[i]:ey[i] + 1, x[i]:ex[i] + 1, :]
            cropped_ims[i, :, :, :] = (cv2.resize(tmp, (net_size, net_size))-127.5) / 128
            
            
        cls_scores = []
        reg = []
        
        for img_ in cropped_ims:
            cls_scores_i, reg_i,_ = self.forward(img_.transpose(2,0,1),None)
            cls_scores.append(cls_scores_i.reshape(-1))
            reg.append(reg_i.reshape(-1))
            
        cls_scores = np.asarray(cls_scores)
        reg = np.asarray(reg)
        cls_scores = cls_scores[:,1]
        keep_inds = np.where(cls_scores > threshold)[0]
        if len(keep_inds) > 0:
            boxes = dets[keep_inds]
            boxes[:, 4] = cls_scores[keep_inds]
            reg = reg[keep_inds]
        else:
            return None, None, None
        
        
        keep = py_nms(boxes, 0.6)
        boxes = boxes[keep]
        boxes_c = calibrate_box(boxes, reg[keep])
        return boxes, boxes_c, None
Exemple #4
0
    def predict(self, im, dets):

        h, w, c = im.shape
        dets = convert_to_square(dets)
        dets[:, 0:4] = np.round(dets[:, 0:4])
        [dy, edy, dx, edx, y, ey, x, ex, tmpw, tmph] = pad(dets, w, h)
        num_boxes = dets.shape[0]
        cropped_ims = np.zeros((num_boxes, self.net_size, self.net_size, 3),
                               dtype=np.float32)
        for i in range(num_boxes):
            tmp = np.zeros((tmph[i], tmpw[i], 3), dtype=np.uint8)
            tmp[dy[i]:edy[i] + 1, dx[i]:edx[i] + 1, :] = im[y[i]:ey[i] + 1,
                                                            x[i]:ex[i] + 1, :]
            cropped_ims[i, :, :, :] = (
                cv2.resize(tmp, (self.net_size, self.net_size)) - 127.5) / 128

        # cls_scores, reg,landmark,_ = self.ONet.predict(cropped_ims)
        cls_scores, reg, _ = self.ONet.predict(cropped_ims)
        #prob belongs to face
        cls_scores = cls_scores[:, 1]
        keep_inds = np.where(cls_scores > self.threshold)[0]
        if len(keep_inds) > 0:
            #pickout filtered box
            boxes = dets[keep_inds]
            boxes[:, 4] = cls_scores[keep_inds]
            reg = reg[keep_inds]
            # landmark = landmark[keep_inds]
        else:
            return None, None, None, None

        wh = boxes[:, 2:4] - boxes[:, 0:2] + 1
        xy = boxes[:, 0:2]
        # landmark = landmark.reshape(-1,5,2)*wh[:,None,:] + xy[:,None,:]
        boxes_c = calibrate_box(boxes, reg)

        boxes = boxes[py_nms(boxes, 0.6, "Minimum")]
        keep = py_nms(boxes_c, 0.6, "Minimum")
        boxes_c = boxes_c[keep]
        # landmark = landmark[keep]
        # return boxes, boxes_c, landmark, None
        return boxes, boxes_c, None
Exemple #5
0
 def predict(self, im, dets_):
     dets = dets_.copy()
     net_size = 48
     threshold = 0.7
     expand = 0.3
     
     h, w, c = im.shape
     dets = convert_to_square(dets, expand)
     dets[:, 0:4] = np.round(dets[:, 0:4])
     [dy, edy, dx, edx, y, ey, x, ex, tmpw, tmph] = pad(dets, w, h)
     num_boxes = dets.shape[0]
     cropped_ims = np.zeros((num_boxes, net_size, net_size, 3), dtype=np.float32)
     for i in range(num_boxes):
         tmp = np.zeros((tmph[i], tmpw[i], 3), dtype=np.uint8)
         tmp[dy[i]:edy[i] + 1, dx[i]:edx[i] + 1, :] = im[y[i]:ey[i] + 1, x[i]:ex[i] + 1, :]
         cropped_ims[i, :, :, :] = (cv2.resize(tmp, (net_size, net_size))-127.5) / 128
     
     cls_scores = []
     reg = []
     landmark = []
     animoji = []
     
     for img_ in cropped_ims:
         cls_scores_i, reg_i,landmark_i, animoji_i = self.forward(img_.transpose(2,0,1),None)
         cls_scores.append(cls_scores_i.reshape(-1))
         reg.append(reg_i.reshape(-1))
         landmark.append(landmark_i.reshape(-1))
         animoji.append(animoji_i.reshape(-1))
         
     cls_scores = np.asarray(cls_scores)
     reg = np.asarray(reg)
     landmark = np.asarray(landmark)
     animoji = np.asarray(animoji)
     # print(reg.shape)
     # print(reg)
     # f.close()
     #prob belongs to face
     cls_scores = cls_scores[:,1]        
     keep_inds = np.where(cls_scores > threshold)[0]        
     if len(keep_inds) > 0:
         #pickout filtered box
         boxes = dets[keep_inds]
         boxes[:, 4] = cls_scores[keep_inds]
         reg = reg[keep_inds]
         landmark = landmark[keep_inds]
         animoji = animoji[keep_inds]
     else:
         return None, None, None
     
     wh = boxes[:,2:4] - boxes[:,0:2] + 1
     xy = boxes[:,0:2]
     landmark = landmark.reshape(-1,5,2)*wh[:,None,:] + xy[:,None,:]  
     animoji = animoji.reshape(-1,70,2)*wh[:,None,:] + xy[:,None,:]         
     boxes_c = calibrate_box(boxes, reg)
     
     
     boxes = boxes[py_nms(boxes, 0.6, "Minimum")]
     keep = py_nms(boxes_c, 0.6, "Minimum")
     boxes_c = boxes_c[keep]
     landmark = landmark[keep]
     
     return boxes, boxes_c, landmark, animoji,reg