El reconocimiento facial de Opencv.js es fácil de usar

El front-end usa opencv

Recientemente aprendí sobre opencv y miré los ejemplos y documentos
oficiales . Opencvjs document entry versión 3.3.1.
Vi la estructura de la página web de los ejemplos oficiales.
Básicamente, todos los ejemplos usan dos js
core js : opencv.js
tool js : utils. La
solución oficial dada por js es

Emscripten La instalación de
Emscripten ES UN compilador de LLVM a JavaScript. Usamos Emscripten de Will para construir OpenCV.js.
Instalación de Emscripten
Emscripten es un compilador de LLVM a JavaScript. Usaremos Emscripten para construir OpenCV.js.

Pero debe usar js en sus ejemplos oficiales, ¿verdad?
He visto muchos archivos compartidos csdn que requieren monedas c o créditos,
y es fácil tener problemas al compilarlo usted mismo. El
ejemplo oficial puede ejecutarse, así que ¿por qué no usarlo
al mismo tiempo? Los archivos xml de reconocimiento facial oficialmente entrenados se pueden rastrear y
luego ir a la página web para rastrear. El
método anterior es hacer clic derecho para verificar el elemento.
Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí

Descarga estos tres archivos y colócalos en el directorio del proyecto.

Analice la estructura de
Inserte la descripción de la imagen aquí
la página web, copie el código clave y colóquelo en su propio archivo

El código proviene del rastreo oficial.


<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Face Detection Camera Example</title>
<link href="https://docs.opencv.org/3.3.1/js_example_style.css" rel="stylesheet" type="text/css" />
</head>
<body>
<!-- <h2>Face Detection Camera Example</h2> -->
<div>
<div class="control"><button id="startAndStop">Start</button></div>
<textarea class="code" rows="29" cols="80" id="codeEditor" spellcheck="false">
	
</textarea>
</div>
<p class="err" id="errorMessage"></p>
<div>
    <table cellpadding="0" cellspacing="0" width="0" border="0">
    <tr>
        <td>
            <video id="videoInput" width=320 height=240></video>
        </td>
        <td>
            <canvas id="canvasOutput" width=320 height=240></canvas>
        </td>
        <td></td>
        <td></td>
    </tr>
    <tr>
        <td>
            <div class="caption">videoInput</div>
        </td>
        <td>
            <div class="caption">canvasOutput</div>
        </td>
        <td></td>
        <td></td>
    </tr>
    </table>
</div>
<script type="text/javascript" src="js/opencv.js"></script>
<!-- <script src="js/adapter-5.0.4.js" type="text/javascript"></script> -->
<script src="js/utils.js" type="text/javascript"></script>
<script id="codeSnippet" type="text/code-snippet">
let video = document.getElementById('videoInput');
let src = new cv.Mat(video.height, video.width, cv.CV_8UC4);
let dst = new cv.Mat(video.height, video.width, cv.CV_8UC4);
let gray = new cv.Mat();
let cap = new cv.VideoCapture(video);
let faces = new cv.RectVector();
let classifier = new cv.CascadeClassifier();

// load pre-trained classifiers
classifier.load('haarcascade_frontalface_default.xml');

const FPS = 30;
function processVideo() {
     
     
    try {
     
     
        if (!streaming) {
     
     
            // clean and stop.
            src.delete();
            dst.delete();
            gray.delete();
            faces.delete();
            classifier.delete();
            return;
        }
        let begin = Date.now();
        // start processing.
        cap.read(src);
        src.copyTo(dst);
        cv.cvtColor(dst, gray, cv.COLOR_RGBA2GRAY, 0);
        // detect faces.
        classifier.detectMultiScale(gray, faces, 1.1, 3, 0);
        // draw faces.
        for (let i = 0; i < faces.size(); ++i) {
     
     
            let face = faces.get(i);
            let point1 = new cv.Point(face.x, face.y);
            let point2 = new cv.Point(face.x + face.width, face.y + face.height);
            cv.rectangle(dst, point1, point2, [255, 0, 0, 255]);
        }
        cv.imshow('canvasOutput', dst);
        // schedule the next one.
        let delay = 1000/FPS - (Date.now() - begin);
        setTimeout(processVideo, delay);
    } catch (err) {
     
     
        utils.printError(err);
    }
};

// schedule the first one.
setTimeout(processVideo, 0);
</script>
<script type="text/javascript">
	
	let utils = new Utils('errorMessage');
	
	utils.loadCode('codeSnippet', 'codeEditor');
	
	let streaming = false;
	let videoInput = document.getElementById('videoInput');
	let startAndStop = document.getElementById('startAndStop');
	let canvasOutput = document.getElementById('canvasOutput');
	let canvasContext = canvasOutput.getContext('2d');
	
	startAndStop.addEventListener('click', () => {
     
     
	    if (!streaming) {
     
     
	        utils.clearError();
	        utils.startCamera('qvga', onVideoStarted, 'videoInput');
	    } else {
     
     
	        utils.stopCamera();
	        onVideoStopped();
	    }
	});
	
	function onVideoStarted() {
     
     
	    streaming = true;
	    startAndStop.innerText = 'Stop';
	    videoInput.width = videoInput.videoWidth;
	    videoInput.height = videoInput.videoHeight;
	    utils.executeCode('codeEditor');
	}
	
	function onVideoStopped() {
     
     
	    streaming = false;
	    canvasContext.clearRect(0, 0, canvasOutput.width, canvasOutput.height);
	    startAndStop.innerText = 'Start';
	}
	
	utils.loadOpenCv(() => {
     
     
	    let faceCascadeFile = 'haarcascade_frontalface_default.xml';
	    utils.createFileFromUrl(faceCascadeFile, faceCascadeFile, () => {
     
     
	        // startAndStop.removeAttribute('disabled');
	    });
	});


</script>
</body>
</html>

efecto

Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquíSugerencias
Hay muchos beneficios en esta página. Puede escribir sus propios js para probar sus propias funciones, y puede ejecutar todos los ejemplos dados por el funcionario modificando ligeramente el código.





  Hola a todos, soy un code husky, un estudiante de ingeniería de redes en la Facultad de Software, porque soy un "perro" y puedo comer carne a miles de kilómetros. Quiero compartir lo que aprendí en la universidad y progresar con todos. Sin embargo, debido al nivel limitado, inevitablemente habrá algunos errores en el blog. Si hay alguna omisión, ¡házmelo saber! Por el momento, solo actualice en la plataforma csdn, la página de inicio del blog: https://blog.csdn.net/qq_42027681 .

未经本人允许,禁止转载

Inserte la descripción de la imagen aquí


Se lanzará más tarde

Front-end: vue entrada vue subprograma de desarrollo, etc.
Back-end: entrada java entrada springboot, etc.
Servidor: servidor de entrada MySQL instrucciones simples servidor en la nube para ejecutar el proyecto
python: recomendado no calentar, asegúrese de ver
el uso de algunos complementos, etc.

El camino de la universidad también está en uno mismo, estudiar mucho, juventud
con pasión. Si te interesa la programación, puedes unirte a nuestro grupo qq para comunicarnos juntos: 974178910
Inserte la descripción de la imagen aquí

Si tiene alguna pregunta, puede dejar un mensaje a continuación, le responderé si lo ve

Supongo que te gusta

Origin blog.csdn.net/qq_42027681/article/details/109695423
Recomendado
Clasificación