打造自己的RAG解析大模型:Windows部署OCR服务(可商业应用)

在上一篇文章中,我们介绍了如何在 Windows 环境中配置 OCR 相关模型,并完成了模型验证。本篇文章将基于之前的内容,进一步讲解如何将文本检测、方向分类和文本识别模型进行串联,最终搭建一个基础的 OCR 应用服务。通过这些模型的串联与部署,我们将能够创建一个可商用的 OCR 系统,从而满足更复杂的文档解析需求,并为未来自定义训练模型的服务部署奠定坚实的基础。

模型串联推理过程介绍

PaddleOCR 提供了一种方便的检测与识别模型串联工具,能够高效实现两阶段的文本识别系统。该系统通过将检测模型与识别模型相结合,实现从图像到文本的精准转换。以下是整个串联过程的详细描述:

1. 文本检测阶段

首先,输入的图像会经过文本检测模型。这一模型负责定位图像中可能包含文本的区域,输出相应的文本边界框。PaddleOCR 提供了多种检测模型,如 DB、EAST 等,能够根据不同场景需求进行选择。这一步的关键在于准确检测文本区域,为后续的识别提供基础。

2. 检测框矫正

为了提高文本识别的精度,检测框会进行几何矫正。此步骤通过调整检测出的文本区域,使文本框尽量贴合文字内容,避免由于倾斜、变形等因素造成的识别误差。通过这一步,可以极大地提升对不同角度、排列文本的识别效果。

3. 文本识别

经过矫正后的文本框会输入到文本识别模型中进行文字内容的识别。PaddleOCR 提供了多种识别模型(如 CRNN、RARE 等),这些模型通过深度学习方法,将输入的图像区域转换为实际的字符序列,生成识别文本。

4. 得分过滤

在文本识别过程中,系统还会为每个检测和识别结果打分。通过设定一定的置信度阈值,系统可以过滤掉低置信度的检测结果,确保最终输出的文本更加准确。这一步通过调整过滤标准,可以根据不同任务场景的需求来平衡识别的精度和召回率。

文本检测、文本识别串联模型推理验证:

1.打开Anaconda Prompt终端:在Windows桌面左下角Windows Start Menu -> Anaconda3 -> Anaconda Prompt启动控制台,进入E:\paddle_ocr\PaddleOCR源码路径下,执行以下命令激活PaddleOCR的Python环境。

conda activate paddle_env

2. 执行串联模型推理命令

python ./tools\infer\predict_system.py --image_dir="./doc\imgs\00018069.jpg" --det_model_dir="./inference\ch_PP-OCRv4_det_infer" --cls_model_dir="./inference\ch_ppocr_mobile_v2.0_cls_infer" --rec_model_dir="./inference\ch_PP-OCRv4_rec_infer" --use_angle_cls=true --use_gpu=False

**推理结果:**形成可视化结果图片和Json文件。

串联模型推理可视化结果如下图:

Json结果部分展示:

[`  `{`    `"transcription": "代号",`    `"points": [`      `[`        `19,`        `1`      `],`      `[`        `54,`        `1`      `],`      `[`        `54,`        `21`      `],`      `[`        `19,`        `21`      `]`    `]`  `}``]

在 PaddleOCR 的推理过程中,模型的配置对识别精度和效率至关重要。以下是关于模型推理的关键参数配置说明,特别是 use_angle_cls 参数,它决定了是否启用方向分类模型。

主要参数说明:

  1. image_dir: 用于指定输入图像的路径,可以是单张图像或一组图像的文件夹路径。

  2. det_model_dir: 用于指定检测模型的路径,该模型负责识别图像中的文本区域。

  3. rec_model_dir: 用于指定识别模型的路径,该模型将检测到的文本区域转换为字符序列。

  4. cls_model_dir: 用于指定方向分类模型的路径,该模型用于矫正文本的方向。

  5. use_angle_cls: 控制是否启用方向分类模型。

关于 use_angle_cls 的详细说明:

use_angle_cls 参数用于控制是否启用方向分类模型。方向分类模型的主要功能是判断和校正图像中检测到的文本方向,尤其是在图像中出现旋转、倾斜或倒置文本的情况下。通过这个模型,系统能够先对文本方向进行分类和矫正,再进行文字识别,以提高识别的准确性。

何时需要启用方向分类模型?

在以下情况下,启用方向分类模型(即将 use_angle_cls 设置为 True)是必要的:

  • 文本方向不一致:当图像中包含多个方向的文本,如有水平、垂直、旋转甚至倒置的文字时,方向分类模型能够自动判断文本方向并进行调整。

  • 文档扫描场景:在扫描文件或票据时,文本区域可能存在不同角度的排布,尤其是在手持拍摄的图像中,方向分类模型可以显著提高识别的精度。

  • 票据和票证处理:有时在处理发票或表单时,文本区域可能是倒置的或倾斜的。方向分类模型可以确保即使文本方向不正确,模型仍然能准确识别文字。

何时不需要启用方向分类模型?

如果输入图像中的文本方向已经是固定的(如整齐的水平文本),且图像预处理阶段已经保证了文本的正确方向,那么可以关闭方向分类模型(即将 use_angle_cls 设置为 False),以节省推理时间和计算资源。

基于PaddleHub Serving的服务部署

PaddleOCR提供2种服务部署方式:

  • 基于PaddleHub Serving的部署:代码路径为./deploy/hubserving

  • 基于PaddleServing的部署:代码路径为./deploy/pdserving

PaddleHub Serving 是 PaddleOCR 提供的一种部署服务方式,用于快速构建和发布 OCR 服务。在 PaddleHub Serving 部署中,您可以通过其模块化、易用的 API 结构,快速将 PaddleOCR 模型部署为在线服务。

hubserving服务部署目录下包括文本检测、文本方向分类,文本识别、文本检测+文本方向分类+文本识别3阶段串联,版面分析、表格识别和PP-Structure七种服务包,请根据需求选择相应的服务包进行安装和启动。目录结构如下:

deploy/hubserving/`  `└─  ocr_cls     文本方向分类模块服务包`  `└─  ocr_det     文本检测模块服务包`  `└─  ocr_rec     文本识别模块服务包`  `└─  ocr_system  文本检测+文本方向分类+文本识别串联服务包`  `└─  structure_layout  版面分析服务包`  `└─  structure_table  表格识别服务包`  `└─  structure_system  PP-Structure服务包`  `└─  kie_ser  关键信息抽取-SER服务包`  `└─  kie_ser_re  关键信息抽取-SER+RE服务包

每个服务包下包含3个文件。以2阶段串联ocr_system服务包为例,目录如下:

deploy/hubserving/ocr_system/`  `└─  __init__.py    空文件,必选`  `└─  config.json    配置文件,可选,使用配置启动服务时作为参数传入`  `└─  module.py      主模块,必选,包含服务的完整逻辑`  `└─  params.py      参数文件,必选,包含模型路径、前后处理参数等参数

安装PaddleHub

进入E:\paddle_ocr\PaddleOCR源码路径下,在praddle_env的Python的环境下,执行以下命令安装PaddleHub最新版本。

pip3 install paddlehub --upgrade -i https://mirrors.aliyun.com/pypi/simple/

1. 下载推理模型

安装服务模块前,需要准备推理模型并放到正确路径。默认模型路径为:

模型路径
检测模型./inference/ch_PP-OCRv4_det_infer/
识别模型./inference/ch_PP-OCRv4_rec_infer/
方向分类器./inference/ch_ppocr_mobile_v2.0_cls_infer/

模型路径可在params.py中查看和修改,可以替换成自己训练转换好的模型。

2. 安装服务模块

PaddleOCR提供5种服务模块,以2阶段串联ocr_system服务包为例,在Linux环境(Windows环境请将/替换为\)下,安装模块命令如下表:

服务模块命令
检测+识别串联hub install deploy/hubserving/ocr_system
# 执行模型安装命令``hub install deploy\hubserving\ocr_system

3. 启动服务

启动2阶段串联ocr_system服务,端口默认8866,并发任务数,默认为2*cpu_count-1。

# 执行启动命令后,见到如下界面说明服务已启动``hub serving start -m ocr_system

4. 请求服务

进入E:\paddle_ocr\PaddleOCR源码路径下,在praddle_env的Python的环境下,执行以下命令,验证已启动服务是否可用。

python ./tools\test_hubserving.py --server_url=http://127.0.0.1:8866/predict/ocr_system --image_dir=./doc\imgs/00018069.jpg --visualize=false

执行结果如下:

[{'confidence': 0.999848484992981, 'text': '代号', 'text_region': [[19, 1], [54, 1], [54, 21], [19, 21]]}, {'confidence': 0.9992080926895142, 'tex``t': '项目', 'text_region': [[124, 2], [159, 2], [159, 21], [124, 21]]}, {'confidence': 0.9987339973449707, 'text': '结果', 'text_region': [[232, 1], [268, 1], [268, 21], [232, 21]]``}, {'confidence': 0.9997586607933044, 'text': '参考值', 'text_region': [[296, 1], [347, 1], [347, 20], [296, 20]]}, {'confidence': 0.9999487996101379, 'text': '单位', 'text_region'``: [[376, 1], [411, 1], [411, 21], [376, 21]]}, {'confidence': 0.9965283274650574, 'text': 'ALT', 'text_region': [[24, 23], [51, 23], [51, 39], [24, 39]]}, {'confidence': 0.99857491``25480652, 'text': '谷丙转氨酶', 'text_region': [[100, 20], [185, 20], [185, 41], [100, 41]]}, {'confidence': 0.9979120492935181, 'text': '25.6', 'text_region': [[233, 23], [269, 23``], [269, 39], [233, 39]]}, {'confidence': 0.9666016697883606, 'text': '0--40', 'text_region': [[299, 22], [345, 22], [345, 40], [299, 40]]}, {'confidence': 0.8711754679679871, 'tex``t': 'U/L', 'text_region': [[378, 21], [408, 21], [408, 40], [378, 40]]}, {'confidence': 0.9945583343505859, 'text': 'TBIL', 'text_region': [[19, 41], [55, 41], [55, 59], [19, 59]]}``, {'confidence': 0.9986435770988464, 'text': '总胆红素', 'text_region': [[110, 39], [177, 39], [177, 60], [110, 60]]}, {'confidence': 0.9964954853057861, 'text': '11.2', 'text_regi``on': [[232, 41], [270, 41], [270, 59], [232, 59]]}, {'confidence': 0.949794352054596, 'text': '<20', 'text_region': [[308, 41], [338, 41], [338, 59], [308, 59]]}, {'confidence': 0.``9597413539886475, 'text': 'umol/L', 'text_region': [[367, 41], [420, 41], [420, 59], [367, 59]]}, {'confidence': 0.9963439702987671, 'text': 'DBIL', 'text_region': [[19, 59], [55,` `59], [55, 78], [19, 78]]}, {'confidence': 0.9987521171569824, 'text': '直接胆红素', 'text_region': [[102, 58], [184, 58], [184, 79], [102, 79]]}, {'confidence': 0.9962077140808105,` `'text': '3.3', 'text_region': [[235, 59], [266, 59], [266, 78], [235, 78]]}, {'confidence': 0.7987732291221619, 'text': '0--7', 'text_region': [[304, 60], [340, 60], [340, 76], [3``04, 76]]}, {'confidence': 0.949164867401123, 'text': 'umol/L', 'text_region': [[368, 59], [420, 59], [420, 78], [368, 78]]}, {'confidence': 0.9881249666213989, 'text': 'IBIL', 'tex``t_region': [[20, 78], [54, 78], [54, 97], [20, 97]]}, {'confidence': 0.9977105259895325, 'text': '间接胆红素', 'text_region': [[102, 77], [184, 77], [184, 98], [102, 98]]}, {'confi``dence': 0.9968709945678711, 'text': '7.9', 'text_region': [[235, 78], [266, 78], [266, 97], [235, 97]]}, {'confidence': 0.9892260432243347, 'text': '1.5--15', 'text_region': [[291,` `79], [350, 79], [350, 94], [291, 94]]}, {'confidence': 0.9596831798553467, 'text': 'umol/L', 'text_region': [[369, 79], [420, 79], [420, 97], [369, 97]]}, {'confidence': 0.9953203``201293945, 'text': 'TP', 'text_region': [[27, 98], [48, 98], [48, 116], [27, 116]]}, {'confidence': 0.9998953342437744, 'text': '总蛋白', 'text_region': [[118, 97], [166, 97], [166``, 116], [118, 116]]}, {'confidence': 0.9984322190284729, 'text': '58.9', 'text_region': [[224, 98], [272, 98], [272, 116], [224, 116]]}, {'confidence': 0.9880561828613281, 'text':` `'60--80', 'text_region': [[297, 98], [349, 98], [349, 116], [297, 116]]}, {'confidence': 0.9866965413093567, 'text': 'g/L', 'text_region': [[379, 98], [408, 98], [408, 118], [379,` `118]]}, {'confidence': 0.998601496219635, 'text': 'ALB', 'text_region': [[24, 118], [51, 118], [51, 135], [24, 135]]}, {'confidence': 0.9997892379760742, 'text': '白蛋白', 'text_re``gion': [[118, 112], [169, 115], [168, 137], [116, 134]]}, {'confidence': 0.9980158805847168, 'text': '35.1', 'text_region': [[232, 117], [269, 117], [269, 136], [232, 136]]}, {'con``fidence': 0.9636005759239197, 'text': '33--55', 'text_region': [[296, 117], [348, 117], [348, 135], [296, 135]]}, {'confidence': 0.957646906375885, 'text': 'g/L', 'text_region': [[``378, 118], [407, 115], [409, 135], [380, 138]]}, {'confidence': 0.9895787239074707, 'text': 'GLO', 'text_region': [[24, 137], [51, 137], [51, 153], [24, 153]]}, {'confidence': 0.99``96899962425232, 'text': '球蛋白', 'text_region': [[117, 136], [167, 136], [167, 153], [117, 153]]}, {'confidence': 0.997654914855957, 'text': '23.8', 'text_region': [[232, 136], [2``70, 136], [270, 154], [232, 154]]}, {'confidence': 0.992893636226654, 'text': '20--30', 'text_region': [[296, 136], [349, 136], [349, 153], [296, 153]]}, {'confidence': 0.937683820``7244873, 'text': 'g/L', 'text_region': [[378, 137], [407, 134], [409, 154], [380, 157]]}, {'confidence': 0.994020402431488, 'text': 'A/G', 'text_region': [[24, 155], [51, 155], [51``, 172], [24, 172]]}, {'confidence': 0.9995932579040527, 'text': '白球比', 'text_region': [[119, 154], [168, 154], [168, 173], [119, 173]]}, {'confidence': 0.997298538684845, 'text'``: '1.5', 'text_region': [[234, 154], [266, 154], [266, 173], [234, 173]]}, {'confidence': 0.9626685380935669, 'text': '1.5--2.5', 'text_region': [[287, 155], [357, 155], [357, 173]``, [287, 173]]}, {'confidence': 0.9928719401359558, 'text': 'ALP', 'text_region': [[21, 175], [50, 171], [52, 191], [23, 195]]}, {'confidence': 0.9545178413391113, 'text': '碱性磷酸``', 'text_region': [[100, 172], [184, 172], [184, 193], [100, 193]]}, {'confidence': 0.9982390403747559, 'text': '93', 'text_region': [[240, 175], [260, 175], [260, 192], [240, 19 9``2]]}, {'confidence': 0.9920914769172668, 'text': '15--112', 'text_region': [[290, 173], [354, 173], [354, 194], [290, 194]]}, {'confidence': 0.9722098708152771, 'text': 'IU/L', 'text_region': [[376, 175], [410, 175], [410, 191], [376, 191]]}, {'confidence': 0.998141348361969, 'text': 'GGT', 'text_region': [[24, 194], [50, 194], [50, 211], [24, 211]]}, {'confidence': 0.9910216331481934, 'text': '谷氨酰转肽酶', 'text_region': [[98, 192], [188, 192], [188, 210], [98, 210]]}, {'confidence': 0.9981499314308167, 'text': '14.3', 'text_region32, 193], [270, 193], [270, 212], [232, 212]]}, {'confidence': 0.96588134765625, 'text': '<50', 'text_region': [[310, 194], [337, 194], [337, 211], [310, 211]]}, {'confidence': 0.9874141812324524, 'text': 'U/L', 'text_region': [[379, 194], [406, 194], [406, 211], [379, 211]]}, {'confidence': 0.9977130889892578, 'text': 'AST', 'text_region': [[24, 213], [50, 213], [50, 229], [24, 229]]}, {'confidence': 0.9985289573669434, 'text': '谷草转氨酶', 'text_region': [[100, 208], [185, 211], [185, 232], [99, 229]]}, {'confidence': 0.9976338744163513, 'text': '16.3', 'text_region': [[232, 212], [270, 212], [270, 230], [232, 230]]}, {'confidence': 0.9725760221481323, 'text': '8--40', 'text_region': [[298, 213], [345, 213], [345, 230], [298, 230]]}, {'confidence': 0.9855239391326904, 'text': 'U/L', 'text_region': [[379, 213], [406, 213], [406, 229], [379, 229]]}, {'confidence': 0.9941731095314026, 't26, 'text': 'LDH', 'text_region': [[23, 230], [53, 230], [53, 249], [23, 249]]}, {'confidence': 0.9993842840194702, 'text': '乳酸脱氢酶', 'text_region': [[101, 230], [184, 230], [148], [101, 248]]}, {'confidence': 0.9987676739692688, 'text': '167', 'text_region': [[235, 230], [265, 230], [265, 249], [235, 249]]}, {'confidence': 0.9886070489883423, 'text': '114--240', 'text_region': [[287, 232], [358, 232], [358, 249], [287, 249]]}, {'confidence': 0.987419605255127, 'text': 'U/L', 'text_region': [[379, 232], [406, 232], [406, 248], [379, 248]]}, {'confidence': 0.9958209991455078, 'text': 'ADA', 'text_region': [[24, 250], [51, 250], [51, 266], [24, 266]]}, {'confidence': 0.9985343813896179, 'text': '腺甘脱氨酶', _region': [[103, 250], [183, 250], [183, 265], [103, 265]]}, {'confidence': 0.9976718425750732, 'text': '12.6', 'text_region': [[233, 250], [269, 250], [269, 266], [233, 266]]}, {'confidence': 0.9742022752761841, 'text': '4--24', 'text_region': [[299, 249], [345, 249], [345, 266], [299, 266]]}, {'confidence': 0.9864771366119385, 'text': 'U/L', 'text_region': [[379, 250], [407, 250], [407, 266], [379, 266]]}]

结果说明:

返回结果为列表(list),列表中的每一项为词典(dict),词典一共可能包含3种字段,信息如下:

字段名称数据类型意义
anglestr文本角度
textstr文本内容
confidencefloat文本识别置信度或角度分类置信度
text_regionlist文本位置坐标

总结

文本检测、方向分类器和文本识别服务成功发布后,整个系统便可以解析PDF、图片等文档中的文本内容。PaddleOCR的hubserving还能将表格识别、版面分析模型一同串联发布,从而构建一个完整的文档解析服务,对PDF文档实现更全面的处理。此外,还可以通过SER模型发布实现对发票、证件等文档的关键信息抽取。该架构最大的优势在于支持自定义训练的模型发布,用户能够根据行业需求精调、微调模型。未来,我们将重点介绍行业模型的标注、训练与部署,敬请期待。

如何学习AI大模型 ?

“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。

这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。

我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。

我意识到有很多经验和知识值得分享给大家,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。【保证100%免费】🆓

对于0基础小白入门:

如果你是零基础小白,想快速入门大模型是可以考虑的。

一方面是学习时间相对较短,学习内容更全面更集中。
二方面是可以根据这些资料规划好学习计划和方向。

😝有需要的小伙伴,可以VX扫描下方二维码免费领取🆓

👉1.大模型入门学习思维导图👈

要学习一门新的技术,作为新手一定要先学习成长路线图,方向不对,努力白费。

对于从来没有接触过AI大模型的同学,我们帮你准备了详细的学习成长路线图&学习规划。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。(全套教程文末领取哈)
在这里插入图片描述

👉2.AGI大模型配套视频👈

很多朋友都不喜欢晦涩的文字,我也为大家准备了视频教程,每个章节都是当前板块的精华浓缩。

在这里插入图片描述
在这里插入图片描述

👉3.大模型实际应用报告合集👈

这套包含640份报告的合集,涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。(全套教程文末领取哈)

在这里插入图片描述

👉4.大模型落地应用案例PPT👈

光学理论是没用的,要学会跟着一起做,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。(全套教程文末领取哈)

在这里插入图片描述

👉5.大模型经典学习电子书👈

随着人工智能技术的飞速发展,AI大模型已经成为了当今科技领域的一大热点。这些大型预训练模型,如GPT-3、BERT、XLNet等,以其强大的语言理解和生成能力,正在改变我们对人工智能的认识。 那以下这些PDF籍就是非常不错的学习资源。(全套教程文末领取哈)
img

在这里插入图片描述

👉6.大模型面试题&答案👈

截至目前大模型已经超过200个,在大模型纵横的时代,不仅大模型技术越来越卷,就连大模型相关的岗位和面试也开始越来越卷了。为了让大家更容易上车大模型算法赛道,我总结了大模型常考的面试题。(全套教程文末领取哈)

在这里插入图片描述
👉学会后的收获:👈
基于大模型全栈工程实现(前端、后端、产品经理、设计、数据分析等),通过这门课可获得不同能力;

能够利用大模型解决相关实际项目需求: 大数据时代,越来越多的企业和机构需要处理海量数据,利用大模型技术可以更好地处理这些数据,提高数据分析和决策的准确性。因此,掌握大模型应用开发技能,可以让程序员更好地应对实际项目需求;

基于大模型和企业数据AI应用开发,实现大模型理论、掌握GPU算力、硬件、LangChain开发框架和项目实战技能, 学会Fine-tuning垂直训练大模型(数据准备、数据蒸馏、大模型部署)一站式掌握;

能够完成时下热门大模型垂直领域模型训练能力,提高程序员的编码能力: 大模型应用开发需要掌握机器学习算法、深度学习

这份完整版的 AI 大模型学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

😝有需要的小伙伴,可以Vx扫描下方二维码免费领取🆓

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

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

相关文章

【Diffusion分割】CTS:基于一致性的医学图像分割模型

CTS: A Consistency-Based Medical Image Segmentation Model 摘要&#xff1a; 在医学图像分割任务中&#xff0c;扩散模型已显示出巨大的潜力。然而&#xff0c;主流的扩散模型存在采样次数多、预测结果慢等缺点。最近&#xff0c;作为独立生成网络的一致性模型解决了这一问…

回调函数是什么

回调函数是什么 回调函数就是⼀个通过函数指针调⽤的函数。 如果你把函数的指针&#xff08;地址&#xff09;作为参数传递给另⼀个函数&#xff0c;当这个指针被⽤来调⽤其所指向的函数时&#xff0c;被调⽤的函数就是回调函数。 回调函数不是由该函数的实现⽅直接调⽤&…

Linux驱动开发(速记版)--GPIO子系统

第105章 GPIO 入门 105.1 GPIO 引脚分布 RK3568 有 5 组 GPIO&#xff1a;GPIO0 到 GPIO4。 每组 GPIO 又以 A0 到 A7&#xff0c;B0 到 B7&#xff0c;C0 到C7&#xff0c;D0 到 D7&#xff0c;作为区分的编号。 所以 RK3568 上的 GPIO 是不是应该有 5*4*8160 个呢&#xff1…

Semantic Communication Meets Edge Intelligence——构造终端共享的知识图谱指导无线物联网通信中文本的传输

论文链接&#xff1a; IEEE Xplore Full-Text PDF:https://ieeexplore.ieee.org/stamp/stamp.jsp?tp&arnumber9979702 1. 背景 随着自动驾驶、智能城市等应用的发展&#xff0c;移动数据流量将大幅增加。传统的香农信息论&#xff08;CIT&#xff09;通信系统已接近其带…

SpringBoot MyBatis连接数据库设置了encoding=utf-8还是不能用中文来查询

properties的MySQL连接时已经指定了字符编码格式&#xff1a; url: jdbc:mysql://localhost:3306/sky_take_out?useUnicodetrue&characterEncodingutf-8使用MyBatis查询&#xff0c;带有中文参数&#xff0c;查询出的内容为空。 执行的语句为&#xff1a; <select id&…

decltype推导规则

decltype推导规则 当用decltype(e)来获取类型时&#xff0c;编译器将依序判断以下四规则&#xff1a; 1.如果e是一个没有带括号的标记符表达式(id-expression)或者类成员访问表达式&#xff0c;那么decltype(e)就是e所命名的实体的类型。此外&#xff0c;如果e是一个被重载的函…

k8s 中存储之 NFS 卷

目录 1 NFS 卷的介绍 2 NFS 卷的实践操作 2.1 部署一台 NFS 共享主机 2.2 在所有k8s节点中安装nfs-utils 2.3 部署nfs卷 2.3.1 生成 pod 清单文件 2.3.2 修改 pod 清单文件增加 实现 NFS卷 挂载的 参数 2.3.3 声明签单文件并查看是否创建成功 2.3.4 在 NFS 服务器 创建默认发布…

思维导图工具,轻松搞定复杂问题!

一提到思维导图&#xff0c;想必大家都不会陌生&#xff1b;它能帮助我们更好地梳理思路&#xff0c;让复杂的想法变得清晰可见&#xff1b;而随着互联网的普及&#xff0c;在线思维导图工具更是成为了我们日常工作和学习的得力助手&#xff1b;今天&#xff0c;我就来给大家推…

小红书算法岗面试,竞争太激烈了

最近已有不少大厂都在秋招宣讲了&#xff0c;也有一些在 Offer 发放阶段。 节前&#xff0c;我们邀请了一些互联网大厂朋友、今年参加社招和校招面试的同学。 针对新手如何入门算法岗、该如何准备面试攻略、面试常考点、大模型技术趋势、算法项目落地经验分享等热门话题进行了…

【Kubernetes】常见面试题汇总(五十八)

目录 127.创建 PV 失败&#xff1f; 128. pod 无法挂载 PVC&#xff1f; 特别说明&#xff1a; 题目 1-68 属于【Kubernetes】的常规概念题&#xff0c;即 “ 汇总&#xff08;一&#xff09;~&#xff08;二十二&#xff09;” 。 题目 69-113 属于【Kubernetes】…

一个月学会Java 第4天 运算符和数据转换

Day4 运算符和数据转换 今天来讲运算符&#xff0c;每个运算符的作用和现象&#xff0c;首先我们先复习一下数据类型&#xff0c; day2讲过基本数据类型有八种&#xff0c;int、short、long、byte、char、boolean、float、double&#xff0c;分别为四个整型、一个字符型、一个布…

基于springboot vue3 在线考试系统设计与实现 源码数据库 文档

博主介绍&#xff1a;专注于Java&#xff08;springboot ssm springcloud等开发框架&#xff09; vue .net php phython node.js uniapp小程序 等诸多技术领域和毕业项目实战、企业信息化系统建设&#xff0c;从业十五余年开发设计教学工作☆☆☆ 精彩专栏推荐订阅☆☆☆☆…

电脑断网或者经常断网怎么办?

1、首先&#xff0c;按一下键盘的win R &#xff0c; 在打开的运行框内输入&#xff1a;cmd 然后按一下回车 或者 点击一下【确定】 2、在命令窗口输入&#xff1a;ipconfig/release , 然后按一下回车 作用&#xff1a;IP释放&#xff0c;相当于把网线拔了重新插上 3、接着…

佳能基于SPAD的监控摄像机MS-500入选《时代》2023最佳发明

一、产品概述 佳能MS-500是一款采用SPAD(Single Photon Avalanche Diode,单光子雪崩二极管)传感器的监控摄像机。SPAD传感器以其极高的灵敏度和在低光环境下的卓越表现而闻名,使得MS-500能够在夜晚或极暗光条件下拍摄到清晰、彩色的画面。此外,MS-500还配置了高性能的镜头…

Python异常处理中的9个常见错误及其解决办法,建议收藏

在Python编程中&#xff0c;异常处理是确保程序健壮性和可靠性的重要部分。然而&#xff0c;在使用异常处理时&#xff0c;开发者可能会犯一些常见的错误。以下是9个常见的异常处理错误及其解决办法&#xff1a; 1. 语法错误 (SyntaxError) 语法错误是最常见的错误之一。它通…

【梯级水电站调度优化】基于线性递减策略优化粒子群算法

课题名称&#xff1a; 基于改进粒子群算法的梯级水电站调度优化 改进方向&#xff1a; 线性递减策略优化粒子群PSO 代码获取方式&#xff08;付费&#xff09;&#xff1a; 相关资料&#xff1a; 1. 粒子群算法的基本原理 2. 梯级水电站调度优化模型 3. 代码注释 4. 代码…

第十一章 缓存之更新/穿透/雪崩/击穿

目录 一、什么是缓存 二、缓存更新策略 2.1. 缓存主动更新策略 2.1.1. Cache Aside模式&#xff08;主流&#xff09;‌ 2.1.2. Read/Write Through模式‌ 2.1‌.3. Write Behind模式‌ 2.1.4. 总结 三、缓存穿透 四、缓存雪崩 五、缓存击穿 本文中的图片内容部分来源…

【笔记】神领物流Day1.1.20权限管家

传智权限管家是一个通用的权限管理中台服务&#xff0c;在神领物流项目中&#xff0c;我们使用权限系统管理企业内部员工&#xff0c;比如&#xff1a;快递员、司机、管理员等。 在权限管家中可以管理用户&#xff0c;管理后台系统的菜单&#xff0c;以及角色的管理。 权限管家…

视频加字幕用什么软件最快?12款工具快速添加字幕!

对于大多数同学来讲&#xff0c;剪辑中比较头疼的就是如何给视频加字幕和唱词啦&#xff0c;特别是用Pr或者FCXP等专业剪辑软件&#xff0c;加字幕也是特别费时的&#xff0c;哪怕是有批量添加的功能orz... 虽然关于这方面的内容已经很多啦&#xff0c;但是真正全面的内容还特…

哈希闭散列的实现与机制

目录 哈希的介绍 哈希冲突 原因 影响 解决方法 实例 哈希函数 哈希函数设计原则&#xff1a; 常见哈希函数 闭散列 线性探测的实现 代码解读 1. 命名空间和枚举定义 2. 哈希表节点结构体 3. 哈希函数模板 4. 哈希表类 5. 插入、查找和删除逻辑 二次探测 哈希的…