这是我的 script.js:
$(document).ready(function(){
start()
})
const mtcnnParams = {
// number of scaled versions of the input image passed through the CNN
// of the first stage, lower numbers will result in lower inference time,
// but will also be less accurate
maxNumScales: 10,
// scale factor used to calculate the scale steps of the image
// pyramid used in stage 1
scaleFactor: 0.709,
// the score threshold values used to filter the bounding
// boxes of stage 1, 2 and 3
scoreThresholds: [0.6, 0.7, 0.7],
// mininum face size to expect, the higher the faster processing will be,
// but smaller faces won't be detected
minFaceSize: 20
}
async function start() {
// load the models
await faceapi.loadMtcnnModel('/models')
await faceapi.loadFaceRecognitionModel('/models')
const videoEl = document.getElementById('inputVideo')
navigator.getUserMedia(
{ video: {} },
stream => videoEl.srcObject = stream,
err => console.error(err)
)
const mtcnnResults = await faceapi.mtcnn(document.getElementById('inputVideo'), mtcnnForwardParams)
// faceapi.drawDetection('overlay', mtcnnResults.map(res => res.faceDetection), { withScore: false })
// faceapi.drawLandmarks('overlay', mtcnnResults.map(res => res.faceLandmarks), { lineWidth: 4, color: 'red' })
const options = new faceapi.MtcnnOptions(mtcnnParams)
const input = document.getElementById('inputVideo')
const fullFaceDescriptions = await faceapi.detectAllFaces(input, options).withFaceLandmarks().withFaceDescriptors()
const labels = ['arif']
const labeledFaceDescriptors = await Promise.all(
labels.map(async label=>{
const img = await faceapi.fetchImage(
'https://github.com/ahmedarifhasan/adasd/blob/master/Test.jpg'
)
const fullFaceDescription = await faceapi.detectAllFaces(img).withFaceLandmarks().withFaceDescriptors()
if (!fullFaceDescription) {
throw new Error(`no faces detected for ${label}`)
}
return new faceapi.LabeledFaceDescriptors(label , fullFaceDescription)
})
)
const maxDescriptorDistance = 0.6
const faceMatcher = new faceapi.FaceMatcher(labeledFaceDescriptors, maxDescriptorDistance)
const results = fullFaceDescription.map(fd => faceMatcher.findBestMatch(fd.descriptor))
results.forEach((bestMatch, i) => {
const box = fullFaceDescriptions[i].detection.box
const text = bestMatch.toString()
const drawBox = new faceapi.draw.DrawBox(box, { label: text })
drawBox.draw(canvas)
})
}
async function onPlay(videoEl){
start()
setTimeout(()=>onPlay(videoEl))
}
const mtcnnForwardParams = {
// number of scaled versions of the input image passed through the CNN
// of the first stage, lower numbers will result in lower inference time,
// but will also be less accurate
maxNumScales: 10,
// scale factor used to calculate the scale steps of the image
// pyramid used in stage 1
scaleFactor: 0.709,
// the score threshold values used to filter the bounding
// boxes of stage 1, 2 and 3
scoreThresholds: [0.6, 0.7, 0.7],
// mininum face size to expect, the higher the faster processing will be,
// but smaller faces won't be detected
minFaceSize: 20
}
这是我的 index.html:
<!DOCTYPE html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title></title>
<link rel="stylesheet" href="">
<script defer src="face-api.min.js"></script>
<script defer src="script.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<style>
body{
margin:0;
padding:0;
widows: 100vw;
height: 100vh;
display : flex;
justify-content: center;
align-items: center;
flex-direction: column;
}
canvas{
position: absolute;
}
</style>
</head>
<body>
<div style="position: relative;" class="margin">
<video onplay="onPlay(this)" id="inputVideo" autoplay muted></video>
<canvas id="overlay" />
</div>
<div>
<p>Hello</p>
</div>
</body>
</html>
我是新手,我需要识别网络摄像头中的人脸。任何帮助都非常感谢。
另外,我认为 face-api.js 比其他包要难一些,所以请在回答时保持礼貌。我已将图片上传到 Github 并使用该链接进行识别。