Major changes: - Organized Python v1 implementation into v1/ subdirectory - Created Rust workspace with 9 modular crates: - wifi-densepose-core: Core types, traits, errors - wifi-densepose-signal: CSI processing, phase sanitization, FFT - wifi-densepose-nn: Neural network inference (ONNX/Candle/tch) - wifi-densepose-api: Axum-based REST/WebSocket API - wifi-densepose-db: SQLx database layer - wifi-densepose-config: Configuration management - wifi-densepose-hardware: Hardware abstraction - wifi-densepose-wasm: WebAssembly bindings - wifi-densepose-cli: Command-line interface Documentation: - ADR-001: Workspace structure - ADR-002: Signal processing library selection - ADR-003: Neural network inference strategy - DDD domain model with bounded contexts Testing: - 69 tests passing across all crates - Signal processing: 45 tests - Neural networks: 21 tests - Core: 3 doc tests Performance targets: - 10x faster CSI processing (~0.5ms vs ~5ms) - 5x lower memory usage (~100MB vs ~500MB) - WASM support for browser deployment
931 lines
17 KiB
Markdown
931 lines
17 KiB
Markdown
# WiFi-DensePose API Reference
|
|
|
|
## Table of Contents
|
|
|
|
1. [Overview](#overview)
|
|
2. [Authentication](#authentication)
|
|
3. [Base URL and Versioning](#base-url-and-versioning)
|
|
4. [Request/Response Format](#requestresponse-format)
|
|
5. [Error Handling](#error-handling)
|
|
6. [Rate Limiting](#rate-limiting)
|
|
7. [Pose Estimation API](#pose-estimation-api)
|
|
8. [System Management API](#system-management-api)
|
|
9. [Health Check API](#health-check-api)
|
|
10. [WebSocket API](#websocket-api)
|
|
11. [Data Models](#data-models)
|
|
12. [SDK Examples](#sdk-examples)
|
|
|
|
## Overview
|
|
|
|
The WiFi-DensePose API provides comprehensive access to WiFi-based human pose estimation capabilities. The API follows REST principles and supports both synchronous HTTP requests and real-time WebSocket connections.
|
|
|
|
### Key Features
|
|
|
|
- **RESTful Design**: Standard HTTP methods and status codes
|
|
- **Real-time Streaming**: WebSocket support for live pose data
|
|
- **Authentication**: JWT-based authentication with role-based access
|
|
- **Rate Limiting**: Configurable rate limits to prevent abuse
|
|
- **Comprehensive Documentation**: OpenAPI/Swagger documentation
|
|
- **Error Handling**: Detailed error responses with actionable messages
|
|
|
|
### API Capabilities
|
|
|
|
- Real-time pose estimation from WiFi CSI data
|
|
- Historical pose data retrieval and analysis
|
|
- System health monitoring and diagnostics
|
|
- Multi-zone occupancy tracking
|
|
- Activity recognition and analytics
|
|
- System configuration and calibration
|
|
|
|
## Authentication
|
|
|
|
### JWT Authentication
|
|
|
|
The API uses JSON Web Tokens (JWT) for authentication. Include the token in the `Authorization` header:
|
|
|
|
```http
|
|
Authorization: Bearer <your-jwt-token>
|
|
```
|
|
|
|
### Obtaining a Token
|
|
|
|
```bash
|
|
# Login to get JWT token
|
|
curl -X POST http://localhost:8000/api/v1/auth/login \
|
|
-H "Content-Type: application/json" \
|
|
-d '{
|
|
"username": "your-username",
|
|
"password": "your-password"
|
|
}'
|
|
```
|
|
|
|
**Response:**
|
|
```json
|
|
{
|
|
"access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
|
|
"token_type": "bearer",
|
|
"expires_in": 86400
|
|
}
|
|
```
|
|
|
|
### Token Refresh
|
|
|
|
```bash
|
|
# Refresh expired token
|
|
curl -X POST http://localhost:8000/api/v1/auth/refresh \
|
|
-H "Authorization: Bearer <your-refresh-token>"
|
|
```
|
|
|
|
### Public Endpoints
|
|
|
|
Some endpoints are publicly accessible without authentication:
|
|
- `GET /api/v1/health/*` - Health check endpoints
|
|
- `GET /api/v1/version` - Version information
|
|
- `GET /docs` - API documentation
|
|
|
|
## Base URL and Versioning
|
|
|
|
### Base URL
|
|
```
|
|
http://localhost:8000/api/v1
|
|
```
|
|
|
|
### API Versioning
|
|
The API uses URL path versioning. Current version is `v1`.
|
|
|
|
### Content Types
|
|
- **Request**: `application/json`
|
|
- **Response**: `application/json`
|
|
- **WebSocket**: `application/json` messages
|
|
|
|
## Request/Response Format
|
|
|
|
### Standard Response Format
|
|
|
|
```json
|
|
{
|
|
"data": {},
|
|
"timestamp": "2025-01-07T10:00:00Z",
|
|
"status": "success"
|
|
}
|
|
```
|
|
|
|
### Error Response Format
|
|
|
|
```json
|
|
{
|
|
"error": {
|
|
"code": "VALIDATION_ERROR",
|
|
"message": "Invalid request parameters",
|
|
"details": {
|
|
"field": "confidence_threshold",
|
|
"issue": "Value must be between 0.0 and 1.0"
|
|
}
|
|
},
|
|
"timestamp": "2025-01-07T10:00:00Z",
|
|
"status": "error"
|
|
}
|
|
```
|
|
|
|
## Error Handling
|
|
|
|
### HTTP Status Codes
|
|
|
|
| Code | Description |
|
|
|------|-------------|
|
|
| 200 | Success |
|
|
| 201 | Created |
|
|
| 400 | Bad Request |
|
|
| 401 | Unauthorized |
|
|
| 403 | Forbidden |
|
|
| 404 | Not Found |
|
|
| 409 | Conflict |
|
|
| 422 | Validation Error |
|
|
| 429 | Rate Limited |
|
|
| 500 | Internal Server Error |
|
|
| 503 | Service Unavailable |
|
|
|
|
### Error Codes
|
|
|
|
| Code | Description |
|
|
|------|-------------|
|
|
| `VALIDATION_ERROR` | Request validation failed |
|
|
| `AUTHENTICATION_ERROR` | Authentication failed |
|
|
| `AUTHORIZATION_ERROR` | Insufficient permissions |
|
|
| `RESOURCE_NOT_FOUND` | Requested resource not found |
|
|
| `RATE_LIMIT_EXCEEDED` | Rate limit exceeded |
|
|
| `HARDWARE_ERROR` | Hardware communication error |
|
|
| `PROCESSING_ERROR` | Pose processing error |
|
|
| `CALIBRATION_ERROR` | System calibration error |
|
|
|
|
## Rate Limiting
|
|
|
|
### Default Limits
|
|
- **Authenticated users**: 1000 requests per hour
|
|
- **Anonymous users**: 100 requests per hour
|
|
- **WebSocket connections**: 10 concurrent per user
|
|
|
|
### Rate Limit Headers
|
|
```http
|
|
X-RateLimit-Limit: 1000
|
|
X-RateLimit-Remaining: 999
|
|
X-RateLimit-Reset: 1641556800
|
|
```
|
|
|
|
### Rate Limit Response
|
|
```json
|
|
{
|
|
"error": {
|
|
"code": "RATE_LIMIT_EXCEEDED",
|
|
"message": "Rate limit exceeded. Try again in 60 seconds."
|
|
}
|
|
}
|
|
```
|
|
|
|
## Pose Estimation API
|
|
|
|
### Get Current Pose Estimation
|
|
|
|
Get real-time pose estimation from WiFi signals.
|
|
|
|
```http
|
|
GET /api/v1/pose/current
|
|
```
|
|
|
|
**Query Parameters:**
|
|
- `zone_ids` (array, optional): Specific zones to analyze
|
|
- `confidence_threshold` (float, optional): Minimum confidence (0.0-1.0)
|
|
- `max_persons` (integer, optional): Maximum persons to detect (1-50)
|
|
- `include_keypoints` (boolean, optional): Include keypoint data (default: true)
|
|
- `include_segmentation` (boolean, optional): Include segmentation masks (default: false)
|
|
|
|
**Example Request:**
|
|
```bash
|
|
curl "http://localhost:8000/api/v1/pose/current?confidence_threshold=0.7&max_persons=5" \
|
|
-H "Authorization: Bearer <token>"
|
|
```
|
|
|
|
**Response:**
|
|
```json
|
|
{
|
|
"timestamp": "2025-01-07T10:00:00Z",
|
|
"frame_id": "frame_12345",
|
|
"persons": [
|
|
{
|
|
"person_id": "person_001",
|
|
"confidence": 0.85,
|
|
"bounding_box": {
|
|
"x": 100,
|
|
"y": 150,
|
|
"width": 80,
|
|
"height": 180
|
|
},
|
|
"keypoints": [
|
|
{
|
|
"name": "nose",
|
|
"x": 140,
|
|
"y": 160,
|
|
"confidence": 0.9
|
|
}
|
|
],
|
|
"zone_id": "zone_001",
|
|
"activity": "standing",
|
|
"timestamp": "2025-01-07T10:00:00Z"
|
|
}
|
|
],
|
|
"zone_summary": {
|
|
"zone_001": 1,
|
|
"zone_002": 0
|
|
},
|
|
"processing_time_ms": 45.2
|
|
}
|
|
```
|
|
|
|
### Analyze Pose Data
|
|
|
|
Trigger pose analysis with custom parameters.
|
|
|
|
```http
|
|
POST /api/v1/pose/analyze
|
|
```
|
|
|
|
**Request Body:**
|
|
```json
|
|
{
|
|
"zone_ids": ["zone_001", "zone_002"],
|
|
"confidence_threshold": 0.8,
|
|
"max_persons": 10,
|
|
"include_keypoints": true,
|
|
"include_segmentation": false
|
|
}
|
|
```
|
|
|
|
**Response:** Same format as current pose estimation.
|
|
|
|
### Get Zone Occupancy
|
|
|
|
Get current occupancy for a specific zone.
|
|
|
|
```http
|
|
GET /api/v1/pose/zones/{zone_id}/occupancy
|
|
```
|
|
|
|
**Path Parameters:**
|
|
- `zone_id` (string): Zone identifier
|
|
|
|
**Example Request:**
|
|
```bash
|
|
curl "http://localhost:8000/api/v1/pose/zones/zone_001/occupancy" \
|
|
-H "Authorization: Bearer <token>"
|
|
```
|
|
|
|
**Response:**
|
|
```json
|
|
{
|
|
"zone_id": "zone_001",
|
|
"current_occupancy": 3,
|
|
"max_occupancy": 10,
|
|
"persons": [
|
|
{
|
|
"person_id": "person_001",
|
|
"confidence": 0.85,
|
|
"activity": "standing"
|
|
}
|
|
],
|
|
"timestamp": "2025-01-07T10:00:00Z"
|
|
}
|
|
```
|
|
|
|
### Get Zones Summary
|
|
|
|
Get occupancy summary for all zones.
|
|
|
|
```http
|
|
GET /api/v1/pose/zones/summary
|
|
```
|
|
|
|
**Response:**
|
|
```json
|
|
{
|
|
"timestamp": "2025-01-07T10:00:00Z",
|
|
"total_persons": 5,
|
|
"zones": {
|
|
"zone_001": {
|
|
"occupancy": 3,
|
|
"max_occupancy": 10,
|
|
"status": "normal"
|
|
},
|
|
"zone_002": {
|
|
"occupancy": 2,
|
|
"max_occupancy": 8,
|
|
"status": "normal"
|
|
}
|
|
},
|
|
"active_zones": 2
|
|
}
|
|
```
|
|
|
|
### Get Historical Data
|
|
|
|
Retrieve historical pose estimation data.
|
|
|
|
```http
|
|
POST /api/v1/pose/historical
|
|
```
|
|
|
|
**Request Body:**
|
|
```json
|
|
{
|
|
"start_time": "2025-01-07T00:00:00Z",
|
|
"end_time": "2025-01-07T23:59:59Z",
|
|
"zone_ids": ["zone_001"],
|
|
"aggregation_interval": 300,
|
|
"include_raw_data": false
|
|
}
|
|
```
|
|
|
|
**Response:**
|
|
```json
|
|
{
|
|
"query": {
|
|
"start_time": "2025-01-07T00:00:00Z",
|
|
"end_time": "2025-01-07T23:59:59Z",
|
|
"zone_ids": ["zone_001"],
|
|
"aggregation_interval": 300
|
|
},
|
|
"data": [
|
|
{
|
|
"timestamp": "2025-01-07T00:00:00Z",
|
|
"average_occupancy": 2.5,
|
|
"max_occupancy": 5,
|
|
"total_detections": 150
|
|
}
|
|
],
|
|
"total_records": 288
|
|
}
|
|
```
|
|
|
|
### Get Detected Activities
|
|
|
|
Get recently detected activities.
|
|
|
|
```http
|
|
GET /api/v1/pose/activities
|
|
```
|
|
|
|
**Query Parameters:**
|
|
- `zone_id` (string, optional): Filter by zone
|
|
- `limit` (integer, optional): Maximum activities (1-100, default: 10)
|
|
|
|
**Response:**
|
|
```json
|
|
{
|
|
"activities": [
|
|
{
|
|
"activity": "walking",
|
|
"person_id": "person_001",
|
|
"zone_id": "zone_001",
|
|
"confidence": 0.9,
|
|
"timestamp": "2025-01-07T10:00:00Z",
|
|
"duration_seconds": 15.5
|
|
}
|
|
],
|
|
"total_count": 1,
|
|
"zone_id": "zone_001"
|
|
}
|
|
```
|
|
|
|
### Calibrate System
|
|
|
|
Start system calibration process.
|
|
|
|
```http
|
|
POST /api/v1/pose/calibrate
|
|
```
|
|
|
|
**Response:**
|
|
```json
|
|
{
|
|
"calibration_id": "cal_12345",
|
|
"status": "started",
|
|
"estimated_duration_minutes": 5,
|
|
"message": "Calibration process started"
|
|
}
|
|
```
|
|
|
|
### Get Calibration Status
|
|
|
|
Check calibration progress.
|
|
|
|
```http
|
|
GET /api/v1/pose/calibration/status
|
|
```
|
|
|
|
**Response:**
|
|
```json
|
|
{
|
|
"is_calibrating": true,
|
|
"calibration_id": "cal_12345",
|
|
"progress_percent": 60,
|
|
"current_step": "phase_sanitization",
|
|
"estimated_remaining_minutes": 2,
|
|
"last_calibration": "2025-01-06T15:30:00Z"
|
|
}
|
|
```
|
|
|
|
### Get Pose Statistics
|
|
|
|
Get pose estimation statistics.
|
|
|
|
```http
|
|
GET /api/v1/pose/stats
|
|
```
|
|
|
|
**Query Parameters:**
|
|
- `hours` (integer, optional): Hours of data to analyze (1-168, default: 24)
|
|
|
|
**Response:**
|
|
```json
|
|
{
|
|
"period": {
|
|
"start_time": "2025-01-06T10:00:00Z",
|
|
"end_time": "2025-01-07T10:00:00Z",
|
|
"hours": 24
|
|
},
|
|
"statistics": {
|
|
"total_detections": 1500,
|
|
"average_confidence": 0.82,
|
|
"unique_persons": 25,
|
|
"average_processing_time_ms": 47.3,
|
|
"zones": {
|
|
"zone_001": {
|
|
"detections": 800,
|
|
"average_occupancy": 3.2
|
|
}
|
|
}
|
|
}
|
|
}
|
|
```
|
|
|
|
## System Management API
|
|
|
|
### System Status
|
|
|
|
Get current system status.
|
|
|
|
```http
|
|
GET /api/v1/system/status
|
|
```
|
|
|
|
**Response:**
|
|
```json
|
|
{
|
|
"status": "running",
|
|
"uptime_seconds": 86400,
|
|
"services": {
|
|
"hardware": "healthy",
|
|
"pose_estimation": "healthy",
|
|
"streaming": "healthy"
|
|
},
|
|
"configuration": {
|
|
"domain": "healthcare",
|
|
"max_persons": 10,
|
|
"confidence_threshold": 0.7
|
|
},
|
|
"timestamp": "2025-01-07T10:00:00Z"
|
|
}
|
|
```
|
|
|
|
### Start System
|
|
|
|
Start the pose estimation system.
|
|
|
|
```http
|
|
POST /api/v1/system/start
|
|
```
|
|
|
|
**Request Body:**
|
|
```json
|
|
{
|
|
"configuration": {
|
|
"domain": "healthcare",
|
|
"environment_id": "room_001",
|
|
"calibration_required": true
|
|
}
|
|
}
|
|
```
|
|
|
|
### Stop System
|
|
|
|
Stop the pose estimation system.
|
|
|
|
```http
|
|
POST /api/v1/system/stop
|
|
```
|
|
|
|
### Restart System
|
|
|
|
Restart the system with new configuration.
|
|
|
|
```http
|
|
POST /api/v1/system/restart
|
|
```
|
|
|
|
### Get Configuration
|
|
|
|
Get current system configuration.
|
|
|
|
```http
|
|
GET /api/v1/config
|
|
```
|
|
|
|
### Update Configuration
|
|
|
|
Update system configuration.
|
|
|
|
```http
|
|
PUT /api/v1/config
|
|
```
|
|
|
|
**Request Body:**
|
|
```json
|
|
{
|
|
"detection": {
|
|
"confidence_threshold": 0.8,
|
|
"max_persons": 8
|
|
},
|
|
"analytics": {
|
|
"enable_fall_detection": true
|
|
}
|
|
}
|
|
```
|
|
|
|
## Health Check API
|
|
|
|
### Comprehensive Health Check
|
|
|
|
Get detailed system health information.
|
|
|
|
```http
|
|
GET /api/v1/health
|
|
```
|
|
|
|
**Response:**
|
|
```json
|
|
{
|
|
"status": "healthy",
|
|
"timestamp": "2025-01-07T10:00:00Z",
|
|
"uptime_seconds": 86400,
|
|
"components": {
|
|
"hardware": {
|
|
"name": "Hardware Service",
|
|
"status": "healthy",
|
|
"message": "All routers connected",
|
|
"last_check": "2025-01-07T10:00:00Z",
|
|
"uptime_seconds": 86400,
|
|
"metrics": {
|
|
"connected_routers": 3,
|
|
"csi_data_rate": 30.5
|
|
}
|
|
},
|
|
"pose": {
|
|
"name": "Pose Service",
|
|
"status": "healthy",
|
|
"message": "Processing normally",
|
|
"last_check": "2025-01-07T10:00:00Z",
|
|
"metrics": {
|
|
"processing_rate": 29.8,
|
|
"average_latency_ms": 45.2
|
|
}
|
|
}
|
|
},
|
|
"system_metrics": {
|
|
"cpu": {
|
|
"percent": 65.2,
|
|
"count": 8
|
|
},
|
|
"memory": {
|
|
"total_gb": 16.0,
|
|
"available_gb": 8.5,
|
|
"percent": 46.9
|
|
},
|
|
"disk": {
|
|
"total_gb": 500.0,
|
|
"free_gb": 350.0,
|
|
"percent": 30.0
|
|
}
|
|
}
|
|
}
|
|
```
|
|
|
|
### Readiness Check
|
|
|
|
Check if system is ready to serve requests.
|
|
|
|
```http
|
|
GET /api/v1/ready
|
|
```
|
|
|
|
**Response:**
|
|
```json
|
|
{
|
|
"ready": true,
|
|
"timestamp": "2025-01-07T10:00:00Z",
|
|
"checks": {
|
|
"hardware_ready": true,
|
|
"pose_ready": true,
|
|
"stream_ready": true,
|
|
"memory_available": true,
|
|
"disk_space_available": true
|
|
},
|
|
"message": "System is ready"
|
|
}
|
|
```
|
|
|
|
### Liveness Check
|
|
|
|
Simple liveness check for load balancers.
|
|
|
|
```http
|
|
GET /api/v1/live
|
|
```
|
|
|
|
**Response:**
|
|
```json
|
|
{
|
|
"status": "alive",
|
|
"timestamp": "2025-01-07T10:00:00Z"
|
|
}
|
|
```
|
|
|
|
### System Metrics
|
|
|
|
Get detailed system metrics.
|
|
|
|
```http
|
|
GET /api/v1/metrics
|
|
```
|
|
|
|
### Version Information
|
|
|
|
Get application version information.
|
|
|
|
```http
|
|
GET /api/v1/version
|
|
```
|
|
|
|
**Response:**
|
|
```json
|
|
{
|
|
"name": "WiFi-DensePose API",
|
|
"version": "1.0.0",
|
|
"environment": "production",
|
|
"debug": false,
|
|
"timestamp": "2025-01-07T10:00:00Z"
|
|
}
|
|
```
|
|
|
|
## WebSocket API
|
|
|
|
### Connection
|
|
|
|
Connect to WebSocket endpoint:
|
|
|
|
```javascript
|
|
const ws = new WebSocket('ws://localhost:8000/ws/pose/stream');
|
|
```
|
|
|
|
### Authentication
|
|
|
|
Send authentication message after connection:
|
|
|
|
```javascript
|
|
ws.send(JSON.stringify({
|
|
type: 'auth',
|
|
token: 'your-jwt-token'
|
|
}));
|
|
```
|
|
|
|
### Subscribe to Pose Updates
|
|
|
|
```javascript
|
|
ws.send(JSON.stringify({
|
|
type: 'subscribe',
|
|
channel: 'pose_updates',
|
|
filters: {
|
|
zone_ids: ['zone_001'],
|
|
min_confidence: 0.7
|
|
}
|
|
}));
|
|
```
|
|
|
|
### Pose Data Message
|
|
|
|
```json
|
|
{
|
|
"type": "pose_data",
|
|
"channel": "pose_updates",
|
|
"data": {
|
|
"timestamp": "2025-01-07T10:00:00Z",
|
|
"frame_id": "frame_12345",
|
|
"persons": [
|
|
{
|
|
"person_id": "person_001",
|
|
"confidence": 0.85,
|
|
"bounding_box": {
|
|
"x": 100,
|
|
"y": 150,
|
|
"width": 80,
|
|
"height": 180
|
|
},
|
|
"zone_id": "zone_001"
|
|
}
|
|
]
|
|
}
|
|
}
|
|
```
|
|
|
|
### System Events
|
|
|
|
Subscribe to system events:
|
|
|
|
```javascript
|
|
ws.send(JSON.stringify({
|
|
type: 'subscribe',
|
|
channel: 'system_events'
|
|
}));
|
|
```
|
|
|
|
### Event Message
|
|
|
|
```json
|
|
{
|
|
"type": "system_event",
|
|
"channel": "system_events",
|
|
"data": {
|
|
"event_type": "fall_detected",
|
|
"person_id": "person_001",
|
|
"zone_id": "zone_001",
|
|
"confidence": 0.95,
|
|
"timestamp": "2025-01-07T10:00:00Z"
|
|
}
|
|
}
|
|
```
|
|
|
|
## Data Models
|
|
|
|
### PersonPose
|
|
|
|
```json
|
|
{
|
|
"person_id": "string",
|
|
"confidence": 0.85,
|
|
"bounding_box": {
|
|
"x": 100,
|
|
"y": 150,
|
|
"width": 80,
|
|
"height": 180
|
|
},
|
|
"keypoints": [
|
|
{
|
|
"name": "nose",
|
|
"x": 140,
|
|
"y": 160,
|
|
"confidence": 0.9,
|
|
"visible": true
|
|
}
|
|
],
|
|
"segmentation": {
|
|
"mask": "base64-encoded-mask",
|
|
"body_parts": ["torso", "left_arm", "right_arm"]
|
|
},
|
|
"zone_id": "zone_001",
|
|
"activity": "standing",
|
|
"timestamp": "2025-01-07T10:00:00Z"
|
|
}
|
|
```
|
|
|
|
### Keypoint Names
|
|
|
|
Standard keypoint names following COCO format:
|
|
- `nose`, `left_eye`, `right_eye`, `left_ear`, `right_ear`
|
|
- `left_shoulder`, `right_shoulder`, `left_elbow`, `right_elbow`
|
|
- `left_wrist`, `right_wrist`, `left_hip`, `right_hip`
|
|
- `left_knee`, `right_knee`, `left_ankle`, `right_ankle`
|
|
|
|
### Activity Types
|
|
|
|
Supported activity classifications:
|
|
- `standing`, `sitting`, `walking`, `running`, `lying_down`
|
|
- `falling`, `jumping`, `bending`, `reaching`, `waving`
|
|
|
|
### Zone Configuration
|
|
|
|
```json
|
|
{
|
|
"zone_id": "zone_001",
|
|
"name": "Living Room",
|
|
"coordinates": {
|
|
"x": 0,
|
|
"y": 0,
|
|
"width": 500,
|
|
"height": 300
|
|
},
|
|
"max_occupancy": 10,
|
|
"alerts_enabled": true,
|
|
"privacy_level": "high"
|
|
}
|
|
```
|
|
|
|
## SDK Examples
|
|
|
|
### Python SDK
|
|
|
|
```python
|
|
from wifi_densepose import WiFiDensePoseClient
|
|
|
|
# Initialize client
|
|
client = WiFiDensePoseClient(
|
|
base_url="http://localhost:8000",
|
|
api_key="your-api-key"
|
|
)
|
|
|
|
# Get current poses
|
|
poses = client.get_current_poses(
|
|
confidence_threshold=0.7,
|
|
max_persons=5
|
|
)
|
|
|
|
# Get historical data
|
|
history = client.get_historical_data(
|
|
start_time="2025-01-07T00:00:00Z",
|
|
end_time="2025-01-07T23:59:59Z",
|
|
zone_ids=["zone_001"]
|
|
)
|
|
|
|
# Subscribe to real-time updates
|
|
def pose_callback(poses):
|
|
print(f"Received {len(poses)} poses")
|
|
|
|
client.subscribe_to_poses(callback=pose_callback)
|
|
```
|
|
|
|
### JavaScript SDK
|
|
|
|
```javascript
|
|
import { WiFiDensePoseClient } from 'wifi-densepose-js';
|
|
|
|
// Initialize client
|
|
const client = new WiFiDensePoseClient({
|
|
baseUrl: 'http://localhost:8000',
|
|
apiKey: 'your-api-key'
|
|
});
|
|
|
|
// Get current poses
|
|
const poses = await client.getCurrentPoses({
|
|
confidenceThreshold: 0.7,
|
|
maxPersons: 5
|
|
});
|
|
|
|
// Subscribe to WebSocket updates
|
|
client.subscribeToPoses({
|
|
onData: (poses) => {
|
|
console.log(`Received ${poses.length} poses`);
|
|
},
|
|
onError: (error) => {
|
|
console.error('WebSocket error:', error);
|
|
}
|
|
});
|
|
```
|
|
|
|
### cURL Examples
|
|
|
|
```bash
|
|
# Get current poses
|
|
curl -X GET "http://localhost:8000/api/v1/pose/current?confidence_threshold=0.7" \
|
|
-H "Authorization: Bearer <token>" \
|
|
-H "Content-Type: application/json"
|
|
|
|
# Start system
|
|
curl -X POST "http://localhost:8000/api/v1/system/start" \
|
|
-H "Authorization: Bearer <token>" \
|
|
-H "Content-Type: application/json" \
|
|
-d '{
|
|
"configuration": {
|
|
"domain": "healthcare",
|
|
"environment_id": "room_001"
|
|
}
|
|
}'
|
|
|
|
# Get zone occupancy
|
|
curl -X GET "http://localhost:8000/api/v1/pose/zones/zone_001/occupancy" \
|
|
-H "Authorization: Bearer <token>"
|
|
```
|
|
|
|
---
|
|
|
|
For more information, see:
|
|
- [User Guide](user_guide.md)
|
|
- [Deployment Guide](deployment.md)
|
|
- [Troubleshooting Guide](troubleshooting.md)
|
|
- [Interactive API Documentation](http://localhost:8000/docs) |