Skip to content

Capsoide/HACKATHON-MACERATA

Repository files navigation

Accessibility Analysis API

A FastAPI-based service that analyzes street accessibility using OpenStreetMap data. The system calculates accessibility scores for wheelchair users and their companions based on various street features.

Features

  • Accessibility Scoring: Calculates two scores:
    • singular_rate: Accessibility score for wheelchair users alone
    • accompany_rate: Accessibility score for wheelchair users with companions
    • reason: The reason of the lowering of the score, this will allow the final user for further considerations on the route.
  • Comprehensive Analysis: Evaluates multiple factors:
    • Street incline (slope)
    • Path width
    • Surface type and quality
    • Presence of barriers and steps
    • Sidewalk availability
    • Curb types

API Endpoints

POST /calculate_accessibility_rate

Calculates accessibility scores for a given location.

Request Body:

{
  "latitude": 41.8986,
  "longitude": 12.4769,
  "other_user_details": "user cannot go on stairs"
}

Response:

{
  "singular_rate": 0,
  "accompany_rate": 0,
  "reason": "Stairs"
}

Score Interpretation:

  • 1.0: Perfect accessibility
  • 0.0: Complete barrier (impassable)
  • Values between: Relative accessibility (higher = better)

Technical Architecture

Components

  1. extract_data.py: Fetches OSM data for a given location

    • Queries OpenStreetMap Overpass API
    • Extracts relevant accessibility features
    • Returns structured JSON data
  2. calculate_rate.py: Core scoring algorithm

    • Implements accessibility rules and scoring logic
    • Returns Pydantic model with both scores
    • Handles edge cases and blocking conditions
  3. endpoint.py: FastAPI server

    • REST API endpoint for accessibility analysis
    • Input validation using Pydantic models
    • Error handling and response formatting
  4. test.py: Test client

    • Simple script to test the API
    • Error handling for connection issues

Data Flow

Client → FastAPI → extract_data.py → OSM API
                     ↓
           calculate_rate.py → Scoring Logic
                     ↓
             FastAPI → JSON Response

Installation

  1. Clone the repository:

    git clone https://github.com/yourusername/handicapai.git
    cd handicapai
  2. Install dependencies:

    pip install -r requirements.txt
  3. Run the server:

    uvicorn endpoint:app --reload
  4. Test the API:

    python test.py

Usage Examples

Using curl:

curl -X POST http://127.0.0.1:8000/calculate_accessibility_rate \
  -H "Content-Type: application/json" \
  -d '{"latitude": 41.8986, "longitude": 12.4769}'

Using Python requests:

import requests

response = requests.post(
    "http://127.0.0.1:8000/calculate_accessibility_rate",
    json={"latitude": 41.8986, "longitude": 12.4769}
)
result = response.json()
print(f"Wheelchair accessibility: {result['singular_rate']}")
print(f"With companion: {result['accompany_rate']}")

Scoring Methodology

Absolute Blockers (Score = 0.0)

  • Presence of steps
  • Physical barriers
  • Missing sidewalks
  • Sand/unpaved surfaces
  • Very bad surface quality

Individual Blockers (Only affects singular_rate)

  • Raised curbs
  • Incline > 3%
  • Width < 0.9m

Scoring Factors

  • Incline: Linear scoring based on slope percentage
  • Width: Different thresholds for solo vs. accompanied travel
  • Surface: Quality-based scoring (asphalt = 1.0, sand = 0.0)
  • Smoothness: Surface regularity scoring

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages