Skip to content

🦓 AI-powered OpenStreetMap tool for importing zebra crossings

License

Notifications You must be signed in to change notification settings

Zaczero/osm-yolo-crossings

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

osm-yolo-crossings

Python version Project license Support my work GitHub repo stars

🦓 AI-powered OpenStreetMap tool for importing zebra crossings.

Project logo with YOLO text

💡 How it works

  1. Query OSM: Finds populated areas on OpenStreetMap (OSM).
  2. Fetch Imagery: Downloads orthophoto imagery for all roads in the query area.
  3. YOLOv8 Model: Utilizes YOLOv8 for regions of interest detection.
  4. MobileNetV3 Model: Applies binary classification to validate detected regions.
  5. Data Integrity: Checks against historical OSM data to avoid duplicates.
  6. OSM Import: Automatically imports new crossings to OSM.

🛠️ Local Development

Prerequisites

Before diving into development, make sure you have installed the ❄️ Nix package manager. Nix ensures seamless dependency management and a reproducible environment.

⠿ CUDA (NVIDIA GPU-mode)

Ideal for model development and training. The application's primary functionality is optimized for CPU-mode.

TensorRT, a proprietary high-performance deep learning inference library by NVIDIA, is used by default. It can be safely disabled by commenting out cudaPackages.tensorrt in cuda-shell.nix.

# Install dependencies and packages
nix-shell cuda-shell.nix

# Configure .env file
cp .env.example .env

# Start up the database
dev-start

# Done, now you can run the application
python main.py

⊡ CPU-mode

This mode is recommended for typical usage and production runs.

# Install dependencies and packages
nix-shell

# Configure .env file
cp .env.example .env

# Start up the database
dev-start

# Done, now you can run the application
python main.py

📦 Deployment

Here is an example Docker Compose configuration. Note that you will need to build the Docker image first with nix-build (see default.nix for options).

version: "3"
services:
  db:
    image: mongo
    command: mongod --bind_ip_all
    restart: unless-stopped

    volumes:
      - ./data/db:/data/db

  app:
    image: osm-yolo-crossings
    restart: unless-stopped

    environment:
      CPU_COUNT: 16
      MAX_TASKS_PER_CHILD: 300
      OSM_USERNAME: CHANGEME
      OSM_PASSWORD: CHANGEME
      MONGO_URL: mongodb://db:27017

    volumes:
      - ./data/app:/app/data
      - ./data/keras:/.keras

🌟 Special Thanks

Special thanks to syntex for contributing to the dataset.

⚓ References

Community discussion

https://community.openstreetmap.org/t/automatyczne-znakowanie-przejsc-dla-pieszych-oraz-przejazdow-rowerowych/101590/

Data usage terms

https://www.geoportal.gov.pl/regulamin

https://wiki.openstreetmap.org/wiki/Pl:Geoportal.gov.pl

Footer

Contact me

https://monicz.dev/#get-in-touch

Support my work

https://monicz.dev/#support-my-work

License

This project is licensed under the GNU Affero General Public License v3.0.

The complete license text can be accessed in the repository at LICENSE.