2301_78541233 2023-06-07 18:40 采纳率: 0%
浏览 62
已结题

一个关于人脸识别的实训报告

img


详细可后补充,是关于一个人脸识别的实训报告, 价格可议 ,会加钱。

  • 写回答

7条回答 默认 最新

  • yy64ll826 2023-06-12 18:47
    关注
    获得2.40元问题酬金
    
    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
    
    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)
    
    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(conn):
        '''
        查询所有数据库
        :param conn:需要连接数据库的对象
        :return:查到数据返回cursor,受影响的哪一行
        '''
        sql = "select * from FACE_INFO"
        cursor = sql_op.sqlite_exec_sql(conn, sql)
        return cursor
    
    def face_del(conn, face_name):
        '''
        根据图片名字删除指定的人脸数据
        :param conn: 数据库
        :param face_name:需要删除的图片的名字
        :return:如果删除成功返回True
        '''
        sql = "DELETE from FACE_INFO where NAME='" + face_name + "'"
        cursor = sql_op.sqlite_exec_sql(conn, sql)
        conn.commit()
    
    def face_del_by_id(conn, id):
        '''
        根据id删除指定的人脸数据
        :param conn: 数据库
        :param index: 需要删除的id索引
        :return:如果删除成功返回True
        '''
        sql = "DELETE from FACE_INFO where ID='" + str(id) + "'"
        cursor = sql_op.sqlite_exec_sql(conn, sql)
        conn.commit()
    
    def face_insert(conn, name, img_path):
        '''
        将人的相关信息(id,name,人脸图片)插入到数据库之中去
        :param conn: 该数据库的对象
        :param id: 唯一id
        :param name: 人脸的姓名
        :param img_path: 人脸的图片路径
        :return:True数据插入成功,Talse数据插入失败
        '''
        sql = "INSERT INTO FACE_INFO (NAME,IMAGE_PATH) VALUES (" +  "'" + name + "','" + img_path + "')"
        try:
            sql_op.sqlite_exec_sql(conn, sql)
        except sqlite3.IntegrityError as result:
            print("数据插入失败,原因:", result)
            return False
        else:
            conn.commit()
            return True
    
    def face_recognition():
        """
        实现人脸识别算法(打桩)
        :return: 返回此人的姓名
        """
        return 'Aaron_Eckhart_0001'
    
    def test_1():
        '''
        根据id查询信息的测试
        :return:
        '''
        conn = sql_con()
        b = face_query(conn, "小红")
        # print(b.fetchone())
        for pid, name, path in b:
            print(name)
            print(pid)
            print(path)
            pass
        conn.close()
    
    def test_2():
        '''
        删除测试
        :return:
        '''
        conn = sql_con()
        face_del_by_id(conn, 5)
        conn.close()
    
    def test_3():
        '''
        如果插入重复的数据,则报错误(使用异常)
        :return:
        '''
        coon = sql_con()
        flag = face_insert(coon, "小红", img_op.PATH2)
        if flag == True:
            print("插入成功")
        else:
            print("插入失败")
    
    def test_4():
        '''
        查询所有数据库的名字
        :return:
        '''
        conn = sql_con()
        cursor = face_query_all(conn)
        for id, name, path in cursor:
            print(id)
            print(name)
            print(path)
    
    if __name__ == '__main__':
        # test_1()
        # test_2()
        # test_3()
        test_4()
    
    
    评论

报告相同问题?

问题事件

  • 系统已结题 6月15日
  • 创建了问题 6月7日