Background: The Old Process
Until now, the solar systems were planned with the help of a desktop application, which is only available for Windows, has an outdated GUI as well as high maintenance and license costs. Furthermore, there are no interfaces (both for automatic reading of customer information as well as for passing on new information) and the usability is not optimized for the use case (many unnecessary clicks/steps).
For cases where the roof angles and roof dimensions are unknown to the customer, the application has an approximative triangulation method, which estimates the roof angle using the roof circumference drawn on a photo and the input of a reference length (e.g. roof width, roof length). However, this method often turned out to be incorrect. Since the application is not open source and there is no transparent description of the calculation method, this error can not be sufficiently analyzed and the method can not be improved.
The Old Process in Detail
In order to prepare a quotation, our client first needs various information from the customer, such as the length and width of the roof, roof orientation, etc. Usually, parts of this data are unknown to the homeowner and an employee ('Chris') has to find the information elsewhere.
Chris creates a new project in a desktop solar software and asks the homeowner for a photo of the roof.
He then enters this photo and the customer's data into the solar software.
Now the roof circumference and the contours of each obstacle on the roof must be drawn in manually. Dormers are treated separately since these usually take up more roof surface area on the photo than in reality.
Now Chris adds a reference length (e.g. the length or width of the roof). Therefore he opens the browser and enters the customer address e.g. at Google Maps. If the quality of the satellite image is good enough, Chris counts the roof tile on the roof and the reference length is roughly determined. Otherwise, he has to switch to another service.
After entering the reference length, the program estimates the roof angle and the resulting roof area. This often leads to inaccuracies. Since the underlying calculation method is not transparent, a subsequent improvement is hardly possible.
After a few further steps, Chris saves the desired solar panel visualization and transfers it (including further offer-relevant data) to the software so that a final offer can be created.
Our Solution
Available input: address and roof photo of the customer.
Desired output: roof dimensions, roof angle, southern orientation, number of solar panels, panel visualization on the customer's roof picture.
The biggest challenges we were able to identify before the project started, were the following:
recognition of small obstacles (chimney, skylight, antenna, etc.)
different input quality (e.g. shading)
estimating (3-dimensional) roof dimensions (length, width, roof angle)
handling of special roof shapes
separation of different roof sides
interfaces (man-machine, machine-machine)
Technologies Used
Backend: Python, Tensorflow, PyTorch, SciPy, NumPy, scikit-learn, scikit-image, OpenCV, Flask
Frontend: JavaScript, Angular5, Three.js, Fabric.js, Sass
Infrastructure: GCloud, Docker, Git
In the following, we present solutions to some selected problems.
1. Segmentation of the roof
We segment the roof and the obstacles on it by means of neural networks both on the satellite photo and on the customer photo. The architecture of these networks is mainly based on U-Nets, a specific form of a convolutional neural network, which currently provides the best performance for such problems.