python人脸识别:对完成一个简单的人脸识别项目总结

简单的人脸识别项目

附上我的思维导图
在这里插入图片描述
附上我的项目路径
在这里插入图片描述
其中我的lfw-a的图片库是在网上下载的
下载网站http://vis-www.cs.umass.edu/lfw/

下面的这个就是界面
在这里插入图片描述
renl

人脸识别会对数据库进行扫描,让后加载到模型中去,到摄像头就会根据人脸进行识别显示,并打印出照片上的名字

对数据库进行删除和查询
在这里插入图片描述
可以扫描你输入的目录
在这里插入图片描述

1. 构建数据库(使用sqlite3)

import sqlite3

FACE_SQL_NAME = "face.db"

SQL_CREATE_TABLE = \
    '''
    CREATE TABLE FACE_INFO(
        ID integer PRIMARY KEY autoincrement    NOT NULL,
        NAME           TEXT    NOT NULL,
        IMAGE_PATH     TEXT
    );'''

SQL_INSERT_DATA = [
    "INSERT INTO FACE_INFO (ID,NAME,IMAGE_PATH) VALUES (1, 'Paul',null )",
    "INSERT INTO FACE_INFO (ID,NAME,IMAGE_PATH) VALUES (2, 'Allen',null )",
    "INSERT INTO FACE_INFO (ID,NAME,IMAGE_PATH) VALUES (3, 'Teddy',null )",
    "INSERT INTO FACE_INFO (ID,NAME,IMAGE_PATH) VALUES (4, 'Mark',null )"
]

SQL_QUERY_DATA = "SELECT id, name FROM FACE_INFO"

SQL_UPDATE_DATA = "UPDATE FACE_INFO set IMAGE_PATH = null where ID=1"

SQL_DELETE_DATA = "DELETE from FACE_INFO where ID=2;"


def create_sqlite3(sql_name):
    '''
    根据数据库名字 创造 或者 连接 数据库
    :param sql_name:要创造或者连接的数据库名
    :return:conn 返回的是这个数据库的对象
    '''
    conn = sqlite3.connect(sql_name)
    return conn


def sqlite_exec_sql(conn, sql):
    '''
    执行指定的SQL语句
    :param conn: 数据库的对象(他是哪个数据库)
    :param sql: 需要执行的语句时什么
    :return: cursor 返回受影响的行数
    '''
    # cursor用来执行命令的方法
    c = conn.cursor()
    # 执行单条sql语句,接收的参数为sql语句本身和使用的参数列表,返回值为受影响的行数
    cursor = c.execute(sql)
    return cursor


def create_table(conn, sql):
    '''
    向 该数据库创建一个表
    :param conn: 需要操作的表
    :param sql: 需要执行的语句
    :return: 创建成功返回true, 失败返回false
    '''
    sqlite_exec_sql(conn, sql)
    return True

2. 构建图片相关操作的函数(img_op.py)

import numpy as np
import os
import cv2

PATH1 = "./dog.jpg"
PATH2 = "C:/Users/yl177/Pictures/Camera Roll/4b91f4e8f3f658aeb78dd35c79e4c3bc.jpg"


img_file = list()
def load_face_image_data(path):
    '''
    通过指定路径,获得该图片,将其转化为数据
    :param path: 文件路径
    :return: 图片的数据
    '''
    img_data = cv2.imread(path)
    return img_data


def move_face_image(image_path, offset_x, offset_y):
    '''
    对人脸图片进行平移操作(向右移25像素,向上移15像素),返回新图片的数据
    :param image: 需要平移的图片路径
    :param offset_x: x坐标平移的量(正 -- 向向右, 负 -- 表示向左)
    :param offset_y: y坐标平移的量 (正 -- 向向下, 负 -- 表示向上)
    :return:
    '''
    img = load_face_image_data(image_path)
    rows = img.shape[0]
    cols = img.shape[1]
    M = np.float32([[1, 0, offset_x], [0, 1, offset_y]])
    image_new_data = cv2.warpAffine(img, M, dsize=(cols, rows))
    print(image_new_data)
    return image_new_data


def scan_dir(path):
    '''
    扫描指定路径下的目录
    :param path:
    :return:
    '''
    if os.path.isfile(path):
        return
    file_list = os.listdir(path)
    # print(file_list)
    for item in file_list:
        temp_path = os.path.join(path, item)
        # print(temp_path)
        if os.path.isfile(temp_path):
            if temp_path.endswith("jpg") or temp_path.endswith("png"):
                img_file.append(temp_path)
                continue
        if os.path.isdir(temp_path):
            scan_dir(temp_path)


def show_image(img):
    cv2.imshow('show_img', img)
    cv2.waitKey(0)
    # cv2.destroyAllWindows()


if __name__ == '__main__':
    # old_img = load_face_image_data(PATH2)
    # new_img = move_face_image(PATH, 15, -15)
    # show_image(old_img)
    # show_image(new_img)
    scan_dir("./")
    # print(img_file)
    # print(img_file[0])
    # img = load_face_image_data(img_file[1])
    # show_image(img)


3. 构建人脸相关操作(face_op.py)

import sqlite3
import sql as sql_op
import img_op

def sql_con():
    '''
    建立数据库的连接
    :return: 返回给数据库的对象
    '''
    return sql_op.create_sqlite3(sql_op.FACE_SQL_NAME)

def face_query(conn, face_name):
    '''
    根据姓名查询此人的人脸图片
    :param conn: 该数据库的对象
    :param face_name:需要查询的人名
    :return: cursor:返回的是收到影响的行
    '''
    sql = "select ID,NAME,IMAGE_PATH from FACE_INFO where NAME='" + face_name + "'"
    cursor = sql_op.sqlite_exec_sql(conn, sql)
    return cursor

def face_query_by_id(conn, id):
    '''
    根据id查询此人相关信息
    :param coon: 需要连接的数据库名
    :param id: 需要查询的id
    :return:  查到数据返回cursor,受影响的哪一行
    '''
    sql = "select ID,NAME,IMAGE_PATH from FACE_INFO where ID='" +str(id) + "'"
    cursor = sql_op.sqlite_exec_sql(conn, sql)
    return cursor

def face_query_all
  • 1
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值