如何从网络摄像头Java自动捕获图像

时间:2018-08-21 18:37:34

标签: java opencv timer facial-identification

在网络摄像头前被识别出该人时,我只想保存一张图像,但是在下面的代码中保存了很多图像,我该如何设置拍摄时间间隔?

while ((frameCapturado = camera.grab()) != null) {
        imagemColorida = converteMat.convert(frameCapturado); //está colocando o frameCapturado dentro da imagem colorida
        cvtColor(imagemColorida, imagemCinza, COLOR_BGRA2GRAY); //converte da colorida para escala de cinza
        RectVector facesDetectadas = new RectVector();//armazena todas a faces detectadas passando na webcam
        detectorFace.detectMultiScale(imagemCinza, facesDetectadas, 1.1, 2, 0, new Size(100, 100), new Size(500, 500)); //detecção em escala de cinza

        for (int i = 0; i < facesDetectadas.size(); i++) { //entra no laço caso tenha reconhecido uma face
            Rect dadosFace = facesDetectadas.get(i); //dadosFace recebe os dados da imagem que foi detectada, dentro do quadrado de detecção
            rectangle(imagemColorida, dadosFace, new Scalar(0, 0, 255, 0)); //desenha o retangulo

            Mat faceCapturada = new Mat(imagemCinza, dadosFace); //faceCapturada recebe somente os dados presentes dentro do quadrado da detecção
            resize(faceCapturada, faceCapturada, new Size(160, 160));//redimensiona as imagens para ajudar no processo de reconhecimento e evitar erros

            IntPointer rotulo = new IntPointer(1); //para identificar qual é rotulo da imagem, se é a pessoa 1 ou 2
            DoublePointer confianca = new DoublePointer(1);
            reconhecedor.predict(faceCapturada, rotulo, confianca); //quando executar o predict irá passar o rotulo(1 ou 2) e a confiança
            String nome;
            int predicao = rotulo.get(0); //resposta final, na posição 0(zero) se encontra o resultado, a qual classe a imagem pertence

            if (predicao == -1) { //nao conseguiu identificar a pessoa
                nome = "Desconhecido";
                //imwrite("src\\desconhecidos\\" + nome + "." + contDesconhecidos + ".jpg", faceCapturada);
                desconhecidos[contDesconhecidos] = nome + "-" + contDesconhecidos + "-" + data.toString();
                System.out.println(desconhecidos[contDesconhecidos]);
                contDesconhecidos++;
                //Thread.sleep(intervalo);          
                cFrame.dispose();
            } else {
                //cFrame.dispose();
                //salva na variável nome, o nome da pessoa que foi reconhecida e a data que esteve no local
                nome = pessoas[predicao];
                //+ " - " + confianca.get(0) 

                imwrite("src\\desconhecidos\\" + nome + contReconhecidos + ".jpg", faceCapturada);
                reconhecidos[contReconhecidos] = nome + '-' + data.toString();
                System.out.println(reconhecidos[contReconhecidos]);

                /*//trecho abaixo responsavel pela codificação e descodificação da imagem para base 64
                String imagePath = "src\\desconhecidos\\" + nome + contReconhecidos + ".jpg";
                System.out.println("Codificação da imagem para base 64");
                String base64ImageString = encoder(imagePath);
                System.out.println("Base64ImageString = " + base64ImageString);

                System.out.println("Decodificação da imagem da base 64");
                decoder(base64ImageString, "src\\decodificado\\" + nome + contReconhecidos + "de.jpg");
                 */
                contReconhecidos++;
                Thread.sleep(intervalo);
            }

            int x = Math.max(dadosFace.tl().x() - 10, 0);
            int y = Math.max(dadosFace.tl().y() - 10, 0);
            putText(imagemColorida, nome, new Point(x, y), FONT_HERSHEY_PLAIN, 1.4, new Scalar(0, 255, 0, 0));
        }
        if (cFrame.isVisible()) {
            cFrame.showImage(frameCapturado);
        }
    }

    cFrame.dispose();
    camera.stop();
}

`

0 个答案:

没有答案