Skip to main content

VisionCamera

Classes​

Interfaces​

Type Aliases​

AutoFocusSystem​

Ƭ AutoFocusSystem: "contrast-detection" | "phase-detection" | "none"

Indicates a format's autofocus system.

  • "none": Indicates that autofocus is not available
  • "contrast-detection": Indicates that autofocus is achieved by contrast detection. Contrast detection performs a focus scan to find the optimal position
  • "phase-detection": Indicates that autofocus is achieved by phase detection. Phase detection has the ability to achieve focus in many cases without a focus scan. Phase detection autofocus is typically less visually intrusive than contrast detection autofocus

Defined in​

CameraDevice.ts:53


CameraDevices​

Ƭ CameraDevices: { [key in CameraPosition]: CameraDevice | undefined }

Defined in​

hooks/useCameraDevices.ts:7


CameraPermissionRequestResult​

Ƭ CameraPermissionRequestResult: "granted" | "denied"

Defined in​

Camera.tsx:15


CameraPermissionStatus​

Ƭ CameraPermissionStatus: "granted" | "not-determined" | "denied" | "restricted"

Defined in​

Camera.tsx:14


CameraPosition​

Ƭ CameraPosition: "front" | "back" | "unspecified" | "external"

Represents the camera device position.

  • "back": Indicates that the device is physically located on the back of the system hardware
  • "front": Indicates that the device is physically located on the front of the system hardware

iOS only​

  • "unspecified": Indicates that the device's position relative to the system hardware is unspecified

Android only​

  • "external": The camera device is an external camera, and has no fixed facing relative to the device's screen. (Android only)

Defined in​

CameraPosition.ts:13


CaptureError​

Ƭ CaptureError: "capture/invalid-photo-format" | "capture/encoder-error" | "capture/muxer-error" | "capture/recording-in-progress" | "capture/no-recording-in-progress" | "capture/file-io-error" | "capture/create-temp-file-error" | "capture/invalid-video-options" | "capture/create-recorder-error" | "capture/recorder-error" | "capture/no-valid-data" | "capture/inactive-source" | "capture/insufficient-storage" | "capture/file-size-limit-reached" | "capture/invalid-photo-codec" | "capture/not-bound-error" | "capture/capture-type-not-supported" | "capture/video-not-enabled" | "capture/photo-not-enabled" | "capture/aborted" | "capture/unknown"

Defined in​

CameraError.ts:31


DeviceError​

Ƭ DeviceError: "device/configuration-error" | "device/no-device" | "device/invalid-device" | "device/torch-unavailable" | "device/microphone-unavailable" | "device/pixel-format-not-supported" | "device/low-light-boost-not-supported" | "device/focus-not-supported" | "device/camera-not-available-on-simulator"

Defined in​

CameraError.ts:8


FormatError​

Ƭ FormatError: "format/invalid-fps" | "format/invalid-hdr" | "format/invalid-low-light-boost" | "format/invalid-format" | "format/invalid-color-space"

Defined in​

CameraError.ts:18


FrameProcessor​

Ƭ FrameProcessor: Object

Type declaration​

NameType
frameProcessor(frame: Frame) => void
type"frame-processor"

Defined in​

CameraProps.ts:7


LogicalCameraDeviceType​

Ƭ LogicalCameraDeviceType: "dual-camera" | "dual-wide-camera" | "triple-camera"

Indentifiers for a logical camera (Combinations of multiple physical cameras to create a single logical camera).

  • "dual-camera": A combination of wide-angle and telephoto cameras that creates a capture device.
  • "dual-wide-camera": A device that consists of two cameras of fixed focal length, one ultrawide angle and one wide angle.
  • "triple-camera": A device that consists of three cameras of fixed focal length, one ultrawide angle, one wide angle, and one telephoto.

Defined in​

CameraDevice.ts:21


ParameterError​

Ƭ ParameterError: "parameter/invalid-parameter" | "parameter/unsupported-os" | "parameter/unsupported-output" | "parameter/unsupported-input" | "parameter/invalid-combination"

Defined in​

CameraError.ts:2


PermissionError​

Ƭ PermissionError: "permission/microphone-permission-denied" | "permission/camera-permission-denied"

Defined in​

CameraError.ts:1


PhysicalCameraDeviceType​

Ƭ PhysicalCameraDeviceType: "ultra-wide-angle-camera" | "wide-angle-camera" | "telephoto-camera"

Indentifiers for a physical camera (one that actually exists on the back/front of the device)

  • "ultra-wide-angle-camera": A built-in camera with a shorter focal length than that of a wide-angle camera. (focal length between below 24mm)
  • "wide-angle-camera": A built-in wide-angle camera. (focal length between 24mm and 35mm)
  • "telephoto-camera": A built-in camera device with a longer focal length than a wide-angle camera. (focal length between above 85mm)

Defined in​

CameraDevice.ts:12


PixelFormat​

Ƭ PixelFormat: "yuv" | "rgb" | "dng" | "native" | "unknown"

Represents the pixel format of a Frame.

If you intend to read Pixels from this Frame or use an ML model for processing, make sure that you are using the expected PixelFormat, otherwise the plugin might not be able to properly understand the Frame's content.

Most ML models operate in either yuv (recommended) or rgb.

  • yuv: Frame is in YUV pixel-format (Y'CbCr 4:2:0 or NV21, 8-bit)
  • rgb: Frame is in RGB pixel-format (RGB or RGBA, 8-bit)
  • dng: Frame is in a depth-data pixel format (DNG)
  • native: Frame is in the Camera's native Hardware Buffer format (PRIVATE). This is the most efficient Format.
  • unknown: Frame has unknown/unsupported pixel-format.

Defined in​

PixelFormat.ts:15


SessionError​

Ƭ SessionError: "session/camera-not-ready" | "session/camera-cannot-be-opened" | "session/camera-has-been-disconnected" | "session/audio-session-setup-failed" | "session/audio-in-use-by-other-app" | "session/audio-session-failed-to-activate"

Defined in​

CameraError.ts:24


SystemError​

Ƭ SystemError: "system/camera-module-not-found" | "system/no-camera-manager" | "system/frame-processors-unavailable" | "system/view-not-found"

Defined in​

CameraError.ts:53


UnknownError​

Ƭ UnknownError: "unknown/unknown"

Defined in​

CameraError.ts:58


VideoStabilizationMode​

Ƭ VideoStabilizationMode: "off" | "standard" | "cinematic" | "cinematic-extended" | "auto"

Indicates a format's supported video stabilization mode. Enabling video stabilization may introduce additional latency into the video capture pipeline.

  • "off": No video stabilization. Indicates that video should not be stabilized
  • "standard": Standard software-based video stabilization. Standard video stabilization reduces the field of view by about 10%.
  • "cinematic": Advanced software-based video stabilization. This applies more aggressive cropping or transformations than standard.
  • "cinematic-extended": Extended software- and hardware-based stabilization that aggressively crops and transforms the video to apply a smooth cinematic stabilization.
  • "auto": Indicates that the most appropriate video stabilization mode for the device and format should be chosen automatically

Defined in​

CameraDevice.ts:64

Variables​

VisionCameraProxy​

• Const VisionCameraProxy: TVisionCameraProxy = proxy

Defined in​

FrameProcessorPlugins.ts:95

Functions​

createFrameProcessor​

â–¸ createFrameProcessor(frameProcessor, type): FrameProcessor

Create a new Frame Processor function which you can pass to the <Camera>. (See "Frame Processors")

Make sure to add the 'worklet' directive to the top of the Frame Processor function, otherwise it will not get compiled into a worklet.

Also make sure to memoize the returned object, so that the Camera doesn't reset the Frame Processor Context each time.

Parameters​

NameType
frameProcessor(frame: Frame) => void
type"frame-processor"

Returns​

FrameProcessor

Defined in​

hooks/useFrameProcessor.ts:13


isErrorWithCause​

â–¸ isErrorWithCause(error): error is ErrorWithCause

Checks if the given error is of type ErrorWithCause

Parameters​

NameTypeDescription
errorunknownAny unknown object to validate

Returns​

error is ErrorWithCause

true if the given error is of type ErrorWithCause

Defined in​

CameraError.ts:176


parsePhysicalDeviceTypes​

â–¸ parsePhysicalDeviceTypes(physicalDeviceTypes): PhysicalCameraDeviceType | LogicalCameraDeviceType

Parses an array of physical device types into a single PhysicalCameraDeviceType or LogicalCameraDeviceType, depending what matches.

Parameters​

NameType
physicalDeviceTypesPhysicalCameraDeviceType[]

Returns​

PhysicalCameraDeviceType | LogicalCameraDeviceType

Method

Defined in​

CameraDevice.ts:27


runAsync​

â–¸ runAsync(frame, func): void

Runs the given function asynchronously, while keeping a strong reference to the Frame.

For example, if you want to run a heavy face detection algorithm while still drawing to the screen at 60 FPS, you can use runAsync(...) to offload the face detection algorithm to a separate thread.

Parameters​

NameTypeDescription
frameFrameThe current Frame of the Frame Processor.
func() => voidThe function to execute.

Returns​

void

Example

const frameProcessor = useFrameProcessor((frame) => {
'worklet'
console.log('New Frame')
runAsync(frame, () => {
'worklet'
const faces = detectFaces(frame)
const face = [faces0]
console.log(`Detected a new face: ${face}`)
})
})

Defined in​

FrameProcessorPlugins.ts:177


runAtTargetFps​

â–¸ runAtTargetFps<T>(fps, func): T | undefined

Runs the given function at the given target FPS rate.

For example, if you want to run a heavy face detection algorithm only once per second, you can use runAtTargetFps(1, ...) to throttle it to 1 FPS.

Type parameters​

Name
T

Parameters​

NameTypeDescription
fpsnumberThe target FPS rate at which the given function should be executed
func() => TThe function to execute.

Returns​

T | undefined

The result of the function if it was executed, or undefined otherwise.

Example

const frameProcessor = useFrameProcessor((frame) => {
'worklet'
console.log('New Frame')
runAtTargetFps(5, () => {
'worklet'
const faces = detectFaces(frame)
console.log(`Detected a new face: ${faces[0]}`)
})
})

Defined in​

FrameProcessorPlugins.ts:136


sortDevices​

â–¸ sortDevices(left, right): number

Compares two devices by the following criteria:

  • wide-angle-cameras are ranked higher than others
  • Devices with more physical cameras are ranked higher than ones with less. (e.g. "Triple Camera" > "Wide-Angle Camera")

Note that this makes the sort() function descending, so the first element ([0]) is the "best" device.

Parameters​

NameType
leftCameraDevice
rightCameraDevice

Returns​

number

Example

const devices = camera.devices.sort(sortDevices)
const bestDevice = devices[0]

Method

Defined in​

utils/FormatFilter.ts:18


sortFormats​

â–¸ sortFormats(left, right): number

Sort formats by resolution and aspect ratio difference (to the Screen size).

Note that this makes the sort() function descending, so the first element ([0]) is the "best" device.

Parameters​

NameType
leftCameraDeviceFormat
rightCameraDeviceFormat

Returns​

number

Defined in​

utils/FormatFilter.ts:72


tryParseNativeCameraError​

â–¸ tryParseNativeCameraError<T>(nativeError): CameraCaptureError | CameraRuntimeError | T

Tries to parse an error coming from native to a typed JS camera error.

Type parameters​

Name
T

Parameters​

NameTypeDescription
nativeErrorTThe native error instance. This is a JSON in the legacy native module architecture.

Returns​

CameraCaptureError | CameraRuntimeError | T

A CameraRuntimeError or CameraCaptureError, or the nativeError itself if it's not parsable

Method

Defined in​

CameraError.ts:202


useCameraDevices​

â–¸ useCameraDevices(): CameraDevices

Gets the best available CameraDevice. Devices with more cameras are preferred.

Returns​

CameraDevices

The best matching CameraDevice.

Throws

CameraRuntimeError if no device was found.

Example

const device = useCameraDevice()
// ...
return <Camera device={device} />

Defined in​

hooks/useCameraDevices.ts:29

â–¸ useCameraDevices(deviceType): CameraDevices

Gets a CameraDevice for the requested device type.

Parameters​

NameTypeDescription
deviceTypePhysicalCameraDeviceType | LogicalCameraDeviceTypeSpecifies a device type which will be used as a device filter.

Returns​

CameraDevices

A CameraDevice for the requested device type.

Throws

CameraRuntimeError if no device was found.

Example

const device = useCameraDevice('wide-angle-camera')
// ...
return <Camera device={device} />

Defined in​

hooks/useCameraDevices.ts:44


useCameraFormat​

â–¸ useCameraFormat(device?): CameraDeviceFormat | undefined

Returns the best format for the given camera device.

This function tries to choose a format with the highest possible photo-capture resolution and best matching aspect ratio.

Parameters​

NameTypeDescription
device?CameraDeviceThe Camera Device

Returns​

CameraDeviceFormat | undefined

The best matching format for the given camera device, or undefined if the camera device is undefined.

Defined in​

hooks/useCameraFormat.ts:14


useFrameProcessor​

â–¸ useFrameProcessor(frameProcessor, dependencies): FrameProcessor

Returns a memoized Frame Processor function wich you can pass to the <Camera>. (See "Frame Processors")

Make sure to add the 'worklet' directive to the top of the Frame Processor function, otherwise it will not get compiled into a worklet.

Parameters​

NameTypeDescription
frameProcessor(frame: Frame) => voidThe Frame Processor
dependenciesDependencyListThe React dependencies which will be copied into the VisionCamera JS-Runtime.

Returns​

FrameProcessor

The memoized Frame Processor.

Example

const frameProcessor = useFrameProcessor((frame) => {
'worklet'
const qrCodes = scanQRCodes(frame)
console.log(`QR Codes: ${qrCodes}`)
}, [])

Defined in​

hooks/useFrameProcessor.ts:49