物联网数据处理技术课程设计——基于python实现的智能图书馆借阅管理系统(OpenCV+MySQL)

记录分享物联网数据处理技术课程的期末大作业

一、研究背景

在当前信息时代,图书馆作为知识储备和信息资源中心,其地位与重要性持续扩展。然而,传统的图书馆管理方式面临着一系列挑战,包括书籍盗窃和管理效率低下等问题。为解决这些困境并提高管理效率,本项目旨在构建一个以物联网技术和python 语言为基础的智能图书馆借阅管理系统。
尽管物联网技术在图书馆智能化方面提供了重要支持,但也存在着智能感知设备需求量大、 服务质量不稳定等 问题。目前存在的研究总结到目前大多数的图书馆存在管理操作不完善、信息孤岛现象严重的问题。在实际的图书管理操作过程中,由于部分图书馆管理人员的服务观念较为陈旧,日常管理工作仍以人工管理为主,导致图书馆业务无法进行集中式操作,进而财务管理工作上出现较大的问题,甚至浪费图书馆的人力资源、物力资源和财力资源,阻碍图书馆管理效率的提升;其次,图书馆管理系统中信息孤岛现象严重,即虽然图书馆管理系统在不断优化和扩张,并且在不断增加子系统,但是这些子系统未能完全涵盖图书馆的实际管理工作和管理业务,导致每个子系统呈现出孤立性,未能实现有效联系,无法为借阅者提供高品质的借阅服务。
本系统的目标在于提供一个智能化、高效的图书馆借阅管理解决方案,具体项目研究目标如下:
1 )实现图书借阅自动化:通过图像识别技术自动辨识书籍信息,简化借阅流程。通过对书籍封底 ISBN 码( International Standard Book Number ,国际标准书号)的识别,实现书籍的实时查询与选定,方便读者进行借书还书的操作以及管理者可快速录入数据。
2 )提高管理效率与安全性:降低人工操作,减少书籍丢失和盗窃的风险;减少对标识硬件的依赖性,提高数据交互的稳定性。
3 )提升用户体验:改善读者借阅过程,提高借阅速度和管理便捷性。

二、开发环境介绍

语言环境:Python

数据库:Mysql

开发工具:VScode

三、系统架构

四、系统实现与测试

1)图像采集模块:

负责确保摄像头以适当的设置捕捉图书图像,保证图像质量和清晰度,以便后续处理和识别带有图书信息的图像数据。

2)图像处理模块:

使用 OpenCV 库,对从图像采集模块获取的图像数据进行各种处理。这包括预处理步骤(如降噪、灰度化、二值化等)、图像旋转以适应可能的倾斜,以及边缘检测等操作。该模块通过 OpenCV 提供的功能,优化图像以便图像识别模块更好地识别图书信息。
ISBN 码数据集
ISBN 码样本模板集
首先需要对ISBN码数据集做以下图像处理:
1 )读取图像并调整大小: cv2.imread(test_img_fn[index]) 读取测试图像,然后将其宽度调整为 700 像素。
2 )显示原始图像: plt.imshow(cv2.cvtColor(src, cv2.COLOR_BGR2RGB)) ,可视化和检查原始图像的外观和内容。
3 )灰度转换: cv2.cvtColor(src, cv2.COLOR_BGR2GRAY) 将原始图像转换为灰度图像。灰度图像用于简化图像处理,并且后续的识别算法对灰度图像有更好的适应性。
4 )去噪处理 : processed_gray = denoising(gray1, processed_gray) 使用denoising()函数对灰度图像进行去噪处理。
5 )二值化: bin_img = to_binary_graph(gray1) 将灰度图像转换为二值图像。
处理后结果如下图所示:

分割 ISBN 所在行:通过 split_col()函数将二值图像中的字符进行分割,并识别出每个字符。

def split_col(bin_img2):
    the_col = [0] * bin_img2.shape[1]
    for i in range(bin_img2.shape[0]):
        for j in range(bin_img2.shape[1]):
            if bin_img2[i, j] != 0:
                the_col[j] += 1
    a = [] num = 0
    for j in range(bin_img2.shape[1]):
        if the_col[j] >= 3 and num % 2 == 0:
            num += 1
            left_bound = j
            j += 2
        elif the_col[j] == 0 and num % 2 != 0:
            num += 1
            right_bound = j
            a.append((left_bound, right_bound))
            j += 2
    return a

3)图像识别模块:

负责对图像处理模块优化过的图像进行识别,利用模板匹配等技术,识别图像中的书籍信息,如 ISBN 号码或其他相关信息。它分析经过处理的图像,并尝试将其与预先存储的模板进行匹配,从而识别出图书的相关信息。
通过 recognition() 函数对分割出的每个字符图像进行模板比对识别。
def recognition(input_img):
    sample_img_path = "D:\Desktop\sample\*"
    sample_img_FN = glob.glob(sample_img_path)
    sample_img_nums = len(sample_img_FN)
    min_diff = float('inf')
    recognized_char = '' 
    for img_path in sample_img_FN:
        num_img = cv2.imread(img_path, 0)
        num_img = cv2.resize(num_img, (40, 60))
        input_img = cv2.resize(input_img, (40, 60))
        diff = np.sum(cv2.absdiff(input_img, num_img))
        if diff < min_diff:
            min_diff = diff
            recognized_char = img_path[len(sample_img_path) - 1]
    return recognized_char

字符分割图

4)数据库管理模块:

负责与MySQL数据库交互,并处理存储和管理书籍信息、借阅记录等数据。当图像识别模块识别出图书信息后,该模块将相关信息存储到数据库中,并能根据用户的查询需求从数据库中检索信息,如书籍详情或借阅记录等。

主要设计流程如下:
创建数据库连接:通过 mysql.connector.connect() 建立与 MySQL 数据库的连接,以便后续对数据库进行操作。
创建游标对象:使用 db.cursor() 创建一个游标对象,该对象允许在数据库中执行SQL语 句。
创建 book 表:使用 CREATE TABLE IF NOT EXISTS 语句创建名为 book的表格。该表格有两个字段:id (自增主键)和 ISBN (唯一且不能为空的 ISBN码字段)。
import mysql.connector
db = mysql.connector.connect(
     host="localhost", user="root", password="030303", database="book" )
cursor = db.cursor()
create_table_query = """ 
CREATE TABLE IF NOT EXISTS book (
id INT AUTO_INCREMENT PRIMARY KEY, isbn VARCHAR(20) UNIQUE NOT NULL
)""" 
cursor.execute(create_table_query)
cursor.close()
db.close()
def add_isbn_to_database(isbn):
    db = mysql.connector.connect(
         host="localhost", user="root", password="******", database="book")
    cursor = db.cursor()
    insert_query = "INSERT INTO book (isbn) VALUES (%s)" 
    cursor.execute(insert_query, (isbn,))
    db.commit()
    cursor.close()
    db.close()
book ”数据表信息

5)用户界面模块:

提供一个直观友好的用户界面,方便用户与系统交互。该模块允许用户输入图书信息或进行查询,浏览图书库存或借阅记录,并提供相应的反馈和结果。
根据以上用户借阅图书流程的说明,用户打开查询页面,通过摄像头捕捉书籍图像后,系统会自动进行书籍信息的识别,并提醒用户书籍是否被借出、输入借阅者姓名并实时更新借阅时间。具体实现的结果如下:
对应代码如下:
def borrow_book(isbn_number):
    cursor = db.cursor()
    check_book_query = "SELECT * FROM book WHERE isbn = %s"          
    cursor.execute(check_book_query, (isbn_number,))
    book_exists = cursor.fetchone()
    if book_exists:
        print("书籍已找到!")
        borrow_choice = input("是否需要借阅该书籍?(y/n): ")
        if borrow_choice.lower() == 'y':
            borrower_name = input("请输入借阅者姓名: ")
            print('请输入借阅者姓名:',borrower_name)
            # 获取当前日期时间
            current_date_time = datetime.datetime.now()
            borrow_date = current_date_time.strftime('%Y-%m-%d %H:%M:%S')
            insert_query = "INSERT INTO borrow_records (isbn, borrower_name, borrow_date)VALUES (%s, %s, %s)" borrow_data = (isbn_number, borrower_name, borrow_date)
            cursor.execute(insert_query, borrow_data)
            db.commit()
            print("借阅记录已更新!")
    else:
        print("未找到该书籍,请检查 ISBN 码是否正确。")
    cursor.close()
    db.close()
borrow_book()

总而言之,以上期末项目虽还无法实际应用,但还是很好地训练和巩固了本人对于OpenCV库和搭建MySQL数据库的知识,以上代码非完整代码但所展示的模块代码经测试都可直接运行。

  • 28
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
人脸识别门禁系统是一种基于人脸识别技术智能门禁系统,其可通过对人脸进行采集、识别和比对,实现对门禁的控制和管理。本文将详细阐述基于python+openCV+dlib+mysql的人脸识别门禁系统的设计与实现。 一、技术选型 本系统主要采用以下技术: 1. Python:作为主要编程语言,用于实现整个系统的逻辑控制和算法设计。 2. OpenCV:作为图像处理库,用于实现人脸检测、特征提取和人脸识别等核心功能。 3. Dlib:作为人脸识别库,用于实现人脸特征点检测和人脸识别等功能。 4. MySQL:作为数据库系统,用于存储人脸特征和相关信息。 二、系统设计 本系统主要包括以下功能模块: 1. 人脸采集模块:用于采集用户的人脸图像,并将其存储到本地或远程数据库中。 2. 人脸检测模块:用于检测人脸区域,提取人脸特征,并将其存储到数据库中。 3. 人脸识别模块:用于识别用户的人脸特征,并与数据库中的人脸特征进行比对,以确定用户身份。 4. 门禁控制模块:根据用户身份结果,控制门禁的开关。 5. 数据库管理模块:用于管理数据库中的人脸特征和相关信息。 三、系统实现 1. 人脸采集模块 人脸采集模块主要是通过摄像头对用户的人脸进行拍摄和保存。代码如下: ```python import cv2 cap = cv2.VideoCapture(0) while True: ret, frame = cap.read() cv2.imshow("capture", frame) if cv2.waitKey(1) & 0xFF == ord('q'): #按q键退出 cv2.imwrite("face.jpg", frame) #保存人脸图像 break cap.release() cv2.destroyAllWindows() ``` 2. 人脸检测模块 人脸检测模块主要是通过OpenCV中的CascadeClassifier类进行人脸检测,再通过Dlib中的shape_predictor类进行人脸特征点检测和特征提取。代码如下: ```python import cv2 import dlib detector = dlib.get_frontal_face_detector() #人脸检测器 predictor = dlib.shape_predictor("shape_predictor_68_face_landmarks.dat") #特征点检测器 img = cv2.imread("face.jpg") #读取人脸图像 gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) #转换为灰度图像 faces = detector(gray, 0) #检测人脸 for face in faces: landmarks = predictor(gray, face) #检测特征点 for n in range(68): x = landmarks.part(n).x y = landmarks.part(n).y cv2.circle(img, (x, y), 2, (0, 255, 0), -1) #绘制特征点 cv2.imshow("face", img) cv2.waitKey(0) cv2.destroyAllWindows() ``` 3. 人脸识别模块 人脸识别模块主要是通过Dlib中的face_recognition类进行人脸特征提取和比对。代码如下: ```python import face_recognition known_image = face_recognition.load_image_file("known_face.jpg") #读取已知的人脸图像 unknown_image = face_recognition.load_image_file("unknown_face.jpg") #读取待识别的人脸图像 known_encoding = face_recognition.face_encodings(known_image)[0] #提取已知人脸的特征 unknown_encoding = face_recognition.face_encodings(unknown_image)[0] #提取待识别人脸的特征 results = face_recognition.compare_faces([known_encoding], unknown_encoding) #比对人脸特征 if results[0]: print("Match") else: print("No match") ``` 4. 门禁控制模块 门禁控制模块主要是通过GPIO控制门禁的开关。代码如下: ```python import RPi.GPIO as GPIO import time GPIO.setmode(GPIO.BOARD) GPIO.setup(11, GPIO.OUT) GPIO.output(11, GPIO.HIGH) #开门 time.sleep(5) #等待5秒 GPIO.output(11, GPIO.LOW) #关门 GPIO.cleanup() #清理GPIO资源 ``` 5. 数据库管理模块 数据库管理模块主要是通过MySQLdb模块实现MySQL数据库的连接和操作,包括新建数据库、新建表、插入数据、查询数据等。代码如下: ```python import MySQLdb #连接数据库 conn = MySQLdb.connect(host="localhost", user="root", passwd="123456", db="test", charset="utf8") #新建表 cursor = conn.cursor() sql = "CREATE TABLE `face` (`id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(50) NOT NULL, `encoding` text NOT NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;" cursor.execute(sql) #插入数据 name = "张三" encoding = "0.1,0.2,0.3,0.4" sql = "INSERT INTO `face` (`name`, `encoding`) VALUES (%s, %s)" cursor.execute(sql, (name, encoding)) conn.commit() #查询数据 sql = "SELECT * FROM `face` WHERE `name`=%s" cursor.execute(sql, (name,)) result = cursor.fetchone() print(result) cursor.close() conn.close() ``` 四、总结 本文主要介绍了基于python+openCV+dlib+mysql的人脸识别门禁系统的设计与实现。该系统主要采用了Python作为主要编程语言,OpenCV、Dlib作为图像处理和人脸识别库,MySQL作为数据库系统。通过对这些技术的应用,实现了人脸采集、检测、识别和门禁控制等核心功能。该系统可以应用于各类场景的门禁控制和身份验证,具有较高的实用价值。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值