The Object Output

iOS

Scanning Objects using the Object Output

The CameraObjectOutput allows scanning objects (as ScannedObjects) using the platform-native object outputs. This is more efficient than the Barcode Scanner (see "The Barcode Scanner"), but offers less flexibility.

Creating an Object Output

function App() {
  const device = useCameraDevice('back')
  const objectOutput = useObjectOutput({
    types: ['qr'],
    onObjectsScanned(objects) {
      console.log(`Scanned ${objects.length} objects!`)
    }
  })

  return (
    <Camera
      style={StyleSheet.absoluteFill}
      isActive={true}
      device={device}
      outputs={[objectOutput]}
    />
  )
}
function App() {
  const device = useCameraDevice('back')
  const objectOutput = useObjectOutput({
    types: ['qr'],
    onObjectsScanned(objects) {
      console.log(`Scanned ${objects.length} objects!`)
    }
  })

  const camera = useCamera({
    isActive: true,
    device: device,
    outputs: [objectOutput],
  })
}
const session = await HybridCameraFactory.createCameraSession(false)
const device = await getDefaultCameraDevice('back')
const objectOutput = HybridCameraFactory.createObjectOutput({
  enabledObjectTypes: ['qr']
})
objectOutput.setOnObjectsScannedCallback((objects) => {
  console.log(`Scanned ${objects.length} objects!`)
})

await session.configure([
  {
    input: device,
    outputs: [
      { output: objectOutput, mirrorMode: 'auto' }
    ],
    config: {}
  }
], {})
await session.start()

See ObjectOutputOptions for a full list of configuration options for the Object Output.

Warning

The CameraObjectOutput is iOS only, since Android does not have a native object output.

Use "The Barcode Scanner" (which uses MLKit) on Android instead.

ScannedObject subclasses

ScannedObject is the base-class of all objects scanned by the CameraObjectOutput.

There are multiple subclasses of ScannedObject, such as ScannedCode (e.g. for QR codes or barcodes) or ScannedFace:

const objectOutput = useObjectOutput({
  types: ['qr'],
  onObjectsScanned(objects) {
    for (const object of objects) {
      if (isScannedCode(object)) {
        console.log(`Code: ${object.value}`)
      } else if (isScannedFace(object)) {
        console.log(`Face: ${object.faceID}`)
      } else {
        console.log(`Unknown Object: ${object.type}`)
      }
    }
  }
})

Tip

See "A ScannedObject" for more information about Scanned Objects.