DeploySharp 使用 ONNX Runtime 部署 PP-OCR v4/v5 教程

news2026/4/15 9:38:17
DeploySharp 使用 ONNX Runtime 部署 PP-OCR v4/v5 教程本文详细介绍如何使用 DeploySharp 框架和 ONNX Runtime 推理引擎部署 PP-OCR v4/v5 模型涵盖 CPU、CUDA、DML、TensorRT 等多种部署方式的完整指南。目录• 一、ONNX Runtime 简介• 二、支持的后端对比• 三、环境准备• 四、模型准备• 五、CPU 推理实现• 六、CUDA 推理实现• 七、DML 推理实现• 八、TensorRT 推理实现• 九、性能对比与优化• 十、常见问题解答• 十一、软件获取一、ONNX Runtime 简介1.1 什么是 ONNX RuntimeONNX Runtime 是微软推出的高性能跨平台推理引擎支持 ONNX 模型格式。它是目前最受欢迎的推理引擎之一具有以下特点•跨平台支持 Windows、Linux、macOS、Android、iOS 等•多后端支持 CPU、CUDA、TensorRT、OpenVINO、DirectML 等多种执行提供器•高性能经过深度优化推理速度快•易用性简单的 API快速集成1.2 ONNX Runtime 的优势优势说明跨平台一套代码多平台运行多硬件支持CPU、NVIDIA GPU、AMD GPU、Intel GPU 等丰富的执行提供器CPU、CUDA、TensorRT、DML、OpenVINO 等易于集成支持 C#、C、Python 等多种语言活跃社区微软官方维护持续更新二、支持的后端对比ONNX Runtime 支持多种执行提供器Execution Provider以下是各后端的对比执行提供器支持设备性能特点适用场景CPU所有 CPU性能中等通用性强无 GPU 环境跨平台部署CUDANVIDIA GPUGPU 加速性能好NVIDIA 显卡需要 CUDA 环境TensorRTNVIDIA GPUGPU 加速 TensorRT 优化性能最佳NVIDIA 显卡追求极致性能DML多厂商 GPUAMD/NVIDIA/IntelWindows 平台统一接口Windows 平台多品牌显卡OpenVINOIntel CPU/iGPU/GPUIntel 硬件优化Intel 硬件Windows/Linux三、环境准备3.1 系统要求组件最低要求推荐配置操作系统Windows 10/11, LinuxWindows 11.NET 版本.NET 6.0.NET 8.0CPU4核8核内存8GB16GB显卡可选NVIDIA RTX 3060NVIDIA RTX 40703.2 安装 ONNX Runtime NuGet 包CPU 版本dotnet add package Microsoft.ML.OnnxRuntime.ManagedCUDA 版本dotnet add package Microsoft.ML.OnnxRuntime.Gpu.Windows注意CUDA 版本需要与系统安装的 CUDA 版本匹配• CUDA 11.x → OnnxRuntime.Gpu (旧版本)• CUDA 12.x → OnnxRuntime.Gpu.Windows (新版本)DML 版本dotnet add package Microsoft.ML.OnnxRuntime.DirectMLTensorRT 版本dotnet add package Microsoft.ML.OnnxRuntime.Gpu.WindowsTensorRT 执行提供器需要额外安装 TensorRT。3.3 CUDA 环境配置如需1. 访问 NVIDIA CUDA 官网https://developer.nvidia.com/cuda-downloads2. 下载并安装 CUDA 12.x3. 验证安装nvcc --version4.4 依赖文件配置将以下 DLL 文件复制到程序运行目录CPU 模式无需额外 DLL 文件。CUDA 模式cuda_runtime.dll cudnn64_8.dll cudnn_ops_infer64_8.dll cudnn_cnn_infer64_8.dllDML 模式directml.dll onnxruntime_providers_shared.dll四、模型准备PP-OCR 模型结构ppocrv5/ ├── PP-OCRv5_mobile_det_onnx.onnx # 文本检测模型 ├── PP-OCRv5_mobile_cls_onnx.onnx # 文本方向分类模型 ├── PP-OCRv5_mobile_rec_onnx.onnx # 文本识别模型 └── ppocrv5_dict.txt # 识别字典五、CPU 推理实现5.1 创建配置using DeploySharp.Data; using DeploySharp.Engine; using DeploySharp.Model; // 创建 PP-OCR v5 配置 PaddleOCRConfig config PaddleOCRConfig.GetPPOCRv5Config( detModelPath: E:\Model\ppocrv5\PP-OCRv5_mobile_det_onnx.onnx, clsModelPath: E:\Model\ppocrv5\PP-OCRv5_mobile_cls_onnx.onnx, recModelPath: E:\Model\ppocrv5\PP-OCRv5_mobile_rec_onnx_combined.onnx, recDictPath: E:\Model\ppocrv5\ppocrv5_dict.txt ); // 配置推理引擎 config.GlobalInferenceBackend InferenceBackend.OnnxRuntime; config.GlobalDeviceType DeviceType.CPU; config.GlobalOnnxRuntimeDeviceType OnnxRuntimeDeviceType.Cpu;5.2 完整代码示例using DeploySharp.Data; using DeploySharp.Engine; using DeploySharp.Log; using DeploySharp.Model; using OpenCvSharp; using System.Diagnostics; namespace PaddleOCR.ONNX.CPU.Demo { class Program { static void Main(string[] args) { MyLogger.SetLevel(Log.LogLevel.ERROR); // 读取图片 string imagePath E:\Data\ocr\demo_1.jpg; Mat img Cv2.ImRead(imagePath); if (img.Empty()) { Console.WriteLine(图片读取失败); return; } // 创建配置 PaddleOCRConfig config PaddleOCRConfig.GetPPOCRv5Config( detModelPath: E:\Model\ppocrv5\PP-OCRv5_mobile_det_onnx.onnx, clsModelPath: E:\Model\ppocrv5\PP-OCRv5_mobile_cls_onnx.onnx, recModelPath: E:\Model\ppocrv5\PP-OCRv5_mobile_rec_onnx_combined.onnx, recDictPath: E:\Model\ppocrv5\ppocrv5_dict.txt ); // CPU 推理配置 config.GlobalInferenceBackend InferenceBackend.OnnxRuntime; config.GlobalDeviceType DeviceType.CPU; config.GlobalOnnxRuntimeDeviceType OnnxRuntimeDeviceType.Cpu; config.MaxConcurrency 4; config.GlobalMaxBatchSize 1; config.RecConfig.InferImageHeight 48; config.RecConfig.MaxImageWidth 320; // 创建预测器 using (PaddleOcrPredictor predictor new PaddleOcrPredictor(config)) { Console.WriteLine(模型加载完成); // 预热 predictor.Predict(img); // 性能测试 Stopwatch sw Stopwatch.StartNew(); OcrResult result predictor.Predict(img); sw.Stop(); // 输出结果 Console.WriteLine(\n 识别结果 ); Console.WriteLine(result.TextContentsToString()); Console.WriteLine($\n总耗时: {sw.ElapsedMilliseconds} ms); predictor.PrintTimeProfiling(); // 可视化 Mat resultMat Visualize.DrawOcrResult(img, result, new VisualizeOptions(1.0f)); Cv2.ImShow(Result, resultMat); Cv2.WaitKey(); } } } }5.3 性能数据设备耗时备注AMD Ryzen 7 5800H~656ms8核无 GPUIntel Core i7-12700H~550ms12核无 GPU六、CUDA 推理实现6.1 环境准备1. 确认已安装 NVIDIA 显卡驱动2. 安装 CUDA 12.x3. 复制 CUDA 相关 DLL 文件到程序目录6.2 创建配置PaddleOCRConfig config PaddleOCRConfig.GetPPOCRv5Config( detModelPath: E:\Model\ppocrv5\PP-OCRv5_mobile_det_onnx.onnx, clsModelPath: E:\Model\ppocrv5\PP-OCRv5_mobile_cls_onnx.onnx, recModelPath: E:\Model\ppocrv5\PP-OCRv5_mobile_rec_onnx_combined.onnx, recDictPath: E:\Model\ppocrv5\ppocrv5_dict.txt ); // CUDA 推理配置 config.GlobalInferenceBackend InferenceBackend.OnnxRuntime; config.GlobalDeviceType DeviceType.GPU0; config.GlobalOnnxRuntimeDeviceType OnnxRuntimeDeviceType.Cuda; config.MaxConcurrency 4; config.GlobalMaxBatchSize 4;6.3 完整代码示例using DeploySharp.Data; using DeploySharp.Engine; using DeploySharp.Log; using DeploySharp.Model; using OpenCvSharp; using System.Diagnostics; namespace PaddleOCR.ONNX.CUDA.Demo { class Program { static void Main(string[] args) { MyLogger.SetLevel(Log.LogLevel.ERROR); // 读取图片 string imagePath E:\Data\ocr\demo_1.jpg; Mat img Cv2.ImRead(imagePath); // 创建配置 PaddleOCRConfig config PaddleOCRConfig.GetPPOCRv5Config( detModelPath: E:\Model\ppocrv5\PP-OCRv5_mobile_det_onnx.onnx, clsModelPath: E:\Model\ppocrv5\PP-OCRv5_mobile_cls_onnx.onnx, recModelPath: E:\Model\ppocrv5\PP-OCRv5_mobile_rec_onnx_combined.onnx, recDictPath: E:\Model\ppocrv5\ppocrv5_dict.txt ); // CUDA 推理配置 config.GlobalInferenceBackend InferenceBackend.OnnxRuntime; config.GlobalDeviceType DeviceType.GPU0; config.GlobalOnnxRuntimeDeviceType OnnxRuntimeDeviceType.Cuda; config.MaxConcurrency 4; config.GlobalMaxBatchSize 4; config.RecConfig.InferImageHeight 48; config.RecConfig.MaxImageWidth 320; // 创建预测器 using (PaddleOcrPredictor predictor new PaddleOcrPredictor(config)) { Console.WriteLine(模型加载完成); // 预热 predictor.Predict(img); // 性能测试 Stopwatch sw Stopwatch.StartNew(); OcrResult result predictor.Predict(img); sw.Stop(); // 输出结果 Console.WriteLine(\n 识别结果 ); Console.WriteLine(result.TextContentsToString()); Console.WriteLine($\n总耗时: {sw.ElapsedMilliseconds} ms); predictor.PrintTimeProfiling(); // 可视化 Mat resultMat Visualize.DrawOcrResult(img, result, new VisualizeOptions(1.0f)); Cv2.ImShow(Result, resultMat); Cv2.WaitKey(); } } } }6.4 性能数据设备耗时备注NVIDIA RTX 3060~93msCUDA 12NVIDIA RTX 4070~65msCUDA 12NVIDIA RTX 4090~45msCUDA 12七、DML 推理实现7.1 DML 简介DirectML (DML) 是 Windows 平台的高性能硬件加速接口支持 AMD、NVIDIA 和 Intel 多厂商显卡。7.2 创建配置PaddleOCRConfig config PaddleOCRConfig.GetPPOCRv5Config( detModelPath: E:\Model\ppocrv5\PP-OCRv5_mobile_det_onnx.onnx, clsModelPath: E:\Model\ppocrv5\PP-OCRv5_mobile_cls_onnx.onnx, recModelPath: E:\Model\ppocrv5\PP-OCRv5_mobile_rec_onnx_combined.onnx, recDictPath: E:\Model\ppocrv5\ppocrv5_dict.txt ); // DML 推理配置 config.GlobalInferenceBackend InferenceBackend.OnnxRuntime; config.GlobalDeviceType DeviceType.GPU0; config.GlobalOnnxRuntimeDeviceType OnnxRuntimeDeviceType.Dml; config.MaxConcurrency 2; config.GlobalMaxBatchSize 2;7.3 完整代码示例using DeploySharp.Data; using DeploySharp.Engine; using DeploySharp.Log; using DeploySharp.Model; using OpenCvSharp; using System.Diagnostics; namespace PaddleOCR.ONNX.DML.Demo { class Program { static void Main(string[] args) { MyLogger.SetLevel(Log.LogLevel.ERROR); // 读取图片 string imagePath E:\Data\ocr\demo_1.jpg; Mat img Cv2.ImRead(imagePath); // 创建配置 PaddleOCRConfig config PaddleOCRConfig.GetPPOCRv5Config( detModelPath: E:\Model\ppocrv5\PP-OCRv5_mobile_det_onnx.onnx, clsModelPath: E:\Model\ppocrv5\PP-OCRv5_mobile_cls_onnx.onnx, recModelPath: E:\Model\ppocrv5\PP-OCRv5_mobile_rec_onnx_combined.onnx, recDictPath: E:\Model\ppocrv5\ppocrv5_dict.txt ); // DML 推理配置 config.GlobalInferenceBackend InferenceBackend.OnnxRuntime; config.GlobalDeviceType DeviceType.GPU0; config.GlobalOnnxRuntimeDeviceType OnnxRuntimeDeviceType.Dml; config.MaxConcurrency 2; config.GlobalMaxBatchSize 2; config.RecConfig.InferImageHeight 48; config.RecConfig.MaxImageWidth 320; // 创建预测器 using (PaddleOcrPredictor predictor new PaddleOcrPredictor(config)) { Console.WriteLine(模型加载完成); // 预热 predictor.Predict(img); // 性能测试 Stopwatch sw Stopwatch.StartNew(); OcrResult result predictor.Predict(img); sw.Stop(); // 输出结果 Console.WriteLine(\n 识别结果 ); Console.WriteLine(result.TextContentsToString()); Console.WriteLine($\n总耗时: {sw.ElapsedMilliseconds} ms); predictor.PrintTimeProfiling(); // 可视化 Mat resultMat Visualize.DrawOcrResult(img, result, new VisualizeOptions(1.0f)); Cv2.ImShow(Result, resultMat); Cv2.WaitKey(); } } } }7.4 性能数据设备耗时备注NVIDIA RTX 3060~114msDMLNVIDIA RTX 4070~75msDMLAMD RX 6800~95msDMLIntel Arc A750~130msDML八、TensorRT 推理实现8.1 环境准备1. 安装 CUDA 12.x2. 安装 TensorRT 8.x3. 配置环境变量8.2 创建配置PaddleOCRConfig config PaddleOCRConfig.GetPPOCRv5Config( detModelPath: E:\Model\ppocrv5\PP-OCRv5_mobile_det_onnx.onnx, clsModelPath: E:\Model\ppocrv5\PP-OCRv5_mobile_cls_onnx.onnx, recModelPath: E:\Model\ppocrv5\PP-OCRv5_mobile_rec_onnx_combined.onnx, recDictPath: E:\Model\ppocrv5\ppocrv5_dict.txt ); // TensorRT 推理配置 config.GlobalInferenceBackend InferenceBackend.OnnxRuntime; config.GlobalDeviceType DeviceType.GPU0; config.GlobalOnnxRuntimeDeviceType OnnxRuntimeDeviceType.TensorRt; config.MaxConcurrency 4; config.GlobalMaxBatchSize 4;注意首次推理时ONNX Runtime 会自动将 ONNX 模型编译为 TensorRT 引擎这个过程可能需要数分钟。8.3 完整代码示例using DeploySharp.Data; using DeploySharp.Engine; using DeploySharp.Log; using DeploySharp.Model; using OpenCvSharp; using System.Diagnostics; namespace PaddleOCR.ONNX.TensorRT.Demo { class Program { static void Main(string[] args) { MyLogger.SetLevel(Log.LogLevel.ERROR); // 读取图片 string imagePath E:\Data\ocr\demo_1.jpg; Mat img Cv2.ImRead(imagePath); // 创建配置 PaddleOCRConfig config PaddleOCRConfig.GetPPOCRv5Config( detModelPath: E:\Model\ppocrv5\PP-OCRv5_mobile_det_onnx.onnx, clsModelPath: E:\Model\ppocrv5\PP-OCRv5_mobile_cls_onnx.onnx, recModelPath: E:\Model\ppocrv5\PP-OCRv5_mobile_rec_onnx_combined.onnx, recDictPath: E:\Model\ppocrv5\ppocrv5_dict.txt ); // TensorRT 推理配置 config.GlobalInferenceBackend InferenceBackend.OnnxRuntime; config.GlobalDeviceType DeviceType.GPU0; config.GlobalOnnxRuntimeDeviceType OnnxRuntimeDeviceType.TensorRt; config.MaxConcurrency 4; config.GlobalMaxBatchSize 4; config.RecConfig.InferImageHeight 48; config.RecConfig.MaxImageWidth 320; // 创建预测器 using (PaddleOcrPredictor predictor new PaddleOcrPredictor(config)) { Console.WriteLine(模型加载完成); // 预热首次会编译 TensorRT 引擎需要较长时间 Console.WriteLine(开始预热首次运行会编译 TensorRT 引擎请耐心等待...); predictor.Predict(img); Console.WriteLine(预热完成); // 性能测试 Stopwatch sw Stopwatch.StartNew(); OcrResult result predictor.Predict(img); sw.Stop(); // 输出结果 Console.WriteLine(\n 识别结果 ); Console.WriteLine(result.TextContentsToString()); Console.WriteLine($\n总耗时: {sw.ElapsedMilliseconds} ms); predictor.PrintTimeProfiling(); // 可视化 Mat resultMat Visualize.DrawOcrResult(img, result, new VisualizeOptions(1.0f)); Cv2.ImShow(Result, resultMat); Cv2.WaitKey(); } } } }8.4 性能数据设备耗时备注NVIDIA RTX 3060~52msTensorRTNVIDIA RTX 4070~35msTensorRTNVIDIA RTX 4090~25msTensorRT九、性能对比与优化9.1 性能对比以下为使用相同测试图片在不同后端上的性能对比执行提供器设备耗时相对性能CPUAMD Ryzen 7 5800H656ms1.0xDMLNVIDIA RTX 3060114ms5.75xDMLIntel Arc 140V331ms1.98xCUDANVIDIA RTX 306093ms7.05xTensorRTNVIDIA RTX 306052ms12.6x9.2 优化建议并发优化// 根据硬件调整并发数 // GPU 推理建议设置为 2-4 config.MaxConcurrency 4; // CPU 推理建议设置为 CPU 核心数 config.MaxConcurrency 8;批处理优化// GPU 推理建议增大 Batch Size config.GlobalMaxBatchSize 4; // CPU 推理建议保持 Batch Size 为 1 config.GlobalMaxBatchSize 1;模型优化// 调整识别模型输入尺寸 config.RecConfig.InferImageHeight 48; // 降低高度可加速 config.RecConfig.MaxImageWidth 320; // 限制宽度预热优化// 进行 1-2 次预热推理 for (int i 0; i 2; i) { predictor.Predict(img); }十、常见问题解答Q1: CUDA 推理报错怎么办A:检查以下几点1. 确认 CUDA 版本是否正确安装2. 检查 CUDA 相关 DLL 文件是否在程序目录3. 确认显卡驱动是否为最新版本4. 检查显卡是否支持 CUDAQ2: DML 推理速度慢怎么办A:优化建议1. 确认显卡驱动是否为最新版本2. 减小并发数和 Batch Size3. 尝试使用 CUDA 或 TensorRT如果使用 NVIDIA 显卡Q3: TensorRT 首次推理很慢A:这是正常现象首次推理时ONNX Runtime 会自动将 ONNX 模型编译为 TensorRT 引擎这个过程可能需要数分钟。编译完成后后续推理速度会显著提升。Q4: 如何切换不同执行提供器A:只需修改配置// CPU config.GlobalOnnxRuntimeDeviceType OnnxRuntimeDeviceType.Cpu; // CUDA config.GlobalOnnxRuntimeDeviceType OnnxRuntimeDeviceType.Cuda; // DML config.GlobalOnnxRuntimeDeviceType OnnxRuntimeDeviceType.Dml; // TensorRT config.GlobalOnnxRuntimeDeviceType OnnxRuntimeDeviceType.TensorRt;Q5: 如何选择最佳执行提供器A:根据硬件和需求选择场景推荐后端无 GPU跨平台CPUNVIDIA 显卡快速部署CUDANVIDIA 显卡追求性能TensorRTWindows 平台AMD 显卡DMLWindows 平台多品牌显卡DML十一、软件获取11.1 源码下载DeploySharp 项目已完全开源https://github.com/guojin-yan/DeploySharp.git11.2 Demo 程序控制台 Demodemos/DeploySharp.OpenCvSharp.PaddleOcr.Demo桌面应用 Demoapplications/.NET 8.0/JYPPX.DeploySharp.OpenCvSharp.PaddleOcr结语通过本文的介绍您应该已经掌握了使用 DeploySharp 和 ONNX Runtime 部署 PP-OCR v4/v5 模型的完整流程。ONNX Runtime 作为微软推出的高性能推理引擎支持多种执行提供器和硬件平台是 .NET 开发者进行 OCR 部署的理想选择。如遇到问题欢迎通过 GitHub Issues 或 QQ 交流群945057948联系我们。QQ群二维码作者Guojin Yan发布时间2026年4月【文章声明】本文主要内容基于作者的研究与实践部分表述借助 AI 工具进行了辅助优化。由于技术局限性文中可能存在错误或疏漏之处恳请各位读者批评指正。如果内容无意中侵犯了您的权益请及时通过公众号后台与我们联系我们将第一时间核实并妥善处理。感谢您的理解与支持

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

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

相关文章

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…

网络编程(Modbus进阶)

思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…

龙虎榜——20250610

上证指数放量收阴线&#xff0c;个股多数下跌&#xff0c;盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型&#xff0c;指数短线有调整的需求&#xff0c;大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的&#xff1a;御银股份、雄帝科技 驱动…

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…