Initialize recipe recognition repository
This commit is contained in:
@@ -0,0 +1,204 @@
|
||||
Пользователь:
|
||||
/home/naeel/MED/recipe/PLAN/recipe1.png - пример рецепта
|
||||
/home/naeel/MED/recipe/PLAN/gemini.md - то что жемини советует
|
||||
|
||||
надо - план создания приложения для андроида, которое
|
||||
1. будет вычленять прямоукльник с датой рецепта и прямоугольник с названиями/дозировками лекарств и отправлять выделенное на сервер для дальнейшей обработки
|
||||
2. после обработки сервер перешлёт обратно в приложение распознынне данные, которое приложение выведет на экран на место рукописного текста
|
||||
пример - как гугл переводчик в режиме распознавания
|
||||
|
||||
ФИО ДР пациента не должны быть копированы, их прямоугольник не доолжен выделяться. или - выделяться но явно показываться что не используется, заблюрены или как то иначе
|
||||
|
||||
план - коротко, без воды, понятно, НИКАКОГО КОДА, кодить будут агенты, от тебя - архитектурные идеи, что гового из библиотек можно использовать, что - писать самим
|
||||
|
||||
задание понятно ?
|
||||
|
||||
Ассистент:
|
||||
Задание понятно. Изучил рецепт и план Gemini. Готовлю архитектурный план.
|
||||
|
||||
Ассистент:
|
||||
---
|
||||
|
||||
## План: Android-приложение распознавания рецепта
|
||||
|
||||
**Суть:** снимок бланка → выделение зон → OCR на сервере → наложение текста поверх рукописного (AR-режим). Зона ФИО/ДР — визуально заблюрена, на сервер не отправляется.
|
||||
|
||||
---
|
||||
|
||||
### Архитектура (4 слоя)
|
||||
|
||||
```
|
||||
Camera → [Document Scanner] → aligned bitmap
|
||||
↓
|
||||
[Zone Detector] ←— ML Kit Text Recognition
|
||||
↓
|
||||
PATIENT | DATE | MEDICATIONS | OTHER
|
||||
↓blur ↓ ↓
|
||||
не отправляется POST /api/v1/recognize
|
||||
↓
|
||||
[Server OCR]
|
||||
↓
|
||||
JSON {date, medications[]}
|
||||
↓
|
||||
[AR Overlay Renderer]
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Клиент — Android / Kotlin / Compose
|
||||
|
||||
**Готовые библиотеки:**
|
||||
- `ML Kit Document Scanner` — захват + перспективная коррекция бланка
|
||||
- `ML Kit Text Recognition v2` — определение bounding boxes зон
|
||||
- `Ktor Client` — HTTP + kotlinx.serialization
|
||||
- `Jetpack Compose + Material 3` — UI
|
||||
- `Coil Compose` — отображение bitmap
|
||||
|
||||
**Писать самим:**
|
||||
- **Zone Classifier** — эвристика: y-позиция блока + ключевые слова ("Rp.", "Ф.И.О.", "Дата рождения")
|
||||
- **Privacy Masking** — Compose Canvas: blur overlay на PATIENT-зоне
|
||||
- **AR Overlay Renderer** — Compose Canvas с наложением текста поверх изображения
|
||||
|
||||
---
|
||||
|
||||
### Сервер — Python / FastAPI
|
||||
|
||||
**Готовые:**
|
||||
- `FastAPI + pydantic` — API
|
||||
- `Google Cloud Vision API` или `Azure Computer Vision` — OCR рукописи
|
||||
- `Tesseract 5 + LSTM` — self-hosted альтернатива
|
||||
|
||||
**Писать самим:**
|
||||
- Обёртка OCR API
|
||||
- Парсер структуры лекарств
|
||||
|
||||
---
|
||||
|
||||
### Фазы
|
||||
|
||||
1. Capture + Alignment
|
||||
2. Zone Detection + Privacy
|
||||
3. Server OCR
|
||||
4. AR Overlay
|
||||
|
||||
---
|
||||
|
||||
Пользователь:
|
||||
надо учитывать что это - названия лекарств то есть ограниченный набор слов
|
||||
|
||||
Ассистент:
|
||||
Важное замечание. Это даёт два преимущества:
|
||||
|
||||
1. На сервере — нормализация через справочник.
|
||||
2. В промпте LLM — контекст ограниченного словаря.
|
||||
3. В Zone Classifier — дополнительные сигналы вроде `Rp.`, `Tab.`, `мг`, `мл`.
|
||||
|
||||
Результат должен нормализоваться по справочнику лекарственных средств, например через `rapidfuzz` и локальную SQLite-копию ГРЛС. Низкая уверенность помечается как `uncertain: true` и показывается пользователю для проверки.
|
||||
|
||||
Пользователь:
|
||||
- `gpt-oss-120b`
|
||||
|
||||
Ассистент:
|
||||
`gpt-oss-120b` — модель на GitHub Models / Azure AI Foundry с OpenAI-совместимым API. В серверной части вместо отдельного OCR API и дополнительного парсера можно использовать один вызов Vision LLM, если конкретный endpoint принимает изображения.
|
||||
|
||||
Пользователь:
|
||||
120 billions наврное это ознавает
|
||||
|
||||
Ассистент:
|
||||
Да, скорее всего «120B» означает 120 миллиардов параметров. Уточните: это конкретная модель, которая уже у вас развёрнута, или планируете деплоить? И это Vision-модель, принимающая изображения?
|
||||
|
||||
Пользователь:
|
||||
- `gpt-oss-120b`
|
||||
|
||||
Ассистент:
|
||||
Хорошо. Вот финальный обновлённый план:
|
||||
|
||||
## План: Android-приложение распознавания рецепта
|
||||
|
||||
**Суть:** снимок бланка → выделение зон → Vision LLM на сервере → AR-наложение распознанного текста. Зона ФИО/ДР — заблюрена, на сервер не отправляется.
|
||||
|
||||
### Архитектура
|
||||
|
||||
```
|
||||
Camera → [ML Kit Document Scanner] → aligned bitmap
|
||||
↓
|
||||
[ML Kit Text Recognition v2]
|
||||
↓
|
||||
[Zone Classifier]
|
||||
/ | \\
|
||||
PATIENT DATE MEDICATIONS
|
||||
(blur, ↓ ↓
|
||||
не шлём) POST /api/v1/recognize
|
||||
↓
|
||||
[FastAPI + gpt-oss-120b]
|
||||
один Vision LLM запрос →
|
||||
JSON {date, medications[]}
|
||||
↓
|
||||
[AR Overlay Renderer]
|
||||
```
|
||||
|
||||
### Клиент — Android / Kotlin / Compose
|
||||
|
||||
**Готовые:**
|
||||
- ML Kit Document Scanner
|
||||
- ML Kit Text Recognition v2
|
||||
- Ktor Client + kotlinx.serialization
|
||||
- Jetpack Compose + Material 3 + Coil Compose
|
||||
|
||||
**Писать самим:**
|
||||
- Zone Classifier для нескольких форм бланков
|
||||
- Form Detector
|
||||
- Privacy Masking
|
||||
- AR Overlay Renderer
|
||||
|
||||
### Сервер — Python / FastAPI
|
||||
|
||||
**Готовые:**
|
||||
- FastAPI + pydantic
|
||||
- openai Python SDK для gpt-oss-120b
|
||||
|
||||
**Писать самим:**
|
||||
- LLM-промпт с возвратом строго JSON
|
||||
- Валидация ответа pydantic
|
||||
- Retry при невалидном JSON
|
||||
- Нормализация названий лекарств по справочнику ГРЛС
|
||||
|
||||
### Протокол
|
||||
|
||||
Request `POST /api/v1/recognize`:
|
||||
|
||||
```
|
||||
zones: [
|
||||
{ type: "DATE", image: "<base64 JPEG>" },
|
||||
{ type: "MEDICATIONS", image: "<base64 JPEG>" }
|
||||
]
|
||||
```
|
||||
|
||||
Response:
|
||||
|
||||
```
|
||||
{
|
||||
date: "12.03.2025",
|
||||
medications: [
|
||||
{
|
||||
name: "Амоксициллин",
|
||||
raw: "Амоксицил",
|
||||
uncertain: false,
|
||||
dose: "500 мг",
|
||||
instructions: "3 р/день"
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
### Фазы
|
||||
|
||||
1. Capture
|
||||
2. Zone Detection + Privacy
|
||||
3. Server LLM OCR
|
||||
4. AR Overlay
|
||||
|
||||
### Ограниченный набор названий лекарств
|
||||
|
||||
Названия лекарств нужно проверять по справочнику, а не принимать ответ LLM без проверки. Рекомендуется хранить локальную SQLite-копию ГРЛС: МНН, торговые названия, формы выпуска и дозировки. Для сопоставления использовать `rapidfuzz`; при низком совпадении возвращать `uncertain: true`. Нельзя автоматически подменять сомнительное название без показа пользователю и возможности исправления.
|
||||
|
||||
Reference in New Issue
Block a user