Lumina: Swift Camera Library for CoreML Integrated Imaging

What is Lumina?

Lumina は、Swift のオープンソースパッケージで、1 行コードで iPhone をフル機能のカメラシステムに変えます。Apple の AVFoundationVisionCoreML フレームワークをベースに、低レベルの処理をクリーンで Swift 風の API の背後に隠しています。結果として、以下の機能を備えた SDK が実現します。

  • 静止画像、ライブ写真、動画と深度データの取得。
  • すべてのフレームをデリゲートへストリーム – リアルタイム画像処理に最適。
  • CoreML 互換モデルを統合し、予測を動画フレームと同時にストリーム。
  • QR コード・バーコード・顔認識を標準でサポート。
  • カスタマイズしやすい UI を公開し、デフォルトのカメラコントロールを置き換え可能。

Lumina を選ぶ理由 • AVFoundation のボイラープレートを排除。 • ML 搭載カメラ機能を迅速にプロトタイピング。 • カメラ内部に関わらず、アプリロジックに集中可能。 • MIT ライセンスで、iOS 13+ で動作するよく維持されたライブラリを利用可。


Quick Start

1. パッケージをインストール

Xcode → File → Add Packages… → URL を入力:

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

最新リリースを選び、ターゲットにライブラリを追加します。

Tip: デターミニスティックビルドを望む場合は、特定のタグを固定できます。

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)
        // Optional: plug in a CoreML model
        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("Photo captured: \(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)
    }
}

これで完了です! シャッターボタンをタップすると写真が撮れ、デリゲートで画像を受け取り、モデルを組み込んでいれば、各フレームにライブ予測が重ねられます。


Feature Rundown

Feature How to enable What it gives you
Still Photo cameraVC.recordsVideo = false すばやくスナップショットを撮る
Live Photo cameraVC.captureLivePhotos = true; cameraVC.resolution = .photo 深度を含むリッチメディア
Video Recording cameraVC.recordsVideo = true 1080p または 4K 動画を撮影
Depth Stream cameraVC.captureDepthData = true; cameraVC.resolution = .photo 深度マップのポストプロセス
QR/Barcode cameraVC.trackMetadata = true 自動メタデータコールバック
Face Detection 同上 フレーム内の顔をハイライト
CoreML Streaming cameraVC.streamingModels = [...] リアルタイムオブジェクト認識
Custom UI cameraVC.setShutterButton(visible: false) など デフォルトコントロールを置き換え
Delegate LuminaDelegate を実装 すべてのキャプチャイベントにフック

リポジトリのサンプルアプリはデフォルトですべての機能を示しているため、Xcode の Scene Editor で設定を試してください。


Extending Lumina

  1. 新しい CoreML モデルを追加 – .mlmodel をプロジェクトへコピーし、LuminaModel を生成して streamingModels に追加。
  2. SwiftUI と連携LuminaViewControllerUIViewControllerRepresentable にラップし、カメラ状態の @Binding を公開。
  3. パフォーマンス調整frameRateresolutionmaxZoomScale をデバイスの性能に合わせて調整。
  4. Issue & コントリビューション – README 仕様に従い、フォーク、テスト追加、ドキュメント改良を歓迎。

Why Lumina Stands Out

Criterion Lumina Competitors
License MIT (オープン、寛容) ほとんどが商用または寛容だが、Lumina のライセンスは最もシンプル
Boilerplate 最小限(単一ファイルコントローラ) 他社はセッション管理用に複数クラスを必要とする
Feature‑set CoreML、深度、ライブ写真、QR/顔を一つの lib 多くはカメラか ML どちらかに集中
Documentation サンプルアプリ + コードスニペット付き README 同様のプロジェクトでドキュメントの品質はばらつき

iOS アプリでカメラと AI 機能が必要な場合、Lumina は数分でプロトタイプを作成でき、コードベースを軽量に保ちます。


Get Started Today

  • GitHub からクローン: git clone https://github.com/dokun1/Lumina.git
  • Sample アプリで実際に体験。
  • コントリビューションガイドを読むと、新しい機能やバグ修正に取り掛かれます。
  • Lumina を自分のプロジェクトに組み込み、翌日からスマートなカメラを構築開始。

質問? GitHub Discussions タブで質問を投稿するか、Twitter の @dokun1 へ問い合わせてください。Happy coding!

この記事を共有