windowcapture
выпускная квалификационная работа · 2026

Разработка приложения для генерации текстовых отчётов на основе анализа скриншотов с помощью компьютерного зрения

Фёдорков Фёдор Геннадьевич · группа ИС50-11/3-23 · специальность 09.02.07
Московский приборостроительный техникум · РЭУ им. Г. В. Плеханова · руководитель Прищеп В. С.

WindowCapture — настольное приложение для Windows. Одно нажатие клавиши: экран замирает, нужная область выделяется сама, нейросеть Google Gemini пишет описание снимка, и в открытый документ Microsoft Word вставляется готовый абзац с картинкой и подписью «Рисунок N — наименование» по ГОСТ.

C# / .NET Framework 4.0WinAPI + P/Invoke Direct2DGemini REST API Word COMMedia Foundation
документы

Полный текст пояснительной записки и презентация к защите. PDF открывается прямо в браузере.

цифры проекта

Объём и характеристики готового приложения.

43,761
строк исходного кода
141
файлов в проекте
9
архитектурных слоёв
0,9 МБ
размер исполняемого файла
0
сторонних библиотек (NuGet)
<100 мс
отклик захвата экрана
как работает · путь одного скриншота

Шесть шагов от нажатия горячей клавиши до готового рисунка в документе. У каждого шага указан файл, где он реализован, — название можно найти в разделе «Исходный код».

01Горячая клавишаНизкоуровневый хук WH_KEYBOARD_LL перехватывает аккорд клавиш; защита от программных нажатий по флагу LLKHF_INJECTED — App/Controller.cs
02Заморозка экранаСнимок всего виртуального рабочего стола через GDI BitBlt; полноэкранный статичный оверлей — UI/FrozenOverlay.cs
03Компьютерное зрениеКарта границ оператором Собеля (кэшируется), BFS-заливка от курсора с адаптивным порогом, расширение области колесом — Detection/Detector.cs
04Редактор аннотацийDirect2D с откатом на GDI+: стрелки по кривым Безье, подсветки, маркеры, текст, размытие, undo — UI/EditorForm.cs
05Нейросеть GeminiPNG в Base64, POST на generateContent; цепочка резервных моделей, статусы Working/RateLimited/Broken — Integration/GeminiIntegration.cs
06Вставка в WordПозднее связывание COM без interop-сборок: AddPicture, InsertCaption «Рисунок N», стили по ГОСТ — Integration/WordIntegration.cs
модули приложения

Код разбит на изолированные подсистемы. Нажмите на любой блок — откроется список его файлов, а из него — сам код с подсветкой.

Entry/
1 файлов · 88 строк

Точка входа: STAThread, DPI per-monitor, TLS 1.2 для .NET 4.0, выбор режима запуска

App/
6 файлов · 1,588 строк

Ядро: низкоуровневые хуки клавиатуры и мыши, контроллер захвата, трей, режимы приложения

UI/
38 файлов · 17,771 строк

Интерфейс: редактор EditorForm (14 partial), замороженный оверлей, канва аннотаций, настройки

Detection/
2 файлов · 1,828 строк

Компьютерное зрение: оператор Собеля, BFS-заливка, адаптивный порог, расширение области

Effects/
3 файлов · 1,792 строк

Рендеринг: Direct2D со fallback на GDI+, неразрушающие слои эффектов, размытие

Integration/
3 файлов · 3,011 строк

Интеграции: Gemini REST API с фолбэком моделей, Word через позднее связывание COM, DOCX

Helpers/
25 файлов · 7,730 строк

Автокоррекция текста (noisy channel, SymSpell, фильтр Блума, нейросети) и утилиты

Native/
5 файлов · 1,810 строк

P/Invoke и COM-обёртки: WinAPI, Direct2D, Media Foundation, WASAPI, DirectShow

Recording/
3 файлов · 1,863 строк

Запись экрана: BitBlt-цикл, H.264 через Media Foundation, fallback WMV3 / MJPEG, AVI

Models/
12 файлов · 1,717 строк

Структуры данных: настройки, привязки клавиш, аннотации (Безье), параметры Gemini

Ocr/
2 файлов · 87 строк

OCR-хелпер на .NET 8: Windows.Media.Ocr, вызывается отдельным процессом (Ctrl+T)

Spell/
4 файлов · 341 строк

Python-сервер орфокоррекции: SAGE fredt5-distilled-95m, реранжировка rubert-tiny2

Tip/
5 файлов · 672 строк

TSF Text Input Processor на C++: правка слова in-place через ITfRange (эксперимент)

APO/
2 файлов · 199 строк

Audio Processing Object на C++: подмешивание звука саундпада в микрофон (эксперимент)

Tools/
16 файлов · 1,877 строк

Обучение моделей: тренеры нейросетей на C# и PyTorch/CUDA, сборка словарей и биграмм

Docs/
10 файлов · 1,136 строк

Проектная документация: архитектура, исследования, дизайн подсистем (Markdown)

ключевые алгоритмы

Главные алгоритмы работы с изображениями и текстом. Ссылка под каждой карточкой ведёт на точное место в коде, вплоть до строки.

Оператор Собеля (1968)

Свёртка 3×3 с ядрами Gx, Gy по каждому каналу RGB; градиент G = sqrt(Gx² + Gy²), итог — максимум каналов. Строит карту границ для умного выделения.

Detection/Detector.cs — ComputeEdgeMap, строка 684
Заливка обходом в ширину

BFS через Queue<Point> от точки под курсором; граница — ребро Собеля или перепад цвета выше адаптивного порога (80-й перцентиль окрестности).

Detection/Detector.cs — Detect, строка 127
Кубические кривые Безье (1959–1962)

B(t) = (1−t)³P0 + 3(1−t)²tP1 + 3(1−t)t²P2 + t³P3. Стрелки редактора; наконечник ориентируется по касательной — производной кривой.

Models/ArrowAnnotation.cs — GetBezierPoint
Фильтр Блума (1970)

Вероятностная проверка слова по словарю в 1,5 млн словоформ: 3 хеша MurmurHash3, 16 бит на слово, 3 МБ вместо 60 МБ. Ложноотрицательных не бывает.

Helpers/BloomFilter.cs
Цепочка резервных моделей

Фолбэк по списку моделей Gemini со статусами Working / RateLimited / Broken, ротация API-ключей при HTTP 429, запоминание последней рабочей модели.

Integration/GeminiIntegration.cs
Позднее связывание COM

Type.GetTypeFromProgID + InvokeMember: управление Word без interop-сборок и привязки к версии Office; освобождение объектов через Marshal.ReleaseComObject.

Integration/WordIntegration.cs