📱 Подписаться
IT и цифровая трансформация

BP Tracker: считываем давление с тонометра камерой iPhone. Часть 1 — выбор стека и первый экран

📰 Habr 👁️ 3 просмотров

Alexandr-Shklyaev43 минуты назад

BP Tracker: считываем давление с тонометра камерой iPhone. Часть 1 — выбор стека и первый экран

Уровень сложностиСреднийВремя на прочтение3 минОхват и читатели851Swift*iOS*Xcode*AR и VRТуториалИз песочницыМногие приложения для здоровья в России перестали нормально работать. Omron — одно из них. А давление мерить надо каждый день. Поэтому я решил сделать своё iOS-приложение, которое через камеру считывает показания с любого тонометра, сохраняет их и строит графики динамики.

Я Senior CV-инженер — компьютерное зрение моя основная работа. Так что OCR с дисплея тонометра технически не должен был стать проблемой. Но как iOS-разработчик я — полный ноль. Xcode открыл впервые. Swift видел мельком. Это честный рассказ о том, как это выглядит изнутри.

И да, я делаю open source приложение за свободу здоровья от политики — и при этом только под iOS. Ирония не ускользнула. Но это open source — найдётся кто-нибудь с Android-девайсом и свободным вечером 🙂

Постановка задачи

Приложение должно:

• Считывать показания (систола / диастола / пульс) с дисплея тонометра через камеру
• Сохранять историю локально — никакого облака, никаких аккаунтов
• Показывать график динамики давления за неделю
• Работать без интернета и без зависимости от внешних сервисовПоследний пункт принципиален: если приложение зависит от чьего-то сервера — оно снова может перестать работать в любой момент.

Выбор стека: почему не React Native

Первый инстинкт — взять React Native, есть небольшой опыт с React. Но после честного разбора вариантов выбор стал очевиден:

SwiftUI + VisionFlutterReact NativeOCR качество⭐⭐⭐⭐⭐ нативный Vision⭐⭐⭐ плагины⭐⭐⭐ ML KitКамераAVFoundation, прямой доступХорошаяСредняяCore ML (своя модель)НативноPlatform channelНативный модульFlutter и React Native — кроссплатформенные фреймворки. Но мне нужен только iOS, то есть их главное преимущество просто не нужно. А проигрывают они нативному стеку по самому важному пункту — качеству OCR и доступу к камере.

Итоговый стек:

• SwiftUI — декларативный UI (оказался очень похож на React концептуально)
• SwiftData — локальная БД, аналог ORM, никакого SQL
• Apple Vision framework — on-device OCR через VNRecognizeTextRequest
• Swift Charts — встроенная визуализация, iOS 16+
• AVFoundation — прямой доступ к камере (во второй части)Ноль внешних зависимостей. Ничего не заблокируется.

Архитектура проекта

MVVM — стандартный паттерн для SwiftUI. Логика отделена от UI, каждый слой тестируется независимо.

Модель данных

Аннотация @Model — это как декоратор в Python. Говоришь SwiftData: «сохраняй объекты этого класса в локальную БД автоматически». Никакого SQL, никаких миграций руками.

Главный экран

Концепция простая: по центру — график за последние 7 дней, внизу — карточка с последним измерением, и большая кнопка + для нового считывания.

OCR: валидация важнее распознавания

VNRecognizeTextRequest — готовая Apple-модель, аналог pretrained YOLO. Запускаешь inference, получаешь текст. Но главная проблема OCR на LCD-дисплеях — не распознавание, а ложные срабатывания. Фон, блики, соседние надписи — всё это попадает в результат.

Решение то же, что и в детекции объектов: post-processing с жёсткими ограничениями:

Физиологически невозможные значения отбрасываем сразу — точно как NMS убирает лишние боксы в object detection. Понятно, что это лишь база. Точные параметры и алгоритмы будем настраивать в ходе теста на инференсе.За один вечер с нуля на незнакомом языке получили:

• ✅ Работающая локальная база данных
• ✅ График систолы и диастолы с линией нормы
• ✅ Карточка последнего измерения с цветовым индикатором
• ✅ Весь OCR-сервис с валидацией

А вот так выглядит первая версия интерфейсаКод на GitHub: Alexandr-Shklyaev/bp-trackerВ следующей части подключаем камеру через AVFoundation, строим real-time OCR пайплайн и учим приложение находить ROI с дисплеем тонометра на кадре.Теги:• swift
• swiftui
• ios
• ocr
• computer vision
• vision framework
• swiftdata
• swift charts
• avfoundation
• открытый исходный кодХабы:• Swift
• iOS
• Xcode
• AR и VR

Получайте больше инсайтов о систематизации бизнеса

Подписывайтесь на Telegram-канал Business Operations — ежедневные материалы о бизнес-процессах, операционном управлении и повышении эффективности

💬 Подписаться на канал