Visual Intelligence in iOS 27 exposes a new system API that lets apps integrate live camera-based scene understanding β including object recognition, text extraction, and subject lookup β directly into their own camera flows using the VisualIntelligence framework.
β’ Apps can invoke Apple's on-device Visual Intelligence pipeline on a captured image or live CVPixelBuffer without sending data to a server
β’ Unified API surface replaces the need to stitch together VisionKit, Vision, and CoreML separately for common recognition tasks
β’ Results are returned as structured, typed entities (objects, barcodes, text, landmarks) that integrate naturally with SwiftUI
Captures a photo from AVFoundation and runs Visual Intelligence analysis on it, displaying detected objects, recognized text, and landmark results in a SwiftUI list.
import SwiftUI
import VisualIntelligence
import AVFoundation
import CoreImage
@available(iOS 27, *)
struct LiveSceneAnalyzerView: View {
@State private var analysisResults: [VIEntity] = []
@State private var isAnalyzing = false
@State private var errorMessage: String?
// Simulated captured image for demo purposes
private let sampleImage: CIImage = CIImage(
color: CIColor(red: 0.5, green: 0.5, blue: 0.5)
).cropped(to: CGRect(x: 0, y: 0, width: 640, height: 480))
var body: some View {
NavigationStack {
VStack(spacing: 16) {
if isAnalyzing {
ProgressView("Analyzing sceneβ¦")
} else if analysisResults.isEmpty {
ContentUnavailableView(
"No Results",
systemImage: "camera.viewfinder",
description: Text("Tap Analyze to run Visual Intelligence.")
)
} else {
List(analysisResults, id: \.identifier) { entity in
VStack(alignment: .leading, spacing: 4) {
Text(entity.label)
.font(.headline)
Text(entity.type.localizedDescription)
.font(.caption)
.foregroundStyle(.secondary)
if let confidence = entity.confidence {
ProgressView(value: confidence)
.tint(.blue)
}
}
.padding(.vertical, 4)
}
}
if let errorMessage {
Text(errorMessage)
.foregroundStyle(.red)
.font(.caption)
}
Button("Analyze Scene") {
Task { await analyzeImage(sampleImage) }
}
.buttonStyle(.borderedProminent)
.disabled(isAnalyzing)
}
.navigationTitle("Visual Intelligence")
}
}
@MainActor
private func analyzeImage(_ ciImage: CIImage) async {
isAnalyzing = true
errorMessage = nil
defer { isAnalyzing = false }
do {
let analyzer = VIAnalyzer()
let request = VIAnalysisRequest(
image: ciImage,
intents: [.objectRecognition, .textRecognition, .landmarkIdentification]
)
let response = try await analyzer.analyze(request)
analysisResults = response.entities
} catch {
errorMessage = error.localizedDescription
}
}
}
#Preview {
if #available(iOS 27, *) {
LiveSceneAnalyzerView()
}
}The VisualIntelligence framework is new in iOS 27 beta and API surface may shift before GM; analysis on a static UIImage requires converting to CIImage first; the system may throttle rapid successive analysis calls on older A17 devices; ensure NSCameraUsageDescription is set in Info.plist
Requires Apple Silicon (A17 Pro or later) for full on-device model execution; some sub-features require Apple Intelligence entitlement
More iOS 27 APIs land every week.
Get notified when new capabilities are published β no noise, just signal.