Show more

Read more

View product

View report

Drag

Carmen® FreeFlow
ANPR/LPR Engine with SDK

The Ultimate Optical Character Recognition Engine with Advanced Software Development Kit.
Unmatched Accuracy and Global Coverage for Any Project.

anpr-lpr-sdk-kit-carmen-freeflow_product_image_1
anpr-lpr-sdk-kit-carmen-freeflow_hero_image_1

Carmen® FreeFlow:
ANPR Brilliance

Carmen® FreeFlow is a cutting-edge Number Plate Recognition Engine and Software Development Kit (SDK). It empowers developers to integrate world-class automatic license plate recognition (ANPR/LPR) capabilities into their applications. The industry-leading Carmen® engine delivers unmatched accuracy, achieving over 95% recognition even for low-quality images.

Its flexible licensing scales to any project size, while multithreading support ensures smooth operation. This versatile solution recognizes plates from over 160 countries, making it ideal for global applications. 

anpr-lpr-sdk-kit-carmen-freeflow-block-image-1

Uncompromising Performance
for Any Project

Carmen® FreeFlow is the trusted choice for projects demanding unmatched precision. Boasting a real-life accuracy rate of 95% to 99% for various plate types, Carmen® FreeFlow ensures reliable recognition even in challenging conditions.  

With support for over 38,000 plate types from 160+ countries and diverse alphabets—including Latin, Arabic, Cyrillic, Thai, and more—Carmen® FreeFlow offers an unparalleled global reach. It is the premier choice for high-quality ANPR/LPR, serving regions from Brazil to Japan, North America to Europe, and the Middle East to Asia-Pacific. Integrate it once and unlock the power of high-performance ANPR – anywhere in the world.

anpr-lpr-sdk-kit-carmen-freeflow-block-image-2

An OCR Engine
that Scales with You

Carmen® FreeFlow is not a one-size-fits-all solution; it is a versatile ANPR engine designed to adapt to your specific needs. It allows for seamless integration of high-accuracy license plate recognition, as well as optional make and model recognition (MMR), dangerous goods (HazMat), and IMO code recognition. This flexibility supports a wide range of applications, including traffic monitoring, security systems, highway tolling, and access control. 

Designed for scalability, Carmen® FreeFlow provides flexible licensing options to fit the size and processing needs of your project. Its exceptional accuracy, even on less-than-ideal images, results in low false-positive rates; therefore, making it suitable for secondary verification in toll enforcement. The engine operates seamlessly on both Windows and Linux platforms. 

Highlighted
features

carmen freeflow anpr lpr software - tried and tested

Tried
& Tested

Used in over 100,000 systems worldwide.

carmen freeflow anpr lpr software - worldwide anpr and mmr

Wolrdwide
ANPR & MMR

Worldwide recognition of vehicle plates, make, model, and color with a single integration.

carmen freeflow anpr lpr software - regular engine updates

Regular
Engine Updates

Four updates released per year.

carmen freeflow anpr lpr software - scalability

Scalability

From small through medium to large and complex systems.

carmen freeflow anpr lpr software -video and image processing

Video & Image
Processing

SDK supports either data input.

carmen freeflow anpr lpr software - support of major OP systems

Support of
major OP systems

Runs on Windows and Linux.

FAQ

  • Does Carmen® FreeFlow read license plates from my country?

    Carmen® FreeFlow supports license plate recognition for over 160 countries, covering more than 38,000 plate types. Please contact our team for specific country support.

  • Does Carmen® FreeFlow work with video streams?

    Yes, Carmen® FreeFlow can process both still images and video streams.

  • Is there a possibility to try a demo of Carmen® FreeFlow?

    Yes, you can try our software using our subscription-based licensing model free of charge.

  • Is Carmen® FreeFlow available as a lifetime license?

    Our SDK is available either as a lifetime license or as a subscription-based license.

  • Is there a version of Carmen® FreeFlow without a hardware key?

    Yes, our SDK can be used with a subscription-based licensing model, which is available without a hardware key.

  • How often are updates issued for Carmen® FreeFlow?

    We release engine updates four times a year.

  • Does Carmen® FreeFlow support ARM architecture?

    Yes, our Carmen® SDK supports x86-64, ARM32, and ARM64 architectures.

Most common
applications

Carmen FreeFlow’s versatility makes it ideal for a wide range of traffic monitoring applications. Here are just a few of the most common uses:

Traffic Monitoring

Toll Enforcement

Speed & Journey Time Measurement

Highway Tolling

Dangerous Goods Code Recognition

Container Code Recognition

Sample Codes

  • C

    #include "gxsdldr.c" #include "cmanpr.h" // If an error occurred it displays the error and terminates the program void term_if_err(int st) { int err_code; wchar_t err_str[256]; if(st) return; // No error occurred // Displays error code and description err_str[(sizeof(err_str)/sizeof(wchar_t))-1] = 0; gx_geterror(&err_code, err_str, (sizeof(err_str)/sizeof(wchar_t))-1); fprintf(stderr, "GX error (%x) occurred: %ls\n", err_code, err_str); // Terminates the program exit(1); } int main(void) { struct gxHANDLE anprhandle, imagehandle; struct gxIMAGE *image; struct cmNP *anprresult; int st; // Opens the ANPR module with EUR region st = gx_openmodule(&anprhandle, L"cmanpr", L"eur"); term_if_err(st); // Opens the image module, allocates the image structure and load the image st = gx_openmodule(&imagehandle, L"gximage", L"default"); term_if_err(st); st = gx_allocimage(imagehandle, &image); term_if_err(st); st = gx_loadimage(imagehandle, image, L"image.jpg", GX_UNDEF); term_if_err(st); // Finds the first license plate anprresult = 0; st = cm_findfirst(anprhandle, image, &anprresult); term_if_err(st); if(anprresult) { char countryCode[256]=""; // Get short country code st = cm_getcountrycode(anprhandle,anprresult->type,(int)CCT_COUNTRY_SHORT,countryCode,sizeof(countryCode)); term_if_err(st); // Displays the result, country code and type printf("Plate text: %s\n", anprresult->text); printf("Country code: %s\n", countryCode[0] ? countryCode : "No plate type"); printf("Type: %i\n", anprresult->type); // Frees up the result st = gx_globalfree(anprresult); term_if_err(st); } else { printf("No license plate found\n"); } // Frees up the resources st = gx_unrefimage(imagehandle, image); term_if_err(st); st = gx_unrefhandle(&imagehandle); term_if_err(st); st = gx_unrefhandle(&anprhandle); term_if_err(st); return 0; }

  • C++

    #include "gxsdldr.cpp" #include "cmanpr.h" int main() { try { // Creates the ANPR object with EUR region cm::cmAnpr anpr("eur"); // Creates the image object and load the image gxImage image; image.Load("image.jpg"); // Finds the first license plate if(anpr.FindFirst(image)) { // Get short country code gxOutStr countryCode = anpr.GetCountryCode(anpr.GetType(),(int)cm::CCT_COUNTRY_SHORT); std::wstring wCountryCode = countryCode.empty() ? L"No plate type" : countryCode; // Displays the result, country code and type std::wcout << L"Plate text: " << anpr.GetText() << std::endl; std::wcout << L"Country code: " << wCountryCode << std::endl; std::wcout << L"Type: " << anpr.GetType() << std::endl; } else { std::wcout << L"No license plate found" << std::endl; } } catch(gxError &e) { std::wcerr << L"GX error (" << e.GetErrorCode() << ") occurred: " << e.GetErrorString() << std::endl; return 1; } return 0; }

  • C#

    using System; using gx; using cm; namespace carmen { class MainClass { public static void Main(string[] args) { try { // Creates the ANPR object with EUR region cmAnpr anpr = new cmAnpr("eur"); // Creates the image object and load the image gxImage image = new gxImage(); image.Load("image.jpg"); // Finds the first license plate if (anpr.FindFirst(image)) { // Get short country code String countryCode = anpr.GetCountryCode(anpr.GetType(), (int)CC_TYPE.CCT_COUNTRY_SHORT); countryCode = countryCode.Length > 0 ? countryCode : "No plate type"; //Displays the result, country code and type Console.WriteLine("Plate text: {0}", anpr.GetText()); Console.WriteLine("Country code: {0}", countryCode); Console.WriteLine("Type: {0}", anpr.GetType()); } else { Console.WriteLine("No license plate found"); } } catch(gxException) { Console.Error.WriteLine("GX error (" + gxSystem.GetErrorCode() + ") occured: " + gxSystem.GetErrorString()); Environment.Exit(1); } } } }

  • Java

    import com.adaptiverecognition.gx.*; import com.adaptiverecognition.cm.*; public class cmanpr { static { try { System.loadLibrary("jgx"); System.loadLibrary("jcmanpr"); } catch(UnsatisfiedLinkError e) { System.err.println("Native code library failed to load." + e); System.exit(1); } } public static void main(String argv[]) { try { // Creates the ANPR object with EUR region cmAnpr anpr = new cmAnpr("eur"); // Creates the image object and load the image gxImage image = new gxImage(); image.Load("image.jpg"); // Finds the first license plate if(anpr.FindFirst(image)) { // Get short country code String countryCode = anpr.GetCountryCode(anpr.GetType(),jcmanprConstants.CCT_COUNTRY_SHORT); countryCode = countryCode.length()>0 ? countryCode : "No plate type"; // Displays the result, country code and type System.out.println("Plate text: " + anpr.GetText()); System.out.println("Country code: " + countryCode); System.out.println("Type: " + anpr.GetType()); } else { System.out.println("No license plate found"); } // Frees up resources anpr.delete(); image.delete(); } catch(RuntimeException e) { System.err.println("GX error (" + String.format("0x%08x",gxSystem.GetErrorCode()) + ") occured: " + gxSystem.GetErrorString()); System.exit(1); } } }

  • VB.Net

    Imports System Imports gx Imports cm Module Main Sub Main() Try ' Creates the ANPR object with EUR region Dim anpr As cmAnpr = New cmAnpr("eur") ' Creates the image object and load the image Dim image As gxImage = New gxImage("default") image.Load("image.jpg") ' Finds the first license plate If anpr.FindFirst(image) Then ' Get short country code Dim countryCode As String countryCode = anpr.GetCountryCode(anpr.GetType(), CC_TYPE.CCT_COUNTRY_SHORT) If countryCode.Length = 0 Then countryCode = "No plate type" ' Displays the result, country code and type Console.WriteLine("Plate text: {0}", anpr.GetText()) Console.WriteLine("Country code: {0}", countryCode) Console.WriteLine("Type: {0}", anpr.GetType()) Else Console.WriteLine("No license plate found") End If Catch ex As gxException Console.Error.WriteLine("GX error (" + gxSystem.GetErrorCode().ToString() + ") occured: " + gxSystem.GetErrorString()) Environment.Exit(1) End Try End Sub End Module

Licensing
Options

K-License
For Low Traffic Project

This type of license is recommended for access control projects with less than 300 parking places

FreeFlow Licensing
By CPU Core

Via this option, you can adapt your licensing to the processing capacity of your hardware (see table below).

Licensing Guidelines
Based on Processing Power and Requirements

Single License (Image/Sec)
Dual License (Image/Sec)
Quad License (Image/Sec)
i3 processor

1 - 5

2 - 10

4 - 20

i5 processor

3 - 7

6 - 14

12 - 28

i7 processor

5 - 10

10 - 20

20 - 40

Compare
Licensing Options

K-License
FreeFlow
Capacity (images/day)

11,520

unlimited (but may depend on CPU speed, settings, engine type)

Processing threads

4 parallel threads

1 / 2 / 4 parallel threads

Credit buffer

300

unlimited

Time for 4 new credits (sec)

30

-

Product documentation
and other resources

Contact

Get more information or a quote

Our sales & product experts are here to help you. Contact us or find an affiliate near your location.

Reference projects
for this product category Carmen® FreeFlow

focus-digital-security-solutions-nz-logo
apriclass-gelb-access-control-systems-logo
Burj_Khalifa
Hilton_Hotels
Adaptive Recognition horizontal logo 2024
OUR REFERENCES

Go beyond the claims, see the proof.
Explore our reference projects and
case studies for tangible evidence of
how Adaptive Recognition delivers
exceptional outcomes

OUR RESOURCES

By those who see challenges as opportunities and rewrite the definition of impossible every day
Follow Adaptive Recognition