Back to Home

iOS app for reading blood pressure from blood pressure monitor: development and OCR

The article describes the process of developing an iOS app for reading blood pressure readings from a blood pressure monitor via smartphone camera. It covers the choice of technology stack, OCR implementation using Vision framework, local data storage, and project architecture. The app works autonomously, without dependency on cloud services.

iOS app development: reading blood pressure from blood pressure monitor with camera
Advertisement 728x90

Building an iOS App to Read Blood Pressure from Tonometer via Camera: Tech Stack and OCR Implementation

Developing an iOS app that reads blood pressure readings from a tonometer using your smartphone's camera demands careful tech stack selection and precise OCR implementation. This approach lets users track their health without relying on cloud services or external APIs, ensuring full offline capability and data privacy.

Choosing the Tech Stack for iOS Development

For an app that scans blood pressure from a tonometer, picking the right tech stack was crucial. We considered cross-platform options like React Native and Flutter, but for tasks needing top-tier OCR accuracy and direct camera access, going native was the way to go. Key decision factors included:

  • OCR Quality: Apple's native Vision framework delivers spot-on text recognition right on the device.
  • Camera Access: AVFoundation gives direct control over the camera, essential for real-time video processing.
  • Local Data Storage: SwiftData offers an ORM-like interface without writing SQL queries.

The final stack includes:

Google AdInline article slot
  • SwiftUI for declarative UI building.
  • Vision framework for OCR via VNRecognizeTextRequest.
  • SwiftData for local database management.
  • Swift Charts for visualizing blood pressure trends.
  • AVFoundation for camera handling (detailed in part two).

Project Architecture and Data Model

The project uses MVVM (Model-View-ViewModel) architecture, standard for SwiftUI apps. It separates app logic from the UI, making testing and maintenance a breeze. The data model leverages SwiftData's @Model annotation for automatic local storage without manual migrations. Here's a sample model structure:

@Model
class BloodPressureReading {
    var systolic: Int
    var diastolic: Int
    var heartRate: Int
    var timestamp: Date
}

Implementing OCR and Data Validation

OCR is powered by the Vision framework, with VNRecognizeTextRequest processing camera images. The real challenge isn't text recognition—it's filtering out false positives from glare, background noise, or irrelevant text. We tackled this with strict post-processing rules:

  • Rejecting impossible values (e.g., blood pressure over 300 mmHg).
  • Applying algorithms like NMS from object detection to eliminate duplicates.
  • Fine-tuning validation based on real-world test data.

App Interface and Features

The main screen features:

Google AdInline article slot
  • A chart of systolic and diastolic trends over the past 7 days, powered by Swift Charts.
  • A card showing the latest reading with color-coded indicators (green for normal, red for high).
  • A button to start a new scan via camera.

The app runs fully offline—no internet or accounts needed—keeping your data private and secure.

Key Takeaways

  • Native SwiftUI + Vision stack delivers high OCR accuracy and speed on iOS devices.
  • SwiftData's local storage cuts cloud dependencies and boosts security.
  • Robust OCR validation filters junk data for reliable readings.
  • MVVM architecture streamlines development and testing by separating logic from UI.
  • Full offline support shines when external services are unreliable.

— Editorial Team

Advertisement 728x90

Read Next