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
- 添加新的 CoreML 模型 – 将您的 .mlmodel 复制到项目中,创建
LuminaModel实例,然后将其追加到streamingModels。 - 与 SwiftUI 集成 – 用
UIViewControllerRepresentable包装LuminaViewController,并公开一个@Binding以控制相机状态。 - 性能调优 – 调整
frameRate、resolution或maxZoomScale以匹配您的设备能力。 - 开放问题并贡献 – 本仓库遵循标准 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, 相机, 开源, 机器学习, 图像识别, 摄影, 视频, 二维码