DFX Extraction library v4.14.5
enabling applications to perform DFX blood flow analysis
DFX Extraction library v4.14.5 Documentation

The primary purpose of the Nuralogix DeepAffex™ Extraction library (DFX Extraction library) is to convert a series of face-tracked images into resultant blood-flow. This procedure is referred to as 'blood-flow extraction' and is the first stage in the Transdermal Optical Imaging (TOI) pipeline required for DeepAffex™ processing. The DFX Extraction library is used to generate measurement data chunks that are then forwarded to the DeepAffex™ Server for analysis and processing.

The DFX Extraction library consists of:

  • libdfx - a precompiled C library distributed as header files and binaries
  • libdfxcpp - a C++ wrapper for libdfx, distributed as C++ source files and header files

We provide 64-bit binaries for Windows, macOS and Ubuntu Linux. The C++ wrapper layer that sits on top of the C API is a convenient access layer for C++ applications. It requires access to an OpenCV implementation. (The C library has no external dependencies).

Getting started

The dfx::DFXFactory is the primary entry point for the C++ DFX Extraction library, and is used to create one or more dfx::Collectors.

The DFX Extraction library leaves it up to the client application to capture frames (from a camera or a video file) and to populate the dfx::VideoFrame structure. This is done so that client applications and devices can capture in any format that is most suitable to their environment.

The client application is also responsible for ensuring that dfx::Frames (created from dfx::VideoFrames) have accurate timestamps and dfx::Faces. We provide no built-in face pose estimation as it is available as a commodity with implementations like dlib and Visage or via platform-specific libraries like Apple's Vision Framework or Android's FaceDetector. Whatever the output of the face tracking engine, it will need to be transformed into dfx::PosePoint definitions conforming to the standard MPEG-4 Facial Data Points and attached to the dfx::Face structure.

Once sufficient dfx::Frames have been added to the collector, the collector will indicate that a chunk is ready (isChunkReady) and the client application will need to get the dfx::ChunkPayload (using calls to getChunkData and getChunkPayload) and make a network call to the DeepAffex™ Server API.

The DeepAffex™ Server API leverages well formed protobuf structures for the wire protocol and communicates using WebSockets or REST.