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

RK3588芯片NPU的使用:Windows11 Docker中运行PPOCRv4例子

本文的目标

本文将在RKNN Docker环境中练习PPOCR示例,并通过adb工具部署到RK3588开发板。

开发环境说明

  • 主机系统:Windows11
  • 目标设备:搭载RK3588芯片的安卓开发板
  • 核心工具:包含rknn-toolkit2、rknn_model_zoo等工具的Docker镜像、ADB调试工具

PPOCR目录结构说明

PPOCR样例的目录在rknn_model_zoo\examples\PPOCR,里面有三个子目录,分别描述如下:

1. PPOCR-Det

核心功能

实现文字区域检测,基于DB++(Dynamic Binarization++)算法改进,支持多尺度特征融合和自适应阈值预测。

技术特性

  • 输入图像尺寸自适应
    通过det_limit_side_len参数控制最大边长为960像素,det_limit_type选择"max"模式进行动态缩放
  • 后处理优化
    包含可微分二值化、Vatti Clipping多边形扩展(det_db_unclip_ratio=1.5)等模块
  • 多算法扩展
    支持EAST、SAST等检测模型的后处理参数配置

2. PPOCR-Rec

核心功能

实现文字内容识别,采用SVTR(Scene Text Recognition with Transformer)架构,支持多语言识别。

技术特性

  • 输入规范
    图像统一缩放至3,48,320尺寸,通过rec_char_dict_path加载包含6625个字符的字典文件
  • 动态序列建模
    使用Transformer编码器处理变长文本,支持CRNN、ABINet等算法的混合训练策略
  • 量化优化
    提供INT8量化配置方案,模型体积从11.9MB压缩至3.8MB

3. PPOCR-System

核心功能

端到端OCR流水线系统,整合检测、方向分类、识别三阶段模型。

工作流程

在这里插入图片描述

启动RKNN Docker环境

# 使用 docker run 命令创建并运行 RKNN Toolkit2 容器
# 并通过附加 -v <host src folder>:<image dst folder> 参数,将本地文件映射进容器中
docker run -t -i --privileged -v /dev/bus/usb:/dev/bus/usb -v D:\rknn\rknn_model_zoo-v2.3.0:/rknn_model_zoo rknn-toolkit2:2.3.0-cp38 /bin/bash

先跑PPOCR-Det例子

下载ppocrv4_det.onnx

cd /rknn_model_zoo/examples/PPOCR/PPOCR-Det/model
./download_model.sh

执行结果:

Length: 4771801 (4.5M) [application/octet-stream]
Saving to: './ppocrv4_det.onnx'./ppocrv4_det.onnx                     100%[============================================================================>]   4.55M  1.36MB/s    in 3.3s2025-04-09 08:43:41 (1.36 MB/s) - './ppocrv4_det.onnx' saved [4771801/4771801]

将onnx转为RKNN格式

cd ../python
# python convert.py <onnx_model> <TARGET_PLATFORM> <dtype(optional)> <output_rknn_path(optional)>
python convert.py ../model/ppocrv4_det.onnx rk3588

运行结果:

I rknn-toolkit2 version: 2.3.0
--> Config model
done
--> Loading model
done
--> Building model
I Loading : 100%|█████████████████████████████████████████████| 342/342 [00:00<00:00, 119289.14it/s]
I OpFusing 0: 100%|██████████████████████████████████████████████| 100/100 [00:00<00:00, 706.50it/s]
I OpFusing 1 : 100%|█████████████████████████████████████████████| 100/100 [00:00<00:00, 340.48it/s]
I OpFusing 0 : 100%|█████████████████████████████████████████████| 100/100 [00:00<00:00, 263.83it/s]
I OpFusing 1 : 100%|█████████████████████████████████████████████| 100/100 [00:00<00:00, 250.24it/s]
I OpFusing 2 : 100%|█████████████████████████████████████████████| 100/100 [00:00<00:00, 167.88it/s]
I GraphPreparing : 100%|███████████████████████████████████████| 214/214 [00:00<00:00, 21065.53it/s]
I Quantizating : 100%|████████████████████████████████████████████| 214/214 [00:02<00:00, 72.65it/s]
I rknn building ...
I rknn building done.
done# ls ../model/
download_model.sh  ppocrv4_det.onnx  ppocrv4_det.rknn  test.jpg

运行安卓系统C++例子

1. 编译

# go back to the rknn_model_zoo root directory
cd ../../
./build-android.sh -t rk3588 -a arm64-v8a -d PPOCR-Det

毫无悬念的编译成功。

./build-android.sh -t rk3588 -a arm64-v8a -d PPOCR-Det
===================================
BUILD_DEMO_NAME=PPOCR-Det
BUILD_DEMO_PATH=examples/PPOCR/PPOCR-Det/cpp
TARGET_SOC=rk3588
TARGET_ARCH=arm64-v8a
BUILD_TYPE=Release
ENABLE_ASAN=OFF
DISABLE_RGA=
INSTALL_DIR=/rknn_model_zoo/install/rk3588_android_arm64-v8a/rknn_PPOCR-Det_demo
BUILD_DIR=/rknn_model_zoo/build/build_rknn_PPOCR-Det_demo_rk3588_android_arm64-v8a_Release
ANDROID_NDK_PATH=/rknn_model_zoo/android-ndk-r19c
===================================
Install the project...
-- Install configuration: "Release"
-- Installing: /rknn_model_zoo/install/rk3588_android_arm64-v8a/rknn_PPOCR-Det_demo/./rknn_ppocr_det_demo
-- Installing: /rknn_model_zoo/install/rk3588_android_arm64-v8a/rknn_PPOCR-Det_demo/model/test.jpg
-- Installing: /rknn_model_zoo/install/rk3588_android_arm64-v8a/rknn_PPOCR-Det_demo/model/ppocrv4_det.rknn
-- Installing: /rknn_model_zoo/install/rk3588_android_arm64-v8a/rknn_PPOCR-Det_demo/lib/librknnrt.so
-- Installing: /rknn_model_zoo/install/rk3588_android_arm64-v8a/rknn_PPOCR-Det_demo/lib/librga.so

2.推送到开发板

# 切换到 root 用户权限
adb root
adb remount
adb push install/rk3588_android_arm64-v8a/rknn_PPOCR-Det_demo /data/rknn-test

3.开发板上运行demo

adb shell
# 进入开发板中rknn_yolov5_demo目录
cd /data/rknn-test/rknn_PPOCR-Det_demo/
# 设置依赖库环境
export LD_LIBRARY_PATH=./lib
# 运行可执行文件
./rknn_ppocr_det_demo model/ppocrv4_det.rknn model/test.jpg

运行结果如下:

rk3588_s:/data/rknn-test/rknn_PPOCR-Det_demo # chmod +x rknn_ppocr_det_demo
/rknn_ppocr_det_demo model/ppocrv4_det.rknn model/test.jpg                                                                                                <
model input num: 1, output num: 1
input tensors:index=0, name=x, n_dims=4, dims=[1, 480, 480, 3], n_elems=691200, size=691200, fmt=NHWC, type=INT8, qnt_type=AFFINE, zp=-14, scale=0.018658
output tensors:index=0, name=sigmoid_0.tmp_0, n_dims=4, dims=[1, 1, 480, 480], n_elems=230400, size=230400, fmt=NCHW, type=INT8, qnt_type=AFFINE, zp=-128, scale=0.003922
model is NHWC input fmt
model input height=480, width=480, channel=3
origin size=500x500 crop size=496x496
input image: 500 x 500, subsampling: 4:4:4, colorspace: YCbCr, orientation: 1
src width is not 4/16-aligned, convert image use cpu
finish
rknn_run
DRAWING OBJECT
[0]: [(27, 459), (136, 459), (136, 478), (27, 478)] 0.990703
[1]: [(27, 428), (371, 428), (371, 446), (27, 446)] 0.865059
[2]: [(25, 397), (361, 395), (362, 413), (26, 415)] 0.947026
[3]: [(367, 368), (474, 366), (476, 386), (368, 388)] 0.988166
[4]: [(27, 363), (282, 365), (281, 384), (26, 382)] 0.952994
[5]: [(25, 334), (342, 334), (342, 352), (25, 352)] 0.955286
[6]: [(26, 303), (252, 303), (252, 320), (26, 320)] 0.977311
[7]: [(25, 270), (180, 270), (180, 289), (25, 289)] 0.995351
[8]: [(25, 240), (241, 240), (241, 259), (25, 259)] 0.987780
[9]: [(413, 233), (429, 233), (429, 305), (413, 305)] 0.977658
[10]: [(26, 209), (234, 209), (234, 227), (26, 227)] 0.999072
[11]: [(25, 179), (298, 177), (300, 194), (26, 195)] 0.991600
[12]: [(28, 142), (281, 144), (280, 163), (27, 161)] 0.963910
[13]: [(27, 111), (332, 113), (331, 134), (26, 133)] 0.929749
[14]: [(26, 82), (171, 82), (171, 104), (26, 104)] 0.997311
[15]: [(28, 37), (302, 39), (301, 70), (27, 69)] 0.961222SAVE TO ./out.jpg
write_image path: ./out.jpg width=500 height=500 channel=3 data=0xb4000079e8295e50

先跑PPOCR-Rec例子

下载onnx模型

cd /rknn_model_zoo/examples/PPOCR/PPOCR-Rec/model
./download_model.shSaving to: 'ppocrv4_rec.onnx'ppocrv4_rec.onnx                       100%[============================================================================>]  10.36M  2.52MB/s    in 6.2s2025-04-09 09:12:14 (1.67 MB/s) - 'ppocrv4_rec.onnx' saved [10862445/10862445]

转为rknn格式

cd ../python
python convert.py ../model/ppocrv4_rec.onnx rk3588
# output model will be saved as ../model/ppocrv4_rec.rknn

运行C++Demo(安卓开发板)

1.编译

# go back to the rknn_model_zoo root directory
cd ../../
./build-android.sh -t rk3588 -a arm64-v8a -d PPOCR-Rec

毫无疑问的编译成功。

2.推送到开发板

adb root
adb remount
adb push .\install\rk3588_android_arm64-v8a\rknn_PPOCR-Rec_demo\ /data/rknn-test

3.开发板上运行

adb shell
cd /data/rknn-test/rknn_PPOCR-Rec_demo
export LD_LIBRARY_PATH=./lib
./rknn_ppocr_rec_demo model/ppocrv4_rec.rknn model/test.png

运行结果:

model input num: 1, output num: 1
input tensors:index=0, name=x, n_dims=4, dims=[1, 48, 320, 3], n_elems=46080, size=92160, fmt=NHWC, type=FP16, qnt_type=AFFINE, zp=0, scale=1.000000
output tensors:index=0, name=softmax_11.tmp_0, n_dims=3, dims=[1, 40, 6625, 0], n_elems=265000, size=530000, fmt=UNDEFINED, type=FP16, qnt_type=AFFINE, zp=0, scale=1.000000
model is NHWC input fmt
model input height=48, width=320, channel=3
rknn_run
regconize result: JOINT, score=0.994140

最后跑PPOCR-System例子

上述已经将检测和识别两个onnx模型下载并转换为rknn格式,下面就将整个流程串联起来吧。

1.编译

# go back to the rknn_model_zoo root directory
cd ../../
./build-android.sh -t rk3588 -a arm64-v8a -d PPOCR-System

编译结果:

Install the project...
-- Install configuration: "Release"
-- Installing: /rknn_model_zoo/install/rk3588_android_arm64-v8a/rknn_PPOCR-System_demo/./rknn_ppocr_system_demo
-- Installing: /rknn_model_zoo/install/rk3588_android_arm64-v8a/rknn_PPOCR-System_demo/model/test.jpg
-- Installing: /rknn_model_zoo/install/rk3588_android_arm64-v8a/rknn_PPOCR-System_demo/model/ppocrv4_det.rknn
-- Installing: /rknn_model_zoo/install/rk3588_android_arm64-v8a/rknn_PPOCR-System_demo/model/ppocrv4_rec.rknn
-- Installing: /rknn_model_zoo/install/rk3588_android_arm64-v8a/rknn_PPOCR-System_demo/lib/librknnrt.so
-- Installing: /rknn_model_zoo/install/rk3588_android_arm64-v8a/rknn_PPOCR-System_demo/lib/librga.so

2.推送到开发板

adb root
adb remount
adb push .\install\rk3588_android_arm64-v8a\rknn_PPOCR-System_demo\ /data/rknn-test

3.开发板上运行

adb shell
cd /data/rknn-test/rknn_PPOCR-System_demo
export LD_LIBRARY_PATH=./lib
chmod +x rknn_ppocr_system_demo
./rknn_ppocr_system_demo model/ppocrv4_det.rknn model/ppocrv4_rec.rknn   model/test.jpg

注意:模型的先后顺序一定要按照上面的放置。
结果:

DRAWING OBJECT
[0] @ [(28, 37), (302, 39), (301, 70), (27, 69)]
regconize result: 纯臻营养护发素, score=0.997977
[1] @ [(26, 82), (171, 82), (171, 104), (26, 104)]
regconize result: 产品信息/参数, score=0.994559
[2] @ [(27, 111), (332, 113), (331, 134), (26, 133)]
regconize result: (45元/每公斤,100公斤起订), score=0.971967
[3] @ [(28, 142), (281, 144), (280, 163), (27, 161)]
regconize result: 每瓶22元,1000瓶起订), score=0.981864
[4] @ [(25, 179), (298, 177), (300, 194), (26, 195)]
regconize result: 【品牌】:代加工方式/OEMODM, score=0.986213
[5] @ [(26, 209), (234, 209), (234, 227), (26, 227)]
regconize result: 【品名】:纯臻营养护发素, score=0.996297
[6] @ [(25, 240), (241, 240), (241, 259), (25, 259)]
regconize result: 【产品编号】:YM-X-3011, score=0.985657
[7] @ [(413, 233), (429, 233), (429, 305), (413, 305)]
regconize result: ODMOEM, score=0.992676
[8] @ [(25, 270), (180, 270), (180, 289), (25, 289)]
regconize result: 【净含量】:220ml, score=0.992010
[9] @ [(26, 303), (252, 303), (252, 320), (26, 320)]
regconize result: 【适用人群】:适合所有肤质, score=0.995155
[10] @ [(25, 334), (342, 334), (342, 352), (25, 352)]
regconize result: 【主要成分】:鲸蜡硬脂醇、燕麦β-葡聚, score=0.969624
[11] @ [(27, 363), (282, 365), (281, 384), (26, 382)]
regconize result: 糖、椰油酰胺丙基甜菜碱、泛酸, score=0.925781
[12] @ [(367, 368), (474, 366), (476, 386), (368, 388)]
regconize result: (成品包材), score=0.986409
[13] @ [(25, 397), (361, 395), (362, 413), (26, 415)]
regconize result: 【主要功能】:可紧致头发磷层,从而达到, score=0.995605
[14] @ [(27, 428), (371, 428), (371, 446), (27, 446)]
regconize result: 即时持久改善头发光泽的效果,给干燥的头, score=0.997995
[15] @ [(27, 459), (136, 459), (136, 478), (27, 478)]
regconize result: 发足够的滋养, score=0.998616SAVE TO ./out.jpg
write_image path: ./out.jpg width=500 height=500 channel=3 data=0xb400007c6db69e50

相关文章:

RK3588芯片NPU的使用:Windows11 Docker中运行PPOCRv4例子

本文的目标 本文将在RKNN Docker环境中练习PPOCR示例&#xff0c;并通过adb工具部署到RK3588开发板。 开发环境说明 主机系统&#xff1a;Windows11目标设备&#xff1a;搭载RK3588芯片的安卓开发板核心工具&#xff1a;包含rknn-toolkit2、rknn_model_zoo等工具的Docker镜像…...

88.高效写入文件—StringBuilder C#例子 WPF例子

在处理文件写入操作时&#xff0c;选择合适的方法可以显著影响程序的性能。本文将通过两个示例代码&#xff0c;对比使用 StringBuilder 和直接写入文件的性能差异&#xff0c;并提供具体的实现步骤。 问题背景 在实际开发中&#xff0c;我们经常需要将大量数据写入文件。然而…...

redis 延迟双删

Redis延迟双删是一种用于解决缓存与数据库数据一致性问题的策略&#xff0c;通常在高并发场景下使用。以下是其核心内容&#xff1a; 1. 问题背景 当更新数据库时&#xff0c;如果未及时删除或更新缓存&#xff0c;可能导致后续读请求仍从缓存中读取旧数据&#xff0c;造成数…...

如何在CentOS部署青龙面板并实现无公网IP远程访问本地面板

&#xfeff;青龙面板的功能多多&#xff0c;可以帮助我们自动化处理很多需要手动操作的事情&#xff0c;比如京东领京豆&#xff0c;阿里云盘签到白嫖 vip、掘金签到等等&#xff0c;本教程使用 Docker 搭建青龙面板&#xff0c;并结合 cpolar 内网穿透实现使用公网地址远程访…...

VectorBT量化入门系列:第五章 VectorBT性能评估与分析

VectorBT量化入门系列&#xff1a;第五章 VectorBT性能评估与分析 本教程专为中高级开发者设计&#xff0c;系统讲解VectorBT技术在量化交易中的应用。通过结合Tushare数据源和TA-Lib技术指标&#xff0c;深度探索策略开发、回测优化与风险评估的核心方法。从数据获取到策略部署…...

新能源商用车能耗终极优化指南:悬架、制动、电驱桥全链路硬核拆解(附仿真代码)

引言&#xff1a;新能源商用车的“续航战争”与工程师的破局点 1.1 行业现状&#xff1a;政策红利与技术瓶颈的博弈 数据冲击&#xff1a; 2023年中国新能源商用车销量突破50万辆&#xff0c;但平均续航仅为燃油车的55%&#xff08;数据来源&#xff1a;中汽协&#xff09;。…...

Maven笔记

Maven作用 依赖管理、版本控制标准化项目结构、自动化构建项目生命周期管理细分项目模块自动化构建、通过插件拓展构建过程 Maven下载及配置 https://blog.csdn.net/qq_29689343/article/details/135566775 使用IDEA 构建Maven工程 https://blog.csdn.net/qq_29689343/art…...

Java——接口扩展

JDK8开始接口中新增的方法 JDK7以前:接口中只能定义抽象方法。 JDK8的新特性:接口中可以定义有方法体的方法。(默认、静态) JDK9的新特性:接口中可以定义私有方法。 默认方法 需要使用关键字default修饰 作用: 解决接口升级的问题 接口中默认方法的定义格式: 格式: public d…...

COD任务论文--MAMIFNet

摘要 提示&#xff1a;论文机翻 由于难以从复杂背景中区分高度相似的目标&#xff0c;伪装物体检测&#xff08;COD&#xff09;仍然是计算机视觉领域的一项具有挑战性的任务。现有的伪装物体检测方法往往在场景理解和信息利用方面存在困难&#xff0c;导致精度不足&#xff0c…...

基于MCP协议调用的大模型agent开发04

目录 MCP客户端Client开发流程 uv工具 uv安装流程 uv的基本用法介绍 MCP极简客户端搭建流程 MCP客户端接入OpenAI、DeepSeek在线模型流程 参考来源及学习推荐&#xff1a; Anthropic MCP发布通告&#xff1a;https://www.anthropic.com/news/model-context-protocol MC…...

ComfyUI_Echomimic部署问题集合

本博客总结自己在从WebUI转到ComfyUI的过程配置Echomimic遇到的一些问题和解决方法。 默认大家已经成功安装ComfyUI&#xff0c;我之前装的是ComfyU桌面版&#xff0c;现在用的是B站秋葉大佬的整合包。但内核都一样&#xff0c;错误也是通用的。遇到问题时&#xff0c;应该先去…...

音频转文本:如何识别音频成文字

Python脚本:MP4转MP3并语音识别为中文 以下是一个完整的Python脚本,可以将MP4视频转换为MP3音频,然后使用语音识别模型将音频转换为中文文本。 准备工作 首先需要安装必要的库: pip install moviepy pydub SpeechRecognition openai-whisper完整脚本 import os from m…...

脑科学与人工智能的交叉:未来智能科技的前沿与机遇

引言 随着科技的迅猛发展&#xff0c;脑科学与人工智能&#xff08;AI&#xff09;这两个看似独立的领域正在发生深刻的交汇。脑机接口、神经网络模型、智能机器人等前沿技术&#xff0c;正带来一场跨学科的革命。这种结合不仅推动了科技进步&#xff0c;也在医疗、教育、娱乐等…...

Linux | I.MX6ULL外设功能验证(11)

01 CSI 摄像头测试 I.MX6ULL 终结者开发板引出了一路 CSI 的摄像头接口,支持【007】的 OV5640 摄像头模块。首先我们连接OV5640 摄像头模块到开发板上,如下图所示(大家在连接的时候一定要注意方向,摄像头朝向开发板的内侧,千万不要接反):...

AI助手:Claude

一、简介 Claude 是由 Anthropic 公司开发的一款人工智能助手&#xff0c;类似于 OpenAI 的 ChatGPT。它以 Anthropic 提出的“宪法式 AI&#xff08;Constitutional AI&#xff09;”为核心设计理念&#xff0c;强调安全性、透明性和可控性。以下是对 Claude 的一个简要介绍&…...

vue项目proxy代理的方式

以下是一个详细的 Vue 项目配置 Proxy 代理 的示例和说明&#xff0c;用于解决开发环境跨域问题&#xff1a; 1. 基础代理配置 vue.config.js 配置文件 // vue.config.js module.exports {devServer: {proxy: {// 代理所有以 /api 开头的请求/api: {target: http://localhos…...

多项目并行时如何避免资源冲突

多项目并行时避免资源冲突需做到&#xff1a;精确的资源规划与调度、建立统一的资源管理体系、设置清晰的优先级策略、实时监控资源使用状况、优化团队沟通与协调。其中&#xff0c;精确的资源规划与调度尤其重要&#xff0c;它决定了项目资源能否高效利用&#xff0c;防止资源…...

求x的c(n,m)次方

近期看到一类很有趣的题啊&#xff0c;其最基础的表现形式为求 mod P的值。 所以我们来拿一道小例题讲讲。 题面&#xff1a;给定 x,n,m&#xff0c;求&#xff1a; mod 1000003471的值。 首先我们注意到&#xff0c;题目给定的模数1000003471为质数&#xff0c;根据费马…...

VS Code 的 .S 汇编文件里面的注释不显示绿色

1. 确认文件语言模式 打开 .S 文件后&#xff0c;查看 VS Code 右下角的状态栏&#xff0c;确认当前文件的识别模式&#xff08;如 Assembly、Plain Text 等&#xff09;。如果显示为 Plain Text 或其他非汇编模式&#xff1a; 点击状态栏中的语言模式&#xff08;如 Plain Te…...

Apipost自定义函数深度实战:灵活处理参数值秘籍

在开发过程中&#xff0c;为了更好地处理传递给接口的参数值&#xff0c;解决在调试过程中的数据处理问题&#xff0c;我们经常需要用到函数处理数据。 过去&#xff0c;我们通过预执行脚本来处理数据&#xff0c;先添加脚本&#xff0c;然后将处理后的结果再赋值给请求参数。…...

ADI的BF561双核DSP怎么做开发,我来说一说(十)驱动直流电机和步进电机

作者的话 ADI的双核DSP&#xff0c;最早的一颗是Blackfin系列的BF561&#xff0c;这颗DSP我用了很久&#xff0c;比较熟悉&#xff0c;且写过一些给新手的教程。 硬件准备 ADZS-BF561-EZKIT开发板&#xff1a;ADI原厂评估板 AD-ICE20000仿真器&#xff1a;ADI现阶段性能最好…...

JS包装类型Object

包装类型 1 对象 Object 声明普通对象 学习静态方法&#xff0c;只能由Object自己调用 1.获得所有属性 2.获得所有属性值 3.对象拷贝...

【C++初阶】--- vector容器功能模拟实现

1.什么是vector&#xff1f; 在 C 里&#xff0c;std::vector 是标准模板库&#xff08;STL&#xff09;提供的一个非常实用的容器类&#xff0c;它可以看作是动态数组 2.成员变量 iterator _start;&#xff1a;指向 vector 中第一个元素的指针。 iterator _finish;&#x…...

FreeRTOS项目工程完善指南:STM32F103C8T6系列

FreeRTOS项目工程完善指南&#xff1a;STM32系列 本文是FreeRTOS STM32开发系列教程的一部分。我们将完善之前移植的FreeRTOS工程&#xff0c;添加串口功能并优化配置文件。 更多优质资源&#xff0c;请访问我的GitHub仓库&#xff1a;https://github.com/Despacito0o/FreeRTO…...

多值字典表设计:优雅处理一对多关系的数据库方案

在数据库设计中,我们经常需要处理一对多的关系数据。传统做法是创建关联表,但有时这种方式会显得过于复杂。今天,我将分享一种简单而实用的多值字典表设计方案,它适用于那些不需要对单个值进行复杂操作的场景。 为什么需要多值字典表? 在许多应用场景中,我们需要存储一…...

如何在Linux系统Docker部署Dashy并远程访问内网服务界面

&#xfeff;## 简介 Dashy 是一个开源的自托管的导航页配置服务&#xff0c;具有易于使用的可视化编辑器、状态检查、小工具和主题等功能。你可以将自己常用的一些网站聚合起来放在一起&#xff0c;形成自己的导航页。一款功能超强大&#xff0c;颜值爆表的可定制专属导航页工…...

GRBL运动控制算法(五)脉冲生成Bresenham算法

前言 在数控系统和运动控制领域&#xff0c;脉冲信号的精确生成是实现高精度位置控制的核心。GRBL作为一款高效、开源的嵌入式运动控制固件&#xff0c;其底层脉冲生成机制直接决定了步进电机的运动平滑性、响应速度及整体性能。而这一机制的核心&#xff0c;正是经典的Bresen…...

Java学习手册:Java发展历史与版本特性

Java作为全球最流行的编程语言之一&#xff0c;其发展历程不仅见证了技术的演进&#xff0c;也反映了软件开发模式的变革。从1995年的首次发布到如今的持续更新&#xff0c;Java始终保持着强大的生命力和广泛的影响力。本文将简要回顾Java的发展历程&#xff0c;并重点介绍其关…...

25年时代电服社招入职Verify测评SHL题库语言理解数字推理考什么?

宁德时代语言理解 语言理解部分主要考察应聘者的语言表达和逻辑思维能力&#xff0c;题型包括阅读理解、逻辑填空和语句排序。阅读理解要求应聘者快速捕捉文章的主旨和细节信息&#xff0c;能够迅速把握文章的核心观点&#xff1b;逻辑填空需要在给定的语句中填入最合适的词汇…...

【C++】右值引用、移动语义与完美转发

左值、右值是C常见的概念&#xff0c;那么什么是右值引用&#xff0c;移动语义&#xff0c;完美转发呢&#xff1f;本UP带大家了解一下C校招常问的C11新特性。 左值与右值 左值&#xff1a;明确存储未知、可以取地址的表达式 右值&#xff1a;临时的、即将被销毁的&#xff…...

AIGC3——AIGC的行业应用与生产力变革:医疗、教育、影视与工业设计的突破

引言 人工智能生成内容&#xff08;AIGC&#xff09;技术正在深刻改变多个行业的生产方式&#xff0c;从医疗诊断到影视创作&#xff0c;从个性化教育到工业设计&#xff0c;其应用不仅提升了效率&#xff0c;还创造了全新的工作模式。本文将聚焦医疗、教育、影视、工业设计四…...

Java从入门到“放弃”(精通)之旅——启航①

&#x1f31f;Java从入门到“放弃 ”精通之旅&#x1f680; 今天我将要带大家一起探索神奇的Java世界&#xff01;希望能帮助到同样初学Java的你~ (๑•̀ㅂ•́)و✧ &#x1f525; Java是什么&#xff1f;为什么这么火&#xff1f; Java不仅仅是一门编程语言&#xff0c;更…...

Web前端之Vue+Element实现表格动态不同列合并多行、localeCompare、forEach、table、push、sort、Map

MENU 效果图公共数据数据未排序时&#xff08;需要合并的行数据未处于相邻位置&#xff09;固定合并行&#xff08;写死&#xff09;动态合并行方法&#xff08;函数&#xff09;执行 效果图 公共数据 Html <el-table :data"tableData" :span-method"chang…...

JavaScript(JS进阶)

目录 00闭包 01函数进阶 02解构赋值 03通过forEach方法遍历数组 04深入对象 05内置构造函数 06原型 00闭包 <!-- 闭包 --><html><body><script>// 定义&#xff1a;闭包内层函数&#xff08;匿名函数&#xff09;外层函数的变量&#xff08;s&…...

学习51单片机Day02---实验:点亮一个LED灯

目录 1.先看原理图 2.思考一下&#xff08;sbit的使用&#xff09;&#xff1a; 3.给0是要让这个LED亮&#xff08;LED端口设置为低电平&#xff09; 4.完成的代码 1.先看原理图 比如我们要让LED3亮起来&#xff0c;对应的是P2^2。 2.思考一下&#xff08;sbit的使用&…...

线性回归模型--California房价预测

#利用线性回归模型california房价预测 #调用API from sklearn.datasets import fetch_california_housing from sklearn.model_selection import train_test_split from sklearn.preprocessing import StandardScaler from sklearn.linear_model import LinearRegression,SGDRe…...

c++进阶之----异常

1. 异常处理的基本概念 异常处理是 C 中一种用于处理运行时错误的机制&#xff0c;允许程序在遇到错误时优雅地处理问题&#xff0c;而不是直接崩溃。异常处理的核心是通过 try、catch 和 throw 关键字来实现&#xff0c;它允许程序在遇到错误时优雅地处理问题&#xff0c;而不…...

SmolDocling:一种超紧凑的视觉语言模型,用于端到端多模态文档转换

paper地址:SmolDocling: An ultra-compact vision-language model for end-to-end multi-modal document conversion Huggingface地址:SmolDocling-256M-preview 代码对应的权重文件:SmolDocling-256M-preview权重文件 一、摘要 以下是文章摘要的总结: SmolDocling 是一…...

多模态大模型在目标检测领域的最新进展

1. 技术融合创新 多模态数据融合&#xff1a; 传感器融合&#xff1a;整合图像、激光雷达&#xff08;LiDAR&#xff09;、毫米波雷达等数据&#xff0c;提升检测精度和鲁棒性。例如&#xff0c;在自动驾驶中&#xff0c;通过融合视觉与LiDAR数据&#xff0c;实现三维目标检测…...

KWDB创作者计划—KWDB技术重构:重新定义数据与知识的神经符号革命

引言&#xff1a;数据洪流中的范式危机 在AI算力突破千卡集群、大模型参数量级迈向万亿的时代&#xff0c;传统数据库系统正面临前所未有的范式危机。当GPT-4展现出跨领域推理能力&#xff0c;AlphaFold3突破蛋白质预测精度时&#xff0c;数据存储系统却仍在沿用基于关系代数的…...

我开源了一个“宝藏”开源项目

我开源了一个“宝藏”开源项目 - AI需求分析项目 | 适合交作业和学习 &#x1f680; 前言 大家好&#xff01;最近在学习软件工程和大模型应用开发的过程中&#xff0c;我发现许多学生都遇到了需求分析AI的题目。把一份需求文档转化为用户故事、实体关系或数据库设计&#xff…...

从零实现Agent智能体配置使用(Ragflow)

从零实现Agent智能体配置使用&#xff08;Ragflow&#xff09; 1. 创建智能体2. 配置智能体2.1 配置问题识别2.2 配置问题分类2.3 不同问题进行单独配置2.4 保存Agent 3. 体验效果 1. 创建智能体 2. 配置智能体 2.1 配置问题识别 2.2 配置问题分类 2.3 不同问题进行单独配置 当…...

Fluent VOF水下固体火箭发射仿真

本案例利用VOF模型对水下固体火箭&#xff08;10m水深&#xff09;发动机点火初期的流场进行了仿真。该案例所用模型为假设模型&#xff0c;且缺少相关燃气参数&#xff0c;仅作计算设置参考。通过此案例后续跨可以对不同水深、不同模型的工况展开类似仿真计算。 1 假设说明 …...

电脑死机/锁屏后死机无法唤醒

电脑死机/锁屏后死机无法唤醒 导航 文章目录 电脑死机/锁屏后死机无法唤醒导航一、系统日志分析二、电源管理与睡眠模式问题1、禁用快速启动2、调整电源计划&#xff08;开启高性能模式&关闭硬盘休眠&#xff09;若是没有禁用睡眠和关闭显示器方法一&#xff1a;方法二&am…...

爱普生可编程晶振SG8201CJ和SG8200CJ在胃镜机器人发挥重要作用

在医疗机器人技术高速发展的今天&#xff0c;胃镜机器人作为胃肠道疾病诊断与治疗的创新设备&#xff0c;正逐渐改变传统诊疗模式。其复杂精密的系统需要精准的时间同步与稳定的信号输出&#xff0c;胃镜机器人是一种先进的医疗设备&#xff0c;用于无创性地检查胃部疾病。与传…...

按规则批量修改文件名称,支持替换或删除文件名称中的内容

文件重命名的需求在我们工作中是非常常见的一个需求&#xff0c;也非常的重要的一个需求&#xff0c;我相信很多小伙伴在工作中都会碰到需要进行文件重命名的场景。今天就给大家介绍一个文件重命名的方法&#xff0c;支持多种方式批量修改文件名称。功能非常的强大&#xff0c;…...

scrum详细理解

Scrum与传统瀑布模型区别 瀑布模型&#xff1a;需要花费几个月来规划产品----->在花费几个月时间进行研发----->产品测试、评审----->最终发布产品 缺点&#xff1a;①如果市场需求发生变化&#xff0c;研发的产品可能无法满足市场需求 ②产品规划必须早于后续工作之…...

数据结构(五)——AVL树(平衡二叉搜索树)

目录 前言 AVL树概念 AVL树的定义 AVL树的插入 右旋转 左旋转 左右双旋 右左双旋 插入代码如下所示 AVL树的查找 AVL树的遍历 AVL树的节点个数以及高度 判断平衡 AVL树代码如下所示 小结 前言 前面我们在数据结构中介绍了二叉搜索树&#xff0c;其中提到了二叉搜…...

Linux文件传输:让数据飞起来!

一、前置任务 为了便于实验&#xff0c;我用母盘的虚拟机克隆出两台虚拟机来模拟两台主机进行文件传输 查询两台主机的IP BL1 192.168.163.130/24 BL2 192.168.88.129/24 二、文件传输 scp命令 不填选项正常显示进度的传输-q静默传输-r递归传输&#xff08;用于传输目录及目…...

repo仓库文件清理

1. repo 仓库内文件清理 # 清理所有Git仓库中的项目 repo forall -c git clean -dfx # 重置所有Git 仓库中的项目 repo forall -c git reset --hard 解释&#xff1a; repo forall -c git clean -dfx&#xff1a; repo forall 是一个用于在所有项目中执行命令的工具。-c 后…...