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

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

java 源代码地址 code aliyun

https://code.aliyun.com/734449600/swingFaceCheckIn.git

软件功能展示


项目 设计的 技术问题总结

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


人脸识别 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);
            }
        });
    }
相关文章
|
2天前
|
架构师 Java 数据库连接
Java异常处理的20个最佳实践:告别系统崩溃
你是否在为如何处理异常而困扰? 你是否曾被面试官问道Java异常处理的最佳实践有哪些? 本文汇总了Java异常处理的20个最佳实践:让你告别系统崩溃,面试游刃有余
20 2
Java异常处理的20个最佳实践:告别系统崩溃
|
26天前
|
监控 算法 Java
【JavaEE】什么是多线程?进程和线程的区别是什么?如何使用Java实现多线程?
【JavaEE】什么是多线程?进程和线程的区别是什么?如何使用Java实现多线程?
|
6天前
|
Java Linux
手把手教你Linux系统下的Java环境配置,简单到不行!
手把手教你Linux系统下的Java环境配置,简单到不行!
26 1
|
1天前
|
消息中间件 运维 Java
java医院综合信息管理云HIS系统源码(前后端分离、SaaS模式、云计算)
云HIS系统分为两个大的系统:综合管理系统和业务系统 1、综合管理系统:由运营商、开发商和监管机构使用,用来进行运营管理、运维管理和综合监管。 2、业务系统:由基层医院使用,用来支撑医院各类业务运转。
10 1
|
1天前
|
前端开发 JavaScript Java
利用Java Web技术实现实时通信系统的案例分析
利用Java Web技术实现实时通信系统的案例分析
|
1天前
|
监控 数据可视化 关系型数据库
微服务架构+Java+Spring Cloud +UniApp +MySql智慧工地系统源码
项目管理:项目名称、施工单位名称、项目地址、项目地址、总造价、总面积、施工准可证、开工日期、计划竣工日期、项目状态等。
17 5
|
1天前
|
存储 缓存 算法
使用Java实现高效的数据缓存系统
【2月更文挑战第3天】在大规模的应用程序中,数据缓存是提高应用程序性能的一种重要方法。本文介绍了如何使用Java实现高效的数据缓存系统。我们将讨论缓存的设计原则和缓存算法的选择,同时详细说明如何使用Java内置的缓存库和其他开源工具来构建一个可靠、高效的数据缓存系统。
|
2天前
|
Java
如何在Java中使用多线程提高程序性能
【2月更文挑战第2天】在当今的计算机应用领域中,性能是一个不可忽视的重要因素。为了提高程序的性能,我们可以采用多种方法。其中一种方法是使用多线程。本文将介绍如何在Java中使用多线程来提高程序性能。
12 2
|
3天前
|
小程序 Java 数据挖掘
Java校园智慧管理云平台源码 小程序+android电子班牌系统
智慧校园技术架构 ❀后端:Java ❀框架:springboot ❀前端页面:vue +element-ui ❀小程序:小程序原生开发 ❀电子班牌:Java Android
14 0
|
16天前
|
Java
怎么创建多线程数组java
怎么创建多线程数组java
20 6

相关产品

  • 云迁移中心