专栏首页AIUAIGithub 项目 - FaceBoxes高精度实时人脸检测器

Github 项目 - FaceBoxes高精度实时人脸检测器

原文:Github 项目 - FaceBoxes高精度实时人脸检测器 - AIUAI

<Github - zeusees/FaceBoxes> 主页: 智云视图 <Github - AIHGF/FaceBoxes>

FaceBoxes 完整复现.

论文: FaceBoxes: A CPU Real-time Face Detector with High Accuracy - 2018 论文源码:<Github - sfzhang15/FaceBoxes>

1. FaceBoxes 测试

Caffemodel - FaceBoxes_1024x1024.caffemodel (3.6M) Prototxt - faceboxes_deploy.prototxt Caffe - caffe-ssd

# -*- coding: utf-8 -*
import numpy as np
import matplotlib.pyplot as plt
import sys,os  
import cv2
caffe_root = '/path/to/caffe-ssd/'
sys.path.insert(0, caffe_root + 'python')  
import caffe  
import time


net_file= 'faceboxes_deploy.prototxt'  
caffe_model='FaceBoxes_1024x1024.caffemodel'  

caffe.set_mode_cpu() # cpu
# caffe.set_mode_gpu() # gpu
net = caffe.Net(net_file,caffe_model,caffe.TEST)  

CLASSES = ('background', 'face')

transformer = caffe.io.Transformer({'data': net.blobs['data'].data.shape})
transformer.set_transpose('data', (2, 0, 1))
transformer.set_mean('data', np.array([104, 117, 123]))  # mean pixel


def preprocess(src):
    img = cv2.resize(src, (1024,1024))
    img = img - 127.5
    img = img * 0.007843
    return img


def postprocess(img, out):   
    h = img.shape[0]
    w = img.shape[1]
    box = out['detection_out'][0,0,:,3:7] * np.array([w, h, w, h])

    cls = out['detection_out'][0,0,:,1]
    conf = out['detection_out'][0,0,:,2]
    return (box.astype(np.int32), conf, cls)


def detect(imgfile):
    origimg = cv2.imread(imgfile)

    transformed_image = transformer.preprocess('data', origimg)
    net.blobs['data'].data[...] = transformed_image

    time_start = time.time()
    out = net.forward()
    print("[INFO]timecost: ", time.time() - time_start)

    box, conf, cls = postprocess(origimg, out)

    for i in range(len(box)):
        p1 = (box[i][0], box[i][1])
        p2 = (box[i][2], box[i][3])
        cv2.rectangle(origimg, p1, p2, (0, 255, 0))
        p3 = (max(p1[0], 15), max(p1[1], 15))
        title = "%s:%.2f" % (CLASSES[int(cls[i])], conf[i])
        cv2.putText(origimg, title, p3, cv2.FONT_ITALIC, 0.6, (0, 255, 0), 1)
    plt.imshow(origimg[:,:,::-1])
    plt.axis("off")
    plt.show()

    return True

if __name__ == '__main__':
    test_dir = "/path/to/images"

    for img_name in os.listdir(test_dir):
        img_file = os.path.join(test_dir, img_name)
        result = detect(img_file)

    print("[INFO]Done.")

如(会出现漏检):

('[INFO]cpu timecost: ', 0.1766371726989746)
('[INFO]cpu timecost: ', 0.13269805908203125)

('[INFO]gpu timecost: ', 0.024658203125)
('[INFO]gpu timecost: ', 0.01454019546508789)

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Caffe - 创建LMDB/HDF5格式数据

    LMDB格式的优点: - 基于文件映射IO(memory-mapped),数据速率更好 - 对大规模数据集更有效.

    AIHGF
  • 论文实践学习 - Look into Person: Self-supervised Structure-sensitive Learning

    AIHGF
  • Caffe2 - (十八) 图片数据处理函数

    Caffe2 提供了对图片进行加载、裁剪、缩放、去均值、batch 等处理的函数 - helper.py.

    AIHGF
  • 基于FPGA灰度图像的形态学腐蚀

    数学形态学是一门建立在集论基础上的学科,是几何形态学分析和描述的有力工具。数学形态学的蓬勃发展,其并行快速,易于硬件实现,目前已经在计算机视觉、信号处理与图像分...

    FPGA开源工作室
  • Python机器学习的练习六:支持向量机

    在这个练习中,我们将使用支持向量机(SVMs)创建一个垃圾邮件分类器。在一些简单的2D数据集上使用SVMs去观察他们如何工作,接下来我们查看一组邮件数据集,并且...

    AiTechYun
  • a[0+:8] 、b [15-:8] 什么意思?怎么用?

    之前jerry讲过怎么最方便的把一个128bit位宽的数,拆成字节使用的技巧(不知道的可以复习下前面的文章哦~)。今天反过来讲讲怎么把字节为单位的数拼成128b...

    IC验证
  • 一日一技:如何通过迭代器精简你的代码

    假设有一个 Redis 集合,里面有 N 条数据,你不停从里面lpop数据,直到某一条数据的值为'Stop'字符串为止(已知里面必有一条数据为'Stop'字符串...

    青南
  • Python爬虫教程:爬取微博数据【附源码】

    3、将获得的两项内容填入到weibo.py中,替换代码中的YOUR_USER_ID和#YOUR_COOKIE,运行代码。

    python学习教程
  • YOLO系列网络训练数据准备工具—Yolo_mark

    Yolo_mark是一个检测任务数据集制作工具,制作完成后的数据格式不是VOC或者COCO的数据格式,从它的名字也可以看出,它是专门为了YOLO系列的网络训练准...

    chaibubble
  • 数据分析实战:利用python对心脏病数据集进行分析

    今天在kaggle上看到一个心脏病数据(数据集下载地址和源码见文末),那么借此深入分析一下。

    Python进阶者

扫码关注云+社区

领取腾讯云代金券