Files
recipe/PLAN/chat_messages.md
T

205 lines
8.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
Пользователь:
/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`. Нельзя автоматически подменять сомнительное название без показа пользователю и возможности исправления.