[vz-users] Wasserzähler, vzlogger und OCR
Matthias Behr
mbehr at mcbehr.de
Mon Nov 7 18:38:42 CET 2016
ja, heißt, dass in der Mitte des blauen Kreises nichts rotes erkannt wird. Ist ein Plausi-Check. Eigentlich eher ein Zeichen, dass das Bild komplett daneben liegt. (Ich hatte bei mir Probleme, dass die Kamera sich jeden Tag um paar mm verstellt hatte.
Habe dann „autocenter“ dafür eingeführt (s.u.) und den Plausi-Check, dass zumindest die Mitte am Anfang noch was rotes hat.
if (b.autocenter){
// autocenter: check distance from center at the detected
// needle +90/+180/+270 degrees to the circle
// adjust ac_dx/ac_dy so that the distances are equal:
// if ac_dx/ac_dy changes >+/-1 then redo calc a few times:
int det_r[3];
int ind=0;
for (int deg = degAvg+90; deg < degAvg+360; deg+=90){
int opx=-1 ,opy=-1;
int r;
for (r=b.cr-1; r>0; --r){
int px = cx+r*sin(deg * PIrad);
int py = cy-r*cos(deg * PIrad);
if (px!=opx || py!=opy) {
unsigned int c=0;
(void)pixGetPixel(image, px, py, &c);
if (c>RED_COLOR_LIMIT) {
break;
}
opx=px;
opy=py;
}
}
if (r<=0) break;
det_r[ind++] = r;
print(log_debug, "scanning at %d: r=%d", "ocr", deg, r);
}
if (ind<3){
print(log_error, "couldn't autocenter!", "ocr");
> Am 07.11.2016 um 10:41 schrieb Daniel Lauckner <vz at jahp.de>:
>
> Hallo,
>
>
> "recognizerNeedle center not red!"
> WTF?
>
>
> [Nov 07 09:42:15][ocr] MeterOCR::read: 32, 32
> [Nov 07 09:42:15][ocr] got inotify_event 8
> [Nov 07 09:42:16][ocr] image = 1280 x 960 with 32 bits each pixel
> [Nov 07 09:42:16][ocr] Cropping image to (782,334)-(922,474)
> [Nov 07 09:42:16][ocr] scanning at 272: r=18
> [Nov 07 09:42:16][ocr] scanning at 362: r=18
> [Nov 07 09:42:16][ocr] scanning at 452: r=18
> [Nov 07 09:42:16][ocr] ndx=-0.000000 ndy=-0.000000
> [Nov 07 09:42:16][ocr] ndx=0.000000 ndy=-0.000000
> [Nov 07 09:42:16][ocr] Cropping image to (716,469)-(856,609)
> [Nov 07 09:42:16][ocr] scanning at 81: r=17
> [Nov 07 09:42:16][ocr] scanning at 171: r=17
> [Nov 07 09:42:16][ocr] scanning at 261: r=17
> [Nov 07 09:42:16][ocr] ndx=0.000000 ndy=-0.000000
> [Nov 07 09:42:16][ocr] ndx=0.000000 ndy=0.000000
> [Nov 07 09:42:16][ocr] returning rounded up: smaller=0.000000 nr=0 fnr=9.750000
>
> [Nov 07 09:42:16][ocr] Cropping image to (588,521)-(728,661)
> [Nov 07 09:42:16][ocr] recognizerNeedle center not red!
>
> [Nov 07 09:42:16][ocr] Cropping image to (423,461)-(563,601)
> [Nov 07 09:42:16][ocr] recognizerNeedle center not red!
>
> [Nov 07 09:42:18][ocr] returning: id <8-0:3.2.0> value <nan>
> [Nov 07 09:42:18][mtr0] Got 0 new readings from meter:
> [Nov 07 09:42:18][chn0] ==> number of tuples: 0
> [Nov 07 09:42:18][chn0] JSON request body is null. Nothing to send now.
> [Nov 07 09:42:18][mtr0] Next reading in 20 seconds
> [Nov 07 09:42:38][ocr] MeterOCR::read: 32, 32
> [Nov 07 09:42:38][mtr0] Got 0 new readings from meter:
> [Nov 07 09:42:38][chn0] ==> number of tuples: 0
> [Nov 07 09:42:38][chn0] JSON request body is null. Nothing to send now.
> [Nov 07 09:42:38][mtr0] Next reading in 20 seconds
>
> www.jahp.de/picsextern/volkszaehler/wasserzaehler.png_debug.jpg
>
> Nachdem ich etwas Wasser gezapft hatte war der Fehler immernoch. An
> beiden Zeigern. Ich hab die Mitte dann um 1 Pixel verschoben.
>
>
> Aktuell geht auch der zweite Zeiger wieder ein Digit daneben. Wobei
> ich das daran festmache das wieder eine der Zahlen im Weg ist.
>
> Ich werde versuchen mehr Bilder zu sammeln um langsam die
> korrekte Mitte zu ermitteln. Hab nämlich den Eindruck das die Zeiger
> nicht mittig auf den Achsen sitzen.
>
>
> Ich hab ja beruflich etwas Erfahrung mit Kamerasystemen zur
> Überwachung und bin mir bewusst dass das was ich erkenne nicht mit
> dem übereinstimmen muss mit dem was die OCR erkennt. Es gibt da auch
> eine Kamera bei uns die praktisch nur ich programmiere, in erster
> Linie weil ich der einzige bin der sich die Zeit genommen hat das Ding
> zu verstehen...
>
>
>
> mfg Daniel
>
Gruß
Matthias
More information about the volkszaehler-users
mailing list