欢迎访问 生活随笔!

生活随笔

当前位置: 首页 >

dlib实现人脸检测方法

发布时间:2024/3/24 85 豆豆
生活随笔 收集整理的这篇文章主要介绍了 dlib实现人脸检测方法 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

文章目录

  • `dlib`概述
  • 人脸检测
    • CPU版本人脸检测算法
      • 检测步骤
      • 示例代码:
    • CUDA版本人脸检测算法
      • 检测步骤
      • 示例代码
    • 类定义与接口源码
      • 人脸检测中用到的重要的类(概述)
      • `fhog_object_detector`类接口定义
      • `rectangle`类接口定义
      • `cnn_face_detection_model_v1`类定义
      • `mmod_rectangle` `mmod_rectangles` `mmod_rectangless`

dlib概述

Dlib是一个包含机器学习算法的C++开源工具包。Dlib可以帮助您创建很多复杂的机器学习方面的软件来帮助解决实际问题。目前Dlib已经被广泛的用在行业和学术领域,包括机器人,嵌入式设备,移动电话和大型高性能计算环境.

人脸检测

CPU版本人脸检测算法

检测步骤

  • 获取hog detector
  • 传入image,数据格式为numpy.ndarray
  • (可选项) 获取分数值和检测列表
  • 获取人脸坐标
  • 示例代码:

    import dlibfrom cv2 import cv2# step 1. create an object detector based on hog detector = dlib.get_frontal_face_detector() # _dlib_pybind11.fhog_object_detector# step 2. read an image using dlib or cv2 # note that the difference between the image data formated as numpy.ndarray read by dlib and cv2 is that dlib read it channels as *R G B* order while cv2 read as *B G R*,so you should do one more step to convert the image if using cv2 image_path = "sample.jpg" img = dlib.load_rgb_image(image_path) # img = cv2.imread(image_path) # img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)# step 3. using the numpy.ndarray image data as input to detect the front face on the image # The 1 in the second argument indicates that we should upsample the image 1 time. # This will make everything bigger and allow us to detect more faces. detections = detector(img, 1) # List[_dlib_pybind11.rectangle]# step 3.1 (Optional) if you want to get more detail information,using function run() instead # detections, scores, idx = detector.run(img, 1, 0.5) # List[_dlib_pybind11.rectangle] List[int] List[int]# step 4. get point coordinates from the detection results # let's just fetch one instead all of the in a loop detection = detections[0] left,top,right,bottom = detection .left(),detection .top(),detection .right(),detection .bottom()# step x : now you can do whatever you want since you've already got what you want.

    CUDA版本人脸检测算法

    检测步骤

  • 下载模型文件
  • 加载模型文件,生成卷积神经网络人脸检测对象
  • 传入image,数据格式为numpy.ndarray
  • (可选项) 获取分数值和检测列表
  • 获取人脸坐标
  • 示例代码

    import dlib # step 1. make sure you have downloaded the correct model file face_detector_model_path = '../models/mmod_human_face_detector.dat'# step 2. load this model and create a cnn face detector face_detector = dlib.cnn_face_detection_model_v1(face_detector_model_path) # dlib.cnn_face_detection_model_v1# step 3. read an image using dlib or cv2 # note that the difference between the image data formated as numpy.ndarray read by dlib and cv2 is that dlib read it channels as *R G B* order while cv2 read as *B G R*,so you should do one more step to convert the image if using cv2 image_path = "sample.jpg" img = dlib.load_rgb_image(image_path) # img = cv2.imread(image_path) # img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)# step 4. predict and detect detections = face_detector(img, 1) # dlib.mmod_rectangles# step 5. get just one of the rectangle instead all of them ,the type is mmod_rectangle detection = detections[0] # dlib.mmod_rectangle # the mmod_rectangle contains two parts : confidence and rect print(detection.confidence, detection.rect)# step 6.get face coordinates for just one as sample left,top,right,bottom = detection.rect.left(),detection.rect.top(),detection.rect.right(),detection.rect.bottom()# step x. do anything you would like to

    类定义与接口源码

    人脸检测中用到的重要的类(概述)

  • dlib.fhog_object_detector : hog模型的人脸检测对象,常用方法: __call()__和run()
  • dlib.rectangle:人脸检测结果,用于表示人脸的矩形区域,常用方法:left() right()``top()``bottom()
  • dlib.cnn_face_detection_model_v1:卷积神经网络模型的人脸检测对象,常用方法: __call()__
  • dlib.mmod_rectangle:人脸检测结果,包含了表示人脸的巨型区域以及检测置信度,成员包含: rect和confidence,其中,rect为 dlib.rectangle类型,confidence为float类型
  • dlib.mmod_rectangles:包含多个 dlib.mmod_rectangle对象
  • 类定义参考链接:Python API 链接

    fhog_object_detector类接口定义

    fhog_object_detector类在源码中为C++类,这里使用伪代码编译观察其接口与调用方法

    class dlib.fhog_object_detector():"""This object represents a sliding window histogram-of-oriented-gradients based object detector."""def __call__(self: dlib.fhog_object_detector, image: array, upsample_num_times: int = 0L) -> dlib.rectangles:"""requiresimage is a numpy ndarray containing either an 8bit grayscale or RGB image.upsample_num_times >= 0ensuresThis function runs the object detector on the input image and returns a list of detections.Upsamples the image upsample_num_times before running the basic detector."""def __init__(self: dlib.fhog_object_detector, arg0: unicode) -> None:'''Loads an object detector from a file that contains the output of the train_simple_object_detector() routine or a serialized C++ object of type object_detector<scan_fhog_pyramid<pyramid_down<6>>>.detection_window_heightdetection_window_widthnum_detectors'''passdef run(self: dlib.fhog_object_detector, image: array, upsample_num_times: int = 0L,adjust_threshold: float = 0.0) -> tuple:"""requiresimage is a numpy ndarray containing either an 8bit grayscale or RGB image.upsample_num_times >= 0ensuresThis function runs the object detector on the input image and returns a tuple of (list of detections, list of scores, list of weight_indices).Upsamples the image upsample_num_times before running the basic detector."""passdef run_multiple(detectors: list, image: array, upsample_num_times: int = 0L, adjust_threshold: float = 0.0)->tuple:"""requiresdetectors is a list of detectors.image is a numpy ndarray containing either an 8bit grayscale or RGB image.upsample_num_times >= 0ensuresThis function runs the list of object detectors at once on the input image and returns a tuple of (list of detections, list of scores, list of weight_indices).Upsamples the image upsample_num_times before running the basic detector."""passdef save(self: dlib.fhog_object_detector, detector_output_filename: unicode)->None:'''Save a simple_object_detector to the provided path.'''pass

    rectangle类接口定义

    class dlib.rectangleThis object represents a rectangular area of an image.__init__(*args, **kwargs)Overloaded function.__init__(self: dlib.rectangle, left: int, top: int, right: int, bottom: int) -> None__init__(self: dlib.rectangle, rect: dlib::drectangle) -> None__init__(self: dlib.rectangle, rect: dlib.rectangle) -> None__init__(self: dlib.rectangle) -> Nonearea(self: dlib.rectangle) → intbl_corner(self: dlib.rectangle) → dlib.pointReturns the bottom left corner of the rectangle.bottom(self: dlib.rectangle) → intbr_corner(self: dlib.rectangle) → dlib.pointReturns the bottom right corner of the rectangle.center(self: dlib.rectangle) → dlib.pointcontains(*args, **kwargs)Overloaded function.contains(self: dlib.rectangle, point: dlib.point) -> boolcontains(self: dlib.rectangle, point: dlib.dpoint) -> boolcontains(self: dlib.rectangle, x: int, y: int) -> boolcontains(self: dlib.rectangle, rectangle: dlib.rectangle) -> booldcenter(self: dlib.rectangle) → dlib.pointheight(self: dlib.rectangle) → intintersect(self: dlib.rectangle, rectangle: dlib.rectangle) → dlib.rectangleis_empty(self: dlib.rectangle) → boolleft(self: dlib.rectangle) → intright(self: dlib.rectangle) → inttl_corner(self: dlib.rectangle) → dlib.pointReturns the top left corner of the rectangle.top(self: dlib.rectangle) → inttr_corner(self: dlib.rectangle) → dlib.pointReturns the top right corner of the rectangle.width(self: dlib.rectangle) → int

    cnn_face_detection_model_v1类定义

    class dlib.cnn_face_detection_model_v1This object detects human faces in an image. The constructor loads the face detection model from a file. You can download a pre-trained model from http://dlib.net/files/mmod_human_face_detector.dat.bz2.__call__(*args, **kwargs)Overloaded function.__call__(self: dlib.cnn_face_detection_model_v1, imgs: list, upsample_num_times: int=0L, batch_size: int=128L) -> std::vector<std::vector<dlib::mmod_rect, std::allocator<dlib::mmod_rect> >, std::allocator<std::vector<dlib::mmod_rect, std::allocator<dlib::mmod_rect> > > >takes a list of images as input returning a 2d list of mmod rectangles__call__(self: dlib.cnn_face_detection_model_v1, img: array, upsample_num_times: int=0L) -> std::vector<dlib::mmod_rect, std::allocator<dlib::mmod_rect> >Find faces in an image using a deep learning model.Upsamples the image upsample_num_times before running the face detector.__init__(self: dlib.cnn_face_detection_model_v1, filename: unicode) → Non

    mmod_rectangle mmod_rectangles mmod_rectangless

    class dlib.mmod_rectangleWrapper around a rectangle object and a detection confidence score.__init__x.__init__(...) initializes x; see help(type(x)) for signatureconfidencerect class dlib.mmod_rectanglesAn array of mmod rectangle objects.__init__(*args, **kwargs)Overloaded function.__init__(self: dlib.mmod_rectangles) -> None__init__(self: dlib.mmod_rectangles, arg0: dlib.mmod_rectangles) -> NoneCopy constructor__init__(self: dlib.mmod_rectangles, arg0: iterable) -> Noneappend(self: dlib.mmod_rectangles, x: dlib.mmod_rectangle) → NoneAdd an item to the end of the listcount(self: dlib.mmod_rectangles, x: dlib.mmod_rectangle) → intReturn the number of times x appears in the listextend(*args, **kwargs)Overloaded function.extend(self: dlib.mmod_rectangles, L: dlib.mmod_rectangles) -> NoneExtend the list by appending all the items in the given listextend(self: dlib.mmod_rectangles, arg0: list) -> Noneinsert(self: dlib.mmod_rectangles, i: int, x: dlib.mmod_rectangle) → NoneInsert an item at a given position.pop(*args, **kwargs)Overloaded function.pop(self: dlib.mmod_rectangles) -> dlib.mmod_rectangleRemove and return the last itempop(self: dlib.mmod_rectangles, i: int) -> dlib.mmod_rectangleRemove and return the item at index iremove(self: dlib.mmod_rectangles, x: dlib.mmod_rectangle) → NoneRemove the first item from the list whose value is x. It is an error if there is no such item. class dlib.mmod_rectanglessA 2D array of mmod rectangle objects.__init__(*args, **kwargs)Overloaded function.__init__(self: dlib.mmod_rectangless) -> None__init__(self: dlib.mmod_rectangless, arg0: dlib.mmod_rectangless) -> NoneCopy constructor__init__(self: dlib.mmod_rectangless, arg0: iterable) -> Noneappend(self: dlib.mmod_rectangless, x: dlib.mmod_rectangles) → NoneAdd an item to the end of the listcount(self: dlib.mmod_rectangless, x: dlib.mmod_rectangles) → intReturn the number of times x appears in the listextend(*args, **kwargs)Overloaded function.extend(self: dlib.mmod_rectangless, L: dlib.mmod_rectangless) -> NoneExtend the list by appending all the items in the given listextend(self: dlib.mmod_rectangless, arg0: list) -> Noneinsert(self: dlib.mmod_rectangless, i: int, x: dlib.mmod_rectangles) → NoneInsert an item at a given position.pop(*args, **kwargs)Overloaded function.pop(self: dlib.mmod_rectangless) -> dlib.mmod_rectanglesRemove and return the last itempop(self: dlib.mmod_rectangless, i: int) -> dlib.mmod_rectanglesRemove and return the item at index iremove(self: dlib.mmod_rectangless, x: dlib.mmod_rectangles) → NoneRemove the first item from the list whose value is x. It is an error if there is no such item.

    总结

    以上是生活随笔为你收集整理的dlib实现人脸检测方法的全部内容,希望文章能够帮你解决所遇到的问题。

    如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。