コード例 #1
0
def test_net(gpuId):
    prefix = [
        os.path.join(mtnnDir, 'pnet'),
        os.path.join(mtnnDir, 'rnet'),
        os.path.join(mtnnDir, 'onet')
    ]
    epoch = [16, 16, 16]
    batch_size = [2048, 256, 16]
    ctx = mx.gpu(gpuId)
    thresh = [0.5, 0.5, 0.7]
    min_face_size = 40
    stride = 2

    args_p, auxs_p = load_param(prefix[0], epoch[0], convert=True, ctx=ctx)
    PNet = FcnDetector(P_Net("test"), ctx, args_p, auxs_p)

    # load rnet model
    args_r, auxs_r = load_param(prefix[1], epoch[0], convert=True, ctx=ctx)
    RNet = Detector(R_Net("test"), 24, batch_size[1], ctx, args_r, auxs_r)

    # load onet model
    args_o, auxs_o = load_param(prefix[2], epoch[2], convert=True, ctx=ctx)
    ONet = Detector(O_Net("test"), 48, batch_size[2], ctx, args_o, auxs_o)
    return MtcnnDetector(
        detectors=[PNet, RNet, ONet],
        ctx=ctx,
        min_face_size=min_face_size,
        stride=stride,
        threshold=thresh,
        slide_window=False)
コード例 #2
0
def mtcnn_model(prefix, epoch, batch_size, ctx, thresh, min_face, stride,
                slide_window):
    detectors = [None, None, None]

    # load pnet model
    args, auxs = load_param(prefix[0], epoch[0], convert=True, ctx=ctx)
    if slide_window:
        PNet = Detector(P_Net("test"), 12, batch_size[0], ctx, args, auxs)
    else:
        PNet = FcnDetector(P_Net("test"), ctx, args, auxs)
    detectors[0] = PNet

    # load rnet model
    args, auxs = load_param(prefix[1], epoch[0], convert=True, ctx=ctx)
    RNet = Detector(R_Net("test"), 24, batch_size[1], ctx, args, auxs)
    detectors[1] = RNet

    # load onet model
    args, auxs = load_param(prefix[2], epoch[2], convert=True, ctx=ctx)
    ONet = Detector(O_Net("test"), 48, batch_size[2], ctx, args, auxs)
    detectors[2] = ONet

    mtcnn_detector = MtcnnDetector(detectors=detectors,
                                   ctx=ctx,
                                   min_face_size=min_face,
                                   stride=stride,
                                   threshold=thresh,
                                   slide_window=slide_window)
    return mtcnn_detector
コード例 #3
0
def creat_mtcnn_detector(prefix, epoch, batch_size, test_mode, thresh,
                         min_face_size, ctx):
    detectors = [None, None, None]
    # load pnet model
    args, auxs = load_param(prefix[0], epoch[0], convert=True, ctx=ctx)
    PNet = FcnDetector(P_Net20("test"), ctx, args, auxs)
    detectors[0] = PNet

    # load rnet model
    if test_mode in ["onet", "hardrnet", "hardonet"]:
        args, auxs = load_param(prefix[1], epoch[1], convert=True, ctx=ctx)
        RNet = Detector(R_Net("test"), 24, batch_size[1], ctx, args, auxs)
        detectors[1] = RNet

    # load onet model
    if test_mode == "hardonet":
        args, auxs = load_param(prefix[2], epoch[2], convert=True, ctx=ctx)
        ONet = Detector(O_Net("test", False), 48, batch_size[2], ctx, args,
                        auxs)
        detectors[2] = ONet

    mtcnn_detector = MtcnnDetector(detectors=detectors,
                                   ctx=ctx,
                                   min_face_size=min_face_size,
                                   stride=4,
                                   threshold=thresh,
                                   slide_window=False)
    return mtcnn_detector
コード例 #4
0
def test_net(root_path,
             dataset_path,
             image_set,
             prefix,
             epoch,
             batch_size,
             test_mode="rnet",
             thresh=[0.6, 0.6, 0.7],
             min_face_size=24,
             stride=2,
             slide_window=False,
             shuffle=False,
             vis=False):

    detectors = [None, None, None]

    model_path = ['%s-%s' % (x, y) for x, y in zip(prefix, epoch)]
    # load pnet model
    if slide_window:
        PNet = Detector(P_Net, 12, batch_size[0], model_path[0])
    else:
        PNet = FcnDetector(P_Net, model_path[0])
    detectors[0] = PNet

    # load rnet model
    if test_mode in ["rnet", "onet"]:
        RNet = Detector(R_Net, 24, batch_size[1], model_path[1])
        detectors[1] = RNet

    # load onet model
    if test_mode == "onet":
        ONet = Detector(O_Net, 48, batch_size[2], model_path[2])
        detectors[2] = ONet

    mtcnn_detector = MtcnnDetector(detectors=detectors,
                                   min_face_size=min_face_size,
                                   stride=stride,
                                   threshold=thresh,
                                   slide_window=slide_window)

    imdb = IMDB("wider", image_set, root_path, dataset_path, 'test')
    gt_imdb = imdb.gt_imdb()

    test_data = TestLoader(gt_imdb)
    detections = mtcnn_detector.detect_face(imdb, test_data, vis=vis)

    if test_mode == "pnet":
        net = "rnet"
    elif test_mode == "rnet":
        net = "onet"

    save_path = os.path.join(data_dir, net)
    if not os.path.exists(save_path):
        os.mkdir(save_path)
    save_file = os.path.join(save_path, "detections.pkl")
    with open(save_file, 'wb') as f:
        cPickle.dump(detections, f, cPickle.HIGHEST_PROTOCOL)

    save_hard_example(net)
コード例 #5
0
ファイル: pnet_val.py プロジェクト: jacke121/FaceTracker-1
def test_net(root_path,
             dataset_path,
             image_set,
             prefix,
             epoch,
             batch_size,
             ctx,
             test_mode="onet",
             thresh=[0.6, 0.6, 0.7],
             min_face_size=24,
             stride=2,
             slide_window=False,
             shuffle=False,
             vis=False):

    detectors = [None, None, None]

    # load pnet model
    args, auxs = load_param(prefix[0], epoch[0], convert=True, ctx=ctx)
    if slide_window:
        PNet = Detector(P_Net("test"), 12, batch_size[0], ctx, args, auxs)
    else:
        PNet = FcnDetector(P_Net("test"), ctx, args, auxs)
    detectors[0] = PNet

    # load rnet model
    if test_mode in ["rnet", "onet"]:
        args, auxs = load_param(prefix[1], epoch[1], convert=True, ctx=ctx)
        RNet = Detector(R_Net("test"), 24, batch_size[1], ctx, args, auxs)
        detectors[1] = RNet

    # load onet model
    if test_mode == "onet":
        args, auxs = load_param(prefix[2], epoch[2], convert=True, ctx=ctx)
        ONet = Detector(O_Net("test"), 48, batch_size[2], ctx, args, auxs)
        detectors[2] = ONet

    mtcnn_detector = MtcnnDetector(detectors=detectors,
                                   ctx=ctx,
                                   min_face_size=min_face_size,
                                   stride=stride,
                                   threshold=thresh,
                                   slide_window=slide_window)

    imdb = IMDB("fddb", image_set, root_path, dataset_path, 'test')
    gt_imdb = imdb.gt_imdb()

    test_data = TestLoader(gt_imdb)
    print('1')
    # 得到的detections格式为:[[第一张图的所有预测框],[第二张图片的所有预测框],[第三张图片的所有预测框],...,[最后一张图片的所有预测框]],每个预测框为[x1,y1,x2,y2,score],score为该预测框为人脸的分数
    detections = mtcnn_detector.detect_face(imdb, test_data, vis=vis)
    save_path = "/Users/qiuxiaocong/Downloads/mtcnn1"
    if not os.path.exists(save_path):
        os.mkdir(save_path)
    save_file = os.path.join(save_path, "detections_onet_0009_givenPRnet.pkl")
    with open(save_file, 'wb') as f:
        pickle.dump(detections, f, pickle.HIGHEST_PROTOCOL)
    print('detections saved done!')
コード例 #6
0
def test_net(prefix,
             epoch,
             batch_size,
             ctx,
             thresh=[0.6, 0.6, 0.7],
             min_face_size=24,
             stride=4,
             slide_window=False):

    detectors = [None, None, None]

    # load pnet model
    args, auxs = load_param(prefix[0], epoch[0], convert=True, ctx=ctx)
    if slide_window:
        PNet = Detector(P_Net20("test"), 20, batch_size[0], ctx, args, auxs)
    else:
        PNet = FcnDetector(P_Net20("test"), ctx, args, auxs)
    detectors[0] = PNet

    # load rnet model
    args, auxs = load_param(prefix[1], epoch[1], convert=True, ctx=ctx)
    RNet = Detector(R_Net("test"), 24, batch_size[1], ctx, args, auxs)
    detectors[1] = RNet

    # load onet model
    args, auxs = load_param(prefix[2], epoch[2], convert=True, ctx=ctx)
    ONet = Detector(O_Net("test"), 48, batch_size[2], ctx, args, auxs)
    detectors[2] = ONet

    mtcnn_detector = MtcnnDetector(detectors=detectors,
                                   ctx=ctx,
                                   min_face_size=min_face_size,
                                   stride=stride,
                                   threshold=thresh,
                                   slide_window=slide_window)

    img = cv2.imread('test01.jpg')
    t1 = time.time()

    boxes, boxes_c = mtcnn_detector.detect_pnet20(img)
    boxes, boxes_c = mtcnn_detector.detect_rnet(img, boxes_c)
    boxes, boxes_c = mtcnn_detector.detect_onet(img, boxes_c)

    print 'time: ', time.time() - t1

    if boxes_c is not None:
        draw = img.copy()
        font = cv2.FONT_HERSHEY_SIMPLEX
        for b in boxes_c:
            cv2.rectangle(draw, (int(b[0]), int(b[1])), (int(b[2]), int(b[3])),
                          (0, 255, 255), 1)
            cv2.putText(draw, '%.3f' % b[4], (int(b[0]), int(b[1])), font, 0.4,
                        (255, 255, 255), 1)

        cv2.imshow("detection result", draw)
        cv2.waitKey(0)
コード例 #7
0
def test_net(root_path,
             dataset_path,
             prefix,
             epoch,
             batch_size,
             ctx,
             test_mode="onet",
             thresh=[0.6, 0.6, 0.7],
             min_face_size=24,
             stride=2,
             slide_window=False,
             shuffle=False,
             vis=False):

    detectors = [None, None, None]

    # load pnet model
    args, auxs = load_param(prefix[0], epoch[0], convert=False, ctx=ctx)
    if slide_window:
        PNet = Detector(P_Net("test"), 12, batch_size[0], ctx, args, auxs)
    else:
        PNet = FcnDetector(P_Net("test"), ctx, args, auxs)
    detectors[0] = PNet

    # load rnet model
    if test_mode in ["rnet", "onet"]:
        args, auxs = load_param(prefix[1], epoch[0], convert=False, ctx=ctx)
        RNet = Detector(R_Net("test"), 24, batch_size[1], ctx, args, auxs)
        detectors[1] = RNet

    # load onet model
    if test_mode == "onet":
        args, auxs = load_param(prefix[2], epoch[2], convert=False, ctx=ctx)
        ONet = Detector(O_Net("test"), 48, batch_size[2], ctx, args, auxs)
        detectors[2] = ONet

    mtcnn_detector = MtcnnDetector(detectors=detectors,
                                   ctx=ctx,
                                   min_face_size=min_face_size,
                                   stride=stride,
                                   threshold=thresh,
                                   slide_window=slide_window)

    for i in range(1, 11):
        image_set = "fold-" + str(i).zfill(2)
        imdb = IMDB("fddb", image_set, root_path, dataset_path, 'test')
        gt_imdb = imdb.gt_imdb()

        test_data = TestLoader(gt_imdb)
        all_boxes = mtcnn_detector.detect_face(imdb, test_data, vis=vis)
        imdb.write_results(all_boxes)
コード例 #8
0
def test_net(root_path, dataset_path, image_set, prefix, epoch,
             batch_size, ctx, test_mode="rnet",
             thresh=[0.6, 0.6, 0.7], min_face_size=24,
             stride=2, slide_window=False, shuffle=False, vis=False):

    detectors = [None, None, None]

    # load pnet model
    args, auxs = load_param(prefix[0], epoch[0], convert=True, ctx=ctx)
    if slide_window:
        PNet = Detector(P_Net("test"), 12, batch_size[0], ctx, args, auxs)
    else:
        PNet = FcnDetector(P_Net("test"), ctx, args, auxs)
    detectors[0] = PNet

    # load rnet model
    if test_mode in ["rnet", "onet"]:
        args, auxs = load_param(prefix[1], epoch[0], convert=True, ctx=ctx)
        RNet = Detector(R_Net("test"), 24, batch_size[1], ctx, args, auxs)
        detectors[1] = RNet

    # load onet model
    if test_mode == "onet":
        args, auxs = load_param(prefix[2], epoch[2], convert=True, ctx=ctx)
        ONet = Detector(O_Net("test"), 48, batch_size[2], ctx, args, auxs)
        detectors[2] = ONet

    mtcnn_detector = MtcnnDetector(detectors=detectors, ctx=ctx, min_face_size=min_face_size,
                                   stride=stride, threshold=thresh, slide_window=slide_window)


    imdb = IMDB("wider", image_set, root_path, dataset_path, 'test')
    gt_imdb = imdb.gt_imdb()

    test_data = TestLoader(gt_imdb)
    detections = mtcnn_detector.detect_face(imdb, test_data, vis=vis)

    if test_mode == "pnet":
        net = "rnet"
    elif test_mode == "rnet":
        net = "onet"

    save_path = "./prepare_data/%s"%net
    if not os.path.exists(save_path):
        os.mkdir(save_path)
    save_file = os.path.join(save_path, "detections.pkl")
    with open(save_file, 'wb') as f:
        cPickle.dump(detections, f, cPickle.HIGHEST_PROTOCOL)

    save_hard_example(net)
コード例 #9
0
def test_net(root_path,
             dataset_path,
             prefix,
             epoch,
             batch_size,
             test_mode="onet",
             thresh=[0.6, 0.6, 0.7],
             min_face_size=24,
             stride=2,
             slide_window=False,
             shuffle=False,
             vis=False):

    detectors = [None, None, None]

    model_path = ['%s-%s' % (x, y) for x, y in zip(prefix, epoch)]
    # load pnet model
    if slide_window:
        PNet = Detector(P_Net, 12, batch_size[0], model_path[0])
    else:
        PNet = FcnDetector(P_Net, model_path[0])
    detectors[0] = PNet

    # load rnet model
    if test_mode in ["rnet", "onet"]:
        RNet = Detector(R_Net, 24, batch_size[1], model_path[1])
        detectors[1] = RNet

    # load onet model
    if test_mode == "onet":
        ONet = Detector(O_Net, 48, batch_size[2], model_path[2])
        detectors[2] = ONet

    mtcnn_detector = MtcnnDetector(detectors=detectors,
                                   min_face_size=min_face_size,
                                   stride=stride,
                                   threshold=thresh,
                                   slide_window=slide_window)
    for i in range(1, 11):
        image_set = "fold-" + str(i).zfill(2)
        imdb = IMDB("fddb", image_set, root_path, dataset_path, 'test')
        gt_imdb = imdb.gt_imdb()
        test_data = TestLoader(gt_imdb)
        all_boxes = mtcnn_detector.detect_face(imdb, test_data, vis=vis)
        imdb.write_results(all_boxes)
コード例 #10
0
def load_model(model_path):
    """
    根据指定的模型路径加载mtcnn和DenseNet的模型
    :param model_path:
    :return:
    """
    batch_size = [1, 1, 1]
    model = DenseNet(24,
                     40,
                     3,
                     0.8,
                     'DenseNet-BC',
                     reduction=0.5,
                     bc_mode=True)
    detectors = [None, None, None]
    # 加载用于分类的DenseNet模型
    model.load_model()

    # 计算出PNet、RNet、ONet模型的路径
    prefix = ['pnet/pnet', 'rnet/rnet', 'onet/onet']
    prefix = [os.path.join(model_path, x) for x in prefix]
    epoch = [7, 7, 7]
    model_path = ['%s-%s' % (x, y) for x, y in zip(prefix, epoch)]

    # 加载PNet
    p_net = FcnDetector(P_Net, model_path[0])
    detectors[0] = p_net

    # 加载RNet
    r_net = Detector(R_Net, 24, batch_size[1], model_path[1])
    detectors[1] = r_net

    # 加载ONet
    o_net = Detector(O_Net, 48, batch_size[2], model_path[2])
    detectors[2] = o_net

    # 建立MTCNN检测器
    mtcnn_detector = MtcnnDetector(detectors=detectors,
                                   min_face_size=24,
                                   stride=2,
                                   threshold=(0.6, 0.6, 0.7),
                                   slide_window=False)

    return model, mtcnn_detector
コード例 #11
0
def test(prefix,
         epoch,
         batch_size,
         test_mode="onet",
         thresh=[0.6, 0.6, 0.7],
         min_face_size=24,
         stride=2,
         slide_window=False,
         shuffle=False,
         vis=False):
    #img = cv2.imread("./1111.jpg")
    detectors = [None, None, None]
    model_path = ['%s-%s' % (x, y) for x, y in zip(prefix, epoch)]
    print(model_path)
    # load pnet model
    if slide_window:
        PNet = Detector(P_Net, 12, batch_size[0], model_path[0])
    else:
        PNet = FcnDetector(P_Net, model_path[0])
    detectors[0] = PNet

    # load rnet model
    if test_mode in ["rnet", "onet"]:
        RNet = Detector(R_Net, 24, batch_size[1], model_path[1])
        detectors[1] = RNet

    # load onet model
    if test_mode == "onet":
        ONet = Detector(O_Net, 48, batch_size[2], model_path[2])
        detectors[2] = ONet

    mtcnn_detector = MtcnnDetector(detectors=detectors,
                                   min_face_size=min_face_size,
                                   stride=stride,
                                   threshold=thresh,
                                   slide_window=slide_window)
    for name in os.listdir("C:\\Users\\JINNIU\\Desktop\\liuzhen\\qinghua"):
        img = cv2.imread(
            os.path.join("C:\\Users\\JINNIU\\Desktop\\liuzhen\\qinghua", name))
        boxes, boxes_c = mtcnn_detector.detect(img)
        visssss(img, boxes_c, name, thresh=0.998)
コード例 #12
0
    def loadModel(self):
        self.model = face_embedding.FaceModel(self.args)
        detectors = [None, None, None]
        ctx = mx.gpu(0)
        prefix = ['mtcnnmodel/pnet', 'mtcnnmodel/rnet', 'mtcnnmodel/onet']
        epoch = [16, 16, 16]
        batch_size = [2048, 256, 16]
        thresh = [0.6, 0.6, 0.7]
        min_face_size = 24
        stride = 2
        slide_window = False
        # load pnet model
        args, auxs = load_param(prefix[0], epoch[0], convert=True, ctx=ctx)
        if slide_window:
            PNet = Detector(P_Net("test"), 12, batch_size[0], ctx, args, auxs)
        else:
            PNet = FcnDetector(P_Net("test"), ctx, args, auxs)
        detectors[0] = PNet

        # load rnet model
        args, auxs = load_param(prefix[1], epoch[0], convert=True, ctx=ctx)
        RNet = Detector(R_Net("test"), 24, batch_size[1], ctx, args, auxs)
        detectors[1] = RNet

        # load onet model
        args, auxs = load_param(prefix[2], epoch[2], convert=True, ctx=ctx)
        ONet = Detector(O_Net("test"), 48, batch_size[2], ctx, args, auxs)
        detectors[2] = ONet

        self.mtcnn_detector = MtcnnDetector(detectors=detectors,
                                            ctx=ctx,
                                            min_face_size=min_face_size,
                                            stride=stride,
                                            threshold=thresh,
                                            slide_window=slide_window)
        #print (self.model)
        self.id_dataset, self.idnums = self.get_id_data(self.args.id_dir)
コード例 #13
0
def test_net(prefix=['model/pnet', 'model/rnet', 'model/onet'],
             epoch=[16, 16, 16],
             batch_size=[2048, 256, 16],
             ctx=mx.cpu(0),
             thresh=[0.6, 0.6, 0.7],
             min_face_size=24,
             stride=2,
             camera_path='0'):

    # load pnet model
    args, auxs = load_param(prefix[0], epoch[0], convert=True, ctx=ctx)
    PNet = FcnDetector(P_Net("test"), ctx, args, auxs)

    # load rnet model
    args, auxs = load_param(prefix[1], epoch[0], convert=True, ctx=ctx)
    RNet = Detector(R_Net("test"), 24, batch_size[1], ctx, args, auxs)

    # load onet model
    args, auxs = load_param(prefix[2], epoch[2], convert=True, ctx=ctx)
    ONet = Detector(O_Net("test"), 48, batch_size[2], ctx, args, auxs)

    mtcnn_detector = MtcnnDetector(detectors=[PNet, RNet, ONet],
                                   ctx=ctx,
                                   min_face_size=min_face_size,
                                   stride=stride,
                                   threshold=thresh,
                                   slide_window=False)

    try:
        capture = cv2.VideoCapture(int(camera_path))
    except ValueError as e:
        capture = cv2.VideoCapture(camera_path)

    try:
        first_loop = True
        while (capture.isOpened()):
            ret, img = capture.read()
            if img is None:
                continue

            # Initialize video writing
            if (first_loop):
                first_loop = False
                fourcc = cv2.VideoWriter_fourcc(*'H264')
                h, w = img.shape[:2]
                writer = cv2.VideoWriter('test.mkv', fourcc, 10, (w, h), True)

            t1 = time.time()

            boxes, boxes_c = mtcnn_detector.detect_pnet(img)
            boxes, boxes_c = mtcnn_detector.detect_rnet(img, boxes_c)
            boxes, boxes_c = mtcnn_detector.detect_onet(img, boxes_c)

            print('shape: ', img.shape, '--', 'time: ', time.time() - t1)

            draw = img.copy()
            if boxes_c is not None:
                font = cv2.FONT_HERSHEY_SIMPLEX
                for b in boxes_c:
                    cv2.rectangle(draw, (int(b[0]), int(b[1])),
                                  (int(b[2]), int(b[3])), (0, 255, 255), 1)
                    cv2.putText(draw, '%.3f' % b[4], (int(b[0]), int(b[1])),
                                font, 0.4, (255, 255, 255), 1)

            writer.write(draw)

    except KeyboardInterrupt as e:
        print("KeyboardInterrupt")
        writer.release()
コード例 #14
0
def test_net(prefix,
             epoch,
             batch_size,
             ctx,
             thresh=[0.6, 0.6, 0.7],
             min_face_size=24,
             stride=2,
             slide_window=False):

    detectors = [None, None, None]

    # load pnet model
    args, auxs = load_param(prefix[0], epoch[0], convert=True, ctx=ctx)
    if slide_window:  # 使用滑动窗口(MTCNN的P_NET不使用了滑动窗口,而是全卷积网络)
        PNet = Detector(P_Net("test"), 12, batch_size[0], ctx, args, auxs)
    else:
        PNet = FcnDetector(P_Net("test"), ctx, args, auxs)
    detectors[0] = PNet

    # load rnet model
    args, auxs = load_param(prefix[1], epoch[1], convert=True, ctx=ctx)
    RNet = Detector(R_Net("test"), 24, batch_size[1], ctx, args, auxs)
    detectors[1] = RNet

    # load onet model
    args, auxs = load_param(prefix[2], epoch[2], convert=True, ctx=ctx)
    ONet = Detector(O_Net("test"), 48, batch_size[2], ctx, args, auxs)
    detectors[2] = ONet

    mtcnn_detector = MtcnnDetector1(detectors=detectors,
                                    ctx=ctx,
                                    min_face_size=min_face_size,
                                    stride=stride,
                                    threshold=thresh,
                                    slide_window=slide_window)

    # img = cv2.imread('test01.jpg')  # 读取图片
    # img = cv2.imread('zhang.jpeg')  # 读取图片
    # img = cv2.imread('curry.jpg')  # 读取图片
    # img = cv2.imread('physics.jpg')  # 读取图片
    # img = cv2.imread('000007.jpg')  # 读取图片
    # img = cv2.imread('test01.jpg')  # 读取图片
    # img = cv2.imread('NBA98.jpg')
    # img = cv2.imread('download.jpg')
    # img = cv2.imread('/Users/qiuxiaocong/Downloads/WIDER_train/images/7--Cheering/7_Cheering_Cheering_7_16.jpg')
    # img = cv2.imread('/Users/qiuxiaocong/Downloads/WIDER_train/images/11--Meeting/11_Meeting_Meeting_11_Meeting_Meeting_11_77.jpg')
    # img = cv2.imread('/Users/qiuxiaocong/Downloads/3Dfacedeblurring/dataset_test/falling1/input/00136.png')
    img = cv2.imread('/Users/qiuxiaocong/Downloads/facetrack_python/error.jpg')

    boxes, boxes_c = mtcnn_detector.detect_pnet(img)
    boxes, boxes_c = mtcnn_detector.detect_rnet(img, boxes_c)
    boxes, boxes_c = mtcnn_detector.detect_onet(img, boxes_c)
    # print(boxes_c)  # x1 y1 x2 y2

    original_detect = []
    crop_list = []
    detect_len_list = []
    nd_array = []
    score_list = []

    if boxes_c is not None:
        draw = img.copy()
        font = cv2.FONT_HERSHEY_SIMPLEX  # Python 一种字体
        idx = 0

        for b in boxes_c:  # nms和bbr之后的结果
            # 在draw上绘制矩形框(左上角坐标+右下角坐标)
            b_new0 = np.array(b[0:4])  # 添加检测框
            original_detect.append(b_new0)
            b_new = convert_to_square(b_new0)  # 添加送入到landmark net的48*48大小的框
            crop_list.append(b_new)
            score_list.append(b[4])

            # cv2.rectangle(draw, (int(b_new[0]), int(b_new[1])), (int(b_new[2]), int(b_new[3])),
            #               (0, 255, 255), 1)
            # # 在draw上添加文字
            # cv2.putText(draw, '%.3f'%b[4], (int(b[0]), int(b[1])), font, 0.4, (255, 255, 255), 1)
            # cv2.imshow("detection result", draw)

            img_draw = img[int(b_new[1]):int(b_new[3]),
                           int(b_new[0]):int(b_new[2])]
            detect_len = min(img_draw.shape[0], img_draw.shape[1])
            # print(img_draw.shape[0], img_draw.shape[1])
            if detect_len != 0:
                detect_len_list.append(detect_len)

                img_resized = cv2.resize(img_draw, (48, 48))
                # cv2.imshow("detection result", draw)
                # print('img_resized type is :{}'.format(type(img_resized)))
                nd_array.append(img_resized)

                # cv2.imwrite("detection_result{}.jpg".format(idx), img_resized)
                # cv2.waitKey(0)
                idx = idx + 1

    return crop_list, detect_len_list, original_detect, idx, img, nd_array
コード例 #15
0
ファイル: demo.py プロジェクト: jacke121/FaceTracker-1
def test_net(prefix,
             epoch,
             batch_size,
             ctx,
             thresh=[0.6, 0.6, 0.7],
             min_face_size=24,
             stride=2,
             slide_window=False):

    detectors = [None, None, None]

    # load pnet model
    args, auxs = load_param(prefix[0], epoch[0], convert=True, ctx=ctx)
    if slide_window:  # 使用滑动窗口(MTCNN的P_NET不使用了滑动窗口,而是全卷积网络)
        PNet = Detector(P_Net("test"), 12, batch_size[0], ctx, args, auxs)
    else:
        PNet = FcnDetector(P_Net("test"), ctx, args, auxs)
    detectors[0] = PNet

    # load rnet model
    args, auxs = load_param(prefix[1], epoch[1], convert=True, ctx=ctx)
    RNet = Detector(R_Net("test"), 24, batch_size[1], ctx, args, auxs)
    detectors[1] = RNet

    # load onet model
    args, auxs = load_param(prefix[2], epoch[2], convert=True, ctx=ctx)
    ONet = Detector(O_Net("test"), 48, batch_size[2], ctx, args, auxs)
    detectors[2] = ONet

    mtcnn_detector = MtcnnDetector(detectors=detectors,
                                   ctx=ctx,
                                   min_face_size=min_face_size,
                                   stride=stride,
                                   threshold=thresh,
                                   slide_window=slide_window)

    # img = cv2.imread('test01.jpg')  # 读取图片
    # img = cv2.imread('000007.jpg')  # 读取图片
    # img = cv2.imread('crow.jpg')  # 读取图片
    img = cv2.imread('physics.jpg')  # 读取图片

    t1 = time.time()  # 开始计时

    boxes, boxes_c = mtcnn_detector.detect_pnet(img)
    boxes, boxes_c = mtcnn_detector.detect_rnet(img, boxes_c)
    boxes, boxes_c = mtcnn_detector.detect_onet(img, boxes_c)

    print(boxes_c)

    print('time: ', time.time() - t1)

    if boxes_c is not None:
        draw = img.copy()
        font = cv2.FONT_HERSHEY_SIMPLEX  # Python 一种字体
        for b in boxes_c:  # nms和bbr之后的结果
            # for b in boxes:       # nms和bbr之前的结果
            # 在draw上绘制矩形框(左上角坐标+右下角坐标)
            cv2.rectangle(draw, (int(b[0]), int(b[1])), (int(b[2]), int(b[3])),
                          (0, 255, 255), 1)
            # 在draw上添加文字
            cv2.putText(draw, '%.3f' % b[4], (int(b[0]), int(b[1])), font, 0.4,
                        (255, 255, 255), 1)

        cv2.imshow("detection result", draw)
        cv2.waitKey(0)
コード例 #16
0
ファイル: mtcnn_facenet.py プロジェクト: lulzsec2012/facenet
def test_net(dataset_path,
             prefix,
             faceRecognize_model,
             epoch,
             batch_size,
             test_mode="onet",
             thresh=[0.6, 0.6, 0.7],
             min_face_size=24,
             margin=44,
             stride=2,
             slide_window=False):

    detectors = [None, None, None]

    model_path = ['%s-%s' % (x, y) for x, y in zip(prefix, epoch)]
    if slide_window:
        PNet = Detector(P_Net, 12, batch_size[0], model_path[0])
    else:
        PNet = FcnDetector(P_Net, model_path[0])
    detectors[0] = PNet
    #load rnet model
    if test_mode in ["rnet", "onet"]:
        detectors[1] = Detector(R_Net, 24, batch_size[1], model_path[1])
    # load onet model
    if test_mode == "onet":
        detectors[2] = Detector(O_Net, 48, batch_size[2], model_path[2])

    # load faceRecognize model
    face_rec = FcnRecognize(faceRecognize_model, data_size=67, batch_size=16)
    mtcnn_detector = MtcnnDetector(detectors=detectors,
                                   min_face_size=min_face_size,
                                   stride=stride,
                                   threshold=thresh,
                                   slide_window=slide_window)
    ######load data
    input_dir0 = '/mllib/ALG/facenet-tensorflow/jz_80val'
    classes1 = os.listdir(input_dir0)
    message_path = []
    for cls1 in classes1:
        classes2_path = os.path.join(input_dir0, cls1)
        try:
            classes2 = os.listdir(classes2_path)
        except Exception as e:
            print e
            continue
        key = cv2.waitKey(1)
        if key == 'q':  ### when keycode is q
            print('====------======\n')
        img_list_tmp = []
        num_id = 0
        image_message = {}
        message = []
        meg_name = [
            'exit_id', 'img_read', 'img_detect', 'face_num', 'face_roi',
            'exit_person', 'score', 'person_name'
        ]
        ##########0 exit_id :Is there an id   ; 1 ,0
        ##########1 img_read :Whether to read successfully image  ; 1 ,0
        ##########2 img_detect :Whether to detect successfully image ; 1 ,0
        ##########3 face_num :The face amount  ; 0, 1, 2, 3, ...
        ##########4 face_roi :The face of a coordinate  ; (x1,y1,w1,h1),(x2,y2,w2,h2) ...
        ##########5 exit_person :The person amount ; 0, 1, 2, 3, ...
        ##########6 score :The person score ; 0, 1, 2, 3, ...
        ##########7 score :The person name ; name0, name1, name2, name3, ...

        for cls2 in classes2:
            classes3_path = os.path.join(classes2_path, cls2)
            print(classes3_path)
            if 1:  #classes2_path == "emb_check" :
                image_message[meg_name[0]] = 1
            else:
                num_id = 0
                image_message[meg_name[0]] = 0
                continue
            try:
                img = cv2.imread(classes3_path)
            except Exception as e:
                print e
                image_message[meg_name[1]] = 0
                continue
            #img = cv2.imread(image_name)#('test01.jpg')
            #img = cv2.imread(input_test+'.jpg')
            #cv2.imshow("img", img)
            #cv2.waitKey(0)
            image_message[meg_name[0]] = 1
            t1 = time.time()
            try:
                boxes, boxes_c = mtcnn_detector.detect_pnet(img)
            except Exception as e:
                image_message[meg_name[2]] = 0
                print e
                print(classes3_path)
                continue
            image_message[meg_name[2]] = 1
            #message.append("img_available")
            if boxes_c is None:
                image_message[meg_name[3]] = 0
                continue
            boxes, boxes_c = mtcnn_detector.detect_rnet(img, boxes_c)
            if boxes_c is None:
                image_message[meg_name[3]] = 0
                continue
            boxes, boxes_c = mtcnn_detector.detect_onet(img, boxes_c)
            if boxes_c is None:
                image_message[meg_name[3]] = 0
                continue
            image_message[meg_name[3]] = len(boxes_c)
            print('box_num:%d', len(boxes_c))
            print 'time: ', time.time() - t1
            message.append("have_face")
            num_box = []
            if boxes_c is not None:
                img0 = misc.imread(classes3_path)
                img_size = np.asarray(img0.shape)[0:2]

                nrof_samples = len(boxes_c)

                for det in boxes_c:
                    bb = np.zeros(4, dtype=np.int32)
                    margin_tmp = ((det[3] - det[1]) - (det[2] - det[0])) / 2
                    if margin_tmp > 0:
                        size_tmp = (det[3] - det[1]) * 0
                        bb[0] = np.maximum(det[0] - margin_tmp - size_tmp, 0)
                        bb[1] = np.maximum(det[1] - size_tmp, 0)
                        bb[2] = np.minimum(det[2] + margin_tmp + size_tmp,
                                           img_size[1])
                        bb[3] = np.minimum(det[3] + size_tmp, img_size[0])
                    else:
                        size_tmp = (det[2] - det[0]) * 0
                        bb[0] = np.maximum(det[0] - size_tmp, 0)
                        bb[1] = np.maximum(det[1] + margin_tmp - size_tmp, 0)
                        bb[2] = np.minimum(det[2] + size_tmp, img_size[1])
                        bb[3] = np.minimum(det[3] - margin_tmp + size_tmp,
                                           img_size[0])
                    cropped = img0[int(bb[1]):int(bb[3]),
                                   int(bb[0]):int(bb[2]), :]
                    num_box.append(
                        "%d,%d,%d,%d" %
                        (int(bb[1]), int(bb[3]), int(bb[0]), int(bb[2])))
                    #misc.imsave('hebei/%d.png'%i, cropped)
                    #cropped=misc.imread('/home/ssd/fb_data/casic_cluster_china67/Jin Jong-oh/Jin Jong-oh_8.png')
                    #cv2.imshow("cropped", cropped)
                    #cv2.waitKey(500) ###
                    aligned = misc.imresize(cropped, (67, 67),
                                            interp='bilinear')
                    #cv2.imshow("aligned", aligned)
                    #cv2.waitKey(500) ###
                    #misc.imsave('hebei/%d.png'%i, aligned)
                    prewhitened = faceRecognize.prewhiten(aligned)
                    img_list_tmp.append(prewhitened)
                    key = cv2.waitKey(1)
            image_message[meg_name[4]] = num_box
            print(image_message)

        if len(img_list_tmp) < 2:  #1 :
            continue
        img_list = [None] * len(img_list_tmp)
        for i in range(len(img_list_tmp)):
            img_list[i] = img_list_tmp[i]
        images = np.stack(img_list)
        t_emb = time.time()
        emb = face_rec.recognize(images)

        np.save("./emb_check.txt", emb)
        print 'emb_1_time: ', time.time() - t_emb

        for i in range(len(img_list_tmp)):
            print('%1d ' % i)
            score_tmp = 65
            score2person = -1
            for j in range(len(img_list_tmp)):
                dist = np.sqrt(
                    np.sum(np.square(np.subtract(emb[i, :], emb[j, :]))))
                print('  %1.4f  ' % dict2score(dist))
                print('')
                if dict2score(dist) > score_tmp:
                    score_tmp = dict2score(dist)
                    score2person = j

            if score_tmp > 65:
                image_message[meg_name[6]] = score_tmp
                image_message[meg_name[7]] = 'num_0'

            else:
                image_message[meg_name[6]] = 0
                image_message[meg_name[7]] = 'num_0'
        print('-----====end compare !!===-----')
        print(image_message)
コード例 #17
0
def test_net(prefix,
             epoch,
             batch_size,
             ctx,
             thresh=[0.6, 0.6, 0.7],
             min_face_size=24,
             stride=2,
             slide_window=False,
             camera_path='0'):

    detectors = [None, None, None]

    # load pnet model
    args, auxs = load_param(prefix[0], epoch[0], convert=True, ctx=ctx)
    if slide_window:
        PNet = Detector(P_Net("test"), 12, batch_size[0], ctx, args, auxs)
    else:
        PNet = FcnDetector(P_Net("test"), ctx, args, auxs)
    detectors[0] = PNet

    # load rnet model
    args, auxs = load_param(prefix[1], epoch[0], convert=True, ctx=ctx)
    RNet = Detector(R_Net("test"), 24, batch_size[1], ctx, args, auxs)
    detectors[1] = RNet

    # load onet model
    args, auxs = load_param(prefix[2], epoch[2], convert=True, ctx=ctx)
    ONet = Detector(O_Net("test"), 48, batch_size[2], ctx, args, auxs)
    detectors[2] = ONet

    mtcnn_detector = MtcnnDetector(detectors=detectors,
                                   ctx=ctx,
                                   min_face_size=min_face_size,
                                   stride=stride,
                                   threshold=thresh,
                                   slide_window=slide_window)

    try:
        capture = cv2.VideoCapture(int(camera_path))
    except ValueError as e:
        capture = cv2.VideoCapture(camera_path)

    while (capture.isOpened()):
        ret, img = capture.read()
        if img is None:
            continue
        # img = cv2.imread('test01.jpg')
        t1 = time.time()

        boxes, boxes_c = mtcnn_detector.detect_pnet(img)
        boxes, boxes_c = mtcnn_detector.detect_rnet(img, boxes_c)
        boxes, boxes_c = mtcnn_detector.detect_onet(img, boxes_c)

        print('shape: ', img.shape, '--', 'time: ', time.time() - t1)

        if boxes_c is not None:
            draw = img.copy()
            font = cv2.FONT_HERSHEY_SIMPLEX
            for b in boxes_c:
                cv2.rectangle(draw, (int(b[0]), int(b[1])),
                              (int(b[2]), int(b[3])), (0, 255, 255), 1)
                cv2.putText(draw, '%.3f' % b[4], (int(b[0]), int(b[1])), font,
                            0.4, (255, 255, 255), 1)

            cv2.imshow("detection result", draw)
        else:
            cv2.imshow("detection result", img)

        k = cv2.waitKey(1)
        if k == 27 or k == 113:  # Esc or q key to stop
            break
コード例 #18
0
def detectOneImg(prefix,
                 epoch,
                 batch_size,
                 model,
                 imgPath,
                 test_mode="onet",
                 thresh=[0.6, 0.6, 0.7],
                 min_face_size=24,
                 stride=2,
                 slide_window=False,
                 shuffle=False,
                 vis=False):
    detectors = [None, None, None]
    #load densenet for classfication
    model.load_model()

    model_path = ['%s-%s' % (x, y) for x, y in zip(prefix, epoch)]
    print(model_path)
    # load pnet model
    if slide_window:
        PNet = Detector(P_Net, 12, batch_size[0], model_path[0])
    else:
        PNet = FcnDetector(P_Net, model_path[0])
    detectors[0] = PNet

    # load rnet model
    if test_mode in ["rnet", "onet"]:
        RNet = Detector(R_Net, 24, batch_size[1], model_path[1])
        detectors[1] = RNet

    # load onet model
    if test_mode == "onet":
        ONet = Detector(O_Net, 48, batch_size[2], model_path[2])
        detectors[2] = ONet

    mtcnn_detector = MtcnnDetector(detectors=detectors,
                                   min_face_size=min_face_size,
                                   stride=stride,
                                   threshold=thresh,
                                   slide_window=slide_window)

    images_res = []
    img = cv2.imread(os.path.join(imgPath))
    boxes, boxes_c = mtcnn_detector.detect(img)
    #print(boxes_c.shape)
    #visssss(img, boxes_c, 'plain13134.jpg', thresh=0.998)
    for i in range(boxes_c.shape[0]):
        bbox = boxes_c[i, :4].astype('int32')
        if bbox[1] < 0:
            bbox[1] = 0
        if bbox[0] < 0:
            bbox[0] = 0
        if bbox[2] > 2048:
            bbox[2] = 2048
        if bbox[3] > 2048:
            bbox[3] = 2048
        crop = img[bbox[1]:bbox[3], bbox[0]:bbox[2], :]
        #print(boxes_c[i, :4])
        #print('crop:',crop.shape)
        crop = cv2.resize(crop, (48, 48))
        #cv2.imwrite("C:\\Users\\JINNIU\\Desktop\\liuzhen\\qinghua\\temp\\"+str(i)+'.jpg',crop)
        images_res.append(crop)
    images_res = np.array(images_res).astype(np.float32)
    images_res = normalize_images(images_res)
    pred = model.test(images_res)
    bg_box = np.where(
        pred == 45
    )  #if the class is 45, the image is the background and not the traffic sign. we omit these in the next step
    #print(pred)
    #print(len(boxes_cc))
    for ii in bg_box[0]:
        boxes_c[ii, :] = 0
    #print(boxes_c)
    #del boxes_c[np.where(pred==45),:]
    visssss(img, boxes_c, imgPath, pred, thresh=0.998)
コード例 #19
0
def test_net(prefix,
             epoch,
             batch_size,
             ctx,
             thresh=[0.6, 0.6, 0.7],
             min_face_size=24,
             stride=2,
             slide_window=False):

    detectors = [None, None, None]

    # load pnet model
    args, auxs = load_param(prefix[0], epoch[0], convert=True, ctx=ctx)
    if slide_window:
        PNet = Detector(P_Net("test"), 12, batch_size[0], ctx, args, auxs)
    else:
        PNet = FcnDetector(P_Net("test"), ctx, args, auxs)
    detectors[0] = PNet

    # load rnet model
    args, auxs = load_param(prefix[1], epoch[0], convert=True, ctx=ctx)
    RNet = Detector(R_Net("test"), 24, batch_size[1], ctx, args, auxs)
    detectors[1] = RNet

    # load onet model
    args, auxs = load_param(prefix[2], epoch[2], convert=True, ctx=ctx)
    ONet = Detector(O_Net("test"), 48, batch_size[2], ctx, args, auxs)
    detectors[2] = ONet

    mtcnn_detector = MtcnnDetector(detectors=detectors,
                                   ctx=ctx,
                                   min_face_size=min_face_size,
                                   stride=stride,
                                   threshold=thresh,
                                   slide_window=slide_window)

    video_capture = cv2.VideoCapture(0)
    boxes = []
    boxes_c = []
    while True:
        #img = cv2.imread('/home/zzg/Opensource/mtcnn-master/data/custom/02.jpg')
        _, img = video_capture.read()
        t1 = time.time()

        boxes, boxes_c = mtcnn_detector.detect_pnet(img)
        if boxes_c is None:
            continue
        boxes, boxes_c = mtcnn_detector.detect_rnet(img, boxes_c)
        if boxes_c is None:
            continue
        boxes, boxes_c = mtcnn_detector.detect_onet(img, boxes_c)

        print 'time: ', time.time() - t1

        if boxes_c is not None:
            draw = img.copy()
            font = cv2.FONT_HERSHEY_SIMPLEX
            for b in boxes_c:
                cv2.rectangle(draw, (int(b[0]), int(b[1])),
                              (int(b[2]), int(b[3])), (0, 255, 255), 1)
                #cv2.putText(draw, '%.3f'%b[4], (int(b[0]), int(b[1])), font, 0.4, (255, 255, 255), 1)

            cv2.imshow("detection result", draw)
            #cv2.imwrite("o12.jpg",draw)
            cv2.waitKey(10)