首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >javaweb案例实训之基于jsp和servlet的用户管理开发

javaweb案例实训之基于jsp和servlet的用户管理开发

作者头像
杨校
发布于 2019-06-13 12:56:14
发布于 2019-06-13 12:56:14
1.3K00
代码可运行
举报
文章被收录于专栏:Java技术分享圈Java技术分享圈
运行总次数:0
代码可运行

基于jsp和servlet的用户管理开发

1. 准备jar包

  • commons-beanutils.jar
  • commons-dbutils-1.4.jar
  • commons-logging-1.0.4.jar
  • druid-1.1.10.jar
  • jstl-1.2.jar
  • mysql-connector-java-5.1.7-bin.jar

2.写Druid的数据库连接池工具类

2.1 设计工具类

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package cn.javabs.school.util;

import com.alibaba.druid.pool.DruidDataSourceFactory;

import javax.sql.DataSource;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Properties;

/**
 * 工具类全都使用static
 */
public class DruidUtils {

    private static DataSource dataSource = null;

    static  String myFile ="druid.properties";

    static {
        try {
            InputStream resourceAsStream = DruidUtils.class.getClassLoader().getResourceAsStream(myFile);
            Properties p = new Properties();
            p.load(resourceAsStream);
            // DruidDataSourceFactory核心类  德鲁意数据资源工厂 的  创建数据资源
            dataSource =  DruidDataSourceFactory.createDataSource(p);
        } catch (Exception e) {
            throw  new RuntimeException(e);
        }
    }


    public  static DataSource getDataSource(){
        return dataSource;
    }

    public  static Connection getConnection(){
        try {
            return dataSource.getConnection();
        } catch (SQLException e) {
            throw  new RuntimeException(e);
        }
    }

}

2.2 设计配置文件

新建一个file 、命名为 druid.properties

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/0314
username=root
password=sorry

3.写sql代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
CREATE DATABASE `usermanager` ;
USE `usermanager` ;
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(50) NOT NULL,
  `sex` varchar(255) DEFAULT NULL,
  `password` varchar(255) DEFAULT NULL,
  `birthday` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `user_username_uindex` (`username`)
) ENGINE=InnoDB AUTO_INCREMENT=1006 DEFAULT CHARSET=utf8 COMMENT='用户表';
INSERT INTO `user` VALUES ('1001', 'admin', '男', '123', '1999-09-09');

4.写测试类 测试查询是否可以查到。用于测试数据库连接是否有误!

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package cn.javabs.school.test;

import cn.javabs.school.entity.User;
import cn.javabs.school.util.DruidUtils;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import org.junit.Test;

import java.sql.SQLException;
import java.util.List;

public class TestData {

    QueryRunner qr =  new QueryRunner(DruidUtils.getDataSource());
    @Test
    public void  fun() throws SQLException {
        User user = new User();

        List<User> users = qr.query("select * from user", new BeanListHandler<User>(User.class));

        System.out.println(users);
    }

}

5.设计[业务逻辑层]代码

5.1 设计UserService接口

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package cn.javabs.school.service;

import cn.javabs.school.entity.User;

import java.util.List;

/**
 * 设计UserService接口
 */
public interface UserService {

    /**
     * 用户登录
     * @param username
     * @param password
     * @return
     */
    User UserLogin(String username , String  password);

    /**
     * 用户添加
     * @param user
     * @return
     */
    int addUser(User user);

    /**
     * 删除用户
     * @param id
     * @return
     */
    int delUser(int id);

    /**
     * 修改用户
     * @param user
     * @return
     */
    int updateUser(User user);

    /**
     * 查询全部用户
     * @return
     */
    List<User> findAllUser();

    /**
     * 根据id查询用户
     * @param id
     * @return
     */
    User findUserById(int id);

    /**
     * 根据用户名名称查询用户
     * @param username
     * @return
     */
    User findUserByName(String username);

}

5.2 设计UserServiceImpl实现类

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package cn.javabs.school.service.impl;

import cn.javabs.school.dao.UserDao;
import cn.javabs.school.dao.impl.UserDaoImpl;
import cn.javabs.school.entity.User;
import cn.javabs.school.service.UserService;

import java.util.List;

/**
 * 设计业务逻辑层接口的实现类
 * @author Mryang 
 */
public class UserServiceImpl implements UserService {

    UserDao userDao = new UserDaoImpl();

    @Override
    public User UserLogin(String username, String password) { 
        return userDao.login(username,password); 
    }

    @Override
    public int addUser(User user) {
        return userDao.addUser(user);
    }

    @Override
    public int delUser(int id) {
        return userDao.delUser(id);
    }

    @Override
    public int updateUser(User user) {
        return userDao.updateUser(user);
    }

    @Override
    public List<User> findAllUser() {
        return userDao.getAllUsers();
    }

    @Override
    public User findUserById(int id) {
        return userDao.getUserById(id);
    }

    @Override
    public User findUserByName(String username) {
        return userDao.getUserByName(username);
    }
}

6.设计[数据访问层]代码

6.1 设计UserDao接口

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package cn.javabs.school.dao;

import cn.javabs.school.entity.User;

import java.util.List;

public interface UserDao {

    int addUser(User user);

    int delUser(int id);

    int updateUser(User user);

    List<User> getAllUsers();

    User getUserById(int id);

    User getUserByName(String username);

    User login(String username, String password);
}

6.2 设计UserDaoImpl接口的实现类

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package cn.javabs.school.dao.impl;

import cn.javabs.school.dao.UserDao;
import cn.javabs.school.entity.User;
import cn.javabs.school.util.DruidUtils;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;

import java.sql.SQLException;
import java.util.List;

public class UserDaoImpl implements UserDao {

    QueryRunner qr =  new QueryRunner(DruidUtils.getDataSource());

    /**
     * 添加用户
     * @param user
     * @return
     */
    @Override
    public int addUser(User user) {
        try {
            return qr.update("insert into user(id,username,password,sex,birthday) values (?,?,?,?,?)",
                    user.getId(),user.getUsername(),user.getPassword(),user.getSex(),user.getBirthday());
        } catch (SQLException e) {
            throw  new RuntimeException(e);
        }
    }

    /**
     * 删除用户
     * @param id
     * @return
     */
    @Override
    public int delUser(int id) {
        try {
            return qr.update("delete from  user where id = ?",id);
        } catch (SQLException e) {
            throw  new RuntimeException(e);
        }
    }

    /**
     * 修改用户
     * @param user
     * @return
     */
    @Override
    public int updateUser(User user) {
        try {
            return qr.update("update user set username = ? where id = ?",user.getUsername(),user.getId());
        } catch (SQLException e) {
            throw  new RuntimeException(e);
        }
    }

    /**
     * 查询所有用户
     * @return
     */
    @Override
    public List<User> getAllUsers() {
        List<User> users = null;
        try {
            users = qr.query("select * from user", new BeanListHandler<User>(User.class));
            return users;
        } catch (SQLException e) {
           throw  new RuntimeException(e);
        }
    }

    /**
     * 根据用户id查询用户
     * @param id  参数是  用户的id
     * @return
     */
    @Override
    public User getUserById(int id) {
        try {
            User user = qr.query("select * from user where id = ?", new BeanHandler<User>(User.class),id);
            return user;
        } catch (SQLException e) {
            throw  new RuntimeException(e);
        }
    }

    /**
     * 根据用户名获取用户
     * @param username
     * @return
     */
    @Override
    public User getUserByName(String username) {
        try {
            User user = qr.query("select * from user where username = ?", new BeanHandler<User>(User.class),username);
            return user;
        } catch (SQLException e) {
            throw  new RuntimeException(e);
        }
    }

    @Override
    public User login(String username, String password) {
        try {
            return qr.query("select * from user where username=? and  password =?", new BeanHandler<User>(User.class),username,password);
        } catch (SQLException e) {
            throw  new RuntimeException(e);
        }
    }
}

7.设计[表现层]代码

7.1 设计 Servlet代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package cn.javabs.school.servlet;

import cn.javabs.school.entity.User;
import cn.javabs.school.service.UserService;
import cn.javabs.school.service.impl.UserServiceImpl;
import org.apache.commons.beanutils.BeanUtils;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.util.List;

@WebServlet("/userServlet")
public class UserServlet extends HttpServlet {

    UserService userService = new UserServiceImpl();

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet( request,  response);
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.setCharacterEncoding("utf-8");
        response.setCharacterEncoding("utf-8");
        response.setContentType("text/html;charset=utf-8");
        String op = request.getParameter("op");
        if ("addUser".equals(op)){
            addUser( request,  response);
        }else if ("updateUser".equals(op)){
            updateUser( request,  response);
        }else if("delUser".equals(op)){
            delUser( request,  response);
        }else if("findAllUsers".equals(op)){
            findAllUsers( request,  response);
        }else if("editUser".equals(op)){
            editUser( request,  response);
        }else if("goToAddUserView".equals(op)){
            goToAddUserView( request,  response);
        }else if("userLogin".equals(op)){
            userLogin( request,  response);
        }else if("userLogout".equals(op)){
            userLogout( request,  response);
        }
        else{
            System.out.println("参数传递有误!");
        }

    }

    /**
     * 用户退出
     * @param request
     * @param response
     */
    private void userLogout(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
        HttpSession session = request.getSession();

        session.removeAttribute("USER_SESSION");
        request.getRequestDispatcher("/index.jsp").forward(request,response);
    }

    /**
     * 用户登录
     * @param request
     * @param response
     */
    private void userLogin(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        User user = new User();
        try {
            BeanUtils.populate(user,request.getParameterMap());
        }  catch (Exception e) {
            throw  new RuntimeException(e);
        }
        User u = userService.UserLogin(user.getUsername(), user.getPassword());
        if(u!= null){
            HttpSession session = request.getSession();
            session.setAttribute("USER_SESSION",u);// USER_SESSION 是一个记号|标记
            request.getRequestDispatcher("/admin/main.jsp").forward(request,response);
        }else{
            request.setAttribute("msg","用户登录失败");
            request.getRequestDispatcher("/message.jsp").forward(request,response);
        }
    }

    /**
     * 去添加用户页面的方法
     * @param request
     * @param response
     */
    private void goToAddUserView(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.getRequestDispatcher("/admin/addUser.jsp").forward(request,response);
    }

    /**
     * 查询全部用户
     * @param request
     * @param response
     * @throws ServletException
     * @throws IOException
     */
    private void findAllUsers(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        List<User> list = userService.findAllUser();

        request.setAttribute("list",list);
        request.getRequestDispatcher("/admin/UserList.jsp").forward(request,response);
    }

    /**
     * 修改用户之第二个环节,提交数据
     * @param request
     * @param response
     * @throws ServletException
     * @throws IOException
     */
    private void updateUser(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String id = request.getParameter("id");
        int  userId = Integer.parseInt(id);
        User user = new User();
        try {
            user.setId(userId);// user中只要id  有没有username  password ... 都没有
            BeanUtils.populate(user,request.getParameterMap());//  有了username  password ... | 不会管 id的问题
            // user 有 了  id  username  password ...
        } catch (Exception e) {
             throw  new RuntimeException(e);
        }
        int rows = userService.updateUser(user);
        if (rows>0){
            request.setAttribute("msg","修改用户成功");
            request.getRequestDispatcher("/message.jsp").forward(request,response);
        }else{
            request.setAttribute("msg","修改用户失败");
            request.getRequestDispatcher("/message.jsp").forward(request,response);
        }
    }

    /**
     * 根据id删除用户
     * @param request
     * @param response
     * @throws ServletException
     * @throws IOException
     */
    private void delUser(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        String id = request.getParameter("id");

        int  userId = Integer.parseInt(id);
        int rows = userService.delUser(userId);
        if (rows>0){
            request.setAttribute("msg","删除用户成功");
            request.getRequestDispatcher("/message.jsp").forward(request,response);
        }else{
            request.setAttribute("msg","删除用户失败");
            request.getRequestDispatcher("/message.jsp").forward(request,response);
        }


    }

    /**
     * 添加用户
     * @param request
     * @param response
     * @throws ServletException
     * @throws IOException
     */
    private void addUser(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {



        User user = new User();
        try {
            BeanUtils.populate(user,request.getParameterMap());
            int rows = userService.addUser(user);
            
            if (rows>0){
                request.setAttribute("msg","添加用户成功");
                request.getRequestDispatcher("/message.jsp").forward(request,response);
            }else{
                request.setAttribute("msg","添加用户失败");
                request.getRequestDispatcher("/message.jsp").forward(request,response);
            }

        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        }

    }

    /**
     * 修改用户之第一个环节,数据回显
     * @param request
     * @param response
     * @throws ServletException
     * @throws IOException
     */
    private void editUser(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String id = request.getParameter("id");
        System.out.println("id:"+id);
        int  userId = Integer.parseInt(id);
        System.out.println("userId:"+userId);
        User user = userService.findUserById(userId);

        if (user != null){
            request.setAttribute("user",user);
            request.getRequestDispatcher("/admin/updateUser.jsp").forward(request,response);
        }else{
            request.setAttribute("msg","用户数据回显失败");
            request.getRequestDispatcher("/message.jsp").forward(request,response);
        }
    }
}

7.2 设计jsp页面的代码

在web中创建两个文件夹

      一个front:用于存放前台页面的文件夹;

     另一个为admin:用于存放后台页面的文件夹

目前我们在写的页面是后台的模块,因此在admin里创建页面。

首页index.jsp【位于web下】

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<%--
  Created by IntelliJ IDEA.
  User: Mryang
  Date: 2019/6/11
  Time: 13:54
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
  <head>
    <title>用户管理首页</title>
  </head>
  <body>
    <a href="${pageContext.request.contextPath}/userServlet?op=goToAddUserView">添加用户</a>
    <a href="${pageContext.request.contextPath}/userServlet?op=findAllUsers">所有用户</a>
  </body>
</html>

用户登录页面login.jsp【位于web下】

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<%--
  Created by IntelliJ IDEA.
  User: Mryang
  Date: 2019/6/12
  Time: 9:23
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<form action="${pageContext.request.contextPath}/userServlet?op=userLogin" method="post">
    <table border="1">
        <tr>
            <td>
                用户名
            </td>
            <td>
                <input type="text" name="username" />
            </td>
            <td></td>
        </tr>
        <tr>
            <td>
                密码
            </td>
            <td>
                <input type="text" name="password" />
            </td>
            <td></td>
        </tr>
        <tr align="center">
            <td colspan="2">
                <input type="submit" value="用户登录" />
            </td>
            <td></td>
        </tr>
    </table>
</form>
</body>
</html>

提示信息页面message.jsp【位于web下】

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<%--
  Created by IntelliJ IDEA.
  User: Mryang
  Date: 2019/6/12
  Time: 8:17
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    ${msg}
</body>
</html>

添加用户addUser.jsp【位于admin下】

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<%--
  Created by IntelliJ IDEA.
  User: Mryang
  Date: 2019/6/12
  Time: 8:08
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<form action="${pageContext.request.contextPath}/userServlet?op=addUser" method="post">
    <table border="1">
        <tr>
            <td>
                用户名
            </td>
            <td>
                <input type="text" name="username" />
            </td>
            <td></td>
        </tr>
        <tr>
            <td>
                密码
            </td>
            <td>
                <input type="text" name="password" />
            </td>
            <td></td>
        </tr>
        <tr>
            <td>性别</td>
            <td>
                <input type="text" name="sex" />
            </td>
            <td></td>
        </tr>
        <tr>
            <td>出生年月</td>
            <td>
                <input type="text" name="birthday" />
            </td>
            <td></td>
        </tr>
        <tr align="center">
            <td colspan="2">
                <input type="submit" value="添加用户" />
            </td>
            <td></td>
        </tr>
    </table>
</form>
</body>
</html>

查询用户列表UserList.jsp

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<%--
  Created by IntelliJ IDEA.
  User: Mryang
  Date: 2019/6/11
  Time: 16:02
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%--jstl 标准标签库--%>
<html>
<head>
    <title>用户列表</title>
</head>
<body>
    <table border="1" width="438">
        <c:forEach items="${list}"  var="l">
            <tr>
                <td>${l.id}</td>
                <td>${l.username}</td>
                <td>${l.birthday}</td>
                <td>
                    <a href="JavaScript:delUser('${l.id}')">删除</a>
                    <a href="${pageContext.request.contextPath}/userServlet?op=editUser&id=${l.id}">修改</a>
                </td>
            </tr>
        </c:forEach>
    </table>
</body>
</html>
<script>
    function  delUser(id) {
       var sure = confirm("你确定要删除吗?");
       if(sure){
         window.location.href="${pageContext.request.contextPath}/userServlet?op=delUser&id="+id;
       }else {
           alert("NoOk")
       }
    }
</script>

 修改用户页面updateUser

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<%--
  Created by IntelliJ IDEA.
  User: Mryang
  Date: 2019/6/12
  Time: 8:08
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>修改用户页面</title>
</head>
<body>
<form action="${pageContext.request.contextPath}/userServlet?op=updateUser&id=${user.id}" method="post">
    <table border="1">
        <tr>
            <td>
                用户名
            </td>
            <td>
                <input type="text" name="username" value="${user.username}" />
            </td>
            <td></td>
        </tr>
        <tr>
            <td>
                密码
            </td>
            <td>
                <input type="text" name="password" value="${user.password}" />
            </td>
            <td></td>
        </tr>
        <tr>
            <td>性别</td>
            <td>
                <input type="text" name="sex" value="${user.sex}"/>
            </td>
            <td></td>
        </tr>
        <tr>
            <td>出生年月</td>
            <td>
                <input type="text" name="birthday" value="${user.birthday}"/>
            </td>
            <td></td>
        </tr>
        <tr align="center">
            <td colspan="2">
                <input type="submit" value="修改用户" />
            </td>
            <td></td>
        </tr>
    </table>
</form>
</body>
</html>

8. 将代码提交到GitHub

案例代码:https://github.com/yangsir1688/controlManagerPage/tree/master/jlnk-school/demo-case

如图:

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019年06月12日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
基于 opencv 的人脸识别系统
随着智能设备的不断发展,人脸检测技术应用于越来越多的领域,极大的丰富和方便了人们的生活,具有很大的商业价值和研究意义。人 脸 识 别 主 要 为 两 个 步 骤:人 脸 检 测(FaceDetection)和人脸识别(Face Recogniton)。人脸检测就是判断待检测图像中是否存在人脸以及人脸在图片中的位置,人脸识别则是将检测到的人脸与已知的人脸库中的人脸进行比对,得出相似度信息。本项目基于天嵌的 TQ2440(采用 S3C2440 处理器)硬件开发平台,扩展 USB 摄像头模块,搭建配置嵌入式开发环境,给出并实现了一个嵌入式人脸识别实现方案。本系统使用人脸类 harr 特征、Adaboost 算法进行人脸检测,采用 PCA(Principal Component Analysis)降维算法得到特征脸子空间,将在 PC 平台训练的人脸识别分类器预存到嵌入式目标平台,最后结合最近邻匹配算法实现在线人脸识别,实际采集的图片测试结果表明该系统效果良好。
跋扈洋
2022/03/29
2.4K0
基于opencv人脸识别
5.开始、读训练数据、计算平均脸、计算协方差矩阵、计算特征值、特征矩阵、 PAC降维、子空间模型、检测
全栈程序员站长
2022/09/05
6280
基于opencv人脸识别
【模式识别】解锁降维奥秘:深度剖析PCA人脸识别技术
这些技术通常不是孤立存在的,而是相互交叉和融合的,以解决更复杂的问题。在实际应用中,根据具体的问题和数据特点选择合适的模式识别技术是至关重要的。
SarPro
2024/02/20
3930
【模式识别】解锁降维奥秘:深度剖析PCA人脸识别技术
高铁新建人脸识别系统,如何做到整容也可以识别逃犯?
如今人脸识别系统已经广泛应用于我们的生活中,如数码相机、门禁系统、机场的安全设施 、桌面软件、互联网应用(如Facebook)等等[1]。然而今日的一则关于“高铁人脸识别抓逃犯”的新闻一出[2],在评论中又引发了一阵阵怀疑。怀疑的中心问题在于,人脸识别系统真的能准确无误地在数以亿计的面孔中找出匹配的嫌疑人吗? 降维:减少冗余信息 完整的人脸识别系统一般由多个模块组成,在进行人脸识别之前首先要进行人脸检测(即在一张完整的图片中探测到人脸区域),以及图片的预处理、归一化等步骤(例如自动把倾斜的照片摆正)。本文就
用户1737318
2018/06/05
3.3K0
动态人脸识别技术的研究
摘要:本文主要从静态人脸识别局限性的提出,对动态人脸识别技术进行了探讨,介绍其研究背景,工作原理,结果分析,给出了在生活领域中的应用情况,并分析了存在的难题,发展趋势以及在人工智能化潮中的重要作用。
用户9831583
2022/06/16
2.3K0
动态人脸识别技术的研究
人脸识别系列一 | 特征脸法
从这里开始,我会不定期的更新一些人脸识别的有趣算法和小demo算法,源码也会开放出来,自己在学习的过程中希望也能帮助到公众号中对这方面感兴趣的小伙伴,无论是从源码角度,还是从原理角度,我说清楚了,对在看的你有帮助就是我最大的幸福。
BBuf
2019/12/09
1.7K0
使用计算机视觉实战项目精通 OpenCV:6~8
非刚性人脸跟踪是视频流每一帧中一组准密集的人脸特征的估计,这是一个难题,现代方法从许多相关领域借鉴了思想,包括计算机视觉,计算几何 ,机器学习和图像处理。 这里的非刚性指的是以下事实:人脸特征之间的相对距离在面部表情和整个人群之间变化,并且不同于人脸检测和跟踪,后者仅旨在在每个帧中查找面部的位置,而不是配置人脸特征。 非刚性人脸跟踪是一个流行的研究主题,已经有二十多年的历史了,但是直到最近,各种方法才变得足够鲁棒,处理器也足够快,这使得构建商业应用成为可能。
ApacheCN_飞龙
2023/04/27
1.5K0
使用计算机视觉实战项目精通 OpenCV:6~8
Python | Opencv的人脸检测和人类识别
开始人类检测之前,我们要先获取一个特征数据。在opencv安装目录中,cv2/data文件夹,进入该文件夹后,里面全是特征文件,我们一般选用haarcascade_frontalface_default.xml。
用户9925864
2022/07/27
1.5K0
Python | Opencv的人脸检测和人类识别
OpenCv识别小罗伯特唐尼
在实现人脸识别之前,我们先简单了解一下OpenCv的一些基本操作。在此之前,我们需要先安装OpenCv,我们使用pip安装:
ZackSock
2020/02/14
7420
人脸识别经典算法:特征脸方法(Eigenface)
特征脸方法基本是将人脸识别推向真正可用的第一种方法,了解一下还是很有必要的。特征脸用到的理论基础PCA在之前的文章中已经讲过了。直接上特征脸方法的步骤: 步骤一:获取包含M张人脸图像的集合S。在我们的例子里有25张人脸图像(虽然是25个不同人的人脸的图像,但是看着怎么不像呢,难道我有脸盲症么),如下图所示哦。每张图像可以转换成一个N维的向量(是的,没错,一个像素一个像素的排成一行就好了,至于是横着还是竖着获取原图像的像素,随你自己,只要前后统一就可以),然后把这M个向量放到一个集合S里,如下式所示。
智能算法
2018/04/03
5.5K0
人脸识别经典算法:特征脸方法(Eigenface)
关于OpenCV for Python入门-自带人脸识别工具测试
前文提到了OpenCV自带的人脸分类器,虽然准确度一般,但是含着泪也要把工作做完,巧了,OpenCV还提供了三种人脸识别算法(Eigenfaces、Fisherfaces、LBPH),这几种算法各有各的特点,识别率也一般。
python与大数据分析
2022/04/02
6250
关于OpenCV for Python入门-自带人脸识别工具测试
基于OpenCV3实现人脸识别(实践篇)[通俗易懂]
由于篇幅原因,后面一篇写各个算法背后的原理,原理背后的相关知识的了解,人脸识别项目总遇到的问题
全栈程序员站长
2022/06/26
1.6K0
基于OpenCV3实现人脸识别(实践篇)[通俗易懂]
MATLAB实现人脸识别
本篇博文基于MATLAB实现人脸识别,基于几何特征的算法,对人脸从图像采集、预处理、到特征点定位提取,校验通过;主要利用YCbCr肤色模型,通过连通分量提取算法定位人脸;对RGB图像通过形态学图像处理算法选定区域,再进行细化算法,找到其人脸坐标并提取出来;然后利用PCA与特征脸算法计算特征值完成识别。
不脱发的程序猿
2023/05/26
7940
MATLAB实现人脸识别
人脸识别简介(使用Python代码)
人脸识别是计算机视觉的一个子领域,它的应用范围非常广泛,现在已经成为世界各地的企业争相竞逐的新技术之一。考虑到市场的盈利现状,未来这项技术还会有更大的需求空间,所以作为机器学习的学习者,自己动手去从头开始构建一个人脸识别工具很有价值。
小小詹同学
2019/11/12
3.1K0
使用python3.7和opencv4.1来实现人脸识别和人脸特征比对以及模型训练
     OpenCV4.1已经发布将近一年了,其人脸识别速度和性能有了一定的提高,这里我们使用opencv来做一个实时活体面部识别的demo
用户9127725
2022/08/08
2K0
Openface人脸识别的原理与过程
Openface人脸识别的原理与过程: https://zhuanlan.zhihu.com/p/24567586 原理可参考如下论文: 《OpenFace: A general-purpose face recognition library with mobile applications》 第一步:找出所有的面孔 我们流水线的第一步是人脸检测。 我们的目标是找出并比较当前像素与直接围绕它的像素的深度。然后我们要画一个箭头来代表图像变暗的方向: 用梯度来代替像素这事看起来没有明确目的,但其实背后的理由
微风、掠过
2018/04/10
3.2K0
Openface人脸识别的原理与过程
简单人脸识别一之使用opencv+cnn网络实现人脸识别
最近在研究目标检测这个方向,看到网上有很多的人脸识别帖子,所以也想着上上手看看。当时是做了三个模型出来,第一个就是网上很通用普遍的opencv+简单三层cnn网络来实现的,说实话效果真的一般吧!具体的下面再细细陈述。第二个是把三层cnn网络换成了残差网络。因为自己刚好也是学习了残差网络。就想着生搬硬套过来,但效果说实话很迷,时好时坏,把我是整蒙逼了,后面也会提的。最后一个是用opencv+MTCNN+FaceNet来实现的,效果就比较好了,训练速度快,检测人脸的准确率也比前两个模型更好。我接下来会写三篇文章来一一介绍!
全栈程序员站长
2022/08/26
2K0
简单人脸识别一之使用opencv+cnn网络实现人脸识别
异质人脸识别研究综述
人脸识别(Face Recognition),是指对输入的图像或视频,判断其中是否存在人脸,进而依据人脸的面部特征,自动进行身份识别。 其过程可分为人脸检测、人脸特征提取和人脸识别三个阶段。人脸识别是身份认证的重要生物识别技术,也是计算机视觉领域研究最多的课题之一,经过近30年的研究,在受控和均匀的可见光条件下的传统人脸识别得到了很大的发展,目前已广泛应用于军事、金融、公共安全和日常生活等领域。
SIGAI学习与实践平台
2019/05/14
2.1K0
异质人脸识别研究综述
基于OpenCv的人脸识别(Python完整代码)
采集人脸图片的方法多种多样,可以直接从网上下载数据集,可以从视频中提取图片,还可以从摄像头实时的采集图片。
全栈程序员站长
2022/06/26
7.5K0
基于OpenCv的人脸识别(Python完整代码)
DeepFace:人脸识别库 DeepFace 简单认知
对每个人而言,真正的职责只有一个:找到自我。然后在心中坚守其一生,全心全意,永不停息。所有其它的路都是不完整的,是人的逃避方式,是对大众理想的懦弱回归,是随波逐流,是对内心的恐惧 ——赫尔曼·黑塞《德米安》
山河已无恙
2023/08/21
2K0
DeepFace:人脸识别库 DeepFace 简单认知
相关推荐
基于 opencv 的人脸识别系统
更多 >
目录
  • 1. 准备jar包
  • 2.写Druid的数据库连接池工具类
    • 2.1 设计工具类
    • 2.2 设计配置文件
  • 3.写sql代码
  • 4.写测试类 测试查询是否可以查到。用于测试数据库连接是否有误!
  • 5.设计[业务逻辑层]代码
    • 5.1 设计UserService接口
    • 5.2 设计UserServiceImpl实现类
  • 6.设计[数据访问层]代码
    • 6.1 设计UserDao接口
    • 6.2 设计UserDaoImpl接口的实现类
  • 7.设计[表现层]代码
    • 7.1 设计 Servlet代码
    • 7.2 设计jsp页面的代码
  • 8. 将代码提交到GitHub
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档