This project requires analysis of aerial imagery of a major metropolitan city and surrounding area to classify ground by type, looking particularly for water demand, and water absorption / runoff. Our data set consists of a number of images taken from overhead / aerial drones. There are two use cases your solution must solve for.
Use case 1: swimming pools
For each image we provide you, your solution must identify the unique number of swimming pools that are contained within this tile. It is desirable if you can also approximate the total area of the swimming pools within the image. It is highly desired that your solution can differentiate swimming pools as distinct from other open water areas such as lakes, rivers etc. It is highly desired your solution outputs a copy of each input image with identified swimming pools highlighted with a coloured border around the contour of the swimming pool, for verification purposes. We expect an accuracy rate of >= 95% compliance with human verification of number of swimming pools.
Use case 2: terrain types to determine water absorption
Each image in the data set will be processed as follows: you will need to subdivided it into smaller tiles, with the subdivision size controlled by a parameter in your solution (e.g. subdivide into a 5 x 5 grid, or subdivide into a 20 x 10 grid, for instance). For each tile within the image, your solution must determine whether it is predominantly natural or man-made. Natural would include: trees, bushes, grass, dirt, agriculture (fields) - anything natural and organic. Man-made would include "hard" surfaces, i.e. roads, footpaths, houses / roofs, industrial buildings. Most tiles will contain both natural and hard textures; we only need you to determine which is the most present within the tile (e.g. >= 50% coverage by area). We will provide you with a training set where some sample tiles have been subdivided and annotated by a human into natural or hard categories. We accept there will be some approximation or inaccuracy in the determination, however we will compare the output of your solution to a test data set and compare results between the human and your script. An acceptable accuracy rate is agreement with the human markup >= 90% of the time.
Your solution should ignore areas of ocean, if present in the images. Most images will not contain ocean.
Your solution should accept a batch of images and output a CSV file that states the original input image filename, index of X and Y offsets for the subdivided tiles, and which category the tile belongs to (ocean, natural, hard). A second CSV file should be produced that states the original input image filename, the number of swimming pools identified in the image, and optionally an approximation of total area of the swimming pools. Area can be calculated based upon pixel dimensions (e.g. 10 pixels by 20 pixels would have an area of "200" - you do not need to calculate what this area represents in real world terms, as the level of zoom of the input tiles may vary).
We would be interested in a discussion of your recommended approach, but we would prefer your solution to be developed in Python 3.7 or higher and ideally uses OpenCV for image analysis. Code should be clear with sufficient (not exhaustive) documentation, in English. A requirements file for installation of Python libraries via pip should be included in your solution.
Please provide your final and fixed price for this project., and expected duration to complete. We hope this work can be completed within one month. Successful completion of the project will be determined by a working solution that meets an accuracy target of 95% or higher for swimming pools, and 90% or higher compliance with human markup of tiles for terrain types, as described above. Failure to deliver with the stated success rates or on the agreed time will result in an unsuccessful project and will forfeit the associated payment