LPReditor DLL .fr

Apr 5, 2005 - As a DLL, it works under the Microsoft ... The window bellows must come into view. .... If you use other programming languages, it is necessary to ... It is already available for Visual Basic and C# (see examples of codes ...
431KB taille 33 téléchargements 147 vues
LPReditor DLL

Engine integration guide

CREATION

DATE

NOM

REDIGE

April 5th 2005

LPReditor

VERIFIE

SIGNATURE

LPReditor CAP OMEGA rond point Benjamin Franklin CS 39521

VALIDE

34960 Montpellier cedex 02

APPROVED

Réf. : June 30th, 2005 release

engine integration guide

Table of contents

1.

Introduction................................................................................................................... 4 1.1

1.1.1

Process : ........................................................................................................ 6

1.1.2

Difficulties...................................................................................................... 6

1.1.3

Circumvention techniques............................................................................... 7

1.1.4

The reading engine.......................................................................................... 7

1.2

2.

3.

Description of an automatic license plate reading system................................... 4

Product description .............................................................................................. 7

1.2.1

What the DLL does......................................................................................... 8

1.2.2

What the DLL does not ................................................................................... 8

1.3

Content of this manual ......................................................................................... 8

1.4

How to integrate the DLL to your application as fast as possible ?.................... 9

Installation .................................................................................................................. 10 2.1

step 1 : Installation of the LPReditor dll ........................................................... 10

2.2

Step 2: Installation of the hardware key’s driver.............................................. 11

2.3

Test program ...................................................................................................... 11

2.4

Installation for a calling program, redistribution ............................................. 12

2.5

The LPReditor folder ......................................................................................... 13

2.6

Updates ............................................................................................................... 13

Extracted data ............................................................................................................. 15 3.1

Classification....................................................................................................... 16

3.2

Reliability rating of the OCR ............................................................................. 16

3.2.1

Rank and distance ......................................................................................... 16

3.2.2

How calculate the confidence rate of the reading?......................................... 16

Page 2/ 38

engine integration guide

3.3 4.

5.

SETTINGs................................................................................................................... 19 4.1

Introduction ........................................................................................................ 19

4.2

Processing time ................................................................................................... 19

4.3

Folder path of the engines directory .................................................................. 20

4.4

Other parameters ............................................................................................... 20

Implémentation ........................................................................................................... 21 5.1

Inputs and outputs of the DLL........................................................................... 22

5.2

Image memory padding...................................................................................... 22

5.2.1

Color images................................................................................................. 22

5.2.2

Greyscale images .......................................................................................... 22

5.2.3

functions Parameters..................................................................................... 23

5.3 6.

Coordinates of the characters tags in the source image .................................... 17

Code samples ...................................................................................................... 24

Appendices .................................................................................................................. 25 6.1

Troubleshoots ..................................................................................................... 25

6.1.1

Directory of lpreditor .................................................................................... 25

6.1.2

Missing files during the initialization ............................................................ 25

6.1.3

Clusters......................................................................................................... 26

6.1.4

Missing dll.................................................................................................... 26

6.1.5

Date.sp file.................................................................................................... 27

6.1.6

Registry ........................................................................................................ 28

6.2

Protection system of LPReditor ......................................................................... 29

Page 3/ 38

engine integration guide

1.

1.1

INTRODUCTION

Description of an automatic license plate reading system

The heart of this technology is a software performing automatic license plate reading (ALPR). However applications of such software are usually made through a license plate recognition system composed of different devices1.

1) caméra

2) logiciel

3) application métier

An ALPR system mainly integrates 3 parts

1 A typical system is firstly made of cameras located at different access to a restricted area (for example a parking lot). These cameras are connected to a network of PCs equipped with the software able to identify the license plate number of the filmed vehicles. There are systems with moving cameras too.

Page 4/ 38

engine integration guide

A basic anpr/lpr system integrates at least: •

a camera



an acquisition device



a license plate recognition engine (such as the “LPReditor DLL”)



the main application that manages the elements below and that displays the results

An ALPR system can store the images captured by the cameras as well as the text from the license plate. The software aspect of the system runs on standard PC hardware and can be linked to other applications or databases.

Page 5/ 38

engine integration guide

1.1.1 Process : There are five primary algorithms that the software requires for identifying a licence plate: 1.

Plate localisation – responsible for finding and isolating the plate on the picture

2.

Plate orientation and sizing – compensates for the skew of the plate and adjusts the dimensions to the required size

3.

Normalisation – adjusts the brightness and contrast of the image

4.

Character segmentation – finds the individual characters on the plates

5.

Optical character recognition

Steps 2, 3 and 4: The licence plate is normalised for brightness and contrast and then the characters are segmented ready for OCR

1.1.2 Difficulties There are a number of possible difficulties that the software must be able to cope with. These include: •

Poor image resolution, usually because the plate is too far away but

sometimes resulting from the use of a low-quality camera. •

Blurry images, particularly motion blur and most likely on mobile units



Poor lighting and low contrast due to overexposure, reflection or shadows



An object obscuring (part of) the plate, quite often a tow bar, or dirt on the

plate Page 6/ 38

engine integration guide



A different font, popular for vanity plates (some countries ban such plates,

eliminating the problem)

Blurry images make OCR difficult – ANPR systems should have fast shutter speeds to avoid motion blur

1.1.3 Circumvention techniques If an ANPR system cannot read the plate, It is possible to do lookups on a database using wildcard characters for any part of the plate obscured, and use car details (make and model, for example) to refine the search.

1.1.4 The reading engine It is a computer software. Its function is to analyze a digital image of a vehicle to extract its registration number. In the rest of the manual, we will use alternatively or LPR engine, ANPR engine, reading engine or simply engine for the LPReditor DLL.

1.2

Product description

LPReditor DLL is license plate recognition engine that allows performing the automatic reading of a vehicle license plate. As a DLL, it works under the Microsoft environment. Its goal is to provide to the integrators the opportunity to ingrate the license plate automatic recognition feature to their application.

Page 7/ 38

engine integration guide

1.2.1 What the DLL does The main goal of the DLL is to provide with the license plate number under the form of an ASCII character string when it is given an image. 1.2.2 What the DLL does not One must notice that the DLL doesn’t perform the image acquisition (with the help of an acquisition card). That task is devolved to the main application that performs all the hardware or software functionalities. Besides the DLL doesn’t process the result of the recognition process, nor its display or its communication through a network.

1.3

Content of this manual

That manual provides with general and technical information for installation, configuration and use of the LPReditor DLL. The installation of the DLL is explained in the Installation chapter. The parameters part explains the signification and the use of the different parameters one can adjust to optimize the reading2. The implementation chapter gives explanations on each of the functions of the LPReditor DLL and shows examples of code.

2

For example to get the best reading rate Page 8/ 38

engine integration guide

1.4 How to integrate the DLL to your application as fast as possible ?

The study of the chapters “extracted data” and “Settings” is not required in order to integrate the DLL in an application since these parameters are already set in an average configuration, which should be sufficient in the majority of case. The chapter “extracted data” is useful only to those who wish to get more than a license plate number. To understand how to implement the functions exported from the DLL, you must proceed as in the example of source code described on the CD (see chap. implementation.)

Page 9/ 38

engine integration guide

2.

INSTALLATION

2.1

step 1 : Installation of the LPReditor dll

It is necessary to proceed an installation before starting to use the functions of the DLL. The goal of the installation is: • • • • •

To create the folder proper to LPReditor To install the necessary files To install and initialize the parameters of the register3 To unlock the protection system4 against counterfeit To install a test program

To proceed the installation, just launch the program LPReditor.msi, which is at the root of the CD.

3

the signification and the use of the different parameters of the register are explained in the chapter "settings”. 4 For more information on this topic see the appendix “protection system of LPReditor”

Page 10/ 38

engine integration guide

2.2

Step 2: Installation of the hardware key’s driver

To proceed to the installation of the Sentinel’s hardware key’s driver, launch Setup.Exe which is in the directory « Sentinel Protection Installer» of the CD.

Caution if the hardware key is not installed or present the DLL will work for 15 days only.

2.3

Test program

To be sure that the dll works properly, open the its directory (chosen during its installation) and launch the program diagnostic.exe. The window bellows must come into view. XXXX EN ANGLAIS

Page 11/ 38

engine integration guide

2.4

Installation for a calling program, redistribution

To redistribute the LPReditor dll in your applications, it is necessary that your application can find the dll land its components. o o o o o o o o o o

Lpreditor.dll CfCodAES.dll Mfc42.dll msvcp60.DLL Msvcrtd.dll FreeImage.dll FreeImagePlus.dll CV.dll VisCore.dll VisMatrix.dll

It is recommended to copy these components in the same directory of the calling program.

Caution: besides these components, the dll needs, during its launch, to be able to read all its initialization’s files. It is the reason for which, for the redistribution of the main application, it is necessary to foresee the installation of the dll such as described in the previous paragraphs (steps 1 and 2).

Page 12/ 38

engine integration guide

2.5

The LPReditor folder

By default the installation creates the folder ..\LPReditor in your folder Program Files». This folder contains mainly: • • • • •

The LPReditor DLL Neural net files (extensions *.net et *.mst) The files of the syntax checker (extensions *.net et *.mst). These files are stored in the sub-folder C:\Program Files\LPReditor\syntax_checker. Others dlls used necessary to the LPReditor.dll A protection file which allows to use the functions of the dll for 15 days. If you possess the hardware key, this file is not indispensable.

Caution: In the case of a use of the dll lpreditor by a calling program not to confuse the directory where from is called the dll by the calling program and the directory specific for the engine. So there can be several copies of the dll in various directories there. But all will use the same initialization files stored in the engine’s directory.

2.6

Updates

LPReditor supplies regularly updates of its dll. As possible, the compatibility with the former versions of the engine is respected so that it is not necessary to modify the code source of the application which calls the dll. It is simply enough to replace certain files in the engine’s directory and in that of the calling program. For example to reinstall a new version of the engine of reading of number plates, it is enough: Page 13/ 38

engine integration guide



To open the directory of the application (that chosen during the installation generally C:\Program Files\lpreditor \)



to copy the file LPReditor.dll in this directory (the system suggests then replacing the older version of the file by the new one)



to restart the application

Page 14/ 38

engine integration guide

3.

EXTRACTED DATA

Aside from the license plate number, the DLL LPReditor gets other peripheral data from the image. This is all the data that the programmer has at his disposal and how your application can get an access to it.: • • • •

a rate of reliability for each of the recognized characters a rate of reliability for the whole recognition the coordinates of each of the recognized characters in the source image various statistics on the geometry and the illumination of the plate

These data are exported in the following dedicated structures (in C code) : Export_Stats (this structure allows to get back the information on a single character of the license plate) Export_location (this structure allows to get back the peripheral information during the reading of the plate. It contains the most important data about the reading process (contrast, corners, algorithms...) except these concerning the characters).

The implementation is described later in the chap. “implementation”.

Page 15/ 38

engine integration guide

3.1

Classification

The DLL disposes of a classification system which, for each location of a character from the plate gives a rating for the possible 26 letters and 10 digits.

Letter I Caution ; by default the LPReditor DLL doesn’t read the I “letter”. Nevertheless you can order a special version of the engine which reads the letter I.

3.2

Reliability rating of the OCR

3.2.1 Rank and distance The LPReditor DLL disposes of two reliability ratings of OCR for each of the recognized characters: • •

the rank the distance

The rank is a positive integer. A rank of 0 is the rating of a character whose reading is quite reliable and as this rank increases the reliability decreases. The distance5 works the same way (but based on a statistic calculation of a different nature), the difference being that the distance is not an integer but a floating point number (positive too).

3.2.2 How calculate the confidence rate of the reading?

Page 16/ 38

engine integration guide

The struct. Export_Stats contains a reliability rating for the best character6 (the one with the highest probability) but also for the second (the one whose probability is coming next). This allows calculating, by differencing, a reliability rating. It is reasonable to assume that if the distance range or rank is great, then the reliability of having well classed the character is good. This allows also switching a character if necessary (syntax checker).

3.3

Coordinates of the characters tags in the source image

It is sometimes useful to know the location of each of the characters on the plate in the source image. To get the all plate you then just need to calculate the reunion of all the rectangles corresponding to each character. The coordinates of the characters tags allow also to calculate the average height which is a good indicator of the reliability of the reading.7.

5

The distance represents a length separating the character submitted to the OCR to the closest prototype known by the OCR system. 6 See « Classification » 7

Average height of theReading characters (in pixels) reliability Between 15 and 20 low Between 20 and 25 fair Between 25 and 28 good Between 28 and 35 Very good Over 35

fair

Page 17/ 38

engine integration guide

Page 18/ 38

engine integration guide

4.

4.1

SETTINGS

Introduction

This chapter provides explanations on all the useful parameters of the DLL. Most of them are stored in the register base, which forbids to adjust them while the application is running (so the modifications are accounted for, the application has to be launched again). The main parameters of the register concerning LPReditor are at the key SOFTWARE\\LPREDITOR de HKEY_LOCAL_MACHINE.

Caution aside the described parameters it is hazardous to change the other parameters of the base register. Such changes could lead to a dysfunction of LPReditor jamming your application. The only thing left to do would be to uninstall LPReditor and then reinstall it.

4.2

Processing time

The average processing time of white and black image with a standard resolution (500 000 pixels) is around 400 milliseconds8. However most images will be read in less than a second, but some will need more calculations and the reading process can take up to 4 seconds.

8

Tests run on a conventional PC.

Page 19/ 38

engine integration guide

The reason for that longer duration lies in the fact that LPReditor processes with successive trials until it finds a consistent result. To avoid too important waiting time, there is a parameter expressed with milliseconds indicating a maximum time for the reading of an image. To be more accurate it shows duration that when gone beyond won’t allow the reading engine to launch another reading trial. So it is then possible that the reading time goes slightly beyond the duration of the parameter (…so that LPReditor goes through the trial it was performing when time is over). To parametrize the processing time, indicate it in the parameters in the call of the function GetLPN (to see chap “implementation”)

4.3

Folder path of the engines directory

Although different versions of the dll can be in various directories on the same machine, all these dlls will use the same initialization files which are in the directory of the engine. This directory is recognised by the dlls from the registry key: "TargetDirLPReditor ".

4.4

Other parameters

There are other regulations which must be modified only for particular applications. For example the parameter MIN_CARAC corresponds to the minimum number of characters for a license plate.

Page 20/ 38

engine integration guide

5.

IMPLEMENTATION

This section describes how a client application calls the functions exported by the LPReditor dll. In particular, it describes the Inputs and outputs of the DLL .

The client application must load the images to be processed by the dll in memory. We describe below the format report waited by the dll.

The DLL package is mainly composed of the following elements : • The object code of the DLL that runs its functions • The .lib file (import library) of the dll. Furthermore in C language: · a header file (LPReditorDll.h) containing the the functions declarations, exported by the DLL. If you use other programming languages, it is necessary to retranscribe this file, especially the structures and the types which are defined there. It is already available for Visual Basic and C# (see examples of codes supplied with the CD)

Page 21/ 38

engine integration guide

5.1

Inputs and outputs of the DLL

The main function of the DLL (GetLPN) accepts the following input/output, as they are described in the header file LPREditorDll.h.

5.2

Image memory padding

The DLL processes images stored in the random access memory (RAM). The calling program must pass some parameters specifying the nature of the image (size, number of bits per pixel, grayscale or color) when calling functions. The DLL accepts only two memory image types: • •

Images with level of gray coded on 8 bits Images with colors BGR coded on 32 bits

5.2.1 Color images Only the images BGR with a depth of 8 bits for every channel supported. The useful information for every pixel is thus 24 bits but in fact every pixel must be coded on 32 bits: • • • •

First 8 bits for the blue channel Next 8 bits (bits 8 to 15) for the green channel Next 8 bits (bits 16 to 23) for the red channel Next 8 bits (bits 24 to 31) unused

5.2.2 Greyscale images Every pixel must be coded on eight bits (from 0 to 255). OF MORE the width of the image (expressed in number bytes) has to be a multiple of four. If the memory zone does not conform to this format, it is necessary to recopy it in a new memory emplacement, by adapting it with this format. Then call the function of the dll, with the address of this new zone.

Page 22/ 38

engine integration guide

For example if the greyscale image width in pixels is not a multiple of four, you will then have to add from 1 to 3 pixels (rather black that is in 0) or alternately remove from 1 to 3 pixels so that the new image stored in memory has a line which corresponds to a multiple of 4 bytes ( 32 bits). Ex: if the size of the image is 697*511, the width is 697, you can alternatively: •

create a new zone corresponding to an image 700*511



create a new zone report corresponding to an image 696*511

5.2.3 Functions parameters During the call of the functions it is indispensable to pass these four parameters specifying the nature of the image: •

Width



Height



Type of pixels (i.e. so that the dll knows the number of bits per pixel and if the image is in levels of grey or colours).



Pointer to the first pixel

Page 23/ 38

engine integration guide

5.3

Code samples

Code samples are available on the CD in the directory “examples”: · •

Example in C ++ ready to compile in visual studio 6. ·



Example in C ++ ready to compile in visual studio 2003.



Example in C # ready to compile in visual studio 2003.



Example in Visual Basic ready to compile in visual studio 2003.

Page 24/ 38

engine integration guide

6.

6.1

APPENDICES

Troubleshoots

6.1.1 Engine directory The engine has its own directory, independent, in which he can find files necessary for his functioning. This directory must be remembered in a key of the registry: HKEY_LOCAL_MACHINE\SOFTWARE\lpreditor \TargetDirLPReditor.

If the dll does not find that key, you obtain this error message.

XXXX A TRADUIRE

6.1.2 Missing files during the initialization Neural networks files (of extension *.net and. *.mst) are loaded during the initialization of the engine. They are directly in the directory of the engine. Page 25/ 38

engine integration guide

In case of problem, an error message appears: XXXX A TRADUIRE

6.1.3 Clusters Clusters files (of extension *.clu) are loaded during the initialization of the engine. They

are

in

the

directory

of

the

engine.

In case of problem, an error message appears: XXXX A TRADUIRE

6.1.4 Missing dll To work the engine, during its initialization, loads several dlls. If one comes to miss an error message appears. It is then enough to verify if this dll is present in the directory of lpreditor then possibly to copy out it.

Page 26/ 38

engine integration guide

XXXX A TRADUIRE

6.1.5 Date.sp file The date.sp file serves as software protection. It is in the directory of the engine. This file is used only if the machine is not provided with the hardware protection key (see paragraph " System of protection of LPReditor ").

Page 27/ 38

engine integration guide

6.1.6 Registry In case of trouble shoots you can try to reestablish the initial parameters of the base register.

Notice though that reinstalling the DLL would cause the same effect.

Page 28/ 38

engine integration guide

6.2

Protection system of LPReditor

LPReditor is protected against piracy by two different systems : • •

A hardware system9 with the protection key sentinel A software system

If one of these systems comes to be lacking, the dll will not block your application but will be in the incapacity to read number plates. The software system of protection of LPReditor is active in the absence of key hardware of protection.

7.

REFERENCE MANUAL

This section describes all the structures, the enumerations used by the dll and all the functions that are exported by the dll.

9

sometimes called the key « hardware » or the « dongle »

Page 29/ 38

engine integration guide

7.1

Recognition

ELPRErrorCode GetLpn (const int width, const int height, const int pixOpt, void * pbData, const int maxAvaiableTimeInMSeconds, ExportChar * statsRetrieval, const int nbAllocStatsRetrieval, ExportStats & statsGlobal, const RECT & preLocalisation, const int localizationPrecision) Main function : license plate reading.

Parameters: width : width of source image height : height of source image pixOpt : the pixel type : 1 (8 bpp greyscale image) 3 (RGB 24 bpp image) or 4 (RGBA 32 bpp image) pbData : source image bytes buffer maxAvaiableTimeInMSeconds : a time constant; if exceeded the process will return before returnning a number plate statsRetrieval : a pointer to a struct ExportChar that contains the infos on each single character nbAllocStatsRetrieval : the size of the array that has been alllocated by the client application to store the characters statsGlobal : a reference to a struct ExportStats wher the dll writes the global info on the reading (i.e. localization and contrast) preLocalisation : a rectangle to restrict the plate searching area localizationPrecision : indicates the precison (quality) of the localization process : 1 : the plate region of interest is fairly precise.the license plate has been detected but the border of the plate are unknown. 2 : the plate region of interest is precise.the border of the plate correspond to the CRect preLocalisation. another value : the plate region of interest is not precise. no detection at all CRect preLocalisation is just an restriction of the source image. where a plate can be

Page 30/ 38

engine integration guide

Returns: an error code (1 if Ok) See also: ELPRErrorCode, ExportChar, ExportStats

7.2

Vehicle detection

ELPRErrorCode PlateDetect (const int width, const int height, const int pixOpt, void * pbData, const int maxAvaiableTimeInMSeconds, RECT & rectPlate, int & confidenceRate, POINT & pointLT, POINT & pointRT, POINT & pointRB, POINT & pointLB, const RECT & preLocalisation) This function operates a fast plate detection associated with the coordinates of its corners. Parameters: width : width of source image height : height of source image pbData : source image bytes buffer maxAvaiableTimeInMSeconds : a time constant; if exceeded the process will return before returnning a number plate rectPlate the rectangle of the license plate if detected confidenceRate : a number between 0 and 100. 100 means that the detected zone corresponds to a license plate with a very high probability and on the opposite a rate of 0 means that the detected area is soiled by doubt pointLT : top left corner of the plate (if a plate has been detected AND the corners found) pointRT : top right corner of the plate (if a plate has been detected AND the corners found) pointRB : bottom right corner of the plate (if a plate has been detected AND the corners found)

Page 31/ 38

engine integration guide

pointLB : bottom left corner of the plate (if a plate has been detected AND the corners found) preLocalisation : a rectangle to restrict the plate searching area Returns: an error code (1 if Ok) See also: ELPRErrorCode

Page 32/ 38

engine integration guide

7.3

OCR on a small group of characteres

ELPRErrorCode GapFiller (const int width, const int height, void * pbData, const char darkCharac, ExportChar * statsRetrieval, const int nbAllocStatsRetrieval, const RECT & preLocalisation) This function reads a single character (or a small group of characters) on a ROI specified by the source image pixel type is 8 bits. Parameters: width : width of source image height : height of source image pbData : source image bytes buffer darkCharac : 1-->letters/digits are dark (Black on white) 2-->letters/digits are light (White on black) statsRetrieval : a pointer to a struct ExportChar that contains the infos on each single character nbAllocStatsRetrieval : the size of the array that has been alllocated by the client application preLocalisation : a rectangle to restrict the plate searching area Returns: an error code (1 if Ok) warn : image must be N&B grayscale i.e. 8 bits per pixel tip : use that function if you need a deeper analyse of a small part of the license plate you need to segment two touching characters See also: ELPRErrorCode, ExportChar, GapFillerBin

Page 33/ 38

engine integration guide

ELPRErrorCode

GapFillerBin

(const

int

width,

const

int

height,

void

*

pbDataImSource, void * pbDataImBinaire, const char darkCharac, ExportChar * statsRetrieval, const int nbAllocStatsRetrieval, const RECT & preLocalisation) This function reads a single character on a ROI specified by the source image pixel type is 8 bits. Parameters: width : width of source image height : height of source image pbDataImSource : source image bytes buffer pbDataImBinaire : binarized image bytes buffer darkCharac : 1-->letters/digits are dark (Black on white) (white on black) 2->letters/digits are light (White on black) statsRetrieval : a pointer to a struct ExportChar that contains the infos on each single character nbAllocStatsRetrieval : the size of the array that has been alllocated by the client application preLocalisation : a rectangle to restrict the plate searching area Returns: an error code (1 if Ok) warn : image must be N&B grayscale i.e. 8 bits per pixel tip : use that function if you need a deeper analyse of a small part of the license plate you need to segment two touching characters See also: ELPRErrorCode, ExportChar,GapFiller

7.4

Miscellanous

bool CheckHardwareKey ()

Page 34/ 38

engine integration guide

checks the presence of the hardware key Returns: true if the lpreditor's dongle is connected

int LPRGetVersion () gives the version of the dll Returns: an error code (1 if Ok) See also:

ELPRErrorCode ReLoad () reloads the parameters of initialization of the engine Returns: 1 if successful See also: ELPRErrorCode

int LPRGetCpuUsage () gives the level of use CPU of the machine, expressed as a percentage Returns: a percentage

Page 35/ 38

engine integration guide

Page 36/ 38

engine integration guide

7.5

License Agreement

This End-User Licence Agreement ("EULA") is a legal agreement for the LPReditor Software Product in which this EULA is contained, which includes computer software, between you and The Author . The Author of the LPReditor Software Product (« Software Product ») is SARL LPReditor whose coordinates are given below. By installing, copying, or otherwise using the Software Product, you agree to be bound by the terms of this EULA. You must indicate your agreement to be bound by the terms of this EULA by pressing the "I ACCEPT" button on the Software Product's installation program, or else you will not be able to install the Software Product. If you do not agree to the terms of this EULA, you may not install or use the Software Product; you may, however, within 30 days of your initial purchase of a copy of the Software Product, return the entire copy of the Software Product (including all computer media, packaging and documentation) either to The Author's Customer Service department or to the retailer from which you purchased the Software Product, for a refund of the amount indicated by your sales receipt for the Software Product, in which event your rights under this EULA are immediately terminated. If you are installing the Software Product on a computer that is not owned by you, you are bound to the terms of this EULA both in your individual capacity and as an agent of the owner of the computer, and your actions will bind the owner of the computer. You represent and warrant to The Author that you have the capacity and authority to enter into this Agreement on your own behalf as well as on behalf of the owner of the computer the Software Product is being installed upon. For purposes of this EULA, the "owner" of a computer is the individual or entity that has legal title to the computer or that has the possessory interest in the computer if it is leased or loaned by the actual title owner. COPYRIGHT. The Software Product is protected by copyright laws and international copyright treaties, as well as other intellectual property laws and treaties. All title and copyrights in and to the Software Product (including but not limited to any images, photographs, animations, video, audio, music, text, and "applets" incorporated into the Software Product) are owned by The Author or its suppliers. GRANT OF LICENCE. The Software Product is licenced, not sold. Subject to the condition that you are in compliance with the terms of this EULA: (a) you may install and use one copy of the Software Product, or any previous version for the same operating system, on a single computer for use by a single simultaneous operator; and (b) you may install a single copy of the Software Product, strictly for your own personal use, on one portable computer owned by you. No other use, copying or distribution of the Software Product is permitted. You may not rent the Software Product, nor may you offer use of it to others through a service bureau or application service provider. If you are installing this copy of the Software Product as an upgrade, update, patch or enhancement previous release of the same Software Product which was installed on the same computer, your rights under the previous licence agreement for the Software Product are terminated, and all of your use of the Software Product (including its previous versions) are solely under the terms of this licence agreement. LIMITATIONS. Except to the extent that such a restriction is unenforceable under local law, you may not reverse engineer, decompile, or disassemble the Software Product. The Software Product is licenced as a single product, and its component parts may not be separated for use on more than one computer. You may not modify, amend, or create derivative works of the Software Product. TERM. If the Software Product that was distributed to you was labeled as an EVALUATION VERSION or TRY & BUY VERSION (or its functional equivalent) (an "Evaluation Version"), the licence granted under this EULA commences upon the installation of the Software Product and is effective for the longer of 90 days following the date you install the Software Product or the first 300 uses (the "Evaluation Term"). Evaluation Version Software Products may include software code intended to disable their functionality after the expiration of the Evaluation Term. You may take no actions to circumvent the operation of such disabling code, and you accept all risks that might arise from such disabling code. If the Software Product was not distributed as an Evaluation Version, or if you converted an Evaluation Version installation of the Software Product to a non-Evaluation Version of the Software Product by authorised use of the conversion mechanism provided with the Software Product (in each case either being or resulting in a "Full-Licence Version"), the licences granted under this EULA commence upon the installation of the Software Product and are effective in perpetuity unless terminated as per the terms of this Agreement. TERMINATION. Upon the expiration of the Evaluation Term (if any), your rights under this EULA terminate automatically without notice from The Author. Without prejudice to any other rights, The Author may terminate this EULA or your rights under this EULA at any time if you fail to comply with the terms and conditions of this EULA. Upon termination of your rights under this EULA for any reason, or upon termination of the EULA itself, you must destroy all copies of the Software Product and all of its component parts in your possession (including all component parts, the media and printed materials, any previous versions, and this EULA). The terms of this paragraph shall survive any termination of this EULA. TRANSFER. You may permanently transfer all of your rights under this EULA (except if your rights are in an Evaluation Version), provided you retain no copies, you transfer all copies of the Software Product (including all component parts, the media and printed materials, any prior

Page 37/ 38

engine integration guide versions, and this EULA), and the recipient agrees to be subject to the terms of this EULA. Upon the occurrence of such a transfer, your rights under this EULA terminate immediately. LIMITED WARRANTY. The warranties and disclaimers described in this paragraph are collectively the "Limited Warranty". The Author warrants to you (and only you) that the Software Product will perform substantially in accordance with the accompanying documentation (if any) for a period of ninety (90) days from the date of original purchase of a licence to the Software Product from an authorised retailer or directly from The Author (or the date you have obtained authorisation from The Author or an authorised retailer to convert an Evaluation Version to a Full-Licence Version) (in each case the "Purchase Date"). Implied warranties on the Software Product, to the extent required by applicable law, are limited to ninety (90) days from the Purchase Date. Some states do not allow limitations on how long an implied warranty lasts, so the above limitation may not apply to you. TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE AUTHOR AND ITS SUPPLIERS DISCLAIM ALL OTHER WARRANTIES AND CONDITIONS WITH REGARD TO OR ARISING OUT OF THE SOFTWARE PRODUCT, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT AND/OR ACCURACY OF INFORMATION. The Limited Warranty is void if failure of the Software Product has resulted from accident, abuse, misapplication, use of the Software Product other than as described in the documentation issued by The Author, use of the Software Product in combination with other Software Products that are not described as compatible in the documentation issued by The Author, or your breach of the terms of this EULA. This warranty gives you specific legal rights, and you may also have other rights which vary from State to State. No individual (except a duly authorised officer of The Author) and no reseller or retailer has any authority to amend or add to any of the above representations and disclaimers. YOUR REMEDY. Your exclusive remedy for any breach of the Limited Warranty is for you to give us notice of the breach by returning to The Author (at the address shown below) a copy of your purchase receipt for your copy of the Software Product and a description of the alleged breach, and then, at The Author's discretion, The Author shall either: (a) return the price you paid (if any) for the Software Product (at which time your rights under this EULA are deemed to have terminated); or (b) repair or replace the Software Product. The Limited Warranty period for any replacement Software Product will be extended for the remainder of the original warranty period or thirty (30) days after the replacement Software Product is delivered to you, whichever is longer. If your licence is for an Evaluation Version, your exclusive remedy for any breach of this EULA, including a breach of the Limited Warranty, shall be to terminate your rights under this EULA. Your remedies described in this paragraph are your exclusive remedies, and shall not be deemed to fail in their essential purpose so long as The Author is willing to repair or replace the Software Product or return the price you paid for the Software Product. LIMITATION OF LIABILITY. TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, IN NO EVENT SHALL THE AUTHOR OR ITS SUPPLIERS BE LIABLE FOR ANY SPECIAL, INCIDENTAL, INDIRECT, OR CONSEQUENTIAL DAMAGES WHATSOEVER (INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF BUSINESS PROFITS, BUSINESS INTERRUPTION, LOSS OF BUSINESS INFORMATION, OR ANY OTHER PECUNIARY LOSS) ARISING OUT OF THE USE OF OR INABILITY TO USE THE SOFTWARE PRODUCT, EVEN IF THE AUTHOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. IN ANY CASE, THE AUTHOR'S ENTIRE LIABILITY UNDER ANY PROVISION OF THIS EULA SHALL BE LIMITED TO THE GREATER OF THE AMOUNT ACTUALLY PAID BY YOU FOR THE SOFTWARE PRODUCT OR US$5.00. Some states do not allow the exclusion or limitation of incidental or consequential damages, so the above limitation or exclusion may not apply to you. THIRD PARTY WORKS. To the extent that any third party's intellectual property is incorporated within the Software Product, you agree that such third party is a third-party beneficiary of the terms of this EULA to the extent of the third party's licence to The Author. GENERAL. This EULA constitutes the entire agreement between you and The Author concerning the Software Product. No terms of any purchase order, acceptance, purported amendment, or any document or communication other than an agreement expressly agreed upon in writing by a duly authorised officer of The Author shall replace, modify, amend or override this EULA. If any provision of this EULA is held to be unenforceable for any reason, such provision shall be reformed only to the extent necessary to make it enforceable, and such decision shall not affect the enforceability of such provision under other circumstances, or of the remaining provisions hereof under all circumstances. No waiver by The Author of any breach of any term or provision of this EULA shall be construed to be a waiver of any preceding or succeeding breach of the same or any other term or provision hereof. Our various rights and remedies hereunder shall be construed to be cumulative and no one of them is exclusive of any other or of any right or remedy allowed by law or in equity. Should you have any questions concerning this EULA, or if you need to contact The Author for any other reason, please contact: LPReditor CAP OMEGA Rond point Benjamin Franklin CS 39521 34960 Montpellier cedex 02 +33 (0) 4 67 130 100 [email protected]

Page 38/ 38