.. _architecture: ************************************* Architecture ************************************* Though you mostly interact with FindFace Multi through its web interface, be sure to take a minute to learn the FindFace Multi architecture. This knowledge is essential for the FindFace Multi deployment, integration, maintenance, and troubleshooting. .. rubric:: In this chapter: .. contents:: :local: Recognition Objects and Recognition Process ================================================== FindFace Multi can recognize the following objects and their features: * human faces * human bodies (silhouettes) * cars .. note:: The face recognition functionality is enabled by default. Make changes to configuration files to enable the :ref:`body ` and :ref:`car ` recognition. FindFace Multi detects an object in the photo or video and prepares its image through normalization. The normalized image is then used for extracting the object's feature vector (an n-dimensional vector of numerical features that represent the object). Object feature vectors are stored in the database and further used for verification and identification purposes. Architectural Elements =============================== FindFace Multi consists of the following fundamental architectural elements: * FindFace core, a cutting-edge AI-based recognition technology that can be used as a separate product `FindFace Enterprise Server `_.  * FindFace Multi, which is a turnkey application module for FindFace Enterprise Server. Architecture scheme ------------------------ |architecture_en| .. |architecture_en| image:: /_static/architecture_en.png .. |architecture_ru| image:: /_static/architecture_ru.png FindFace Core ------------------------- The FindFace core includes the following components: +---------------------------+--------------+--------------------------------------------------------------------------------------+--------------------------------------------+ | Component | Ports in use | Description | Vendor | +===========================+==============+======================================================================================+============================================+ | findface-extraction-api | 18666 | Service that uses neural networks to detect an object in an image and extract its | NtechLab own deployment | | | | feature vector. It also recognizes object attributes | | | | | (for example, gender, age, emotions, beard, glasses, face mask - for face objects). | | | | | CPU- or GPU-acceleration. | | +---------------------------+--------------+--------------------------------------------------------------------------------------+ | | findface-sf-api | 18411 | Service that implements the internal HTTP API for object detection and recognition. | | +---------------------------+--------------+--------------------------------------------------------------------------------------+ | | findface-tarantool-server | 32001, | Service that provides interaction between the ``findface-sf-api`` service and the | | | | shard ports | feature vector database (the Tarantool-powered database that stores object | | | | (default | feature vectors. | | | | 330xx, 81xx) | | | +---------------------------+--------------+--------------------------------------------------------------------------------------+ | | findface-upload | 3333 | NginX-based web server used as a storage for original images, thumbnails and | | | | | normalized object images. | | +---------------------------+--------------+--------------------------------------------------------------------------------------+ | | findface-facerouter | 18820 | Service used to define processing directives for detected objects. In FindFace | | | | | Multi, its functions are performed by ``findface-security`` | | | | | (see :ref:`application-module`). If necessary, you can still deploy and | | | | | enable this component for integration purposes (see :ref:`Plugins`). | | +---------------------------+--------------+--------------------------------------------------------------------------------------+ | | findface-video-manager | 18810, | Service, part of the video object detection module, that is used for managing the | | | | 18811 | video object detection functionality, configuring the video object detector | | | | | settings and specifying the list of to-be-processed video streams. | | +---------------------------+--------------+--------------------------------------------------------------------------------------+ | | findface-video-worker | 18999 | Service, part of the video object detection module, that recognizes an object in | | | | | the video and posts its normalized image, full frame and metadata (such as | | | | | detection time) to the ``findface-facerouter`` service for further processing | | | | | according to given directives. Provides :ref:`face liveness detection ` | | | | | if enabled. CPU- or GPU-acceleration. | | +---------------------------+--------------+--------------------------------------------------------------------------------------+ | | findface-ntls | 443 | License server which interfaces with the NtechLab Global License Server or a USB | | | | (TCP), | dongle to verify the :ref:`license ` of your FindFace Multi | | | | 3133, | instance. | | | | 3185 | | | +---------------------------+--------------+--------------------------------------------------------------------------------------+--------------------------------------------+ | Tarantool | Shard ports | Third-party software which implements the feature vector database that stores | `Tarantool `_ | | | (default | extracted object feature vectors and identification events. The system data, | | | | 330xx, 81xx) | dossiers, user accounts, and camera settings are stored in PostgreSQL | | | | | (part of the FindFace Multi application module). | | +---------------------------+--------------+--------------------------------------------------------------------------------------+--------------------------------------------+ | etcd | 2379 | Third-party software that implements a distributed key-value store for | `etcd `_ | | | | ``findface-video-manager``. Used as a coordination service in the distributed | | | | | system, providing the video object detector with fault tolerance. | | +---------------------------+--------------+--------------------------------------------------------------------------------------+--------------------------------------------+ | NginX | 80; | Third-party software which implements the system web interfaces. | `nginx `_ | | | SSL: 8002, | | | | | 8003, 443, | | | | | 80 | | | +---------------------------+--------------+--------------------------------------------------------------------------------------+--------------------------------------------+ | memcached | 11211 | Third-party software which implements a distributed memory caching system. | `memcached `_ | | | | Used by ``findface-extraction-api`` as a temporary storage for extracted object | | | | | feature vectors before they are written to the feature vector database powered by | | | | | Tarantool. | | +---------------------------+--------------+--------------------------------------------------------------------------------------+--------------------------------------------+ .. _application-module: FindFace Multi Application Module --------------------------------------------- The FindFace Multi application module includes the following components: +-----------------------+--------------+---------------------------------------------------------------------------------------+--------------------------------------------+ | Component | Ports in use | Description | Vendor | +=======================+==============+=======================================================================================+============================================+ | findface-security | Configurable | Component that serves as a gateway to the FindFace core. | NtechLab own deployment | | | | Provides interaction between the FindFace Core and the web interface, the system | | | | | functioning as a whole, HTTP and web socket, object monitoring, event | | | | | notifications, episodes, webhooks, and counters. | | | | | Includes the following internal services: NTLS checker, Counter manager, Webhooks | | | | | manager, Persons clusterizator, Event episodes manager, and Video archive queue | | | | | manager. The last four can be enabled and disabled via the | | | | | ``/etc/findface-security/config.py`` configuration file. | | +-----------------------+--------------+---------------------------------------------------------------------------------------+ | | findface-security-ui | Configurable | Main web interface that is used to interact with FindFace Multi. | | | | | Allows you to work with object identification events, search for | | | | | objects, manage cameras, users, dossiers, and watch lists, collect real-time | | | | | statistics, and many more. | | +-----------------------+--------------+---------------------------------------------------------------------------------------+ | | findface-counter | 18300 | Service used for event deduplication. | | +-----------------------+--------------+---------------------------------------------------------------------------------------+ | | findface-liveness-api | 18301 | Besides the embedded functionality provided by ``findface-video-worker``, face | | | | | liveness detection can also be harnessed as a standalone service | | | | | ``findface-liveness-api``. The service takes a specific number of frames from a video | | | | | fragment and returns the best quality face, and decimal liveness result averaged | | | | | across the taken frames. The service is also used for authentication based on facial | | | | | recognition. See :ref:`liveness-api` and :ref:`authentication`. | | +-----------------------+--------------+---------------------------------------------------------------------------------------+--------------------------------------------+ | PostgreSQL | 5432 | Third-party software which implements the main system database that stores | `PostgreSQL `_ | | | | detailed and categorized dossiers on particular objects (faces, bodies, cars), and | | | | | data for internal use such as user accounts and camera settings. | | | | | The object feature vectors and object identification events are stored in Tarantool | | | | | (part of the FindFace core). | | +-----------------------+--------------+---------------------------------------------------------------------------------------+--------------------------------------------+ | Pgbouncer | 5439 | Third-party software, a lightweight connection pooler for PostgreSQL. Optional, | `PgBouncer `_ | | | | used to increase the database performance under high load. | | +-----------------------+--------------+---------------------------------------------------------------------------------------+--------------------------------------------+ | Redis | 6379 | Third-party software which implements a message broker inside ``findface-security``. | `Redis `_ | +-----------------------+--------------+---------------------------------------------------------------------------------------+--------------------------------------------+ | Django | 5439 | Third-party software which implements a web framework for the FindFace Multi | `Django `_ | | | | web interface. | | +-----------------------+--------------+---------------------------------------------------------------------------------------+--------------------------------------------+ .. seealso:: :ref:`components` Single- and Multi-Host Deployment ================================== You can deploy FindFace Multi on a single host or in a cluster environment. If you opt for the latter, we offer you one of the following deployment schemes: * Deploy FindFace Multi standalone and distribute additional ``findface-video-worker`` components across multiple hosts. * Distribute the FindFace Multi components across multiple hosts. If necessary, set up load balancing. See :ref:`cluster-installation` for details. CPU- and GPU-acceleration ========================================== The ``findface-extraction-api`` and ``findface-video-worker`` services can be either CPU- or GPU-based. During installation from the developer-friendly :ref:`installer `, you will have an opportunity to choose the acceleration type you need. If you opt to install FindFace Multi from the :ref:`repository package `, deploy the ``findface-extraction-api`` and ``findface-video-worker-cpu`` packages on a CPU-based server, and the ``findface-extraction-api-gpu`` and/or ``findface-video-worker-gpu`` packages on a GPU-based server. .. important:: Refer to :ref:`requirements` when choosing hardware configuration. .. important:: If the resolution of a camera(s) in use is more than 1280x720px, it is strongly recommended to use the GPU-accelerated package ``findface-video-worker-gpu``. .. note:: The :ref:`liveness detector ` is much slower on CPU than on GPU.