8.7 KiB
Пользователь: /home/naeel/MED/recipe/PLAN/recipe1.png - пример рецепта /home/naeel/MED/recipe/PLAN/gemini.md - то что жемини советует
надо - план создания приложения для андроида, которое
- будет вычленять прямоукльник с датой рецепта и прямоугольник с названиями/дозировками лекарств и отправлять выделенное на сервер для дальнейшей обработки
- после обработки сервер перешлёт обратно в приложение распознынне данные, которое приложение выведет на экран на место рукописного текста пример - как гугл переводчик в режиме распознавания
ФИО ДР пациента не должны быть копированы, их прямоугольник не доолжен выделяться. или - выделяться но явно показываться что не используется, заблюрены или как то иначе
план - коротко, без воды, понятно, НИКАКОГО КОДА, кодить будут агенты, от тебя - архитектурные идеи, что гового из библиотек можно использовать, что - писать самим
задание понятно ?
Ассистент: Задание понятно. Изучил рецепт и план 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.serializationJetpack Compose + Material 3— UICoil Compose— отображение bitmap
Писать самим:
- Zone Classifier — эвристика: y-позиция блока + ключевые слова ("Rp.", "Ф.И.О.", "Дата рождения")
- Privacy Masking — Compose Canvas: blur overlay на PATIENT-зоне
- AR Overlay Renderer — Compose Canvas с наложением текста поверх изображения
Сервер — Python / FastAPI
Готовые:
FastAPI + pydantic— APIGoogle Cloud Vision APIилиAzure Computer Vision— OCR рукописиTesseract 5 + LSTM— self-hosted альтернатива
Писать самим:
- Обёртка OCR API
- Парсер структуры лекарств
Фазы
- Capture + Alignment
- Zone Detection + Privacy
- Server OCR
- AR Overlay
Пользователь: надо учитывать что это - названия лекарств то есть ограниченный набор слов
Ассистент: Важное замечание. Это даёт два преимущества:
- На сервере — нормализация через справочник.
- В промпте LLM — контекст ограниченного словаря.
- В 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 р/день"
}
]
}
Фазы
- Capture
- Zone Detection + Privacy
- Server LLM OCR
- AR Overlay
Ограниченный набор названий лекарств
Названия лекарств нужно проверять по справочнику, а не принимать ответ LLM без проверки. Рекомендуется хранить локальную SQLite-копию ГРЛС: МНН, торговые названия, формы выпуска и дозировки. Для сопоставления использовать rapidfuzz; при низком совпадении возвращать uncertain: true. Нельзя автоматически подменять сомнительное название без показа пользователю и возможности исправления.