美文网首页
人脸识别(dlib)——用imglab制作样本与测试

人脸识别(dlib)——用imglab制作样本与测试

作者: 神昀 | 来源:发表于2018-11-04 23:03 被阅读0次

    终于又见面!经过一波休养和修炼,我获得了制作样本的技能,分享给大家吧。不过这次我们不识别真人,我们来识别一下二次元的人。

    在dlib的源码包中有一个工具叫做imglab,第一次用之前需要Cmake编译生成一下,然后准备一个有图片的文件夹,图片都是自己找的,而我用了51张进击的巨人的图片。

    训练用图片

    命令行输入 imglab -c mydataset.xml images,生成mydataset.xml文件(每张图片的标记都记录在这个文件里,images是装有图片的文件夹)

    然后输入imglab mydataset.xml,开始进行标记,这个过程是重复且无聊的。一开始可以先画框框住脸,这样也可以作为样本拿去训练。熟悉后,可以标记眼、口、鼻、面部轮廓等等。

    标记团长的脸 标记艾伦、三笠、康尼的脸

    根据源码包的例子train_object_detector.py。取出用来训练图片的代码

    # -*- coding: utf-8 -*-
    import os
    import sys
    import glob
    import dlib
    import cv2
    
    # options用于设置训练的参数和模式
    options = dlib.simple_object_detector_training_options()
    options.add_left_right_image_flips = True
    options.C = 5
    options.num_threads = 4
    options.be_verbose = True
    
    # 获取路径
    current_path = os.getcwd()
    train_xml_path = current_path + '/mydataset.xml'
    
    # 训练
    dlib.train_simple_object_detector(train_xml_path, 'detector.svm', options)
    

    最后会生成detector.svm文件,这个就是我们训练出来的模型。然后我们用这个模型去测试一组新的图片。

    测试用图片

    同样在官方例子train_object_detector.py中可以找到测试用的代码,拿出来并修改一下

    import os
    import sys
    import glob
    import dlib
    
    detector = dlib.simple_object_detector("detector.svm")
    win_det = dlib.image_window()
    win_det.set_image(detector)
    win = dlib.image_window()
    for f in glob.glob(os.path.join("./testImages", "*.png")):
        print("Processing file: {}".format(f))
        img = dlib.load_rgb_image(f)
        dets = detector(img)
        print("Number of faces detected: {}".format(len(dets)))
        for k, d in enumerate(dets):
            print("Detection {}: Left: {} Top: {} Right: {} Bottom: {}".format(
                k, d.left(), d.top(), d.right(), d.bottom()))
        win.clear_overlay()
        win.set_image(img)
        win.add_overlay(dets)
        dlib.hit_enter_to_continue()
    
    识别结果1 识别结果2 识别结果3 识别结果4

    可以看到,能识别挺多张脸了,很可惜没有识别出幽怨的三笠和充满颜艺的让。显然是样本数量太少,结果是可以接受的。

    吐槽环节

    标记人脸真的不是一件容易的事,单纯的画框都会因为眼疾或者手残而要画好几次,更不用说后面还要标记器官。看到结果挺有成就感的,跨越了层层障碍实现了跨越次元的人脸识别,很有意思,很好玩。

    那么本期到此结束吧,谢谢观看。

    相关文章

      网友评论

          本文标题:人脸识别(dlib)——用imglab制作样本与测试

          本文链接:https://www.haomeiwen.com/subject/njtjxqtx.html