File size: 5,270 Bytes
4518f25
4f2b4bb
 
4518f25
4f2b4bb
4518f25
4f2b4bb
4518f25
 
 
 
4f2b4bb
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
---
title: SAM2 Segmentation API
emoji: 🎯
colorFrom: purple
colorTo: blue
sdk: docker
app_port: 7860
pinned: false
license: apache-2.0
---

# 🎯 SAM2 Segmentation API

Мощный REST API для сегментации объектов на изображениях с использованием Meta SAM2 (Segment Anything Model 2).

## ✨ Возможности

- **🎯 Box Prompts** - выделение прямоугольником
- **🖌️ Brush Prompts** - рисование кистью (зеленый = объект, красный = фон, белый = объект)
- **📍 Point Prompts** - клики по объектам
- **🔥 Batch API** - обработка множественных объектов за один запрос
- **🖼️ Extract Objects** - автоматическое извлечение объектов с прозрачностью
- **⚡ REST API** - полная документация в Swagger UI

## 🚀 Быстрый старт

### Web интерфейс

После запуска Space откройте:

- **Простой интерфейс**: `/web` - Box промпты
- **Продвинутый**: `/web/advanced` - Box + Brush промпты
- **API документация**: `/docs` - Swagger UI

### API Endpoints

#### POST `/segment/batch` - Батчинг API (рекомендуется)

Обрабатывает множественные объекты за один запрос.

**Пример запроса:**
```json
{
  "image": "data:image/jpeg;base64,...",
  "prompts": [
    {
      "id": 0,
      "type": "mask",
      "data": "data:image/png;base64,...",
      "label": "person",
      "selected": true
    }
  ],
  "options": {
    "extract_objects": true,
    "include_masks": false,
    "clean_masks": true
  }
}
```

#### POST `/segment` - Простая сегментация

С box промптом:
```bash
curl -X POST "/segment?box_x1=50&box_y1=50&box_x2=300&box_y2=400&extract_objects=true" \
  -F "file=@image.jpg"
```

## 📊 Производительность

⚠️ **CPU Version**: Работает на бесплатном CPU tier Hugging Face Spaces. Скорость обработки: ~5-10 секунд на изображение.

Для более быстрой обработки рекомендуется upgrade на GPU (Settings → Hardware).

## 🎨 Форматы масок

API поддерживает несколько форматов масок:

- **🟢 Зеленый** (R<100, G>150, B<100) - foreground (объект)
- **⚪ Белый** (R>200, G>200, B>200) - foreground (объект)
- **🔴 Красный** (R>150, G<100, B<100) - background (исключить)

## 🔧 Технологии

- Meta SAM2 2.1 (Segment Anything Model)
- FastAPI
- PyTorch
- OpenCV
- Pydantic

## 📝 Примеры использования

### Python

```python
import requests
import base64

# Загрузить изображение
with open("image.jpg", "rb") as f:
    image_b64 = base64.b64encode(f.read()).decode()

# Отправить запрос
response = requests.post(
    "https://YOUR-SPACE.hf.space/segment/batch",
    json={
        "image": f"data:image/jpeg;base64,{image_b64}",
        "prompts": [{
            "id": 0,
            "type": "box",
            "data": "",
            "bbox": {"x_min": 0.1, "y_min": 0.2, "x_max": 0.5, "y_max": 0.8},
            "label": "person",
            "selected": True
        }],
        "options": {"extract_objects": True}
    }
)

result = response.json()
print(f"Обработано объектов: {len(result['results'])}")
```

### JavaScript

```javascript
const response = await fetch('https://YOUR-SPACE.hf.space/segment/batch', {
  method: 'POST',
  headers: {'Content-Type': 'application/json'},
  body: JSON.stringify({
    image: imageBase64,
    prompts: [{
      id: 0,
      type: "box",
      data: "",
      bbox: {x_min: 0.1, y_min: 0.2, x_max: 0.5, y_max: 0.8},
      label: "person",
      selected: true
    }],
    options: {extract_objects: true}
  })
});

const result = await response.json();
console.log(`Обработано: ${result.results.length} объектов`);
```

## 📚 Документация

Полная интерактивная документация доступна по адресу `/docs` после запуска Space.

## 🤝 Поддержка

- Модель: SAM 2.1 Hiera Tiny (для CPU)
- Форматы изображений: JPG, PNG, WEBP, BMP
- Максимальный размер: рекомендуется до 2048x2048px для разумной скорости

## ⚡ Оптимизация для мобильных приложений

1. Уменьшайте размер изображения перед отправкой (1024x1024)
2. Используйте `include_masks: false` если контуры не нужны
3. Кэшируйте результаты на клиенте
4. Используйте батчинг API для множественных объектов

## 📄 Лицензия

Apache 2.0

## 🔗 Ссылки

- [SAM2 GitHub](https://github.com/facebookresearch/sam2)
- [SAM2 Paper](https://arxiv.org/abs/2408.00714)