Ich habe vor ein paar Jahren mal mit einem Test-Konto von openALPR (Kennzeichenerkennung) rumprobiert. Das hat auch geklappt, allerdings war die Hardware zu schwach (Pi) und da wo das Auto war, war kein Strom.
Konkret für die Garage macht das allerdings Sinn. Denn das Programm erkannte nicht nur das Kennzeichen, sondern auch den Autotyp, dessen Farbe und macht Angaben zur Genauigkeit der Erkennung.
Hab gerade nach meinem Beitrag gesucht, ist aber schon zu alt. Dafür kam dieser Beitrag ans Licht.
punkt punkt punkt
Jetzt habe ich auf dem Rechner doch noch ein altes Skript gefunden:
Altes OpenAlpr Test-Skript von 2018
/* -- do not edit following lines - START --
{
"enabled": false,
"engine": "system.adapter.javascript.2",
"debug": false,
"verbose": false,
"mtime": 1543360855
}
-- do not edit previous lines - END --*/
/* Test_openALPR
https://github.com/openalpr/cloudapi/blob/8141c1ba57f03df4f53430c6e5e389b39714d0e0/javascript/docs/DefaultApi.md#recognizeurl
openalpr_api muss in den Javascript-Adapter-Einstellungen geladen werden
https://cloud.openalpr.com/ Konto nötig (Free Version reicht), unter CloudAPI den Secret Key finden
27.11.2018 erstellt von pix auf Basis der openalp Anleitung (alte Versionen des Skrirptes werden ungüpltig)
todo:
Trigger
Eingabe des Bildes (node-red? email? telegram? webcam?)
*/
// Datenpunkt erstellen
const fC = false; // forceCreation
const logging = true;
const idAusgabeJSON = "javascript." + instance + ".OpenALPR.Ausgabe.json";
const idTrigger = "javascript." + instance + ".OpenALPR.Trigger";
createState(idTrigger, true, fC, {
name: "OpenALPR Auslöser",
desc: "Startet Bildanalyse",
type: "boolean",
role: "button"
});
createState(idAusgabeJSON, "", fC, {
name: "OpenALPR Ausgabe Daten",
desc: "Rückgabe API",
type: "string",
role: "json"
});
// Erkennung
var OpenalprApi = require('openalpr_api');
var api = new OpenalprApi.DefaultApi()
// Parameter
var secretKey = "sk_0b92blablablanimmdeneigenen"; // {String} The secret key used to authenticate your account. You can view your secret key by visiting https://cloud.openalpr.com/
// Bildeingabe in verschiedenen Varianten
// Beispiel Bild: https://img.memecdn.com/german-license-plate_o_2604835.jpg
// https://www.base64encode.org
// Base64Encoded: aHR0cHM6Ly9pbWcubWVtZWNkbi5jb20vZ2VybWFuLWxpY2Vuc2UtcGxhdGVfb18yNjA0ODM1LmpwZw==
var imageURL = "https://img.memecdn.com/german-license-plate_o_2604835.jpg";
imageURL = "https://bugfans.de/forum/resources/image/57232";
imageURL = "http://www.kennzeichen-blog.de/wp-content/uploads/2014/08/ford-tourneo-connect-2014-jens-stratmann.jpg";
imageURL = "http://www.kennzeichen-blog.de/wp-content/uploads/2012/05/berlin-kennzeichen-nummernschilder-schlussmacher-film-schweighöfer.jpg";
imageURL = "http://www.kennzeichen-blog.de/wp-content/uploads/2012/05/range-rover-evoque-ne-kennzeichen.jpg";
var imageURL64 = "aHR0cHM6Ly9pbWcubWVtZWNkbi5jb20vZ2VybWFuLWxpY2Vuc2UtcGxhdGVfb18yNjA0ODM1LmpwZw=="; // {String} The image file that you wish to analyze encoded in base64
var imageLocal = "/Users/pix/Documents/iobroker/iobroker-data/nummernschild.jpg";
var imageLocal64 = "L1VzZXJzL3BpeC9Eb2N1bWVudHMvaW9icm9rZXIvaW9icm9rZXItZGF0YS9udW1tZXJuc2NoaWxkLmpwZw=="; // Base64
var 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
var opts = {
'recognizeVehicle': 1, // {Integer} If set to 1, the vehicle will also be recognized in the image This requires an additional credit per request
'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.
'returnImage': 0, // {Integer} If set to 1, the image you uploaded will be encoded in base64 and sent back along with the response
'topn': 10, // {Integer} The number of results you would like to be returned for plate candidates and vehicle classifications
'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
};
// Erkennung
var callback = function(error, data, response) {
if (error) {
console.error("OpenALPR Fehler: " + error);
} else {
//if (logging) log('API called successfully. Returned data: ' + JSON.stringify(data, null, 2));
setState(idAusgabeJSON, JSON.stringify(data, null, 2), true);
// weitere Ausgaben
if (logging) {
log("------------- OpenALPR Konto ------------- ");
log("Kosten für diese Abfrage: " + data.credit_cost + " Credits");
log("Kontingent für diesen Monat: " + data.credits_monthly_total + " Credits");
log("Bereits verbraucht: " + data.credits_monthly_used + " Credits");
log("Restliche Credits: " + (data.credits_monthly_total - data.credits_monthly_used) + " Credits");
log("------------- Bildinformationen ------------- ");
log("Bildquelle: " + imageURL)
log("Bildbreite: " + data.img_width + "px");
log("Bildhöhe: " + data.img_height + "px");
log("------------- Ergebisse ------------- ");
log("Kennzeichen: " + data.results[0].plate);
log("Kennzeichen-Genauigkeit: " + data.results[0].confidence + "%");
log("Region: " + data.results[0].region);
log("Region-Genauigkeit: " + data.results[0].region_confidence + "%");
log("Kfz-Farbe: " + data.results[0].vehicle.color[0].name);
log("Kfz-Farbe-Genauigkeit: " + data.results[0].vehicle.color[0].confidence + "%");
log("Kfz-Hersteller: " + data.results[0].vehicle.make[0].name);
log("Kfz-Hersteller-Genauigkeit: " + data.results[0].vehicle.make[0].confidence + "%");
log("Kfz-Modell: " + data.results[0].vehicle.make_model[0].name);
log("Kfz-Modell-Genauigkeit: " + data.results[0].vehicle.make_model[0].confidence + "%");
log("Kfz-Typ: " + data.results[0].vehicle.body_type[0].name);
log("Kfz-Typ-Genauigkeit: " + data.results[0].vehicle.body_type[0].confidence + "%");
// weitere Möglichkeiten "candidates" tbd
log("Kfz-Position x: " + data.results[0].vehicle_region.x);
log("Kfz-Position y: " + data.results[0].vehicle_region.y);
log("Kfz-Position Breite: " + data.results[0].vehicle_region.width + "px");
log("Kfz-Position Höhe: " + data.results[0].vehicle_region.height) + "px" ;
log("------------- Sonstiges ------------- ");
log("EPOCH: " + data.epoch_time); // umwandeln
log("OpenALPR Version: " + data.version);
}
// bei mehreren Einträgen alle durchgehen und wenn Genauigkeit unter X Prozent nicht weiterverarbeiten. X sollte dann oben für jede Kategorie einstellbar sein.
}
};
on({
id: idTrigger,
val: true
}, function (obj) {
log("Bildanalyse durch Trigger ausgelöst");
api.recognizeUrl(imageURL, secretKey, country, opts, callback);
});
function scriptStart() {
api.recognizeUrl(imageURL, secretKey, country, opts, callback);
log("Bildanalyse durch Skriptstart ausgelöst");
}
setTimeout(scriptStart, 1000);
Vielleicht mag jemand das ausbauen.
In Kombination zB mit GPS-Daten oder einem Bluetooth Dongle oder einfach einem RFID-Sender am Autoschlüssel (am Schlüsselbrett) kann man daraus sicher eine zuverlässige Erkennung bauen.
Pix