Name

    EXT_face_detect

Contact

    Ian Stewart, NVIDIA  (istewart 'at' nvidia.com)

Contributors

    Ian Stewart

Notice

    Copyright NVIDIA Corporation, 2016

IP Status

    NVIDIA Proprietary.

Status

    First Draft -- shipping with Argus 0.91

Version

    Version 1, March 2, 2016

Number

    Argus Extension #1

Dependencies

    This extension is written based on the wording of the Argus 0.91
    specification.

Overview

    This extension adds internal face detection capabilities to Argus.
    Only the most basic face detection capabilities are introduced by this
    extension: a single enable in a Request, and detection results included
    as part of the CaptureMetadata. More complex metadata and/or features,
    such as face tracking (movement deltas) and integration with the
    AutoControl feedback loop, is not included with this extension.

    Every face detection result that is returned by Argus is described by
    a normalized rectangular region of the image that contains the face,
    along with a confidence value. The confidence value is in the range
    [0, 1], where 0 is the lowest and 1 is the highest confidence.
    For a typical application that highlights faces in a scene, filtering
    results to ignore those with a confidence of less than 0.5 is suggested.

    Exactly how the Argus driver detects faces is implementation-dependent,
    and thus is not covered by this specification. Because of this, the
    performance implications of enabling face detection is not discussed here.
    Suffice to say, enabling face detection will increase the amount of
    processing done per frame and may have a negative impact on performance.

New Files

    Ext/FaceDetect.h

New Tokens

    Type           Name
    -------------  ----------------------------------
    ExtensionName  EXT_FACE_DETECT
    InterfaceID    IID_FACE_DETECT_CAPS
    InterfaceID    IID_FACE_DETECT_SETTINGS
    InterfaceID    IID_FACE_DETECT_METADATA
    InterfaceID    IID_FACE_DETECT_RESULT

New Objects

    None

New Interfaces

    IFaceDetectCaps (CaptureSession)
        uint32_t getMaxFaceDetectResults() const;

    IFaceDetectSettings (Request)
        void setFaceDetectEnable(bool enable);
        bool getFaceDetectEnable() const;

    IFaceDetectMetadata (CaptureMetadata)
        Status getFaceDetectResults(std::vector<InterfaceProvider*> *results) const;

    IFaceDetectResult (InterfaceProvider -- see getFaceDetectResults())
        const NormalizedRect& getRect() const;
        float getConfidence() const;


Additions to Chapter 3 of the Argus 0.91 Specification (Objects and Interfaces)

    Add to the supported interfaces in section "3.4 CaptureSession":

        IFaceDetectCaps
            Exposes the face detection capabilities of a CaptureSession.

    Insert new section after "3.4 CaptureSession":

    "3.4.1 Face Detect Capabilites

    A CaptureSession's face detection capabilities are exposed using the
    IFaceDetectCaps interface:

        Name                  Type      Description
        --------------------  --------  ----------------------------------
        MaxFaceDetectResults  uint32_t  Maximum face detection results per
                                        request. Must be >= 1.

    Add new major control category to section "3.5 Request":

      * Per-request post-processing settings. These control optional
        post-processing algorithms that are performed once per request.
        Examples of post-processing includes face detection, which will cause
        Argus to detect faces in the captured image and output the results with
        the output CaptureMetadata.

    Add to the supported interfaces in section "3.5 Request":

        IFaceDetectSettings
            Provides a control to enable or disable internal face detection.

    Insert new section after "3.6.3 Stream Settings":

    "3.6.4 Face Detect Control Settings

    Face detection is enabled or disabled on a per-Request basis using
    the IFaceDetectSettings interface:

        Name                Type    Description
        ------------------  ------  --------------------------------------------
        FaceDetectEnable    bool    Enables or disables the internal face
                                    detection algorithm.

    Add to the supported interfaces in section "3.7 CaptureMetadata":

        IFaceDetectMetadata
            Provides access to face detection results.

    Insert new section after "3.7 CaptureMetadata":

    "3.7.1 Face Detect Metadata

    Face detection results are available in the CaptureMetadata using the
    IFaceDetectResult interface:

        Name                Type                        Description
        ------------------  --------------------------  -----------------------
        FaceDetectResults   vector<InterfaceProvider*>  Face detection results.

    Every object in the face detection results corresponds with the results of
    a single detected face, and supports the IFaceDetectResult interface:

        Name        Type            Description
        ----------  --------------  -----------------------
        Rect        NormalizedRect  Normalized region of the image which
                                    surrounds the face.
        Confidence  uint8_t         Confidence level of the result in the range
                                    [1, 100], where 100 is the highest
                                    confidence.

Issues

    1.  Can a result Rect be more strictly defined with respect to where the
        rect lies relative to the facial features/bounds of the face?

        Not defining limits could have two potential drawbacks:
          a) A full-window [0, 1] rect can be returned for any face.
          b) Rects may very significantly on an implementation basis, requiring
             applications to calibrate results based on the Argus implementation
             or hardware.

        UNRESOLVED.


Revision History

    #1  (March 2, 2016) Ian Stewart
        - Initial draft

# vim:ai:ts=4:sts=4:expandtab:textwidth=80
