Surya - OCR、布局分析、阅读顺序、语言检测

news2024/12/22 20:35:03

文章目录

    • 一、关于 Surya
      • 功能特性
      • 例子
      • 训练
      • 托管API
      • 商业用途
    • 二、安装
      • 手动安装
    • 三、用法
      • 1、交互应用
      • 2、OCR(文本识别)
        • 来自 python
        • 编译
      • 3、文本行检测
        • From python
      • 4、布局分析
        • From python
      • 5、阅读顺序
        • From python
    • 四、限制
    • 五、故障排除
    • 六、基准测试
      • OCR
      • Google Cloud Vision
      • 文本行检测
      • 布局分析
      • 阅读顺序
    • 七、运行自己的基准测试
    • 感谢


一、关于 Surya

Surya 实现 OCR、布局分析、阅读顺序、90多种语言的行检测。

  • github : https://github.com/VikParuchuri/surya
  • discord : https://discord.gg//KuZwXNGnfH
  • 公司主页:https://www.datalab.to/

功能特性

  • 90多种语言的OCR,与云服务相比具有良好的基准测试
  • 任何语言的行级文本检测
  • 布局分析(表格、图像、标题等检测)
  • 读取顺序检测

它适用于一系列文档(有关详细信息,请参阅 用法 和 基准测试)。

检测OCR
在这里插入图片描述在这里插入图片描述
布局阅读顺序
3在这里插入图片描述

Surya 是以印度教太阳神命名的,他有普遍的视野。


例子

NameDetectionOCRLayoutOrder
JapaneseImageImageImageImage
ChineseImageImageImageImage
HindiImageImageImageImage
ArabicImageImageImageImage
Chinese + HindiImageImageImageImage
PresentationImageImageImageImage
Scientific PaperImageImageImageImage
Scanned DocumentImageImageImageImage
New York TimesImageImageImageImage
Scanned FormImageImageImageImage
Textbook

训练

文本检测在4x A6000s上训练了3天。它使用一组不同的图像作为训练数据。它是使用改进的高效架构从头开始训练的,用于语义分割。

文本识别在4x A6000s上训练了2周。它使用修改后的甜甜圈模型(GQA、MoE层、UTF-16解码、层配置更改)进行训练。


托管API

有一个适用于所有 Surya模型的托管API在这里:

  • 适用于PDF、图像、word文档和幻灯片
  • 一致的速度,没有延迟峰值
  • 高可靠性和正常运行时间

商业用途

我希望surya尽可能广泛地访问,同时仍然资助我的开发/培训费用。研究和个人使用总是可以的,但是商业使用有一些限制。

模型的权重是cc-by-nc-sa-4.0许可的,但是对于最近12个月总收入低于500万美元和终身风险投资/天使基金筹集不到500万美元的任何组织,我将放弃这一点。如果你想取消GPL许可要求(双许可)和/或在商业上使用超过收入限制的权重,请查看此处的选项。


二、安装

您需要python 3.9+和PyTorch。如果您不使用Mac或GPU机器,您可能需要先安装torch的CPU版本。有关更多详细信息,请参阅此处。

安装:

pip install surya-ocr

模型权重将在您第一次运行surya时自动下载。


手动安装

如果你想开发surya,可以手动安装:

  • git clone https://github.com/VikParuchuri/surya.git
  • cd surya
  • poetry install-安装main和dev依赖项
  • poetry shell-激活虚拟环境

三、用法

  • 检查surya/settings.py中的设置。您可以使用环境变量覆盖任何设置。
  • 您的 torch device 将被自动检测到,但您可以覆盖它。例如,TORCH_DEVICE=cuda

1、交互应用

我包含了一个 streamlit 应用程序,可让您在图像或PDF文件上以交互方式尝试Surya。运行它:

pip install streamlit
surya_gui

2、OCR(文本识别)

此命令将写出一个包含检测到的文本和bbox的json文件:

surya_ocr DATA_PATH --images --langs hi,en

  • DATA_PATH可以是图像、pdf或图像/pdf文件夹
  • --langs指定用于OCR的语言。您可以用逗号分隔多种语言(我不建议使用超过4种)。使用此处的语言名称或双字母ISO代码。Surya支持surya/languages.py中的90多种语言。
  • --lang_file–如果您想对不同的PDF/图像使用不同的语言,您可以在此处指定语言。格式为JSON,键为文件名,值为列表,如{"file1.pdf": ["en", "hi"], "file2.pdf": ["en"]}.
  • --images将保存页面和检测到的文本行的图像(可选)
  • --results_dir–指定保存结果的目录而不是默认目录
  • --max指定如果您不想处理所有内容,要处理的最大页数
  • --start_page–指定开始处理的页码

这个results.json文件将包含一个json字典,其中的键是没有扩展名的输入文件名。每个值将是一个字典列表,每页输入文档一个。每页字典包含:

  • text_lines - 每行检测到的文本和边界框

    • text - 行中的文本
    • confidence - 模型对检测到的文本的置信度(0-1)
    • polygon - (x1, y1), (x2, y2), (x3, y3), (x4, y4) 格式的文本行的多边形。这些点从左上角按顺时针顺序排列。
    • bbox - (x1, y1, x2, y2) 格式文本行的轴对齐矩形。 (x1, y1) 是左上角,(x2, y2) 是右下角。
  • languages - 为页面指定的语言

  • page - 文件中的页码

  • image_bbox - (x1, y1, x2, y2) 格式的图像的bbox。 (x1, y1) 是左上角,(x2, y2) 是右下角。所有行bbox都将包含在此bbox中。


性能提示

使用GPU时,正确设置RECOGNITION_BATCH_SIZEenv var会有很大的不同。
每个批处理项目将使用50MB的VRAM,因此可以使用非常高的批处理大小。
默认的批处理大小是256,将使用大约12.8GB的VRAM。
根据您的CPU内核数量,它也可能会有所帮助——默认的CPU批处理大小是32


来自 python
from PIL import Image
from surya.ocr import run_ocr
from surya.model.detection import segformer
from surya.model.recognition.model import load_model
from surya.model.recognition.processor import load_processor

image = Image.open(IMAGE_PATH)
langs = ["en"] # Replace with your languages
det_processor, det_model = segformer.load_processor(), segformer.load_model()
rec_model, rec_processor = load_model(), load_processor()

predictions = run_ocr([image], [langs], det_model, det_processor, rec_model, rec_processor)

编译

可以编译OCR模型以获得约15%的总推理时间加速。不过,编译时第一次运行会很慢。首先设置RECOGNITION_STATIC_CACHE=true,然后:

import torch

rec_model.decoder.model.decoder = torch.compile(rec_model.decoder.model.decoder)

3、文本行检测

此命令将写出一个包含检测到的bbox的json文件。

surya_detect DATA_PATH --images

  • DATA_PATH可以是图像、pdf或图像/pdf文件夹
  • --images将保存页面和检测到的文本行的图像(可选)
  • --max指定如果您不想处理所有内容,要处理的最大页数
  • --results_dir–指定保存结果的目录而不是默认目录

这个results.json文件将包含一个json字典,其中的键是没有扩展名的输入文件名。每个值将是一个字典列表,每页输入文档一个。每页字典包含:

  • bboxes - 检测到文本的边界框
    • bbox-(x1, y1,x2,y2)格式文本行的轴对齐矩形。(x1,y1)是左上角,(x2,y2)是右下角。
    • polygon-(x1, y1),(x2,y2),(x3,y3),(x4,y4)格式的文本行的多边形。这些点从左上角按顺时针顺序排列。
    • confidence-模型对检测到的文本的置信度(0-1)
  • vertical_lines - 文档中检测到垂直线
    • bbox-轴对齐的线坐标。
  • page-文件中的页码
  • image_bbox-(x1, y1,x2,y2)格式的图像的bbox。(x1,y1)是左上角,(x2,y2)是右下角。所有行bbox都将包含在此bbox中。

性能提示

使用GPU时,正确设置DETECTOR_BATCH_SIZEenv var会有很大的不同。每个批处理项目将使用440MB的VRAM,因此可以使用非常高的批处理大小。默认的批处理大小是36,将使用大约16GB的VRAM。根据您的CPU内核数量,它也可能会有所帮助——默认的CPU批处理大小是6


From python
from PIL import Image
from surya.detection import batch_text_detection
from surya.model.detection.model import load_model, load_processor

image = Image.open(IMAGE_PATH)
model, processor = load_model(), load_processor()

# predictions is a list of dicts, one per image
predictions = batch_text_detection([image], model, processor)

4、布局分析

此命令将写出具有检测到的布局的json文件。

surya_layout DATA_PATH --images

  • DATA_PATH可以是图像、pdf或图像/pdf文件夹
  • --images将保存页面和检测到的文本行的图像(可选)
  • --max指定如果您不想处理所有内容,要处理的最大页数
  • --results_dir–指定保存结果的目录而不是默认目录

这个results.json文件将包含一个json字典,其中的键是没有扩展名的输入文件名。每个值将是一个字典列表,每页输入文档一个。每页字典包含:

  • bboxes - 检测到文本的边界框
    • bbox -(x1, y1,x2,y2)格式文本行的轴对齐矩形。(x1,y1)是左上角,(x2,y2)是右下角。
    • polygon-(x1, y1),(x2,y2),(x3,y3),(x4,y4)格式的文本行的多边形。这些点从左上角按顺时针顺序排列。
    • confidence-模型对检测到的文本(0-1)的置信度。这目前不是很可靠。
    • label-bbox的标签。CaptionFootnoteFormulaList-itemPage-footerPage-headerPictureFigureSection-headerTableTextTitle之一。
  • page-文件中的页码
  • image_bbox-(x1, y1,x2,y2)格式的图像的bbox。(x1,y1)是左上角,(x2,y2)是右下角。所有行bbox都将包含在此bbox中。

性能提示

使用GPU时,正确设置DETECTOR_BATCH_SIZEenv var会有很大的不同。每个批处理项目将使用400MB的VRAM,因此可以使用非常高的批处理大小。默认的批处理大小是36,将使用大约16GB的VRAM。根据您的CPU内核数量,它也可能会有所帮助——默认的CPU批处理大小是6


From python
from PIL import Image
from surya.detection import batch_text_detection
from surya.layout import batch_layout_detection
from surya.model.detection.model import load_model, load_processor
from surya.settings import settings

image = Image.open(IMAGE_PATH)
model = load_model(checkpoint=settings.LAYOUT_MODEL_CHECKPOINT)
processor = load_processor(checkpoint=settings.LAYOUT_MODEL_CHECKPOINT)
det_model = load_model()
det_processor = load_processor()

# layout_predictions is a list of dicts, one per image
line_predictions = batch_text_detection([image], det_model, det_processor)
layout_predictions = batch_layout_detection([image], model, processor, line_predictions)

5、阅读顺序

此命令将写出具有检测到的读取顺序和布局的json文件。

surya_order DATA_PATH --images

  • DATA_PATH可以是图像、pdf或图像/pdf文件夹
  • --images将保存页面和检测到的文本行的图像(可选)
  • --max指定如果您不想处理所有内容,要处理的最大页数
  • --results_dir–指定保存结果的目录而不是默认目录

这个results.json文件将包含一个json字典,其中的键是没有扩展名的输入文件名。每个值将是一个字典列表,每页输入文档一个。每页字典包含:

  • bboxes - 检测到文本的边界框
  • bbox-(x1, y1,x2,y2)格式文本行的轴对齐矩形。(x1,y1)是左上角,(x2,y2)是右下角。
  • position-bbox读取顺序中的位置,从0开始。
  • label-bbox的标签。有关潜在标签的列表,请参阅留档的布局部分。
  • page-文件中的页码
  • image_bbox-(x1, y1,x2,y2)格式的图像的bbox。(x1,y1)是左上角,(x2,y2)是右下角。所有行bbox都将包含在此bbox中。

性能提示

使用GPU时,正确设置ORDER_BATCH_SIZEenv var会有很大的不同。每个批处理项目将使用360MB的VRAM,因此可以使用非常高的批处理大小。默认的批处理大小是32,将使用大约11GB的VRAM。根据您的CPU内核数量,它也可能会有所帮助——默认的CPU批处理大小是4


From python
from PIL import Image
from surya.ordering import batch_ordering
from surya.model.ordering.processor import load_processor
from surya.model.ordering.model import load_model

image = Image.open(IMAGE_PATH)
# bboxes should be a list of lists with layout bboxes for the image in [x1,y1,x2,y2] format
# You can get this from the layout model, see above for usage
bboxes = [bbox1, bbox2, ...]

model = load_model()
processor = load_processor()

# order_predictions will be a list of dicts, one per image
order_predictions = batch_ordering([image], [bboxes], model, processor)

四、限制

  • 这是专门用于文档OCR的。它可能不适用于照片或其他图像。
  • 它适用于印刷文本,而不是手写(尽管它可能适用于某些手写)。
  • 文本检测模型已经训练自己忽略广告。
  • 您可以在surya/languages.py中找到对OCR的语言支持。文本检测、布局分析和阅读顺序适用于任何语言。

五、故障排除

如果OCR无法正常工作:

  • 试着提高图像的分辨率,这样文本就会更大。如果分辨率已经很高,试着把它降低到不超过2048px的宽度。
  • 预处理图像(二值化、去偏斜等)可以帮助处理非常旧/模糊的图像。
  • 如果你没有得到好的结果,你可以调整DETECTOR_BLANK_THRESHOLDDETECTOR_TEXT_THRESHOLDDETECTOR_BLANK_THRESHOLD控制行之间的空格——低于这个数字的任何预测都将被视为空格。DETECTOR_TEXT_THRESHOLD控制文本的连接方式——高于这个数字的任何数字都被认为是文本。DETECTOR_TEXT_THRESHOLD应该始终高于DETECTOR_BLANK_THRESHOLD,并且两者都应该在0-1范围内。从检测器的调试输出中查看热图可以告诉你如何调整这些(如果你看到看起来像盒子的微弱东西,降低阈值,如果你看到bbox连接在一起,提高阈值)。

六、基准测试


OCR

在这里插入图片描述

模型每页时间平均相似度(⬆)
surya.620.97
tesseract.450.88

全语言成绩

Tesseract是基于CPU的,surya是CPU或GPU。我试图匹配所使用的资源,所以我为surya使用了1xA6000(48GB VRAM),为Tesseract使用了28个CPU内核(Lambda Labs/DigitalOcean价格相同)。


Google Cloud Vision

我将OCR与Google Cloud vision进行了基准测试,因为它的语言覆盖范围与Surya相似。

在这里插入图片描述

全语言成绩


方法论

我基于一组真实世界和合成pdf测量了归一化句子相似度(0-1,越高越好)。我从常见的爬网中采样PDF,然后过滤掉OCR不好的PDF。我找不到某些语言的PDF,所以我也为这些语言生成了简单的合成PDF。

我使用来自tesseract和surya的PDF的参考线bbox来评估OCR质量。

对于谷歌云,我将谷歌云的输出与地面实况对齐。我不得不跳过RTL语言,因为它们对齐不好。


文本行检测

在这里插入图片描述

型号时间(s)每页时间(s)精度召回
surya50.20990.1961330.8210610.956556
tesseract74.45460.2908380.6314980.997694

Tesseract是基于CPU的,surya是CPU或GPU。我在具有A10 GPU和32核CPU的系统上运行了基准测试。这是资源使用情况:

  • tesseract-32个CPU内核,或8个工作人员,每个使用4个内核
  • Surya-36批量大小,用于16GB VRAM使用

方法论

Surya预测行级bbox,而tesseract和其他公司预测单词级或字符级。很难找到100%正确的带有行级注释的数据集。合并bbox可能会很嘈杂,所以我选择不使用IoU作为评估指标。

相反,我使用了覆盖率,它计算:

  • 精度-预测的bbox覆盖地面实况bbox的程度
  • 回想一下-地面实况bbox覆盖预测bbox的程度

首先计算每个bbox的覆盖率,然后为双重覆盖率添加一个小惩罚,因为我们希望检测具有不重叠的bbox。覆盖率为0.5或更高的任何内容都被视为匹配。

然后我们计算整个数据集的准召。


布局分析

在这里插入图片描述


布局类型精度召回
图像0.970.96
表格0.990.99
文本0.90.97
标题0.940.88

每张图像的时间-GPU(A10)上为0.4秒。


方法论

我在Publaynet上对布局分析进行了基准测试,这不在训练数据中。我必须将Publaynet标签与surya布局标签对齐。然后我能够找到每种布局类型的覆盖率:

  • 精度-预测的bbox覆盖地面实况bbox的程度
  • 回想一下-地面实况bbox覆盖预测bbox的程度

阅读顺序

在A6000图形处理器上,平均准确度为75%,每张图像为0.14秒。请参阅笔记方法论——这个基准并不是准确的完美衡量标准,作为理智检查更有用。


方法论

我从这里对布局数据集进行了布局分析基准测试,这不在训练数据中。不幸的是,这个数据集相当嘈杂,并非所有标签都是正确的。很难找到一个带有阅读顺序和布局信息注释的数据集。我想避免使用云服务来处理实况。

准确度的计算方法是:确定每对布局框的顺序是否正确,然后取正确的百分比。


七、运行自己的基准测试

您可以在您的机器上对surya的性能进行基准测试。

  • 按照上面的手动安装说明进行操作。
  • poetry install --group dev-安装开发依赖项

文本行检测

这将评估tesseract和surya对来自doclaynet的随机采样图像集的文本行检测。

python benchmark/detection.py --max 256

  • --max控制为基准测试处理多少图像
  • --debug将渲染图像和检测到的bbox
  • --pdf_path–将允许您指定pdf来进行基准测试,而不是默认数据
  • --results_dir–将允许您指定要保存结果的目录,而不是默认目录

文本识别

这将在通用爬网的多语言pdf上评估surya和可选的tesseract(使用缺失语言的合成数据)。

python benchmark/recognition.py --tesseract

  • --max控制为基准测试处理多少图像
  • --debug 2将呈现带有检测到的文本的图像
  • --results_dir–将允许您指定要保存结果的目录,而不是默认目录
  • --tesseract将使用tesseract运行基准测试。您必须运行sudo apt-get install tesseract-ocr-all来安装所有tesseract数据,并将TESSDATA_PREFIX设置为tesseract数据文件夹的路径。
  • 设置RECOGNITION_BATCH_SIZE=864以使用与基准测试相同的批量大小。

布局分析

这将在Publaynet数据集上评估surya。

python benchmark/layout.py

  • --max控制为基准测试处理多少图像
  • --debug将呈现带有检测到的文本的图像
  • --results_dir–将允许您指定要保存结果的目录,而不是默认目录

阅读顺序

python benchmark/ordering.py

  • --max控制为基准测试处理多少图像
  • --debug将呈现带有检测到的文本的图像
  • --results_dir–将允许您指定要保存结果的目录,而不是默认目录

感谢

如果没有惊人的开源AI工作,这项工作是不可能的:

  • 来自NVIDIASegform
  • MIT 的 EfficientViT
  • 来自 Ross Wightman 的 Timm
  • 来自Naver 的Donut
  • huggingface 的 transformers
  • CRAFT,一个很棒的场景文本检测模型

感谢所有使开源AI成为可能的人。


2024-08-02(五)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1970788.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

react引入高德地图并初始化卫星地图

react引入高德地图并初始化卫星地图 1.安装依赖 yarn add react-amap amap/amap-jsapi-loader2.初始化地图 import AMapLoader from "amap/amap-jsapi-loader"; import { FC, useEffect, useRef, useState } from "react";const HomeRight () > {con…

高速总线概述(二):高速总线技术要点(比特流高速数据传输,编、解码、CRC校验及扰码结构,链路同步)

前言: 读 嵌入式高速串行总线技术 基于FPGA实现与应用_张峰 记 高速串行总线技术技术点 高速串行总线技术点 (1)采用串行比特流实现高速数据传输,数据以帧格式进行传输,以帧头(SOF)、…

串口调试可能遇见的常见问题和排查方法

串口UART作为嵌入式应用和通讯领域中最常用的接口之一,接口协议虽然简单,但在实际应 用中不同设备之间的通讯也会存在各种小问题,下面对使用中各种常见的问题做下总结和梳 理,可作为调试参考。 01串口通信常见问题 串口通信乱码…

嵌入式多线程

作业一&#xff1a; 使用两个线程完成两个文件的拷贝&#xff0c;分支线程1拷贝前一半&#xff0c;分支线程2拷贝后一半&#xff0c;主线程回收两个分支线程的资源 #include <myhead.h> #define BUF_SIZE 10 //定义缓冲区大小typedef struct{char* sfile;char* tfile…

springboot系列教程(三十一):springboot整合Nacos组件,环境搭建和入门案例详解

一、Nacos基础简介 1、概念简介 Nacos 是构建以“服务”为中心的现代应用架构&#xff0c;如微服务范式、云原生范式等服务基础设施。聚焦于发现、配置和管理微服务。Nacos提供一组简单易用的特性集&#xff0c;帮助开发者快速实现动态服务发现、服务配置、服务元数据及流量管…

MySQL高阶(九)——窗口函数

文章目录 MySQL高阶(九)——窗口函数特点语法结构窗口函数分类准备数据 序号函数聚合函数分布函数CUME_DIST&#xff08;累计分布值&#xff09;PERCENT_RANK &#xff08;等级值&#xff09; 前后函数LAG函数LEAD函数 头尾函数FIRST_VALUE和LAST_VALUENTH_VALUE(expr, n&#…

贪心(区间)

905. 区间选点 - AcWing题库 #include<bits/stdc.h> using namespace std; const int N1e510;struct Range {int l,r;bool operator <(const Range&m)const{return r<m.r;} }range[N];int main() {int n;cin>>n;for(int i0;i<n;i){cin>>range[…

汉诺塔(C++)

解决汉诺塔问题是程序递归思想最基本的体现&#xff0c;问题以及规则如下&#xff1a; 汉诺塔&#xff08;Tower of Hanoi&#xff09;&#xff0c;又称河内塔&#xff0c;是一个源于印度古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子&#xff0c;在一根柱子上…

测评自养号与机刷:电商平台推广的深度解析与区别探讨

在电商平台上&#xff0c;产品和店铺的评价至关重要&#xff0c;许多买家在购买前都会仔细查看评论&#xff0c;比较同类产品的口碑&#xff0c;以便做出明智的选择。今天&#xff0c;我们将探讨测评自养号与机刷之间的区别。 测评一直是各大电商平台常用的推广手段&#xff0c…

心算项目攻略:最大化卡牌得分技巧

目录 题目描述代码逻辑原理总结解析&#xff1a;代码逻辑&#xff1a;示例场景&#xff1a;总结&#xff1a; 题目 选自力扣 心算项目的挑战比赛中&#xff0c;要求选手从 N 张卡牌中选出 cnt 张卡牌&#xff0c;若这 cnt 张卡牌数字总和为偶数&#xff0c;则选手成绩「有效」…

AI绘画工具推荐:Stable Diffusion的新境界

前言 在AI绘画的世界里&#xff0c;Stable Diffusion无疑是一颗璀璨的明星。然而&#xff0c;对于许多用户来说&#xff0c;切换不同的UI界面和管理众多模型是一项挑战。今天&#xff0c;我们为大家介绍一款革命性的工具——Stability Matrix&#xff0c;它将彻底改变你对Stabl…

JavaScript前端面试题——fetch

什么是fetch&#xff1f; fetch&#xff1a;fetch是浏览器内置的api&#xff0c;用于发送网络请求 ajax&axios&fetch的关系 ajax&#xff1a;ajax 是一种基于原生 JavaScript 的异步请求技术。它使用 XMLHttpRequest 对象来发送请求和接收响应。 axios&#xff1a;…

MP4标准格式深度解析

&#x1f60e; 作者介绍&#xff1a;欢迎来到我的主页&#x1f448;&#xff0c;我是程序员行者孙&#xff0c;一个热爱分享技术的制能工人。计算机本硕&#xff0c;人工制能研究生。公众号&#xff1a;AI Sun&#xff08;领取大厂面经等资料&#xff09;&#xff0c;欢迎加我的…

校园选课助手【1】-项目整体架构从此开始

项目背景 随着高校招生规模的不断扩大&#xff0c;学生选课需求日益增长。为提高选课效率&#xff0c;降低学生选课压力&#xff0c;本项目旨在开发一款校园选课助手软件。 项目目标:开发一款具有以下特点的校园选课助手软件&#xff1a; 易用性&#xff1a;界面简洁&#xff…

微信-公众号/订阅号推送消息(js版本)

1.登录或注册微信测试号 &#xff08;测试号的名称由官方自动生成&#xff0c;不能更改&#xff09; 微信测试号入口&#xff1a;微信公众平台 ​ 2.登录进去后会看到自己的appId和appsecret &#xff08;这两个参数都需填入代码中&#xff09; ​ 3.检查是否安装nodeJs…

《刚刚问世》系列初窥篇-Java+Playwright自动化测试-3-启动浏览器(详细教程)

软件测试微信群&#xff1a;https://bbs.csdn.net/topics/618423372 有兴趣的可以扫码加入 1.简介 通过前边两篇文章跟随宏哥学习想必到这里已经将环境搭建好了&#xff0c;今天就在Java项目搭建环境中简单地实践一下&#xff1a; 启动两大浏览器。按市场份额来说&#xff0c…

[极客大挑战 2019]BuyFlag1

这个题目比较常规&#xff0c;算是我遇到的简单题&#xff0c;也是这段时间第一个独立解出的&#xff0c;有点小开心。 首先打开靶机&#xff0c;一个平平无奇的纳新页面&#xff0c;很容易找到 /pay.php 看一下pay.php 这里说了几个条件&#xff1a;需要100000000&#xff0c…

【iOS】copystrong原理+深浅拷贝+完全拷贝

Copy&Strong原理 Copy探究 在回答copy的各种问题前&#xff0c;我们需要先了解我们为什么要使用copy。 拷贝的目的 &#xff1a; 产生一个副本对象&#xff0c;跟源对象互不影响 修改了源对象&#xff0c;不会影响副本对象修改了副本对象&#xff0c;不会影响源对象 iOS…

量化方法怎么选?如何评估量化后的大模型LLM?

文章内容总结自&#xff1a;Evaluating Quantized Large Language Models&#xff08;https://arxiv.org/abs/2402.18158&#xff09; 如果想深入了解量化的基本概念和如何用代码实现请参考&#xff1a; Michael&#xff1a;用python代码深入浅出量化概念 &#xff08;https…

YOLOv10改进 | 注意力篇 | YOLOv10引入SpatialGroupEnhance注意力机制,并构建C2f_SGE

1. SGE介绍 1.1 摘要:卷积神经网络(CNN)通过收集语义子特征的层次和不同部分来生成复杂对象的特征表示。这些子特征通常可以以分组的形式分布在每层的特征向量中[43,32],代表各种语义实体。然而,这些子特征的激活通常在空间上受到相似模式和噪声背景的影响,从而导致错误…