Skip to content

iOS 快速入门指南

快速入门 iOS SDK 最简单的方法是下载并试用我们的 示例程式码。此外,您还可以按照本快速入门指南,快速建立您的首个 iOS 健康测评应用程式。

完成本指南后,我们强烈建议您遵循我们的 软体开发指南,以确保 Vitals™ SDK 产生的健康测评结果准确可靠。

SDK Installation

请按照 下载 页面中的说明安装 iOS SDK 并将其整合到您的专案中。

设定相机

整合 Vitals™ 健康测评(VHA) 中所述,第一步是设定相机。首先,建立一个新专案并按照以下说明操作。

相机权限

在开发 iOS 应用程式时,您需要在 Info.plist 档案中指定以下内容,以允许应用程式使用相机:

xml
<key>NSCameraUsageDescription</key>
<string>Use for measuring vital signs</string>

TIP 提示

Info.plist 中,字串 "Use for measuring vital signs" 是相机用途的范例描述。您应该根据应用的用途指定您自己的描述。

Vital Sign Camera

Vital Sign Camera 中所述,在 Vitals™ SDK 中,我们提供了一个名为 VitalSignCamera 的特制相机组件。要设定它,请在 Main.storyboard 中,将一个 View 拖放到 ViewController 中,将其约束到根视图,并将其类别设为 VitalSignCamera。例如:

设定 VitalSignCamera - Storyboard 示范

之后,将 VitalSignCamera 视图作为 IBOutlet 连接到您的 ViewController.swift。请求相机权限并配置相机。

swift
import UIKit
import VitalSignSDK

class ViewController: UIViewController {
    
    static let API_KEY = "__YOUR_API_KEY__"

    @IBOutlet weak var camera: VitalSignCamera!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        self.setupCamera()
    }

    private func setupCamera() {
        /* Vitals™ 云端服务配置 */
        let config = VitalSignEngineConfig(
            serverId: ServerId.awsEnterpriseProd,
            apiKey: Self.API_KEY
        )
        
        camera.requestPermission().done { [unowned self] in
            
            guard $0 else { return }
            
            self.camera.setup { camera in
                camera.isActive = true
                camera.config = config
            }
            
        }
    }
}

TIP 提示

在上述范例中,字串 __YOUR_API_KEY__ 应替换为您自己的 API 金钥。请联络我们以取得您的 API 金钥,它是存取 Vitals™ 云端服务的凭证。

运行应用程式,您现在应该能够看到相机预览。有关系统和相机设定的更多详细信息,请参阅 设定相机

获取用户健康档案

正如 整合 Vitals™ 健康测评(VHA) 中所述,我们必须收集用户的健康档案和病史数据,才能获得个人化的健康测评结果并提高测评的准确性。

首先,使用您收集的用户健康档案建立一个 UserInfo 物件。

swift
class ViewController: UIViewController {
    
    static let USER_ID = "__YOUR_USER_ID__"
    
    // ...

    private func setupCamera() {
        let userInfo = UserInfo(
            gender: .female,
            age: 30,
            userId: Self.USER_ID )

        // ...
    }
}

您可以将收集到的用户健康档案提供给 Vitals™ SDK,方法是在 setup() 程式码区块中将这些资讯提供给 VitalSignCamera 中的 userInfo 属性。例如:

swift
camera.requestPermission().done { [unowned self] in
    // ...
    self.camera.setup { camera in
        // ...
        camera.userInfo = userInfo
    }
}

运行应用程式,您现在应该可以看到相机预览了。

TIP 提示

在上面的范例中,字串__YOUR_USER_ID__应替换为您自己的使用者 ID。请联络我们以取得您的使用者 ID,该 ID 指定了 Vitals™ 云端服务的订阅方案。扫描所获得的生命体征会因订阅方案而异,每个方案都提供一组独特的生命体征。

更多详细信息,请参阅 获取用户健康档案 页面。

扫描生命体征

要开始扫描,您只需呼叫 VitalSignCamera 元件的 startScanning() API 即可。

首先,在 Main.storyboard 中新增一个开始按钮:

新增开始按钮 - Storyboard 示范

使用 IBAction 将开始按钮连接到您的 ViewController.swift,并呼叫 startScanning() API。

swift
class ViewController: UIViewController {

    // 我们已经准备好的相机参考
    @IBOutlet weak var camera: VitalSignCamera! 

    // ...
    
    @IBAction func onStartButtonClicked(_ sender: Any) {
        self.camera.startScanning()
    }
}

呼叫 API 后,元件将开始透过相机扫描人脸,持续时间为 30 秒。扫描成功后,将传回生命体征讯息。您可以透过 onVideoFrameProcessed 回呼函数记录扫描进度并观察任何错误。此回调函数以每秒 30Hz 的频率(此频率取决于相机的帧率)传回处理结果。

swift
camera.requestPermission().done { [unowned self] in
    // ...
    self.camera.setup { camera in
        // ...
        camera.onVideoFrameProcessed = onVideoFrameProcessed
    }
}

定义 onVideoFrameProcessed 函数来列印扫描进度:

swift
func onVideoFrameProcessed(result: ProcessResult) {
    /* 如果扫描正在进行,则列印扫描阶段和剩余秒数。 */
    if let stage = result.healthResult?.stage,
    stage != .idle,
    let remainingSec = result.healthResult?.remainingTime {
        print("扫描阶段 = \(stage), 剩余秒数 = \(remainingSec)")
    }

    /* 若有错误则列印 */
    if let error = result.healthResult?.error {
        print("错误 = \(error)")
    }
}

运行应用程式,将你的脸部置于相机预览的中央,点击“Start Scanning”按钮。将你的脸部移出相机预览范围,模拟「人脸遗失」错误。你应该在控制台中看到类似这样的内容:

扫描阶段 = collectingData, 剩余秒数 = 21.667988061904907
扫描阶段 = collectingData, 剩余秒数 = 21.63428807258606
[VSE Core][ERROR] Face lost
错误 = faceLost
错误 = faceLost

有关处理扫描过程的更多详细信息,请参阅 扫描生命体征 页面。

取得并显示健康测评结果

VitalSignCamera 组件会透过 onVideoFrameProcessed 回呼函数传回健康测评结果。在下面的示例程式码中,它会检查心率是否已准备好,并在准备好后将其显示在控制台中。

swift
/* 更新了 onVideoFrameProcessed 回呼函数 */
func onVideoFrameProcessed(result: ProcessResult) {
    // ...

    /* 取得心率结果 */
    if let health = result.healthResult?.health, let heartRate = health.vitalSigns?.heartRate {
        print("心率 = \(heartRate)")
    }
}

运行应用程式并进行扫描,30秒后,您将能够看到以下心率结果:

扫描阶段 = analyzingData, 剩余秒数 = 0.08395302295684814
扫描阶段 = analyzingData, 剩余秒数 = 0.05001401901245117
扫描阶段 = analyzingData, 剩余秒数 = 0.016833066940307617
心率 = 93.03858964365857
心率 = 93.03858964365857
心率 = 93.03858964365857

Vitals™ SDK 中提供了更多生命体征测评结果,我们也提供了测评结果的解读指南。更多信息,请参阅 取得并显示健康测评结果 页面。


🎉🎉🎉 恭喜! 🎉🎉🎉

您已完成您的第一个 Vitals™ 应用程式!


WARNING 重要提示

本指南仅提供使用 iOS SDK 的最小可行产品 (MVP),我们 Vitals™ 云端服务仍提供更多功能和更多操作,以确保测评结果准确可靠。例如:检查扫描条件、使用 信号质量 指标等等。更多详情,请参阅 软体开发指南 页面或 示例程式码