Biblioteka programistyczna pozwalająca na dekodowanie danych z dowodów rejestracyjnych pojazdów samochodowych zapisanych w formie kodu AZTEC 2D.
Oferujemy Państwu bibliotekę programistyczną i usługę Web API pozwalającą zdekodować dane z kodu AZTEC 2D zapisanego w dowodach rejestracyjnych pojazdów samochodowych.
Nasza biblioteka dekoduje dane z dowodu rejestracyjnego, zapisane w postaci kodu obrazkowego tzw. kod aztec. Dekodowane są wszystkie wymienione pola w dowodzie rejestracyjnym pojazdu.
Dekoder AZTec może przydać się firmom i instytucjom, które pragną zautomatyzować proces ręcznego wprowadzania danych z dowodów rejestracyjnych i zastąpić go poprzez wykorzystanie naszej biblioteki programistycznej, która potrafi rozpoznać i rozkodować kody AZTEC 2D bezpośrednio ze zdjęć dowodów rejestracyjnych lub zeskanowanych już kodów (wykorzystując skaner QR / AZTEC 2D).
Dekoder AZTec dostępny jest w trzech edycjach. Każda wersja posiada inne cechy i inne możliwości dekodowania. Wersja oparta o Web API jako jedyna posiada możliwość rozpoznawania i dekodowania danych bezpośrednio ze zdjęć i obrazków. Pozostałe wersje do dekodowania wymagają już odczytanego kodu w postaci tekstu (np. ze skanera).
Cechy | Web API | Źródła | Binaria |
---|---|---|---|
Dekodowanie danych ze zdjęć i obrazków (PNG/JPG) | |||
Dekodowanie danych z zeskanowanych kodów (tekst) | |||
Kody źródłowe algorytmu dekodującego | |||
Przykłady użycia | |||
Format wyjściowy JSON | |||
Format wyjściowy XML | |||
Wymagane połączenie z Internetem | |||
Licencja wieczysta | |||
Darmowe aktualizacje | |||
Darmowe wsparcie techniczne |
Jest to najbardziej zaawansowana edycja Dekodera AZTec, ponieważ umożliwia precyzyjne rozpoznawanie i dekodowanie kodów AZTEC 2D bezpośrednio ze zdjęć oraz obrazków zapisanych w formatach PNG lub JPG.
Algorytm rozpoznawania obrazu należy do naszej firmy, jest to innowacyjne rozwiązanie rozwijane od podstaw przez prawie rok czasu.
Rozumiemy potrzeby naszych klientów oraz problemy wynikające z rozpoznawania rzeczywistych zdjęć kodów AZTEC 2D znajdujących się w dowodach rejestracyjnych, które nie zawsze są idealnie wykonane, czy to ze względu na rodzaj aparatu, kąta wykonania zdjęcia, refleksów czy słabej rozdzielczości.
Przy tworzeniu naszego rozwiązania wzięliśmy wszystkie te czynniki pod uwagę i w efekcie nasz algorytm radzi sobie znakomicie z rozpoznawaniem kodów AZTEC 2D ze zdjęć z wszelkiego rodzaju zniekształceniami, uszkodzeniami i niedoskonałościami. Znacznie przewyższa pod względem funkcjonowania dostępne na rynku biblioteki rozpoznawania kodów AZTEC 2D takie jak np. ZXing.
Dla ułatwienia szybkiego wdrożenia, paczki instalacyjne Dekodera AZTec zostały wgrane na repozytoria dla kilku popularnych języków programowania, a dodatkowo ich kody źródłowe zostały opublikowane na GitHubie:
Repozytorium | Język | Instalacja | Paczka | Źródła |
---|---|---|---|---|
Java | Dodaj wpis do pliku pom.xml
|
Maven | GitHub | |
JavaScript dla Node.js |
|
npm | GitHub | |
C#, VB.NET |
|
NuGet | GitHub | |
PHP | Dodaj do sekcji
|
Packagist | GitHub | |
Python |
|
PyPI | GitHub |
Interfejs Web API bazuje na prostym zapytaniu POST
do naszego serwera, który dane wyjściowe zwraca w formie
ciągu tekstowego JSON. Wykorzystanie dekodera jest
możliwe z dowolnego języka programowania, który zapewnia funkcje komunikacji sieciowej i dekodowania danych
formatu JSON. Przykład użycia dla kilku popularnych języków programowania:
//
// załącz klasę dekodera (dostępna jako zależność systemu Maven)
//
import com.pelock.AZTecDecoder;
import org.json.JSONObject;
public static void main(String[] args)
{
// utwórz klasę dekodera (używamy naszego klucza licencyjnego do inicjalizacji)
AZTecDecoder myAZTecDecoder = new AZTecDecoder("ABCD-ABCD-ABCD-ABCD");
//
// 1. Dekoduj dane bezpośrednio z pliku graficznego, zwróć wynik jako tablicę
//
JSONObject DecodedArray = myAZTecDecoder.DecodeImageFromFile("C:\\zdjecie-dowodu.jpg");
// czy udało się zdekodować dane?
if (DecodedArray != null && (Boolean)DecodedArray.get("Status") == true)
{
// wyświetl rozkodowane dane (są zapisane jako tablica asocjacyjna)
System.out.println(DecodedArray.toString(4));
}
//
// 2. Dekoduj dane bezpośrednio z pliku graficznego i zwróć wynik jako string JSON
//
JSONObject DecodedJSON = myAZTecDecoder.DecodeImageFromFile("C:\\zdjecie-kodu-aztec-2d.png");
if (DecodedJSON != null)
{
System.out.println(DecodedJSON.toString(4));
}
//
// 3. Dekoduj dane z odczytanego już ciągu znaków (np. wykorzystując skaner ręczny)
//
// zakodowane dane z dowodu rejestracyjnego
String szValue = "ggMAANtYAAJD...";
JSONObject DecodedText = myAZTecDecoder.DecodeText(szValue);
if (DecodedText != null)
{
System.out.println(DecodedText.toString(4));
}
//
// 4. Dekoduj dane z odczytanego już ciągu znaków zapisanego w pliku (np. wykorzystując skaner ręczny)
//
JSONObject DecodedTextFile = myAZTecDecoder.DecodeTextFromFile("C:\\odczytany-ciag-znakow-aztec-2d.txt");
if (DecodedTextFile != null)
{
System.out.println(DecodedTextFile.toString(4));
}
}
//
// załącz moduł dekodera dla Node.js (instalacja komendą "npm install aztec-decoder")
//
var AZTecDecoder = require('aztec-decoder');
// inicjalizuj dekoder (używamy naszego klucza licencyjnego do inicjalizacji)
AZTecDecoder.SetApiKey("ABCD-ABCD-ABCD-ABCD");
//
// 1. Dekoduj dane bezpośrednio z pliku graficznego, zwróć wynik jako rozkodowaną tablicę elementów JSON
//
AZTecDecoder.DecodeImageFromFile("C:\\zdjecie-dowodu.jpg", function(DecodedArray) {
// czy udało się zdekodować dane?
if (DecodedArray !== null && DecodedArray["Status"] === true)
{
// wyświetl rozkodowane dane (są zapisane jako rozkodowana tablica elementów JSON)
console.log(JSON.stringify(DecodedArray, null, "\t"));
}
});
//
// 2. Dekoduj dane bezpośrednio z pliku graficznego i zwróć wynik jako rozkodowaną tablicę elementów JSON
//
AZTecDecoder.DecodeImageFromFile("C:\\zdjecie-kodu-aztec-2d.png", function(DecodedJSON) {
if (DecodedJSON !== null)
{
console.log(JSON.stringify(DecodedJSON, null, "\t"));
}
});
//
// 3. Dekoduj dane z odczytanego już ciągu znaków (np. wykorzystując skaner ręczny)
//
// zakodowane dane z dowodu rejestracyjnego
var szValue = "ggMAANtYAAJD...";
AZTecDecoder.DecodeText(szValue, function(DecodedText) {
if (DecodedText !== null)
{
console.log(JSON.stringify(DecodedText, null, "\t"));
}
});
//
// 4. Dekoduj dane z odczytanego już ciągu znaków zapisanego w pliku (np. wykorzystując skaner ręczny)
//
AZTecDecoder.DecodeTextFromFile("C:\\odczytany-ciag-znakow-aztec-2d.txt", function(DecodedTextFile) {
if (DecodedTextFile !== null)
{
console.log(JSON.stringify(DecodedTextFile, null, "\t"));
}
});
//
// załącz klasę dekodera (instalacja komendą 'php composer.phar require --prefer-dist pelock/aztec-decoder "*"')
//
include_once "AZTecDecoder.php";
//
// utwórz klasę dekodera (używamy naszego klucza licencyjnego do inicjalizacji)
//
$myAZTecDecoder = new PELock\AZTecDecoder("ABCD-ABCD-ABCD-ABCD");
//
// 1. Dekoduj dane bezpośrednio z pliku graficznego, zwróć wynik jako tablicę
//
$DecodedArray = $myAZTecDecoder->DecodeImageFromFile("zdjecie-dowodu.jpg");
// czy udało się zdekodować dane?
if ($DecodedArray !== false && $DecodedArray["Status"] === true)
{
// wyświetl rozkodowane dane (są zapisane jako tablica asocjacyjna)
var_dump($DecodedArray);
}
//
// 2. Dekoduj dane bezpośrednio z pliku graficznego i zwróć wynik jako string JSON
//
$DecodedJSON = $myAZTecDecoder->DecodeImageFromFile("zdjecie-kodu-aztec-2d.png", false);
if ($DecodedJSON !== false)
{
echo $DecodedJSON;
}
//
// 3. Dekoduj dane z odczytanego już ciągu znaków (np. wykorzystując skaner ręczny)
//
$DecodedText = $myAZTecDecoder->DecodeText("ggMAANtYAAJD...");
if ($DecodedText !== false)
{
var_dump($DecodedText);
}
//
// 4. Dekoduj dane z odczytanego już ciągu znaków zapisanego w pliku (np. wykorzystując skaner ręczny)
//
$DecodedTextFile = $myAZTecDecoder->DecodeTextFromFile('/sciezka/odczytany-ciag-znakow-aztec-2d.txt');
if ($DecodedTextFile !== false)
{
var_dump($DecodedTextFile);
}
//
// załącz klasę dekodera (instalacja jako pakiet NuGet "PM> Install-Package AZTecDecoder")
//
using PELock;
private void AZTecDecoderTest()
{
//
// utwórz klasę dekodera (używamy naszego klucza licencyjnego do inicjalizacji)
//
var myAZTecDecoder = new AZTecDecoder("ABCD-ABCD-ABCD-ABCD");
//
// 1. Dekoduj dane bezpośrednio z pliku graficznego, zwróć wynik jako rozkodowaną tablicę elementów JSON
//
var decodedArray = myAZTecDecoder.DecodeImageFromFile(@"C:\sciezka\zdjecie-dowodu.jpg");
// czy udało się zdekodować dane?
if (decodedArray != null && decodedArray["Status"] == true)
{
// wyświetl rozkodowane dane (są zapisane jako tablica elementów JsonValue)
textOutput.Text = decodedArray.ToString();
}
//
// 2. Dekoduj dane bezpośrednio z pliku graficznego i zwróć wynik jako rozkodowaną tablicę elementów JSON
//
var decodedFromImage = myAZTecDecoder.DecodeImageFromFile(@"C:\sciezka\zdjecie-kodu-aztec-2d.png");
if (decodedFromImage != null)
{
MessageBox.Show(decodedFromImage.ToString());
}
//
// 3. Dekoduj dane z odczytanego już ciągu znaków (np. wykorzystując skaner ręczny)
//
// zakodowane dane z dowodu rejestracyjnego
var szValue = "ggMAANtYAAJD...";
var decodedText = myAZTecDecoder.DecodeText(szValue);
if (decodedText != null)
{
MessageBox.Show(decodedFromImage.ToString());
}
//
// 4. Dekoduj dane z odczytanego już ciągu znaków zapisanego w pliku (np. wykorzystując skaner ręczny)
//
var DecodedTextFile = myAZTecDecoder.DecodeTextFromFile(@"C:\sciezka\odczytany-ciag-znakow-aztec-2d.txt");
if (DecodedTextFile != null)
{
MessageBox.Show(DecodedTextFile.ToString());
}
}
#
# załącz moduł dekodera (instalacja komendą "pip install aztecdecoder")
#
from pelock import aztecdecoder
from pprint import pprint
# utwórz klasę dekodera (używamy naszego klucza licencyjnego do inicjalizacji)
aztec_decoder = aztecdecoder.AZTecDecoder("ABCD-ABCD-ABCD-ABCD")
#
# 1. Dekoduj dane bezpośrednio z pliku graficznego, zwróć wynik jako rozkodowaną tablicę elementów JSON
#
decoded_array = aztec_decoder.decode_image_from_file("C:\\sciezka\\zdjecie-dowodu.jpg")
# czy udało się zdekodować dane?
if decoded_array and "Status" in decoded_array:
# wyświetl rozkodowane dane (są zapisane jako rozkodowana tablica elementów JSON)
pprint(decoded_array)
#
# 2. Dekoduj dane bezpośrednio z pliku graficznego i zwróć wynik jako rozkodowaną tablicę elementów JSON
#
decoded_json = aztec_decoder.decode_image_from_file("C:\\sciezka\\zdjecie-kodu-aztec-2d.png")
if decoded_json:
pprint(decoded_json)
#
# 3. Dekoduj dane z odczytanego już ciągu znaków (np. wykorzystując skaner ręczny)
#
# zakodowane dane z dowodu rejestracyjnego
value = "ggMAANtYAAJD...";
decoded_text = aztec_decoder.decode_text(value)
if decoded_text:
pprint(decoded_text)
#
# 4. Dekoduj dane z odczytanego już ciągu znaków zapisanego w pliku (np. wykorzystując skaner ręczny)
#
decoded_text_file = aztec_decoder.decode_text_from_file('C:\\sciezka\\odczytany-ciag-znakow-aztec-2d.txt')
if decoded_text_file:
pprint(decoded_text_file)
Biblioteka dostępna jest w wersji binarnej dla systemu Windows (DLL w wersji 32 i 64 bitowej) i może być wykorzystywana w dowolnych językach programowania obsługujących pliki DLL.
Oprócz tego przygotowane zostały natywne wersje z kodami źródłowymi w wybranych językach programowania. Warto nadmienić, że natywne implementacje nie są zależne od żadnych zewnętrznych bibliotek i referencji.
Biblioteka posiada tylko jedną funkcję dekodującą, na wejściu pobierany jest zeskanowany ciąg ASCII kodu AZTEC 2D, na wyjściu zwracany jest ciąg UNICODE pliku XML zawierającego wszystkie rozkodowane dane (w tym osobowe, czego inne biblioteki nie zwracają). Wersja w PHP potrafi także zwrócić dane w formacie JSON.
Szeroka oferta opcji programistycznych pozwala na wykorzystanie biblioteki na wielu platformach sprzętowych i systemach operacyjnych, takich jak Windows, Linux, OSX, iOS, Android.
Język programowania | Binaria | Źródła | |
---|---|---|---|
Java | |||
Delphi / Pascal | |||
Visual Basic / VBA | |||
C / C++ | |||
C# | |||
PHP | |||
Python | |||
Ruby |
Biblioteka deszyfrująca w wersji binarnej oraz z kodami źródłowymi może być dostosowana do dowolnego języka programowania, kilka przykładów użycia:
public static void main(String[] args)
{
// utwórz klasę dekodera
com.AZTecDecoder.AZTecDecoder myAZTecDecoder = new com.AZTecDecoder.AZTecDecoder();
// zakodowane dane z dowodu rejestracyjnego
String szValue = "gQMAANtYA...";
// dekoduj dane
String szDecoded = myAZTecDecoder.DecodeValue(szValue);
// wyświetl rozkodowane dane w formie zrzutu XML
System.out.print(szDecoded);
}
// deklaracja funkcji dekodującej dla Delphi
function DecodeValue(Value: WideString): WideString; stdcall; external 'AZTecDecoder.dll';
procedure TFormMain.ButtonDekodujClick(Sender: TObject);
var
DecodedXml: WideString;
begin
// zdekoduj dane (pobierz z kontrolki Memo)
Decoded := DecodeValue(MemoZakodowane.Text);
// jeśli błąd dekodowania wyjdź
if Decoded = '' then Exit;
// zapisz wynikowy ciąg XML do pliku
WStrToFile('XmlUnicode.xml', Decoded);
end;
' deklaracja funkcji dekodującej dla Visual Basic / VBA
Private Declare Function DecodeValueVBA Lib "AZTecDecoder.dll" (ByVal Value As String, ByRef Output As String) As Integer
Sub AztecDecoder_Test()
Dim Value As String
Dim Xml As String
Dim Result As Integer
' Zakodowane dane z dowodu rejestracyjnego
Value = "gQMAANtYA..."
' Dekoduj dane
Result = DecodeValueVBA(Value, Xml)
' Wyświetl zdekodowane dane w formacie XML
MsgBox (Xml)
End Sub
#include "AZTecDecoder.h"
int main(void)
{
/* zakodowane dane z dowodu rejestracyjnego */
const wchar_t wszValue[] = L"gQMAANtYA...";
/* wskaźnik na bufor, gdzie znajdą się zdekodowane dane */
wchar_t *wszDecoded = NULL;
/* dekoduj dane z postaci tekstowej do wyjściowego XML-a */
wszDecoded = DecodeValue(wszValue);
/* jeśli dekodowanie się udało, wyświetl rozkodowane */
/* informacje w formie zrzutu XML */
if (wszDecoded != NULL)
{
wprintf(wszDecoded);
/* zwolnij bufor pamięci z wyjściowymi danymi */
free(wszDecoded);
}
else
{
wprintf(L"Nie udało się rozkodować danych!");
}
return 0;
}
#define UNICODE
#include <stdlib.h>
#include <stdio.h>
#include <tchar.h>
#include <conio.h>
#include "AZTecDecoder.h"
int DekoderTest()
{
HMODULE hAZTecDecoder = NULL;
DECODEVALUECPPSIZE pDecodeValueCPPSize = NULL;
DECODEVALUECPP pDecodeValueCPP = NULL;
unsigned int dwBufferSize = 0;
unsigned int dwResult = 0;
wchar_t wszValue[] = _T("gQMAANtYA...");
wchar_t *wszXml = NULL;
// załaduj bibliotekę dekodera
hAZTecDecoder = LoadLibrary(_T("AZTecDecoder.dll"));
pDecodeValueCPPSize = (DECODEVALUECPPSIZE)GetProcAddress(hAZTecDecoder, "DecodeValueCPPSize");
pDecodeValueCPP = (DECODEVALUECPP)GetProcAddress(hAZTecDecoder, "DecodeValueCPP");
// pobierz rozmiar bufora na wyjściowy XML
dwBufferSize = pDecodeValueCPPSize(wszValue);
if (dwBufferSize == 0) return 1;
// alokuj pamięć na bufor wyjściowy XML
wszXml = malloc(sizeof(wchar_t) * dwBufferSize);
// dekoduj dane
dwResult = pDecodeValueCPP(wszValue, wszXml);
// jeśli dekodowanie się udało, wyświetl XML
if (dwResult == 0)
{
wprintf(wszXml);
// zwolnij pamięć
free(wszXml);
return 0;
}
// zwolnij pamięć
free(wszXml);
return 1;
}
[DllImportAttribute("AZTecDecoder.dll", EntryPoint = "DecodeValueCPPSize", CallingConvention = CallingConvention.StdCall)]
public static extern int DecodeValueCPPSize(byte[] wszValue);
[DllImportAttribute("AZTecDecoder.dll", EntryPoint = "DecodeValueCPP", CallingConvention = CallingConvention.StdCall)]
public static extern int DecodeValueCPP(byte[] wszValue, byte[] wszOutputXml);
private void buttonDecode_Click(object sender, EventArgs e)
{
// zakodowane dane w formacie ASCII
string szValue = textInput.Text;
textOutput.Text = "";
UnicodeEncoding UNICODE = new UnicodeEncoding();
// skonwertuj dane wejsciowe do formatu UNICODE
byte[] wszValue = UNICODE.GetBytes(szValue);
// pobierz rozmiar bufora na wyjściowy XML
int dwBufferSize = DecodeValueCPPSize(wszValue);
// jesli zwrocony rozmiar jest pusty, dane wejsciowe
// mogly byc w nieprawidlowym formacie
if (dwBufferSize == 0)
{
MessageBox.Show("Nieprawidłowy format danych!");
return;
}
// alokuj pamięć na bufor wyjściowy XML
byte[] lpcDecodedData = new byte[dwBufferSize];
// dekoduj dane
int dwResult = DecodeValueCPP(wszValue, lpcDecodedData);
// jeśli dekodowanie się udało, wyświetl rozkodowane
// informacje w formie zrzutu XML
if (dwResult == 0)
{
string szXml = UNICODE.GetString(lpcDecodedData);
textOutput.Text = szXml;
}
else
{
MessageBox.Show("Nie udało się rozkodować danych!");
return;
}
}
<?php
include_once "AZTecDecoder.php";
// utwórz klasę dekodera
$myAZTecDecoder = new AZTecDecoder();
// zakodowane dane z dowodu rejestracyjnego
$szValue = "gQMAANtYA...";
// czy rozkodowane dane mają być zwrócone w formie XML lub JSON
$bJson = false;
// dekoduj dane
$szDecoded = $myAZTecDecoder->DecodeValue($szValue, $bJson);
// jeśli dane zostały zdekodowane do formatu XML
// wyślij do przeglądarki odpowiedni nagłówek XML
if ($bJson == false)
{
header("Content-type: text/xml; charset=utf-8");
}
// wyświetl rozkodowane dane
echo $szDecoded;
?>
import AZTecDecoder
# utwórz klasę dekodera
myAZTecDecoder = AZTecDecoder.AZTecDecoder()
# zakodowane dane z dowodu rejestracyjnego
szValue = "gQMAANtYA..."
# dekoduj dane
szDecoded = myAZTecDecoder.DecodeValue(szValue)
# jeśli dekodowanie się udało, wyświetl rozkodowane
# informacje w formie zrzutu XML
if szDecoded:
print szDecoded
else:
print "Nie udało się rozkodować danych!"
load 'AZTecDecoder.rb'
# utwórz klasę dekodera
aztec_decoder = AZTecDecoder.new
# zakodowane dane z dowodu rejestracyjnego
value = "gQMAANtYA..."
# dekoduj dane
decoded = aztec_decoder.DecodeValue(value)
# jeśli dekodowanie się udało, wyświetl rozkodowane
# informacje w formie zrzutu XML
if decoded.to_s != ''
puts decoded
else
puts "Nie udalo sie rozkodowac danych!"
end
Za dodatkową opłatą jesteśmy w stanie wykonać dowolną implementację dla innych języków programowania.
Dekoder AZTec w wersji z kodami źródłowymi i wersji binarnej nie wymaga jakichkolwiek innych bibliotek czy zależności do poprawnego funkcjonowania. Nie jest również wymagana jakakolwiek instalacja czy to samej biblioteki czy dodatkowych komponentów.
Nasza biblioteka posiada cyfrowy podpis kodu (dotyczy systemu Windows), co oznacza, że pochodzi ze zweryfikowanego źródła, nasza firma musiała przejść przez proces weryfikacyjny, przedstawiając dokumenty świadczące o legalności prowadzonych działań.
Jeśli są Państwo zainteresowani lub mają jakiekolwiek pytania odnośnie Dekodera AZTec, techniczne, prawne, coś nie jest do końca jasne, proszę o kontakt. Z miłą chęcią odpowiem na każde pytanie.