Neuro Scan — это веб-приложение, разработанное для эффективного сканирования документов и изображений с последующим распознаванием текста (OCR). Проект позволяет пользователям быстро загружать изображения из галереи или делать снимки с помощью камеры, а затем извлекать из них текстовую информацию. Приложение предназначено для упрощения работы с бумажными документами, оцифровки информации и обеспечения легкого доступа к распознанному тексту.
Основное предназначение приложения Neuro Scan:
- Быстрое распознавание текста: Предоставление удобного инструмента для извлечения текста из любых изображений.
- Оцифровка документов: Помощь в переводе печатных документов в редактируемый цифровой формат.
- Удобство использования: Интуитивно понятный интерфейс для пользователей любого уровня подготовки.
- Повышение продуктивности: Сокращение времени на ручной ввод данных и поиск информации в бумажных источниках.
Приложение обеспечивает распознавание текста, используя комбинацию клиентской части и серверной обработки для повышения точности и качества результатов.
- Выбор/Сканирование изображения: Пользователь может загрузить одно или несколько изображений из своей галереи или использовать встроенную функцию сканирования для фотографирования документов.
- Предварительный просмотр и подтверждение: Перед отправкой на сервер, приложение отображает выбранные изображения в диалоге подтверждения, где пользователь может добавить или удалить файлы.
- Отправка на сервер и предобработка: После подтверждения, выбранные изображения отправляются на сервер. На сервере происходит предобработка изображений для удаления "шума" и улучшения их качества (например, коррекция яркости, контраста, выравнивание).
- Серверное распознавание текста (OCR): Предобработанные изображения прогоняются через движок OCR (например, Tesseract) на сервере для извлечения текстовой информации.
- Проверка орфографии и постобработка: Распознанный текст проходит проверку орфографии на сервере для исправления возможных ошибок и повышения читаемости.
- Получение и отображение результатов: Обработанный текст и, при необходимости, исходное изображение отправляются обратно пользователю и отображаются на специальном экране результатов. Пользователь может просмотреть текст, скопировать его в буфер обмена.
- История и управление: Приложение ведет историю сканирований, позволяя пользователям просматривать ранее распознанные документы и их тексты.
- Сканирование с камеры: Мгновенное фотографирование документов с помощью устройства.
- Загрузка из галереи: Выбор существующих изображений для распознавания.
- Поддержка русского языка: Распознавание текста на русском языке (
rustesseract-lang). - Пакетное сканирование: Возможность сканировать и обрабатывать несколько изображений за одну операцию.
- Просмотр результатов: Отображение исходного изображения и распознанного текста.
- Копирование текста: Функция копирования распознанного текста в буфер обмена.
- История сканирований: Хранение и просмотр всех предыдущих сканирований с деталями.
- Настройки профиля: Редактирование пользовательских данных, изменение фотографии профиля.
- Настройки приложения: Возможность настройки языка и других параметров.
- Интеграция с облачными хранилищами (заглушки): Предусмотрены элементы интерфейса для привязки аккаунтов Google Drive, Dropbox, OneDrive.
- Навигация: Удобная навигация между главными экранами (Главная, История, Настройки) с помощью нижней панели навигации.
- React: Основной фреймворк для создания пользовательского интерфейса.
- React Router DOM: Для маршрутизации и навигации по различным экранам приложения.
- HTML5/CSS3: Для структурирования содержимого и стилизации компонентов.
- JavaScript (ES6+): Язык программирования для логики приложения.
Для запуска фронтенд-части проекта локально выполните следующие шаги:
- Клонируйте репозиторий (если применимо, иначе пропустите этот шаг и перейдите в папку проекта):
git clone <URL_репозитория> cd ocr-scanner
- Перейдите в корневую директорию Frontend (фактически
src):cd src - Установите зависимости (если не установлено):
npm install
- Запустите приложение в режиме разработки:
Приложение будет доступно по адресу http://localhost:3000 (или другому порту, если 3000 занят).
npm start
Серверная часть приложения Neuro Scan написана на Python с использованием фреймворка FastAPI. Она отвечает за всю тяжелую логику обработки изображений, распознавания текста и проверки орфографии, разгружая клиентскую часть и обеспечивая высокую производительность и точность.
- Загрузка файлов (
UploadService): При получении изображений с клиентской части,UploadServiceотвечает за их безопасную загрузку и сохранение во временной директории на сервере с уникальными именами файлов. - Предобработка изображений (
ProcessingService): Загруженные изображения передаются вProcessingService, который выполняет следующие операции:- Чтение изображения: Загрузка изображения с диска.
- Преобразование в оттенки серого: Для улучшения качества распознавания.
- Коррекция наклона (Deskew): Автоматическое определение и исправление угла наклона текста на изображении с использованием библиотеки
deskewиscikit-image, что значительно повышает точность OCR. - Сохранение обработанных изображений: Обработанные изображения сохраняются во временную директорию для дальнейшего OCR.
- Распознавание текста (OCR) (
OcrScanner): Обработанные изображения поступают вOcrScanner, который использует библиотекуEasyOCRдля извлечения текста. EasyOCR — это мощный инструмент, поддерживающий множество языков, включая русский, и способный эффективно работать с различными шрифтами и форматами. - Проверка орфографии и постобработка (
CorrectingErrors): Распознанный текст передается вCorrectingErrorsсервис. Этот сервис использует библиотекуlanguage-tool-pythonдля проверки орфографии и грамматики извлеченного текста. Это помогает исправить распространенные ошибки распознавания и предоставить пользователю более чистый и точный результат. - Хранение данных: Бэкенд также включает репозитории и модели данных на основе SQLModel, которые отвечают за взаимодействие с базой данных (SQLite в текущей конфигурации) для хранения информации о пользователях, документах, истории сканирований и настроек.
- FastAPI: Высокопроизводительный фреймворк для построения API на Python.
- Uvicorn: Асинхронный сервер ASGI для запуска FastAPI.
- SQLModel: Библиотека для взаимодействия с базой данных (на основе SQLAlchemy и Pydantic).
- OpenCV (
opencv-python), scikit-image, Pillow, deskew: Библиотеки для предобработки изображений (удаление шума, улучшение качества, коррекция наклона). - EasyOCR: Инструмент для оптического распознавания символов (OCR) на сервере.
- language-tool-python: Инструмент для проверки орфографии и грамматики.
Сервер предоставляет следующие основные API эндпоинты:
POST /upload: Принимает файлы изображений от клиента для загрузки на сервер.- Метод:
POST - Параметры:
file(UploadFile) - Возвращает: информацию о загруженном файле (имя, путь, статус).
- Метод:
POST /process: Запускает процесс предобработки всех загруженных изображений.- Метод:
POST - Возвращает: Результаты обработки изображений.
- Метод:
POST /correct: Запускает процесс проверки орфографии распознанного текста.- Метод:
POST - Возвращает: Список найденных ошибок и, возможно, предложений по исправлению.
- Метод:
/docs: Документация API в формате Swagger UI (автоматически генерируется FastAPI)./redoc: Документация API в формате ReDoc (автоматически генерируется FastAPI).
Проект использует SQLite в качестве базы данных по умолчанию, настроенной через SQLModel и SQLAlchemy с асинхронным драйвером aiosqlite. Модели данных определены в back/src/models/.
Для запуска бэкенд-части проекта локально выполните следующие шаги:
- Перейдите в корневую директорию Backend (фактически
back):cd back - Создайте и активируйте виртуальное окружение (рекомендуется):
python -m venv venv # Для Windows .\venv\Scripts\activate # Для macOS/Linux source venv/bin/activate
- Установите зависимости бэкенда (если не установлено):
pip install -r requirements.txt
- Запустите сервер:
Сервер будет доступен по адресу http://localhost:8000. Документация API (Swagger UI) будет доступна по адресу http://localhost:8000/docs.
uvicorn main:app --host 0.0.0.0 --port 8000 --reload
Проект имеет следующую структуру каталогов:
Neuro-Scan/
├── Backend/ # Серверная часть приложения
│ ├── src/ # Исходный код бэкенда
│ │ ├── config/ # Настройки приложения (БД, проекта)
│ │ │ └── database/
│ │ │ └── project_config.py
│ │ ├── models/ # Модели данных (SQLModel, Pydantic)
│ │ ├── repositories/ # Репозитории для работы с БД
│ │ ├── services/ # Бизнес-логика (загрузка, обработка, OCR, исправление ошибок)
│ │ │ ├── correcting_service.py # Сервис для проверки орфографии
│ │ │ ├── ocr_service.py # Сервис для OCR
│ │ │ ├── processing_service.py # Сервис для предобработки изображений
│ │ │ └── upload_service.py # Сервис для загрузки файлов
│ │ ├── routes.py # API роуты (FastAPI)
│ │ └── __init__.py
│ ├── main.py # Точка входа для серверного приложения
│ └── requirements.txt # Зависимости Python
├── Frondend/
├── src/ # Фронтенд часть приложения
│ │ ├── assets/ # Изображения и иконки приложения
│ │ ├── components/ # Переиспользуемые UI-компоненты (Button, Header, BottomNav и т.д.)
│ │ │ ├── BottomNav.js
│ │ │ ├── Button.js
│ │ │ ├── Header.js
│ │ │ ├── HistoryItem.js
│ │ │ ├── ProPower.js
│ │ │ └── ScanConfirmationDialog.js
│ │ ├── screens/ # Экраны/страницы приложения
│ │ │ ├── DocumentDetailScreen.js
│ │ │ ├── EditProfileScreen.js
│ │ │ ├── HistoryScreen.js
│ │ │ ├── ScanResultScreen.js
│ │ │ └── SettingsScreen.js
│ │ ├── styles/ # CSS-стили для компонентов и экранов
│ │ ├── App.js # Главный компонент приложения, маршрутизация
│ │ └── index.js # Точка входа в приложение