高阶:基于Python paddleocr库 提取pdf 文档高亮显示的内容
预览
第1步:理解基本结构和导入必要的库
# 1. 首先导入需要的库
import os # 用于处理文件和路径
import cv2 # 用于图像处理
import numpy as np # 用于数值计算
from paddleocr import PaddleOCR # 用于文字识别
from pdf2image import convert_from_path # 用于PDF转图像
import time # 用于计时
第2步:创建基本类结构
class PDFTextExtractor:def __init__(self):# 初始化OCR工具self.ocr = PaddleOCR(use_angle_cls=True,lang='ch', # 中文识别use_gpu=False, # 不使用GPUshow_log=False # 不显示日志)# 定义要识别的颜色范围(黄色和红色)self.color_ranges = {'yellow': {'lower': np.array([15, 70, 70]),'upper': np.array([35, 255, 255])},'red': {'lower': np.array([0, 70, 70]),'upper': np.array([15, 255, 255])}}
第3步:创建主要处理函数
def process_pdf(self, pdf_path, output_path='extracted_text.txt'):try:# 检查PDF文件是否存在if not os.path.exists(pdf_path):raise FileNotFoundError(f"PDF文件不存在: {pdf_path}")print(f"开始处理PDF: {pdf_path}")start_time = time.time()# 设置poppler路径(需要先安装poppler)poppler_path = r"E:\Proper\poppler-24.08.0\Library\bin"if not os.path.exists(poppler_path):raise Exception(f"Poppler 路径不存在: {poppler_path}")# 获取PDF总页数total_pages = self.get_pdf_page_count(pdf_path, poppler_path)print(f"PDF总页数: {total_pages}")# 处理每一页with open(output_path, 'w', encoding='utf-8') as f:# 处理代码...
第4步:创建图像预处理函数
def preprocess_image(self, pil_image):"""图像预处理函数"""# 1. 调整图像大小pil_image = self.resize_image(pil_image)# 2. 转换为OpenCV格式并预处理img = cv2.cvtColor(np.array(pil_image), cv2.COLOR_RGB2BGR) # 转换颜色空间img = cv2.GaussianBlur(img, (3, 3), 0) # 使用高斯模糊降噪img = cv2.convertScaleAbs(img, alpha=1.2, beta=10) # 调整对比度和亮度return imgdef resize_image(self, image):"""调整图像大小的函数"""width, height = image.sizemax_dimension = 2000 # 设置最大尺寸# 如果图像太大,就等比例缩小if width > max_dimension or height > max_dimension:scale = max_dimension / max(width, height)new_width = int(width * scale)new_height = int(height * scale)return image.resize((new_width, new_height))return image
第5步:创建文本提取函数
def extract_colored_text(self, img, color_lower, color_upper):"""提取特定颜色区域的文本"""try:# 1. 转换为HSV颜色空间(更容易处理颜色)hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)# 2. 创建颜色掩码mask = cv2.inRange(hsv, color_lower, color_upper)# 3. 图像处理优化kernel = np.ones((3, 3), np.uint8)mask = cv2.dilate(mask, kernel, iterations=2) # 膨胀mask = cv2.erode(mask, kernel, iterations=1) # 腐蚀mask = cv2.morphologyEx(mask, cv2.MORPH_OPEN, kernel) # 开运算# 4. 提取颜色区域result = cv2.bitwise_and(img, img, mask=mask)# 5. 转换为灰度图gray = cv2.cvtColor(result, cv2.COLOR_BGR2GRAY)gray = cv2.convertScaleAbs(gray, alpha=1.5, beta=10)# 6. OCR文字识别ocr_result = self.ocr.ocr(gray, cls=True)# 7. 处理识别结果texts = []if ocr_result is not None:for line in ocr_result:if line is not None:for word_info in line:if isinstance(word_info, list) and len(word_info) >= 2:text = word_info[1][0].strip()confidence = word_info[1][1]if confidence > 0.6 and text: # 置信度大于0.6的结果texts.append(text)return textsexcept Exception as e:print(f"文本提取错误: {str(e)}")return []
第6步:创建PDF页数获取函数
def get_pdf_page_count(self, pdf_path, poppler_path):"""获取PDF总页数"""try:# 使用pdf2image的方法获取PDF信息from pdf2image.pdf2image import pdfinfo_from_pathinfo = pdfinfo_from_path(pdf_path, poppler_path=poppler_path)return info['Pages']except Exception as e:print(f"获取PDF页数失败: {str(e)}")return 0
第7步:创建主函数
def main():try:# 1. 创建PDF文本提取器实例extractor = PDFTextExtractor()# 2. 设置PDF文件路径pdf_path = r"你的PDF文件路径"# 3. 处理PDFextractor.process_pdf(pdf_path)except Exception as e:print(f"程序执行失败: {str(e)}")# 程序入口
if __name__ == "__main__":main()
使用步骤:
- 安装必要的库:
pip install opencv-python numpy paddleocr pdf2image pillow
-
安装Poppler:
- 下载Poppler并解压
- 将bin目录添加到环境变量
-
修改代码中的路径:
- PDF文件路径
- Poppler路径
-
运行程序
好的,让我详细解释如何一步步实现这个程序:
第8步:环境准备
- 创建项目文件夹
mkdir pdf_extractor
cd pdf_extractor
- 创建虚拟环境(推荐)
python -m venv venv
# Windows激活虚拟环境
venv\Scripts\activate
# Linux/Mac激活虚拟环境
source venv/bin/activate
- 安装所需库
pip install opencv-python
pip install numpy
pip install paddleocr
pip install pdf2image
pip install pillow
第9步:创建项目结构
pdf_extractor/├── main.py # 主程序文件├── requirements.txt # 依赖库列表└── output/ # 输出文件夹
第10步:编写完整代码
在 main.py
中:
import os
import cv2
import numpy as np
from paddleocr import PaddleOCR
from pdf2image import convert_from_path
import timeclass PDFTextExtractor:def __init__(self):# 初始化OCRprint("初始化OCR系统...")self.ocr = PaddleOCR(use_angle_cls=True,lang='ch',use_gpu=False,show_log=False)# 定义颜色范围self.color_ranges = {'yellow': {'lower': np.array([15, 70, 70]),'upper': np.array([35, 255, 255])},'red': {'lower': np.array([0, 70, 70]),'upper': np.array([15, 255, 255])}}print("初始化完成!")def process_pdf(self, pdf_path, output_path='output/extracted_text.txt'):"""处理PDF文件的主函数"""try:# 创建输出目录os.makedirs(os.path.dirname(output_path), exist_ok=True)# 检查文件是否存在if not os.path.exists(pdf_path):raise FileNotFoundError(f"PDF文件不存在: {pdf_path}")print(f"开始处理PDF: {pdf_path}")start_time = time.time()# 处理每一页self._process_pages(pdf_path, output_path)# 完成处理end_time = time.time()print(f"\n处理完成!用时: {end_time - start_time:.2f}秒")print(f"结果已保存到: {output_path}")except Exception as e:print(f"处理过程中出错: {str(e)}")raisedef _process_pages(self, pdf_path, output_path):"""处理PDF的所有页面"""# 获取PDF总页数total_pages = self.get_pdf_page_count(pdf_path)print(f"PDF总页数: {total_pages}")# 打开输出文件with open(output_path, 'w', encoding='utf-8') as f:# 处理每一页for page_num in range(1, total_pages + 1):self._process_single_page(pdf_path, page_num, total_pages, f)
好的,让我们继续完成代码的其余部分:
def _process_single_page(self, pdf_path, page_num, total_pages, output_file):"""处理单个PDF页面"""print(f"\n处理第 {page_num}/{total_pages} 页...")try:# 1. 转换PDF页面为图像pages = convert_from_path(pdf_path,first_page=page_num,last_page=page_num,dpi=200, # 设置分辨率poppler_path=r"E:\Proper\poppler-24.08.0\Library\bin", # 修改为你的poppler路径thread_count=1)if not pages:print(f"警告: 第 {page_num} 页转换失败")return# 2. 获取页面图像page = pages[0]# 3. 预处理图像img = self.preprocess_image(page)# 4. 处理每种颜色page_results = []for color_name, color_range in self.color_ranges.items():print(f"处理{color_name}色文本...")highlighted_text = self.extract_colored_text(img.copy(),color_range['lower'],color_range['upper'])if highlighted_text:page_results.extend(highlighted_text)# 5. 保存结果if page_results:output_file.write(f"\n第{page_num}页标注文本:\n")output_file.write('\n'.join(page_results) + '\n')output_file.flush()print(f"第 {page_num} 页找到 {len(page_results)} 条文本")else:print(f"第 {page_num} 页未找到高亮文本")# 6. 清理内存del pagesdel pagedel imgexcept Exception as e:print(f"处理第 {page_num} 页时出错: {str(e)}")def preprocess_image(self, pil_image):"""图像预处理"""try:# 1. 调整图像大小resized_image = self.resize_image(pil_image)# 2. 转换为OpenCV格式img = cv2.cvtColor(np.array(resized_image), cv2.COLOR_RGB2BGR)# 3. 图像增强img = cv2.GaussianBlur(img, (3, 3), 0) # 降噪img = cv2.convertScaleAbs(img, alpha=1.2, beta=10) # 增加对比度和亮度return imgexcept Exception as e:print(f"图像预处理错误: {str(e)}")raisedef resize_image(self, image):"""调整图像大小"""try:width, height = image.sizemax_dimension = 2000# 如果图像太大,进行缩放if width > max_dimension or height > max_dimension:scale = max_dimension / max(width, height)new_width = int(width * scale)new_height = int(height * scale)return image.resize((new_width, new_height))return imageexcept Exception as e:print(f"图像缩放错误: {str(e)}")raise
使用示例:
def main():try:# 1. 创建输出目录os.makedirs('output', exist_ok=True)# 2. 创建提取器实例print("初始化PDF文本提取器...")extractor = PDFTextExtractor()# 3. 设置PDF文件路径pdf_path = r"你的PDF文件路径" # 修改为你的PDF文件路径output_path = "output/extracted_text.txt"# 4. 处理PDFprint(f"开始处理PDF文件: {pdf_path}")extractor.process_pdf(pdf_path, output_path)except Exception as e:print(f"程序执行失败: {str(e)}")raiseif __name__ == "__main__":main()
使用说明:
-
准备工作:
- 安装所需库
- 安装Poppler并设置路径
- 准备要处理的PDF文件
-
修改配置:
- 修改PDF文件路径
- 修改Poppler路径
- 根据需要调整颜色范围
-
运行程序:
python main.py
- 查看结果:
- 输出文件将保存在output目录下
- 程序会显示处理进度和结果
完整项目代码
import os
import cv2
import numpy as np
from paddleocr import PaddleOCR
from pdf2image import convert_from_path
import timeclass PDFTextExtractor:def __init__(self):self.ocr = PaddleOCR(use_angle_cls=True,lang='ch',use_gpu=False,show_log=False)self.color_ranges = {'yellow': {'lower': np.array([15, 70, 70]),'upper': np.array([35, 255, 255])},'red': {'lower': np.array([0, 70, 70]),'upper': np.array([15, 255, 255])}}def process_pdf(self, pdf_path, output_path='extracted_text.txt'):try:if not os.path.exists(pdf_path):raise FileNotFoundError(f"PDF文件不存在: {pdf_path}")print(f"开始处理PDF: {pdf_path}")start_time = time.time()poppler_path = r"E:\Proper\poppler-24.08.0\Library\bin"if not os.path.exists(poppler_path):raise Exception(f"Poppler 路径不存在: {poppler_path}")# 获取PDF总页数total_pages = self.get_pdf_page_count(pdf_path, poppler_path)print(f"PDF总页数: {total_pages}")with open(output_path, 'w', encoding='utf-8') as f:for page_num in range(1, total_pages + 1):print(f"\n处理第 {page_num}/{total_pages} 页...")try:pages = convert_from_path(pdf_path,first_page=page_num,last_page=page_num,dpi=200,poppler_path=poppler_path,thread_count=1)if not pages:print(f"警告: 第 {page_num} 页转换失败")continuepage = pages[0]# 转换和预处理图像img = self.preprocess_image(page)# 处理每种颜色page_results = []for color_name, color_range in self.color_ranges.items():print(f"处理{color_name}色文本...")highlighted_text = self.extract_colored_text(img.copy(), # 使用图像副本color_range['lower'],color_range['upper'])if highlighted_text:page_results.extend(highlighted_text)# 保存结果if page_results:f.write(f"\n第{page_num}页标注文本:\n")f.write('\n'.join(page_results) + '\n')f.flush()print(f"第 {page_num} 页找到 {len(page_results)} 条文本")else:print(f"第 {page_num} 页未找到高亮文本")# 清理内存del pagesdel pagedel imgexcept Exception as e:print(f"处理第 {page_num} 页时出错: {str(e)}")continueend_time = time.time()print(f"\n处理完成!用时: {end_time - start_time:.2f}秒")print(f"结果已保存到: {output_path}")except Exception as e:print(f"处理过程中出错: {str(e)}")raisedef preprocess_image(self, pil_image):"""图像预处理"""# 调整大小pil_image = self.resize_image(pil_image)# 转换为OpenCV格式并预处理img = cv2.cvtColor(np.array(pil_image), cv2.COLOR_RGB2BGR)img = cv2.GaussianBlur(img, (3, 3), 0) # 降噪img = cv2.convertScaleAbs(img, alpha=1.2, beta=10) # 增加对比度和亮度return imgdef get_pdf_page_count(self, pdf_path, poppler_path):"""获取PDF页数"""try:pages = convert_from_path(pdf_path,dpi=72,poppler_path=poppler_path,first_page=1,last_page=1)# 使用 pdf2image 的方法获取总页数from pdf2image.pdf2image import pdfinfo_from_pathinfo = pdfinfo_from_path(pdf_path, poppler_path=poppler_path)return info['Pages']except Exception as e:print(f"获取PDF页数失败: {str(e)}")return 0def resize_image(self, image):"""调整图像大小"""width, height = image.sizemax_dimension = 2000 # 增加最大尺寸以提高识别率if width > max_dimension or height > max_dimension:scale = max_dimension / max(width, height)new_width = int(width * scale)new_height = int(height * scale)return image.resize((new_width, new_height))return imagedef extract_colored_text(self, img, color_lower, color_upper):"""提取特定颜色区域的文本"""try:# 转换颜色空间hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)# 创建掩码mask = cv2.inRange(hsv, color_lower, color_upper)# 形态学操作kernel = np.ones((3, 3), np.uint8)mask = cv2.dilate(mask, kernel, iterations=2)mask = cv2.erode(mask, kernel, iterations=1)mask = cv2.morphologyEx(mask, cv2.MORPH_OPEN, kernel)# 应用掩码result = cv2.bitwise_and(img, img, mask=mask)# 转换为灰度图gray = cv2.cvtColor(result, cv2.COLOR_BGR2GRAY)# 增强对比度gray = cv2.convertScaleAbs(gray, alpha=1.5, beta=10)# 保存处理后的图像用于调试# cv2.imwrite(f'debug_page_{time.time()}.png', gray)# OCR识别ocr_result = self.ocr.ocr(gray, cls=True)# 处理OCR结果texts = []if ocr_result is not None: # 添加空值检查for line in ocr_result:if line is not None: # 添加行级空值检查for word_info in line:if isinstance(word_info, list) and len(word_info) >= 2:text = word_info[1][0].strip()confidence = word_info[1][1]if confidence > 0.6 and text:texts.append(text)return textsexcept Exception as e:print(f"文本提取错误: {str(e)}")return []def main():try:extractor = PDFTextExtractor()pdf_path = r"E:\z_library_books\平时作业\中国旅游文化_11608595(1).pdf"extractor.process_pdf(pdf_path)except Exception as e:print(f"程序执行失败: {str(e)}")if __name__ == "__main__":main()
补充说明:便于理解程序的运行流程
好的,让我更详细地解释每个步骤:
1. 程序启动和初始化
def main():try:# 1. 创建PDF文本提取器extractor = PDFTextExtractor()# 这一步会:# - 启动PaddleOCR引擎(文字识别工具)# - 设置识别中文# - 设置不使用GPU# - 设置要识别的颜色范围(黄色和红色)
2. 设置文件路径和开始处理
# 2. 设置PDF文件路径pdf_path = r"E:\z_library_books\平时作业\中国旅游文化_11608595(1).pdf"# 3. 开始处理PDFextractor.process_pdf(pdf_path)
3. PDF处理流程(process_pdf函数)
def process_pdf(self, pdf_path, output_path='extracted_text.txt'):try:# 1. 检查PDF文件是否存在if not os.path.exists(pdf_path):raise FileNotFoundError("PDF文件不存在")# 2. 记录开始时间start_time = time.time()# 3. 设置poppler工具路径(用于转换PDF为图片)poppler_path = r"E:\Proper\poppler-24.08.0\Library\bin"# 4. 获取PDF总页数total_pages = self.get_pdf_page_count(pdf_path, poppler_path)print(f"PDF总页数: {total_pages}")# 5. 创建输出文件with open(output_path, 'w', encoding='utf-8') as f:# 6. 逐页处理for page_num in range(1, total_pages + 1):# 处理每一页...
4. 单页处理流程
# 对于每一页:
try:# 1. 将PDF页面转换为图片pages = convert_from_path(pdf_path,first_page=page_num,last_page=page_num,dpi=200, # 设置图片清晰度poppler_path=poppler_path)# 2. 获取页面图片page = pages[0]# 3. 预处理图片img = self.preprocess_image(page)# - 调整图片大小# - 增加清晰度# - 调整亮度和对比度# 4. 处理每种颜色page_results = []for color_name, color_range in self.color_ranges.items():print(f"处理{color_name}色文本...")# 提取特定颜色的文本highlighted_text = self.extract_colored_text(img.copy(),color_range['lower'],color_range['upper'])if highlighted_text:page_results.extend(highlighted_text)# 5. 保存这一页的结果if page_results:f.write(f"\n第{page_num}页标注文本:\n")f.write('\n'.join(page_results) + '\n')
5. 文本提取流程(extract_colored_text函数)
def extract_colored_text(self, img, color_lower, color_upper):try:# 1. 转换颜色空间,便于找到高亮部分hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)# 2. 创建掩码(找出高亮部分)mask = cv2.inRange(hsv, color_lower, color_upper)# 3. 优化掩码kernel = np.ones((3, 3), np.uint8)mask = cv2.dilate(mask, kernel, iterations=2)mask = cv2.erode(mask, kernel, iterations=1)# 4. 提取高亮区域result = cv2.bitwise_and(img, img, mask=mask)# 5. 转为灰度图gray = cv2.cvtColor(result, cv2.COLOR_BGR2GRAY)# 6. OCR识别文字ocr_result = self.ocr.ocr(gray, cls=True)# 7. 处理识别结果texts = []if ocr_result is not None:for line in ocr_result:if line is not None:for word_info in line:text = word_info[1][0].strip()confidence = word_info[1][1]if confidence > 0.6 and text:texts.append(text)return texts
这个程序就像一个阅读助手:
- 先准备好工具(OCR引擎)
- 打开PDF文件
- 一页一页地:
- 把PDF页面转成图片
- 找出高亮的部分
- 识别高亮部分的文字
- 记录下识别到的文字
- 最后把所有记录的文字保存到文件中
相关文章:

高阶:基于Python paddleocr库 提取pdf 文档高亮显示的内容
预览 第1步:理解基本结构和导入必要的库 # 1. 首先导入需要的库 import os # 用于处理文件和路径 import cv2 # 用于图像处理 import numpy as np # 用于数值计算 from paddleocr import PaddleOCR # 用于文字识别 from pdf2image import convert_from_path #…...
STM32项目之环境空气质量检测系统软件设计
目录 前言一、软件需求概述二、需求实现思路1.软件开发工具准备2.温湿度实时监测功能3.空气质量实时监测功能(目前硬件没有买该模块,暂未实现)4.实时时间功能5.视觉、听觉报警功能6.WIFI云平台连接,远程查看数据功能(待…...

重温设计模式--原型模式
文章目录 原型模式定义原型模式UML图优点缺点使用场景C 代码示例深拷贝、浅拷贝 原型模式定义 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象; 核心中的核心就是 克隆clone ,后面讲 原型模式是一种创建型设计模式,它的主要…...
输变电资质分一级、二级,新办从二级开始,三级已取消
输变电工程专业承包资质分为一级.二级.三级。 一、输变电工程专业承包一级资质标准:1、企业资产净资产5000万元以上。2、企业主要人员(1)机电工程专业一级注册建设师不少于10人。(2)技术负责人…...
浏览器http缓存问题
一、什么是浏览器缓存 浏览器将请求过的资源(html、js、css、img)等,根据缓存机制,拷贝一份副本存储在浏览器的内存或者磁盘上。如果下一次请求的url相同时则根据缓存机制决定是读取内存或者磁盘上的数据还是去服务器请求资源文件…...
结构化Prompt:让大模型更智能的秘诀
一、结构化提示词 1. 什么是结构化? 结构化: 对信息进行组织,使其遵循特定的模式和规则,从而方便有效理解信息。结构化的思想在各类文本中都得到了广泛应用,例如文章、书籍中都使用了标题、子标题、段落等语法结构。结构化 Prompt 的思维方…...

威联通NAS部署openwrt软路由保姆级教程附镜像文件
创作立场:原创不易,拒绝搬运~ hello 大家好,我是你们的老伙伴,稳重的大王~ 本期教程为大家分享,怎么在NAS里面部署软路由,下面是软路由的镜像文件,有两个版本,400M的是定制版~ Sh…...
《计算机网络(第7版)-谢希仁》期末考试复习题和答案(总结整理)
目录 前言: 一、选择题。 二、填空题。 三、名词解释。 四、简答题。 前言: 这个自动标题自己带了序号,一开始想全部选项和题号都改过来的,结果一看一百多个全是,懒得改了 一、选择题。 1、广域网覆盖的地理范围…...

windows和mac共享文件夹访问教程
mac共享文件夹,windows访问: mac上开启文件夹共享,并添加文件夹和用户,然后windows 上 在windows上快捷键 win r 打开运行,按如下格式输入mac设备的IP地址: 就可以访问了: windows共享文件夹…...

【PPTist】网格线、对齐线、标尺
前言:本篇文章介绍辅助我们摆放元素位置的几个功能 一、网格线功能 网格线主要是用来辅助我们对齐元素的,右键可以选择使用哪种网格线,以及关闭和打开 显示效果就是图中的这种效果。但是强迫症有点难受,它底部没对齐啊啊啊 不…...
Leetcode3218. 切蛋糕的最小总开销 I
题目描述: 有一个 m x n 大小的矩形蛋糕,需要切成 1 x 1 的小块。 给你整数 m ,n 和两个数组: horizontalCut 的大小为 m - 1 ,其中 horizontalCut[i] 表示沿着水平线 i 切蛋糕的开销。verticalCut 的大小为 n - 1 …...

ECCV-2024 | 指令不够用、大模型来生成!BEVInstructor:基于BEV感知和大模型的视觉语言导航指令生成
作者:Sheng Fan, Rui Liu, Wenguan Wang, and Yi Yang 单位:浙江大学 原文链接:Navigation Instruction Generation with BEV Perception and Large Language Models (https://link.springer.com/chapter/10.1007/978-3-031-726…...
【UE5.3.2 】引擎中安装RiderLink插件
Rider会提示你安装这个插件选择在引擎中安装 Running AutomationTool... Using bundled DotNet SDK version: 6.0.302 Starting AutomationTool... Parsing command line: BuildPlugin -Unversioned -Plugin=C:\Users\zhangbin\AppData\Local\...

【HarmonyOS 5.0】第十二篇-ArkUI公共属性(一)
一、公共样式类属性 ArkUI框架提供的基础组件直接或者间接的继承自 CommonMethod , CommonMethod 中定义的属性样式属于公共样式。下面就来学习这些样式 1.1.尺寸设置 宽高设置 设置组件的宽高,缺省时使用组件自身内容的宽高,比如充满父布…...
京准电钟解读,NTP网络授时服务器如何提升DCS系统效率
京准电钟解读,NTP网络授时服务器如何提升DCS系统效率 京准电钟解读,NTP网络授时服务器如何提升DCS系统效率 NTP 网络授时服务器为防火墙内的网络设备、终端、服务器提供准确、可靠和安全的高精度卫星时间参考,可为它支持数万台支持标准的网…...

4.银河麒麟V10(ARM) 离线安装 MySQL
1. 系统版本 [rootga-sit-cssjgj-db-01u ~]# nkvers ############## Kylin Linux Version ################# Release: Kylin Linux Advanced Server release V10 (Lance)Kernel: 4.19.90-52.39.v2207.ky10.aarch64Build: Kylin Linux Advanced Server release V10 (SP3) /(La…...
Redis四种模式在Spring Boot框架下的配置
1. 单机模式 application.properties 配置: spring.redis.host127.0.0.1 spring.redis.port6379 spring.redis.passwordyourpasswordspring.redis.host: 该配置指定 Redis 服务器的主机地址。在单机模式下,通常是本地 Redis 实例(127.0.0.1…...

Golang的性能监控指标
Golang的性能监控指标 一、介绍 是一种高性能的编程语言,因其并发模型和内建的性能监控工具而备受开发者青睐。在实际开发中,我们需要了解一些重要的性能监控指标,以便及时发现和解决性能问题。本文将介绍Golang中常用的性能监控指标…...
基于GAN和DenseNett组合的调制信号分类网络(源码)
(需要源码请私信或评论) 生成对抗网络(GAN)原理 生成对抗网络(GAN)是一种革命性的深度学习模型,在无监督学习领域取得了显著进展。其核心思想基于 二人零和博弈 ,通过生成模型和判别模型的相互竞争实现高质量的数据合成。GAN由Ian Goodfellow等人于2014年首次提出,随后在图…...

uniapp 项目基础搭建(vue2)
一 .创建项目 创建项目可以通过工具创建,也可以通过脚手架下载 1.通过工具创建 2.通过脚手架下载 安装脚手架 npm install -g vue/cli 下载项目模板 vue create -p dcloudio/uni-preset-vue 项目名称 二. 下载相关依赖 1. 项目默认是没有package.json文件的&…...

网络六边形受到攻击
大家读完觉得有帮助记得关注和点赞!!! 抽象 现代智能交通系统 (ITS) 的一个关键要求是能够以安全、可靠和匿名的方式从互联车辆和移动设备收集地理参考数据。Nexagon 协议建立在 IETF 定位器/ID 分离协议 (…...

国防科技大学计算机基础课程笔记02信息编码
1.机内码和国标码 国标码就是我们非常熟悉的这个GB2312,但是因为都是16进制,因此这个了16进制的数据既可以翻译成为这个机器码,也可以翻译成为这个国标码,所以这个时候很容易会出现这个歧义的情况; 因此,我们的这个国…...

【JavaEE】-- HTTP
1. HTTP是什么? HTTP(全称为"超文本传输协议")是一种应用非常广泛的应用层协议,HTTP是基于TCP协议的一种应用层协议。 应用层协议:是计算机网络协议栈中最高层的协议,它定义了运行在不同主机上…...
IGP(Interior Gateway Protocol,内部网关协议)
IGP(Interior Gateway Protocol,内部网关协议) 是一种用于在一个自治系统(AS)内部传递路由信息的路由协议,主要用于在一个组织或机构的内部网络中决定数据包的最佳路径。与用于自治系统之间通信的 EGP&…...
vue3 定时器-定义全局方法 vue+ts
1.创建ts文件 路径:src/utils/timer.ts 完整代码: import { onUnmounted } from vuetype TimerCallback (...args: any[]) > voidexport function useGlobalTimer() {const timers: Map<number, NodeJS.Timeout> new Map()// 创建定时器con…...

day36-多路IO复用
一、基本概念 (服务器多客户端模型) 定义:单线程或单进程同时监测若干个文件描述符是否可以执行IO操作的能力 作用:应用程序通常需要处理来自多条事件流中的事件,比如我现在用的电脑,需要同时处理键盘鼠标…...
Caliper 配置文件解析:fisco-bcos.json
config.yaml 文件 config.yaml 是 Caliper 的主配置文件,通常包含以下内容: test:name: fisco-bcos-test # 测试名称description: Performance test of FISCO-BCOS # 测试描述workers:type: local # 工作进程类型number: 5 # 工作进程数量monitor:type: - docker- pro…...

【Linux系统】Linux环境变量:系统配置的隐形指挥官
。# Linux系列 文章目录 前言一、环境变量的概念二、常见的环境变量三、环境变量特点及其相关指令3.1 环境变量的全局性3.2、环境变量的生命周期 四、环境变量的组织方式五、C语言对环境变量的操作5.1 设置环境变量:setenv5.2 删除环境变量:unsetenv5.3 遍历所有环境…...

c++第七天 继承与派生2
这一篇文章主要内容是 派生类构造函数与析构函数 在派生类中重写基类成员 以及多继承 第一部分:派生类构造函数与析构函数 当创建一个派生类对象时,基类成员是如何初始化的? 1.当派生类对象创建的时候,基类成员的初始化顺序 …...

【Post-process】【VBA】ETABS VBA FrameObj.GetNameList and write to EXCEL
ETABS API实战:导出框架元素数据到Excel 在结构工程师的日常工作中,经常需要从ETABS模型中提取框架元素信息进行后续分析。手动复制粘贴不仅耗时,还容易出错。今天我们来用简单的VBA代码实现自动化导出。 🎯 我们要实现什么? 一键点击,就能将ETABS中所有框架元素的基…...