· 7 years ago · Nov 27, 2018, 07:02 PM
1/* Test_openALPR
2
3
4openalpr_api muss in den Javascript-Adapter-Einstellungen geladen werden
5https://cloud.openalpr.com/ Konto nötig (Free Version reicht), unter CloudAPI den Secret Key finden
6
727.11.2018 erstellt von pix auf Basis der openalp Anleitung (alte Versionen des Skrirptes werden ungüpltig)
8
9
10todo:
11Trigger
12Eingabe des Bildes (node-red? email? telegram? webcam?)
13
14*/
15
16
17// Datenpunkt erstellen
18const fC = false; // forceCreation
19const logging = true;
20
21const idAusgabeJSON = "javascript." + instance + ".OpenALPR.Ausgabe.json";
22createState(idAusgabeJSON, "", fC, {
23 name: "OpenALPR Ausgabe Daten",
24 desc: "Rückgabe API",
25 type: "string",
26 role: "text"
27});
28
29// Erkennung
30var OpenalprApi = require('openalpr_api');
31var api = new OpenalprApi.DefaultApi()
32
33// Parameter
34var secretKey = "sk_XXXXXXXXXXXXXXXXX"; // {String} The secret key used to authenticate your account. You can view your secret key by visiting https://cloud.openalpr.com/
35
36// Bildeingabe in verschiedenen Varianten
37// Beispiel Bild: https://img.memecdn.com/german-license-plate_o_2604835.jpg
38// https://www.base64encode.org
39// Base64Encoded: aHR0cHM6Ly9pbWcubWVtZWNkbi5jb20vZ2VybWFuLWxpY2Vuc2UtcGxhdGVfb18yNjA0ODM1LmpwZw==
40var imageURL = "https://img.memecdn.com/german-license-plate_o_2604835.jpg";
41imageURL = "https://bugfans.de/forum/resources/image/57232";
42var imageURL64 = "aHR0cHM6Ly9pbWcubWVtZWNkbi5jb20vZ2VybWFuLWxpY2Vuc2UtcGxhdGVfb18yNjA0ODM1LmpwZw=="; // {String} The image file that you wish to analyze encoded in base64
43var imageLocal = "/Users/pix/Documents/iobroker/iobroker-data/nummernschild.jpg";
44var imageLocal64 = "L1VzZXJzL3BpeC9Eb2N1bWVudHMvaW9icm9rZXIvaW9icm9rZXItZGF0YS9udW1tZXJuc2NoaWxkLmpwZw=="; // Base64
45
46var country = "eu"; // {String} Defines the training data used by OpenALPR. \"us\" analyzes North-American style plates. \"eu\" analyzes European-style plates. This field is required if using the \"plate\" task You may use multiple datasets by using commas between the country codes. For example, 'au,auwide' would analyze using both the Australian plate styles. A full list of supported country codes can be found here https://github.com/openalpr/openalpr/tree/master/runtime_data/config
47
48var opts = {
49 'recognizeVehicle': 1, // {Integer} If set to 1, the vehicle will also be recognized in the image This requires an additional credit per request
50 'state': "", // {String} Corresponds to a US state or EU country code used by OpenALPR pattern recognition. For example, using \"md\" matches US plates against the Maryland plate patterns. Using \"fr\" matches European plates against the French plate patterns.
51 'returnImage': 0, // {Integer} If set to 1, the image you uploaded will be encoded in base64 and sent back along with the response
52 'topn': 10, // {Integer} The number of results you would like to be returned for plate candidates and vehicle classifications
53 'prewarp': "" // {String} Prewarp configuration is used to calibrate the analyses for the angle of a particular camera. More information is available here http://doc.openalpr.com/accuracy_improvements.html#calibration
54};
55
56// Erkennung
57var callback = function(error, data, response) {
58 if (error) {
59 console.error("OpenALPR Fehler: " + error);
60 } else {
61 if (logging) log('API called successfully. Returned data: ' + JSON.stringify(data, null, 2));
62 setState(idAusgabeJSON, JSON.stringify(data, null, 2), true);
63
64 // weitere Ausgaben
65 if (logging) {
66 log("------------- OpenALPR Konto ------------- ");
67 log("Kosten für diese Abfrage: " + data.credit_cost + " Credits");
68 log("Kontingent für diesen Monat: " + data.credits_monthly_total + " Credits");
69 log("Bereits verbraucht: " + data.credits_monthly_used + " Credits");
70 log("Restliche Credits: " + (data.credits_monthly_total - data.credits_monthly_used) + " Credits");
71 log("------------- Bildinformationen ------------- ");
72 log("Bildquelle: " + imageURL)
73 log("Bildbreite: " + data.img_width + "px");
74 log("Bildhöhe: " + data.img_height + "px");
75 log("------------- Ergebisse ------------- ");
76 log("Kennzeichen: " + data.results[0].plate);
77 log("Kennzeichen-Genauigkeit: " + data.results[0].confidence + "%");
78 log("Region: " + data.results[0].region);
79 log("Region-Genauigkeit: " + data.results[0].region_confidence + "%");
80 log("Kfz-Farbe: " + data.results[0].vehicle.color[0].name);
81 log("Kfz-Farbe-Genauigkeit: " + data.results[0].vehicle.color[0].confidence + "%");
82 log("Kfz-Hersteller: " + data.results[0].vehicle.make[0].name);
83 log("Kfz-Hersteller-Genauigkeit: " + data.results[0].vehicle.make[0].confidence + "%");
84 log("Kfz-Modell: " + data.results[0].vehicle.make_model[0].name);
85 log("Kfz-Modell-Genauigkeit: " + data.results[0].vehicle.make_model[0].confidence + "%");
86 log("Kfz-Typ: " + data.results[0].vehicle.body_type[0].name);
87 log("Kfz-Typ-Genauigkeit: " + data.results[0].vehicle.body_type[0].confidence + "%");
88 // weitere Möglichkeiten "candidates" tbd
89 log("Kfz-Position x: " + data.results[0].vehicle_region.x);
90 log("Kfz-Position y: " + data.results[0].vehicle_region.y);
91 log("Kfz-Position Breite: " + data.results[0].vehicle_region.width + "px");
92 log("Kfz-Position Höhe: " + data.results[0].vehicle_region.height) + "px" ;
93 log("------------- Sonstiges ------------- ");
94 log("EPOCH: " + data.epoch_time); // umwandeln
95 log("OpenALPR Version: " + data.version);
96 }
97 // bei mehreren Einträgen alle durchgehen und wenn Genauigkeit unter X Prozent nicht weiterverarbeiten. X sollte dann oben für jede Kategorie einstellbar sein.
98
99 }
100};
101api.recognizeUrl(imageURL, secretKey, country, opts, callback);