⟨/⟩ 60_Epics/RecognitionStand/UseCases/CompareOcrEngines/CompareOcrEnginesUseCase.cs

77 строк · в начало

using Ban.Sdaid.Notation.Documents;

namespace Ban.Sdaid.Icd.Epics.RecognitionStand.UseCases
{
    /// <summary>Use-case: сравнение движков распознавания текста на полях карты.</summary>
    public class CompareOcrEnginesUseCase : IUseCaseDocument, IHasStructuralLinks
    {
        public static string _refName = "сценарий «Сравнение движков распознавания»";

        public string Name => "Сравнение движков распознавания текста";

        public string Description =>
            @"Аналитик прогоняет одни и те же поля/страницы через разные движки (Qwen-VL, Yandex OCR), чтобы выбрать пригодный для вида данных — печатный или рукописный текст.";

        public string Version => "0.1";
        public string Status => "draft";
        public string[] Comments => new[]
        {
            "2026-08-24. Первичная фиксация: OCR-лаборатории.",
        };

        public string PrimaryActor => "Аналитик";

        public SdaidLink[] Links => new[]
        {
            Rel.Realizes<EPIC_RecognitionStand>(),
        };

        public static string S1_Given = """
            ## Given

            - Открыты OCR-лаборатории (`ocr-labs/`) и/или экран применения через локальный прокси.
            - Реквизиты облачных API берутся из `secrets.local.js` (проходят насквозь, не сохраняются).
            - Есть скан или вырезки полей карты.
            """;

        public static string S2_When = """
            ## When

            1. Аналитик выбирает движок текста: Qwen-VL (локальный VLM) или Yandex OCR (модель
               рукописного текста).
            2. Прогоняет одни и те же поля и сравнивает распознанные значения по читаемому списку
               и сырому JSON.
            3. При необходимости — сверяет grounding (координаты найденного) и подсветку областей.
            """;

        public static string S3_Then = """
            ## Then

            - Ясно, какой движок пригоден для данного вида полей: печатный текст надёжно берёт Yandex,
              рукопись — Yandex-handwritten или Qwen-VL; на мелком низком разрешении лидирует Qwen-VL.
            - Выбор фиксируется как рекомендация для продуктовой обработки.
            """;

        public static string S4_Alternatives = """
            ## Альтернативы и ошибки

            | Ситуация | Поведение |
            |---|---|
            | Облачный Yandex недоступен или лимит | Остаётся локальный Qwen-VL; Yandex — один запрос на страницу против частых мелких |
            | Рукопись неразборчива | VLM-промт запрещает выдумывать: пустая строка вместо догадки |
            | Нужны координаты найденного | Yandex отдаёт измеренные боксы слов (в отличие от оценочного grounding VLM) |
            """;

        public static string S5_Trace = $"""
            ## Трассировка

            | Шаг | Инструмент |
            |---|---|
            | Сравнение движков текста, grounding, подсветка | `ocr-labs/`, `editor/apply-template.html` |
            | Прокси к Yandex/Qwen | `server/proxy.py` |

            Эпик — {nameof(EPIC_RecognitionStand)}.
            """;
    }
}