dlibは顔検出メソッドを実装します

dlib概要

Dlibは、機械学習アルゴリズムを含むC++オープンソースのツールキットです。Dlib実際の問題を解決するために、多くの複雑な機械学習ソフトウェアを作成するのに役立ちます。Dlibロボット工学、組み込みデバイス、携帯電話、大規模な高性能コンピューティング環境など、産業界や学術界で広く使用されています

顔検出

CPUバージョンの顔検出アルゴリズム

検出手順

  1. 豚探知機を手に入れる
  2. 画像を渡します。データ形式は numpy.ndarray です。
  3. (オプション) スコア値とテストリストを取得します
  4. 顔の座標を取得する

サンプルコード:

import dlib

from 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版顔検出アルゴリズム

検出手順

  1. モデルファイルをダウンロードする
  2. モデルファイルをロードし、畳み込みニューラルネットワークの顔検出オブジェクトを生成します。
  3. 画像を渡します。データ形式は numpy.ndarray です。
  4. (オプション) スコア値とテストリストを取得します
  5. 顔の座標を取得する

サンプルコード

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

クラス定義とインターフェースのソースコード

顔検出で使用される重要なクラス (概要)

  1. dlib.fhog_object_detector: ブタモデルの顔検出オブジェクト、一般的な方法:__call()__およびrun()
  2. dlib.rectangle: 顔検出結果。顔の長方形領域を表すために使用されます。一般的な方法:left() right()``top()``bottom()
  3. dlib.cnn_face_detection_model_v1: 畳み込みニューラル ネットワーク モデルの顔検出オブジェクト、一般的な方法:__call()__
  4. dlib.mmod_rectangle: 顔を表す巨大な領域と検出信頼度を含む顔検出結果。メンバーには以下が含まれます:rectconfidence、ここで、rectdlib.rectangleタイプ、confidencefloatタイプ
  5. 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:
        """
        requires
        image is a numpy ndarray containing either an 8bit grayscale or RGB image.
        upsample_num_times >= 0
        ensures
        This 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_height
        detection_window_width
        num_detectors
        '''
        pass

    def run(self: dlib.fhog_object_detector, image: array, upsample_num_times: int = 0L,
            adjust_threshold: float = 0.0) -> tuple:
        """
        requires
        image is a numpy ndarray containing either an 8bit grayscale or RGB image.
        upsample_num_times >= 0
        ensures
        This 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.
        """
        pass

    def run_multiple(detectors: list, image: array, upsample_num_times: int = 0L, adjust_threshold: float = 0.0)->tuple:
        """
        requires
        detectors is a list of detectors.
        image is a numpy ndarray containing either an 8bit grayscale or RGB image.
        upsample_num_times >= 0
        ensures
        This 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.
        """
        pass

    def save(self: dlib.fhog_object_detector, detector_output_filename: unicode)->None:
        '''
        Save a simple_object_detector to the provided path.
        '''
        pass

rectangleクラスインターフェース定義

class dlib.rectangle
    This 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) -> None
    area(self: dlib.rectangle) → int
    bl_corner(self: dlib.rectangle) → dlib.point
        Returns the bottom left corner of the rectangle.

    bottom(self: dlib.rectangle) → int
    br_corner(self: dlib.rectangle) → dlib.point
        Returns the bottom right corner of the rectangle.

    center(self: dlib.rectangle) → dlib.point
    contains(*args, **kwargs)
        Overloaded function.

        contains(self: dlib.rectangle, point: dlib.point) -> bool
        contains(self: dlib.rectangle, point: dlib.dpoint) -> bool
        contains(self: dlib.rectangle, x: int, y: int) -> bool
        contains(self: dlib.rectangle, rectangle: dlib.rectangle) -> bool
        dcenter(self: dlib.rectangle) → dlib.point
    height(self: dlib.rectangle) → int
    intersect(self: dlib.rectangle, rectangle: dlib.rectangle) → dlib.rectangle
    is_empty(self: dlib.rectangle) → bool
    left(self: dlib.rectangle) → int
    right(self: dlib.rectangle) → int
    tl_corner(self: dlib.rectangle) → dlib.point
        Returns the top left corner of the rectangle.

    top(self: dlib.rectangle) → int
    tr_corner(self: dlib.rectangle) → dlib.point
        Returns the top right corner of the rectangle.

    width(self: dlib.rectangle) → int

cnn_face_detection_model_v1クラス定義

class dlib.cnn_face_detection_model_v1
    This 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_rectangle
    Wrapper around a rectangle object and a detection confidence score.
    
    __init__
    x.__init__(...) initializes x; see help(type(x)) for signature
    
    confidence
    rect
class dlib.mmod_rectangles
    An 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) -> None
    Copy constructor
    
    __init__(self: dlib.mmod_rectangles, arg0: iterable) -> None
    append(self: dlib.mmod_rectangles, x: dlib.mmod_rectangle) → None
    Add an item to the end of the list
    
    count(self: dlib.mmod_rectangles, x: dlib.mmod_rectangle) → int
    Return the number of times x appears in the list
    
    extend(*args, **kwargs)
    Overloaded function.
    
    extend(self: dlib.mmod_rectangles, L: dlib.mmod_rectangles) -> None
    Extend the list by appending all the items in the given list
    
    extend(self: dlib.mmod_rectangles, arg0: list) -> None
    insert(self: dlib.mmod_rectangles, i: int, x: dlib.mmod_rectangle) → None
    Insert an item at a given position.
    
    pop(*args, **kwargs)
    Overloaded function.
    
    pop(self: dlib.mmod_rectangles) -> dlib.mmod_rectangle
    Remove and return the last item
    
    pop(self: dlib.mmod_rectangles, i: int) -> dlib.mmod_rectangle
    Remove and return the item at index i
    
    remove(self: dlib.mmod_rectangles, x: dlib.mmod_rectangle) → None
    Remove the first item from the list whose value is x. It is an error if there is no such item.
class dlib.mmod_rectangless
    A 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) -> None
    Copy constructor
    
    __init__(self: dlib.mmod_rectangless, arg0: iterable) -> None
    append(self: dlib.mmod_rectangless, x: dlib.mmod_rectangles) → None
    Add an item to the end of the list
    
    count(self: dlib.mmod_rectangless, x: dlib.mmod_rectangles) → int
    Return the number of times x appears in the list
    
    extend(*args, **kwargs)
    Overloaded function.
    
    extend(self: dlib.mmod_rectangless, L: dlib.mmod_rectangless) -> None
    Extend the list by appending all the items in the given list
    
    extend(self: dlib.mmod_rectangless, arg0: list) -> None
    insert(self: dlib.mmod_rectangless, i: int, x: dlib.mmod_rectangles) → None
    Insert an item at a given position.
    
    pop(*args, **kwargs)
    Overloaded function.
    
    pop(self: dlib.mmod_rectangless) -> dlib.mmod_rectangles
    Remove and return the last item
    
    pop(self: dlib.mmod_rectangless, i: int) -> dlib.mmod_rectangles
    Remove and return the item at index i
    
    remove(self: dlib.mmod_rectangless, x: dlib.mmod_rectangles) → None
    Remove the first item from the list whose value is x. It is an error if there is no such item.

おすすめ

転載: blog.csdn.net/LJX_ahut/article/details/124969818