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题 甲骨文智能识别中原始拓片单字自动分割与识别研究 原题再现: 甲骨文是我国目前已知的最早成熟的文字系统,它是一种刻在龟甲或兽骨上的古老文字。甲骨文具有极其重要的研究价值,不仅对中国文…...
3.23学习总结
字符串 String java.lang,String 类代表字符串,Java程序中所有的字符串文字都为此类的对象 字符串的内容是不会发生改变的,它的对象在创建之后不能呗更改 字符串的内存模型 当使用双引号直接赋值时,系统会检查该字符串在串池中是否存在。 …...
RT-Thread CI编译产物artifacts自动上传功能介绍
近期在RT-Thread开源项目中,我们引入了一项实用的功能改进——将每次CI(持续集成)编译生成的产物(artifacts)自动上传到GitHub,方便开发者和用户能够更便捷地获取和测试最新的编译结果。 参考链接…...
Android adb调试应用程序
启动app 有的时候app不是预先安装的,也不能从界面start一个app,这时需要后台拉起app。 $adb shell am start package.name/Activity.name 例如,android原生camera app, 包名为com.android.camera2, mainActivity名为…...
仅靠prompt,Agent难以自救
Alexander的观点很明确:未来 AI 智能体的发展方向还得是模型本身,而不是工作流(Work Flow)。还拿目前很火的 Manus 作为案例:他认为像 Manus 这样基于「预先编排好的提示词与工具路径」构成的工作流智能体,…...
【嵌入式学习2】函数
目录 ## 函数 ## 函数分类 ## 函数定义 1、无参数无返回值 2、有参数无返回值 3、有参数有返回值 ## 函数声明 ## 局部变量和全局变量 ## 多文件编程 如何避免把同一个头文件 include 多次,或者头文件嵌套包含? 命令行编译文件 头文件包含的…...
平芯微PW5012应用电路
PW5012应用电路板介绍: 1.1 单节和两节锂电池升压 12V 或 9V, 1A 至 3A 电路板, 1.2 应用: 升压电压转换板 1.3 VIN 输入电压: 3V-9V 1.4 VOUT 输出电压: 9V 2A(VIN3.7V) ࿰…...
Langchain4J框架相关面试题
以下是关于Langchain4J框架的面试题目及答案 ### Langchain4J基础概念类 1. **Langchain4J框架是什么?它的核心功能有哪些?** Langchain4J是一个用于构建语言模型应用的Java框架,它为开发者提供了一套简洁高效的API,使得在Jav…...
【MySQL】用户管理
目录 一、用户1.1 用户信息1.2 创建用户1.3 删除用户1.4 修改用户密码1.4.1 用户修改自己密码1.4.2 root用户修改指定用户的密码 二、数据库的权限2.1 给用户授权2.2 回收用户权限 结尾 一、用户 1.1 用户信息 MySQL中的用户,都存储在系统数据库mysql的user表中。…...
5.高频加热的原理与常用集成电路介绍
一、高频加热的类型 利用高频电源加热通常由两种方法:电介质加热(被加热物体绝缘)与感应加热(被加热物体导电),详细解释如下: 电介质加热(利用高频电压的高频电场导致物体自身分子摩…...
Elasticsearch:可配置的推理 API 端点分块设置
作者:来自 Elastic Daniel Rubinstein Elasticsearch 开放推理 API 现已支持可配置的分块,以便在文档摄取时处理语义文本字段。 Elasticsearch 推理 API 允许用户利用各种提供商的机器学习模型执行推理操作。其中一个常见用例是在索引中支持用于语义搜索…...
从零构建大语言模型全栈开发指南:第二部分:模型架构设计与实现-2.1.2多头注意力扩展与掩码机制(因果掩码与填充掩码)
👉 点击关注不迷路 👉 点击关注不迷路 👉 点击关注不迷路 文章大纲 2.1.2 多头注意力扩展与掩码机制(`因果掩码与填充掩码`)1. 多头注意力机制:分治策略的数学实现1.1 多头注意力核心公式2. 逐行代码实现2.1 多头拆分与合并3. 掩码机制:注意力控制的核心技术3.1 因果…...
Scikit-learn模型评估全流程解析:从数据划分到交叉验证优化
模型评估的步骤、scikit-learn函数及实例说明 1. 数据划分(Train-Test Split) 函数:train_test_split使用场景:将数据分为训练集和测试集,避免模型过拟合。作用:确保模型在未见过的数据上验证性能。示例&…...
大模型量化框架GPTQModel的基本使用方法
接上一篇博客:AutoGPTQ报torch._C._LinAlgError: linalg.cholesky: The factorization could not be completed的解决办法-CSDN博客 如果Llama factory量化一直报错,可以改用其他的量化框架,例如GPTQ:https://github.com/ModelCl…...
HTTP长连接与短连接的前世今生
HTTP长连接与短连接的前世今生 大家好!作为一名在互联网摸爬滚打多年的开发者,今天想跟大家聊聊HTTP中的长连接和短连接这个话题。 记得我刚入行时,对这些概念一头雾水,希望这篇文章能帮助新入行的朋友少走些弯路。 什么是HTTP…...
线程控制学习
1、线程创建: int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void * (*start_routine)(void*), void *arg); 参数 thread:返回线程ID;attr:设置线程的属性,attr为nullptr表示使用默认属性(一般…...
使用 Node.js 从零搭建 Kafka 生产消费系统
目录 一、Kafka 核心概念速览 二、环境准备 三、生产者实现:发送消息 四、消费者实现:处理消息 五、高级配置与最佳实践 六、常见问题解决 七、应用场景示例 总结 Apache Kafka 作为高吞吐、分布式的消息队列系统,在实时数据流处理中…...
【Linux系统】Linux权限讲解!!!超详细!!!
目录 Linux文件类型 区分方法 文件类型 Linux用户 用户创建与删除 用户之间的转换 su指令 普通用户->超级用户(root) 超级用户(root) ->普通用户 普通账户->普通账户 普通用户的权限提高 sudo指令 注: Linux权限 定义 权限操作 1、修改文…...
Ubuntu安装TensorFlow 2.13-GPU版全流程指南(anaconda)
目录 一、安装前准备1.版本选择依据2.创建独立环境 二、详细安装步骤1.通过conda自动安装依赖2.手动验证依赖版本 三、补充说明1.组件依赖关系表2.常见问题解决方案3.性能验证脚本 一、安装前准备 1.版本选择依据 当前最新稳定版:TensorFlow 2.13&a…...
Spring事务管理
介绍了事务的概念,事务的特性,JDBC 事务管理的步骤和操作过程,以及Spring事务管理的两种实现方式:编程式事务管理和声明式事务管理。 1.事务的概念 事务(Transaction)就是将一系列的数据库操作作为一个整体…...
避雷 :C语言中 scanf() 函数的错误❌使用!!!
1. 返回值说明 scanf函数会返回成功匹配并赋值的输入项个数,而不是返回输入的数据。 可以通过检查返回值数量来确认输入是否成功。若返回值与预期不符,就表明输入存在问题。 #include <stdio.h>int main() {int num;if (scanf("%d", …...
判断一个操作是不是允许
一、目的 简单探索一个URL请求是不是允许的。 二、具体过程 (一)系统的初始化 系统数据库有账户"admin",密码是"123"。 账号"admin"的角色是管理员"manager"。 假设管理员身份设定的权限是: 1、对于/user/开头的…...
【FPGA开发】Cordic原理推导、Xilinx PG105手册解读
目录 Cordic原理推导PG105手册解读IP核总览核心计算功能总览基本握手信号非阻塞模式 NonBlocking Mode阻塞模式 Block Mode 数据格式数据映射 本文针对Cordic算法本身,以及Xilinx官方CORDIC IP做学习记录,如有纰漏,欢迎指正! Cord…...
数据结构与算法:宽度优先遍历
前言 进入图论部分难度明显提升了一大截,思路想不到一点…… 一、宽度优先遍历 1.内容 宽度优先遍历主要用于在图上求最短路。 (1)特点 宽度优先遍历的特点就是逐层扩展,最短路即层数 (2)使用条件 …...
PyTorch 面试题及参考答案(精选100道)
目录 PyTorch 的动态计算图与 TensorFlow 的静态计算图有何区别?动态图的优势是什么? 解释张量(Tensor)与 NumPy 数组的异同,为何 PyTorch 选择张量作为核心数据结构? 什么是 torch.autograd 模块?它在反向传播中的作用是什么? 如何理解 PyTorch 中的 nn.Module 类?…...
【数理基础】【概率论与数理统计】概率论与数理统计本科课程总结、资料汇总、个人理解
1 前言 概率论与数理统计是数学系核心的基础专业课,我本科的时候,是拆开上的,对应工科专业的高数中的概率论与数理统计,在量子力学,机器学习,计算机领域深度学习,大模型,机器人控制…...
美制 / 英制单位换算/公制/帝国制 单位转换速查表
文章目录 💡Introduction📏 英制(美制)单位与公制换算速查表🧱 一、长度(Length)🧴 二、体积(Volume / Liquid Measure)⚖️ 三、质量 / 重量(Wei…...
ENSP学习day9
ACL访问控制列表实验 ACL(Access Control List,访问控制列表)是一种用于控制用户或系统对资源(如文件、文件夹、网络等)访问权限的机制。通过ACL,系统管理员可以定义哪些用户或系统可以访问特定资源&#x…...
我爱学算法之——滑动窗口攻克子数组和子串难题(中)
学习算法,继续加油!!! 一、将 x 减到 0 的最小操作数 题目解析 来看这一道题,题目给定一个数组nums和一个整数x;我们可以在数组nums的左边或者右边进行操作(x减去该位置的值)&#…...
Linux centos 7 vsftp本地部署脚本
下面是脚本: #!/bin/bash #function:vsftpd脚本 #author: 20230323 IT 小旋风# 判断是否是root用户 if [ "$USER" ! "root" ]; thenecho "不是root 装个蛋啊"exit 1 fi# 关闭防火墙 systemctl stop firewalld && systemctl disable …...
编程考古-安德斯·海尔斯伯格(Anders Hejlsberg)回答离开Borland的原因
安德斯海尔斯伯格(Anders Hejlsberg)是著名的编程语言和工具开发者,曾主导开发了 Turbo Pascal、Delphi(Borland 时期),以及加入微软后参与的 C# 和 TypeScript。关于他离开 Borland 的原因,可以…...
数据库数值函数详解
各类资料学习下载合集 https://pan.quark.cn/s/8c91ccb5a474 数值函数是数据库中用于处理数值数据的函数,可以用于执行各种数学运算、统计计算等。数值函数在数据分析及处理时非常重要,能够帮助我们进行数据的聚合、计算和转换。在本篇博客中,我们将详细介绍常用的…...
SpringBoot与Redisson整合,用注解方式解决分布式锁的使用问题
文章引用:https://mp.weixin.qq.com/s/XgdKE2rBKL0-nFk2NJPuyg 一、单个服务 1.代码 该接口的作用是累加一个值,访问一次该值加1 RestController public class LockController {Autowiredprivate StringRedisTemplate stringRedisTemplate;GetMappin…...
Bash 脚本基础
一、Bash 脚本基础 什么是 Bash 脚本:Bash 脚本是一种文本文件,其中包含了一系列的命令,这些命令可以被 Bash shell 执行。它用于自动化重复性的任务,提高工作效率。 Bash 脚本的基本结构:以 #!/bin/bash 开头&#x…...
【Linux】线程库
一、线程库管理 tid其实是一个地址 void* start(void* args) {const char* name (const char *)args;while(true){printf("我是新线程 %s ,我的地址:0x%lx\n",name,pthread_self());sleep(1);}return nullptr; }int main() {pthread_t tid…...
Smith3.0 4.0的阻抗匹配操作方法
阅读了这篇文章中,我get到一些知识点的总结: 百度安全验证https://baijiahao.baidu.com/s?id1822624157494292625 1)红色圆代表阻抗圆,绿色圆代表导纳圆。 2)圆心位于50欧,最左侧为0欧,最右侧…...
装饰器模式 (Decorator Pattern)
装饰器模式 (Decorator Pattern) 是一种结构型设计模式,它动态地给一个对象添加一些额外的职责,就增加功能来说,装饰器模式相比生成子类更为灵活。 一、基础 1 意图 动态地给一个对象添加一些额外的职责。 就增加功能来说,装饰器模式相比生成子类更为灵活。 2 适用场景 当…...
生活电子类常识——搭建openMauns工作流+搭建易犯错解析
前言 小白一句话生成一个网站?小白一句话生成一个游戏?小白一句话生成一个ppt?小白一句话生成一个视频? 可以 原理 总体的执行流程是 1,用户下达指令 2,大模型根据用户指令,分解指令任务为多个细分步骤…...
题型笔记 | Apriori算法
目录 内容拓展知识 内容 其步骤如下: 扫描全部数据,产生候选项 1 1 1 项集的集合 C 1 C_1 C1根据最小支持度,由候选 1 1 1 项集的集合 C 1 C_1 C1 产生频繁 1 1 1 项集的集合 L 1 L_1 L1。若 k > 1 k > 1 k>1…...
雷电模拟器启动94%卡住不动解决方案
安卓模拟器启动失败/启动加载卡0-29%/启动卡50%/启动卡94%的解决方法 首先看官方论坛常见问题来尝试解决: 安卓模拟器启动失败/启动加载卡0-29%/启动卡50%/启动卡94%的解决方法-雷电安卓模拟器-手游模拟器安卓版_android手机模拟器电脑版_雷电模拟器帮助中心 所有…...
站群服务器是什么意思呢?
站群服务器是一种专门为托管和管理多个网站而设计的服务器,其核心特点是为每个网站分配独立的IP地址。这种服务器通常用于SEO优化、提高网站权重和排名,以及集中管理多个网站的需求。以下是站群服务器的详细解释: 一、站群服务器的定义 站群…...
靶场(十五)---小白心得思路分析---LaVita
启程: 扫描端口,发现开放22,80端口,发现ws.css可能存在exp,经查发现无可利用的exp PORT STATE SERVICE VERSION 22/tcp open ssh OpenSSH 8.4p1 Debian 5deb11u2 (protocol 2.0) | ssh-hostkey: | 3072 c9…...
第十六次CCF-CSP认证(含C++源码)
第十六次CCF-CSP认证 小中大满分思路遇到的问题 二十四点(表达式求值)难点满分思路 小中大 这次我觉得是非常难的 只有一道easy 做的时候看这个通过率就有点不对劲 上官网看了一眼平均分 106 就是人均A一道的水准 一开始看了半天 第三题几乎还是下不了手…...
大数据中的数据预处理:脏数据不清,算法徒劳!
大数据中的数据预处理:脏数据不清,算法徒劳! 在大数据世界里,数据预处理是个让人又爱又恨的环节。爱它,是因为数据预处理做好了,后续的模型跑起来又快又准,仿佛给AI装上了火箭助推器࿱…...
17153 班级活动
17153 班级活动 ⭐️难度:简单 🌟考点:2023、思维、国赛 📖 📚 import java.util.Arrays; import java.util.LinkedList; import java.util.Queue; import java.util.Scanner;public class Main {static int N 10…...
算力100问☞第93问:算力资源为何更分散了?
目录 1、政策驱动与地方投资的盲目性 2、美国芯片断供与国产替代的阵痛 3、政企市场对私有云的偏好 4、技术标准与供需结构的失衡 5、产业生态与市场机制的滞后 6、破局路径与未来展望 在大模型和人工智能技术快速发展的背景下,算力资源已成为数字经济时代的核心基础设施…...
记录 macOS 上使用 Homebrew 安装的软件
Homebrew 是 macOS 上最受欢迎的软件包管理器之一,能够轻松安装各种命令行工具和 GUI 应用。本文记录了我通过 Homebrew 安装的各种软件,并对它们的用途和基本使用方法进行介绍。 🍺 Homebrew 介绍 Homebrew 是一个开源的包管理器ÿ…...
Java 安装开发环境(Mac Apple M1 Pro)
下载 Java Downloads 查看本地安装的 JDK 所在位置以及 JAVA 版本 系统默认的安装处 /Library/Java/JavaVirtualMachines配置Java 添加环境变量 vim ~/.bash_profileAdd # 安装位置 export JAVA_11_HOME"/Library/Java/JavaVirtualMachines/zulu-11.jdk…...
微前端框架的实战demo
以下是基于主流微前端框架的实战 Demo 开发指南,综合多个开源项目与实践案例整理而成: 一、qiankun 框架实战 1. 核心架构 主应用:负责路由分发、子应用注册与生命周期管理子应用:独立开发部署,支持不同技术栈&#…...
win32汇编环境,网络编程入门之九
;在上一教程里,我们学习了在连接成功网站后,应该发送什么数据给网站 ;在前面的几个教程里,简单地运行了套接字机制连接网站的方式,这是字节级的网络连接,扩展几乎是无限的。 ;想了想,这个开个头就行了&…...