Hi,
hier geht es um einen "optischen Sensor"
http://www.fhemwiki.de/wiki/Optischer_Sensor,_Software
Einfach gesagt, damit kann man die Zustände von LEDs oder irgendwelchen Lichtern an fhem melden. Programmcode ist fast fertig. Jedenfalls fallen mir keine Fehler auf.
Alternativ kann man auch Karten benutzen (Niederschlagsmessung vom DWD z.B.), und dort für ein oder mehrere Regionen den Wert an fhem senden.
Freue mich auf Fragen oder Rückmeldungen.
0.2
erste öffentliche Version
! Obacht, ohne Python 2.7, OpenCV und NumPy läuft das nicht !
(Anleitung kommt noch, im Wiki ist ein gutes Tutorial verlinkt)
Im Wiki ist ein Link zu einer guten "wie jage ich es erfolgreich durch den Compiler-Anleitung"
Wem das zu aufwendig ist: für Debian 8 gibt es auch fertige Builds (Debian 7 weiß ich nicht; ob es mit den fertigen Paketen irgendwelche Probleme gibt, habe ich auch noch nicht ausprobiert)
apt-get install libopencv-dev python-opencv
Wohin installieren?
Gute Frage.
Die Kommunikation zu fhem erfolgt per TCP/IP. Damit kann das Programm auf dem gleichen Rechner wie fhem laufen, muss aber nicht. Man kann es ohne weiteres auf einem eigenen RasPi betreiben. Netzwerkverbindung braucht er halt. Das ist sinnvoll, wenn man einen RasPi mit USB Cam zum Bildermachen benutzt, ohne darauf fhem zu installieren.
Allerdings ist es auch kein Problem, das Programm auf dem fhem Server selbst zu betreiben. Das ist praktisch, wenn man z.B. Karten vom DWD (Waldbrandindex, Bodenfeuchte...) für seine Region damit auswerten will.
Wer es sich nur mal interesse halber ansehen will, kann das Skript auch unter Windows ausführen (darunter habe ich es geschrieben, das klappt definitiv ;) )
Das Programm erwartet eine Bilddatei (farbig!), deren Name immer gleich ist. Ob man die vom DWD lädt, per USB Cam erzeugt oder aber mit einer WLAN Überwachungscam, spielt keine Rolle.
Die Auflösung ist ebenfalls nicht so wichtig. Prinzipiell reichen 640x480 Pixel für eine Webcam durchaus aus. Hat man feste Farbwerte (Grafiken vom DWD), reicht 1 Pixel als Maske aus. Bei LEDs auf einem Foto sollten es mehr Pixel sein, da eine unterschiedliche Beleuchtung durchaus einen Einfluss haben kann.
Im ZIP Archiv befinden sich:
sensor.py => das Script
2 Beispiel-Config-Files
1 TXT Datei die den Aufruf nochmal verdeutlicht
ein Unterordner
darin das Quellbild
für jede Beispielconfig 8 Masken
schöne idee. 8)
dann mach das mal gleich so, dass ich mir zb beim dwd aus diesem png, die passende bodenfeuchte auslesen kann. und alles fritzbox kompatibel. ;)
(http://forum.fhem.de/index.php?action=dlattach;topic=39678.0;attach=35570;image)
gruss frank
Das würde jetzt schon gehen ;D
Definiere 8x die gleiche ROI (also die gleiche Maske 8x identisch), für den Bereich wo du wohnst.
Dann einmalig die Farbwerte definieren (die aus der Skala eignen sich dafür gut)
Fertig.
(In dem Fall wäre es evtl einfacher, sich die HSV Umwandlung zu sparen und gleich die RGB Werte (für OpenCV BGR) zu nehmen.)
Die Rückmeldung würde dann die Anzahl der Pixel in den unterschiedlichen Farben liefern. Wenn deine ROI auf einem "Grenzgebiet" liegt.
Also für Brandenburg z.B.
ROI_1 0
ROI_2 0
ROI_3 200
ROI_4 0
ROI_5 0
ROI_6 0
ROI_7 0
ROI_8 0
Damit wäre klar, dass dein gewählter Bereich grade gelb wäre...
FritzBox wird nicht gehen, sorry :)
Wenn du willst, baue ich RGB auch ein. Muss dazu nur die HSV Konvertierung weglassen 8)
Ich habe es noch nicht jetzt ausprobiert, aber so müsste muss es aussehen:
Bodenfeuchte:
bodenfeuchte.json
{
"fhem_host_port": "http://192.168.5.31:8083",
"fhem_request": "/fhem?cmd=",
"different_ROI": "8",
"path_to_picture": "./Picture",
"picture": "bodenfeuchte",
"type": "png",
"mask": "5seenland",
"hsv": false,
"lower_col_1": [45,100,200],
"upper_col_1": [45,100,200],
"lower_col_2": [60,200,250],
"upper_col_2": [60,200,250],
"lower_col_3": [75,250,250],
"upper_col_3": [75,250,250],
"lower_col_4": [75,250,200],
"upper_col_4": [75,250,200],
"lower_col_5": [75,220,150],
"upper_col_5": [75,220,150],
"lower_col_6": [75,150,75],
"upper_col_6": [75,150,75],
"lower_col_7": [250,200,50],
"upper_col_7": [250,200,50],
"lower_col_8": [250,0,0],
"upper_col_8": [250,0,0],
"fhem_command_1": "setreading%20Bodenfeuchte%200-10",
"fhem_command_2": "setreading%20Bodenfeuchte%2010-30",
"fhem_command_3": "setreading%20Bodenfeuchte%2030-50",
"fhem_command_4": "setreading%20Bodenfeuchte%2050-80",
"fhem_command_5": "setreading%20Bodenfeuchte%2080-95",
"fhem_command_6": "setreading%20Bodenfeuchte%2095-100",
"fhem_command_7": "setreading%20Bodenfeuchte%20100-105",
"fhem_command_8": "setreading%20Bodenfeuchte%20105-"
}
So in etwa müsste die passende Config aussehen. IP Adresse halt anpassen und die Dateinamen. Dafür ist es ja ein Config-File 8)
An fhem würden werden dann die Anzahl der in der jeweiligen Farbe positiv getesteten Pixel landen. Dieser Wert hängt (in deinem Fall) vermutlich schlicht von der größe der Maske ab (also des weißen Flecks)...
Letztlich brauchen wir 8 ROIs, da es 8 verschiedene Farben geben kann (eben die in der Skala unten aufgeführten).
Die Farbwerte sind in BGR Reihenfolge (also quasi RGB umgedreht). Habe in GIMP einfach die Farbwerte unten aus der Legende genommen (also nachgesehen welche Werte die Farben haben; hat 3 Minuten gedauert)
Da es immer exakt die gleiche Farbe ist, können lower_col und upper_col identisch sein
Im Regelfall wird man da verschiedene Werte eintragen, da Farben in einem Bild (also einem Foto) natürlich stark von der Beleuchtung abhängig sind (daher auch HSV Farbraum).
Dazu eine Maske (im Anhang mal für mich, 8x die gleiche Datei)
Hast du eine statische URL, wo man die Grafik runterladen kann?
Memo to self:
Ich denke, ich muss den Namen der Config Datei noch in den Maskennamen einfügen. erledigt
Dann kann man mit dem gleichen Quellbild nämlich verschiedene Config Datei mit verschiedenen Masken nutzen...
(Also in deinem Fall, die Bodenfeuchte von mehreren Regionen auswerten lassen)
Update:
Die Farbbereiche müssen in [...] geschrieben werden :)
irgendwie bin ich zu doof das programm, von dem du ständig redest, zu finden. :)
wahrscheinlich doch erst trockenübungen. 8)
das hier ist der link der grafik:
http://www.dwd.de/bvbw/generator/DWDWWW/Content/Landwirtschaft/Bilder/Bodenfeuchte/bf__dl,property=default.png (http://www.dwd.de/bvbw/generator/DWDWWW/Content/Landwirtschaft/Bilder/Bodenfeuchte/bf__dl,property=default.png)
ZitatIch denke, ich muss den Namen der Config Datei noch in den Maskennamen einfügen.
Dann kann man mit dem gleichen Quellbild nämlich verschiedene Config Datei mit verschiedenen Masken nutzen...
(Also in deinem Fall, die Bodenfeuchte von mehreren Regionen auswerten lassen)
umgekehrt wäre auch nicht schlecht. beim dwd gibt es noch weitere karten im selben format, denke ich. zb. aktuelles risiko von kartoffelfäule. ;)
bei den masken hatte ich eigentlich gedacht, dass wahrscheinlich ein einzelner pixel ausreichen könnte. mit mehreren natürlich auch nicht schlecht.
gruss frank
Zitatirgendwie bin ich zu doof das programm, von dem du ständig redest, zu finden. :)
wahrscheinlich doch erst trockenübungen. 8)
Jein. Es sind auf meinem Rechner grade 2 verschiedene Versionen existent. Eine, die die Farbwerte meldet (für 5 ROIs) und eine, die die ROIs in einer Schleife abarbeitet (aber noch nicht zählt).
Sobald ich Zeit habe, kopiere ich das zusammen und stelle es online ::)
Daher freue ich mich sehr über deine Anregungen :)
Zitatumgekehrt wäre auch nicht schlecht. beim dwd gibt es noch weitere karten im selben format, denke ich. zb. aktuelles risiko von kartoffelfäule. ;)
Du kannst das Verzeichnis frei wählen. Bei verschiedenen Bildern (gleicher Name, anderer Inhalt) wäre das nicht unschlau. Mein Szenario war 1 Bild und 3 verschiedene Geräte :)
Zitatbei den masken hatte ich eigentlich gedacht, dass wahrscheinlich ein einzelner pixel ausreichen könnte. mit mehreren natürlich auch nicht schlecht.
Sollte auch gehen. Warum nicht? Dann halt nur 1 weißen Pixel setzen :)
Dann kommen halt 7x0 und 1x1 an fhem zurück.
Das einzige, was bei den Masken wichtig ist, dass die Auflösung identisch mit dem Originalbild ist!
Sodala, weiteren Code in das neue Programm übernommen :)
Bezogen auf dein Wetterbild von oben, meiner oben geposteten Maske nebst Config File (Achtung, habe ich grade aktualisiert), bekomme ich folgende Resultate:
Zitat
D:\OpenCV_Eigene_Experimente\Geschirr>test.py --conf "BodenfeuchteDWD.json"
Soll-Durchlaeufe 8
The number of positive pixels is: 0
The number of positive pixels is: 0
The number of positive pixels is: 0
The number of positive pixels is: 156
The number of positive pixels is: 0
The number of positive pixels is: 0
The number of positive pixels is: 0
The number of positive pixels is: 0
Fertig
Was noch fehlt, die in die Setreadings von fhem zu senden...Jetzt in fhem:
Zitat
Internals:
CFGFN
NAME Bodenfeuchte
NR 32100
STATE ???
TYPE dummy
Readings:
2015-08-04 06:54:54 0-10 0
2015-08-04 06:54:55 10-30 0
2015-08-04 06:55:00 100-105 0
2015-08-04 06:55:01 105- 0
2015-08-04 06:54:56 30-50 0
2015-08-04 06:54:57 50-80 156
2015-08-04 06:54:58 80-95 0
2015-08-04 06:54:59 95-100 0
Attributes:
room Garten
Man sieht:
Das Reading 50-80 enthält 156 Pixel, der Rest enthält keine.
Jetzt muss man noch in Abhängigkeit der Readings vom Dummy dessen State anpassen.
0-10 > wie in der Sahara
...
105- > ist die Arche schon fertig?
(Ich weiß nicht, wie das geht :-[ )
die variante mit beliebig vielen pixeln hat nun ein problemchen bei der auswertung. das müsste am besten gemittelt werden. da gibt es viele möglichkeiten und interpretationsspielraum. bei einem pixel/reading wäre das ergebnis klar. zum anfang mal ein userreading für die einfachen fälle.
Internals:
CFGFN
NAME dwd_bf
NR 646
STATE aktueller Bodenfeuchtebereich 50 - 80 %
TYPE dummy
.userreadings:
State:
TIME 2015-08-04 13:20:22
modifier none
perlCode { my ($min,$max); foreach my $reading (sort grep /^bf.*/, keys %{$defs{$name}{READINGS}}) { if(ReadingsVal($name,$reading,0)) { (undef,$min,$max) = split('_',$reading); return "aktueller Bodenfeuchtebereich ".$min." - ".$max." %"; } } }
t 1438687222.85953
trigger bf7_105
value aktueller Bodenfeuchtebereich 50 - 80 %
Readings:
2015-08-04 13:16:38 bf0_0_10 0
2015-08-04 13:16:59 bf1_10_30 0
2015-08-04 13:17:18 bf2_30_50 0
2015-08-04 13:17:47 bf3_50_80 156
2015-08-04 13:19:21 bf4_80_95 0
2015-08-04 13:19:45 bf5_95_100 0
2015-08-04 13:20:02 bf6_100_105 0
2015-08-04 13:20:22 bf7_105 0
2015-08-04 13:20:22 state aktueller Bodenfeuchtebereich 50 - 80 %
Helper:
Bm:
Dummy_define:
cnt 1
dmx 0
mAr
max 0
tot 0
Dummy_set:
cnt 54
dmx 0
max 1
tot 1
mAr:
HASH(0x1c41fa0)
dwd_bf
?
Attributes:
room 01_Test
userReadings state:bf7_105 { my ($min,$max); foreach my $reading (sort grep /^bf.*/, keys %{$defs{$name}{READINGS}}) { if(ReadingsVal($name,$reading,0)) { (undef,$min,$max) = split('_',$reading); return "aktueller Bodenfeuchtebereich ".$min." - ".$max." %"; } } }
Mercy.
Es spricht nichts gegen eine 1 Pixel Maske. Einfach nur 1 weißes Pixel malen :) (den Rest natürlich schwarz machen).
Kommst du mit der Anleitung zur OpenCV Installation klar?
Bzw, worauf läuft es bei dir? Evtl. kann man das durch einen Cross-Compiler jagen?
ZitatKommst du mit der Anleitung zur OpenCV Installation klar?
Bzw, worauf läuft es bei dir? Evtl. kann man das durch einen Cross-Compiler jagen?
8) 8) 8)
ich mache bisher nur trockenübungen wegen fritzbox.
Oh, ich dachte du hättest bezüglich der FritzBox oben einen Witz gemacht. Sorry.
Ich glaube nicht, dass man Python und OpenCV darauf zum laufen bekommt.
Wenn du willst, schreibe ich dir aber eine Anleitung wie es unter Windows geht :)
Ist nicht schwer, dauert keine 15 Minuten.
Erst mal das ganze Graffel für Windows runterladen...
OpenCV
http://sourceforge.net/projects/opencvlibrary/files/opencv-win/2.4.11/opencv-2.4.11.exe/download
Python
http://python.org/ftp/python/2.7.5/python-2.7.5.msi
Numpy
https://downloads.sourceforge.net/project/numpy/NumPy/1.8.0/numpy-1.8.0-win32-superpack-python2.7.exe
Matplotlib
https://downloads.sourceforge.net/project/matplotlib/matplotlib/matplotlib-1.3.0/matplotlib-1.3.0.win32-py2.7.exe
Zitatumgekehrt wäre auch nicht schlecht. beim dwd gibt es noch weitere karten im selben format, denke ich. zb. aktuelles risiko von kartoffelfäule.
Ah,
jetzt habe ich dich verstanden. Unterschiedliche Bilder, aber gleiche Masken.
Kein Streß. Dann lass in der Kartoffel-Config den Pfad und den Maskennamen gleich :)
ZitatErst mal das ganze Graffel für Windows runterladen...
danke für die links. zum kennenlernen bestimmt schon mal nicht schlecht, aber für eine automatisierung bei mir ungeeignet.
bei dir läuft das alles auf dem fhem-pi und verzögert/stört/beeinflusst den normalen fhem ablauf nicht? bei deinen 8 dummy-readings zur dwd-bodenfeuchte haben die timestamps ca 1s differenz. also vom 1. bis 8. ca 8s. das ist dann die rechenzeit für diesen ablauf? käme also noch der download des bildes dazu.
bei der bildanalyse zum dwd könnte das einlesen der 8 referenzfarben sicherlich auch automatisiert werden. ;)
gruss frank
Zitatbei deinen 8 dummy-readings zur dwd-bodenfeuchte haben die timestamps ca 1s differenz. also vom 1. bis 8. ca 8s. das ist dann die rechenzeit für diesen ablauf? käme also noch der download des bildes dazu.
Ich habe mich schon gefragt, wann wer auf die langen Zeiten in den Readings Bezug nimmt :)
Das liegt daran, dass ich zu der Zeit zu Debug Zwecken immer auf einen Tastendruck gewartet habe :)
Habe es mal schnell gebenchmarkt (ohne Tastendrücke, sondern so, wie es auch in echt abläuft):
Zitat
D:\OpenCV_Eigene_Experimente\Sensor>benchmark
D:\OpenCV_Eigene_Experimente\Sensor>echo 11:19:59,48
11:19:59,48
D:\OpenCV_Eigene_Experimente\Sensor>sensor.py --conf "BodenfeuchteDWD5seenland.json"
Soll-Durchlaeufe 8
The number of positive pixels is: 0
The number of positive pixels is: 0
The number of positive pixels is: 0
The number of positive pixels is: 156
The number of positive pixels is: 0
The number of positive pixels is: 0
The number of positive pixels is: 0
The number of positive pixels is: 0
Fertig
D:\OpenCV_Eigene_Experimente\Sensor>echo 11:20:00,23
11:20:00,23
0,35 Sekunden braucht es...
Finde das durchaus flott :)
Zitatzum kennenlernen bestimmt schon mal nicht schlecht, aber für eine automatisierung bei mir ungeeignet.
Ist klar. Soll ja auch nur sein, um in "vertrauter" Umgebung mal zu sehen, was so passiert :)
Zitat
bei dir läuft das alles auf dem fhem-pi und verzögert/stört/beeinflusst den normalen fhem ablauf nicht?
Nein. Hatte die DWD Karten nie im Auge :)
Aber ich finde es interessant, die auch zu "erschlagen".
Mein Anwendungsfall war, das Programm auf einen eigenen RasPi auf dem Kühlschrank laufen zu lassen, wo es alle 60 Sekunden ein Statusupdate an fhem senden soll.
Aber ich glaube, ich werfe es mir mal auf den Cubietruck.
Ob es fhem verzögert oder nicht, wenn auf dem gleichen Rechner:
- wenn du das Programm von fhem aus aufrufst, wird es fhem blockieren (wie jedes externe aufgerufene Programm, z.B. mplayer)
- wenn du " &" an den Aufruf hängst, wird es fhem nicht blockieren
- wenn du es in einen Cronjob steckst, der regelmäßig ausgeführt wird (z.B. alle 5 Minuten), bekommt fhem davon gar nix mit (außer eben den aktualisierten Werten)...
Zitat
bei der bildanalyse zum dwd könnte das einlesen der 8 referenzfarben sicherlich auch automatisiert werden. ;)
Ja. Könnte man.
Dagegen spricht: es kostet Rechenzeit, und zwar jedes mal.
Und dann ist die Frage: was tun wenn es 5 Referenzfarben sind?
So muss man pro Karte 1x händisch den Farbwert für jede Farbe ermitteln und in die Config schreiben...
(Nebenbei: die 8 Referenzfarben für diese Karte habe ich schon erstellt, kann man Copy&Pasten ;) )
Bin für jeden Hinweis / Idee / Beitrag offen :)
hi,
ich habe das ganze geraffel jetzt mal installiert. fast, denn mir ist noch nicht klar, was ich mit dem ganzen opencv zeug mache, fast 4gb. ???
nach start von sensor.py erhalte ich
H:\frank\optischerSensor\Sensor>sensor.py --conf "BodenfeuchteDWD5seenland1.json"
Traceback (most recent call last):
File "H:\frank\optischerSensor\Sensor\sensor.py", line 6, in <module>
import cv2
ImportError: No module named cv2
ich vermute ein path problem.
edit: habe nun ein buildpath gesetzt, wie in einer anleitung gefunden, mit
setx -m OPENCV_DIR H:\frank\programme\openCV\opencv\build\python\2.7\x86
das reicht wohl noch nicht.
Ja, du musst noch das cv2.pyd Modul kopieren.
ZitatNow copy everything in the folder C:\opencv\build\python\x86\2.7\ ( most probably, there will be only one file cv2.pyd ) and paste it in the folder C:\Python27\Lib\site-packages\
Wenn da mehr Verzeichnisse sind, nimm die x86
yes. das war es, danke.
das heisst, es wird von den 4GB lediglich die eine datei (11KB) benötigt? der rest könnte wieder weg?
gruss frank
Hm, ich glaube nicht.
Ich hab für meine Gesichtserkennung für fhem das Python Skript durch nen Compiler gejagt. Da kamen glaube ich satte 30MB raus, bis es unabhängig war.
Ich kann das mit dem Sensor auch machen, streßfrei.
Aber wenn was nicht so läuft wie erwartet, stehst mit ner Binary halt dumm da. Im Skript kannst nachlesen wo der Fehler aufgetreten ist oder eigene Breakpoints setzen.
Wie kommst du denn mit der Conf Datei an sich klar?
Ist es in etwa rauslesbar, was wohin muss?
ZitatIst es in etwa rauslesbar, was wohin muss?
bisher ganz easy, hat auf anhieb funktioniert. hab aber auch noch nicht viel geändert. ;)
eins verstehe ich noch nicht. warum braucht es 8 identische masken? oder hab ich etwas übersehen?
Ähm,
tja.
Zitatwarum braucht es 8 identische masken?
Ich ging davon aus, dass es viele gleichfarbige LEDs gibt (Salz, Klarspüler => jeweils eine eigene rote LED, aber an einer anderen Stelle)
Die DWD Karten haben quasi eine Stelle, aber andere Farben...
Daher verschiedene Masken (die identisch sind) aber jeweils auf andere Farben reagieren...
So gesehen ist es also eher ein Trick, um auch DWD Karten auswerten zu können.
ZitatDaher verschiedene Masken (die identisch sind) aber jeweils auf andere Farben reagieren...
ok. könnte man sicherlich anders lösen, aber erstmal ok.
zb statt der anzahl der masken, die anzahl der "prüfungen/checks" (ist natürlich die selbe zahl). und dann führ jede prüfung weitere configs. bisher je prüfung 2 farbwerte. das könnte man dann um einen 3. parameter maske ergänzen.
aber mach erst einmal urlaub. ;)
Urlaub fertig :)
Bin zwar bis mitte Oktober noch ziemlich ausgebucht, aber prinzipiell wieder erreichbar.
Bitte:
Ich schaue momentan nicht so oft ins Forum (s.o.)
=> wenn es wer ausprobiert und es nicht funktioniert, bitte hier im Thread posten, ggfs. mir ne PM schicken, damit ich es nicht übersehe :)
Nehme hier auch Wünsche für Erweiterungen / Änderungen entgegen
Hallo,
ersmal Respekt für diese Realisierung, super Idee.
Gibt es vielleicht auch eine Möglichkeit Bildbereiche über Texterkennung auszulesen? Ich stelle mir vor Wasserzähler oder Stromzähler Mithilfe einer Webcam/IPCam optisch zu erfassen und in fhem zu protokollieren.
Wenn du willst, ja.
Warum nicht. Ist eine Lösung mit den Masken akzeptabel?
Also den Bereich maskieren, wo die Zahlen stehen? Die letzte Ziffer wird vermutlich nix, weil die ja ständig in Bewegung ist. Und du musst im Dunkel für genug Licht für deine Kamera sorgen.
sorry, aber anscheinend habe ich noch ein Verständnisproblem.
Über die Maske bekomme ich theoretisch einen Bildauschnitt der mir nur die Zahlen des Wasserzählers zeigt. So weit so gut.
Dann würde dieses Modul doch normalerweise die RGB Farbwerte dieses Ausschnitts auswerten, oder nicht? Ich verstehe nicht ganz wie ich vom Bildausschnitt der Zähleranzeige zum digitalen Zahlenwert komme.
Indem ich statt dem Farbenspiel den Programmcode für OCR benutze 8)
Mit viel Glück schreibe ich es bis zum Wochenende. Ansonsten kann es aber auch ein Weihnachtsgeschenk werden.
Hast du schon ne Idee für das Kamerasetup?
Deine Aufgabe besteht darin, ein konstantes Bild zu ezeugen. Das kann auch ne WLAN Kamera leisten, wichtig ist nur, dass der Bildausschnitt gleich bleibt und die Zahlen gut zu sehen sind.
Ich mache mir derweil um die Kalibrierung des OCR Moduls Gedanken.
Der Kommunikationskern vom Modul kann ja letztlich bleiben. Lediglich das OpenCV Farbespiel muss ein OCR Teil werden. Das kann OpenCV auch. Die Masken (bzw Maske) brauchen wir nicht unbedingt, aber ich denke, so geht es schneller mit der Auswertung.
Du bist der absolute Hit.
Respekt für dein engagement. Ich werde mir jetzt eine Kamera besorgen und diese dann an Ort und Stelle fixieren.
Das ist gut. Dann würde ich dich bitten, mir einige unveränderte Beispielbilder zukommen zu lassen. Dann nehm ich sie als Testbilder zur Feinkonfiguration her. Wenn du willst, auch mit verschiedenen Lichtverhältnissen.
Prinzipiell sollten die Zahlen gut lesbar sein (Bildauflösung / Entfernung zur Kamera)
unter meinen Gegebenheiten sind die Bilder mit meiner IPCam viel zu schlecht, wahrscheinlich fehlt einfach noch eine Beleuchtung. Da muß ich mir noch was einfallen lassen.
Deshalb gibts im Moment nur Bilder von meinem Smartphone als Test.
Gruß
Uhhhh
Das wird kniffelig :o
Das die Zahlen auch nur teilweise da sind, macht die Sache ja echt komplex.
Es wird länger dauern. Und du wirst um ein Training nicht umhin kommen :(
Ich lass mir was einfallen :)
Sodala.
Mein Problem ist jetzt, dass ich das Programm nicht trainieren kann um ihm die passende Schriftart beizubringen. Mir fehlen ja ganz viele Zahlen :)
Ein kurzer Test mit einer auf Handschrift getrimmten Testdatei ging jedenfalls voll in die Hose.
Also brauche ich den Namen der Schriftart, mit der diese Zeichen erzeugt worden sind :)
Die Zähler stammen wohl von der Firma Lorenz. Habe dort mal angerufen und nach dem Schriftnamen gefragt, leider ist der Kollege grade nicht da. Habe gebeten, mir das per eMail zukommen zu lassen.
Dann kann ich Trainingsbilder erstellen :)
Ach ja, wo ich denke mir Inspiration holen zu können, ist da:
http://stackoverflow.com/questions/9413216/simple-digit-recognition-ocr-in-opencv-python (http://stackoverflow.com/questions/9413216/simple-digit-recognition-ocr-in-opencv-python)
@bytejunky,
Für den Fall, dass ich die Schriftart nicht bekomme, wärst du so freundlich einige Liter Wasser zu opfern?
Ich brauche die Zahlen 0-9 als Bild.
Und wenn die nur von der letzten Anzeigerolle sind, ist völlig ok.
Nur bitte drauf achten, dass die Zahlen ganz drauf sind, also etwa in der Mitte :)
Versuche, mehrere Bilder von jeder Zahl zu machen, jeweils die Camera etwas anders positioniert. Also von leicht schräg links/rechts, etwas oben/unten, etwas von beidem :)
Auflösung von 640x480 reicht völlig, wenn die letzte Zahl halbwegs groß im Bild zu sehen ist
Ergänzung:
Bitte auch drauf achten, dass keine Licht-Reflektionen auf den Zahlen sind.
Und mich interessiert, wann die vorletzte Zahl sich um 1 Zähler weiter dreht.
Ich hab da evtl. eine Billig-Lösung im Kopf, die für diesen Anwendungsfall aber gut gehen könnte:
Eigentlich würde es völlig reichen, lediglich die Shapes von den Zahlen zu erhalten. Außen sehen sie alle immer anders aus.
Und es sind nur 10 Zahlen, um die es geht.
Wenn wir annehmen, dass sie immer an der gleichen Stelle auftauchen (ja, da haben wir wieder den Punkt mit den Masken ;) ), wir brauchen 7 oder 8 Stück davon, dann könnte es völlig ausreichen, jeweils das Shape mit den 10 in Frage kommenden zu vergleichen.
D.h. (vereinfacht):
0. Mustermasken erstellen
1. Bild wird mit deinen Masken zerlegt (für jede Zahl auf dem Rädchen 1 Maske...)
2. Wir bilden die Masken von dem Inhalt
3. Wir verwenden nur die größte Maske (evtl. hilft uns das, wenn die Zahl am wegdrehen ist)
4. Wir testen die größte Maske gegen die 10 in Frage kommenden
5. Wir verwenden die Zahl, deren Wahrscheinlichkeit am größten ist.
6. Wir nehmen uns die nächste Maske vor...
7. Wenn wir alle 7 (oder 8) durch haben, schicken wir ca. 9 Readings an fhem:
Ermittelte Zahl
Wahrscheinlichkeit für erste, zweite, .... letzte Ziffer
Das könnte reichen :)
Einen Punkt haben wir noch, wir müssen dafür Sorge tragen, dass die Musterbilder und die später kommenden Bilder ziemlich genau die gleiche Größe haben. Will sagen:
Die Masken müssen geich groß sein sonst wird das in die Hose gehen.
Ich kann mal versuchen, das mit Arial Narrow (fett) zu probieren, das sieht nicht unähnlich aus.
Würde aber viele Bilder von dir vorziehen :)
Ich setzte mich heute abend nach der Arbeit dran und lasse Wasser laufen :)
Wenn du noch nicht am pritschln bist, warte noch.
Ich habe die letzten Tage verschiedene Kameras und Befestigungsmöglichkeiten derselbigen getestet.
Leider ohne Erfolg, mit meiner Konstellation finde ich keine praktikable Lösung um ein halbwegs akzeptables Bild von meinen Wasserzählern zu generieren.
Die Cam müßte mitten im Flur meiner Wohnung stehen, oder im Schrank mit einem riesen Loch in der Rückwand und bei jedem öffnen der Türen ist die Position verrutscht, usw.
Ganz zu schweigen von der Beleuchtung, das ist ein Problem für sich.
Eine Idee wäre vielleicht noch jeweils eine Kamera mit Macro Linse und eigener Beleuchtung, oder sowas in der Art.
Alles in allem, wenn ich dann den Aufwand und die Kosten sehe, dann kommen wohl eher folgende Projekte in Frage:
http://forum.fhem.de/index.php?topic=18038.0 (http://forum.fhem.de/index.php?topic=18038.0)
http://www.fastforward.ag (http://www.fastforward.ag)
http://volkszaehler.org (http://volkszaehler.org)
Ein großes Dankeschön gilt aber Rince für seine Bemühungen.
Gerne. Kam ja leider noch nix OCR artiges raus :(
Wie ist denn mittlerweile der aktuelle Stand? :)
Zitat von: Rince am 06 August 2015, 21:04:16
Hm, ich glaube nicht.
Ich hab für meine Gesichtserkennung für fhem das Python Skript durch nen Compiler gejagt. Da kamen glaube ich satte 30MB raus, bis es unabhängig war.
Hallo Rince,
bin gerade über den Thread gestolpert, ich würde gerne eine Gesichtserkennung a la Netatmo Welcome mit ein paar vorhandenen IP Kameras realisieren. Bei mir läuft fhem auf einem i3 NUC unter Debian, auf dem würde ich auch OpenCV installieren.
Könntest Du grob beschreiben wie Du das gemacht hast?
Gruß
Sven
Oh, sorry. nicht gesehen.
Bitte schreibt mir ne PN wenn ich nicht reagiere :)
Die Installation hatte ich im Wiki beschrieben. Hat das nicht funktioniert? Link steht im 1. Post.
Für den Compiler um ne Windows EXE zu bekommen, muss ich nachsehen.
Ich will das Skript auf MQTT umstellen, dann sehe ich mir das gerne wieder an :)
Wollte mich auch mal für diesen Thread bedanken.
Hab damit endlich die Auswertung meiner Fußbodenheizung hinbekommen.
Bisher hab ich schon länger mit mir gerungen, ob ich mir Homematik als weiteres Funksystem dafür anbinden soll (nutze bisher hauptsächlich ZWave) und dann den Aufwand/ die Kosten einer solchen Installation auf mich nehmen will:
http://tips-und-mehr.de/projekt-warmwasser-fussbodenheizung-heizkreisverteiler-schaltzustaende-der-stelltriebe-mit-homematic-visualisieren/
Dank OpenCV konnte ich das nun mit einer gebrauchten IP-Webcam von Ebay Kleinanzeigen für 20€ erledigen, ohne einen Elektriker mit ins Boot holen zu müssen. :)
Mein Glück hierbei war, dass wir einen Klemmkasten mit LEDs im Fußbodenverteiler haben, dessen LEDs ich auswerten kann.
Dadurch kann ich jetzt sehr gut visualisieren wie lange die einzelnen Heizkreise geöffnet oder geschlossen sind.
Mithilfe dieser Anzeige kann man Dinge wie benötigte Vorlauftemperatur oder Pumpenabschaltung nach Außentemperatur einfach optimieren,
da man sieht ob die Heizung am Anschlag ist (Ventile praktisch Dauerhaft offen, oder fast immer zu).
Dann kann die Heizsaison nun kommen. ;)