Lumina:用于 CoreML 集成成像的 Swift 相机库

什么是 Lumina?

Lumina 是一个开源 Swift 包,只需一行代码即可将 iPhone 变成完整功能相机系统。该库基于 Apple 的 AVFoundation、Vision 和 CoreML 框架构建,但将低级实现隐藏在一个简洁、Swift 友好的 API 背后。结果是一套 SDK:

  • 捕获静态照片、Live Photo、视频和深度数据。
  • 将每一帧实时传输给代理——非常适合实时图像处理。
  • 整合任何兼容 CoreML 的模型,并在视频帧的同时流式传输预测结果。
  • 开箱即用地检测二维码、条形码和人脸。
  • 提供易于调整的 UI,且可以替换默认相机控件。

为什么使用 Lumina? - 消除 AVFoundation 代码模板。 - 快速原型化基于 ML 的相机功能。 - 专注于应用逻辑,而非相机内部实现。 - 享受维护良好、MIT 许可、兼容 iOS 13+ 的库。


快速开始

1. 安装包

在 Xcode 中 → File → Add Packages… → 输入 URL:

https://github.com/dokun1/Lumina.git

选择 Latest Release 并将库添加到您的目标。

提示: 如果需要确定性构建,也可以固定特定 tag。

2. 添加所需权限

在您的 Info.plist 中添加以下键:

<key>NSCameraUsageDescription</key>
<string>我们需要相机权限来扫描产品。</string>
<key>NSMicrophoneUsageDescription</key>
<string>我们需要麦克风权限来录制视频。</string>

3. 添加视图控制器

import UIKit
import Lumina

class CameraDemoViewController: UIViewController, LuminaDelegate {
    private var cameraVC: LuminaViewController!

    override func viewDidLoad() {
        super.viewDidLoad()
        cameraVC = LuminaViewController()
        cameraVC.delegate = self
        cameraVC.setShutterButton(visible: true)
        cameraVC.setTorchButton(visible: true)
        // 可选:插入 CoreML 模型
        if let model = try? MobileNet().model {
            cameraVC.streamingModels = [LuminaModel(model: model, type: "MobileNet")]
        }
        present(cameraVC, animated: true, completion: nil)
    }

    // MARK: – LuminaDelegate
    func captured(stillImage: UIImage, livePhotoAt: URL?, depthData: Any?, from controller: LuminaViewController) {
        print("照片已捕获: \(stillImage.size)")
        controller.dismiss(animated: true, completion: nil)
    }

    func streamed(videoFrame: UIImage, with predictions: [LuminaRecognitionResult]?, from controller: LuminaViewController) {
        guard let predictions = predictions else { return }
        var overlayText = ""
        for pred in predictions {
            guard let best = pred.predictions?.first else { continue }
            overlayText += "\(pred.type): \(best.name) (\(String(format: \"%.2f\", best.probability * 100))%)\n"
        }
        controller.textPrompt = overlayText
    }

    func dismissed(controller: LuminaViewController) {
        controller.dismiss(animated: true, completion: nil)
    }
}

就是这样!点击快门按钮即可拍照,代理会收到图像,如果你已连接模型,便会在每一帧上实时显示预测结果。


功能概览

功能 启用方式 预期效果
单张照片 cameraVC.recordsVideo = false 快速拍摄一张照片
Live Photo cameraVC.captureLivePhotos = true; cameraVC.resolution = .photo 具有深度感的丰富媒体
视频录制 cameraVC.recordsVideo = true 录制 1080p 或 4K 视频
深度流 cameraVC.captureDepthData = true; cameraVC.resolution = .photo 后期处理深度图
二维码/条形码 cameraVC.trackMetadata = true 自动元数据回调
人脸检测 同二维码/条形码 高亮显示帧中的人脸
CoreML 实时识别 cameraVC.streamingModels = [...] 实时物体识别
自定义 UI cameraVC.setShutterButton(visible: false) 替换默认控件
代理 实现 LuminaDelegate 钩入所有捕获事件

仓库中的示例应用演示了所有功能,您可以在 Xcode 的 Scene Editor 中自行实验。


扩展 Lumina

  1. 添加新的 CoreML 模型 – 将您的 .mlmodel 复制到项目中,创建 LuminaModel 实例,然后将其追加到 streamingModels
  2. 与 SwiftUI 集成 – 用 UIViewControllerRepresentable 包装 LuminaViewController,并公开一个 @Binding 以控制相机状态。
  3. 性能调优 – 调整 frameRateresolutionmaxZoomScale 以匹配您的设备能力。
  4. 开放问题并贡献 – 本仓库遵循标准 README 规范;欢迎 fork、添加测试或改进文档。

Lumina 的优势

评价标准 Lumina 竞争者
许可证 MIT(开源、宽松的) 许多竞争者是商业或宽松许可,但 Lumina 的许可证是最直接的之一
模板 极简(单文件控制器) 其他需要多类来管理会话
功能集 单一库实现 CoreML、深度、Live Photo、二维码/人脸识别 大多数仅关注相机或机器学习,未兼顾两者
文档 示例应用 + 带代码片段的 README 类似项目的文档质量参差不齐

如果您正在构建需要相机和 AI 功能的 iOS 应用,Lumina 让您在数分钟内完成原型,并保持代码库简洁。


立即开始

  • 从 GitHub 克隆:git clone https://github.com/dokun1/Lumina.git
  • 浏览 Sample 应用,亲身体验演示。
  • 阅读贡献指南,若想添加新功能或修复 bug。
  • 将 Lumina 引入您的项目,明天就开始打造更智能的相机。

有疑问? 在 GitHub 讨论版块提问,或通过 @dokun1 关注推特。祝编码愉快!

Lumina:用于 CoreML 集成成像的 Swift 相机库

Lumina 是一款轻量、经过实战检验的 Swift 框架,为 iOS 开发者提供即插即用的相机系统,并支持 CoreML 模型流式、二维码/条形码扫描、人脸检测、深度数据和视频捕获。不需要 AVFoundation 代码模板,只需使用视图控制器、示例应用和少量 API 调用即可快速入门。无论您是在构建具备实时商品识别的零售应用,还是具备深度感知肖像的相册日记,Lumina 都能让您专注业务逻辑,底层相机实现交由它来处理。

swift, coreml, iOS, 相机, 开源, 机器学习, 图像识别, 摄影, 视频, 二维码

原创文章: 查看原文

分享本文