Spaces:
Sleeping
Sleeping
| title: Stella Score Reader | |
| emoji: π’ | |
| colorFrom: yellow | |
| colorTo: gray | |
| sdk: docker | |
| pinned: false | |
| # stella_score_reader_backend | |
| μΈμ μ 보λ₯Ό μΉ΄λ©λΌλ‘ μ°μ΄ ν¬λ‘ν **ν μ€ μ€μ (staff)** μ΄λ―Έμ§λ₯Ό μ λ ₯μΌλ‘ λ°μ, λͺ¨λ°μΌ μ±μ΄ λ°λ‘ μ¬μ/νΈμ§ν μ μλ **λ¨μΌ λ©λ‘λ JSON**μ λ°ννλ OMR API μλ²μ λλ€. | |
| νμ¬ λͺ©νλ λ¨μΌ μλν¬μΈνΈ `POST /analyze`(v1 λ¨μΌ μ€νν μ€ν)λ₯Ό μμ μ μΌλ‘ μ 곡νλ κ²μ λλ€. | |
| ## ν΅μ¬ λͺ©ν | |
| - μ λ ₯: **μ΄λ―Έμ§λΉ μ€μ ν μ€**λ§ μλ€κ³ κ°μ ν ν¬λ‘ μ¬μ§ 1μ₯ λλ μ¬λ¬ μ₯(μμλλ‘ μ΄μ΄μ§) | |
| - **μμ리νΒ·μ‘°ν**λ μλ € λκ° μ μμΌλ―λ‘, `multipart` νλ **`score_context`(JSON)** λ‘ λ°λμ μ λ¬ | |
| - μΆλ ₯: **`melody.events` νλλ‘ λ³ν©λ JSON**(λ€μ₯μ΄λ©΄ μκ°μΆλ§ μ΄μ΄ λΆμ). MusicXML λ±μ API μλ΅μ ν¬ν¨νμ§ μμ | |
| - νμ(μ΅λ 2μ±λΆ)μ **μ΅κ³ μ**μΌλ‘ μ€μ¬ λ©λ‘λμ λ°μ | |
| μμΈν κ³μ½μ `docs/analyze-api-spec.md`λ₯Ό λ°λ¦ λλ€. | |
| ## λ¬Έμ | |
| - API/λ°μ΄ν° λͺ¨λΈ μμΈ: `docs/analyze-api-spec.md` | |
| - νλ‘ νΈ μ°λ κ°μ΄λ(νλ μ¬μ ): `docs/frontend-integration-guide.md` | |
| - μλ΅ JSON νν μμ(μ°Έκ³ μ©): `docs/analyze-response-format-examples.json` | |
| ## κΈ°μ μ€ν | |
| - Python 3.11+ | |
| - FastAPI | |
| - OpenCV (`opencv-python-headless`) | |
| - NumPy | |
| - PyTorch(CPU) + `transformers`(κΈ°λ³Έ λͺ¨λΈ: [Flova/omr_transformer](https://huggingface.co/Flova/omr_transformer)) | |
| - μ μ²λ¦¬: `score_preprocess.py`(κΈ΄ λ³ μν μΆμ, LAB μ‘°λͺ μ κ·ν, CLAHE, bilateral, μκ°λ λ°μ€ν λ±; bboxλ μ λ‘λ μλ³Έ ν½μ λ‘ μλ³ν) | |
| - μ€μ κ΅μ 보μ : `staff_rectify.py`(μνλ§ + λ€νμ μΈλ‘ `remap`) | |
| - νκ²½ λ³μ: | |
| - `STELLA_OMR_DISABLE=1` β μ κ²½λ§ λκ³ OpenCVλ§(λ‘컬·ν μ€νΈ) | |
| - `STELLA_OMR_MODEL_ID` β λ€λ₯Έ HF λͺ¨λΈ ID | |
| - `STELLA_OMR_MAX_LENGTH` β Donut `generate` ν ν° μν(κΈ°λ³Έ `1024`, λͺ¨λΈ `decoder.max_length`λ³΄λ€ μμ§ μκ² λ°μ) | |
| - `STELLA_OMR_MAX_LENGTH_CAP` β μ κ°μ νλ μν(κΈ°λ³Έ `2048`, OOMΒ·μ§μ° μν) | |
| - `STELLA_MAX_EVENTS_PER_STAFF` β μλ΅μ λ£λ μ μ΄λ²€νΈ κ°μ μν per μ€νν(κΈ°λ³Έ `256`, μμ `64`μμ μν₯) | |
| - `STELLA_PREPROCESS_MAX_SIDE` β λ€μ΄μ€μΌμΌ μν(κΈ°λ³Έ `4096`, μ΅μ 512λ‘ ν΄λ¨ν) | |
| - `STELLA_SKIP_DESKEW=1` β λ°μ€ν λΉνμ±ν | |
| ## λΉ λ₯Έ μμ | |
| ```bash | |
| pip install -r requirements.txt | |
| uvicorn main:app --reload | |
| ``` | |
| μλ² μ€ν ν Swagger UI: | |
| - `http://127.0.0.1:8000/docs` | |
| ## νμ¬ κ΅¬ν μν | |
| - `GET /`: ν¬μ€ μ²΄ν¬ | |
| - `POST /analyze` (v1): | |
| - νμ `score_context` + λ¨κ±΄/λ€κ±΄ `file` / `files` + μ ν `options` | |
| - μ μ²λ¦¬ β λ¨μΌ μ€νν κ²μ¦(μ νν 1μ€) β `staff_rectify` β `Flova/omr_transformer` β μ€ν¨ μ OpenCV λ ΈνΈν€λ ν΄λ°± | |
| - μλ΅: `melody`, `segment_map`, `timeline`, `score_context`(μμ½), `meta.pipeline_mode` = `single_staff_v1` | |
| ꡬν κΈ°μ€μ `docs/analyze-api-spec.md`λ₯Ό λ°λ¦ λλ€. | |