基于AI 全自动纸质文档处理机器人的设计
作者: 杨国龙1,张标华 麦文菲 黄超权 董阳秀
摘要:本文提出了一种高效智能的文档处理机器人设计方案,旨在提高文档处理效率,降低人力、物力、时间成本以及失误率,以适应现代办公环境的智能、自动化趋势。该机器人可以根据用户定义的关键字词规则,实现智能地将纸质文档分类或排序,此外还能实现内容采集与纠错等任务。其采用三轴桁架结构的机械手,桁架结构由步进电机驱动,机械手包含摄像头、真空吸盘以及多个传感器。用户放入待处理的纸质文档,并通过局域网连接主控板进行发布任务,然后由机械手摄像头检测纸张位置以及识别文字,接着由真空吸盘吸取纸张,分类放置在指定位置。综合以上设计,本方案大幅提高了办公的效率和智能化,为自动化文档处理领域提供了一个可行的解决方案。
关键词:文档处理机器人;三轴桁架结构;机械手;气动;目标检测;字符识别;自然语言处理;Python;YOLOv8
中图分类号:TP311 文献标识码:A
文章编号:1009-3044(2024)34-0028-05 开放科学(资源服务)标识码(OSID) :
0 引言
在现代办公环境中,纸质文档的处理和管理一直是一个重要但耗时的任务。传统的人工处理方式不仅效率低下,而且容易出现错误,导致人力和物力的浪费。随着信息技术和自动化控制技术的快速发展,智能化办公设备逐渐成为各行各业的迫切需求。通过引入机器人来替代人工进行重复性、高强度的工作,成为现代机器人研究的一个重要方向。
近年来,许多研究者在此领域作出了重要贡献。例如,张锐通过对桁架机器人的可靠性分析和改进,设计了一款用于汽车传动轴自动线的机器人,提升了自动化生产线的稳定性和效率[1]。此外,张岳、孙伟和唐庆伟设计了一种基于目标检测的桌面整理机器人,能够有效识别和整理桌面物品,展示了智能化办公设备在提升工作效率方面的巨大潜力[2]。赵先的研究则为冲压机械手设计了一种气动真空系统,解决了因真空压力不稳定而影响作业效率的问题,提升了机械手的工作可靠性[3]。谢波、熊立贵、吴文君等人设计并分析了码垛机械手的吸附式手部装置,该装置基于真空系统,能够高效地抓取和处理平整面产品、纸箱包装产品以及袋装包装产品,从而显著提高了码垛机械手的性能[4]。王晓瑜和郑梦强开发了一种基于视觉识别的智能分拣机械臂,该机械臂利用工业相机采集物料图像,结合HALCON软件处理图像,并通过PLC系统实现了高精度的分拣操作,展现了智能化分拣系统的优越性[5]。
1 总体设计
本设计方案开发了一款基于AI全自动纸质文档处理机器人,整体结构如图1所示。机器人包括硬件和软件两大部分,其中硬件设计包括结构框架、传动系统、机械手。该机器人采用三轴桁架结构,通过步进电机驱动,由同步带和齿轮齿条传动,机械手包括摄像头、限位开关、真空吸盘等。软件设计包括算法应用和控制程序,而算法应用则包括目标检测、字符识别和自然语言处理。目标检测基于YOLOv8s模型,通过训练和优化实现高效准确的实时图像识别,用于识别纸张的位置,字符识别分别通过OpenCV和PyT⁃esseract进行预处理和OCR识别纸张上的内容,自然语言处理通过调用科大讯飞的API接口实现文档内容的分析和处理。控制程序采用上位机与下位机相结合的形式,部署在鲁班猫4开发板,前端基于Boot⁃strap框架开发用户界面,后端基于Flask框架处理业务逻辑,通过GPIO引脚实现对电机、传感器等硬件设备的控制以及数据传输,同时,用户通过局域网实现任务发布和实时控制。
2 硬件设计
2.1 结构框架
结构框架采用三轴桁架机械手结构,桁架结构由铝型材通过紧固件连接而成。其结构包括X、Y、Z三轴。首先使用12支铝型材构成长方体,顶部的两条长边作为X轴,在X轴上增加一条横梁垂直于X轴作为Y轴,接着在Y轴上再增加一条竖梁垂直于X轴和Y 轴作为Z轴,最后在Z轴上连接机械手,使机械手在X、Y、Z三个方向上具有独立自由度,能够覆盖三维坐标系中的任意位置。
2.2 传动系统
在X、Y、Z轴上分别安装传动装置,每个轴由一个步进电机驱动,以确保机械手在三维空间中的精确运动和定位。在X轴上,安装直线导轨,滑块在导轨上滑动。滑块上固定横梁,横梁能够在X轴的基础上线性运动。为了保证横梁两端的平衡同步运动,采用一个步进电机的输出轴同时驱动两侧的同步带,即采用梅花联轴器将输出轴和光轴相连,然后将两侧的同步带轮固定在光轴上,实现机械手在X轴方向上的左右移动。横梁作为Y轴,采用齿轮齿条传动,步进电机驱动齿轮,而齿轮与齿条紧密啮合,从而将电机的旋转运动转化为导轨滑块的线性运动,实现机械手在Y 轴方向上的前后移动。Z轴连接Y轴的导轨滑块,同样采用齿轮齿条传动,使机械手能够在垂直于XY平面的方向上进行上下移动。机器人利用SolidWorks 软件进行建模和仿真,如图2所示。
步进电机均为两相四线制,四根线分别为A+、A-、B+、B-,这些线连接到TB6600驱动器的信号输出端,驱动器接上12V开关电源,其信号输入端有ENA、DIR、PUL三组控制引脚与主控板的GPIO引脚对应连接,然后通过编写程序实现对步进电机的控制。具体来说,可以通过对ENA+引脚输入低电平对步进电机进行使能,电机的正转或反转由DIR+引脚高低电平控制,并通过向PUL+引脚发送PWM脉冲信号来控制电机的旋转速度,而ENA-、DIR-、PUL-引脚接地。在一定周期内,PWM波形的占空比越大,电机的转速就越快。限位开关的作用是限制机械运动范围,防止设备损坏,同时向控制系统提供位置信号。其公共端输入3.3V,常开端连接GPIO引脚。主控板不断读取引脚输入值,当X、Y、Z轴移动到达尽头时限位开关被按下,引脚值变为高电平,步进电机停止移动。
2.3 机械手
机械手是基于气动系统的设计,包括微型真空泵、微型电磁阀、继电器、气动管道、真空吸盘、负气压传感器、激光测距模块和USB摄像头。微型真空泵通过12V直流无刷电机产生负压,并结合负气压传感器实时监测气压值,感知纸张是否被吸取,且是否为单张纸。为适应不同质量的纸张,通过PWM调速来调节真空泵的输出负压。微型电磁阀负责控制气流的通断,其开闭由继电器控制,而继电器的通断又由主控板控制。真空吸盘采用丁腈橡胶材料,专门设计用于吸附纸张和塑料薄膜。激光测距模块用于实时检测机械手到纸张的精准距离,摄像头连接到主控板的USB接口,而其余传感器则连接到相应的GPIO引脚。在分拣操作中,微型真空泵启动,电磁阀开启,产生的负压通过气动管道传递至真空吸盘,使其吸附纸张。需要释放纸张时,电磁阀关闭,负压被消除,纸张自然脱离吸盘。机械手结构如图3所示,电气结构如图4所示[6]。
3 软件设计
3.1 算法应用
3.1.1 目标检测
首先,进行标注以创建数据集。基于YOLOv8s预训练模型,调整参数进行训练。在PC端训练得到.pt 格式模型,将其转换为.onnx格式,再转换为.rknn格式,作用是转换成适配瑞芯微NPU的模型,在NPU上获得更高的推理效率。主控板通过摄像头采集实时图像进行验证推理。对模型性能方面,进行参数调整,并对学习率、注意力机制、多线程技术等进行优化,改进卷积神经网络结构,提高推理速度和处理效率,最终实现了在复杂场景下的实时检测和识别能力,为实际应用提供了更为高效的解决方案。目标检测流程如图5所示。
3.1.2 字符识别
在需要进行字符识别任务时,利用OpenCV对机器人摄像头采集到的图像进行预处理,包括灰度处理、二值化处理以增强对比度和高斯滤波处理以提高清晰度,降低识别难度。预处理完成后,将图像交由PyTesseract进行OCR字符识别,以识别文档中的文字内容并提取信息。
3.1.3 自然语言处理
在需要进行自然语言处理时,通过WebSocket进行鉴权并调用科大讯飞的星火大模型API接口进行处理。识别得到的文字将进行拼写和语法检查,提示错误并提出修改建议。根据用户需求,还可以对文档进行润色优化、提取关键信息、分析语义,实现文档分类放置,并对纸质问卷等进行答案提取汇总,无须人工操作。
3.1.4 排序算法
本项目采用归并排序(Merge Sort) 算法对文档进行排序,归并排序是一种分治法(Divide and Conquer) ,可以将大规模问题拆解为较小的子问题进行解决,最后再合并结果。它通过将文档序号列表递归地拆分为较小的部分,再逐步合并已排序的部分来完成排序,时间复杂度为O(n log n),适合处理较多文档并保证排序稳定性。排序步骤如下:假设每个文档都有各自的序号,将所有文档合成一个列表。首先将文档列表不断对半拆分,直到每个子列表只剩一个文档;然后在合并阶段,比较各子列表的第一个文档,按照编号的数字顺序将其合并成一个新的排序列表。这个过程递归进行,最终将所有文档按正确顺序排序。
def merge_sort(arr):
# 基本情况:如果列表只有一个元素,直接返回
if len(arr) <= 1:
return arr
# 将数组对半拆分
mid = len(arr) // 2
left_half = merge_sort(arr[:mid]) # 递归排序左半部分
right_half = merge_sort(arr[mid:]) # 递归排序右半部分
# 合并排序后的左右两部分
return merge(left_half, right_half)
def merge(left, right):
sorted_list = []
i = j = 0
# 比较左半部分和右半部分的元素,按顺序合并
while i < len(left) and j < len(right):
if left[i] <= right[j]:
sorted_list.append(left[i])
i += 1
else:
sorted_list.append(right[j])
j += 1
# 处理剩余的元素
sorted_list.extend(left[i:])
sorted_list.extend(right[j:])
return sorted_list
# 示例:对数字列表进行排序
arr = [38, 27, 43, 3, 9, 82, 10]
sorted_arr = merge_sort(arr)
print("排序后的数组:", sorted_arr)
3.2 控制程序
控制程序采用上位机与下位机相结合的一体化形式的程序,仅需要在机器人主控板上完成部署,然后电脑或手机等终端通过本地网络,确保和机器人在同一个局域网下,访问其IP地址,即可进行轻量化的发布任务、调试参数、实时控制等一系列操作。控制程序采用Web网页的形式,这样确保能够在手机和电脑上访问,而且本地无须部署环境、无须安装软件等烦琐步骤,实现开机即用。
控制程序开发分为前端和后端,前端负责显示用户操作界面,使用HTML5、CSS和JavaScript,在Boot⁃strap框架基础上编写代码。后端负责处理业务逻辑,包括接收和发送HTTP响应、调用算法、执行命令行、硬件控制等,使用Python语言开发。Web服务框架采用Flask库,硬件控制采用Adafruit Blinka库。程序控制流程如图6所示。
4 实验与结果
4.1 实验环境
4.1.1 开发环境
开发环境采用了一台配备Intel Core i7-12700KFX86 架构CPU、32GB RAM 和NVIDIA GeForce 306012GB GPU 的PC,运行Ubuntu 22.04 64bit操作系统。搭建了CUDA12.6、Anaconda3、Python3.10、Py⁃torch2.4.0+cu121、OpenCV、Ultralytics、RKNN Tool⁃kit2.1等环境,便于训练YOLO模型和处理其他深度学习任务。开发工具方面,使用PyCharm编写Python程序以及HTML5、CSS、JavaScript前端程序。