--- 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)