VisionCamera Frame Processor Plugin to detect faces using MLKit Vision Face Detector
yarn add vision-camera-face-detector
cd ios && pod install
Add the plugin to your babel.config.js
:
module.exports = {
plugins: [
[
'react-native-reanimated/plugin',
{
globals: ['__scanFaces'],
},
],
// ...
Note: You have to restart metro-bundler for changes in the
babel.config.js
file to take effect.
import * as React from 'react';
import { runOnJS } from 'react-native-reanimated';
import { StyleSheet } from 'react-native';
import {
useCameraDevices,
useFrameProcessor,
} from 'react-native-vision-camera';
import { Camera } from 'react-native-vision-camera';
import { scanFaces, Face } from 'vision-camera-face-detector';
export default function App() {
const [hasPermission, setHasPermission] = React.useState(false);
const [faces, setFaces] = React.useState<Face[]>();
const devices = useCameraDevices();
const device = devices.front;
React.useEffect(() => {
console.log(faces);
}, [faces]);
React.useEffect(() => {
(async () => {
const status = await Camera.requestCameraPermission();
setHasPermission(status === 'authorized');
})();
}, []);
const frameProcessor = useFrameProcessor((frame) => {
'worklet';
const scannedFaces = scanFaces(frame);
runOnJS(setFaces)(scannedFaces);
}, []);
return device != null && hasPermission ? (
<Camera
style={StyleSheet.absoluteFill}
device={device}
isActive={true}
frameProcessor={frameProcessor}
frameProcessorFps={5}
/>
) : null;
}
See the contributing guide to learn how to contribute to the repository and the development workflow.
MIT