I am trying to make a react js face recognition application using face-api.js for a client. but i keep getting the same error no matter what i do
the code in App.js
import * as faceapi from 'face-api.js';
import React from 'react';
function App() {
const [modelsLoaded, setModelsLoaded] = React.useState(false);
const [captureVideo, setCaptureVideo] = React.useState(false);
const videoRef = React.useRef();
const videoHeight = 480;
const videoWidth = 640;
const canvasRef = React.useRef();
React.useEffect(() => {
const loadModels = async () => {
const MODEL_URL = process.env.PUBLIC_URL + '/models';
Promise.all([
faceapi.nets.tinyFaceDetector.loadFromUri(MODEL_URL),
faceapi.nets.faceLandmark68Net.loadFromUri(MODEL_URL),
faceapi.nets.faceRecognitionNet.loadFromUri(MODEL_URL),
faceapi.nets.faceExpressionNet.loadFromUri(MODEL_URL),
]).then(setModelsLoaded(true));
}
loadModels();
}, []);
const startVideo = () => {
setCaptureVideo(true);
navigator.mediaDevices
.getUserMedia({ video: { width: 300 } })
.then(stream => {
let video = videoRef.current;
video.srcObject = stream;
video.play();
})
.catch(err => {
console.error("error:", err);
});
}
const handleVideoOnPlay = () => {
setInterval(async () => {
if (canvasRef && canvasRef.current) {
canvasRef.current.innerHTML = faceapi.createCanvasFromMedia(videoRef.current);
const displaySize = {
width: videoWidth,
height: videoHeight
}
faceapi.matchDimensions(canvasRef.current, displaySize);
const detections = await faceapi.detectAllFaces(videoRef.current, new faceapi.TinyFaceDetectorOptions()).withFaceLandmarks().withFaceExpressions();
const resizedDetections = faceapi.resizeResults(detections, displaySize);
canvasRef && canvasRef.current && canvasRef.current.getContext('2d').clearRect(0, 0, videoWidth, videoHeight);
canvasRef && canvasRef.current && faceapi.draw.drawDetections(canvasRef.current, resizedDetections);
canvasRef && canvasRef.current && faceapi.draw.drawFaceLandmarks(canvasRef.current, resizedDetections);
canvasRef && canvasRef.current && faceapi.draw.drawFaceExpressions(canvasRef.current, resizedDetections);
}
}, 100)
}
const closeWebcam = () => {
videoRef.current.pause();
videoRef.current.srcObject.getTracks()[0].stop();
setCaptureVideo(false);
}
return (
<div>
<div style={{ textAlign: 'center', padding: '10px' }}>
{
captureVideo && modelsLoaded ?
<button onClick={closeWebcam} style={{ cursor: 'pointer', backgroundColor: 'green', color: 'white', padding: '15px', fontSize: '25px', border: 'none', borderRadius: '10px' }}>
Close Webcam
</button>
:
<button onClick={startVideo} style={{ cursor: 'pointer', backgroundColor: 'green', color: 'white', padding: '15px', fontSize: '25px', border: 'none', borderRadius: '10px' }}>
Open Webcam
</button>
}
</div>
{
captureVideo ?
modelsLoaded ?
<div>
<div style={{ display: 'flex', justifyContent: 'center', padding: '10px' }}>
<video ref={videoRef} height={videoHeight} width={videoWidth} onPlay={handleVideoOnPlay} style={{ borderRadius: '10px' }} />
<canvas ref={canvasRef} style={{ position: 'absolute' }} />
</div>
</div>
:
<div>loading...</div>
:
<>
</>
}
</div>
);
}
export default App;
the error i get after running
WARNING in ./node_modules/face-api.js/build/es6/xception/extractParams.js Module Warning (from ./node_modules/source-map-loader/dist/cjs.js): Failed to parse source map from 'C:\Users\Aritra Mondal\Documents\test react\facerecognition\node_modules\face-api.js\src\xception\extractParams.ts' file: Error: ENOENT: no such file or directory, open 'C:\Users\Aritra Mondal\Documents\test react\facerecognition\node_modules\face-api.js\src\xception\extractParams.ts'
WARNING in ./node_modules/face-api.js/build/es6/xception/extractParamsFromWeigthMap.js Module Warning (from ./node_modules/source-map-loader/dist/cjs.js): Failed to parse source map from 'C:\Users\Aritra Mondal\Documents\test react\facerecognition\node_modules\face-api.js\src\xception\extractParamsFromWeigthMap.ts' file: Error: ENOENT: no such file or directory, open 'C:\Users\Aritra Mondal\Documents\test react\facerecognition\node_modules\face-api.js\src\xception\extractParamsFromWeigthMap.ts'
the package.json file
{
"name": "facerecognition",
"version": "0.1.0",
"private": true,
"dependencies": {
"@testing-library/jest-dom": "^5.16.5",
"@testing-library/react": "^13.4.0",
"@testing-library/user-event": "^13.5.0",
"face-api.js": "^0.22.2",
"react": "^18.2.0",
"react-dom": "^18.2.0",
"react-scripts": "5.0.1",
"web-vitals": "^2.1.4"
},
"scripts": {
"start": "react-scripts start",
"build": "react-scripts build",
"test": "react-scripts test",
"eject": "react-scripts eject"
},
"eslintConfig": {
"extends": [
"react-app",
"react-app/jest"
]
},
"browserslist": {
"production": [
">0.2%",
"not dead",
"not op_mini all"
],
"development": [
"last 1 chrome version",
"last 1 firefox version",
"last 1 safari version"
]
}
}
folder structure screenshot of the error
After going through many youtube tutorial and even cloning their repositories to check the code i keep getting the same error