C++并发编程-1 多路视频采集处理
之前搭建了tensorRT的基本框架,想着部署个yolo做多路视频的处理,现在没有真实的网络摄像头可供使用,临时采用RTSP+ffmpeg推流、Opencv拉流组个模拟。 推流 RTSP(Real-Time Streaming Protocol)用于在网络中控制流媒体服务器。RTSP 允许客户端(如媒体播放器)与服务器建立和控制流媒体会话,支持播放、暂停和停止等功能。他并不直接提供视频推流,需要结合ffmpeg一起。 RTSP服务器安装 下载mediamtx_v1.5.1_linux_amd64.tar.gz,解压,执行./mediamtx ffmpeg 安装 直接sudo安装即可:sudo apt install ffmpeg 为了同时推送多路视频,可以写sh脚本: 123456789101112131415161718192021222324252627282930#!/bin/bash# MediaMTX 服务器地址RTSP_URL="rtsp://localhost:8554"#...
TensorRT模型部署推理-2 动态批次
在上一篇博客里大概整理了tensorRT对于固定结构网络进行推理的的流程,在申请内存的时候可以通过engine_拿到输入输出的结构,从而申请对应的内存,将GPU与CPU的内存指针分别保存在device_ptr与host_ptr中,推理的时候将输入tensor数据传送到GPU的指定位置上,还要指定大小。 1const cudaError_t err = cudaMemcpyAsync(tensor.device_ptr, tensor.host_ptr, tensor.size, cudaMemcpyHostToDevice, stream_); 对于固定尺寸、固定批次的模型,这种方案是非常简单高效的,但是他的扩展性似乎不太行(我叫他扩展性,我不知道工业界叫他什么),就比如yolo模型部署,固定尺寸输入:1 * 3 * 640 * 640,一次只处理一张图像,如果想处理多路监控,还得多次部署,不光占用显存,还浪费了GPU的并行能力。所以还是希望他能做到动态的批次,让输入为:[?, 3, 640,...
TensorRT模型部署推理-1 基本流程
pytorch的推理速度常被人诟病,在生产环境中会采用一些特殊的格式去部署,常见的有onnx的静态图,适用性广,在unity3D中也可以直接用,在此之上还可以进一步做优化,具体到硬件层面,有英伟达的GPU,华为的昇腾,各家在静态图的基础上又做了些工作,比如层融合。由于手头没有华为的板子,再 结合上次玩过香橙派的经验,此次就尝试用tensorRT做OCR模型的部署推理,在此基础上用C++搭建web服务,正好接入前段时间做的档案系统。 开发环境 CUDA Toolkit + cudnn + tensorRT,注意版本对应即可,认准cuda版本。 安装过程可参考: https://blog.csdn.net/weixin_44822312/article/details/148653179 https://www.cnblogs.com/wanqieddy/p/17581996.html 第一个博客中介绍了vllm在wsl中的部署方法,包括了安装wsl的过程与CUDA...
若依集成单点登录
前言:本文基于若依前后端分离版本(Spring Boot 3.3.0 + Vue 3 + Activiti 8.1.0)进行改造,相关教程可以在网上找到。在撰写此博客期间,笔者刚刚开始接触 Java Web,本系列下的文章内容包含大量“个人初期”视角,注意鉴别。 背景补充 单点登录(Single Sign-On, SSO) 是一种身份验证机制,允许用户通过一次登录访问多个相互信任的子系统。例如,用户登录企业内部门户后,可直接访问OA、CRM等系统而无需重复输入凭证。常见的SSO协议包括CAS、OAuth2、SAML等。本文实现的是一种简化的SSO逻辑,通过第三方系统颁发的Token直接完成若依系统的身份认证。 Spring Security...
数据库迁移:MySQL -> 人大金仓
前言:本文基于若依前后端分离版本(Spring Boot 3.3.0 + Vue 3 + Activiti 8.1.0)进行改造,相关教程可以在网上找到。在撰写此博客期间,笔者刚刚开始接触 Java Web,本系列下的文章内容包含大量“个人初期”视角,注意鉴别。 人大金仓? Kingbase是基于开源数据库PostgreSQL开发的国产数据库。 所以在后续的开发中,将人大金仓视作PostgreSQL就可以解决大多数问题(这个想法对于海量数据库Vastbase是不是也是成立的?) 安装 人大金仓,一路下一步,全部安装,其中有一步骤是添加license,在下载页面也有授权文件的下载,选择开发版就好,安装好后就能看到三个软件工具: 初步使用 运行:数据库开发管理工具。界面跟Navicat、MySQL Workbench有些像: 创建连接、创建数据库的过程还是相当相似的,不过多赘述,但是相比MySQL的数据库,多了模式这一层级。可以把它理解成一个命名空间,也就是说kingbase的数据库相对是一个更加大的集合。 mysql:...
护肤!战痘!
前言:毕竟不是相关专业的,处于兴趣与个人想收拾好看些的想法,初步探索了些护肤的方法。写完回头看都快成软广了…… 核心似乎是水油平衡,缺水或许也会导致过油,所以我的想法是补水+控油 控油:避免过度清洁,适当用酸,水杨酸、杏仁酸等,及时补水, 早晨:维生素E乳+珀莱雅双抗+保湿面霜薄涂。 晚上:洁面后生理盐水湿敷,清水再洗一次,不宜每天进行。 出于美白和去痘印的需要,晚上洁面补水之后,我会用达尔夫杏仁酸8%、欧邦琪VC15%浓度,酸隔天用,VC每晚。 在用这些酸和VC前两个月,先用珀莱雅源力精华修护了一段时间。 痘痘 浅表有脓头的,等待成熟,挤出就好,点涂夫西地酸乳膏(避免感染留印) 无脓头深处硬块:不要挤!夫西地酸乳膏局部范围稍大一些+阿达帕林凝胶(点涂,每晚一次),抗菌+疏通毛孔。似乎需要很长时间…… 痘印 红痘印:皮肤的炎症反应,消炎就好。积雪苷霜软膏(有些油腻)、复方多磺酸黏多糖(这个我用在点痣2个月之后的红印上似乎也有用) 黑痘印:炎症期间没做防晒,导致的黑色素沉积,需要好几月处理,酸和美白的类产品一起用,我正在奋战嘴角附近的一个,不知还要多久…… ...
数据库分离
前言:本文基于若依前后端分离版本(Spring Boot 3.3.0 + Vue 3 + Activiti 8.1.0)进行改造,相关教程可以在网上找到。在撰写此博客期间,笔者刚刚开始接触 Java Web,本系列下的文章内容包含大量“个人初期”视角,注意鉴别。 为啥要配置多数据源? 业务、流程、系统相关数据库进行分离,免得一次性全炸了,当然商业软件可能会更多的考量,比如数据备份、读写分离等等安全性的考虑,目前的想法出于业务分离的考量,再同样的系统上集成其他业务,就不需要重新搞用户、部门等数据表。 怎么配? 若依项目本身就集成了多数据源的配置,在alllication.yml中就有: 1234567891011121314151617181920spring: datasource: druid: # 主库数据源 master: url:...
用户登录与Redis
前言:本文基于若依前后端分离版本(Spring Boot 3.3.0 + Vue 3 + Activiti 8.1.0)进行改造,相关教程可以在网上找到。在撰写此博客期间,笔者刚刚开始接触 Java Web,本系列下的文章内容包含大量“个人初期”视角,注意鉴别。 前端登录过程 前端使用store管理用户user状态,其中有一个状态变更逻辑的方法(说人话:登录操作):login,通过用户名、密码、验证码、uuid四个参数像后端发送账户信息进行登录操作,其中的uuid通过getCodeImg获取,返回值为:验证码图像与uuid。 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849@GetMapping("/captchaImage")public AjaxResult getCode(HttpServletResponse response) throws IOException{ AjaxResult ajax =...
数组
数组基本概念 基本定义 线性结构 相同类型 固定大小 特点 访问速度快:O(1)O(1)O(1) 插入与删除效率低,需要移动其他元素,时间复杂度O(n)O(n)O(n) 备注 在C++中,需要区分vector与array,vector底层为array,其本身严格讲为:容器。 常见算法与代码 二分查找 对于nnn个元素的有序数组numsnumsnums与目标值targettargettarget,查找数组中是否存在目标值,如果存在,返回目标元素下标。数组元素不重复,下标唯一。 12345678910111213141516171819202122232425class Solution {public: int search(vector<int>& nums, int target) { int left = 0; int right = nums.size() - 1; while (left <= right) { ...
前端总体概述
前言:本文基于若依前后端分离版本(Spring Boot 3.3.0 + Vue 3 + Activiti 8.1.0)进行改造,相关教程可以在网上找到。在撰写此博客期间,笔者刚刚开始接触 Java Web,本系列下的文章内容包含大量“个人初期”视角,注意鉴别。 项目文件夹预览 前端项目的基本目录结构我将参照若依,但是具体的演示截图,我将使用我自己的项目。一般情况下我们只需要看下图中的四个部分就可以,下文依次进行。 依赖——package.json 此部分并无过多解释,重点集在依赖项的书写方式、版本对应关系,引擎打包工具等设定,基于ruoyi的二次开发的情况下,可以暂且不深入研究,直接套用即可。截取部分展示。 1234567891011121314151617181920212223"scripts": { "dev": "vite", "build:prod": "vite build", "build:stage":...