Spaces:
Sleeping
Sleeping
# π Dense Captioning Platform API Documentation | |
## Overview | |
The Dense Captioning Platform provides comprehensive chart analysis through a Gradio-based API. It can classify chart types, detect chart elements, and segment data points from uploaded images. | |
## API Access | |
**Base URL:** `https://hanszhu-dense-captioning-platform.hf.space` | |
**API Type:** Gradio Client API (not RESTful) | |
## Installation | |
### Prerequisites | |
```bash | |
pip install gradio-client | |
``` | |
### Quick Start | |
### Python Client (Recommended) | |
```python | |
from gradio_client import Client, handle_file | |
# Initialize client with direct URL | |
client = Client("https://hanszhu-dense-captioning-platform.hf.space") | |
# Analyze a chart image using file path | |
result = client.predict( | |
image=handle_file('path/to/your/chart.png'), | |
fn_index=0 | |
) | |
print(result) | |
``` | |
### Using a URL | |
```python | |
from gradio_client import Client, handle_file | |
client = Client("https://hanszhu-dense-captioning-platform.hf.space") | |
# Use a publicly accessible image URL | |
result = client.predict( | |
image=handle_file("https://example.com/chart.png"), | |
fn_index=0 | |
) | |
print(result) | |
``` | |
## Input Parameters | |
| Parameter | Type | Required | Description | | |
|-----------|------|----------|-------------| | |
| `image` | File/URL | Yes | Chart image to analyze (PNG, JPG, JPEG supported) | | |
## Important Notes | |
### β Working Approach | |
- **Use `fn_index=0`** instead of `api_name="/predict"` | |
- **Use direct URL** `"https://hanszhu-dense-captioning-platform.hf.space"` | |
- **Always use `handle_file()`** for both local files and URLs | |
- **This is a Gradio Client API**, not a RESTful API | |
### β What Doesn't Work | |
- Direct HTTP POST requests to `/predict` | |
- Using `api_name="/predict"` with this setup | |
- Using `Client("hanszhu/Dense-Captioning-Platform")` (use direct URL instead) | |
## Output Format | |
The API returns a JSON object with the following structure: | |
```json | |
{ | |
"chart_type_id": 4, | |
"chart_type_label": "Bar plot", | |
"element_result": { | |
"bboxes": [...], | |
"segments": [...] | |
}, | |
"datapoint_result": { | |
"bboxes": [...], | |
"segments": [...] | |
}, | |
"status": "Full analysis completed", | |
"processing_time": 2.345 | |
} | |
``` | |
### Output Fields | |
| Field | Type | Description | | |
|-------|------|-------------| | |
| `chart_type_id` | int | Numeric identifier for chart type (0-27) | | |
| `chart_type_label` | string | Human-readable chart type name | | |
| `element_result` | object/string | Detected chart elements (titles, axes, legends, etc.) | | |
| `datapoint_result` | object/string | Segmented data points and regions | | |
| `status` | string | Processing status message | | |
| `processing_time` | float | Time taken for analysis in seconds | | |
## Supported Chart Types | |
The platform can classify 28 different chart types: | |
| ID | Chart Type | ID | Chart Type | | |
|----|------------|----|------------| | |
| 0 | Line graph | 14 | Histogram | | |
| 1 | Natural image | 15 | Box plot | | |
| 2 | Table | 16 | Vector plot | | |
| 3 | 3D object | 17 | Pie chart | | |
| 4 | Bar plot | 18 | Surface plot | | |
| 5 | Scatter plot | 19 | Algorithm | | |
| 6 | Medical image | 20 | Contour plot | | |
| 7 | Sketch | 21 | Tree diagram | | |
| 8 | Geographic map | 22 | Bubble chart | | |
| 9 | Flow chart | 23 | Polar plot | | |
| 10 | Heat map | 24 | Area chart | | |
| 11 | Mask | 25 | Pareto chart | | |
| 12 | Block diagram | 26 | Radar chart | | |
| 13 | Venn diagram | 27 | Confusion matrix | | |
## Chart Elements Detected | |
The element detection model identifies: | |
- **Titles & Labels**: Chart title, subtitle, axis labels | |
- **Axes**: X-axis, Y-axis, tick labels | |
- **Legend**: Legend title, legend items, legend text | |
- **Data Elements**: Data points, data lines, data bars, data areas | |
- **Structural Elements**: Grid lines, plot areas | |
## Error Handling | |
The API returns error messages in the response fields when issues occur: | |
```json | |
{ | |
"chart_type_id": "Error: Model not available", | |
"chart_type_label": "Error: Model not available", | |
"element_result": "Error: Invalid image format", | |
"datapoint_result": "Error: Processing failed", | |
"status": "Error in chart classification", | |
"processing_time": 0.0 | |
} | |
``` | |
## Rate Limits | |
- **Free Tier**: Limited requests per hour | |
- **Processing Time**: Typically 2-5 seconds per image | |
- **Image Size**: Recommended max 10MB | |
## Complete Working Example | |
Here's a complete example that demonstrates all the working patterns: | |
```python | |
from gradio_client import Client, handle_file | |
import json | |
def analyze_chart(image_path_or_url): | |
""" | |
Analyze a chart image using the Dense Captioning Platform API | |
Args: | |
image_path_or_url (str): Path to local image file or URL to image | |
Returns: | |
dict: Analysis results with chart type, elements, and data points | |
""" | |
try: | |
# Initialize client with direct URL | |
client = Client("https://hanszhu-dense-captioning-platform.hf.space") | |
# Make prediction using the working approach | |
result = client.predict( | |
image=handle_file(image_path_or_url), | |
fn_index=0 | |
) | |
return result | |
except Exception as e: | |
return { | |
"error": f"API call failed: {str(e)}", | |
"status": "Error", | |
"processing_time": 0.0 | |
} | |
# Example usage | |
if __name__ == "__main__": | |
# Test with a local file | |
local_result = analyze_chart("path/to/your/chart.png") | |
print("Local file result:", json.dumps(local_result, indent=2)) | |
# Test with a URL | |
url_result = analyze_chart("https://example.com/chart.png") | |
print("URL result:", json.dumps(url_result, indent=2)) | |
``` | |
## Examples | |
### Example 1: Bar Chart Analysis | |
```python | |
from gradio_client import Client, handle_file | |
client = Client("https://hanszhu-dense-captioning-platform.hf.space") | |
# Analyze a bar chart | |
result = client.predict( | |
image=handle_file('bar_chart.png'), | |
fn_index=0 | |
) | |
print(f"Chart Type: {result['chart_type_label']}") | |
print(f"Processing Time: {result['processing_time']}s") | |
``` | |
### Example 2: Batch Processing | |
```python | |
from gradio_client import Client, handle_file | |
import os | |
client = Client("https://hanszhu-dense-captioning-platform.hf.space") | |
# Process multiple charts | |
chart_files = ['chart1.png', 'chart2.png', 'chart3.png'] | |
results = [] | |
for chart_file in chart_files: | |
if os.path.exists(chart_file): | |
result = client.predict( | |
image=handle_file(chart_file), | |
fn_index=0 | |
) | |
results.append(result) | |
print(f"Processed {chart_file}: {result['chart_type_label']}") | |
``` | |
### Example 3: Test with Public Image | |
```python | |
from gradio_client import Client, handle_file | |
client = Client("https://hanszhu-dense-captioning-platform.hf.space") | |
# Test with a public image URL | |
result = client.predict( | |
image=handle_file("https://raw.githubusercontent.com/gradio-app/gradio/main/test/test_files/bus.png"), | |
fn_index=0 | |
) | |
print("β API Test Successful!") | |
print(f"Chart Type: {result['chart_type_label']}") | |
print(f"Status: {result['status']}") | |
``` | |
## Troubleshooting | |
### Common Issues | |
1. **"Model not available"**: The models are still loading, wait a moment and retry | |
2. **"Invalid image format"**: Ensure the image is in PNG, JPG, or JPEG format | |
3. **"Processing failed"**: The image might be corrupted or too large | |
4. **"Expecting value: line 1 column 1"**: Use `fn_index=0` instead of `api_name="/predict"` | |
5. **"Cannot find a function with api_name"**: Use direct URL and `fn_index=0` | |
### Best Practices | |
1. **Image Quality**: Use clear, high-resolution images for best results | |
2. **Format**: PNG or JPG formats work best | |
3. **Size**: Keep images under 10MB for faster processing | |
4. **Client Setup**: Always use direct URL and `fn_index=0` | |
5. **File Handling**: Always use `handle_file()` for both local files and URLs | |
6. **Retry Logic**: Implement retry logic for failed requests | |
### Quick Test | |
To verify the API is working, run this test: | |
```python | |
from gradio_client import Client, handle_file | |
try: | |
client = Client("https://hanszhu-dense-captioning-platform.hf.space") | |
result = client.predict( | |
image=handle_file("https://raw.githubusercontent.com/gradio-app/gradio/main/test/test_files/bus.png"), | |
fn_index=0 | |
) | |
print("β API is working!") | |
print(f"Chart Type: {result['chart_type_label']}") | |
except Exception as e: | |
print(f"β API test failed: {e}") | |
``` | |
## Support | |
For issues or questions: | |
- Check the [Hugging Face Space](https://huggingface.co/spaces/hanszhu/Dense-Captioning-Platform) | |
- Review the error messages in the API response | |
- Ensure your image format and size are within limits |