文本区域提取和分析——Python版本
目录
1. 图像预处理
2. 文本区域提取
3. 文本行分割
4. 文本区域分析
5. 应用举例
总结
文本区域提取和分析是计算机视觉中的重要任务,尤其在光学字符识别(OCR)系统、文档分析、自动化数据录入等应用中有广泛的应用。其目标是从图像中提取出包含文本的区域,去除噪声,准确地识别和定位文本。该过程通常分为几个主要步骤:图像预处理、文本区域提取、文本行分割、文本区域分析等。
1. 图像预处理
在文本区域提取之前,图像通常需要进行一些预处理,以提高后续处理的准确性。预处理的目标是去除噪声、增强文本对比度,确保图像中的文本区域能够清晰地被提取。
常见预处理方法:
-
灰度化:将彩色图像转为灰度图像,减少计算复杂度。
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
-
二值化(Thresholding):将图像转换为黑白二值图,突出显示前景(文本)与背景的对比。常用方法有:
- 全局阈值:设定一个固定的阈值,将高于阈值的像素设为白色(前景),低于阈值的设为黑色(背景)。
- Otsu的阈值法:自动计算最佳阈值进行二值化,适用于背景和前景的灰度分布差异较大的情况。
_, binary_image = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)
-
去噪声:使用滤波器去除图像中的噪声,常用的方法有中值滤波、高斯滤波等。
blurred = cv2.GaussianBlur(binary_image, (5, 5), 0)
2. 文本区域提取
文本区域提取的目标是从二值化图像中识别出包含文本的区域。常见的文本区域提取方法包括连通区域分析、轮廓检测等。
连通区域分析(Connected Component Analysis)
连通区域分析用于在二值图像中找出相邻的像素区域,这些区域通常是文本区域或噪声。每个连通区域可以通过标签进行标记。
- 步骤:
- 标记图像中的连通区域:识别图像中所有前景区域,给每个区域一个唯一的标签。
- 提取区域属性:可以提取每个区域的面积、边界框、质心等信息,帮助筛选出可能的文本区域。
num_labels, labeled_image = cv2.connectedComponents(binary_image)
- 区域大小筛选:根据区域的面积(或其他属性)来过滤掉噪声和不相关的区域。文本区域通常有一定的面积范围,过小的区域可能是噪声,过大的区域可能是背景。
轮廓检测(Contour Detection)
轮廓检测通过查找图像中的边缘来提取区域。它是基于边缘的检测方法,通常用于提取形状较明显的文本区域。
- 步骤:
- 查找轮廓:使用
cv2.findContours()
函数检测图像中的轮廓。 - 过滤和选择感兴趣的轮廓:可以根据轮廓的面积、形状等特征,选择那些可能是文本的区域。
- 查找轮廓:使用
contours, _ = cv2.findContours(binary_image, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
- 提取文本区域:根据检测到的轮廓信息,提取每个可能包含文本的矩形区域。
3. 文本行分割
文本行分割是文本区域提取后进一步细化的步骤,目的是将多行文本分开,使得每一行能够单独处理。
水平投影分析(Horizontal Projection Analysis)
通过计算图像中每一行像素的“白色像素”和(或者“非零像素”)的数量,来识别文本行和行间的空隙。
- 步骤:
- 计算每行的投影值:统计每一行的白色像素总数。
- 识别行间间隙:通过设定一个阈值,识别像素和小于该值的行,认为它们是文本行之间的空白区域。
row_sums = np.sum(binary_image > 0, axis=1)
- 文本行提取:通过识别投影中的空隙,可以将图像划分为多行文本。
垂直投影分析(Vertical Projection Analysis)
类似于水平投影,通过统计每列的白色像素数量来识别单个字符或文本块。垂直投影在字符分割中尤为重要。
4. 文本区域分析
文本区域分析是在提取出文本区域后,进一步对这些区域进行细致分析,以便进行后续的OCR或其他任务。
区域属性提取
通过 skimage.measure.regionprops
函数或 OpenCV 的轮廓属性分析,提取文本区域的属性:
- 边界框(Bounding Box):为每个区域计算一个最小的矩形框,通常用
(y_min, x_min, y_max, x_max)
四个坐标表示。 - 面积(Area):区域的像素数量。
- 质心(Centroid):区域的几何中心位置。
- 长宽比(Aspect Ratio):区域宽度与高度的比值,通常用于判断文本区域的形状。
from skimage.measure import regionpropsregions = regionprops(labeled_image)
bounding_box = regions[0].bbox # 获取边界框
area = regions[0].area # 获取面积
centroid = regions[0].centroid # 获取质心
文本区域排序
如果图像中有多行文本,可以根据边界框的位置对区域进行排序。例如,按 y_min
对区域进行排序,确保文本行按照从上到下的顺序排列。
5. 应用举例
- 文档扫描与分析:在文档扫描和自动化数据录入系统中,文本区域提取与行分割是关键步骤。首先提取出文档中的文字区域,然后根据投影分析将文字分为行,最后进行OCR识别。
- 车牌识别:在车牌识别中,通常需要通过区域提取和文本行分割来定位车牌的文字部分。
- 自动化表格分析:在表格分析中,通过检测和分析文本区域,可以识别表格的行列,并进行数据提取。
import cv2
import numpy as np
import matplotlib.pyplot as plt
from skimage.measure import label, regionprops# 读取灰度图像
image_path = '02.jpg' # 图像文件路径
img = cv2.imread(image_path, cv2.IMREAD_GRAYSCALE) # 使用OpenCV读取图像为灰度图# 使用Otsu的阈值法将图像二值化
_, BW = cv2.threshold(img, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU) # 自动计算阈值并将图像转换为二值图# 查找连通区域(标记图中的区域)
num_labels, labeled_image = cv2.connectedComponents(BW) # 使用OpenCV标记连通组件
region_sizes = [(labeled_image == i).sum() for i in range(1, num_labels)] # 计算每个区域的像素数量
max_region_index = np.argmax(region_sizes) + 1 # 找到最大区域的索引(组件标签从1开始)# (a) 显示图像中最大白色区域
mask = (labeled_image == max_region_index).astype(np.uint8) # 提取最大区域的掩码
plt.figure(figsize=(5, 5))
plt.imshow(mask, cmap='gray') # 显示最大区域的二值掩码
plt.title("Largest White Region (a)") # 设置标题
plt.axis('off') # 关闭坐标轴# (b) 提取最大区域的边界框(ROI区域,包含文本)
props = regionprops(mask) # 获取连通区域的属性,包括边界框
bounding_box = props[0].bbox # 获取最大区域的边界框(最小行,最小列,最大行,最大列)
y_min, x_min, y_max, x_max = bounding_box # 解包边界框坐标
ROI = BW[y_min:y_max, x_min:x_max] # 提取包含文本的感兴趣区域(ROI)
ROI = cv2.bitwise_not(ROI) # 反转颜色:背景变黑,字符变白
plt.figure(figsize=(5, 5))
plt.imshow(ROI, cmap='gray') # 显示提取的文本区域
plt.title("Text Region (b)") # 设置标题
plt.axis('off') # 关闭坐标轴# 计算水平投影(每行白色像素的和)
row_sums = np.sum(ROI > 0, axis=1) # 对每一行的白色像素求和# (c) 可视化水平投影(每行白色像素的和)
plt.figure(figsize=(5, 5))
plt.plot(row_sums) # 绘制每行像素和的曲线
plt.title("Row Projection (c)") # 设置标题
plt.xlabel('Row Index') # 设置X轴标签
plt.ylabel('Sum of Pixels') # 设置Y轴标签# 识别有间隙的行(即行与行之间的空隙,可能是文本行之间的空白区域)
threshold = 5 # 设定一个阈值,用于识别文本行之间的间隙(可根据实际情况调整)
regions = [] # 存储有间隙的区域
in_region = False # 标记是否正在检测某一行的文本区域
start_index = 0 # 记录当前区域的起始索引# 根据水平投影值识别行之间的间隙
for i, value in enumerate(row_sums):if value < threshold and not in_region: # 如果当前行的像素和小于阈值且尚未进入文本区域start_index = i # 记录区域的开始行in_region = True # 进入文本区域elif value >= threshold and in_region: # 如果当前行的像素和大于阈值且正在检测文本区域end_index = i - 1 # 记录区域的结束行regions.append((start_index, end_index)) # 将区域保存到regions列表in_region = False # 退出文本区域# 如果最后仍处于区域内,添加最后一个区域
if in_region:regions.append((start_index, len(row_sums) - 1))# 提取每一行并显示
for i in range(len(regions) - 1):row_start = regions[i][1] # 获取当前行的开始行索引row_end = regions[i + 1][0] # 获取下一行的开始行索引(即当前行结束位置)row_image = ROI[row_start:row_end, :] # 提取当前行的图像plt.figure()plt.title(f"Row {i + 1}") # 设置标题,显示行号plt.imshow(row_image, cmap='gray') # 显示当前行plt.axis('off') # 关闭坐标轴plt.show()
总结
文本区域提取与分析包括:
- 图像预处理:通过灰度化、二值化和去噪声等手段,清晰地显示文本区域。
- 文本区域提取:使用连通区域分析或轮廓检测方法提取文本区域。
- 文本行分割:利用投影分析将图像划分为不同的文本行。
- 区域属性分析:提取文本区域的边界框、面积、质心等属性,以便后续的OCR或文本识别。
这些技术广泛应用于光学字符识别(OCR)、文档分析、车牌识别等多个领域。
相关文章:
文本区域提取和分析——Python版本
目录 1. 图像预处理 2. 文本区域提取 3. 文本行分割 4. 文本区域分析 5. 应用举例 总结 文本区域提取和分析是计算机视觉中的重要任务,尤其在光学字符识别(OCR)系统、文档分析、自动化数据录入等应用中有广泛的应用。其目标是从图像中提…...
数据库介绍(不同数据库比较)
文章目录 **一、关系型数据库(RDBMS)****1. MySQL****优点**:**缺点**:**适用场景**: **2. PostgreSQL****优点**:**缺点**:**适用场景**: **3. Oracle Database****优点**ÿ…...
注意力的简单理解,有哪些注意力(Attention)
注意力(Attention) 目录 注意力(Attention)掩码注意力机制自注意力、交叉注意力、掩码注意力的不同点适应场景及举例多头注意分层注意力(Hierarchical Attention)协同注意力(Co - Attention)自注意力(Self - Attention) 简单理解:自注意力就像是一个句子(或序列)内…...
基于Python的投资组合收益率与波动率的数据分析
基于Python的投资组合收益率与波动率的数据分析 摘要:該文通过研究马科维茨的投资组合模型,并将投资组合模型应用到包含6只金融股票的金融行业基金中。首先通过开源的财经接口Tushare获取股票原始数据,接着利用数据分析的黄金组合库…...
《Opencv》图像的旋转
一、使用numpy库实现 np.rot90(img,-1) 后面的参数为-1时事顺时针旋转,为1时是逆时针旋转。 import cv2 import numpy as np img cv2.imread(./images/kele.png) """方法一""" # 顺时针90度 rot_1 np.rot90(img,-1) # 逆时针90度…...
Python 22:注释
1. 定义: 用熟悉的语言对代码进行解释说明。注释不会被执行。 2. 注释分类 单行注释:只能对一行代码进行注释。放在要注释的代码后面,用#进行分隔,中间至少空2个空格,保证代码规范。 print("hello world10"…...
python:利用神经网络技术确定大量离散点中纵坐标可信度的最高集中区间
当我们有许多离散点并想要确定纵坐标在某个区间内的可信度时,我们可以使用神经网络模型来解决这个问题。下面是一个使用Python编写的示例代码,展示了如何使用神经网络来确定大量离散点中纵坐标可信度的最高集中区间。 import numpy as np from sklearn.…...
计算机软件保护条例
(2001年12月20日中华人民共和国国务院令第339号公布 根据2011年1月8日《国务院关于废止和修改部分行政法规的决定》第一次修订 根据2013年1月30日《国务院关于修改〈计算机软件保护条例〉的决定》第二次修订) 第一章 总则 第一条 为了保护计算机软件著作权人的权益&#…...
CM3/4启动流程
CM3/4启动流程 1. 启动模式2. 启动流程 1. 启动模式 复位方式有三种:上电复位,硬件复位和软件复位。 当产生复位,并且离开复位状态后,CM3/4 内核做的第一件事就是读取下列两个 32 位整数的值: 从地址 0x0000 0000 处取…...
gaussdb中怎么查询一个表有多少GB
在 GaussDB 中,你可以通过多种方法查询一个表的大小,包括使用系统视图和内置函数。以下是几种常见的方法: 1. 使用 pg_total_relation_size 函数 pg_total_relation_size 函数返回一个表及其所有索引和 TOAST 数据的总大小。 示例查询 SE…...
2025-01-06 Unity 使用 Tip2 —— Windows、Android、WebGL 打包记录
文章目录 1 Windows2 Android2.1 横版 / 竖版游戏2.2 API 最低版本2.3 目标帧率2.3.1 targetFrameRate2.3.2 vSyncCount2.3.3 Unity 默认设置以及推荐设置2.3.4 Unity 帧率托管 3 WebGL3.1 平台限制3.2 打包报错记录 13.3 打包报错记录 2 最近尝试将写的小游戏打包ÿ…...
OP-TEE环境飞腾密码引擎编程指南
【写在前面】 飞腾开发者平台是基于飞腾自身强大的技术基础和开放能力,聚合行业内优秀资源而打造的。该平台覆盖了操作系统、算法、数据库、安全、平台工具、虚拟化、存储、网络、固件等多个前沿技术领域,包含了应用使能套件、软件仓库、软件支持、软件适…...
解密Navicat密码(Java)
最近从Navicat换到了DBeaver,导出配置文件发现配置文件里的密码都是加密的,看网上的都是给的PHP代码,因为环境问题,就算是在线上运行的PHP代码也会报错,所以就把这段代码改成Java了。 package com.unicdata.system.con…...
apex安装
安装过程复杂曲折,网上说的很多办法,貌似成功了,实际还是没起作用。 先说成功过程,执行下面命令,安装成功(当然,前提是你要先配置好编译环境): (我的环境&a…...
常见的开源网络操作系统
常见的开源网络操作系统有很多,它们通常用于路由器、交换机、网络设备和服务器等场景,具有灵活、可定制、易于扩展的特点。以下是一些常见的开源网络操作系统: OpenWRT 用途:主要用于路由器、无线接入点和网络设备。提供了广泛的定制选项和高级功能,如防火墙配置、VPN 支持…...
2024年6月英语六级CET6听力原文与解析
目录 0 序言 1.Long Conversation(长对话) 1.1 Blender 搅拌机 1.2 村庄的改造变化 2.Passage 2.1 micro robots 微型机器人 2.2 elite sleeper 睡眠精英 3.Lecture 3.1 对自身观念变化的低察觉度及相关研究发现 3.2 美国母亲群体数量变化及母亲节消费趋势分析 3.3 …...
力扣2-回文数
一.题目 给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。 回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。 例如,121 是回文&…...
基于springboot的网上商城购物系统
作者:学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等 文末获取“源码数据库万字文档PPT”,支持远程部署调试、运行安装。 目录 项目包含: 开发说明: 系统功能: 项目截图…...
业务日志设计
当一个项目足够大的时候,我们需要将统计系统完全独立出去,那么就无法避免数据采集的问题,我们可以在业务触发处增加log日志来记录当前变化的原始数据,提供统计系统进行采集 设计一个统计系统的日志记录机制时,主要需要…...
梯度下降方法
2.5 梯度下降方法介绍 学习目标 掌握梯度下降法的推导过程知道全梯度下降算法的原理知道随机梯度下降算法的原理知道随机平均梯度下降算法的原理知道小批量梯度下降算法的原理 上一节中给大家介绍了最基本的梯度下降法实现流程,本节我们将进一步介绍梯度下降法的详细…...
javascript
引入方式 JavaScript 程序不能独立运行,它需要被嵌入 HTML 中,然后浏览器才能执行 JavaScript 代码。通过 script 标签将 JavaScript 代码引入到 HTML 中,有两种方式: 内部方式 通过 script 标签包裹 JavaScript 代码 <!DO…...
大语言模型训练所需的最低显存,联邦大语言模型训练的传输优化技术
联邦大语言模型训练的传输优化技术 目录 联邦大语言模型训练的传输优化技术大语言模型训练所需的最低显存大语言模型训练所需的最低显存 基于模型微调、压缩和分布式并行处理的方法,介绍了相关开源模型及技术应用 核心创新点 多维度优化策略:综合运用基于模型微调、模型压缩和…...
二叉树的二叉链表和三叉链表
在二叉树的数据结构中,通常有两种链表存储方式:二叉链表和三叉链表。这里,我们先澄清一下概念,通常我们讨论的是二叉链表,它用于存储二叉树的节点。而“三叉链表”这个术语在二叉树的上下文中不常见,可能是…...
api开发如何在代码中使用京东商品详情接口的参数?
选择编程语言和相关工具 以 Python 为例,你可以使用requests库来发送 HTTP 请求获取接口数据。如果是 Java,可以使用OkHttp等库。 Python 示例 假设你已经安装了requests库,以下是一个简单的代码示例来获取和使用京东商品详情接口参数&#…...
Quartz如何实现分布式调度
系列文章目录 任务调度管理——Quartz入门 Quartz如何实现分布式控制 系列文章目录一、持久化二、分布式调度1. 表信息2. 调度器的竞争3. 触发器的分配 三、 总结 我们都说Quartz是个分布式调度框架,那么在分布式环境上,如何使得各个服务器上的定时任务…...
JUC--线程池
线程池 七、线程池7.1线程池的概述7.2线程池的构建与参数ThreadPoolExecutor 的构造方法核心参数线程池的工作原理 Executors构造方法newFixedThreadPoolnewCachedThreadPoolnewSingleThreadExecutornewScheduledThreadPool(int corePoolSize) 为什么不推荐使用内置线程池&…...
以柔资讯-D-Security终端文件保护系统 logFileName 任意文件读取漏洞复现
0x01 产品简介 D-Security终端文件保护系统是一套专注于企业文件管理效率与安全的解决方案,统对文件进行全文加密,而非仅在文件表头或特定部分进行加密,从而大大提高了文件的安全性,降低了被破解的风险。D-Security终端文件保护系统是被政府和国安局等情报单位唯一认定的安…...
【JavaScript】Set,Map,Weakmap
以下来源:九剑科技。 weakmap WeakMap是 ES6 中新增的一种集合类型,叫做“弱映射”,由于他的键引用的对象是弱引用,键所指向的对象可以被垃圾回收,可以防止内存泄露。 map ①Map是键值对的集合,键值不限…...
idea小操作
idea 所边定位到你目前阅读的代码 AltF1 或者 选择定位图标...
[tesseract]Deserialize header failed: FIRC.lstmf
tesseract5.0训练时候会提示 [INFO]cd /d D:\program\tesseract-ocr-lstm-train\data [INFO]D:\program\tesseract-ocr-lstm-train\Tesseract-OCR\tesseract.exe xiangjiao.tif xiangjiao -l eng --psm 7 lstm.train [INFO]Page 1 [INFO]Page 2 [INFO]Deserialize header fail…...
深度学习知识点:RNN
文章目录 1.简单介绍2.网络结构3.应对梯度消失 1.简单介绍 循环神经网络(RNN,Recurrent Neural Network)是一类用于处理序列数据的神经网络。与传统网络相比,变化不是特别大,不如CNN的变化那么大。 为什么要有循环神经…...
【数据可视化-11】全国大学数据可视化分析
🧑 博主简介:曾任某智慧城市类企业算法总监,目前在美国市场的物流公司从事高级算法工程师一职,深耕人工智能领域,精通python数据挖掘、可视化、机器学习等,发表过AI相关的专利并多次在AI类比赛中获奖。CSDN…...
CSS:背景样式、盒子模型与文本样式
背景样式 背景样式用于设置网页元素的背景,包括颜色、图片等。 背景颜色 使用 background-color 属性设置背景颜色,支持多种格式(颜色英文、十六进制、RGB等)。 div {background-color: lightblue; }格式示例十六进制#ff5733R…...
学英语学压测:02jmeter组件-测试计划和线程组ramp-up参数的作用
📢📢📢:先看关键单词,再看英文,最后看中文总结,再回头看一遍英文原文,效果更佳!! 关键词 Functional Testing功能测试[ˈfʌŋkʃənəl ˈtɛstɪŋ]Sample样…...
环动科技平均售价波动下滑:大客户依赖明显,应收账款周转率骤降
《港湾商业观察》施子夫 2024年12月18日,浙江环动机器人关节科技股份有限公司(以下简称,环动科技)的上市审核状态变更为“已问询”,公司在11月25日科创板IPO获上交所受理,独家保荐机构为广发证券。 此次环…...
数据结构:LinkedList与链表—无头双向链表(二)
目录 一、什么是LinkedList? 二、LinkedList的模拟实现 1、display()方法 2、addFirst(int data)方法 3、addLast(int data)方法 4、addIndex(int index,int data)方法 5、contains(int key)方法 6、remove(int key)方法 7、removeAllKey(int key)方法 8、…...
『SQLite』解释执行(Explain)
摘要:本节主要讲解SQL的解释执行:Explain。 在 sqlite 语句之前,可以使用 “EXPLAIN” 关键字或 “EXPLAIN QUERY PLAN” 短语,用于描述表查询的细节。 基本语法 EXPLAIN 语法: EXPLAIN [SQLite Query]EXPLAIN QUER…...
计算机网络之---物理层的基本概念
物理层简介 物理层(Physical Layer) 是 OSI(开放系统互联)模型 中的第 1 层,它主要负责数据在物理媒介上的传输,确保原始比特(0 和 1)的传输不受干扰地从一个设备传送到另一个设备。…...
Elasticsearch:优化的标量量化 - 更好的二进制量化
作者:来自 Elastic Benjamin Trent 在这里,我们解释了 Elasticsearch 中的优化标量量化以及如何使用它来改进更好的二进制量化 (Better Binary Quantization - BBQ)。 我们的全新改进版二进制量化 (Better Binary Quantization - BBQ) 索引现在变得更强大…...
KBQA前沿技术
文章目录 KBQA面临的挑战基于模板的方法基于语义解析的方法基于深度学习的传统问答基于深度学习的端到端问答模型KBQA面临的挑战 目前还存在两个很大的困难阻碍着KBQA系统被广泛应用。一个困难是现有的自然语言理解技术在处理自然语言的歧义性和复杂性方面还显得比较薄弱。例如…...
patchwork++地面分割学习笔记
参考资料:古月居 - ROS机器人知识分享社区 https://zhuanlan.zhihu.com/p/644297447 patchwork算法一共包含四部分内容:提出了以下四个部分:RNR、RVPF、A-GLE 和 TGR。 1)基于 3D LiDAR 反射模型的反射噪声消除 (RNR)ÿ…...
OSPF浅析
一、预习: 1、介绍: 是一种基于接口的典型的链路状态路由协议,协议号89,把大型网络分隔为多个较小、可管理的单元:Area,管理距离110;OSPF基于IP,使用了LSAck包来保证包数据的可靠性&…...
批量写入数据到数据库,卡顿怎么解决
在批量写入数据到数据库时,遇到卡顿或性能瓶颈是比较常见的问题。以下是一些可能的解决方案和优化策略,帮助你提高批量写入的性能: ### 1. **批量大小优化** - **调整批量大小**:尝试调整批量写入的数据量,找到一个平衡点。过大或过小的批量大小都可能影响性能。通常,批…...
Residency 与 Internship 的区别及用法解析
Residency 与 Internship 的区别及用法解析 在英文中,“residency” 和 “internship” 都与职业培训相关,但它们的使用场景和具体含义存在显著差异。本文将详细解析这两个词的区别,以及它们在不同语境下的应用。 Residency 的定义及使用场景…...
【数据结构-堆】力扣2530. 执行 K 次操作后的最大分数
给你一个下标从 0 开始的整数数组 nums 和一个整数 k 。你的 起始分数 为 0 。 在一步 操作 中: 选出一个满足 0 < i < nums.length 的下标 i , 将你的 分数 增加 nums[i] ,并且 将 nums[i] 替换为 ceil(nums[i] / 3) 。 返回在 恰好…...
基于生成式对抗网络(GAN)的前沿研究与应用
引言 人工智能(AI)领域在过去几年中经历了快速的发展,尤其是深度学习的兴起带来了许多变革。其中,生成式对抗网络(Generative Adversarial Network, GAN)因其强大的生成能力成为了研究热点。自2014年Ian G…...
stm32 移植RTL8201F(正点原子例程为例)
最近在工作中需要使用RTL8201F,在网上找了很多帖子,没有找到合适的,自己翻资料移植了一个。 模板工程使用的是正点原子的f407探索版的例程,原子使用的是LAN8720,需要把他的驱动修改成为我们自己用的RTL8201F。 1.将PHY_TYPE改成我…...
QT-TCP-server
为了实现高性能的TCP通讯,以下是一个基于Qt的示例,展示如何利用多个线程、非阻塞I/O、数据分块和自定义协议进行优化。该示例以TCP服务器和客户端的形式展示,能够承受高负载并实现快速数据传输。 高性能TCP Server示例 #include <QTcpSe…...
第 24 章 网络请求与远程资源
第 24 章 网络请求与远程资源 24.1 XMLHttpRequest 对象 所有现代浏览器都通过 XMLHttpRequest 构造函数原生支持 XHR 对象: let xhr new XMLHttpRequest()24.1.1 使用 XHR 使用 XHR 对象首先要调用 open()方法,这个方法接收 3 个参数:请…...
k8s dashboard离线部署步骤
确定k8s版本,以1.23为例。 部署metrics-server服务,最好用v0.5.2。 用v0.6.0,可能会报以下错误: nodekubemaster:~/Desktop/metric$ kubectl top nodes Error from server (ServiceUnavailable): the server is currently unabl…...