Hintergrund: Der Alte Prozess
Bisher wurden die Solaranlagen mit Hilfe einer Desktop-Applikation geplant, welche nur für Windows erhältlich ist und eine veraltete GUI sowie hohe Wartungs- und Lizenzkosten mit sich bringt. Ferner fehlen Schnittstellen (sowohl zum automatischen Einlesen von Kundeninformation als auch zur Weitergabe neuer Informationen) und die Usability ist nicht für den Anwendungsfall optimiert (viele unnötige Klicks/Schritte).
Für Fälle, in denen die Dachwinkel und Dachmaße des Interessenten unbekannt sind, verfügt die Applikation über eine approximative Triangulationsmethode, welche den Dachwinkel mit Hilfe des auf einem Foto eingezeichneten Dachumfangs und der Eingabe einer Referenzlänge (z.B. Dachbreite, Dachlänge) schätzt. Oftmals stellt sich dieses Verfahren jedoch als fehlerhaft heraus. Da keine transparente Beschreibung der Berechnung existiert und es sich um eine proprietäre Applikation handelt, kann dieser Fehler nicht hinreichend analysiert und die Methode nicht verbessert werden.
Der alte Prozess im Detail
Um ein Angebot erstellen zu können, benötigt der Auftraggeber zunächst diverse Informationen des Kunden, wie z.B. die Länge und Breite des Daches, Dachausrichtung etc. Meist sind Teile dieser Daten dem Hausbesitzer unbekannt und ein Mitarbeiter muss die Informationen anderweitig herausfinden.
Zunächst legt der Mitarbeiter ein neues Projekt in einer Desktop-Solarsoftware an und bittet den Hausbesitzer um ein Foto des Daches.
Der Mitarbeiter überträgt die Stammdaten sowie das Dachfoto des Kunden in die Solarsoftware.
Nun müssen der Dachumfang sowie die Umrisse jedes Hindernisses auf dem Dach händisch eingezeichnet werden. Dachgauben werden gesondert behandelt, da diese auf dem Foto meist mehr Dachfläche einnehmen als in der Realität.
Nun fügt der Mitarbeiter eine Referenzlänge hinzu (z.B. die Länge oder Breite des Daches). Dafür öffnet er den Browser und gibt z.B. bei Google Maps die Kundenadresse ein. Ist die Qualität des Satellitenbildes gut genug, zählt der Mitarbeiter die Ziegel des Daches und bestimmt so grob die Referenzlänge. Sonst muss er auf einen anderen Service ausweichen.
Nach Eingabe der Referenzlänge schätzt das Programm den Dachwinkel und die resultierende Dachfläche. Hierbei kommt es häufig zu Ungenauigkeiten. Da die zugrundeliegende Berechnungsmethode nicht transparent offen liegt, ist eine nachträgliche Verbesserung kaum möglich.
Nach einigen weiteren Schritte speichert der Mitarbeiter die gewünschte Solarpanel-Visualisierung und überträgt diese (inkl. weiterer angebotsrelevanter Daten) in die Software, sodass ein endgültiges Angebot erstellt werden kann.
Unsere Lösung
Zur Verfügung stehender Input: Adresse sowie Dachfoto des Kunden.
Gewünschter Output: Dachmaße, Dachwinkel, südliche Ausrichtung, Anzahl der passenden Solarpanele, Solarpanel-Visualisierung auf dem Dachfoto des Kunden.
Die größten Herausforderungen, die wir vor Projektbeginn identifizieren konnten, waren die Folgenden:
Erkennen von kleinen Hindernissen (Kamin, Dachfenster, Antenne etc.)
Unterschiedliche Inputqualität (z.B. Verschattung)
Schätzen von (3-dimensionalen) Dachmaßen (Länge, Breite, Dachwinkel)
Umgang mit Sonder-Dachformen
Unterteilen in Dachhälften
Schnittstellen (Mensch-Maschine, Maschine-Maschine)
Eingesetzte Technologien
Backend: Python, Tensorflow, PyTorch, SciPy, NumPy, scikit-learn, scikit-image, OpenCV, Flask
Frontend: JavaScript, Angular5, Three.js, Fabric.js, Sass
Infrastruktur: GCloud, Docker, Git
Wir präsentieren im Folgenden Lösungen einiger ausgesuchter Teilprobleme.
1. Segmentierung des Daches
Sowohl auf dem Satelliten- als auch auf dem Kundenfoto segmentieren wir das Dach und die auf diesem befindlichen Hindernisse mittels neuronaler Netze. Die Architektur dieser Netze orientieren sich vor allen Dingen an U-Nets, d.h. Convolutional Neural Networks, welche für derartige Problem derzeit die beste Performance liefern.
Für das Training der Netze haben wir selbst zahlreiche Labels generiert, d.h. Umrisse von Dächern und Hindernissen markiert. Hierbei war es wichtig, das Labelingschema an das Problem anzupassen, um etwa auch kleine Hindernisse und semantische Strukturen lernen und schließlich erkennen zu können.
Das Training hat ein umfangreiches Finetuning erfordert (z.B. Identifikation der besten Lossfunktion, Datenaugmentierung, Hyperparameteroptimierung etc.) - für Details sei auf unseren Blog verwiesen.
Bei der Segmentierung der Kundenfotos haben wir mittels Transfer-Learning durch ein auf ImageNet vortrainiertes neuronales Netz deutliche Verbesserungen erreichen können. Die zwei unteren Bilder zeigen exemplarisch die beeindruckenden Fähigkeiten des von uns trainierten neuronalen Netzes semantische Strukturen zu erkennen.