Download Full functional trial ALPR processor SDK
License Plate Recognition - LPR - ANPR - SDK For Delphi & C++
The last two releases:Active development of the license plate recognition SDK has stopped.
Before purchasing, please check whether the program meets your needs.
2017.05.05 License Plate Recognition - ALPR - library v.2.5.5
Added TRTLCriticalSection in Tvideo
2017.04.23 License Plate Recognition - ALPR - library v.2.5.4
New proprety in TVideo: CropTop
Buying Solutions | |
Buy from BMT Micro - eCommerce solutions Buy Now |
LPR (License Plate Recognition) is an image-processing technology
used to identify vehicles by their license plates. This
technology is used in various security and traffic applications,
such as the access-control system.
Is a software component aimed at vehicle license plate detect and
recognition. It has a very simple application programming
interface that allows applications to supply a path to an image,
local or remote video file and to get in return the detected
license plate number and its success rate.
It can be used from Visual C++, Embarcadero C++, Embarcadero Delphi all version or Delphi 7 Integration
is simple and straightforward as demonstrated in the examples
supplied with the SDK.
All kinds of plate reading can be taught. Typical successful detection rates range from 90% to 100%
provided that license plates are in good condition, unoccluded
and the text height is larger than 20 pixels.
Some areas for application
LPR applications have a wide range of applications, which use the
extracted plate number and optional images to create automated
solutions for various problems.
- Access Control - a gate automatically opens for authorized
members in a secured area, thus replacing or assisting the
security gaurd. The events are logged on a database and could be
used to search the history of events.
- Parking - the plate number is used to automatically enter
pre-paid members and calculate parking fee for non-members (by
comparing the exit and entry times). The optional driver face
image can be used to prevent car hijacking.
- Tolling - the car number is used to calculate the travel fee in
a toll-road, or used to double-check the ticket
- Marketing Tool - the car plates may be used to compile a list
of frequent visitors for marketing purposes, or to build a
traffic profile (such as the frequency of entry verses the hour
or day).
- A number of LPR units are installed in different locations in
city routes and the passing vehicle plate numbers are matched
between the points. The average speed and travel time between
these points can be calculated and presented in order to monitor
municipal traffic loads. Additionally, the average speed may be
used to issue a speeding ticket.
If you do not meet the needs of current license plate recognition component, we create a program branch or additions for your needs. If you want even more,( maybe have own developer team) then we recommend our SDK set.
If you have any other question belonging to version branches, ask with confidence!
programming language: Delphi, C, C++
Programming tools: Microsoft Visual Sutdio, C++ Builder XE2, Delphi 7 or Delphi XE family
LPR SDK
LPR SDK lifetime license price: $50 / Developer computer.No other (client, cpu, etc...) costs!
Download Full functional trial ALPR processor SDK | Buy Now
Very easy Delphi implementation:
Use the License Plate Recognition inteface
var alpr: Talpr; iii, ii, i: integer; mplate: TPlate; BMP: TBitmap; begin (* Create Talpr, this is License plate recognition processing object. *) alpr := Talpr.Create; (* ALPR processor license keys validation. First step after Talpr.Create purchase details: https://pergel.hu/langs/eng/License-Plate-Recognition/ *) alpr.SetLicenseDetails(111111, 'XXXXXXXXXXXX'); (* Recognize a plate tyle eu: All countries in European Union us: All Member States of the US au: Australia kr: Korean plates mx: Mexico plate br: Brazilian plate vn: Vietnamese plates vn2: Vietnamese 2 line plates gb: UK plates sg: Singapore plates *) alpr.PlateStyle:='eu'; (* Using multiple config options Eu and Us plates alpr.PlateStyle:='eu,us'; *) (* Confidence list max count, from 1 to 100 score. The higher best confidence *) alpr.TopPlateNumbers:=5; (* Initialise alpr processor, one Talpr.Create one alpr.InitializeALPR; *) alpr.InitializeALPR; (* Alpr recognition input file, *.jpg, *.bmp, *.png with path This example program processing jpeg and bmp formats. *) ConfidenceIndexes.text:=''; BestRec.text:=''; Caption:=IntToStr(iii); alpr.AlprRecognition(CarImage); (* Plates detected count in image. *) for i := 0 to alpr.PlateResultsCount - 1 do begin Caption:=inttostr(iii); (* One plate in the list TPlate type stores the following information: Plate positions, Characters on the plate. *) mplate := alpr.PlateResults[i]; (* BestPlate The best of plate Characters results *) BestRec.Lines.Add('Best: ' + mplate.BestPlate); (* confidence list, from 1 to 100 score. The higher reliability *) for ii := 0 to mplate.GetConfidencePlateCount - 1 do begin //One plate: Plate index - confidence - score ConfidenceIndexes.Lines.Add('Palte index: '+IntToStr(i)+' confidence: ' + FloatToStr(mplate.GetConfidencePlate(ii).Confidence) + ' . ' + mplate.GetConfidencePlate(ii).PlateString); end; (* Image marking *) BMP := TBItmap.Create(); BMP.Assign(Image1.Picture.Graphic); BMP.Canvas.Pen.Color := clyellow; BMP.Canvas.Pen.Width:=2; (* Plate coordinates in the image mplate.PlatePointsPos.PlatePoint"A..D"."X.Y" *) BMP.Canvas.MoveTo(mplate.PlatePointsPos.PlatePointA.X, mplate.PlatePointsPos.PlatePointA.Y); BMP.Canvas.LineTo(mplate.PlatePointsPos.PlatePointB.X, mplate.PlatePointsPos.PlatePointB.Y); BMP.Canvas.MoveTo(mplate.PlatePointsPos.PlatePointB.X, mplate.PlatePointsPos.PlatePointB.Y); BMP.Canvas.LineTo(mplate.PlatePointsPos.PlatePointC.X, mplate.PlatePointsPos.PlatePointC.Y); BMP.Canvas.MoveTo(mplate.PlatePointsPos.PlatePointC.X, mplate.PlatePointsPos.PlatePointC.Y); BMP.Canvas.LineTo(mplate.PlatePointsPos.PlatePointD.X, mplate.PlatePointsPos.PlatePointD.Y); BMP.Canvas.MoveTo(mplate.PlatePointsPos.PlatePointD.X, mplate.PlatePointsPos.PlatePointD.Y); BMP.Canvas.LineTo(mplate.PlatePointsPos.PlatePointA.X, mplate.PlatePointsPos.PlatePointA.Y); Image1.Picture.Bitmap := BMP; (* Copying multiple images on one area, it's a job waiting for you *) Image2.Canvas.CopyRect(Rect(0, 0, Image2.Width, Image2.Height), Image1.Canvas, Rect(mplate.PlatePointsPos.PlateRectanglePos.X1, mplate.PlatePointsPos.PlateRectanglePos.Y1, mplate.PlatePointsPos.PlateRectanglePos.X2, mplate.PlatePointsPos.PlateRectanglePos.Y2)); Image2.Repaint; Image2.Refresh; Image1.Repaint; Image1.Refresh; BMP.Destroy; end; (* It is important, for each processing clear the plate list with ClearPlateList procedure. *) alpr.ClearPlateList; (* We finished with the operation and free the alpr *) alpr.Destroy;
Or use the dlls directly
Handle := LoadLibrary('ALPR_PROCESSOR.DLL'); ret := GetLastError(); Memo2.Lines.Add(SysErrorMessage(ret)); Button1.Enabled := true; ButtonReleaseALPRLib.Enabled := true; ButtonInitializeALPRLib.Enabled := false; (* * ALPR processor license keys validation. Before initialization. *) @mSetLicenceKey := GetProcAddress(Handle, 'SetLicenceKey'); mSetLicenceKey(0, PAnsiChar(AnsiString('NULL'))); // mSetLicenceKey(0,PAnsiChar(AnsiString('NULL'))); @mInitializeALPR := GetProcAddress(Handle, 'InitializeALPR'); (* Set country chars European Union: eu United States of America: us Korean:kor Set other countries in alpr.conf *) SALPRInit.country := PAnsiChar(AnsiString('eu')); (* Set plate results numbers, first the best Confidence *) SALPRInit.topn := 3; (* Initialize ALPR processor. Should be called only once at the beginning of the process. *) mInitializeALPR(@SALPRInit); @mStartALPR := GetProcAddress(Handle, 'StartALPR'); @mFreeResult := GetProcAddress(Handle, 'FreeResult'); (* Set input image *) SImageSource.MyImageFile := PAnsiChar(AnsiString(CarImage)); Memo1.Lines.Clear; (* Starting plate detect and recognition *) pd := mStartALPR(@SImageSource); (* Standard XML result, the plate datas with numbers and positions *) Memo1.Lines.Add(pd.PlateXML); (* last error message *) Memo2.Lines.Add(pd.LastError); (* Best characters on plate *) Edit1.Text := pd.PlateString; (* Required to release the plate data in memory *) mFreeResult(pd);
Very easy C++ implementation:
char * CarImage ="..\\TestPlates\\images.jpg"; TALPRInit SALPRInit; /* Set country chars European Union: eu United States of America: us Korean:kor Set other countries in alpr.conf */ SALPRInit.country = "eu"; /* Set plate results numbers, first the best Confidence */ SALPRInit.topn = 2; /** ALPR processor license keys validation. Before initialization. */ SetLicenceKey(0, "NULL"); /* Initialize ALPR processor. Should be called only once at the beginning of the process. */ InitializeALPR(&SALPRInit); TImageSource SImageSource; TMyData *pd; /* Set input image */ SImageSource.MyImageFile = CarImage; printf(SImageSource.MyImageFile); /* Starting plate detect and recognition */ pd = StartALPR(&SImageSource); /* Standard XML result, the plate datas with numbers and positions */ printf(pd->PlateXML); /* last error message */ if(pd->LastError){ printf(pd->LastError); } /* Best characters on plate */ printf(pd->PlateString); /* Required to release the plate data in memory */ FreeResult(pd); ReleaseALPR();
License Plate Recognition evolutionary path. Old devs

