前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >人脸检测FDDB测试ROC曲线生成

人脸检测FDDB测试ROC曲线生成

作者头像
bear_fish
发布2018-09-14 09:54:04
3.7K0
发布2018-09-14 09:54:04
举报

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://cloud.tencent.com/developer/article/1338354

本文主要内容如下:
1. ubuntu16环境下,如何使用FDDB评价人脸检测的效果,以及对应的ROC曲线的生成
2. 使用python生成FDDB对比的文件。

在测试人脸检测效果前,最好看下论文FDDB: A Benchmark for Face Detection in Unconstrained Settings,以及FDDB主页,了解人脸评估的基本原理

1. 数据集准备

1.1 在 http://tamaraberg.com/faceDataset/originalPics.tar.gz 下载原始的FDDB人脸数据集
1.2 在http://vis-www.cs.umass.edu/fddb/FDDB-folds.tgz 下载原始的FDDB人脸书籍的标注(使用椭圆的方式),以及所有的文件名。
FDDB-FOLD-%d.txt合成一个文件: cat * > filePath.txt
将所有的标注文件FDDB-fold-%d-ellipseList.txt合成一个文件 cat *ellipse*.txt > annotFile.txt

2. 生成FDDB evaluate可执行文件

2.1 在 http://vis-www.cs.umass.edu/fddb/evaluation.tgz 下载源码, 编译的时候要注意 http://vis-www.cs.umass.edu/fddb/faq.html ,makefile要加上:
代码语言:javascript
复制
INCS = -I/usr/local/include/opencv

LIBS = -L/usr/local/lib -lopencv_core -lopencv_imgproc -lopencv_highgui
       -lopencv_ml -lopencv_video -lopencv_features2d -lopencv_calib3d 
       -lopencv_objdetect -lopencv_contrib -lopencv_legacy

3. Evaluate & runEvaluate.pl部分修改

3.1 GUNPLOT变量修改(gnuplot路径),确保已经安装gnuplot
3.2 $detFormat人脸检测的的类型,椭圆还是矩形,我用矩形评价,因此变量修改:

my $detFormat = 0; # 0: rectangle, 1: ellipse 2: pixels

3.3 $detFile自己的检测文件

my $detFile =

"/home/xy/face_sample/evaluation/compareROC/detDir/fddb_rect_ret1.txt";

3.4 runEvaluate.pl,执行语句修改,主要是添加"-z", ".jpg"
代码语言:javascript
复制
system($evaluateBin, "-a", $annotFile, "-d", $detFile, "-f", $detFormat, "-i", $imDir, "-l", $listFile, "-r", $detDir, "-z", ".jpg");
3.5 evaluate使用验证:

具体命令如下:

代码语言:javascript
复制
xy@xy:~/face_sample/evaluation/compareROC$ ./evaluate \
> -a /home/xy/face_sample/evaluation/compareROC/FDDB-folds/annotFile.txt \
> -d /home/xy/face_sample/evaluation/compareROC/detDir/fddb_rect_ret1.txt \
> -f 0 \
> -i /home/xy/face_sample/evaluation/compareROC/originalPics/ \
> -l /home/xy/face_sample/evaluation/compareROC/FDDB-folds/filePath.txt \
> -r /home/xy/face_sample/evaluation/compareROC/detDir/ \
> -z .jpg

4. 使用opencv 人脸检测算法 + python 生成FDDB待评价的文件

4.1 读取所有的图片的相对路径:
代码语言:javascript
复制
def get_img_relative_path():
    """
    :return: ['2002/08/11/big/img_344', '2002/08/02/big/img_473', ......]
    """
    f_name = 'E:/face_rec/face__det_rec_code/face_det/FDDB-folds/all_img_files.txt'
    lst_name = open(f_name).read().split('\n')

    return lst_name
4.2 最终的结果写到txt文件中去
代码语言:javascript
复制
def write_lines_to_txt(lst):
    # lst = ['line1', 'line2', 'line3']
    f_path = 'fddb_rect_ret.txt'
    with open(f_path, 'w') as fp:

        for line in lst:
            fp.write("%s\n" % line)
4.3 opencv中的人脸检测(这里可以改为你自己的人脸检测算法)
代码语言:javascript
复制
# For example use opencv to face detection
def detect_face_lst(img):
    """
    :param img: opencv image 
    :return: face rectangles [[x, y, w, h], ..........]
    """
    m_path = 'D:/opencv/sources/data/haarcascades/haarcascade_frontalface_default.xml'
    face_cascade = cv2.CascadeClassifier(m_path)

    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

    faces = face_cascade.detectMultiScale(gray, 1.3, 5)

    return faces
4.4 主要的生成代码如下:
代码语言:javascript
复制
def generate_fddb_ret():
    # The directory from which we get the test images from FDDB
    img_base_dir = 'E:/face_rec/face__det_rec_code/face_det/originalPics/'

    # All the images relative path, like '['2002/08/11/big/img_344', '2002/08/02/big/img_473', ......]'
    lst_img_name = get_img_relative_path()

    # Store detect result, like:
    # ['2002/08/11/big/img_344', '1', '10 10 50 50 1', .............]
    lst_write2_fddb_ret = []

    try:
        for img_name in lst_img_name:
            img_full_name = img_base_dir + img_name + '.jpg'
            img = cv2.imread(img_full_name)

            if img == None:
                print 'error %s not exists, can not generate complete fddb evaluate file' % img_full_name
                return -1

            lst_face_rect = detect_face_lst(img)

            # append img name like '2002/08/11/big/img_344'
            lst_write2_fddb_ret.append(img_name)

            face_num = len(lst_face_rect)
            # append face num, note if no face 0 should be append
            lst_write2_fddb_ret.append(str(face_num))

            if face_num > 0:
                # append each face rectangle x y w h score
                for face_rect in lst_face_rect:
                    # append face rectangle x, y, w, h score
                    # note: opencv hava no confidence so use 1 here
                    s_rect = " ".join(str(item) for item in face_rect) + " 1"
                    lst_write2_fddb_ret.append(s_rect)

    except Exception as e:
        print 'error %s , can not generate complete fddb evaluate file' % e
        return -1

    # Write all the result to txt for FDDB evaluation
    write_lines_to_txt(lst_write2_fddb_ret)
最终生成结果如下图:
注意直接将上面生成的txt文件复制到ubuntu16下会报错Incompatible annotation and detection files. See output specifications ,由于windows下文件和ubuntu下不同导致的。只需要在ubuntu下面创建一个txt文件,然后将内容复制进去即可。
最终生成结果如下:
注意,如果在使用的过程中,有什么错误,建议直接看下runEvaluate.pl evaluate.cpp源代码。

注:上面不是复制下面的stack overflow, 里面的是我自己回答的.感兴趣的也可以自己看下,别人的回答与分享。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018年06月14日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 本文主要内容如下:
    • 1. ubuntu16环境下,如何使用FDDB评价人脸检测的效果,以及对应的ROC曲线的生成
      • 2. 使用python生成FDDB对比的文件。
        • 在测试人脸检测效果前,最好看下论文FDDB: A Benchmark for Face Detection in Unconstrained Settings,以及FDDB主页,了解人脸评估的基本原理
        • 1. 数据集准备
          • 1.1 在 http://tamaraberg.com/faceDataset/originalPics.tar.gz 下载原始的FDDB人脸数据集
            • 1.2 在http://vis-www.cs.umass.edu/fddb/FDDB-folds.tgz 下载原始的FDDB人脸书籍的标注(使用椭圆的方式),以及所有的文件名。
              • 将FDDB-FOLD-%d.txt合成一个文件: cat * > filePath.txt
                • 将所有的标注文件FDDB-fold-%d-ellipseList.txt合成一个文件 cat *ellipse*.txt > annotFile.txt
                • 2. 生成FDDB evaluate可执行文件
                  • 2.1 在 http://vis-www.cs.umass.edu/fddb/evaluation.tgz 下载源码, 编译的时候要注意 http://vis-www.cs.umass.edu/fddb/faq.html ,makefile要加上:
                  • 3. Evaluate & runEvaluate.pl部分修改
                    • 3.1 GUNPLOT变量修改(gnuplot路径),确保已经安装gnuplot
                      • 3.2 $detFormat人脸检测的的类型,椭圆还是矩形,我用矩形评价,因此变量修改:
                        • 3.3 $detFile自己的检测文件
                          • 3.4 runEvaluate.pl,执行语句修改,主要是添加"-z", ".jpg":
                            • 3.5 evaluate使用验证:
                            • 4. 使用opencv 人脸检测算法 + python 生成FDDB待评价的文件
                              • 4.1 读取所有的图片的相对路径:
                                • 4.2 最终的结果写到txt文件中去
                                  • 4.3 opencv中的人脸检测(这里可以改为你自己的人脸检测算法)
                                    • 4.4 主要的生成代码如下:
                                      • 最终生成结果如下图:
                                        • 注意直接将上面生成的txt文件复制到ubuntu16下会报错Incompatible annotation and detection files. See output specifications ,由于windows下文件和ubuntu下不同导致的。只需要在ubuntu下面创建一个txt文件,然后将内容复制进去即可。
                                      • 最终生成结果如下:
                                        • 注意,如果在使用的过程中,有什么错误,建议直接看下runEvaluate.pl evaluate.cpp源代码。
                                    • 注:上面不是复制下面的stack overflow, 里面的是我自己回答的.感兴趣的也可以自己看下,别人的回答与分享。
                                    相关产品与服务
                                    人脸识别
                                    腾讯云神图·人脸识别(Face Recognition)基于腾讯优图强大的面部分析技术,提供包括人脸检测与分析、比对、搜索、验证、五官定位、活体检测等多种功能,为开发者和企业提供高性能高可用的人脸识别服务。 可应用于在线娱乐、在线身份认证等多种应用场景,充分满足各行业客户的人脸属性识别及用户身份确认等需求。
                                    领券
                                    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档