# Çàäàíèå: óñòàíîâêà è çàïóñê polyscriptor (ðàñïîçíàâàíèå ðóêîïèñíûõ ìåòðè÷åñêèõ êíèã) íà Windows 10
## Êîíòåêñò è öåëü
Íóæíî óñòàíîâèòü è çàïóñòèòü ëîêàëüíî ïðîãðàììó **polyscriptor** — áåñïëàòíûé, îòêðûòûé èíñòðóìåíò ðàñïîçíàâàíèÿ ðóêîïèñíîãî òåêñòà (àëüòåðíàòèâà Transkribus, íå òðåáóåò ðåãèñòðàöèè/äîñòóïà ê çàáëîêèðîâàííûì â ÐÔ ñåðâèñàì). Êîíêðåòíàÿ çàäà÷à — ðàñïîçíàâàíèå òåêñòà íà ñêàíàõ äîðåâîëþöèîííûõ ðóññêèõ ìåòðè÷åñêèõ êíèã (äîðåôîðìåííàÿ îðôîãðàôèÿ).
Âñå êîìïîíåíòû ñêà÷èâàþòñÿ òîëüêî ñ **github.com**, **python.org**, **huggingface.co** è **pytorch.org** — íè÷åãî èç çàáëîêèðîâàííûõ â Ðîññèè èñòî÷íèêîâ íå òðåáóåòñÿ.
**Âàæíî:** íà Windows 10 (â îòëè÷èå îò Windows 7) âñ¸ ñòàâèòñÿ îôèöèàëüíûìè, ñòàíäàðòíûìè ñðåäñòâàìè — íèêàêèõ ñòîðîííèõ ïàò÷åííûõ ñáîðîê Python, íèêàêèõ âèðòóàëüíûõ ìàøèí. Åñëè ÷òî-òî â ïðîöåññå ïîéä¸ò íå òàê — îøèáêè, ñêîðåå âñåãî, áóäóò ïðîñòûìè è òèïîâûìè (îïå÷àòêà, íå òà ïàïêà, çàáûëè àêòèâèðîâàòü îêðóæåíèå), à íå ôóíäàìåíòàëüíîé íåñîâìåñòèìîñòüþ, êàê áûëî íà Windows 7.
---
## Øàã 1. Óñòàíîâêà Python
1. Îòêðîéòå
https://www.python.org/downloads/2. Ñêà÷àéòå **Python 3.12** (èìåííî 3.12, íå ñàìóþ íîâóþ 3.13+ — íåêîòîðûå ML-ïàêåòû ïîêà íå èìåþò äëÿ íå¸ ãîòîâûõ ñáîðîê è ïîòðåáóþò êîìïèëÿöèè èç èñõîäíèêîâ). Ïðÿìàÿ ññûëêà íà ñòðàíèöó ðåëèçà:
https://www.python.org/downloads/release/python-3120/ → â ñàìîì íèçó ðàçäåë "Files" → **Windows installer (64-bit)**.
3. Çàïóñòèòå óñòàíîâùèê. **Íà ïåðâîì ýêðàíå îáÿçàòåëüíî ïîñòàâüòå ãàëî÷êó "Add python.exe to PATH"** âíèçó îêíà.
4. Íàæìèòå "Install Now".
5. Ïîñëå óñòàíîâêè îòêðîéòå êîìàíäíóþ ñòðîêó (Ïóñê → íàáåðèòå `cmd`) è ïðîâåðüòå:
```
python --version
```
Äîëæíî ïîêàçàòü `Python 3.12.x`.
---
## Øàã 2. Ñêà÷èâàíèå polyscriptor
Âàðèàíò À (ïðîùå, áåç óñòàíîâêè Git) — ZIP-àðõèâ:
1. Îòêðîéòå
https://github.com/achimrabus/polyscriptor2. **Code → Download ZIP**.
3. Ðàñïàêóéòå â `C:\polyscriptor\` òàê, ÷òîáû ôàéëû (`batch_processing.py`, `requirements.txt` è ò.ä.) ëåæàëè **ïðÿìî** â `C:\polyscriptor\`, à íå âî âëîæåííîé ïàïêå `C:\polyscriptor\polyscriptor-main\`. Åñëè ïðè ðàñïàêîâêå ïîëó÷èëàñü âëîæåííàÿ ïàïêà — ïåðåíåñèòå âñ¸ å¸ ñîäåðæèìîå íà óðîâåíü âûøå è óäàëèòå ïóñòóþ âëîæåííóþ ïàïêó.
Âàðèàíò Á (åñëè óäîáíåå ÷åðåç Git) — óñòàíîâèòå Git äëÿ Windows (https://git-scm.com/download/win, îáû÷íàÿ îôèöèàëüíàÿ óñòàíîâêà), çàòåì â `cmd`:
```
cd C:\
git clone
https://github.com/achimrabus/polyscriptor.gitcd polyscriptor
```
---
## Øàã 3. Âèðòóàëüíîå îêðóæåíèå è çàâèñèìîñòè
Îòêðîéòå `cmd`, ïåðåéäèòå â ïàïêó ïðîåêòà:
```
cd C:\polyscriptor
```
Ñîçäàéòå è àêòèâèðóéòå âèðòóàëüíîå îêðóæåíèå:
```
python -m venv htr_env
htr_env\Scripts\activate
```
 íà÷àëå ñòðîêè äîëæíî ïîÿâèòüñÿ `(htr_env)` — îáÿçàòåëüíî ïðîâåðÿéòå ýòî ïåðåä êàæäîé ñëåäóþùåé êîìàíäîé, åãî íóæíî áóäåò **àêòèâèðîâàòü çàíîâî ïðè êàæäîì íîâîì îòêðûòèè `cmd`**.
Óñòàíîâèòå çàâèñèìîñòè **îäíîé êîìàíäîé** (íå ðàçáèâàéòå íà íåñêîëüêî øàãîâ — èíà÷å pip ïåðåïóòàåò âåðñèè ïàêåòîâ):
```
pip install -r requirements.txt -r requirements-kraken.txt --extra-index-url
https://download.pytorch.org/whl/cpu```
Ýòî çàéì¸ò ïðîäîëæèòåëüíîå âðåìÿ (ñêà÷èâàåòñÿ íåñêîëüêî ÃÁ: PyTorch, transformers, kraken è ò.ä.) — äîæäèòåñü ïîëíîãî çàâåðøåíèÿ è óáåäèòåñü, ÷òî â ñàìîì êîíöå íåò ñòðîê `ERROR`.
Ïðîâåðêà:
```
python -c "import torch; print(torch.__version__)"
```
Äîëæíî âûâåñòè âåðñèþ âèäà `2.x.x+cpu` áåç îøèáîê.
---
## Øàã 4. Ñêà÷èâàíèå ìîäåëè
Ìîäåëü **achimrabus/crnn-ctc-russian** — îáó÷åíà íà ðóññêèõ ìåòðè÷åñêèõ êíèãàõ XIX âåêà (îøèáêà ~6.9% ñèìâîëîâ).
1. Ñîçäàéòå ïàïêó `C:\polyscriptor\models\crnn-ctc-russian\`
2. Ñêà÷àéòå â íå¸ âðó÷íóþ (÷åðåç áðàóçåð) 3 ôàéëà ñî ñòðàíèöû
https://huggingface.co/achimrabus/crnn-ctc-russian/tree/main :
- `best_model.pt` (~43 ÌÁ)
- `model_config.json`
- `symbols.txt`
---
## Øàã 5. Çàïóñê âåá-èíòåðôåéñà
**Âàæíî:** çàïóñêàòü íóæíî èìåííî òàê — ÷åðåç `uvicorn`, èç êîðíåâîé ïàïêè ïðîåêòà (íå èç ïàïêè `web`, è íå êîìàíäîé `python polyscriptor_server.py` íàïðÿìóþ, ýòî íå ñðàáîòàåò).
```
cd C:\polyscriptor
htr_env\Scripts\activate
python -m uvicorn web.polyscriptor_server:app --host 0.0.0.0 --port 8765
```
Äîæäèòåñü ñòðîê â êîíñîëè:
```
INFO: Application startup complete.
INFO: Uvicorn running on
http://0.0.0.0:8765```
Ýòî îêíî êîíñîëè äîëæíî îñòàòüñÿ îòêðûòûì (ìîæíî ñâåðíóòü, íî íå çàêðûâàòü) — ýòî è åñòü ðàáîòàþùèé ñåðâåð.
Îòêðîéòå áðàóçåð (Chrome/Edge/Firefox) è ïåðåéäèòå **òî÷íî** ïî àäðåñó (îáÿçàòåëüíî ñ `http://`, íå `https://`):
```
http://127.0.0.1:8765```
Äîëæåí îòêðûòüñÿ èíòåðôåéñ **Polyscriptor HTR**.
---
## Øàã 6. Íàñòðîéêà èíòåðôåéñà ïåðåä ðàñïîçíàâàíèåì
 îòêðûâøåìñÿ èíòåðôåéñå (ëåâàÿ ïàíåëü):
1. **Engine** → âûáåðèòå **CRNN-CTC (PyLaia-inspired)**.
2. **Model** → âûáåðèòå **crnn-ctc-russian** (ïîÿâèòñÿ àâòîìàòè÷åñêè, òàê êàê ëåæèò â ïàïêå `models`).
3. Íàæìèòå **Load Model** — äîëæíà ïîÿâèòüñÿ çåë¸íàÿ íàäïèñü îá óñïåøíîé çàãðóçêå.
4.  ðàçäåëå **SEGMENTATION → Method** âûáåðèòå **Kraken Neural (blla)** (ýòî íåéðîñåòåâàÿ ñåãìåíòàöèÿ ñòðîê — äà¸ò çíà÷èòåëüíî ëó÷øèé ðåçóëüòàò, ÷åì àëüòåðíàòèâû, îñîáåííî íà ñëîæíûõ òàáëè÷íûõ ñòðàíèöàõ ìåòðè÷åñêèõ êíèã).
5. **Device** → **CPU** (GPU íå íóæåí, ìîäåëü ðàáîòàåò íà ïðîöåññîðå).
**Îáðàòèòå âíèìàíèå:** ïðè êàæäîé ïåðåçàãðóçêå ñòðàíèöû/ïåðåçàïóñêå ñåðâåðà ýòè íàñòðîéêè (îñîáåííî Method) ñáðàñûâàþòñÿ íà çíà÷åíèå ïî óìîë÷àíèþ — ïðîâåðÿéòå è âûñòàâëÿéòå èõ çàíîâî ïåðåä êàæäîé ñåññèåé ðàáîòû.
---
## Øàã 7. Ðàñïîçíàâàíèå
1. Â áëîêå **IMAGE** çàãðóçèòå ñêàí (êíîïêà/îáëàñòü "Drop image or PDF, or click to browse").
2. Çàïóñòèòå îáðàáîòêó (êíîïêà îáðàáîòêè/ðàñïîçíàâàíèÿ, ïîÿâèòñÿ ïîñëå çàãðóçêè èçîáðàæåíèÿ).
3. Ïîñìîòðèòå ðåçóëüòàò â ïðàâîé ïàíåëè **TRANSCRIPTION**.
---
## Åñëè ÷òî-òî ïîøëî íå òàê
- **`ModuleNotFoundError`** ïðè çàïóñêå — çàáûëè âûïîëíèòü `htr_env\Scripts\activate` â ýòîì îêíå `cmd` (âèðòóàëüíîå îêðóæåíèå àêòèâèðóåòñÿ îòäåëüíî â êàæäîì íîâîì îêíå êîíñîëè).
- **Ôàéë `web\polyscriptor_server.py` íå íàéäåí** — âû íå â êîðíåâîé ïàïêå ïðîåêòà; âûïîëíèòå `cd C:\polyscriptor` è ïîâòîðèòå êîìàíäó çàïóñêà.
- **Áðàóçåð ïèøåò "íå óäà¸òñÿ ïîäêëþ÷èòüñÿ" / îøèáêà SSL** — ïðîâåðüòå, ÷òî â àäðåñå íàáðàíî èìåííî `http://127.0.0.1:8765` (ñ äâîåòî÷èåì ïåðåä ïîðòîì è áåç `https`).
- **Íóæíî ïåðåçàïóñòèòü ñåðâèñ â äðóãîé ðàç** (ïîñëå ïåðåçàãðóçêè êîìïüþòåðà) — ïîâòîðèòå òîëüêî Øàã 5 (êîìàíäû `cd`, `activate`, `python -m uvicorn ...`) — Øàãè 1-4 äåëàþòñÿ îäèí ðàç.
---
## Èòîã
Ïîñëå âûïîëíåíèÿ ýòèõ øàãîâ äîëæåí ïîëó÷èòüñÿ ïîëíîñòüþ ðàáî÷èé, ëîêàëüíûé (áåç èíòåðíåòà, áåç Transkribus, áåç êàêèõ-ëèáî ïîäïèñîê) èíñòðóìåíò ðàñïîçíàâàíèÿ ðóêîïèñíîãî ðóññêîãî òåêñòà XIX âåêà, ñïåöèàëüíî îáó÷åííûé íà ìåòðè÷åñêèõ êíèãàõ.