【计算机视觉】OpenCV实战项目:Text-Extraction-Table-Image:基于OpenCV与OCR的表格图像文本提取系统深度解析
Text-Extraction-Table-Image:基于OpenCV与OCR的表格图像文本提取系统深度解析
- 1. 项目概述
- 2. 技术原理与算法设计
- 2.1 图像预处理流水线
- 2.2 表格结构检测算法
- 2.3 OCR优化策略
- 3. 实战部署指南
- 3.1 环境配置
- 3.2 核心代码解析
- 3.3 执行流程示例
- 4. 常见问题与解决方案
- 4.1 表格检测失败
- 4.2 OCR识别率低
- 4.3 内存溢出(OOM)
- 5. 相关技术论文与研究
- 5.1 基础OCR技术
- 5.2 高级扩展方向
- 6. 项目演进与生态整合
- 6.1 功能扩展建议
- 6.2 性能优化路径
- 结语
1. 项目概述
Text-Extraction-Table-Image 是一个专注于从复杂表格图像中提取结构化数据的开源项目,通过整合计算机视觉技术与OCR(光学字符识别)算法,实现了对扫描文档、报表截图等非结构化数据的自动化处理。该项目在金融、医疗、科研等领域的数据录入场景中具有重要应用价值,其核心功能包括:
- 表格区域检测:基于OpenCV的边缘检测与形态学操作定位表格边界
- 单元格分割:利用图像投影分析与连通域检测技术划分单元格
- 文本识别:采用PyTesseract实现多语言OCR识别,支持中英文混合场景
- 结构化输出:将识别结果转换为CSV/Excel格式,保持原始表格逻辑关系
相较于传统OCR工具(如Adobe Acrobat),该项目通过引入自适应预处理流水线,在低质量图像(模糊、倾斜、复杂背景)中实现了平均92%的识别准确率提升。
2. 技术原理与算法设计
2.1 图像预处理流水线
预处理是提升OCR性能的关键步骤,项目采用多阶段处理流程:
-
灰度化与直方图均衡化
通过颜色空间转换与对比度增强改善文本可读性:
I g r a y = 0.299 R + 0.587 G + 0.114 B I e q ( x , y ) = CLAHE ( I g r a y ( x , y ) ) I_{gray} = 0.299R + 0.587G + 0.114B \\ I_{eq}(x,y) = \text{CLAHE}(I_{gray}(x,y)) Igray=0.299R+0.587G+0.114BIeq(x,y)=CLAHE(Igray(x,y))
其中CLAHE(限制对比度自适应直方图均衡化)可避免局部过曝光。 -
二值化与去噪
采用自适应阈值算法:
T ( x , y ) = μ ( x , y ) − C 其中 μ ( x , y ) 为局部均值,C为经验常数(通常取10-15) T(x,y) = \mu(x,y) - C \\ \text{其中}\ \mu(x,y)\ \text{为局部均值,C为经验常数(通常取10-15)} T(x,y)=μ(x,y)−C其中 μ(x,y) 为局部均值,C为经验常数(通常取10-15)
后接形态学开运算(腐蚀+膨胀)消除孤立噪点。
2.2 表格结构检测算法
项目采用混合策略检测表格:
-
水平/垂直线检测
使用Hough变换检测直线,通过角度过滤与线段合并重构表格框架:edges = cv2.Canny(gray, 50, 150) lines = cv2.HoughLinesP(edges, 1, np.pi/180, threshold=100, minLineLength=100, maxLineGap=10)
-
投影分析法
对二值图像进行水平/垂直投影,通过波峰检测确定行列分割线:horizontal_proj = np.sum(binary, axis=1) vertical_proj = np.sum(binary, axis=0)
-
深度学习辅助(可选)
集成TableNet等模型进行端到端表格检测,需额外安装TensorFlow环境。
2.3 OCR优化策略
针对表格文本特性,项目进行了以下优化:
-
区域级识别
对每个单元格单独调用PyTesseract,避免全局识别导致的上下文干扰:cell_image = image[y1:y2, x1:x2] text = pytesseract.image_to_string(cell_image, lang='chi_sim+eng')
-
多语言混合支持
通过lang
参数指定组合语言包(如eng+chi_sim
),并动态切换识别引擎模式(--oem 3
启用LSTM引擎)。 -
后处理校正
使用规则引擎与词典匹配修正常见OCR错误(如"0"→"O"、“7"→”?")。
3. 实战部署指南
3.1 环境配置
系统要求:
- Python 3.8+
- Tesseract OCR 5.0+(需单独安装)
- OpenCV 4.5+
依赖安装:
# 安装Tesseract(Ubuntu示例)
sudo apt install tesseract-ocr tesseract-ocr-chi-sim# 安装Python库
pip install opencv-python pytesseract pandas
3.2 核心代码解析
项目主体流程封装于table_extractor.py
:
class TableExtractor:def __init__(self, image_path):self.image = cv2.imread(image_path)self.preprocessed = self._preprocess()def _preprocess(self):gray = cv2.cvtColor(self.image, cv2.COLOR_BGR2GRAY)clahe = cv2.createCLAHE(clipLimit=2.0, tileGridSize=(8,8))equalized = clahe.apply(gray)_, binary = cv2.threshold(equalized, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)return cv2.medianBlur(binary, 3)def detect_table(self):# 边缘检测与形态学操作edges = cv2.Canny(self.preprocessed, 50, 150)kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (3,3))dilated = cv2.dilate(edges, kernel, iterations=2)# 查找轮廓并筛选最大表格区域contours, _ = cv2.findContours(dilated, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)max_contour = max(contours, key=cv2.contourArea)x,y,w,h = cv2.boundingRect(max_contour)return self.image[y:y+h, x:x+w]def extract_cells(self, table_roi):# 投影分析分割行列horizontal_proj = np.sum(table_roi, axis=1)row_lines = np.where(horizontal_proj < 0.1 * np.max(horizontal_proj))[0]vertical_proj = np.sum(table_roi, axis=0)col_lines = np.where(vertical_proj < 0.1 * np.max(vertical_proj))[0]# 生成单元格坐标cells = []for i in range(len(row_lines)-1):for j in range(len(col_lines)-1):x1, y1 = col_lines[j], row_lines[i]x2, y2 = col_lines[j+1], row_lines[i+1]cells.append((x1, y1, x2, y2))return cellsdef recognize_text(self, cells):data = []for cell in cells:x1, y1, x2, y2 = cellcell_img = table_roi[y1:y2, x1:x2]text = pytesseract.image_to_string(cell_img, lang='chi_sim+eng')data.append(text.strip())return pd.DataFrame(np.array(data).reshape(-1, len(col_lines)-1))
3.3 执行流程示例
输入图像:包含合并单元格的复杂表格(如财务报表)
python table_extractor.py --input financial_report.png --output report.csv
处理步骤:
- 图像预处理:灰度化 → CLAHE增强 → 二值化 → 中值滤波
- 表格检测:Canny边缘检测 → 形态学膨胀 → 轮廓分析
- 单元格分割:水平/垂直投影 → 波峰检测 → 坐标生成
- OCR识别:逐单元格调用PyTesseract → 文本清洗
- 结果导出:生成结构化CSV文件
4. 常见问题与解决方案
4.1 表格检测失败
- 现象:无法定位表格区域或误检非表格元素
- 解决方案:
- 调整Canny边缘检测参数(
threshold1=30, threshold2=100
) - 改用深度学习模型(如使用预训练的TableNet)
- 添加ROI手动选择功能(通过
cv2.selectROI
交互)
- 调整Canny边缘检测参数(
4.2 OCR识别率低
- Case 1:中英文混合识别错误
- 优化方法:指定多语言包并设置优先级:
text = pytesseract.image_to_string(image, lang='chi_sim+eng', config='--psm 6')
- 优化方法:指定多语言包并设置优先级:
- Case 2:手写体识别困难
- 优化方法:启用Tesseract的LSTM模式(
--oem 1
)并训练自定义字体模型
- 优化方法:启用Tesseract的LSTM模式(
4.3 内存溢出(OOM)
- 错误信息:
ResourceExhaustedError: OOM when allocating tensor
- 解决方法:
- 降低处理分辨率:
image = cv2.resize(image, (width//2, height//2))
- 启用批处理分割:将大图切割为子区域分别处理
- 使用GPU加速:配置CUDA环境并启用Tesseract的GPU模式
- 降低处理分辨率:
5. 相关技术论文与研究
5.1 基础OCR技术
-
《Tesseract: An Open-Source Optical Character Recognition Engine》(Smith, 2007)
详细阐述了Tesseract的LSTM架构与训练流程,为项目中的OCR优化提供理论依据。 -
《A Survey of Table Recognition: Models, Observations, Applications, and Challenges》(Zhong et al., 2020)
系统综述了表格检测与识别的关键技术,包括基于深度学习的端到端方法。
5.2 高级扩展方向
-
《Image Textualization: Automatic Generation of Detailed Image Descriptions》(Zhang et al., 2024)
提出多模态框架IT,通过结合视觉专家模型与大语言模型生成结构化描述,可为表格语义理解提供新思路。 -
《Vision Transformer for Fast and Efficient Scene Text Recognition》(Lee et al., 2021)
将ViT引入OCR任务,在复杂版式场景中达到SOTA性能,可作为项目升级方向。
6. 项目演进与生态整合
6.1 功能扩展建议
-
多模态输入支持
集成PDF解析库(如PyMuPDF),直接处理扫描PDF文档。 -
语义理解增强
结合大语言模型(如GPT-4)进行表头推理与数据类型判断。 -
云服务部署
使用FastAPI构建RESTful API,支持批量处理与异步任务。
6.2 性能优化路径
-
GPU加速
利用CUDA加速OpenCV运算,并通过TensoRT优化PyTesseract推理速度。 -
增量处理
对大型文档实施流式处理,减少内存占用。
结语
Text-Extraction-Table-Image项目通过经典计算机视觉与OCR技术的深度融合,为表格图像处理提供了高效可靠的解决方案。随着多模态大模型的发展,未来可通过引入视觉-语言联合表征进一步提升复杂场景下的鲁棒性。该项目的模块化设计使其易于扩展,开发者可根据具体需求灵活定制预处理流水线或集成最新深度学习模型,推动文档自动化处理技术的持续进化。
相关文章:
【计算机视觉】OpenCV实战项目:Text-Extraction-Table-Image:基于OpenCV与OCR的表格图像文本提取系统深度解析
Text-Extraction-Table-Image:基于OpenCV与OCR的表格图像文本提取系统深度解析 1. 项目概述2. 技术原理与算法设计2.1 图像预处理流水线2.2 表格结构检测算法2.3 OCR优化策略 3. 实战部署指南3.1 环境配置3.2 核心代码解析3.3 执行流程示例 4. 常见问题与解决方案4.…...
TSN网络与DIOS融合:破解煤矿井下电力系统越级跳闸难题
一、引言 1.1 研究背景与意义 在现代煤矿生产中,井下电力系统作为整个煤矿生产的动力核心,其重要性不言而喻。煤矿井下的各类机械设备,如采煤机、刮板输送机、通风机、排水泵等,都依赖稳定的电力供应才能正常运行。电力系统的稳定…...
ALLinSSL:一站式SSL证书管理解决方案
引言 在当今互联网安全日益重要的背景下,SSL证书已成为保护网站安全的必备工具。然而,管理多个SSL证书常常是一项繁琐且容易出错的任务。ALLinSSL应运而生,它提供了一个一站式的SSL证书管理解决方案,大大简化了证书的申请、安装和更新过程。本文将深入介绍ALLinSSL的特性、…...
jsAPI
环境准备 1 安装nvm nvm 即 (node version manager),好处是方便切换 node.js 版本 安装注意事项 要卸载掉现有的 nodejs提示选择 nvm 和 nodejs 目录时,一定要避免目录中出现空格选用【以管理员身份运行】cmd 程序来执行 nvm 命令首次运行前设置好国…...
三、c语言练习四题
在这个系列中,我将以每次五题的形式加强对C语言的理解 1、 矩阵转置 要求 输入: 2 3 1 2 3 4 5 6输出: 1 4 2 5 3 6 //矩阵转置(复习) int main() {int i 0;int j 0;int arr[10][10];/*提前定义好一个大容量数…...
MySql(进阶)
一.数据库约束 约束类型 NOT NULL - 指示某列不能存储 NULL 值。 (not null不能为NILL) UNIQUE - 保证某列的每行必须有唯一的值。 (unique唯一值) DEFAULT - 规定没有给列赋值时的默认值。 (default为空给定默认值) PRIMARY…...
数据结构练习:顺序表题目
今天我们来进行顺序表后面习题的练习 目录 移除数组 思路1:查找后进行删除 思路2:新数组交换: 思路3:双指针法: 删除重复项 合并两个有序数组 移除数组 它的示例如下: 思路1:查找后进行删除…...
Ubuntu 22虚拟机【网络故障】快速解决指南
Ubuntu22虚拟机突然无法连接网络了,以下是故障排除步骤记录。 Ubuntu 22虚拟机网络故障快速解决指南 当在虚拟机中安装的 Ubuntu 22 系统出现 ping: connect: 网络不可达 和 ping: www.baidu.com: 域名解析出现暂时性错误的报错时,通常意味着虚拟机无法…...
SwaggerLogger.java
package further.config;import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.CommandLineRunner; import org.springframework.context.annotation.Configuration; import org.springframework.util.StringUtils;/*** swagger启动ap…...
基于SpringBoot的在线教育管理系统
作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏:…...
企业内训|智能调控系统算法与优化——某汽车厂商
5月9日,东北某市,TsingtaoAI团队为某汽车厂商的智能驾驶业务和研发团队交付“智能调控系统算法与优化”课程。 本课程系统化解析智能调控系统的核心算法原理与前沿优化技术,深度融合经典控制、现代控制及模型预测控制(MPC&#x…...
Web 实时通信技术:WebSocket 与 Server-Sent Events (SSE) 深入解析
一、WebSocket: (一)WebSocket 是什么? WebSocket 是一种网络通信协议,它提供了一种在单个 TCP 连接上进行全双工通信的方式。与传统的 HTTP 请求 - 响应模型不同,WebSocket 允许服务器和客户端在连接建立…...
一个网球新手的学习心得
一个网球新手的学习心得 握拍正手反手发球 网球新手学习的几个重要点就是握拍、正手、反手,还有发球。 握拍 不管是发球还是拉球,首先要注意握拍的方式。 正手的话,一般是右手握住球拍柄,掌心对着球拍柄宽的一面,食…...
12、电子电路设计与PCB布局组件 (概念) - /设计与仿真组件/pcb-layout-tool
76个工业组件库示例汇总 电子电路设计与 PCB 布局组件 (概念演示) 概述 这是一个交互式的 Web 组件,用于演示电子电路原理图设计和 PCB 布局的基本概念。用户可以从元件库中选择元件,在原理图和 PCB 画布上放置、移动,进行原理图连线&…...
[特殊字符] 免税商品优选购物商城系统 | Java + SpringBoot + Vue | 前后端分离实战项目分享
一、项目简介 本项目为一款功能完备的 免税商品优选购物商城系统,采用 Java 后端 Vue 前端的主流前后端分离架构,支持用户、商家、管理员三类角色,满足商品浏览、下单、商家管理、后台运营等多项功能,适用于实际部署或作为毕业设…...
小土堆pytorch--torchvision中的数据集的使用dataloader的使用
torchvision中的数据集的使用&dataloader的使用 一级目录二级目录三级目录 1 torchvision 中的数据集的使用1.1 对与CIFAR - 10数据集的介绍1.2 数据集加载代码1.3 使用transform加载代码 2 DataLoader的使用2.1 DataLoader的作用1. 数据读取2. 数据预处理3. 批量处理4. 并…...
【RabbitMQ】 RabbitMQ高级特性(一)
文章目录 一、消息确认1.1、消息确认机制1.2、手动确认方法1.2.1、AcknowledgeMode.NONE1.2.2、AcknowledgeMode.AUTO1.3.3、AcknowledgeMode.MANUAL 二、持久性2.1、 交换机持久化2.2、队列持久化2.3、消息持久化 三、发送方确认3.1、confirm确认模式3.2、return退回模式3.3、…...
优化理赔数据同步机制:从4小时延迟降至15分钟
优化理赔数据同步机制:从4小时延迟降至15分钟 1. 分析当前同步瓶颈 首先诊断当前同步延迟原因: -- 检查主从复制状态(在主库执行) SHOW MASTER STATUS; SHOW SLAVE HOSTS;-- 在从库执行检查复制延迟 SHOW SLAVE STATUS\G -- 关…...
lampiao靶场渗透
lampiao https://www.vulnhub.com/entry/lampiao-1,249/ 1,将两台虚拟机网络连接都改为NAT模式 2,攻击机上做namp局域网扫描发现靶机 nmap -sn 192.168.23.0/24 那么攻击机IP为192.168.23.182,靶场IP192.168.23.245 3,对靶机进行端…...
云计算中的虚拟化:成本节省、可扩展性与灾难恢复的完美结合
云计算中虚拟化的 4 大优势 1. 成本效益 从本质上讲,虚拟化最大限度地减少了硬件蔓延。团队可以将多个虚拟机整合到单个物理主机上,而不是为每个工作负载部署单独的服务器。这大大减少了前期硬件投资和持续维护。 结果如何?更低的功耗、更低…...
jenkins built-in节点如何删除
1 概述 在 Jenkins 中,默认的 “Built-In” 节点(即主节点/master)无法直接删除,因为它是 Jenkins 的核心组件。它的存在,有时会造成困扰,因为部分作业调度到其上,由于 “Built-In” 节点的环境…...
QSS样式表的选择器
一个最简单的样式设置格式如下 QWidget {background-color: black; }将样式应用到对应的控件 QWidget* w new QWidget; w->setStyleSheet("QWidget {background-color: black;}");样式表中控件的设置有多种方式 通用选择器 /*匹配所有控件*/ *{}类型选择器 …...
Python多环境管理指南
Python/UV 多环境管理指南 在Python开发中,管理多个项目环境是一个常见需求。以下是使用Python内置工具和UV(一种新兴的Python包管理器)进行多环境管理的方法。 1. 使用Python内置venv管理多环境 创建虚拟环境 python -m venv /path/to/y…...
Java从入门到精通 - 数组
数组 此笔记参考黑马教程,仅学习使用,如有侵权,联系必删 文章目录 数组1. 认识数组2. 数组的定义和访问2.1 静态初始化数组2.1.1 数组的访问2.1.1 定义代码实现总结 2.1.2 数组的遍历2.1.2.1 定义代码演示总结 案例代码实现 2.2 动态初始化…...
《Vuejs 设计与实现》第 4 章(响应式系统)( 下 )
目录 4.6 避免无限递归循环 4.7 调度执行 4.8 计算属性 computed 与 lazy 4.9 watch 的实现原理 4.10 立即执行的 watch 与回调执行时机 4.11 过期副作用与竞态问题 总结 4.6 避免无限递归循环 在实现完善响应式系统时,需要注意避免无限递归循环。以以下代码…...
在 Windows 上为 Intel UHD Graphics 编译 OpenCL 程序
如果您使用的是 Intel UHD Graphics 集成显卡,以下是完整的 OpenCL 开发环境配置指南: 1. 准备工作 确认硬件支持 首先确认您的 Intel UHD Graphics 支持 OpenCL: 大多数第6代及以后的 Intel Core 处理器(Skylake 及更新架构)都支持 OpenCL 2.1+ 运行 clinfo 工具可以查…...
C++自学笔记 makefile
本博客参考南科大于仕琪教授的讲解视频和这位同学的学习笔记: 参考博客 感谢两位的分享。 makefile 的作用 用于组织大型项目的编译,是一个一键编译项目的脚本文件。 本博客通过四个版本的makefile逐步说明makefile的使用 使用说明 四个演示文件 …...
【PDF】使用Adobe Acrobat dc添加水印和加密
【PDF】使用Adobe Acrobat dc添加水印和加密 文章目录 [TOC](文章目录) 前言一、添加保护加密口令二、添加水印三、实验四、参考文章总结 实验工具: 1.Adobe Acrobat dc 前言 提示:以下是本篇文章正文内容,下面案例可供参考 一、添加保护加…...
客服系统重构详细计划
# 客服系统重构详细计划 ## 第一阶段:系统分析与准备工作 ### 1. 代码审查和分析 (1-2周) - 全面分析现有代码结构 - 识别代码中的问题和瓶颈 - 理解当前系统的业务逻辑 - 确定可重用的组件 - 制作系统功能清单 ### 2. 技术栈升级准备 (1周) - 升级PHP版本到7…...
基于VSCode + PlatformIO平台的ESP8266的DS1302实时时钟
基于ESP8266的DS1302实时时钟系统开发 一、项目概述 本实验通过ESP8266开发板实现: DS1302实时时钟模块的驱动系统时间同步与维护串口实时时间显示RTC模块状态监控 硬件组成: NodeMCU ESP8266开发板DS1302实时时钟模块CR2032纽扣电池(备…...
Flink 系列之十四 - Data Stream API的自定义数据类型
之前做过数据平台,对于实时数据采集,使用了Flink。现在想想,在数据开发平台中,Flink的身影几乎无处不在,由于之前是边用边学,总体有点混乱,借此空隙,整理一下Flink的内容,…...
【数据结构】线性表
目录 1.1 线性表的概念 1.1.1 线性表的抽象数据类型 1.1.2 线性表的存储结构 1.1.3 线性表运算分类 1.2 顺序表 1.2.1 顺序表的类定义 1.2.2 顺序表的运算实现 1. 顺序表的检索 2. 顺序表的插入 3. 顺序表的删除 1.3 链表 1.3.1 单链表 1. 链表的检索 2. 链表的插…...
大疆卓驭嵌入式面经及参考答案
FreeRTOS 有哪 5 种内存管理方式? heap_1.c:这种方式简单地在编译时分配一块固定大小的内存,在整个运行期间不会进行内存的动态分配和释放。它适用于那些对内存使用需求非常明确且固定,不需要动态分配内存的场景,优点是…...
【网络】:传输层协议 —— UDP、TCP协议
目录 UDP协议 UDP协议的核心特点 UDP协议格式 UDP的缓冲区 基于UDP的应用层协议 TCP协议 TCP协议的核心特点 TCP协议格式 确认应答机制 连接管理机制 三次握手 四次挥手 流量控制 滑动窗口 拥塞控制 基于字节流 粘包和拆包 可靠性和性能保障 基于TCP的应用层…...
每日c/c++题 备战蓝桥杯(洛谷P1115 最大子段和)
洛谷P1115 最大子段和 题解 题目描述 最大子段和是一道经典的动态规划问题。题目要求:给定一个包含n个整数的序列,找出其中和最大的连续子序列,并输出该最大和。若所有数均为负数,则取最大的那个数。 输入格式: 第…...
Python与矢量网络分析仪3671E:通道插损自动化校准(Vscode)
一、背景介绍 DUT集成了多个可调衰减的射频通道,可调衰减由高精度DAC和VVA构成,使用中电思仪的3671E矢量网络分析仪测试DUT的S参数,并自动化调整VVA的控制电压,以自动化获取指定衰减值对应的控制电平。 二、前期准备 Python环境&…...
设计模式系列(1):总览与引导
目录 前言 设计模式简介 UML与设计模式 术语解释 UML工具与PlantUML 面向对象设计原则(SOLID等) 设计模式分类与典型场景 设计模式的价值 学习与实践建议 常见面试题 推荐阅读 1. 前言 本篇为设计模式系列的第一篇,定位为总览和引导,旨在为后续各专题打下基础,帮助大家…...
Day21打卡—常见降维算法
知识点回顾: LDA线性判别PCA主成分分析t-sne降维 作业: 自由作业:探索下什么时候用到降维?降维的主要应用?或者让ai给你出题,群里的同学互相学习下。可以考虑对比下在某些特定数据集上t-sne的可视化和pca可…...
什么是人工智能(Artificial Intelligence,AI)? —— 机器学习 =》 深度学习 =》 新型技术
文章目录 什么是人工智能(Artificial Intelligence,AI)? —— 关系:AI >> ML >> DL一、机器学习(Machine Learning,ML)1、历史2、类型(1)监督学习…...
iVX 平台技术解析:图形化与组件化的融合创新
一、图形化逻辑编程:用流程图替代代码的革命 iVX 的核心突破在于可视化逻辑表达—— 开发者通过拖拽 “逻辑块”(如条件判断、循环控制、数据操作等)来搭建应用逻辑,彻底摒弃传统代码的字符输入模式。这种 “所见即所得” 的开发…...
【Diffusion】在华为云ModelArts上运行MindSpore扩散模型教程
目录 一、背景与目的 二、环境搭建 三、模型原理学习 1. 类定义与初始化 2. 初始卷积层 3. 时间嵌入模块 4. 下采样模块 5. 中间模块 6. 上采样模块 7. 最终卷积层 8. 前向传播 9. 关键点总结 四、代码实现与运行 五、遇到的问题及解决方法 六、总结与展望 一、…...
跟我学c++高级篇——模板元编程之十三处理逻辑
一、元编程处理逻辑 无论在普通编程还是在元编程中,逻辑的处理,都是一个编程开始的必然经过。开发者对普通编程中的逻辑处理一般都非常清楚,不外乎条件谈判和循环处理。而条件判断常见的基本就是if语句(switch如果不考虑效率等情…...
组合模式(Composite Pattern)详解
文章目录 1. 什么是组合模式?2. 为什么需要组合模式?3. 组合模式的核心概念4. 组合模式的结构5. 组合模式的基本实现5.1 基础示例:文件系统5.2 透明组合模式 vs 安全组合模式5.2.1 透明组合模式5.2.2 安全组合模式5.3 实例:公司组织结构5.4 实例:GUI组件树6. Java中组合模…...
最长字符串 / STL+BFS
题目 代码 #include <bits/stdc.h> using namespace std;int main() {map<vector<int>, vector<string>> a;set<vector<int>> c;vector<int> initial(26, 0);c.insert(initial);ifstream infile("words.txt");string s;w…...
C++ stl中的set、multiset、map、multimap的相关函数用法
文章目录 序列式容器和关联式容器树形结构和哈希结构树形结构哈希结构 键值对setset的相关介绍set定义方式set相关成员函数multiset mapmap的相关介绍map定义方式map的相关操作1.map的插入2.map的查找3.map的删除 序列式容器和关联式容器 CSTL中包含了序列式容器和关联式容器&…...
普通IT的股票交易成长史--20250511 美元与美股强相关性
声明:本文章的内容非原创。参考了yt博主Andy Lee的观点,为了加深自己的学习印象才做的复盘,不构成投资建议。感谢他的无私奉献! 送给自己的话: 仓位就是生命,绝对不能满仓!!&#x…...
系统架构设计(四):架构风格总结
黑板 概念 黑板体系架构是一种用于求解复杂问题的软件架构风格,尤其适合知识密集型、推理驱动、数据不确定性大的场景。 它模拟了人类专家协同解决问题的方式,通过一个共享的“黑板”协同多个模块(专家)逐步构建解决方案。 组…...
ElasticSearch进阶
一、文档批量操作 1.批量获取文档数据 批量获取文档数据是通过_mget的API来实现的 (1)在URL中不指定index和type 请求方式:GET请求地址:_mget功能说明 : 可以通过ID批量获取不同index和type的数据请求参数: docs : 文档数组参…...
0基础 | L298N电机驱动模块 | 使用指南
引言 在嵌入式系统开发中,电机驱动是一个常见且重要的功能。L298N是一款高电压、大电流电机驱动芯片,广泛应用于各种电机控制场景,如直流电机的正反转、调速,以及步进电机的驱动等。本文将详细介绍如何使用51单片机来控制L298N电…...
Synchronized与锁升级
一、面试题 1)谈谈你对Synchronized的理解 2)Sychronized的锁升级你聊聊 3)Synchronized实现原理,monitor对象什么时候生成的?知道monitor的monitorenter和monitorexit这两个是怎么保证同步的嘛&#…...