Home

Awesome

Generative Street Addresses from Satellite Imagery

This repo contains the code for creating generative street addresses from OSM input, as presented in our paper at the CVPR - EarthVision 2017. The naming procedure inputs .osm files, or geotiffs; and outputs new maps with hierarchical and linear addressing scheme.

News and Resources

Requirements

  1. Install OpenCV => 2.4.8 C++ bindings for road_segmentor module.

Useful links for OpenCV installation:

  1. Install python dependencies (Python 2.7).

pip install -r requirements.txt

Building Robocodes

  1. Clone the repo.

$ git clone https://github.com/facebookresearch/street-addresses.git

  1. Change directory to ${ROBOCODE}/road_segmentor and build. (Cmake => 2.8)
$ cmake .
$ make

Generated binary will be stored in ${ROBOCODE}/road_segmentor/bin

  1. Run the following command to change the library paths.

$ install_name_tool -add_rpath /<open_cv_lib_path>/ bin/RoadConnectionLabelling

  1. Check the permissions of the main python scripts run_end2end.py and gen_robocode.py.

Examples

You can check additional functionalities with $ ./run_end2end.py --help. Below are some examples for easy robocode generation.

OSM Example: Running the script when the input is an OSM file. Creates an output osm file and additional query structure in the specified directory.

$ ./run_end2end.py \
 --xml ${ROBOCODE}/example/nashik.osm \
--out_dir /<output_dir>/ \
--roadSeg_bin ${ROBOCODE}/road_segmentor/bin/RoadConnectionLabelling 

Additional OSM files can be exported from OpenStreetMap: https://www.openstreetmap.org

TIFF Example: Running the script when the input is a GeoTiff file containing binary road masks. Creates an output osm file and additional query structure in the specified directory.

$ ./run_end2end.py \
--input_tiff ${ROBOCODE}/example/nashik.tif \
--out_dir /<output_dir>/ \
--roadSeg_bin ${ROBOCODE}/road_segmentor/bin/RoadConnectionLabelling

Geocoding Example: Generating Robocode when lat/lon is input.

$ ./gen_robocode.py \
-path /<input_dir>/ \
-lat 20.0226957656 \
-lon 73.7834041609 \
-city NASHIK

Adress: 388A.NA104.NASHIK

PS: your lat and lon input should be within range of (minlat, maxlat) and (minlon,maxlon) respectively as per your input OSM or Geotiff input.

Reverse Geocoding Example: Generating lat/lon when Robocode is input.

$ ./gen_robocode.py \
-path /<input_dir>/ \
-meter 374 \
-block B \
-street NA104 \
-city NASHIK

Lat, Lon: 20.0230511115, 73.7822889019

References

Please cite our CVPR 2017 - EarthVision paper or IJGI paper below when using the code.

@inproceedings{demir2017robocodes,
  title={Robocodes: Towards Generative Street Addresses from Satellite Imagery},
  author={Demir, {\.I}lke and Hughes, Forest and Raj, Aman and Tsourides, Kleovoulos and Ravichandran, Divyaa and Murthy, Suryanarayana and Dhruv, Kaunil and Garg, Sanyam and Malhotra, Jatin and Doo, Barrett and Kermani, Grace and Raskar, Ramesh},
  booktitle={Computer Vision and Pattern Recognition Workshops (CVPRW), 2017 IEEE Conference on},
  pages={1486--1495},
  year={2017},
  organization={IEEE}
}
@article{demir2018IJGI,
  title={Generative Street Addresses from Satellite Imagery},
  author={Demir, {\.I}lke and Hughes, Forest and Raj, Aman and Dhruv, Kaunil and Muddala, Suryanarayana Murthy and Garg, Sanyam and Doo, Barrett and Raskar, Ramesh},
  journal={ISPRS International Journal of Geo-Information},
  volume={7},
  number={3},
  pages={84},
  year={2018},
  publisher={Multidisciplinary Digital Publishing Institute}
}

License

Robocodes project is licenced under CC-by-NC, see the LICENSE file for details.