java swing 人脸签到系统 ----- 调用 opencv 多线程

134 阅读1分钟

java 源代码地址 code aliyun

code.aliyun.com/734449600/s…

软件功能展示

在这里插入图片描述

在这里插入图片描述

项目 设计的 技术问题总结

工作 进程 以及 渲染 进程 如何分离

人脸识别 sdk 的集成与调用

java 调用 opencv

特征比对

打包 exe 方法

java 多线程

java 调用 opencv 源代码 展示

调用代码

开始签到Button.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                new Thread(() -> readImage()).start();
            }
        });

工作 代码


// 获取 图片的 io 工作进程
    public void readImage() {
        VideoLabel.setText("请等待打开摄像头");
        capture.open(0);
        openVideo = 0;
        // 设置帧率
        capture.set(Videoio.CAP_PROP_FPS, 30);

        boolean grab = capture.grab();

        if (!grab) {
            return;
        }
        int take_count = 0;
        while (true) {
            Mat capImg = new Mat();
            BufferedImage tempImage;
            if (openVideo == -1) {
                capture.release();
                break;
            }
            capture.read(capImg);
            tempImage = CvFunc.MatToBufferedImage(capImg);
            if (tempImage != null) {
                updateVideoLabel(new ImageIcon(tempImage));
                take_count += 1;
                if (take_count == 20) {
                    take_count = 0;
                    new Thread(() -> {
                        String[] res = studentInfo.compareImage(tempImage);
                        updateCompareRes(res);
                        studentInfo.Checkin(res[0]);
                        String spring_str = studentInfo.GetSpringStuStr();
                        String absent_str = studentInfo.GetAbsentStuStr();
                        updateStudentList(spring_str, absent_str);
                    }).start();
                }
            }

            try {
                sleep(50);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }

        }
    }

// 页面渲染进程
    public void updateCompareRes(String[] s_list) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                compareRes.setText(s_list[0]);
                compareVal.setText(s_list[1]);
            }
        });
    }

// 页面渲染进程
    public void updateVideoLabel(ImageIcon imageIcon) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                VideoLabel.setText("");
                VideoLabel.setIcon(imageIcon);
            }
        });
    }