当前位置:   article > 正文

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

图书管理系统python
记录分享物联网数据处理技术课程的期末大作业

一、研究背景

在当前信息时代,图书馆作为知识储备和信息资源中心,其地位与重要性持续扩展。然而,传统的图书馆管理方式面临着一系列挑战,包括书籍盗窃和管理效率低下等问题。为解决这些困境并提高管理效率,本项目旨在构建一个以物联网技术和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()函数将二值图像中的字符进行分割,并识别出每个字符。

  1. def split_col(bin_img2):
  2. the_col = [0] * bin_img2.shape[1]
  3. for i in range(bin_img2.shape[0]):
  4. for j in range(bin_img2.shape[1]):
  5. if bin_img2[i, j] != 0:
  6. the_col[j] += 1
  7. a = [] num = 0
  8. for j in range(bin_img2.shape[1]):
  9. if the_col[j] >= 3 and num % 2 == 0:
  10. num += 1
  11. left_bound = j
  12. j += 2
  13. elif the_col[j] == 0 and num % 2 != 0:
  14. num += 1
  15. right_bound = j
  16. a.append((left_bound, right_bound))
  17. j += 2
  18. return a

3)图像识别模块:

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

字符分割图

4)数据库管理模块:

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

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

5)用户界面模块:

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

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/555973
推荐阅读
相关标签
  

闽ICP备14008679号