[vz-users] "OCR" fuer normalen Wasserzaehler ?

Matthias Behr mbehr at mcbehr.de
Thu Dec 24 08:41:26 CET 2015


Hallo Daniel,

> Hab ich irgendwie befürchtet. Meine Fragen dazu:
> 
> "generate_debug_image": false, // (optional, default false) set true to help in calibrating and debugging. generates one png named <file>_debug.png
> Wo wird das abgelegt?
> 

Im gleichen Verzeichnis wie das zu bearbeitende Bild (an den Dateinamen von Parameter „file“ wird einfach ein „_debug.jpg“ angehängt. Ausnahme ist bei Nutzung des v4l2 Devices (Kameras), da kommen die Bilder ins Verzeichnis „/run/vzlogger[1-9]“.

> "autofix" : {"range": 20, "x":42, "y":43}, // (optional default none) "auto fix"/move the pic based on some edge located at (x, y) within +/-"range" pixs
> Welche Ecke? Oben links, unten rechts?

Erstmal ignorieren. Wenn du z.B. eine gut erkennbare Kante im Bild hast und die Kamera über Zeit leicht schwankt (war bei mir so, da die Halterung zu wackelig ist), kannst du hiermit eine Autopositionierung machen. Im Range „range“ um die Koordinaten x/y wird nach einer Kante gesucht und das Bild daran ausgerichtet.

> 
> "kernelColorString": "2 -2 -2 0 0 0 0 0 0", // (optional default red channel only) Color conversion 3x3 matrix to be applied before detecting (first line channel red). Needles need to be color red.
> Ok, meine Nadeln wäre rot, aber was kann man da genau einstellen?
> 

Auf dem Bild wird eine Farbtransformation gemacht. Mit dem o.g. Filter / Default-Wert wird nur der Rot-Kanal übernommen. Du könntest aber auch bei z.B. blauen Zeigern nur blau nutzen, die müssen aber für die interne Erkennung in rot gewandet werden.  Wird gemacht per:

	if (_kernelColorString.length())
		kel = kernelCreateFromString(3, 3, 0, 0, _kernelColorString.c_str());
	else { // use default: only red channel amplified
		kel = kernelCreate(3, 3);
		kernelSetElement(kel, 0, 0, 2.0);
		kernelSetElement(kel, 0, 1, -1.0);
		kernelSetElement(kel, 0, 2, -1.0);
	}
	image2 = pixMultMatrixColor(image, kel);

> "identifier": "1-0:1.8.1",
> Ein Identifier? Wozu?

Über den „identifier“ werden dann die Impulse an die Middleware gemeldet, damit du die in der Middleware erkennst.

> 
> "confidence_id": "1-0:0.0.2",
> Sicherheitsidentifikator?

Hierüber wird falls gesetzt zusätzlich die Erkennungsqualität (0-100 (gut)) zurückgeliefert. Kannst du weglassen.

> 
> "scaler": -1,
> Hä?

Der erkannte Wert (hier bei Nadeln/Zeigern) wird mit dem Faktor 10^Scaler multipliziert.
Typischerweise hast du 4 Zeiger, die dann die Scaler -1, -4 brauchen. Also: erste Nadel hat Wert 0,1, 2. Nadel Wert 0,01, ...

> 
> "digit": true,
> *kopfkratz*

Hierüber wird angegeben, ob für die Berechnung des Wertes ausschließlich die Position oder auch die Vorgänger (kleinere) Nadel angezogen werden soll.

Beispiel:
Du hast 2 Nadeln, eine zeigt zwischen 4 und 5. Um jetzt zu bewerten, ob es sich um 4 oder 5 handelt wird bei „digit:true“ nur die Position genommen.
Bei „digit:false“ wird die Position der kleineren Nadel mit angezogen. Steht die auf 5-9 bleibt es bei 4. Geht die auf 0-4 geht es auf 5.
(0,49 -> 0,50)


> 
> "circle": {"cx": 100, "cy": 100, // center pos (x/y) of needle
> Gleiche Frage wie oben: Von wo aus werden die Pixel gezählt?
> 
Die Pixel werden eigentlich von links oben gezählt. Allerdings kannst du das Bild vorher noch per „rotate“ rotieren lassen. Falls du das nutzt, wird es auf dem rotierten Bild von oben links gezählt. Daher sind im _debug.jpg auch anfangs zwei Bilder (orig. und rotiert). Die Kreise werden im Debug-Image auch dargestellt, was zur Positionierung deutlich helfen sollte. 

> 
> *verwirrt* Daniel
> 
> 
> 
> 
> ---
> Diese E-Mail wurde von Avast Antivirus-Software auf Viren geprüft.
> https://www.avast.com/antivirus
> 

Gruß

Matthias



More information about the volkszaehler-users mailing list