Beispiel #1
0
def main():

    if cv2gpu.is_cuda_compatible():
        cv2gpu.init_gpu_detector(cascade_file_gpu)
    else:
        cv2gpu.init_cpu_detector(cascade_file_cpu)
    
    image = cv2.imread(image_file, cv2.IMREAD_COLOR)

    dims = image.shape
    image = image.ravel()

    # Run once it initialize gpu with instructions
    faces = cv2gpu.find_faces(dims, image)

    start = datetime.datetime.now()
    faces = cv2gpu.find_faces(dims, image)

    image = cv2.imread(image_file)
    for (x, y, w, h) in faces:
        print('X: {x}, Y: {y}, width: {w}, height: {h}'.format(x=x, y=y, w=w, h=h))
        #cv2.rectangle(image, (x, y), (x+w, y+h), (0, 255, 0), 2)
        #cv2.imshow('faces', image)
        #cv2.waitKey(0)
    print('Time processed (s): ' + str(datetime.datetime.now() - start))
Beispiel #2
0
def separate_images(image_obj):

    size_file_max = 200000

    def prune_func_gpu(image_path):
        if getsize(image_path) < size_file_max:
            faces = cv2gpu.find_faces(image_path)
            if faces:
                return len(faces) > 0
        return False

    def prune_func_cpu(image_path):
        if getsize(image_path) < size_file_max:
            image = cv2.imread(image_path, 0)
            faces = cascade.detectMultiScale(image)
            if faces:
                return len(faces) > 0
        return False

    if not isfile(cascade_gpu_path) or not isfile(cascade_cpu_path):
        print '{} or {} is not a file'.format(cascade_gpu_path, cascade_cpu_path)
        sys.exit(1)

    prune_func = None

    if cv2gpu_imported:
        prune_func = prune_func_gpu
        if cv2gpu.is_cuda_compatible():
            print 'Using GPU detector'
            cv2gpu.init_gpu_detector(cascade_gpu_path)
        else:
            print 'Using CPU detector'
            cv2gpu.init_cpu_detector(cascade_cpu_path)
    else:
        prune_func = prune_func_cpu
        cascade = cv2.CascadeClassifier(cascade_cpu_path)

    image_num_max = count_images(image_obj)
    image_num_curr = 0

    for tld in image_obj:
        out_dir = join(processed_dir, tld)
        if not isdir(out_dir):
            makedirs(out_dir)
        images = image_obj[tld]
        for url in images:
            path_orig = images[url]
            path_new = join(out_dir, basename(path_orig))
            print 'Image {} / {}, ({})'.format(image_num_curr, image_num_max, getsize(path_orig))
            image_num_curr += 1
            if not prune_func(path_orig):
                continue
            if not isfile(path_new):
                copy2(path_orig, path_new)
            images[url] = path_new
    return image_obj
Beispiel #3
0
def main():

    if cv2gpu.is_cuda_compatible():
        cv2gpu.init_gpu_detector(cascade_file_gpu)
    else:
        cv2gpu.init_cpu_detector(cascade_file_cpu)

    faces = cv2gpu.find_faces(image_file)
    image = cv2.imread(image_file)
    for (x, y, w, h) in faces:
        cv2.rectangle(image, (x, y), (x + w, y + h), (0, 255, 0), 2)
        cv2.imshow('faces', image)
        cv2.waitKey(0)
Beispiel #4
0
def main():

    if cv2gpu.is_cuda_compatible():
        cv2gpu.init_gpu_detector(cascade_file_gpu)
    else:
        cv2gpu.init_cpu_detector(cascade_file_cpu)
    
    faces = cv2gpu.find_faces(image_file)
    image = cv2.imread(image_file)
    for (x, y, w, h) in faces:
        cv2.rectangle(image, (x, y), (x+w, y+h), (0, 255, 0), 2)
        cv2.imshow('faces', image)
        cv2.waitKey(0)
def create_detector(gpu_or_cpu, cascade_cpu, cascade_gpu):
    if not os.path.isfile(cascade_cpu) or not os.path.isfile(cascade_gpu):
        sys.exit('{} or {} is not a file'.format(cascade_cpu, cascade_gpu))
    if cv2gpu.is_cuda_compatible() and gpu_or_cpu == 'gpu':
        sys.stdout.write('Using GPU CascadeClassifier\n')
        cv2gpu.init_gpu_detector(cascade_gpu)
    else:
        sys.stdout.write('Using CPU CascadeClassifier\n')
        cv2gpu.init_cpu_detector(cascade_cpu)

    class Detector(object):
        def detect(self, image_path):
            return cv2gpu.find_faces(image_path)

    return Detector()
net = openface.TorchNeuralNet(args.networkModel,
                              imgDim=args.imgDim,
                              cuda=args.cuda)
face_cascade = cv2.CascadeClassifier(
    '/root/openface/data/lbpcascades/lbpcascade_frontalface_improved.xml')
#face_cascade = cv2.CascadeClassifier('/root/openface/data/lbpcascades/lbpcascade_profileface.xml')
if face_cascade.empty():
    print("Can not load face cascade classifier xml!")

if cv2gpu.is_cuda_compatible():
    cv2gpu.init_gpu_detector(
        '/root/openface/data/haarcascade_frontalface_default_cuda.xml')
    #cv2gpu.init_gpu_detector('/root/openface/data/lbpcascades/lbpcascade_frontalface_improved.xml')
    print("Using gpu haarcascade!")
else:
    cv2gpu.init_cpu_detector(
        '/root/openface/data/haarcascade_frontalface_default.xml')
    print("Using cpu haarcascade only!")

if args.verbose:
    print("Loading the dlib and OpenFace models took {} seconds.".format(
        time.time() - start))
    start = time.time()


def round_to_1(x):
    if x == 0:
        return 0
    else:
        return round(x, -int(floor(log10(abs(x)))))

Beispiel #7
0
    def mapper_init(self):
        def load_from_small_dataset(colorferet_small_dir):

            face_labels_str = {
                'Black-or-African-American': 0,
                'Asian': 1,
                'Asian-Middle-Eastern': 2,
                'Hispanic': 3,
                'Native-American': 4,
                'Other': 5,
                'Pacific-Islander': 6,
                'White': 7
            }

            images = []
            labels = []

            for face_label_str in face_labels_str:
                face_label_num = face_labels_str[face_label_str]
                image_dir = os.path.join(colorferet_small_dir, face_label_str)
                image_files = [
                    os.path.join(image_dir, image_file)
                    for image_file in os.listdir(image_dir)
                ]
                images_tmp = [
                    cv2.resize(cv2.imread(image_file, 0), (256, 256))
                    for image_file in image_files
                    if image_file.split('.')[-1] == 'png'
                ]
                labels_tmp = [face_label_num] * len(images_tmp)
                images.extend(images_tmp)
                labels.extend(labels_tmp)

            return images, labels

        self.video_dir = jobconf_from_env('job.settings.video_dir')
        self.output_dir = os.path.join(
            jobconf_from_env('mapreduce.task.output.dir'), 'faces')
        self.opencv_version = int(cv2.__version__.split('.')[0])

        if self.opencv_version == 2:
            self.recognizer = cv2.createLBPHFaceRecognizer()
            # self.recognizer = cv2.createFisherFaceRecognizer()
            # self.recognizer = cv2.createEigenFaceRecognizer()
        elif self.opencv_version == 3:
            self.recognizer = cv2.face.createLBPHFaceRecognizer()
            # self.recognizer = cv2.face.createFisherFaceRecognizer()
            # self.recognizer = cv2.face.createEigenFaceRecognizer()

        if cv2gpu.is_cuda_compatible():
            sys.stderr.write('Using GPU CascadeClassifier')
            cv2gpu.init_gpu_detector(
                jobconf_from_env('job.settings.cascade_gpu'))
        else:
            sys.stderr.write('Using CPU CascadeClassifier')
            cv2gpu.init_cpu_detector(
                jobconf_from_env('job.settings.cascade_cpu'))

        images, labels = load_from_small_dataset(
            jobconf_from_env('job.settings.colorferet'))

        self.recognizer.train(images, numpy.array(labels))
        if not os.path.exists(self.output_dir):
            os.makedirs(self.output_dir)

        self.face_labels_num = {
            0: 'Black-or-African-American',
            1: 'Asian',
            2: 'Asian-Middle-Eastern',
            3: 'Hispanic',
            4: 'Native-American',
            5: 'Other',
            6: 'Pacific-Islander',
            7: 'White'
        }

        self.write_results = False
Beispiel #8
0
args = parser.parse_args()

print("Initializing face detector...")
if args.detector == 'hog':
    detector = dlib.get_frontal_face_detector()
elif args.detector == 'cnn':
    detector = dlib.cnn_face_detection_model_v1(args.cnn_model_path)
elif args.detector == 'opencv':
    detector = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
elif args.detector == 'cv2gpu':
    import cv2gpu
    if cv2gpu.is_cuda_compatible():
        cv2gpu.init_gpu_detector('haarcascade_frontalface_default_cuda.xml')
    else:
        cv2gpu.init_cpu_detector('haarcascade_frontalface_default.xml')
else:
    assert False, "Unknown detector " + args.detector
predictor = dlib.shape_predictor(args.shape_predictor_path)
facerec = dlib.face_recognition_model_v1(args.face_rec_model_path)

print("Loading feature vectors...")
vecs = np.load(args.vecs_file)
nn = NearestNeighbors(n_neighbors=args.n_neighbors, algorithm=args.algorithm)
nn.fit(vecs)

print("Loading image metadata...")
with open(args.data_file) as csvfile:
    reader = csv.DictReader(
        csvfile, fieldnames=['file', 'name', 'left', 'top', 'right', 'bottom'])
    data = list(reader)
Beispiel #9
0
    def mapper_init(self):

        def load_from_small_dataset(colorferet_small_dir):

            face_labels_str = {
                'Black-or-African-American': 0,
                'Asian': 1,
                'Asian-Middle-Eastern': 2,
                'Hispanic': 3,
                'Native-American': 4,
                'Other': 5,
                'Pacific-Islander': 6,
                'White': 7
            }

            images = []
            labels = []

            for face_label_str in face_labels_str:
                face_label_num = face_labels_str[face_label_str]
                image_dir = os.path.join(colorferet_small_dir, face_label_str)
                image_files = [os.path.join(image_dir, image_file) for image_file in os.listdir(image_dir)]
                images_tmp = [cv2.resize(cv2.imread(image_file, 0), (256, 256)) for image_file in image_files if image_file.split('.')[-1] == 'png']
                labels_tmp = [face_label_num] * len(images_tmp)
                images.extend(images_tmp)
                labels.extend(labels_tmp)

            return images, labels

        self.video_dir = jobconf_from_env('job.settings.video_dir')
        self.output_dir = os.path.join(jobconf_from_env('mapreduce.task.output.dir'), 'faces')
        self.opencv_version = int(cv2.__version__.split('.')[0])

        if self.opencv_version == 2:
            self.recognizer = cv2.createLBPHFaceRecognizer()
            # self.recognizer = cv2.createFisherFaceRecognizer()
            # self.recognizer = cv2.createEigenFaceRecognizer()
        elif self.opencv_version == 3:
            self.recognizer = cv2.face.createLBPHFaceRecognizer()
            # self.recognizer = cv2.face.createFisherFaceRecognizer()
            # self.recognizer = cv2.face.createEigenFaceRecognizer()

        if cv2gpu.is_cuda_compatible():
            sys.stderr.write('Using GPU CascadeClassifier')
            cv2gpu.init_gpu_detector(jobconf_from_env('job.settings.cascade_gpu'))
        else:
            sys.stderr.write('Using CPU CascadeClassifier')
            cv2gpu.init_cpu_detector(jobconf_from_env('job.settings.cascade_cpu'))

        images, labels = load_from_small_dataset(jobconf_from_env('job.settings.colorferet'))

        self.recognizer.train(images, numpy.array(labels))
        if not os.path.exists(self.output_dir):
            os.makedirs(self.output_dir)

        self.face_labels_num = {
            0: 'Black-or-African-American',
            1: 'Asian',
            2: 'Asian-Middle-Eastern',
            3: 'Hispanic',
            4: 'Native-American',
            5: 'Other',
            6: 'Pacific-Islander',
            7: 'White'
        }

        self.write_results = False