Lumina : Bibliothèque de caméra Swift pour l'imagerie intégrée CoreML

Qu'est-ce que Lumina?

Lumina est un paquet Swift open‑source qui transforme un iPhone en un système de caméra complet d'un seul morceau de code. La bibliothèque repose sur les frameworks AVFoundation, Vision et CoreML d'Apple, mais dissimule les bas‑niveau derrière une API propre et conviviale pour Swift. Le résultat est un SDK qui :

  • Capture photos statiques, photos en direct, vidéos et données de profondeur.
  • Transmet chaque cadre à un délégué – idéal pour le traitement d'image en temps réel.
  • Intègre tout modèle compatible CoreML et transmet les prédictions aux côtés des images vidéo.
  • Détecte QR, codes-barres et visages immédiatement.
  • Expose une interface utilisateur facile à ajuster et vous permet de remplacer les contrôles caméra par défaut.

Pourquoi utiliser Lumina ? • Éliminer le code boilerplate AVFoundation. • Prototyper rapidement des fonctionnalités de caméra alimentées par ML. • Se concentrer sur la logique de votre application plutôt que les détails internes de la caméra. • Bénéficier d’une bibliothèque bien maintenue et sous licence MIT fonctionnant sur iOS 13+.


Démarrage rapide

1. Installer le paquet

Ouvrir Xcode → Fichier → Ajouter des paquets… → entrer l’URL :

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

Choisir la Dernière version et ajouter la bibliothèque à votre cible.

Astuce : vous pouvez également épingler une balise précise si vous préférez des builds déterministes.

2. Ajouter les autorisations requises

Ajouter les clés suivantes à votre Info.plist :

<key>NSCameraUsageDescription</key>
<string>We need camera access to scan products.</string>
<key>NSMicrophoneUsageDescription</key>
<string>We need microphone access to record video.</string>

3. Insérer le contrôleur de vue

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)
    }
}

C’est tout ! Appuyer sur le bouton d’obturateur capture une photo, le délégué reçoit l’image, et si vous avez branché un modèle, vous verrez les prédictions en temps réel superposées sur chaque cadre.


Récapitulatif des fonctionnalités

Fonctionnalité Comment l’activer Ce que ça vous donne
Photo statique cameraVC.recordsVideo = false Prendre une photo rapide
Photo en direct cameraVC.captureLivePhotos = true; cameraVC.resolution = .photo Média riche avec profondeur
Enregistrement vidéo cameraVC.recordsVideo = true Capturer vidéo 1080p ou 4K
Flux de profondeur cameraVC.captureDepthData = true; cameraVC.resolution = .photo Post‑traitement des cartes de profondeur
QR/Cod‑barres cameraVC.trackMetadata = true Retour d’appel de métadonnées automatiques
Détection faciale Idem QR/Cod‑barres Mettre en évidence les visages dans le cadre
Flux CoreML cameraVC.streamingModels = [...] Reconnaissance d’objets en temps réel
UI personnalisée cameraVC.setShutterButton(visible: false) etc. Remplacer les contrôles par défaut
Délégué Implémenter LuminaDelegate Se connecter à tous les événements de capture

L’application de démonstration dans le dépôt montre toutes les fonctionnalités dès le départ, alors expérimentez avec les paramètres dans l’éditeur de scènes Xcode.


Étendre Lumina

  1. Ajouter un nouveau modèle CoreML – Copier votre .mlmodel dans le projet, créer une instance LuminaModel, puis l’ajouter à streamingModels.
  2. Intégrer avec SwiftUI – Envelopper LuminaViewController dans un UIViewControllerRepresentable et exposer un @Binding pour l’état de la caméra.
  3. Ajustement des performances – Modifier frameRate, resolution ou maxZoomScale pour correspondre aux capacités de votre appareil.
  4. Issues ouvertes & contributions – Le dépôt suit une spécification de README standard ; n’hésitez pas à forker, ajouter des tests ou améliorer la documentation.

Pourquoi Lumina se démarque

Critère Lumina Concurrent
Licence MIT (ouverte, permissive) Beaucoup commercial ou permissive, mais la licence de Lumina est l’une des plus simples
Boilerplate Minimal (contrôleur unique) Autres nécessitent plusieurs classes pour la gestion de session
Ensemble de fonctionnalités CoreML, profondeur, photo en direct, QR / face en un seul lib La plupart se concentrent soit sur la caméra soit sur le ML, pas les deux
Documentation App de démonstration + README avec extraits de code La qualité varie entre projets similaires

Si vous développez une application iOS qui a besoin de capacités caméra et IA, Lumina vous permet de lancer un prototype en quelques minutes et garde votre base de code minimaliste.


Commencez dès aujourd’hui

  • Clonez depuis GitHub : git clone https://github.com/dokun1/Lumina.git
  • Explorez l’application Sample pour une démonstration pratique.
  • Lisez le guide de contribution si vous souhaitez ajouter de nouvelles fonctionnalités ou corriger des bugs.
  • Intégrez Lumina dans votre projet et commencez à construire des caméras plus intelligentes dès demain.

Question ? Posez une question sur l’onglet Discussions GitHub, ou contactez‑nous sur Twitter via @dokun1. Bon codage!

Original Article: Voir l’original

Partager cet article