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

OCR之论文笔记TrOCR

文章目录

  • TrOCR: Transformer-based Optical Character Recognition with Pre-trained Models
    • 一. 简介
    • 二. TrOCR
      • 2.1. Encoder
      • 2.2 Decoder
      • 2.3 Model Initialiaztion
      • 2.4 Task Pipeline
      • 2.5 Pre-training
      • 2.6 Fine-tuning
      • 2.7 Data Augmentation
    • 三. 实验
      • 3.1 Data
      • 3.2 Settings
      • 3.2 Results
        • 3.2.1 Architecture Comparison
        • 3.2.2 Ablation Experiment
        • 3.2.3 SROIE Task 2
        • 3.2.4 IAM Handwriting Database
        • 3.2.5 Scene Text Recognition
        • 3.2.6 Inference Speed


TrOCR: Transformer-based Optical Character Recognition with Pre-trained Models

一. 简介

发表:CVPR2022
机构:微软
代码:https://github.com/microsoft/unilm/tree/master/trocr

摘要:
Text recognition is a long standing-research problem for document digitalization. Existing approaches are usually built based on CNN for image understanding and RNN for char-level text generation. In addition, another language model is usually needed to improve the overall accuracy as a post- processing step. In this paper, we propose an end-to-end text recognition approach with pre-trained image Transformer and text Transformer models, namely TrOCR, which leverages the Transformer architecture for both image understanding and wordpiece-level text generation. The TrOCR model is simple but effective, and can be pre-trained with large-scale synthetic data and fine-tuned with human-labeled datasets. Experiments show that the TrOCR model outperforms the current state-of-the-art models on the printed, handwritten and scene text recognition tasks. The TrOCR models and code are publicly available at https://aka.ms/trocr.

Motivation:
现有的OCR方法往往基于 CNN + RNN的范式来进行建模,前者进行图像理解,后者用于字符级别的文本生成。除此之外,往往额外用一个语言模型来后处理,提高识别的准确率。本文,提出一种基于transformer的文本识别框架,将文本和图像都用transformer来建模,并且可以先在大规模人造数据上预训练,,再在人工标注的数据集上finetune。实验表明,TrOCR可以在印刷,手写和场景文本识别任务中,取得SOTA的结果。

二. TrOCR

在这里插入图片描述
Encoder: ViT-style models
Decoder: BERT-style models

2.1. Encoder

Encoder的输入是固定尺寸(论文中是384 * 384),并且将其分解为 N 个patches,N=HW/P2N = HW / P ^2N=HW/P2,每个patch的尺寸是P∗PP * PPP,论文中N = 24 * 24,即每个patch的尺寸是16∗1616 * 161616。然后将patch展平,过全连接,映射到D维。D就是transformer里面所有层的hidden size,默认是768。

与ViT和DeIT一样,保留了【CLS】这个特殊的token,用于图像分类任务。可以视作图像的全局特征。文中,还提到保留一种特殊的token,叫做distilation token,能够允许模型向教师模型学习。这两个特殊的token以及patches,会根据绝对位置被分配一个可以学习的位置编码(position embedding)。

Unlike the features extracted by the CNN-like network, the Transformer models have no image-specific inductive biases and process the image as a sequence of patches, which makes the model easier to pay different attention to either the whole image or the independent patches.

如何理解上面所说的归纳偏差

CNN和Transformer是两种用于图像处理和计算机视觉任务的神经网络架构,它们在图像特定归纳偏差方面存在一些不同。

对于CNN来说,它的图像特定归纳偏差主要是基于卷积和池化操作。CNN中的卷积层通过局部感受野的方式捕捉图像的空间特征,并通过权值共享来减少参数数量。池化层则通过对特征图进行下采样来降低维度,从而提高网络的鲁棒性和计算效率。此外,CNN中的网络结构通常是层叠的,且特征图的通道数会随着网络的深度增加而增加,这些设计都是为了更好地适应图像数据的特征和结构。

相比之下,Transformer的图像特定归纳偏差主要是基于注意力机制。在Transformer中,注意力机制被用于在不同位置之间建立关联,从而能够处理不同尺度和分辨率的图像。通过自注意力机制,Transformer可以在不丢失空间信息的情况下,将图像编码成全局的特征向量。此外,Transformer的网络结构是基于自注意力层和全连接层的堆叠,这种结构可以处理变长的序列数据,因此在文本和语言等任务中也被广泛应用。

2.2 Decoder

decoder和encoder一样,也是标准的stack of identical layers的结构,有一点不同之处在于,decoder在multi-head self attetion和feed forward network之间插入了“ encoder-decoder attention",用于对encoder的输出分配不同的注意力。

在这个encoder-decoder attention中,K和V都来自encoder的输出,Q来自decoder的输入。除此之外,decoder在self attention中利用了attention masking,来防止它在训练过程中看到更多的信息,即,decoder的输出相较于decoder的输入员,往往会right shift一个位置,所以attention mask需要保证第i个位置的输出只能pay attention到之前的输出,即<i的这些位置。

decoder的hidden states然后会映射到V这个维度,其中V是词表的大小,然后用softmax来归一化,得到该hidden state输出各个字符的概率,并且用beam search来得到最终的输出。

2.3 Model Initialiaztion

  • encoder initialiaztion
    DeiTBeiT来初始化encoder。DeiT用ImageNet来训练,原始论文作者尝试不同的超参数和数据增强的方式,来使得数据更有效,除此之外,它们从一个非常强的图像分类器中提取知识到distilled token。而BeiT,借鉴MLM预训练任务,提出Mask Image Model任务来预训练image transformer。具体而言,每张图像,可以被视作两种view,image patches和visual tokens。用discreate VAE来将原始的图像转化为visual tokens,并且随机mask掉图像的patches,然后让模型进行复原原始的visual tokens。BeiT的图像transformer结果和DeiT一致,只不过是少了distilled token。
  • decoder initialiaztion
    RoBERTa以及MiniLM来初始化decoder,前者是在bert的基础上,探索了许多关键超参数和训练数据规模的影响,并且去除了next sentence prediction任务,而且动态改变了MLM里面的masking pattern。MiniLM是大预训练模型的压缩版,然而保留了99%的模型能力,除了在MLM中用到soft target probs和蒸馏学习之外,来引入一个教师助教,来辅助蒸馏。
    但是直接加载上面两个模型到decoder有一些问题,因为encoder-decoder attention layers在原始模型中是没有的,因此采用的策略是,decoder相应的参数用RoBERTa和MiniLM来初始化,缺失的参数,随机初始化。

2.4 Task Pipeline

在trocr中,文本识别任务被定义为这样的pipeline,对于输入的文本行图像,模型提出视觉特征,并且基于图像和之前产生的上下文来预测wordpiece的tokens。gt往往用【EOS】token来标识一个句子的结束。在训练的时候往往会在开头添加一个【BOS】的token来标识生成的开始,并达到shift one placed的效果。这个shifted的gt sequence会被输入decoder,它对应位置的输出被与gt sequence的交叉墒来监督。在inference的时候,decoder从【BOS】开始迭代预测,并且将产生的输出作为下一步的输入。

2.5 Pre-training

基于文本识别任务来进行预训练,分为两个阶段

  • 第一阶段:构造了上亿(hundreds of million)的印刷体文本行图像,并且用trocr在这上面预训练。
  • 第二阶段:构造了两个相对小一点的印刷体和手写体数据集,规模是百万级别,并且在场景文本识别任务上,用了现有的广泛使用的synthetic数据集。

疑问?
是分别预训练图像encoder以及文本decoder吗?

2.6 Fine-tuning

除了场景文本识别之外,预训练的trocr的模型,在其他下游文本识别任务中finetune。trocr的输出是基于Byte Pair Encoding (BPE)以及SentencePiece,而且不依赖于其他任何与任务无关的词表。

Byte Pair Encoding (BPE)是一种基于统计的无损数据压缩算法,它也被广泛用于自然语言处理领域中的文本编码和词汇表示。
BPE的基本思想是将文本编码成一个固定大小的词汇表。它通过迭代地合并词汇表中出现频率最高的相邻字符或字符对,来不断增加词汇表的大小,直到达到预设的大小或满足停止条件为止。在每次迭代中,BPE会计算所有相邻字符或字符对的出现频率,然后将出现频率最高的字符或字符对合并成一个新的字符,并将其添加到词汇表中。这个过程会不断重复,直到词汇表达到预设大小或者满足停止条件。
通过这种方式,BPE可以生成一个小而紧凑的词汇表,并将文本编码为由词汇表中的字符或字符对组成的符号串。在自然语言处理中,BPE常用于生成单词分段(subword segmentation),即将单词分成更小的子单元,以便于语言模型处理生僻单词、未登录词和低频词等情况。在神经机器翻译和文本生成等任务中,使用BPE编码的文本能够更好地适应不同语言的语言特点,从而提高模型的性能。

Byte Pair Encoding(BPE)和SentencePiece都是常用于文本编码和词汇表示的算法,它们的主要区别在于以下几个方面:

算法原理:BPE是一种基于贪心算法的数据压缩算法,它通过反复合并出现频率最高的字符或字符对来构建词汇表。而SentencePiece则是基于Unigram语言模型的,它使用马尔可夫模型来学习词汇表中每个子词的概率,然后根据概率来进行分割。
应用场景:BPE主要应用于分词和子词划分等任务,而SentencePiece除了分词和子词划分外,还可以用于语音识别、OCR等领域。SentencePiece还支持多种分词算法,包括BPE、Unigram语言模型、WordPiece等。
实现方式:BPE和SentencePiece都有多种不同的实现方式,包括基于C++、Python、Java等语言的实现。其中,SentencePiece在Google的开源机器翻译框架TensorFlow和PyTorch中都有支持。
总体而言,BPE和SentencePiece都是用于文本编码和词汇表示的常用算法,具体使用哪种算法取决于具体的任务需求和数据特点。

2.7 Data Augmentation

六种数据增强策略被用到预训练和finetune的数据当中,随机旋转 (-10,10)度,高斯模糊,图像膨胀,图像腐蚀,下采样,下划线。对于每一个样本而言,各个增强方式以一种相同的概率被随机选择。对于场景文本识别数据集,用了之前文献的RandAug方法,其中的数据增强方式包括:inversion,扭曲,模糊,噪声,distoration,旋转等。

三. 实验

3.1 Data

预训练数据集
将publily available的pdf转化为图像,并获得印刷体文本行的小图,总计684M
通过TRDG开源库,来将5,427种手写体字体来构造手写数据集,其中语料是随机抓去自wiki,所以第二阶段的手写体预训练数据集的最终规模是17.9M,并且包括IIIT-HWS数据集。除此之外,收集了53K的真实票据数据,并用商用的OCR识别软件进行识别。也用TRDG构造了1M印刷体票据数据,对于场景文本识别而言,第二阶段预训练用到的数据集是MJSynth (MJ)和SynthText (ST),总计16M文本图像。
字体:
https://fonts.google.com/?category=Handwriting
https:// www.1001fonts.com/handwritten- fonts.html
渲染工程:
https://github.com/Belval/TextRecognitionDataGenerator

Benchmarks
票据识别:SROIE (Scanned Receipts OCR and In- formation Extraction) dataset (Task 2) focuses on text recognition in receipt images. There are 626 receipt images and 361 receipt images in the training and test sets of SROIE.
手写识别:The IAM Handwriting Database is composed of hand- written English text, which is the most popular dataset for handwritten text recognition. We use the Aachen’s partition of the dataset3: 6,161 lines from 747 forms in the train set, 966 lines from 115 forms in the validation set and 2,915 lines from 336 forms in the test set.
场景文本识别:IIIT5K-3000, SVT-647, IC13-857, IC13-1015 , IC15-1811, IC15-2077, SVTP-645 , and CT80-288。

3.2 Settings

TrOCR是基于Fairseq工具来写的,对于model初始化这一块,DeiT来自timm库,而BEiT和MiniLM来自微软的UniLM库,RoBERTa来自fairseq库。32张V100(32GBs)预训练,8张V100来finetune
batch_size: 2048
learning rate: 5e-5
384 * 384输入,16 * 16 patches。
The DeiTSMALL has 12 layers with 384 hidden sizes and 6 heads. Both the DeiTBASE and the BEiTBASE have 12 layers with 768 hidden sizes and 12 heads while the BEiTLARGE has 24 layers with 1024 hidden sizes and 16 heads. We use 6 layers, 256 hidden sizes and 8 attention heads for the small decoders, 512 hidden sizes for the base decoders and 12 layers, 1,024 hidden sizes and 16 heads for the large decoders.
beam size : 10
CRNN作为baseline对比:https://github.com/meijieru/crnn.pytorch

评价指标:
word-level pre- cision, recall and f1 score.
Character Error Rate (CER)
Word Accuracy

3.2 Results

3.2.1 Architecture Comparison

encoder decoder对比

选择不同的encoder和decoder的组合,可以发现BeiT在encoder中表现最好,其次DeiT,再之后是resnet50
decoder的话,是roberta large表现最好。
TrOCRSMALL (total parameters=62M) consists of the encoder of DeiT SMALL and the decoder of MiniLM,
TrOCRBASE (total parameters=334M) consists of the en- coder of BEiT BASE and the decoder of RoBERTa LARGE
TrOCRLARGE (total parameters=558M) consists of the en- coder of BEiT LARGE and the decoder of RoBERTa LARGE.

3.2.2 Ablation Experiment

ablation 对比

疑问?

from scratch 这么低是什么原因?

3.2.3 SROIE Task 2

https://rrc.cvc.uab.es/?ch=13&com=evaluation&task=2

score 2对比 与cnn + rnn的一些方法进行对比

3.2.4 IAM Handwriting Database

在这里插入图片描述

3.2.5 Scene Text Recognition

在这里插入图片描述

3.2.6 Inference Speed

在这里插入图片描述

相关文章:

android apk没有源码如何修改程序

如果您拥有一个APK文件但没有源代码&#xff0c;您可以尝试以下几种方法来进行修改&#xff1a; 反编译APK&#xff1a;使用工具如apktool对APK文件进行反编译&#xff0c;这将为您提供源代码和资源文件。 动态调试&#xff1a;使用调试工具连接设备或模拟器&#xff0c;并动态…...

项目冲刺day3

这个作业属于哪个课程 软工4班这个作业要求在哪里 作业要求1.会议1. 照片 时间冲突,采用微信聊天方式2. 昨日已完成: 完成登录、注册功能,部分完成用户中心功能3.今天计划完成的工作 用户中心功能、订单管理功能4.工作中遇到的困难 沟通和信息共享并不总是顺利。这导致了一些…...

中国地面气候资料日值数据获取方式

数据简介 环境气象数据服务平台提供了全国大约2100个点位&#xff0c;2000年至2023年的逐日数据。包括气温、气压、湿度、风、降水等要素。 数据基于ECMWF reanalysis-era5-land、reanalysis-era5-single-levels 以及中国2100站点地面气候资料日值观测数据&#xff0c;使用机器…...

winform植物大战僵尸

winform植物大战僵尸 植物大战僵尸源码 半成品 需要的拿去学习 登陆注册选择关卡 向日葵 豌豆射手 双枪豌豆射手 项目获取&#xff1a; 项目获取&#xff1a;typora: typora/img (gitee.com) 备用项目获取链接1&#xff1a;yifeiyixiang/kamo: 源码下载 (github.com) 备用…...

分享一个使用python调用websocket获取实时行情数据的方法

websocket对接实时行情,期货,外汇,股票对接 这个站点可以获取:外汇、国际期货、国内期货、贵金属、能源、虚拟货币、股指期货、美股、台股、港股、印度股、A股、ETF等。以下是Python的连接demo,可以参考下。同时也支持其他后端语言的连接,PHP、Java等。最新价,最高价,最…...

【C++初阶】第十站:vector 中通用函数的模拟实现

目录 vector中的三个重要迭代器 默认成员函数 构造函数(无参构造) 构造函数(函数模板) 构造函数(带有默认参数) size_t int 拷贝构造函数 赋值重载 析构函数 迭代器相关函数 begin和end 容量和大小相关函数 size capacity resize 修改容器内容相关函数 reser…...

OCR之论文笔记TrOCR

文章目录TrOCR: Transformer-based Optical Character Recognition with Pre-trained Models一. 简介二. TrOCR2.1. Encoder2.2 Decoder2.3 Model Initialiaztion2.4 Task Pipeline2.5 Pre-training2.6 Fine-tuning2.7 Data Augmentation三. 实验3.1 Data3.2 Settings3.2 Resul…...

静态路由+DHCP实验(四路由器八PC)

一.200.1.1.0/24子网划分 1.划分八个子网 2.选用前5个&#xff0c;第五个子网再划分4个子网作为骨干 二.规划路由 三.配置&#xff08;下一跳&#xff09; 1.先依次实现四个路由器之间全网可通 2.为路由器配置地址池&#xff0c;使用全局模式获取dhcp&#xff0c;指定网关…...

文件包含漏洞原理与实践

「作者主页」&#xff1a;士别三日wyx 「作者简介」&#xff1a;CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者 文件包含漏洞一、什么是文件包含漏洞&#xff1f;二、文件包含函数三、两种文件包含1、本地文件包含1.1 使用教程演示2、远程文件包含1.1 使…...

利用摄影测量进行地形建模的介绍

一、前言 从一个地方到另一个地方的地球表面由连续和突然的海拔变化组成&#xff0c;个人和社会都必须应对这些变化。 水从高山和丘陵向下流&#xff0c;从溪流流入河流&#xff0c;形成三角洲&#xff0c;最终汇入大海。 三维 (3D) 地面信息的获取和表示一直是与行星表面相关的…...

【Nginx】Nginx 常用的基础配置

文章目录一、基础配置二、隐藏 Nginx 版本信息三、禁止ip直接访问80端口四、启动 web 服务 (vue 项目为例)五、PC端和移动端使用不同的项目文件映射六、一个web服务&#xff0c;配置多个项目 (location 匹配路由区别)七、配置负载均衡八、SSL 配置 HTTPS一、基础配置 user …...

基于OpenCV的图片和视频人脸识别

目录 &#x1f969;前言 &#x1f356;环境使用 &#x1f356;模块使用 &#x1f356;模块介绍 &#x1f356;模块安装问题: &#x1f969;人脸检测 &#x1f356;Haar 级联的概念 &#x1f356;获取 Haar 级联数据 &#x1f357; 1.下载所需版本 &#x1f357; 2.安…...

比肩ChatGPT的国产AI:文心一言——有话说

&#x1f517; 运行环境&#xff1a;chatGPT&#xff0c;文心一言 &#x1f6a9; 撰写作者&#xff1a;左手の明天 &#x1f947; 精选专栏&#xff1a;《python》 &#x1f525; 推荐专栏&#xff1a;《算法研究》 #### 防伪水印——左手の明天 #### &#x1f497; 大家好&am…...

剑指offer JZ77 按之字形顺序打印二叉树

Java JZ77 按之字形顺序打印二叉树 文章目录Java JZ77 按之字形顺序打印二叉树一、题目描述二、双栈法三、队列reverse()法使用双栈法和队列reverse()法解决剑指offer JZ77 按之字形顺序打印二叉树的问题。 一、题目描述 给定一个二叉树&#xff0c;返回该二叉树的之字形层序遍…...

【Azure 架构师学习笔记】-Azure Data Factory (5)-Managed VNet

本文属于【Azure 架构师学习笔记】系列。 本文属于【Azure Data Factory】系列。 接上文【Azure 架构师学习笔记】-Azure Data Factory (4)-触发器详解-事件触发器 前言 PaaS服务默认都经过公网传输&#xff0c; 这对很多企业而言并不安全&#xff0c;那么就需要对其进行安全改…...

聚类算法层次聚类

###cluster.py #导入相应的包 import scipy import scipy.cluster.hierarchy as sch from scipy.cluster.vq import vq,kmeans,whiten import numpy as np import matplotlib.pylab as plt #生成待聚类的数据点,这里生成了20个点,每个点4维: pointsscipy.randn(20,4) #加一…...

大数据写入到Oracle数据库(批量插入数据)

开发中经常遇到批量插入数据的需求&#xff0c;为了提高开发效率大多会使用ORM架构&#xff0c;个别之处 才会手写SQL&#xff0c;我们使用C#.NET Core5.0开发&#xff0c;所以优先选择了微软的EF。 但是EF原生没有批量操作功能&#xff0c;需要自己扩展或使用第三方的扩展&am…...

【LeetCode】剑指 Offer 39. 数组中出现次数超过一半的数字 p205 -- Java Version

题目链接&#xff1a;https://leetcode.cn/problems/shu-zu-zhong-chu-xian-ci-shu-chao-guo-yi-ban-de-shu-zi-lcof/ 1. 题目介绍&#xff08;39. 数组中出现次数超过一半的数字&#xff09; 数组中有一个数字出现的次数超过数组长度的一半&#xff0c;请找出这个数字。 你可…...

es-head插件插入查询以及条件查询(五)

es-head插件插入查询以及条件查询 1.es-head插件页面介绍 页面详细介绍 2.es-head查询语句 2.1.查询索引中的全部数据 curl命令交互&#xff0c;采用GET请求 语法格式&#xff1a; curl -XGET es地址:9200/索引名/_search?pretty [rootelaticsearch ~]# curl -XGET 192…...

数据挖掘(作业汇总)

目录 环境配置 实验1 数据 作业2 环境配置 实验开始前先配置环境 以实验室2023安装的版本为例&#xff1a; 1、安装anaconda&#xff1a;&#xff08;anaconda自带Python,安装了anaconda就不用再安装Python了&#xff09; 下载并安装 Anaconda3-2022.10-Windows-x86_64.ex…...

基于微信小程序的图书馆选座系统源码

开发环境及工具&#xff1a; 大等于jdk1.8&#xff0c;大于mysql5.5&#xff0c;idea&#xff08;eclipse&#xff09;&#xff0c;微信开发者工具 技术说明&#xff1a; springboot mybatis 小程序 代码注释齐全&#xff0c;没有多余代码&#xff0c;适合学习&#xff08;…...

特斯拉4D成像毫米波雷达与木牛科技早期开源的产品几乎一模一样?

近日&#xff0c;在中欧智能网联汽车协会秘书长林示的组织下&#xff0c;中益基金投资总监王子文考察了全球毫米波雷达领跑者—木牛科技。 考察过程中&#xff0c;木牛科技COO王卫向两位详细介绍了木牛科技具备怎样的全球毫米波雷达领跑者的科技硬实力&#xff0c;以及木牛科技…...

[golang gin框架] 10.Gin 商城项目介绍

一.商城项目介绍 1.详细功能介绍图 2.数据库 ER 图 需要用到的数据表举例 二.MVC架构搭建以及执行流程分析 1.关于 MVC 模式的简单介绍 Gin 不是一个 MVC 的框架&#xff0c;所有的代码都可以写在 main.go 中。当我们的项目比较大的时候&#xff0c; 所有代码写在一个文件里面…...

python@调用系统命令行@os.system@subprocess@标准输入输出@sys.stdin@sys.stdout@input@print

文章目录python调用系统命令行os.system标准输入输出sys.stdinsys.stdoutinputprint概要os.systemdemoswindows命令解释器ComSpecsubprocessrecommended&#x1f388;基本用法demos标准输入输出sys.stdininput()sys.stdin.inputinput()交互模式小结sys.stdoutsys.stdout.wirte(…...

15-哈希表

哈希表&#xff08;Hash table&#xff09;&#xff0c;也称散列表&#xff0c;是一个能够将数值映射而成地址从而进行直接访问的数据结构&#xff0c;通过哈希表我们可以快速、迅捷地访问数据。 哈希表原理 假设我们拥有一个数x&#xff08;也称关键值&#xff0c;key&#…...

【超详细文件操作(三)】C语言

作者&#xff1a;日出等日落 专栏&#xff1a;C语言 只有流过血的手指&#xff0c;才能弹出世间的绝唱。 ——泰戈尔 目录 1.文件的随机读写 1.1 fseek函数 1.1.1 下面使用fseek函数 1.2 ftell函数 1.3 rewind函数 …...

【数据分析之道-基础知识(四)】字典

文章目录专栏导读1、字典简介2、字典创建3、字典访问4、字典修改5、字典添加6、字典删除7、字典内置函数专栏导读 ✍ 作者简介&#xff1a;i阿极&#xff0c;CSDN Python领域新星创作者&#xff0c;专注于分享python领域知识。 ✍ 本文录入于《数据分析之道》&#xff0c;本专栏…...

【计组】RAM的深入理解

一、存储机理 RAM的实现逻辑有种&#xff0c;分别是触发器和电容。 SRAM&#xff08;Static&#xff09;DRAM&#xff08;Dynamic&#xff09;存储方式触发器电容破坏性读出否&#xff08;触发器具有稳态&#xff0c;能够锁住0或1两种状态&#xff09;是&#xff08;电容需要…...

51单片机学习笔记_13 ADC

ADC 使得调节开发板上的电位器时&#xff0c;数码管上能够显示 AD 模块 采集电位器的电压值且随之变化。 开发板上有三个应用&#xff1a;光敏电阻&#xff0c;热敏电阻&#xff0c;电位器。 一般 AD 转换有多个输入&#xff0c;提高使用效率。 ADC 通过地址锁存与译码判断采…...

JVM 常量池

Class文件常量池 每个Class文件都会有一个单独的常量池,我们称为Class文件常量池,我们可以用javap命令反汇编Class文件,可以查看java编译器为我们生成的字节码。 CLass文件常量池存下内容&#xff1a; 字面量&#xff1a; 文本字符串(代码中用双引号包裹的字符串部分的值)被…...

Leetcode.1024 视频拼接

题目链接 Leetcode.1024 视频拼接 Rating &#xff1a; 1746 题目描述 你将会获得一系列视频片段&#xff0c;这些片段来自于一项持续时长为 time秒的体育赛事。这些片段可能有所重叠&#xff0c;也可能长度不一。 使用数组 clips描述所有的视频片段&#xff0c;其中 clips[i…...

彩色滤镜阵列CFA与Bayer滤镜

彩色滤镜阵列&#xff08;CFA&#xff09; 在彩色光电摄影中&#xff0c;可以通过分光&#xff0c;使用三个传感器分别捕获红、绿、蓝三个通道的颜色分量。但为了降低成本&#xff0c;绝大部分成像系统中采用单芯片 CMOS、CCD 传感器结合彩色滤镜阵列(Color Fiter Array&#…...

Unity和GAN实现AI绘画五等分的新娘、国家队02(附源码)

UnityGAN实现AI绘画五等分的新娘、国家队02附源码写在前面源码演示视频部分界面展示使用教程敬请期待其他写在后面写在前面 博主喜欢二次元&#xff0c;想着在读研期间做点对自己有意义的事&#xff0c;因此选择了动漫人物生成方向(呜呜呜&#xff0c;太感谢导师理解和支持了)…...

SpringBoot实现自己的日志服务

日志服务是作为软件开发架构的必备服务之一&#xff0c;一直都是我们所关注&#xff0c;所考虑的服务关键点&#xff0c;一个优秀的日志服务可以为项目的维护提供有力的支持&#xff0c;提高了系统的可靠性。 前言 如何设计一个优秀而又可靠的日志服务&#xff0c;是一直以来都…...

基于ssm流浪动物救助及领养管理系统(文档)024

大家好✌&#xff01;我是CZ淡陌。一名专注以理论为基础实战为主的技术博主&#xff0c;将再这里为大家分享优质的实战项目&#xff0c;本人在Java毕业设计领域有多年的经验&#xff0c;陆续会更新更多优质的Java实战项目&#xff0c;希望你能有所收获&#xff0c;少走一些弯路…...

maven安装及配置(IDEA版)简洁

1.下载Maven&#xff1a;您可以从Maven官方网站&#xff08;https://maven.apache.org/download.cgi&#xff09;下载适合您操作系统的Maven版本&#xff0c;并解压缩到您想要安装的位置。 2.配置环境变量&#xff1a;将Maven的bin目录添加到PATH环境变量中&#xff0c;这样…...

最全Linux应用开发解析(持续更新)

一、文件IO 1.1 文件描述符 在 Linux 操作系统中的一切都被抽象成了文件&#xff0c;那么一个打开的文件是如何与应用程序进行对应呢&#xff1f; 解决方案是使用文件描述符&#xff08;file descriptor&#xff0c;简称fd&#xff09;&#xff0c;当在进程中打开一个现有文…...

SpringBoot学习笔记下

文章目录1 接口架构风格 —RESTful1.1 REST1.2 在页面中或者ajax中&#xff0c;支持put&#xff0c;delete请求2 Spring Boot 集成 Redis2.1 redis起步依赖2.2 对比 StringRedisTemplate 和 RedisTemplate3 SpringBoot集成Dubbo3.1 看 SpringBoot继承Dubbo的文档3.2 公共项目7.…...

小米12/12S/13Pro手机MIUI14系统小黄鸟(HttpCanary)CA证书无法注入问题

很多用户获取ROOT是为了抓包&#xff0c;这里一般常常依赖一款名叫HttpCanary的软件&#xff0c;因软件 图标是一只小鸟&#xff0c;我们经常叫他小黄鸟。从日常使用上来看&#xff0c;黄鸟确实有抓包获取数据等 功能&#xff0c;也在多个手机上实践成功&#xff0c;网上相关教…...

SpringCloud学习笔记(四)Docker

一、Docker如何解决依赖的兼容问题 将应用的libs&#xff08;函数库&#xff09;、Deps&#xff08;依赖&#xff09;、配置与应用一起打包&#xff0c;形成可移植镜像Docker应用运行在容器中&#xff0c;使用沙箱机制&#xff0c;相互隔离 二、Dokcer如何解决开发、测试、生…...

SAP 批量修改 工艺路线 和 BOM

1、在运维的过程中经常会遇到用户需要批量更改组件&#xff0c;或者是批量更改数量&#xff0c;还是组件里面的一些标识&#xff0c;当处理这些批量数据处理的业务时&#xff0c;BOM的批量更改一个想到的就是CS20&#xff0c;但是CS20当BOM需要替换的时候就不是很适用。新增的组…...

基于OpenTelemetry实现可观测性-Part 4 Collector

译注&#xff1a;这是一个系列&#xff0c;共分成6部分&#xff0c;这是第4部分。翻译自&#xff1a;https://trstringer.com/otel-part4-collector/在上一篇博文中&#xff0c;我们讨论了如何使用 SDK 和追踪器提供者从进程获取遥测数据。存在很多不同类型的导出器&#xff0c…...

STM32学习(十二)

软件定时原理 使用纯软件&#xff08;CPU死等&#xff09;的方式实现定时&#xff08;延时&#xff09;功能。 不精准&#xff1a;函数调用压栈进栈需要耗费额外的时间&#xff1b;流水线使得程序执行时间不确定。CPU死等。 定时器定时原理 使用精准的时基&#xff0c;通过…...

Python毕业设计推荐

今天给大家推荐4个基于python的毕业设计/课程设计 1 网上商城系统 这是一个基于pythonvue开发的商城网站&#xff0c;平台采用B/S结构&#xff0c;后端采用主流的Python语言进行开发&#xff0c;前端采用主流的Vue.js进行开发。 整个平台包括前台和后台两个部分。 前台功能…...

组装式交付-云巧 知多少

组装式交付-云巧 知多少组装式交付背景云巧什么是云巧呢&#xff1f;云巧的优势丰富的组件&#xff0c;提升代码复用全面的集成方式&#xff0c;支持模块化组装云原生标准&#xff0c;预集成阿里云产品云巧的构成云巧组件云巧资产市场云巧生态云巧工坊总结组装式交付背景 一直…...

「解析」牛客网-华为机考企业真题 41-60

又是一年春招时&#xff0c;有幸收到华为自动驾驶算法岗&#xff0c;之前刷题不多&#xff0c;在此汇总下牛客网的真题&#xff0c;主要采用Python编写&#xff0c;个人觉得语言只是实现工具而已&#xff0c;并不是很关键&#xff0c;Python简洁易懂&#xff0c;更加适合算法工…...

RPA机器人在信息化管理、报告生成实现自动化成为生态环境局新宠

随着人们对环境和自然资源的保护意识逐渐增强&#xff0c;我国在环保领域的投入力度也越来越大。然而&#xff0c;环境保护任务的繁重与复杂&#xff0c;也意味着环保执法机关需要更加高效、精准的手段来完成任务。这时&#xff0c;“机器人流程自动化”&#xff08;简称RPA&am…...

关于线程池你了解些什么?

前言学习线程池的思维导图线程池是什么?它有什么用?虽然线程比进程更轻量级,但是每个进程所占的资源空间是有限,如果我们频繁创建和销毁线程也会消耗很多CPU资源,那么我们该如何解决这个问题呢?官方解释:线程池是一种多线程处理形式,其处理过程可以将多个任务添加到阻塞队列…...

基于MATLAB编程的萤火虫改进帝国竞争算法求解多目标优化,FA-ICA目标寻优

目录 背影 帝国竞争 基本定义 优点 萤火虫原理 改进思路 基于萤火虫改进帝国竞争多目标求解 代码 结果分析 展望 背影 多目标多参数优化是常遇到的优化问题,有很多传统算法可以求解,比如fiminmax,fmincon等,但是都容易陷入局部最优,本文用帝国竞争优化萤火虫算法进行多目…...

低代码开发:助力企业高效实现数字转型的一大利器

随着互联网、移动互联网、物联网等技术的迅速普及和应用&#xff0c;数字经济时代的到来&#xff0c;人们的生产、消费和生活方式都发生了巨大的变化&#xff0c;而传统企业也面临着巨大的挑战和机遇。 在数字经济时代&#xff0c;数据成为一种重要的生产要素。数据成为一种重要…...

centos7安装mysql并添加密码

网上找的教程有的是不能用&#xff0c;有的是改密码有问题&#xff0c;下面这个教程亲测可用 #安装wget,wget是Linux中的一个下载文件的工具 yum -y install wget #使用wget下载文件 wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm rpm -ivh mysql-com…...

大数据未来发展怎么样?

就目前情况来看&#xff0c;大数据行业前景不错薪资待遇好&#xff0c;也有越来越多的人选择大数据行业&#xff0c;各大名企对于大数据人才需求不断上涨。 大数据从业领域很宽广&#xff0c;不管是科技领域还是食品产业&#xff0c;零售业等都是需要大数据人才进行大数据的处…...

图书管理系统(考试样品)

一、执行下面的sql CREATE DATABASE bms CHARACTER SET utf8mb4;USE bms;DROP TABLE IF EXISTS tb_book;CREATE TABLE tb_book (id INT NOT NULL AUTO_INCREMENT,name VARCHAR(20) NOT NULL,desc TEXT ,type_id INT DEFAULT NULL,PRIMARY KEY (id) ) ; INSERT INTO tb_book VA…...

树与二叉树(图示超详解哦)

这里写目录标题引言树与二叉树树的概念及结构树的表示二叉树特殊的二叉树二叉树的性质二叉树的表示顺序结构链式结构总结引言 在前面的一段时间里&#xff0c;我们学习了顺序表、链表、栈、队列的知识。其实这些顺序结构都是线性的&#xff0c;它们的逻辑结构都是一条线穿起来…...

【vue3】数据绑定,动态渲染class与style

数据绑定的一个常见需求场景是操纵元素的 CSS class 列表和内联样式&#xff08;style&#xff09;。因为 class 和 style 都是 attribute&#xff0c;我们可以和其他 attribute 一样使用 v-bind 将它们和动态的字符串绑定。但是&#xff0c;在处理比较复杂的绑定时&#xff0c…...

axios使用

参考地址&#xff1a;https://github.com/axios/axios html CDN <script src"https://cdn.jsdelivr.net/npm/axios1.1.2/dist/axios.min.js"></script>或者 <script src"https://unpkg.com/axios1.1.2/dist/axios.min.js"></scrip…...

【CV】计算机视觉中的特征追踪与背景处理

计算机视觉领域中的重要任务之一是视频特征追踪&#xff0c;它可以用于目标跟踪、运动分析、行为识别等应用。然而&#xff0c;在实际应用中&#xff0c;经常会遇到需要仅处理视频中特定特征物体而忽略背景的情况&#xff0c;这就需要进行背景处理。本文将介绍如何使用Python和…...

这3种深拷贝实现,你都知道吗?

目录&#xff1a; 1、JSON.parse 2、structuredClone 3、cloneDeep...

番外篇 | 利用PyQt5+YOLOv5来搭建目标检测系统(附可视化界面+功能介绍+源代码)

前言:Hello大家好,我是小哥谈。PyQt5是一个Python绑定的Qt库,是用于创建图形用户界面(GUI)和其他应用程序组件的工具包。PyQt5提供了许多GUI元素,如按钮、文本框、标签等,也提供了许多Qt的功能,如网络、数据库、XML等。通过PyQt5可以在Python中使用Qt的丰富功能和强大的工…...

Data Distribution Plots: (1) bubblecloud

目录 示例1&#xff1a;使用表数据创建气泡云示例2&#xff1a;用向量数据创建气泡云示例3&#xff1a;用气泡云可视化分类数据 示例1&#xff1a;使用表数据创建气泡云 %创建一个包含三个变量的表。 %例如&#xff0c;创建一个表&#xff0c;显示美国10个州中贴错标签的万圣节…...

数据结构与算法之经典排序算法

一、简单排序 在我们的程序中&#xff0c;排序是非常常见的一种需求&#xff0c;提供一些数据元素&#xff0c;把这些数据元素按照一定的规则进行排序。比如查询一些订单按照订单的日期进行排序&#xff0c;再比如查询一些商品&#xff0c;按照商品的价格进行排序等等。所以&a…...

关于杰理AC695X AD按键设置个数以及添加控制

1、adkey的配置可以设置对应的IO口 2、以下是对应的电阻值&#xff0c;可以将不需要用到的电阻值进行注释&#xff0c;将需要用到的电阻进行使用。...

AS-VJ900实时视频拼接系统产品介绍:两画面视频拼接方法和操作

目录 一、实时视频拼接系统介绍 &#xff08;一&#xff09;实时视频拼接的定义 &#xff08;二&#xff09;无缝拼接 &#xff08;三&#xff09;AS-VJ900功能介绍 1、功能 2、拼接界面介绍 二、拼接前的准备 &#xff08;一&#xff09;摄像机选择 &#xff08;二&a…...

问题:IDEA中打包插件,打出来的jar包一直是最原始的代码

问题详情&#xff1a; 我在配置maven的分离式打包时&#xff0c;打出来的jar包运行不含有我新增的代码&#xff08;一直都是旧的&#xff09; 打包配置&#xff1a; pom.xml: <!-- Maven Jar 插件配置 --><plugin><groupId>org.apache.maven.plugins</gr…...

G2 - 人脸图像生成(DCGAN)

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 目录 理论知识DCGAN原理 模型结构逻辑结构物理结构 模型实现前期准备1. 导入第三方库2. 修改随机种子(相同的随机种子&#xff0c;第i次随机的结果是固定的)3.…...

AOSP开发

Android 开发者 | Android Developers (google.cn) android开源代码&#xff1a; Android 开源项目 | Android Open Source Project (google.cn)...

求一个B站屏蔽竖屏视频的脚本

求一个B站屏蔽竖屏视频的脚本 现在B站竖屏竖屏越来越多了&#xff0c;手机还好点给我一个按钮&#xff0c;选择不喜欢&#xff0c;但是我一般都用网页版看视屏&#xff0c;网页版不给我选择不喜欢的按钮&#xff0c;目测大概1/4到1/3的视频都是竖屏视频。 目前网页版唯一的进…...

MemoryModule - exp - test

文章目录 MemoryModule - exp - test概述笔记测试环境GetModuleFileName不能正常执行GetModuleFileNameWntdll_LdrGetDllFullName猜测原因用LoadLibrary载入的DLL中功能是正常的 gLog可以正常使用内存载入DLL无法支持的功能的折中方法COM操作正常调用方代码接口代码 接口入参测…...