Wisimage Face Recognition SDK V1.7.0 User manual · 2019-03-18 · Launch CMake GUI and drop the...

41
Wisimage Face Recognition SDK V1.7.0 User manual Wisimage July 2014

Transcript of Wisimage Face Recognition SDK V1.7.0 User manual · 2019-03-18 · Launch CMake GUI and drop the...

Page 1: Wisimage Face Recognition SDK V1.7.0 User manual · 2019-03-18 · Launch CMake GUI and drop the file CMakeLists.txt from the directory EmptyProject into the the CMake GUI Choose

Wisimage Face Recognition SDK V1.7.0User manual

Wisimage

July 2014

Page 2: Wisimage Face Recognition SDK V1.7.0 User manual · 2019-03-18 · Launch CMake GUI and drop the file CMakeLists.txt from the directory EmptyProject into the the CMake GUI Choose

Wisimage 2

CONTENTS

1 Introduction 4

2 Installation 42.1 Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42.2 Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42.3 Mac OS X . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52.4 Trial version . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52.5 Step by step configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52.6 Compiling and running the examples . . . . . . . . . . . . . . . . . . . . . . . 5

3 Overview 63.1 Features . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63.2 Recommendations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83.3 System description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93.4 Database creation and training . . . . . . . . . . . . . . . . . . . . . . . . . . 113.5 Recognition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133.6 Anti-spoofing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143.7 Soft Biometrics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14

4 Performances 154.1 Recognition results . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154.2 Recognition speed . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164.3 Memory usage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18

5 How to use the SDK ? 185.1 General description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185.2 Encapsulating input data : Frame . . . . . . . . . . . . . . . . . . . . . . . . . 205.3 Face Detection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20

5.3.1 Using the included detectors . . . . . . . . . . . . . . . . . . . . . . . 205.3.2 Implementing your own detector . . . . . . . . . . . . . . . . . . . . . 21

5.4 Database . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215.4.1 Database initialization . . . . . . . . . . . . . . . . . . . . . . . . . . 215.4.2 Database management . . . . . . . . . . . . . . . . . . . . . . . . . . 22

5.5 Recognition context . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235.6 Recognition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25

5.6.1 Identification . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 265.6.2 Verification . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26

Head Office8 Allée Evariste GaloisF-63000 Clermont-FerrandFranceemail : [email protected] : www.wisimage.com

Page 3: Wisimage Face Recognition SDK V1.7.0 User manual · 2019-03-18 · Launch CMake GUI and drop the file CMakeLists.txt from the directory EmptyProject into the the CMake GUI Choose

Wisimage 3

5.6.3 Getting recognition results . . . . . . . . . . . . . . . . . . . . . . . . 275.7 Soft biometrics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 285.8 Settings and options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 295.9 Error handling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 295.10 XML output . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29

6 Example projects 316.1 Wisimage SDK Example1 : multiple person recognition on a still image . . . . 316.2 Wisimage SDK Example2 : live video recognition . . . . . . . . . . . . . . . . 326.3 Wisimage SDK Example3 : getting the N best results on a video . . . . . . . . 34

7 Functions listing 35

8 F.A.Q. 35

9 Known bugs/Limitations 37

10 Future Releases 38

11 Licensing of third party libraries 3911.1 Boost . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3911.2 OpenCV . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3911.3 pugixml . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40

12 Copyright 41

Head Office8 Allée Evariste GaloisF-63000 Clermont-FerrandFranceemail : [email protected] : www.wisimage.com

Page 4: Wisimage Face Recognition SDK V1.7.0 User manual · 2019-03-18 · Launch CMake GUI and drop the file CMakeLists.txt from the directory EmptyProject into the the CMake GUI Choose

Wisimage 4

1 INTRODUCTIONThe Wisimage Face Recognition SDK is a Software Development Kit for performing humanface detection and recognition in digital images or videos. It is aimed at video-surveillanceintegrators, biometric system developers, or any developper who need Face Recognition intheir application. It can be used for various applications such as identity check, general video-surveillance and law enforcement, control access, face tagging in photo collections, etc. . . Itincludes a complete chain of processing, including face detection, tracking, recognition, as wellas some face characterics (eyes, mouth, nose location, age, gender...). It can handle video, stillimage, or live video feed. The SDK is available for a desktop application, Windows (XP / Vista/ 7 / 8), Linux or Mac OS X, in the C++ language.

The Wisimage Face Recognition algorithm is among the best of the scientific literature,while being far less computation intensive than most. The method uses a light-weight descrip-tor based on gradient orientations, which characterizes object details at fine scale, while alsoencoding information over larger regions.

2 INSTALLATION

2.1 WINDOWS

Run the installer and follow the instructions. It is recommended to keep the default installationpath (C:/WisImageSDK170) so you will not need admin rights to run the examples. If you’reusing Windows, you might need to set your PATH environment variable in order to use theinstalled binaries:

• REG ADD "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment"/v Path /d "%PATH%;C:\WisimageSDK170\bin" /f

Then restart your system.

2.2 LINUX

A .deb package is provided. Use this command to install the package and its dependencies:

• sudo dpkg -i WisImageFaceRecognition_1.7.0.deb

It may be necessary to refresh the system cache for the newly installed libraries:

• sudo ldconfig

Libraries, documentation and examples are installed in /usr/local/. To run the examples, go to/usr/local/share/wisfr/examples. Examples must be compiled, for examples using the providedCMake (recommended). See section 2.6 for details.

Head Office8 Allée Evariste GaloisF-63000 Clermont-FerrandFranceemail : [email protected] : www.wisimage.com

Page 5: Wisimage Face Recognition SDK V1.7.0 User manual · 2019-03-18 · Launch CMake GUI and drop the file CMakeLists.txt from the directory EmptyProject into the the CMake GUI Choose

Wisimage 5

2.3 MAC OS XAn OS X version is available on request. Please contact us if you are interested.

2.4 TRIAL VERSION

A valid license file is needed to run the trial version. You should have received a Licence textfile along with the SDK. Please request a license file from Wisimage if this is not the case. Thelicense file should be copied in your working directory.

2.5 STEP BY STEP CONFIGURATION

A ready to use empty project is provided in the SDK directory. This will build a project for yourfavorite compiler or IDE using CMake. Only CMake versions 2.8 and above are supported.

• Download and install CMake from http://www.cmake.org/cmake/resources/software.html

• Go to the directory where you installed the SDK, and cut and paste the directory Emp-tyProject anywhere you like (or leave it here, but pay attention to your user rights).

• Launch CMake GUI and drop the file CMakeLists.txt from the directory EmptyProjectinto the the CMake GUI

• Choose where to build the binaries, for example EmptyProject/build

• Click on Configure and choose your compiler from the list.

• (LINUX): CMAKE_BUILD_TYPE should be Release

• Set the INSTALL_ROOTPATH variable to where the SDK is installed, for exampleC:\WisimageSDK170, re-click on Configure

• Click on Generate

• Go to where the binaries have been generated, and open the solution/project (a .sln solu-tion if you chose Visual c++ for example)

• Start editing the main.cpp to build your software

2.6 COMPILING AND RUNNING THE EXAMPLES

Three examples are already compiled in the bin directory. Double-clicking on one of the .exeshould launch the example. If this does not work, or if you want to modify or re-compile theseexamples, follow these steps to build a project for your favorite compiler or IDE using CMake.Only CMake versions 2.8 and above are supported.

Head Office8 Allée Evariste GaloisF-63000 Clermont-FerrandFranceemail : [email protected] : www.wisimage.com

Page 6: Wisimage Face Recognition SDK V1.7.0 User manual · 2019-03-18 · Launch CMake GUI and drop the file CMakeLists.txt from the directory EmptyProject into the the CMake GUI Choose

Wisimage 6

• Download and install CMake from http://www.cmake.org/cmake/resources/software.html

• Go to the examples directory and choose one of the three.

• Launch CMake GUI and drop the file CMakeLists.txt from one of the example directoryinto the CMake GUI

• In CMake GUI, choose the path where the project will be generated, by filling where tobuild the binaries, for example with C:/WisImageSDK170/examples/01/build

• Click on Configure and choose your compiler from the list (Linux: choose Unix Make-files)

• (LINUX): CMAKE_BUILD_TYPE should be Release

• Tick the WISIMAGE_ENABLE_SHORE box to use the Shore face detection engine(faster and better results). If left unticked, OpenCV is used.

• Click on Generate.

• Go to where the binaries have been generated, and open the solution/project (a .sln solu-tion if you chose Visual c++ for example)

• Compile using your IDE or make

A step by step explanation for each example is available in section 6.Remark : when runnning the examples on Linux, quitting the GUI using ’ESC’ or ’q’ might notwork. Please use Ctrl-C in the terminal from where the example was launched, or kill it.

3 OVERVIEW

3.1 FEATURES

The Wisimage Face Recognition SDK has several features that are combined in a efficient API.

• Face detection: Fast and precise localization of all human faces present in the image.

• Illumination robustness: A model based on the human retina is used to pre-processimages, so as to be illumination independent.

• Recognition score: get a score between 0 and 1 for each recognition

• Multiple faces: detection and recognition of multiple faces in one frame

Head Office8 Allée Evariste GaloisF-63000 Clermont-FerrandFranceemail : [email protected] : www.wisimage.com

Page 7: Wisimage Face Recognition SDK V1.7.0 User manual · 2019-03-18 · Launch CMake GUI and drop the file CMakeLists.txt from the directory EmptyProject into the the CMake GUI Choose

Wisimage 7

• Support multiple reference faces: Improved recognition rates when several faces perperson faces are used.

• N best matches: Get only the best match, or the set of the N best matches for each query.

• Face identification and face verification: Suitable for tasks of face verification (au-thentication, one-to-one), or face identification (one to many)

• Database size: depends on amount of RAM available, tested up to 800.000 images forthe 64 bits version.

• Multi-database modes: depending on the application and platform, choose betweenefficiency, speed or disk-saving.

• Small Template size: 2-6 kB in the fast database mode. Up to 20 kB otherwise.

• Fast computing: only 10 ms for face recognition (template computation and matchingwith a database size of 45). 50 ms for the total process.

• Soft Biometrics: General information about a face: age and gender estimation, mouth,eyes and nose position

• Easy Enrollment: A single function call to enroll a person from one image, supportingformats JPEG, BMP, PNG, TIFF, Portable image format (pbm, pgm, ppm), Sun rasters(sr, ras)

• Anti-spoofing mode: [video only] The anti-spoofing mode can counter photograph-based attacks

• Tracking: [video only] Face tracking helps to keep track of the face in difficult situations(profile, occlusions...)

• Temporal smoothing: [video only] Average face recognition results over time to preventspurious recognitions

• Robustness to Blur: Blurred frames are not taken into account as they may confuserecognition.

• XML output: optionally output results in XML format

Head Office8 Allée Evariste GaloisF-63000 Clermont-FerrandFranceemail : [email protected] : www.wisimage.com

Page 8: Wisimage Face Recognition SDK V1.7.0 User manual · 2019-03-18 · Launch CMake GUI and drop the file CMakeLists.txt from the directory EmptyProject into the the CMake GUI Choose

Wisimage 8

3.2 RECOMMENDATIONS

HARDWARE REQUIREMENTS

• Intel Core 2 duo @ 2.6 GHz

• 1 GB RAM (16 GB or more recommended for large databases)

• 200 MB of free space on hard drive (SDK alone), 300 MB needed for SDK+GUI

SUPPORTED CAMERAS AND IMAGE QUALITY

• Any type of camera device in the visible domain can be used (infrared is not supported),including webcams. You just need a library to access or decode video/image to feed rawRGB or Luminance values to the SDK. You might consider OpenCV, FFMPEG, or Gilfor example.

• A "Plug and play" code example for USB webcams is available, see section 6.

• We recommend a minimum video resolution of 640x480 pixels. Better results are ex-pected with higher resolution, especially with HD 1920x1080.

• A minimum face size of 24x24 pixels is mandatory. 60x60 is the recommended minimumsize for acceptable results. 128x128 and above is optimal.

• Blurry videos, or with a lot of motion will probably not output any results.

ENROLLMENT RECOMMENDATIONS Enrollment is the process of taking the pictures ofeach individual that has to be recognized, in order to build the face database. Great care mustbe taken during enrollment, in order to have the best possible images in the face database.While images of lesser quality can be used, it will directly impact the overall performance ofthe system. In the ideal case, enrollement should be a standardized process where pictures ofall individuals are taken individually, as mugshots. We list here the conditions in an ideal case,e.g. where acquisition is possible and can be controlled.

• Image quality: High resolution, sharp images taken with a digital camera are recom-mended.

• Pose: Images should be mug-shot-like, frontal face with a neutral expression. No heavymake-up.

• Lighting: Controlled light is desirable. Direct and uniform light, with no shadowsvisible on the face. Avoid reflections, for example on glasses.

Head Office8 Allée Evariste GaloisF-63000 Clermont-FerrandFranceemail : [email protected] : www.wisimage.com

Page 9: Wisimage Face Recognition SDK V1.7.0 User manual · 2019-03-18 · Launch CMake GUI and drop the file CMakeLists.txt from the directory EmptyProject into the the CMake GUI Choose

Wisimage 9

Figure 1: Workflow of the general recognition process.

• Background: A uniform background might help, but is not crucial for the performance.There should be enough space around the face (no close-up that cuts parts of the face)

• Coherence: Better results will be obtained if all people in the database are acquired inthe same way. Ideally, pictures of every person are taken in the same room with the sameillumination).

• Multiple enrollment: You can use multiple images of a single individual (ex: glasseson/off, slight head rotation. . . ) for increased robustness. Bad results can happen if thisis not done for every individual in the database (same statement of database coherenceas the above line). Note that several images of good quality will probably improve theretrieval result, but adding one bad quality image (strong head rotation, profile, blur...)will decrease the recognition rate.

The above conditions are not mandatory, but the closer the database respects these conditions,the better.

3.3 SYSTEM DESCRIPTION

The workflow of the general application is given in Figure 1. The process needs two inputs:the face database (e.g. a set of images of known people) and the input photo of the person torecognize. The first step is to create a face database. It can be done in two ways:

1. Create an empty database

2. Load an existing database file.

Head Office8 Allée Evariste GaloisF-63000 Clermont-FerrandFranceemail : [email protected] : www.wisimage.com

Page 10: Wisimage Face Recognition SDK V1.7.0 User manual · 2019-03-18 · Launch CMake GUI and drop the file CMakeLists.txt from the directory EmptyProject into the the CMake GUI Choose

Wisimage 10

Figure 2: Detailed workflow of the core processing, from face detection to face descriptorcomputation. Optional processing are in light blue.

Adding faces to the face database is called Enrollement, i.e. store people identity and faceimage into a database. This can be done from mugshot images, or from less standard images,where several people appear.The second step is to compute a descriptor from the input face and to match this descriptoragainst each descriptor in the database. The best match gives an output score between 0 and 1.This score can then be thresholded to give a recognition decision.

Figure 2 gives a detailed workflow of the "Process Input" box of Figure 1. This is the corerecognition processing. Several optional processing are available, that can greatly improve therecognition results.

• Face detection is the process that detects the presence of one or several human faces inthe image. It is almost always necessary, it is however possible not to use it and performrecognition on the whole image. It might be used for example for testing existing sets ofcropped faces, like the standard database FERET from the National Institute of Standardsand Technology (NIST). (default: on)

• When processing a video, tracking can be used to recover from missing detections. TheSDK gives you access to the tracked faces coordinates. However, tracked faces are notsent to the recognition process, since they are generally of bad quality. This behavior

Head Office8 Allée Evariste GaloisF-63000 Clermont-FerrandFranceemail : [email protected] : www.wisimage.com

Page 11: Wisimage Face Recognition SDK V1.7.0 User manual · 2019-03-18 · Launch CMake GUI and drop the file CMakeLists.txt from the directory EmptyProject into the the CMake GUI Choose

Wisimage 11

can however be changed with the SDK. (default: tracking is on in the video mode, andTracked faces are not processed by recognition)

• The retina filter is a pre-processing that makes the image independent from illuminationconditions. It can be disabled but should almost always be used, as it improves recognitionrates in most cases, while being of low complexity. (default: on)

• The blur filter is used to filter out blurry images. It is optional, and it can be controlled bymeans of a threshold. (default: off)

• Alignment is a normalization procedure, that aligns some facial features at some standardpositions, so that faces may be comparable. The alignment can fail if some facial featuresare not detected. Alignment is always performed, but the SDK lets you decide if theface should nonetheless be sent to the recognition process, should the alignement fails.(default: off, do not bypass alignment)

3.4 DATABASE CREATION AND TRAINING

The face database is created from a set of reference face images. Faces are identified by a stringidentifier.

In order to get good recognition results, it is recommended to run a training phase. Train-ing is a memory and time-consuming process (see section 4), and should generally be doneonly once. It creates a database file on disk, which can be then loaded on the next run of theapplication. The database can also be updated, e.g. adding a new face to the database, with-out rebuilding the whole database. The SDK provides functions to create, load and update thedatabase.Three database modes are proposed:

• Full mode: This is the standard method. This is the recommended mode to have the bestrecognition results. It needs a training/computation step on startup, done only once, oron demand. Loading an already trained database from disk is fast. Database files on diskcan be large (a minimum of 50-70 MB regardless of database size + 20 kB per face).

• Light mode: Same as above except that only minimal information is written on disk. Thetraining model is not written and thus has to be re-created on each startup, but databasefiles are small ( 20 kB per face)

• Fast mode (no training): This method does not need lengthy training/computation, andneeds minimal disk space ( 2-7 kB per face). Results can however be less precise on largeor difficult image sets. This is the preferred mode for mobile applications, or applicationneeding immediate startup.

Head Office8 Allée Evariste GaloisF-63000 Clermont-FerrandFranceemail : [email protected] : www.wisimage.com

Page 12: Wisimage Face Recognition SDK V1.7.0 User manual · 2019-03-18 · Launch CMake GUI and drop the file CMakeLists.txt from the directory EmptyProject into the the CMake GUI Choose

Wisimage 12

Figure 3: Example of image suitable for manual enrollment.

MANUAL ENROLLMENT PROCEDURE Enrollment can be done on already existing images,or on images acquired by a camera device. The standard enrollment procedure needs first todetect all the faces present in the image, and then add a pair (face, tag) into the database. Thisprocedure is called "Manual", because the person to include in the database is chosen explicitlyby the user. This is especially useful in a tagging application, where the user can select and tagseveral people in an image. The procedure for manual enrollement requires firstly to declare andbuild a face detector. Processing an image with the face detector yields a face Model, that canbe passed to the enroll function enroll(const Frame& frame, Wis::FaceModelfaceModel, const char* name). It inserts the detected face in the database with thespecified name. Note that the tag "name" is case-insensitive. See Figure 3 for a typical imageto be used in a manual enrollement procedure. See also example 1 in section 6.

Figure 4: Example of mug-shot image suitable for automatic enrollment. Image is 3072x2304,with a face size of 700x400

Head Office8 Allée Evariste GaloisF-63000 Clermont-FerrandFranceemail : [email protected] : www.wisimage.com

Page 13: Wisimage Face Recognition SDK V1.7.0 User manual · 2019-03-18 · Launch CMake GUI and drop the file CMakeLists.txt from the directory EmptyProject into the the CMake GUI Choose

Wisimage 13

AUTOMATIC ENROLLMENT PROCEDURE An "automatic" enrollment procedure is pro-posed, in which one just has to take a suitable picture and use it as the enrollement image.The only difference between "manual" and "automatic" enrollment is that in the latter case,the user does not have to call face detection explicitely and does not have to select the faceto enroll, this is done automatically by selecting the biggest face. This particular case of en-rollment is especially suited for video-surveillance and access control applications, where onecan control the acquisition conditions of the enrollment, and one can require only one per-son per image. However, if several people are present, only the largest face is selected. Usefunction enrollLargestFace(const Frame& frame, const char* name) toenroll a single person from an image.Automatic and manual enrollement can be used in any order. See Figure 4 for a typical imagesuitable for automatic enrollment.

DATABASE UPDATE Once enrollement is performed, the database is updated at the first pro-cess() call, so that new enrollement data and/or removals are taken into account. This is gener-ally transparent for the user (i.e. no function has to be explicitely called) but is computationallyintensive and may be the reason for a long response time, especially in Full or Light mode. Thedatabase is also updated when calling saveDatabase(). To better control this computation time,you can force the update, by calling updateDatabase().

3.5 RECOGNITION

Recognition can be performed on still images, recorded videos or live video streams. It canbe performed directly from an image file, using no external image library. Supported formatsare JPEG, BMP, PNG, TIFF, Portable image format (pbm, pgm, ppm) Sun rasters (sr, ras). Forrecognition from a video, a video decoding library is necessary, and decoded frames must besent to the Wisimage SDK as a RGB buffer.For each frame, a list of detections is returned. Each detection corresponds to a face, andcontains its location in the image, and a set of the K best recognitions ordered by score, andtheir associated recognition tag (i.e. the name of the recognized person). K can be chosen withthe SDK. For example, when K=1, only the best recognition result ( i.e. with the highest score)is given).

Recognition can either be performed in Identification or Verification mode.

• Identification (one to many, 1:N) is the process of identifying one or several personsagainst a set of N known persons. (typical application: tagging)

• Verification (one-to-one, 1:1) is the process of verifying the claimed identity of a singleuser. (typical application: access control)

Head Office8 Allée Evariste GaloisF-63000 Clermont-FerrandFranceemail : [email protected] : www.wisimage.com

Page 14: Wisimage Face Recognition SDK V1.7.0 User manual · 2019-03-18 · Launch CMake GUI and drop the file CMakeLists.txt from the directory EmptyProject into the the CMake GUI Choose

Wisimage 14

3.6 ANTI-SPOOFING

A spoofing attack is an attempt of unauthorized access using a forged image. The attacker triesto fool the system by using a photo or a digital image of a authorized person. This is mostlyrelevant for systems doing identity verification (e.g. access control). Some known attacks are:

1. Print attack: the attacker prints a photo of the authorized person and presents it to thesystem.

2. Screen attack: the attacker presents a photo of the authorized person on a digital screen(tablet, mobile, ...)

3. Video attack : the attacker presents a video of the authorized person, for example using atablet.

4. Mask attack : the attacker puts on a 3D mask of the authorized person on his own face.

Some variations on these attacks exist, for example moving around the picture so that it looksreal. The attacker can also remove the eyes on the printed paper and place himself behind thesheet of the paper so that his own eyes appear behind the paper.The anti-spoofing mode in Wisimage’ SDK can currently tackle attacks of type 1 and 2. Itis based on blink detection, so the user has to blink at least once to be recognized. Naturaleye blinking is enough, the user does not need to do it on purpose. Note that a more robustanti-spoofing method is currently under study.

3.7 SOFT BIOMETRICS

Soft biometrics information is a set of general information about the face. These informationalone cannot identify a person, but may be used to help the recognition process, or may be usedfor any other application. It includes:

• bounding boxes for face, nose, eyes, mouth

• mouth openness (value from 0 to 100)

• left and right eye closeness (value from 0 to 100)

• gender estimation (M or F) with a male and female score (values from 0 to 100)

• age estimation (0 to 90) with a +/- deviation

• expression analysis (surprised, happy, sad, angry)

The soft biometric information can be used together or independently from the recognitionprocedure. It does not need a database. It works on still images and video, except for expressionanalysis (video only) and is generally more reliable on videos.

Head Office8 Allée Evariste GaloisF-63000 Clermont-FerrandFranceemail : [email protected] : www.wisimage.com

Page 15: Wisimage Face Recognition SDK V1.7.0 User manual · 2019-03-18 · Launch CMake GUI and drop the file CMakeLists.txt from the directory EmptyProject into the the CMake GUI Choose

Wisimage 15

Figure 5: Example of soft biometrics information on a still image. Some information are onlyavailable (expression) or more reliable (mouth and eye openess) in the video mode.

4 PERFORMANCES

4.1 RECOGNITION RESULTS

Table 1 gives the results of this SDK on some standard databases. Results are among thebest of the scientific literature as of 2012. Wisimage’s method is especially robust to severeillumination conditions. The databases FERET, Extended Yale B and Caltech Faces 1999 areall standard databases and can be obtained freely. Please note that these results are performedon well-known databases, and are used mainly for scientific comparisons between differentalgorithms. These results may not be comparable to more real-life scenarios in uncontrolledenvironments.

Corpus #Database images #Query images Score (%)Feret FC 1196 194 100

Feret Dup1 1196 722 92.4Feret Dup2 1196 234 90.6

Extended Yale B 38 2376 99.5Caltech Faces 26 424 99.4

Table 1: Performance of the Wisimage SDK on some popular datasets.

For ExtendedYale B and Caltech, the first image of each individual is used to form thedatabase, and removed from the test data.

Head Office8 Allée Evariste GaloisF-63000 Clermont-FerrandFranceemail : [email protected] : www.wisimage.com

Page 16: Wisimage Face Recognition SDK V1.7.0 User manual · 2019-03-18 · Launch CMake GUI and drop the file CMakeLists.txt from the directory EmptyProject into the the CMake GUI Choose

Wisimage 16

Figure 6: Example of correct recognition on a group photo. The associated XML output isgiven in Listing 4, and processing time is given in Table 2 and Figure 8.

4.2 RECOGNITION SPEED

Table 2 gives the processing time for various datasets. Please note that no special optimizationhave been made, no multithreading, no highly optimized routines have been used. These per-formances are thus expected to be better as we optimize the software.

The time needed for database construction is measured on Figure 7, in the Full and Fastdatabase modes. Database construction is a time-consuming process, but needs to be done onlyonce. Loading the database is much faster than construction, and adding and removing elementsdoes not require to recompute the database.

In addition to Table 2, Figure 8 gives the recognition time for different database sizes. This isan average recognition time on 450 query images from the Caltech database (896x592 pixels).This is the overall recognition time, that is to say image loading, face detection, recognitionand matching, but does not take into account database construction or loading (same thingas column Full Process in Table 2. The recognition time can be estimated using this equation :t=0.0000021x+0.0387. Where x is the number of images in the database, and t is the recognitontime in seconds.

Measures for Figure 7 and Figure 8 have been made on a desktop PC Intel Core i7-2600 3,4Ghz processor, 12 GB RAM 1333 Mhz DDR3.

Head Office8 Allée Evariste GaloisF-63000 Clermont-FerrandFranceemail : [email protected] : www.wisimage.com

Page 17: Wisimage Face Recognition SDK V1.7.0 User manual · 2019-03-18 · Launch CMake GUI and drop the file CMakeLists.txt from the directory EmptyProject into the the CMake GUI Choose

Wisimage 17

Figure 7: Processing times for database construction, for different database sizes, in fast andFull modes.

Figure 8: Recognition times for different database sizes, in Fast and Full modes.

Head Office8 Allée Evariste GaloisF-63000 Clermont-FerrandFranceemail : [email protected] : www.wisimage.com

Page 18: Wisimage Face Recognition SDK V1.7.0 User manual · 2019-03-18 · Launch CMake GUI and drop the file CMakeLists.txt from the directory EmptyProject into the the CMake GUI Choose

Wisimage 18

Type N Image size Database sizeDetection time per frame (ms)

Full process(1) recognition only (2)image 1 896x592 45 50 11

image (Figure 6) 8 2256x1504 45 410 86Live video 0 960x720 45 34.9 (28.7 fps) -Live video 1 960x720 45 41 (24.4 fps) -Live video 1 1920x1080 45 59.6 (16.8 fps) -

Table 2: Average processing speed on different datasets. N is the number of faces per image.The database size is the number of faces in the database(1) Full recognition process, including face detection, alignment, normalization, and recognitionas specified in (2). Database creation and/or loading is not included.(2) Recognition process includes pre-processing, descriptor computation and matching

.

4.3 MEMORY USAGE

Memory load varies considerably depending on the database mode and the number of images inthe database. The full and Light modes use a lot of memory for training, 1 GB of free memoryis the minimum recommended. For platforms with limited RAM such as mobile devices, theFast mode is recommended. The amount of RAM grows linearly with the number of imagesin the database in all modes, so it is strongly recommeded to tailor the database size with theamount of available RAM.

• The 32 bits library is limited to a database size of 10.000 images in Full and Light Modes.In Fast mode, this can go up to 60.000 images.

• The 64 bits library is limited by the amount of available RAM. Databases up to 800.000images have been built on a PC with 12 GB RAM (fast mode).

5 HOW TO USE THE SDK ?5.1 GENERAL DESCRIPTION

The SDK is composed of a several .h files and four .dll. The main dll is FaceRecognitionXXX.dll,the XXX indicating the version number.

• Include FaceRecognizer.h as a header in your source file

• Link with FaceRecognitionXXX.lib.

• Be sure to have the path to the dlls in your PATH variable (depending on your system) orin the same directory as the executable.

Head Office8 Allée Evariste GaloisF-63000 Clermont-FerrandFranceemail : [email protected] : www.wisimage.com

Page 19: Wisimage Face Recognition SDK V1.7.0 User manual · 2019-03-18 · Launch CMake GUI and drop the file CMakeLists.txt from the directory EmptyProject into the the CMake GUI Choose

Wisimage 19

The SDK is centered around three main objects:

• A face detection object :Ptr<fd::FaceDetector> fdetThis object is used for enrollment and recognition, but it can also be used as a standaloneobject for performing face detection in images or videos.

• A recognition context, created from a face detector :RContext rcontext(fdet)This structure is used to set the recognition parameters. It also stores information aboutthis specific recognition context, so that several independant recognition may take placeat the same time.

• The main face recognition object, for enrollment and recognition:Ptr<FaceRecognizer> fr = FaceRecognition::Create()The object fr can then be used as a regular pointer, i.e. use -> to access the methods.This object is needed for all operations concerning the database, and recognition

A typical face recognition scenario is firstly to perform enrollment on a set of still images,then to create the recogniton database using this enrollment data. Recognition is then performedon still images or video to be recognized. The general workflow with the SDK is the following:

• Create a face recognition object :Ptr<fd::FaceRecognizer> faceRec;

• Open a database with faceRec->openDatabase().

• Create a face detection object :Ptr<fd::FaceDetector> fdet;

• Enroll one or several persons using the face detector and the faceRec->enroll()function

• Create a RContext object, and set the parameters suitable to data to process.

• Load an image, video file, or open a video stream with your favorite image/video de-coding library, and feed the raw data to the faceRec->process() function, with therecogniton context as an argument.

• Get the recognition results by parsing the structure DetectionColl, returned by pro-cess()

Head Office8 Allée Evariste GaloisF-63000 Clermont-FerrandFranceemail : [email protected] : www.wisimage.com

Page 20: Wisimage Face Recognition SDK V1.7.0 User manual · 2019-03-18 · Launch CMake GUI and drop the file CMakeLists.txt from the directory EmptyProject into the the CMake GUI Choose

Wisimage 20

5.2 ENCAPSULATING INPUT DATA : FRAME

The class Frame is the gateway for input data. It wraps image buffers into a convenient structurethat can later be used with the face detection and recognition objects, or for display.

path is the pathname to an image on disk, supported formats are JPEG, BMP, PNG, TIFF,Portable image format (pbm, pgm, ppm), Sun rasters (sr, ras)

5.3 FACE DETECTION

Face detection can be performed independently of face recognition. It is possible to use theSDK to perfom only face detection in images or videos, not even declaring a FaceRecognitionobject. To this end, you must declare a fd::FaceDetector, which is a virtual class. It is up toyou to choose a detector implementing this abstract class. Depending on the choice of detector,different features and detection parameters will be available.A face detector is needed for performing enrollment, and for recognition itself. Enrollmentrequires a Face Model, which is the output of the face detector. Recognition needs a recognitioncontext (RContext), which needs a face detector as a parameter of its constructor.The same detector can be used for both task, but it may be interesting to dissociate the two. Forexample, use a fast detector for processing, and a slower but better one for enrollment. In thenext section, we show how to create a detector specialized for video,

5.3.1 USING THE INCLUDED DETECTORS

The SDK is shipped with two face detectors : Shore and OpenCV. Shore is both faster andwith far less false alarms than OpenCV. It also provides more information about the face, seesection 5.7.

NO FACE DETECTION: It is possible to declare a null detector, by using:Ptr<fd::FaceDetector> fdet = fd::noDetectorThis null detector is useful if you want to perform face recognition on already cropped andaligned images. In that case, no face detection is performed, and the whole image is used. Thisis mostly for evaluation purposes with pre-processed databases and should never be used in areal setup.

SHORE: To create a face detection object using Shore, a builder is used to set the detectionparameters and to build the detector:

fd::ShoreBuilder builder;// parameters and optionsbuilder.setMinFaceSize(30.f);builder.useAgeAnalysis(true);//...Ptr<fd::FaceDetector> faceDetector = builder.build();

Head Office8 Allée Evariste GaloisF-63000 Clermont-FerrandFranceemail : [email protected] : www.wisimage.com

Page 21: Wisimage Face Recognition SDK V1.7.0 User manual · 2019-03-18 · Launch CMake GUI and drop the file CMakeLists.txt from the directory EmptyProject into the the CMake GUI Choose

Wisimage 21

Once the face detector is created, parameters cannot be changed dynamically, you have to re-build the detector.Two convenience functions also exists, which builds default detectors. For still images:Ptr<fd::FaceDetector> fdet = fd::ShoreBuilder::BuildDefault()For video processing:Ptr<fd::FaceDetector> fdet = fd::ShoreBuilder::BuildVideoDetector()Note that here, fdet can also be of type Ptr<fd::FDShore>. The detector can be passed as anargument of the recognition context (RContext) constructor, see also section 5.5. This videoface detector includes tracking. It does not work on still images (no detections will be found),and thus should not be used as an enrollment detector. Note that when using a video detector,it is recommended to set the video-related options in the recognition context, such as temporalsmoothing.

OPENCV: For OpenCV, the same methodology based on a builder is used. It is also necessaryto state which model you want to use by providing the path and names to the models. Defaultmodels are included, but it is possible to use your own or other models provided by OpenCV.

fd::OpencvBuilder builder;builder.useFaceClassifier("haarcascade_frontalface_default.xml");builder.useEyesClassifier("haarcascade_eye.xml");// parameters and options//...Ptr<fd::FaceDetector> faceDetector = builder.build();

Note that here, fdet can also be of type Ptr<fd::FDOpencv>. OpenCV does not need to beinstalled to use the OpenCV face detector.

5.3.2 IMPLEMENTING YOUR OWN DETECTOR

It is possible to use your own face detector, by creating a subclass of the class FaceDetector(FaceDetector.h). The two virtual methods process() needs to be implemented in the subclass.It is advised to use FDShore.h as an example for implementing your own subclass.

5.4 DATABASE

5.4.1 DATABASE INITIALIZATION

Database construction has to be done very carefully, since recognition performance stronglydepends on the way the database is built. Several methods and format of database constructionare available. The choice of the method and format depends on the application.To initialize the database, call function:

openDatabase(const char* dbName, DatabaseMode dbOpenMode).This function will either load a database if a database with this name already exists, or create a

Head Office8 Allée Evariste GaloisF-63000 Clermont-FerrandFranceemail : [email protected] : www.wisimage.com

Page 22: Wisimage Face Recognition SDK V1.7.0 User manual · 2019-03-18 · Launch CMake GUI and drop the file CMakeLists.txt from the directory EmptyProject into the the CMake GUI Choose

Wisimage 22

new one. Once the database is initialized, faces can be added using the set of enroll() functions(see next section).

Optional flags can be passed to the openDatabase() function thanks to the second ar-gument, dbOpenMode. This argument is used to set the database format, which can be eitherWis::FullMode, Wis::FastMode or Wis::LightMode. See section 3.4 for a descrip-tion of these different formats.

5.4.2 DATABASE MANAGEMENT

The SDK provides a set of functions for database management, e.g. adding, removing elementsfrom the database. Here is the set of possible actions with the SDK:

CREATION, UPDATE, DESTRUCTION:

• databaseIsOpen() : Test if a database is currently open.

• closeDatabase() : Save database if needed, and clear all elements from memory.

• saveDatabase() : Update database state if needed, i.e. make effective any add/deleteoperations, and save the current database to disk (a single file).

• clearDatabase() : Clear all elements in the current database from memory. Thisdoes not delete any files, and the database is still open.

• updateDatabase() : Synchronize the content of the database with any new datafrom the enroll() functions and build the database. Building the database can be long.This database update is normally transparent for the user, but an update can be calledexplicitely, especially for controling when to do the lengthy build operation. Update-Database() should be called when several enrollements have been made, i.e. it is notefficient to call updateDatabase() after each enroll(). UpdateDatabase() can also be usedto make the database ready for the verification mode

• rebuildDatabase() : Re-train the database with current data. This should be doneif a lot of changes has been made on the database since the last training, especially ifthe training has been performed on a small database. Re-building a large database (>2000 images) has little or no impact on the results. RebuildDatabase() has no effect if theFastMode is active.

ADDING, REMOVING ELEMENTS:Note: These functions are not available in the verification mode.

• void enroll(const Frame& frame, Wis::FaceModel faceModel, constchar* name) : Create a face detector as specified in section5.3. Parse the results and

Head Office8 Allée Evariste GaloisF-63000 Clermont-FerrandFranceemail : [email protected] : www.wisimage.com

Page 23: Wisimage Face Recognition SDK V1.7.0 User manual · 2019-03-18 · Launch CMake GUI and drop the file CMakeLists.txt from the directory EmptyProject into the the CMake GUI Choose

Wisimage 23

select the face model that you are interested in enrolling, and pass it to this enroll func-tion, along with the frame used for the detection, and the name of the person to enroll. Itis not possible to manually select an area in the image and insert it into the database. Seeexample 1 in section 6 for a detailed example. The names are not unique in the database.It is thus possible to have several faces with the same name (i.e. different photos of thesame person). However, trying to add the exact same face twice in the database will failin FullMode and LightMode, whatever the label is. In FastMode, adding the same faceseveral times will work, but it is not recommended, since it will only clutter the database,without any benefit.

• enrollLargestFace(const Frame& frame, const char* name) : Thisis a convenience function, that detects faces in the image and adds only the largest face inthe database.

• getFaceNameFromDatabase() : Get the name of a database entry using its index.

• removeFaceFromDatabase() : Remove all faces tagged with the name in argu-ment. Note that any association name/index that you would have got with getFaceName-FromDatabase() is now invalid.

• renameFaceInDatabase() : rename a specific database entry using its index.

If you want to maintain a list of associated name/index, you will have to do it yourself,especially if you want to add/remove elements on the fly.

PARSING THE DATABASE : use getFaceNameFromDatabase() to parse the database,from index 0 up to the last element given by getDatabaseSize()-1. This gets you all names andtheir associated indexes.

REMOVING A SINGLE FACE : Function removeFaceFromDatabase() removes allfaces tagged with a specific name. To remove a specific face that belong to a set sharing thesame name (i.e. same name, multiple indexes), First rename the face with a unique tag usingrenameFaceInDatabase(), and then remove it using removeFaceFromDatabase().Note that any association name/index that you would have got with getFaceNameFromDatabase()is now invalid.

5.5 RECOGNITION CONTEXT

A recognition context has to be set before proceeding to recognition. The context describesthe optional processing and parameters that can be used to tweak the recognition. A context iscreated by declaring a RContext: RContext recontext(faceDetector).faceDetector is an object of type Ptr<fd::FaceDetector> and will be the detector usedfor recognition. i.e. it may be different from the one used during enrollment. In particular, the

Head Office8 Allée Evariste GaloisF-63000 Clermont-FerrandFranceemail : [email protected] : www.wisimage.com

Page 24: Wisimage Face Recognition SDK V1.7.0 User manual · 2019-03-18 · Launch CMake GUI and drop the file CMakeLists.txt from the directory EmptyProject into the the CMake GUI Choose

Wisimage 24

face detector can be specialized for still images or videos, e.g. the Shore face detector includedin the SDK. A recognition context also stores specific information, so that several independantrecognition processes may take place at the same time. Several RContext can thus be declaredat the same time, with different parameters.

• setMaximumCandidates() : Set the number of candidates returned for each facedetected. By default, only the best candidate is returned, i.e. setMaximumCandidates(1).If the number of required candidates is larger than N , the database size, then only Ncandidates are returned.

• SetMinRecoSize() : Set the minimum size in pixels for face recognition. Settinga minimum size can prevent bad results, because small faces are often too blurry or donot have enough details for an efficient face recognition. The minimum possible valueis 24x24 pixels, the recommended value is 60x60. This minimum value is application-dependent, so it is a good idea to test different minimum values in the actual context. Notethat a minimum face size can also be set on the face detector, which can have a differentvalue from this one. The minimum face recognition size should be equal or greater thanthe minimum face detection size.

• enableTemporalSmoothing() : smooth the recognition results over time, by rel-ative majority voting of all recognition results in a time window. By default, this is notenabled. When temporal smoothing is not active, recognition results are given indepen-dantly per frame. Temporal smoothing prevents from getting jittery recognition results, .This of course only makes sense in videos.

• setSmoothingMemory() : sets the memory of the temporal smoothing. More pre-cisely, this sets the time windows during which results are kept for computing the tempo-ral smoothing.

• EnableBlurEstimation() : Blur estimation is used to detect if an image is tooblurry to be useful. This is mostly useful in the video mode, where blurry images willbe dropped. By default, this is not enabled. In some cases, for example very bad qualityimages or cameras, blur estimation can prevent any recognition results, because all imagesmay be considered too blurry.

• SetBlurThreshold() : Set the parameter to control the blur estimation. This thresh-old may depend on image size, and may have to be changed depending on the imageacquisition. Authorized values are between 0 and 1, i.e. 0 ≤ threshold ≤ 1. Note thatsetting the threshold enables the estimation.

• AllowUnalignedRecognition() : Use this function to enable recognition in un-usual situations (especially partial occlusions or large head rotation). The default behavior

Head Office8 Allée Evariste GaloisF-63000 Clermont-FerrandFranceemail : [email protected] : www.wisimage.com

Page 25: Wisimage Face Recognition SDK V1.7.0 User manual · 2019-03-18 · Launch CMake GUI and drop the file CMakeLists.txt from the directory EmptyProject into the the CMake GUI Choose

Wisimage 25

is AllowUnalignedRecognition(false). In that case, if the alignement process described insection 3.3 fails, the face image is not sent to the recognition process, and no recognitionis attempted. if AllowUnalignedRecognition(true) has been called, the non-aligned faceimage is sent nonetheless to the recognition. Using AllowUnalignedRecognition(true)can produce worse results, but can also improve the overall recognition results in certaincases, e.g. eyes occlusions.

• AllowRecognitionWhileTracking: This function changes the behaviour of thetracking output. By default, allowRecognitionWhileTracking(false) is enabled, meaningthat tracked faces are not sent to the recognition process. When tracking is active, recog-nition results are only provided for a limited period of time by the temporal smoothing,and will eventually died out when the memory of the temporal smoothing is consumed(more or less 2 seconds). If you want the recognition to be also performed on trackedfaces, use allowRecognitionWhileTracking(true). It is advised in that case to also useAllowUnalignedRecognition(true), since tracked faces will probably not be clean, frontfaces, and alignement might fail.

• UseAntiSpoofing() : Enable the anti-spoofing mode. This is a basic anti-spoofingmode intended for applications such as control access or video login. It prevents spoofingattacks, e.g. attacks by a printed photograph, or photo on a digital screen or video replay.It is based on eye blink detection, i.e. you have to blink to be recognized as a ’real’person. Activating the spoofing mode requires additional conditions for recognition: onlyone face per frame is recognized (the biggest face is chosen), the face should be at least250x250 pixels, and a few seconds are needed before the system gives an answer. Anti-spoofing is only available in the video verification mode, and it may lead to increasedfalse rejections. Note also that using the anti spoofing reset AllowUnalignedRecognitionto false. It is also recommended to use blur estimation together with anti-spoofing, so asto prevent any wrong results that may be generated by blurred faces.

5.6 RECOGNITION

Recognition is performed by the function:Ptr<DetectionColl> process(const Frame& frame, RContext& rcontext)A Frame is a Wisimage structure provided as a convenience, to load an image from a buffer, animage file or from a video using the external IFrameStream class. See section 5.2 for detail onthe Frame structure. The frame can be the whole image, or a specific Region of Interest (ROI)in the image.The recognition context RContext provides the different parameters for the recognition, andstores information from one process call to the other. See section 5.5 for the different parame-ters in the recogniton context.

Head Office8 Allée Evariste GaloisF-63000 Clermont-FerrandFranceemail : [email protected] : www.wisimage.com

Page 26: Wisimage Face Recognition SDK V1.7.0 User manual · 2019-03-18 · Launch CMake GUI and drop the file CMakeLists.txt from the directory EmptyProject into the the CMake GUI Choose

Wisimage 26

To process a video, just call the process() function on each frame. A video decoding li-brary is needed to decode the video stream and send the raw buffer to the process() function.When processing a video stream with variable frame rate, just update the frame rate by callingsetFrameRate() on the recogniton context in argument before the next call to process().

5.6.1 IDENTIFICATION

Identification, or one-to-many, is the process of retrieving the best match among a set of N iden-tities. If the best match has a score lower than the threshold set by setRecognitionThreshold(),then no match is returned. Identification is the default mode. It can however be set explicitelyby calling setIdentificationMode().

No specific function is needed for identification, just use Process() as stated above.

5.6.2 VERIFICATION

Verification, or authentication, or one-to-one, is the process of verifying a claimed identity. Atypical situation is for ATMs (cash machines), where it is wanted to check if the person usingthe ATM is the rightful owner of the credit card. Verification thus checks input faces against adatabase of faces of a single user. The result is a yes (claimed identity is correct) or no (impos-tor).To use the verification mode, a database has to exists (openDatabase() must have been called),to be non-empty (some enroll() must have been done), and to be built (UpdateDatabase(), save-Database() or process() ). An identity to be verified has to be chosen, using setVerification-Mode(identity).

The verification database is then the subset of the identification database limited to this iden-tity. All database modifying operations (adding, loading, saving) must be done in Identificationmode. Especially, in verification mode:

• Enroll is forbidden, throws an exception if tried.

• SaveDatabase() is forbidden, throws an exception if tried.

• Loading a database closes the verification mode and load the selected database in identi-fication mode

• CloseDatabase() resets the database in Identification mode, and closes the identificationdatabase.

• ClearDatabase() has no effect.

• removeFaceFromDatabase() has no effect.

• renameFaceInDatabase() has no effect.

Head Office8 Allée Evariste GaloisF-63000 Clermont-FerrandFranceemail : [email protected] : www.wisimage.com

Page 27: Wisimage Face Recognition SDK V1.7.0 User manual · 2019-03-18 · Launch CMake GUI and drop the file CMakeLists.txt from the directory EmptyProject into the the CMake GUI Choose

Wisimage 27

5.6.3 GETTING RECOGNITION RESULTS

Results are returned as return values of functions process() and detectFaces(). The returnedobject is of type Ptr<DetectionColl>, which is a collection of Detection objects. Each Detectionobject contains information on a detected face (size, localization, score, age, genre, etc...) anda structure CandidateColl, which is a collection of candidates. The diagram in Figure 9 showshow the results can be retrieved.

Figure 9: Mechanism for accessing results.

By default, and if setMaximumCandidates() is set to 1, CandidateColl contain only onecandidate (the best). Otherwise, the candidates are sorted by their score value (the higher, thebetter). The candidate object contains the recognition score, and the recognition tag, i.e. thename of the person recognized, or the symbol ? if no recognition has been successful.Listing 1 gives an example of the mechanism for accessing the results:

// Instance of the face recognition enginePtr<FaceRecognition> faceRec = FaceRecognition::Create();// load database and stuff...// Process the image file2.jpg, and get the result in the structure

resultsPtr<DetectionColl> results = faceRec->process("file2.jpg");// results is a collection of Detection. We parse it to get info on

each detectionfor (auto it = results->begin(); it != results->end(); ++it)

Head Office8 Allée Evariste GaloisF-63000 Clermont-FerrandFranceemail : [email protected] : www.wisimage.com

Page 28: Wisimage Face Recognition SDK V1.7.0 User manual · 2019-03-18 · Launch CMake GUI and drop the file CMakeLists.txt from the directory EmptyProject into the the CMake GUI Choose

Wisimage 28

{// DETECTION PART// get information on the face detectionWis::FaceModel& fm = it->getFaceModel();...// RECOGNITION PART// get the first candidateif (it->getCandidates().empty()) continue;const Wis::Candidate& cand = it->getCandidates().front();// extract info from the candidatecand.getName();...

}

Listing 1: Example of reading results after a call to process()

5.7 SOFT BIOMETRICS

Soft biometrics are a set of general information which describe the person, but may not be suffi-cient for recognition. It includes age, genre or facial component localization. This informationis returned by the face detector, along with the face detection result. It does not need the con-struction of a database, i.e. it can be used independently from face recognition, using only anobject Ptr<fd::FaceDetector>.By default, only minimalist information needed for face recognition is available, and soft bio-metrics information are not computed. The desired information have to be explicitely requestedat the detector’s construction, see section 5.3. A full face model has also to be passed as thethird argument of process to store the extra features:

fd::ShoreBuilder builder;// set the wanted features and build the detectorbuilder.useAgeAnalysis(true);builder.useMoodAnalysis(true, true, true, true);faceDetector = builder.build();// Declare two face modelsfd::FaceModelColl faceModels;fd::FullDetectionModelColl fullModels;// perform face detection with soft biometricsfaceDetector->process(frame, faceModels, fullModels);// extract info from the list of fullModelfullModels.at(0).happyMoodScore;

Listing 2: Computing soft biometrics information

Head Office8 Allée Evariste GaloisF-63000 Clermont-FerrandFranceemail : [email protected] : www.wisimage.com

Page 29: Wisimage Face Recognition SDK V1.7.0 User manual · 2019-03-18 · Launch CMake GUI and drop the file CMakeLists.txt from the directory EmptyProject into the the CMake GUI Choose

Wisimage 29

Information is then retrieved by parsing the list of returned FullDetectionModels. It is possibleto check if a specific feature is available by calling isAvailable(FeatureFlagType t)on a fullModel. The features available depend on the face detector used. Please see the doxygendocumentation for the full list of available features for each detector.

5.8 SETTINGS AND OPTIONS

• SetRecognitionThreshold() : Set the threshold that decides whether a person isrecognized or not. The function thresholds the score given by getResultAt().getScore().Authorized values are between 0 and 1, i.e. 0 ≤ threshold ≤ 1, with 0 being thelowest score (i.e. equivalent to no thresholding, a result is set on each face), and 1 thehighest score, which is reached only when the query image is the same as in the database.Default value is 0. The recommended value for a first try is 0.5, but the best thresholdvalue may vary depending on the database size and nature (see also the FAQ in section 8).Thresholds usually span a 0.2 - 0.8 interval. Note also that thresholds may have to behigher in the verification mode than in the identification mode.

• SetPreprocessFilter() : This option activates/desactivates a filter for illumina-tion invariance. The activation is strongly recommended, as it is not computation inten-sive and generally improves results. It is on by default. It is used both during enrollmentand recognition.

5.9 ERROR HANDLING

Exceptions are used to handle errors. All exceptions thrown by FaceRecognizer.dll derive fromstd::exception.Please refer to the HTML documentation to see which functions can throw exceptions.

5.10 XML OUTPUT

XML file output is turned off by default. To produce an XML output, you must declare aResultLog object. A typical use of this object is given by the following code:

ResultLog rlog;// set meta information about the input datarlog.setMeta("fps", "25");rlog.setMeta("filename", "file2.jpg");// perform recognition on some filePtr<FaceRecognition> faceRec = FaceRecognition::Create();Ptr<DetectionColl> result = faceRec->process(Frame("file2.jpg"));//push recognition results into the result logrlog.insert(*result);// save and reset the log state

Head Office8 Allée Evariste GaloisF-63000 Clermont-FerrandFranceemail : [email protected] : www.wisimage.com

Page 30: Wisimage Face Recognition SDK V1.7.0 User manual · 2019-03-18 · Launch CMake GUI and drop the file CMakeLists.txt from the directory EmptyProject into the the CMake GUI Choose

Wisimage 30

rlog.saveAs("output.xml");rlog.reset();

Listing 3: Example of ResultLog usage

A typical output will look like in Listing 4. Some meta information is first given about thetype of input that has been processed. The document is composed of a list of frames, indexedby an id which is the frame number in the video (id=0 for still images). A frame may includeseveral Detection objets. A Detection is composed of a bounding box described by region="x ywidth height". (x,y) is the top-left corner pixel coordinates, and (width height) the dimensionsof the bounding box. A Detection may have several candidates. Candidates are sorted by theirscores. For each candidate, the score attribute is the recognition score between 0 and 1, andname the label of the database element that matched.

<?xml version="1.0"?><document>

<meta><fps>25</fps><filename>file2.jpg</filename>

</meta><frame id="0">

<detection><region x="502" y="288" width="94" height="93" /><candidate name="3" score="0.48312" />

</detection><detection>

<region x="727" y="312" width="88" height="88" /><candidate name="4" score="0.443698" />

</detection><detection>

<region x="992" y="319" width="86" height="87" /><candidate name="5" score="0.423952" />

</detection><detection>

<region x="1324" y="289" width="95" height="95" /><candidate name="2" score="0.502516" />

</detection><detection>

<region x="1581" y="305" width="107" height="107" /><candidate name="6" score="0.500595" />

</detection><detection>

Head Office8 Allée Evariste GaloisF-63000 Clermont-FerrandFranceemail : [email protected] : www.wisimage.com

Page 31: Wisimage Face Recognition SDK V1.7.0 User manual · 2019-03-18 · Launch CMake GUI and drop the file CMakeLists.txt from the directory EmptyProject into the the CMake GUI Choose

Wisimage 31

<region x="1142" y="341" width="102" height="101" /><candidate name="0" score="0.49854" />

</detection><detection>

<region x="805" y="389" width="100" height="101" /><candidate name="7" score="0.516958" />

</detection><detection>

<region x="1693" y="235" width="97" height="96" /><candidate name="1" score="0.534113" />

</detection></frame>

</document>

Listing 4: Example of XML output for recognition performed on image 6

6 EXAMPLE PROJECTSThe SDK is shipped with some example projects for Visual C++ 2010/2012. Visual C++ exam-ple projects can be generated using CMake. See section 2.6 for how to compile and run theseexamples.

6.1 WISIMAGE SDK EXAMPLE1 : MULTIPLE PERSON RECOGNITIONON A STILL IMAGE

This project shows how to use the SDK in a typical tagging application. Two files are provided,File1 and File2 which act respectively as database and test image. This example "simulates"face tagging in File1, by enrolling all the detected faces, and then performs recognition on File2,labeling the recognized persons.

// Instance of the face recognition enginePtr<FaceRecognition> faceRec = FaceRecognition::Create();// Try to load if exists, create a new database otherwiseif ( !faceRec->openDatabase("Database01.wis", Wis::FastMode) )

throw std::exception("Cannot load or create database");

// load image dataFrame frame("file1.jpg");// Perform face detection on file1Ptr<fd::FaceDetector> fdetector = fd::ShoreBuilder::BuildDefault();fd::FaceModelColl faceModels;fdetector->process(frame, faceModels);

Head Office8 Allée Evariste GaloisF-63000 Clermont-FerrandFranceemail : [email protected] : www.wisimage.com

Page 32: Wisimage Face Recognition SDK V1.7.0 User manual · 2019-03-18 · Launch CMake GUI and drop the file CMakeLists.txt from the directory EmptyProject into the the CMake GUI Choose

Wisimage 32

// simulate manual tagging, by enrolling individually each detection// each person is named by its position in the detection listfaceRec->enroll(frame, faceModels.at(0), "0");...// Create processing contextRContext rct(fdetector);// perform recognition on file2Ptr<DetectionColl> results = faceRec->process(Frame("file2.jpg"),

rct);

// save database if needed and clear memoryfaceRec->closeDatabase();

Listing 5: Example 1 : multiple person recognition on a still image

STEP BY STEP DESCRIPTION :

• An empty database is created with function openDatabase()

• We create a face detection engine fdetector and perform detection on file 1.jpg

• Enroll all the detected persons, tagging them with a number, with enroll().

• Database setup is finished, we now proceed to recognition.

• Face detection and recognition is performed on File2 by process()

• We parse the DetectionColl object to get all the results

• Close the database. You may also use faceRec.release() to explicitely release memory,but this not needed as this is done automatically by the smart Pointer Ptr.

• Press ESC or q to quit the GUI.

If you run this example multiple times, it will load the previously saved database, and insert thesame faces again. The database sould grow in size, but the result should remain the same.

6.2 WISIMAGE SDK EXAMPLE2 : LIVE VIDEO RECOGNITION

This project is an example on how to use the SDK for performing live recognition. The demodisplays the video stream in a minimalistic GUI, with bounding boxes on detected faces. Nodatabase is provided, it is up to you to provide the necessary images, for example by taking apicture of yourself with a webcam.

Head Office8 Allée Evariste GaloisF-63000 Clermont-FerrandFranceemail : [email protected] : www.wisimage.com

Page 33: Wisimage Face Recognition SDK V1.7.0 User manual · 2019-03-18 · Launch CMake GUI and drop the file CMakeLists.txt from the directory EmptyProject into the the CMake GUI Choose

Wisimage 33

// Instance of the face recognition enginePtr<FaceRecognition> faceRec = FaceRecognition::Create();// open the database.faceRec->openDatabase("Database02.wis", Wis::FastMode);// EnrollmentfaceRec->enrollLargestFace(Frame("MyImage.jpg"), "John Doe");

// use a video detector and video options for recognitionPtr<fd::FaceDetector> fdet = fd::ShoreBuilder::BuildVideoDetector();RContext rcontext(fdet);rct.enableTemporalSmoothing(true);Wis::Frame frame; // Frame Object to store image data// Video loopwhile (ofs && ifs >> frame) {

// Submit the current frame to the viewerofs << frame;// Launch faceRecognitionPtr<DetectionColl> results = faceRec->process(frame, rcontext);// iterate over the list of detected facesfor (auto it = results->begin(); it!=results->end(); ++it) {

if ( ! it->getCandidates().empty()) {// Get only the best Candidate (first element) , i.e. the

element with the best recognition scoreconst Candidate& cand = it->getCandidates().front();//display info about the candidatestd::cout << "[" << cand.getFrameId() << "] " <<

cand.getName() << " : " << cand.getScore() << std::endl;}

}}

Listing 6: Example 2 : Live video recognition

The code sample provided in the SDK and the extract in Listing 6 show how to use some ofthe SDK functions to perform recognition on a video stream.

STEP BY STEP DESCRIPTION :

• The database is built by calling openDatabase. If "mugshot like" enrollment imagessuch as specified in section 3.2 are be available, it is possible to use the function enrol-lLargestFace(), which selects only the largest face in the image. It is thus not necessaryto create a specific face detector and parse the results of the return list of the process()

Head Office8 Allée Evariste GaloisF-63000 Clermont-FerrandFranceemail : [email protected] : www.wisimage.com

Page 34: Wisimage Face Recognition SDK V1.7.0 User manual · 2019-03-18 · Launch CMake GUI and drop the file CMakeLists.txt from the directory EmptyProject into the the CMake GUI Choose

Wisimage 34

function of the face detector.

• We declare the face detector and the context that we are going to use for recognition. Herewe set options for processing a video.

• Face detection and recognition is performed on each frame by process(). Resultsare stored in the return value Ptr<DetectionColl> results, which is a collection of faceDetections. It can be parsed like a container from the C++ STL, e.g. using iterators.

• Each Detection object contains a list of recognition candidates. Iterate over the ob-ject results, and get a list of recognition candidates for each face detection withgetCandidates(). This list of Candidates is empty only if the database is empty.

• In this example, we are interested only in the best match, so we take the first elementusing front()

• We print to the console the information from the candidate, name and score. If the scoreis below the specified recognition threshold set by setRecognitionThreshold(), the nameis replaced by a question mark "?".

• Press ESC or q to quit the GUI.

• there is no need to release or delete any objects before quitting. You may call close-Database(), but this is not mandatory.

6.3 WISIMAGE SDK EXAMPLE3 : GETTING THE N BEST RESULTS ONA VIDEO

This example is the same as the previous one, except it show how to retrieve the N-best recog-nition candidates. Listing 7 shows the instructions to retrieve these candidates. One has just toiterate the candidateColl structure using iterators.

// beginning is the same as in Example 2...Ptr<fd::FDShore> faceDetector =

fd::ShoreBuilder::BuildVideoDetector();// Create processing context: set parameters hereRContext rct(faceDetector);// state that we want the 5 best recognition results for each

detectionrct.setMaxCandidates(5);// enable various options to get more resultsrct.enableTemporalSmoothing(true);

Head Office8 Allée Evariste GaloisF-63000 Clermont-FerrandFranceemail : [email protected] : www.wisimage.com

Page 35: Wisimage Face Recognition SDK V1.7.0 User manual · 2019-03-18 · Launch CMake GUI and drop the file CMakeLists.txt from the directory EmptyProject into the the CMake GUI Choose

Wisimage 35

rct.allowUnalignedRecognition(true);rct.allowRecognitionWhileTracking(true);// from here, this is the same as example 2...// get candidates from the current Detectionconst CandidateColl& candidateColl = it->getCandidates();// candidateColl can be parsed like a STL containerfor (auto ccit=candidateColl.begin(); ccit!=candidateColl.end();

++ccit){

ccit->getName();//get the recognition tag of this candidateccit->getScore();//get the recognition score of this candidate

}

Listing 7: Example 2 : Live video recognition with N-best results

7 FUNCTIONS LISTINGSee the doxygen documentation for a commented list of all available functions.

8 F.A.Q.1. Is it thread-safe ?

Multithread is not supported for now.

2. Should I use setRecognitionThreshold() ? and what value of thresholdshould I use ?Deciding whether to use setRecognitionThreshold() or not depends on the ap-plication. It might be perfectly fine not to threshold the ouput score, i.e. giving a resultat each query. This is the default behavior. It is suited to applications where everyone isknown and no intruder is possible, in that case the best match is given. However mostsituations require a threshold, as unknown people may be present, e.g. in tagging or liverecognition. The possible values of the theshold range from 0 to 1. A bit of trial and errormay be needed to set the right threshold depending on the database. The output scoregenerally varies between 0.2 and 0.8, so recommended values of threshold are usuallyaround 0.5. This threshold should be set with great care in the verification mode, whereit is advisable to set a high threshold so as to minimize the False Acceptance Rate (thenumber of persons wrongly accepted into the system). The best threshold value usuallydepends on the database size, so it is advisable to check the thresholds after adding oneor more elements to the database.

3. Should I use EnableBlurEstimation() ? and what value of threshold should I

Head Office8 Allée Evariste GaloisF-63000 Clermont-FerrandFranceemail : [email protected] : www.wisimage.com

Page 36: Wisimage Face Recognition SDK V1.7.0 User manual · 2019-03-18 · Launch CMake GUI and drop the file CMakeLists.txt from the directory EmptyProject into the the CMake GUI Choose

Wisimage 36

use in SetBlurThreshold() ?Using the blur estimation on still images is not really recommended, mainly because itdoes not give stable values with respect to the image size, and image quality. This optionis more suited to a video application, where blur from motion or camera movements ispresent. Possible values range from 0 to 1, default value is 0.5. It is strongly recom-mended to try the effects of different values of the SetBlurThreshold parameter,as it may be sometimes tricky to set. In some cases of low quality capture devices, e.g.built-in webcams in laptops or phone cameras, all images may even be discarded by theblur estimation.

4. How do I delete a database ?Just delete the database file, e.g. MyDatabase.wis, for example using boost::filesystem::remove(),or using the delete file function from your favorite system library.

5. Is it possible to switch from FastMode to FullMode or LightMode and why ?No, this is not possible. When you switch to fastMode, information is lost, and there isno way it can be recovered. So once you get into the FastMode, it cannot be changed. Anexception is thrown if changing mode is attempted.

Switching fom one mode to another is not recommended. It is best to choose one modefor the application and stick to it.

6. I don’t care about accuracy, I want more resultsIf your focus is on getting the largest number of results, no matter the precision, then usethe following options:

• allowRecognitionWhileTracking(true);

• allowUnalignedRecognition(true);

• setFaceDetectScore(0);

• enableBlurEstimation(false);

• setRecognitionThreshold(0);

• setMaximumCandidates(N); // N is the number of recognition results (candidates)returned per detection. If the first candidate is wrong, it will probably be in the top-5or top-10 first results. so N=5 or N=10 might be good values. The candidates areordered by recognition scores.

7. It don’t care about high recall, I want high precisionIf your focus is on getting high precision results, then use the following options:

• allowRecognitionWhileTracking(false);

Head Office8 Allée Evariste GaloisF-63000 Clermont-FerrandFranceemail : [email protected] : www.wisimage.com

Page 37: Wisimage Face Recognition SDK V1.7.0 User manual · 2019-03-18 · Launch CMake GUI and drop the file CMakeLists.txt from the directory EmptyProject into the the CMake GUI Choose

Wisimage 37

• allowUnalignedRecognition(false);

• setFaceDetectScore(10);

• enableBlurEstimation(true);

• setRecognitionThreshold(0.4);

• setMaximumCandidates(1);

The value of the thresholds for blurring and recognition are to be estimated, dependingon your data and the level of wanted precision.

8. I need a very low memory usage, is it possible ?You can use the Fast mode when building the database, which requires far less memorythan the Full and Light modes. However, the Fast mode can be less precise than the Fullmode. It can nonetheless be a good choice for mobile or embedded applications which donot need top accurate results. The SDK requires a minimum of 100 MB of free RAM inthe most favorable case, e.g. less than 100 images in the database. We recommend at least200 MB of free RAM for a correct usage with correct image resolutions and non-trivialdatabase sizes.

9. It does not work !It is usually better to check with us to see if this is really a case where the recognitionfails, or if it is an installation/configuration problem.If no results are generated at all, it might be a problem of face detection. If Shore is used,check that the video detector is not used on still images. Face detection does not workwell with headwear (caps...) and can prevent any results. Try to set the blur threshold andrecognition thresholds to 0, to be sure to have some results.However, in some cases, recognition can fail, especially with low quality/resolution im-ages, small face size (<60x60 pixels), or when occlusions, facial hairs, very heavy makeup,large pose variations are present. Glasses with very strong corrections can also be a prob-lem since they introduce severe deformations. If several of these factors are present,failure is even more likely.

10. Faces are not detected when anti-spoofing is setWhen anti-spoofing is active, only one face is detected (the biggest), and it has to be atleast 250x250 pixels. Try to move closer to the camera so that the face area takes at least250x250 pixels or use a higher resolution.

9 KNOWN BUGS/LIMITATIONSThese are the bugs and limitations that we are aware of and working on.

Head Office8 Allée Evariste GaloisF-63000 Clermont-FerrandFranceemail : [email protected] : www.wisimage.com

Page 38: Wisimage Face Recognition SDK V1.7.0 User manual · 2019-03-18 · Launch CMake GUI and drop the file CMakeLists.txt from the directory EmptyProject into the the CMake GUI Choose

Wisimage 38

1. An exception is thrown when trying to build a database with too many images. Themaximal number of images depends on the SDK version (32 or 64 bits), and the amountof RAM available.

Please let us know if you experience some other crashes with our SDK.

10 FUTURE RELEASESNew functionnalities are planned to be released in the next version of the SDK. We especiallyplan to release:

• Support for iOS and OS X platform.

• Better anti-spoofing mode, feature that makes the system more robust to spoofing attacksusing paper-printed faces or video replay.

• Faster construction time for large databases

Do not hesitate to contact us if you need additional functionnalities, or if you need one ofthe above feature in priority.

Head Office8 Allée Evariste GaloisF-63000 Clermont-FerrandFranceemail : [email protected] : www.wisimage.com

Page 39: Wisimage Face Recognition SDK V1.7.0 User manual · 2019-03-18 · Launch CMake GUI and drop the file CMakeLists.txt from the directory EmptyProject into the the CMake GUI Choose

Wisimage 39

11 LICENSING OF THIRD PARTY LIBRARIES

11.1 BOOST

Boost Software License - Version 1.0 - August 17th, 2003Permission is hereby granted, free of charge, to any person or organization obtaining a copy

of the software and accompanying documentation covered by this license (the "Software") touse, reproduce, display, distribute, execute, and transmit the Software, and to prepare derivativeworks of the Software, and to permit third-parties to whom the Software is furnished to do so,all subject to the following:

The copyright notices in the Software and this entire statement, including the above li-cense grant, this restriction and the following disclaimer, must be included in all copies of theSoftware, in whole or in part, and all derivative works of the Software, unless such copies orderivative works are solely in the form of machine-executable object code generated by a sourcelanguage processor.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OFMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR ANYONEDISTRIBUTING THE SOFTWARE BE LIABLE FOR ANY DAMAGES OR OTHER LIA-BILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OFOR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS INTHE SOFTWARE.

11.2 OPENCVBy downloading, copying, installing or using the software you agree to this license. If you donot agree to this license, do not download, install, copy or use the software.

License Agreement For Open Source Computer Vision Library (3-clause BSD License)Redistribution and use in source and binary forms, with or without modification, are per-

mitted provided that the following conditions are met:

• Redistributions of source code must retain the above copyright notice, this list of condi-tions and the following disclaimer.

• Redistributions in binary form must reproduce the above copyright notice, this list of con-ditions and the following disclaimer in the documentation and/or other materials providedwith the distribution.

• Neither the names of the copyright holders nor the names of the contributors may be usedto endorse or promote products derived from this software without specific prior writtenpermission.

Head Office8 Allée Evariste GaloisF-63000 Clermont-FerrandFranceemail : [email protected] : www.wisimage.com

Page 40: Wisimage Face Recognition SDK V1.7.0 User manual · 2019-03-18 · Launch CMake GUI and drop the file CMakeLists.txt from the directory EmptyProject into the the CMake GUI Choose

Wisimage 40

This software is provided by the copyright holders and contributors "as is" and any expressor implied warranties, including, but not limited to, the implied warranties of merchantabilityand fitness for a particular purpose are disclaimed. In no event shall the Intel Corporation orcontributors be liable for any direct, indirect, incidental, special, exemplary, or consequentialdamages (including, but not limited to, procurement of substitute goods or services; loss of use,data, or profits; or business interruption) however caused and on any theory of liability, whetherin contract, strict liability, or tort (including negligence or otherwise) arising in any way out ofthe use of this software, even if advised of the possibility of such damage.

11.3 PUGIXML

This software is based on pugixml library (http://pugixml.org). pugixml is Copyright (C) 2006-2014 Arseny Kapoulkine.

Head Office8 Allée Evariste GaloisF-63000 Clermont-FerrandFranceemail : [email protected] : www.wisimage.com

Page 41: Wisimage Face Recognition SDK V1.7.0 User manual · 2019-03-18 · Launch CMake GUI and drop the file CMakeLists.txt from the directory EmptyProject into the the CMake GUI Choose

Wisimage 41

12 COPYRIGHTWisimage hereby only grants you a non-exclusive right to access and use the Wisimage FaceRecognition Software Development Kit (SDK). This license does not include any authorizationto reproduce, perform, commercialise, translate, adapt, fix or amend part or all of the Applica-tion (including source codes, images, editorial contents, graphic designs, audiovisual works).Any additional use of the logos, graphic designs and brands belonging to Wisimage shall beexpressly approved in advance by Wisimage.

All the information and elements contained in the Application are protected by IntellectualProperty rights. It is therefore strictly prohibited to reproduce or allow the reproduction, use orallow the use of these elements, in whole or in parts, on a temporary or permanent basis, by allmeans, known or unknown, on all formats, including but not limited to, Internet websites, net-works, messaging systems, removable supports, peer to peer networks, weekly reviews, mag-azines, reviews, catalogues, brochures, leaflets, notes, mailings, advertising and promotionaldocuments including for press or training purposes, posters, public notices, small public no-tices, cards, banners, signs, packaging and wrappings for all sorts of products, publications andworks of all kind. Failing which, your criminal and/or civil liability will be held.

It is also expressly prohibited to reproduce or broadcast part or all of the information andelements of the Application on electronic formats and notably through the Internet, mobilephone networks, ADSL networks, terrestrial, cable or satellite as well as personal electronicdevices such as digital MP3 players, phones and touch pads.

Head Office8 Allée Evariste GaloisF-63000 Clermont-FerrandFranceemail : [email protected] : www.wisimage.com