当前位置: 首页 > article >正文

2024年MathorCup数学建模B题甲骨文智能识别中原始拓片单字自动分割与识别研究解题全过程文档加程序

2024年第十四届MathorCup高校数学建模挑战赛

B题 甲骨文智能识别中原始拓片单字自动分割与识别研究

原题再现:

  甲骨文是我国目前已知的最早成熟的文字系统,它是一种刻在龟甲或兽骨上的古老文字。甲骨文具有极其重要的研究价值,不仅对中国文明的起源具有重要意义,也对世界文明的研究有着深远影响。在我国政府的大力推动下,甲骨文研究已经进入一个全新的发展阶段。人工智能和大数据技术被应用于甲骨文全息性研究及数字化工程建设,成为甲骨文信息处理领域的研究热点。

  甲骨文拓片图像分割是甲骨文数字化工程的基础问题,其目的是利用数字图像处理和计算机视觉技术,在甲骨文原始拓片图像的复杂背景中提取出特征分明且互不交叠的独立文字区域。它是甲骨文字修复、字形复原与建模、文字识别、拓片缀合等处理的技术基础[2]。然而,甲骨拓片图像分割往往受到点状噪声、人工纹理和固有纹理三类干扰元素的严重影响[3]且甲骨文图像来源广泛,包括拓片、拍照、扫描、临摹等,不同的图像来源,其干扰元素的影响是不同的。由于缺乏对甲骨文字及其干扰元素的形态先验特征的特殊考量,通用的代表性图像分割方法目前尚不能对甲骨文原始拓片图像中的文字目标和点状噪声、人工纹理、固有纹理进行有效判别,其误分割率较高,在处理甲骨拓片图像时均有一定局限性。如何从干扰众多的复杂背景中准确地分割出独立文字区域,仍然是一个亟待解决的具有挑战性的问题。

  图1为一张甲骨文原始拓片的图像分割示例,左图为一整张甲骨文原始拓片,右图即为利用图像分割算法[4]实现的拓片图像上甲骨文的单字分割。甲骨文的同一个字会有很多异体字,这无疑增加了甲骨文识别的难度,图2展示了甲骨文中“人”字的不同异体字。
在这里插入图片描述
  现希望通过对已标记的甲骨文图像进行分析、特征提取和建模,从而实现对一张新的甲骨文图像进行单个文字的自动分割和识别。具体任务如下:

  问题1:对于附件1(Pre test 文件夹)给定的三张甲骨文原始拓片图片进行图像预处理,提取图像特征,建立甲骨文图像预处理模型,实现对甲骨文图像于扰元素的初步判别和处理。

  问题 2:对甲骨文原始拓片图像进行分析,建立一个快速准确的甲骨文图像分割模型,实现对不同的甲骨文原始拓片图像进行自动单字分割,并从不同维度进行模型评估。其中附件2(Train 文件夹)为已标注分割的数据集。

  问题 3:利用建立的甲骨文图像分割模型对附件3(Test文件夹)中的200 张甲骨文原始拓片图像进行自动单字分割,并将分割结果放在“Test results.xlsx”中,此文件单独上传至竞赛平台。

  问题 4:基于前三问对甲骨文原始拓片图像的单字分割研究,请采用合适的方法进行甲骨文原始拓片的文字识别,附件4(Recognize 文件夹)中给出了部分已标注的甲骨文字形(不限于此训练集,可自行查找其他资料,如使用外部资料需在论文中注明来源),请对测试集中的 50 张甲骨文原始拓片图像进行文字自动识别,并以适当结果呈现。

整体求解过程概述(摘要)

  甲骨文拓片图像分割一直是甲骨文研究中重要的研究内容,任务是从甲骨拓片中找到甲骨字符并提取独立的文字区域,这是字形破译的前提。然而,甲骨文拓片图像分割常受点状噪声、人工纹理和固有纹理干扰,使得现有传统图像分割方法误分割率较高,难以有效区分文字目标与各类干扰元素。针对这一难点,本文提出了一种基于深度学习的甲骨文单字自动分割与识别方法。
  针对问题一,基于附件一所提供的三张图片,分析得到图像的主要干扰因素包括字符过小、图像质量差异大、字形破损和噪声干扰。为尽量解决以上因素带来的干扰,设计了一种Laplace变换—稀疏表示和低秩逼近去噪—同态滤波—高斯滤波的甲骨文原始拓片图像预处理模型,通过边缘增强、对比度增强、图像去噪等方法实现图像质量的提升,使字符特征更加突出,为后续字符分割提供可靠的图像数据支持。
  针对问题二,通过任务分析可知,甲骨文原始拓片图像的自动单字分割任务不仅具有图像分割的基本特性,还融合了目标检测的元素,所以我们采用了目标检测领域应用最广泛的 YOLO 算法来实现字符的检测与分割。首先对数据集图像进行预处理;接着针对数据集给出的标签,将其转化成适用于YOLO算法的标注格式;然后在不同划分比例的数据集下,选择不同的YOLO 版本和不同的网络模型进行训练与效果对比,并且针对训练中存在的微小字符难以识别的问题,引入了SIOU损失函数来提高小字符检测精。最后通过对比评估得出,在训练集与验证集的比例为8:2的条件下,引入SIOU损失函数后的 YOLOv8m 网络模型既达到了最高的检测精度又权衡了模型复杂度。并且在验证网络模型时,我们发现部分原始标注存在偏移误标现象,这在很大程度上制约了网络精度的进一步提升。
  针对问题三,我们选择问题二中训练精度最高的改进 YOLOv8m 网络模型来实现自动单字检测并分割,最终分割结果保存于Test_results.xlsx文件中。
  针对问题四,根据给定的76种甲骨文汉字原始数据,建立甲骨文拓片图像分类识别模型。在分类识别模型中,采用卷积神经网络与YOLOv8 分类网络两种方法实现图像的分类训练和验证,数据集划分比例为 7:3。通过观察测试集文字特征,建立了原始数据集扩充模型,加入“王”字构建了77种甲骨文汉字数据集,分类任务变为77分类。卷积神经网络采用AlexNet、VGG16、GoogleNet、ResNet18-50-152 六类模型,通过对比选取分类精度最高的GoogleNet 模型与YOLOv8 分类网络用于测试集文字识别。考虑到每张测试集图片并非单个文字,因此又建立了图像分割模型,该模型用问题而的目标检测模型对拓片进行分割。最后使用GoogleNet模型与YOLO算法分别对测试图片进行文字识别,保存结果,发现两种方法分类精度相当,YOLOv8分类精度可达94.5%,GoogleNet 可达 93.7%,最终预测结果表明,YOLOv8能够更好地挖掘甲骨文图像的深层次特征,文字识别效果更好。

模型假设:

  1. 我们认为,所有的数据来源于权威的原始数据,并且这些数据都是真实可靠的。
  2. 假设在神经网络预测中,输入变量作为网络的第一层合理有效。

问题分析:

  问题一的分析
  对于问题一,即对给定的三张甲骨文原始拓片图像进行图像预处理,实现对甲骨文图像干扰元素的判别和处理。首先需要利用所给三张甲骨文图像,分析出甲骨文原始拓片图像存在的常见干扰情况及图像噪声类型。原始拓片图像中可能包含各种噪声,如灰尘、划痕等,需要通过适当的降噪技术减少这些影响。同时,由于拍摄条件和拓片材质的差异,图像的亮度和对比度可能不均匀,需进行调整以便更好地突出文字信息。甲骨上还可能存在非文字的干扰。针对以上不同情况,基于数字图像处理相关方法进行图像的去噪和增强,去除图像中的干扰元素,实现图像的去噪和增强。

  问题二的分析
  问题二聚焦于甲骨文原始拓片图像的自动单字分割任务,旨在构建一种高效且精确的甲骨文图像分割模型。这一任务本质上属于图像分割的范畴,但与传统的图像分割任务相比,它呈现出不同的任务需求。传统的图像分割任务侧重于识别并区分图像中的不同部分,如人物、汽车等对象。从技术层面分析,这要求算法能够根据不同语义信息将像素点进行归类,以区分出具有相同语义的区域。然而,在甲骨文图像分割任务中,情况有所不同。根据题目所提供的训练集与对应的标注框信息,如图所示,我们发现这些标注框均为平行矩形框,这与目标检测任务中的边界框(bounding box)类似。因此,本任务的要求也更倾向于目标检测,即不仅需要检测到甲骨文的存在,还需确认其是否属于甲骨文,并给出相应的检测框,以确保文字能够完整地被分割出来。

  综上,甲骨文原始拓片图像的自动单字分割任务不仅具有图像分割的基本特性,还融合了目标检测的元素,对模型的准确性和效率提出了更高的要求。因此,构建一个能够适应这些要求的模型是本文的主要研究目标。鉴于甲骨文原始拓片图像的特点,决定采用目标检测领域中表现出色且经广泛验证的 YOLOv5 算法来解决本问题中的甲骨文图像分割任务。YOLOv5算法以其出色的性能、高准确性和实时处理能力而著称,能够很好地适应甲骨文图像分割的需求。

  问题三的分析
  问题三需要采用问题二中建立模型对附件中的甲骨文原始拓片图像进行单字分割。我们在问题二中已经完成了对网络模型的训练,只需要将图像输入网络即可获得甲骨文字符的坐标,再将YOLO的标注格式转化成所需格式,即可得到字符分割结果。

  问题四的分析
  问题四需要利用训练集中已经标注的76类甲骨文字形实现对测试集中50张甲骨文原始拓片图像的自动识别。在利用问题二和问题三所建立的甲骨文字符分割模型对拓片
图像进行分割后,字符的识别任务转化为字符的分类任务。 因此,选择多种不同卷积神经网络模型进行字符分类,并对比分类精度;再利用YOLO网络实现甲骨文字符识别,对比并分析两种网络模型的性能。

模型的建立与求解整体论文缩略图

在这里插入图片描述
在这里插入图片描述

全部论文请见下方“ 只会建模 QQ名片” 点击QQ名片即可

部分程序代码:

import cv2
import numpy as np
import matplotlib.pyplot as plt
from skimage.feature import hog, local_binary_pattern
from sklearn.svm import SVC
from tensorflow.keras.applications import VGG16
from tensorflow.keras.preprocessing import image
from tensorflow.keras.models import Modelclass OracleBonePreprocessor:def __init__(self):self.clahe = cv2.createCLAHE(clipLimit=2.0, tileGridSize=(8,8))self.svm = SVC(kernel='rbf', class_weight='balanced')self.feature_extractor = self._build_feature_extractor()def _build_feature_extractor(self):"""构建混合特征提取器"""base_model = VGG16(weights='imagenet', include_top=False)return Model(inputs=base_model.input, outputs=base_model.get_layer('block5_pool').output)def preprocess(self, img_path, visualize=False):"""主处理流程"""# 读取图像img = cv2.imread(img_path, cv2.IMREAD_GRAYSCALE)if img is None:raise ValueError(f"无法读取图像: {img_path}")# 预处理流水线denoised = self._denoise(img)enhanced = self._enhance_contrast(denoised)texture_suppressed = self._suppress_texture(enhanced)edges = self._detect_edges(texture_suppressed)# 特征提取features = self._extract_features(enhanced)# 可视化if visualize:self._visualize_process(img, denoised, enhanced, texture_suppressed, edges)return {'processed_img': texture_suppressed,'edges': edges,'features': features}def _denoise(self, img):"""混合去噪"""# 中值滤波去除椒盐噪声median = cv2.medianBlur(img, 5)# 非局部均值去噪denoised = cv2.fastNlMeansDenoising(median, h=15, templateWindowSize=7, searchWindowSize=21)return denoiseddef _enhance_contrast(self, img):"""对比度增强"""clahe = self.clahe.apply(img)# Gamma校正gamma = 1.5invGamma = 1.0 / gammatable = np.array([((i / 255.0)** invGamma) * 255 for i in np.arange(0, 256)]).astype("uint8")return cv2.LUT(clahe, table)def _suppress_texture(self, img):"""纹理抑制"""# Gabor滤波kernel = cv2.getGaborKernel((25,25), 5, np.pi/4, 10, 0.5, 0, ktype=cv2.CV_32F)gabor = cv2.filter2D(img, cv2.CV_8UC3, kernel)# 小波变换coeffs = pywt.dwt2(gabor, 'haar')cA, (cH, cV, cD) = coeffscD_thresh = pywt.threshold(cD, 15, mode='soft')reconstructed = pywt.idwt2((cA, (cH, cV, cD_thresh)), 'haar')return np.uint8(reconstructed)def _detect_edges(self, img):"""自适应边缘检测"""# 自动Canny算法sigma = 0.33v = np.median(img)lower = int(max(0, (1.0 - sigma) * v))upper = int(min(255, (1.0 + sigma) * v))edges = cv2.Canny(img, lower, upper)# 形态学优化kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (3,3))closed = cv2.morphologyEx(edges, cv2.MORPH_CLOSE, kernel, iterations=2)return closeddef _extract_features(self, img):"""混合特征提取"""# LBP特征lbp = local_binary_pattern(img, P=16, R=2, method='uniform')hist_lbp, _ = np.histogram(lbp, bins=256, range=(0, 256))# HOG特征fd_hog, _ = hog(img, orientations=8, pixels_per_cell=(16,16),cells_per_block=(1,1), visualize=True)# 深度特征img_rgb = cv2.cvtColor(img, cv2.COLOR_GRAY2RGB)img_tensor = image.img_to_array(img_rgb)img_tensor = np.expand_dims(img_tensor, axis=0)deep_features = self.feature_extractor.predict(img_tensor).flatten()return np.concatenate([hist_lbp, fd_hog, deep_features])def _visualize_process(self, original, denoised, enhanced, suppressed, edges):"""处理过程可视化"""plt.figure(figsize=(20, 10))plt.subplot(151), plt.imshow(original, cmap='gray')plt.title('Original'), plt.axis('off')plt.subplot(152), plt.imshow(denoised, cmap='gray')plt.title('Denoised'), plt.axis('off')plt.subplot(153), plt.imshow(enhanced, cmap='gray')plt.title('Enhanced'), plt.axis('off')plt.subplot(154), plt.imshow(suppressed, cmap='gray')plt.title('Texture Suppressed'), plt.axis('off')plt.subplot(155), plt.imshow(edges, cmap='gray')plt.title('Edges'), plt.axis('off')plt.tight_layout()plt.show()def train_classifier(self, features, labels):"""训练干扰判别分类器"""self.svm.fit(features, labels)def predict_region(self, region):"""区域分类预测"""features = self._extract_features(region)return self.svm.predict([features])[0]# ========== 使用示例 ==========
if __name__ == "__main__":processor = OracleBonePreprocessor()# 单张图像处理result = processor.preprocess("Pre_test/w01906.jpg", visualize=True)# 批量处理import osoutput_dir = "processed_results"os.makedirs(output_dir, exist_ok=True)for img_file in os.listdir("Pre_test"):if img_file.endswith((".jpg", ".png")):try:result = processor.preprocess(os.path.join("Pre_test", img_file))cv2.imwrite(f"{output_dir}/processed_{img_file}", result['processed_img'])np.save(f"{output_dir}/features_{img_file[:-4]}", result['features'])except Exception as e:print(f"处理失败: {img_file} - {str(e)}")print("预处理完成!结果保存在", output_dir)
全部论文请见下方“ 只会建模 QQ名片” 点击QQ名片即可

相关文章:

2024年MathorCup数学建模B题甲骨文智能识别中原始拓片单字自动分割与识别研究解题全过程文档加程序

2024年第十四届MathorCup高校数学建模挑战赛 B题 甲骨文智能识别中原始拓片单字自动分割与识别研究 原题再现: 甲骨文是我国目前已知的最早成熟的文字系统,它是一种刻在龟甲或兽骨上的古老文字。甲骨文具有极其重要的研究价值,不仅对中国文…...

Python----计算机视觉处理(Opencv:霍夫变换)

一、霍夫变换 霍夫变换是图像处理中的一种技术,主要用于检测图像中的直线、圆或其他形状。其基本思想就是将图像空间中的点映射到参数空间中,通过在参数空间中寻找累计最大值来实现对特定形状的检测。 二、 霍夫直线变换 那么对于一个二值化后的图形来说…...

多语言生成语言模型的少样本学习

摘要 大规模生成语言模型,如GPT-3,是极具竞争力的少样本学习模型。尽管这些模型能够共同表示多种语言,但其训练数据以英语为主,这可能限制了它们的跨语言泛化能力。在本研究中,我们在一个涵盖多种语言的语料库上训练了…...

k8s存储介绍(二)Secret

Kubernetes(K8s)提供了一种安全的方式来存储和管理敏感信息,如密码、OAuth 令牌和 SSH 密钥,这就是 Secret。使用 Secret 可以避免将敏感数据硬编码到 Pod 规范或容器镜像中,从而提高安全性和可管理性。 1. Secret 的…...

代理IP与AI的碰撞:网络安全新防线解码

目录 一、代理IP:网络世界的“隐形斗篷” 二、AI加持:代理IP的“智能升级包” 三、协同作战:五大核心应用场景 场景1:智能风控系统 场景2:跨境电商竞品分析 场景3:智能汽车安全测试 场景4&#xff1a…...

QT开发(4)--各种方式实现HelloWorld

目录 1. 编辑框实现 2. 按钮实现 前面已经写过通过标签实现的了,所以这里就不写了,通过这两个例子,其他的也是同理 1. 编辑框实现 编辑框分为单行编辑框(QLineEdit)双行编辑框(QTextEdit)&am…...

UniApp 生命周期钩子的应用场景

UniApp 生命周期钩子的应用场景 应用生命周期钩子的应用场景 onLaunch 应用初始化:在应用第一次启动时进行全局数据的初始化,比如设置全局配置信息、初始化用户登录状态等。例如,在应用启动时检查本地存储中是否有用户的登录信息&#xff0…...

macOS 安装 Miniconda

macOS 安装 Miniconda 1. Quickstart install instructions2. 执行3. shell 上初始化 conda4. 关闭 终端登录用户名前的 base参考 1. Quickstart install instructions mkdir -p ~/miniconda3 curl https://repo.anaconda.com/miniconda/Miniconda3-latest-MacOSX-arm64.sh -o…...

可发1区的超级创新思路(python\matlab实现):基于周期注意力机制的TCN-Informer时间序列预测模型

首先声明,该模型为原创!原创!原创!且该思路还未有成果发表,感兴趣的小伙伴可以借鉴! 一、应用场景 该模型主要用于时间序列数据预测问题,包含功率预测、电池寿命预测、电机故障检测等等 二、模型整体介绍(本文以光伏功率预测为例) 1.1 核心创新点 本模型通过三阶段…...

Nordic Semiconductor 芯片(如 nRF52/nRF53 系列)的 VSCode 开发环境的步骤

目录 概述 1. 安装必要工具链 2. 安装 VSCode 扩展 3. 配置环境变量 4. 克隆/配置 Nordic SDK 5. 创建 VSCode 项目 6. 配置调试 7. 构建与烧录 8. 其他工具 总结 概述 本文主要介绍Nordic Semiconductor 芯片(如 nRF52/nRF53 系列)的 VSCode…...

Flutter 输入组件 Radio 详解

1. 引言 在 Flutter 中,Radio 是用于单选的按钮组件,适用于需要用户在多个选项中选择一个的场景,如表单、设置选项等。Radio 通过 value 和 groupValue 进行状态管理,并结合 onChanged 监听选中状态的变化。本文将介绍 Radio 的基…...

3.23学习总结

完成了组合Ⅲ,和电话号码的字母组合两道算法题,都是和回溯有关的,很类似。 学习了static的关键字和继承有关知识...

Spring Boot整合Activiti工作流详解

1. 概述 Spring Boot与Activiti的整合可以大大简化工作流应用的开发。Spring Boot提供了自动配置和依赖管理,而Activiti则提供了强大的工作流功能。通过整合,我们可以快速构建基于工作流的业务系统。 本文将详细介绍Spring Boot与Activiti的整合方法,并通过一个请假流程的…...

C# System.Text.Encoding 使用详解

总目录 前言 在C#编程中,处理字符串和字节数组之间的转换是一个常见的任务。System.Text.Encoding类及其派生类提供了丰富的功能,帮助开发者实现不同字符编码之间的转换。本文将详细讲解System.Text.Encoding类的使用方法,包括常用编码的介绍…...

力扣刷题-热题100题-第23题(c++、python)

206. 反转链表 - 力扣(LeetCode)https://leetcode.cn/problems/reverse-linked-list/solutions/551596/fan-zhuan-lian-biao-by-leetcode-solution-d1k2/?envTypestudy-plan-v2&envIdtop-100-liked 常规法 记录前一个指针,当前指针&am…...

机器学习-基于KNN算法手动实现kd树

目录 一、概括 二、KD树的构建流程 1.循环选轴 2.选择分裂点 三、kd树的查询 1.输入我们要搜索的点 2.递归向下遍历: 3.记录最近点 4.回溯父节点: 四、KD树的优化与变种: 五、KD树代码: 上一章我们将了机器学习-手搓KN…...

Unity Shader 的编程流程和结构

Unity Shader 的编程流程和结构 Unity Shader 的编程主要由以下三个核心部分组成:Properties(属性)、SubShader(子着色器) 和 Fallback(回退)。下面是它们的具体作用和结构: 1. Pr…...

vue3 项目的最新eslint9 + prettier 配置

注意:eslint目前升级到9版本了 在 ESLint v9 中,配置文件已经从 .eslintrc 迁移到了 eslint.config.js 配置的方式和之前的方式不太一样了!!!! 详见自己的语雀文档:5、新版eslint9prettier 配…...

SAP GUI Script for C# SAP脚本开发快速指南与默认主题问题

SAP GUI Script for C# 快速指南 SAP 脚本的快速使用与设置. 解决使用SAP脚本执行后,默认打开的SAP是经典主题的问题 1. 解决默认主题问题 如果您使用的是SAP GUI 740,并遇到无法打开对话框的问题,请先将主题设置为经典主题(Classic Theme…...

JAVA泛型的作用

‌1. 类型安全(Type Safety)‌ 在泛型出现之前,集合类(如 ArrayList、HashMap)只能存储 Object 类型元素,导致以下问题: ‌问题‌:从集合中取出元素时,需手动强制类型转…...

Git Flow 分支管理策略

优势 清晰的分支结构:每个分支都有明确的用途,便于团队协作。 稳定的 master 分支:生产环境代码始终稳定。 灵活的发布管理:通过发布分支和热修复分支,可以灵活管理版本发布和紧急修复。 主要分支 master 分支 代表…...

FFmpeg + ‌Qt‌ 简单视频播放器代码

一个基于 ‌FFmpeg 4.x‌ 和 ‌Qt‌ 的简单视频播放器代码示例,实现视频解码和渲染到 Qt 窗口的功能。 1)ffmpeg库界面,视频解码支持软解和硬解方式。 2)QImage/QPixmap显示视频图片。 ‌1. Qt 项目配置(.pro 文件&…...

Unity跨平台构建快速回顾

知识点来源:人间自有韬哥在,豆包 目录 一、发布应用程序1. 修改发布必备设置1.1 打开设置面板1.2 修改公司名、游戏项目名、版本号和默认图标1.3 修改 Package Name 和 Minimum API Level 2. 发布应用程序2.1 配置 Build Settings2.2 选择发布选项2.3 构…...

【嵌入式学习2】内存管理

## C语言编译过程 预处理:宏定义展开、头文件展开、条件编译,这里并不会检查语法,将#include #define这些头文件内容插入到源码中 gcc -E main.c -o main.i 编译:检查语法,将预处理后文件编译生成汇编文件&#xff…...

密码学(Public-Key Cryptography and Discrete Logarithms)

Public-Key Cryptography and Discrete Logarithms Discrete Logarithm 核心概念:离散对数是密码学中一个重要的数学问题,特别是在有限域和循环群中。它基于指数运算在某些群中是单向函数这一特性。也就是说,给定一个群 G G G和一个生成元 …...

TDengine又新增一可视化工具 Perspective

概述 Perspective 是一款开源且强大的数据可视化库,由 Prospective.co 开发,运用 WebAssembly 和 Web Workers 技术,在 Web 应用中实现交互式实时数据分析,能在浏览器端提供高性能可视化能力。借助它,开发者可构建实时…...

【Linux文件IO】Linux中标准IO的API的描述和基本用法

Linux中标准IO的API的描述和基本用法 一、标准IO相关API1、文件的打开和关闭示例代码: 2、文件的读写示例代码:用标准IO(fread、fwrite)实现文件拷贝(任何文件均可拷贝) 3、文件偏移设置示例代码: 4、fgets fputs fget…...

深度学习篇---PaddleDetectionPaddleOCR

文章目录 前言1.代码2.代码介绍2.1 **导入模块**2.2 **配置区域**2.3 ExpressInfoProcessor类2.4 **主程序**: 3.使用说明3.1环境准备3.2模型准备3.3数据库初始化3.4串口配置3.5信息提取优化3.6注意事项 前言 本文简单介绍了PaddleDetection和PaddleOCR相结合的示例…...

Ant Design Vue Select 选择器 全选 功能

Vue.js的组件库Ant Design Vue Select 选择器没有全选功能&#xff0c;如下图所示&#xff1a; 在项目中&#xff0c;我们自己实现了全选和清空功能&#xff0c;如下所示&#xff1a; 代码如下所示&#xff1a; <!--* 参数配置 - 风力发电 - 曲线图 * 猴王软件学院 - 大强 …...

系统与网络安全------网络应用基础(1)

资料整理于网络资料、书本资料、AI&#xff0c;仅供个人学习参考。 TCP/IP协议及配置 概述 TCP/IP协议族 计算机之间进行通信时必须共同遵循的一种通信规定 最广泛使用的通信协议的集合 包括大量Internet应用中的标准协议 支持跨网络架构、跨操作系统平台的数据通信 主机…...