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); } }); }