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

yolov5+bytetrack算法在华为NPU上进行端到端开发

        自从毕业后开始进入了华为曻腾生态圈,现在越来越多的公司开始走国产化路线了,现在国内做AI芯片的厂商比如:寒武纪、地平线等,虽然我了解的不多,但是相对于瑞芯微这样的AI开发板来说,华为曻腾的生态比瑞芯微好太多了,参考文档非常多,学习资料也有很多,也容易上手开发。

华为曻腾官网:昇腾AI应用案例-昇腾社区 (hiascend.com)

        直接步入正题,现在的目标检测已经很成熟了,所以越来越多的公司会用到基于检测的跟踪算法,这样不仅起到了单一检测功能,还有跟踪目标或者计数的功能;

        现在应用较广泛的目标检测算法从最开始的yolov5一直到现在的yolov8,虽然只是简单的看了一下算法的原理,整体来说yolo的更新还是针对神经网络在GPU上的优化加速,而对比曻腾NPU,yolov5的速度还是在其他yolo算法中速度最快的一个;

        目标跟踪算法以前是sort+yolo,deepsort+yolo,bytetrack,fairmot等算法,本章主要介绍如何利用华为的ACL语言+ffmpeg推流进行整个业务的开发流程,大家可以借鉴下面的开发代码,首先你要具备基本的ACL语言知识,以及yolov5的后处理逻辑,跟踪方面直接借鉴开源作者的卡尔曼滤波进行预测更新即可:参考主函数代码如下:

//1.先测试yolov5_nms可以泡桐?
//使用dvpp+aipp编解码再使用opencv进行#include<iostream>#include"acl/acl.h"
#include "opencv2/opencv.hpp"
#include "opencv2/imgproc/types_c.h"
#include "acllite/AclLiteUtils.h"
#include "acllite/AclLiteError.h"
#include "acllite/AclLiteResource.h"
#include "acllite/AclLiteModel.h"
#include "acllite/AclLiteImageProc.h"
#include "AclLiteVideoProc.h"
#include "AclLiteVideoCapBase.h"
#include "BYTETracker.h"
#include <chrono>
extern"C" {#include <libavutil/mathematics.h>#include <libavutil/time.h>#include "libavcodec/avcodec.h"#include "libavformat/avformat.h"#include "libswscale/swscale.h"#include "libavutil/imgutils.h"#include "libavutil/opt.h"
};
using namespace std;
using namespace cv;
typedef struct box {float x;float y;float w;float h;float score;size_t classIndex;size_t index; // index of output buffer
} box;
namespace{int a  = 0;
}
int main()
{//1.定义初始化变量dvpp\model\acl\rtsp解码接口capAclLiteResource aclDev;aclrtRunMode g_runMode_;AclLiteVideoProc* cap_;AclLiteImageProc g_dvpp_;AclLiteModel g_model_;string streamName_;streamName_ = "rtsp://admin:ascend666@10.1.16.108/LiveMedia/ch1/Media1";//ffmpeg初始化AVFormatContext* g_fmtCtx;AVCodecContext* g_codecCtx;AVStream* g_avStream;AVCodec* g_codec;AVPacket* g_pkt;AVFrame* g_yuvFrame;uint8_t* g_yuvBuf;AVFrame* g_rgbFrame;uint8_t* g_brgBuf;int g_yuvSize;int g_rgbSize;struct SwsContext* g_imgCtx;
//参数初始化
//rtsp初始化g_avStream = NULL;g_codec = NULL;g_codecCtx = NULL;g_fmtCtx = NULL;g_pkt  = NULL;g_imgCtx = NULL;g_yuvSize = 0;g_rgbSize = 0;int picWidth = 416;int picHeight = 416;string rtsp_url = "rtsp://192.168.3.38:8554/stream";int channelId = 0;string g_outFile = rtsp_url + to_string(channelId);
//rtsp初始化avformat_network_init();if (avformat_alloc_output_context2(&g_fmtCtx, NULL, g_avFormat.c_str(), g_outFile.c_str()) < 0) {ACLLITE_LOG_ERROR("Cannot alloc output file context");return ACLLITE_ERROR;}av_opt_set(g_fmtCtx->priv_data, "rtsp_transport", "tcp", 0);av_opt_set(g_fmtCtx->priv_data, "tune", "zerolatency", 0);av_opt_set(g_fmtCtx->priv_data, "preset", "superfast", 0);//获取编码器的ID返回一个编码器g_codec = avcodec_find_encoder(AV_CODEC_ID_H264);if (g_codec == NULL) {ACLLITE_LOG_ERROR("Cannot find any endcoder");return ACLLITE_ERROR;}g_codecCtx = avcodec_alloc_context3(g_codec);if (g_codecCtx == NULL) {ACLLITE_LOG_ERROR("Cannot alloc context");return ACLLITE_ERROR;}//创建流g_avStream = avformat_new_stream(g_fmtCtx, g_codec);if (g_avStream == NULL) {ACLLITE_LOG_ERROR("failed create new video stream");return ACLLITE_ERROR;}//设置帧率g_avStream->time_base = AVRational{1, g_frameRate};//设置编码参数AVCodecParameters* param = g_fmtCtx->streams[g_avStream->index]->codecpar;param->codec_type = AVMEDIA_TYPE_VIDEO;param->width = picWidth;param->height = picHeight;avcodec_parameters_to_context(g_codecCtx, param);//参数绑定设置g_codecCtx->pix_fmt = AV_PIX_FMT_NV12;g_codecCtx->time_base = AVRational{1, g_frameRate};g_codecCtx->bit_rate = g_bitRate;g_codecCtx->gop_size = g_gopSize;g_codecCtx->max_b_frames = 0;if (g_codecCtx->codec_id == AV_CODEC_ID_H264) {g_codecCtx->qmin = 10;g_codecCtx->qmax = 51;g_codecCtx->qcompress = (float)0.6;}if (g_codecCtx->codec_id == AV_CODEC_ID_MPEG1VIDEO)g_codecCtx->mb_decision = 2;//初始化codeif (avcodec_open2(g_codecCtx, g_codec, NULL) < 0) {ACLLITE_LOG_ERROR("Open encoder failed");return ACLLITE_ERROR;}//g_codecCtx参数传递给codecparavcodec_parameters_from_context(g_avStream->codecpar, g_codecCtx);//指定输出数据的形式av_dump_format(g_fmtCtx, 0, g_outFile.c_str(), 1);//写文件头int ret1 = avformat_write_header(g_fmtCtx, NULL);if (ret1 != AVSTREAM_INIT_IN_WRITE_HEADER) {ACLLITE_LOG_ERROR("Write file header fail");return ACLLITE_ERROR;}g_pkt = av_packet_alloc();//传输数据初始化g_rgbFrame = av_frame_alloc();g_yuvFrame = av_frame_alloc();g_rgbFrame->width = g_codecCtx->width;g_yuvFrame->width = g_codecCtx->width;g_rgbFrame->height = g_codecCtx->height;g_yuvFrame->height = g_codecCtx->height;g_rgbFrame->format = AV_PIX_FMT_BGR24;g_yuvFrame->format = g_codecCtx->pix_fmt;g_rgbSize = av_image_get_buffer_size(AV_PIX_FMT_BGR24, g_codecCtx->width, g_codecCtx->height, 1);g_yuvSize = av_image_get_buffer_size(g_codecCtx->pix_fmt, g_codecCtx->width, g_codecCtx->height, 1);g_brgBuf = (uint8_t*)av_malloc(g_rgbSize);g_yuvBuf = (uint8_t*)av_malloc(g_yuvSize);//内存分配int ret2 = av_image_fill_arrays(g_rgbFrame->data, g_rgbFrame->linesize,g_brgBuf, AV_PIX_FMT_BGR24,g_codecCtx->width, g_codecCtx->height, 1);ret2 = av_image_fill_arrays(g_yuvFrame->data, g_yuvFrame->linesize,g_yuvBuf, g_codecCtx->pix_fmt,g_codecCtx->width, g_codecCtx->height, 1);g_imgCtx = sws_getContext(g_codecCtx->width, g_codecCtx->height, AV_PIX_FMT_BGR24,g_codecCtx->width, g_codecCtx->height, g_codecCtx->pix_fmt,SWS_BILINEAR, NULL, NULL, NULL);//2.类变量初始化AclLiteError ret = aclDev.Init();if (ret) {ACLLITE_LOG_ERROR("Init resource failed, error %d", ret);return ACLLITE_ERROR;}if (ACLLITE_OK != OpenVideoCapture()) {return ACLLITE_ERROR;}ret = g_dvpp_.Init();if (ret) {ACLLITE_LOG_ERROR("Dvpp init failed, error %d", ret);return ACLLITE_ERROR;}cap_ = nullptr;ret = g_model_.Init();if (ret) {ACLLITE_LOG_ERROR("Model init failed, error %d", ret);return ACLLITE_ERROR;}//3.创建模型img_info的输入以及数据拷贝操作g_runMode_ = g_aclDev_.GetRunMode();const float imageInfo[4] = {(float)g_modelInputWidth, (float)g_modelInputHeight,(float)g_modelInputWidth, (float)g_modelInputHeight};g_imageInfoSize_ = sizeof(imageInfo);g_imageInfoBuf_ = CopyDataToDevice((void *)imageInfo, g_imageInfoSize_,g_runMode_, MEMORY_DEVICE);if (g_imageInfoBuf_ == nullptr) {ACLLITE_LOG_ERROR("Copy image info to device failed");return ACLLITE_ERROR;}//4.获取视频源cap_ = new AclLiteVideoProc(streamName_);//5.视频流解码以及dvpp硬件-resizeint i =0;while(true){//6.获取解码图片(在device侧的YUV420图片)(存放在ImageDta结构体中)
//         struct ImageData {
//     acldvppPixelFormat format;
//     uint32_t width = 0;
//     uint32_t height = 0;
//     uint32_t alignWidth = 0;
//     uint32_t alignHeight = 0;
//     uint32_t size = 0;
//     std::shared_ptr<uint8_t> data = nullptr;
// };
i++;ImageData image;ret = cap_->Read(image);ImageData resizedImage;ret = g_dvpp_.Resize(resizedImage, image, 640, 640);//7.创建模型输入进行模型推理ret = g_model_.CreateInput(resizedImage.data.get(), resizedImage.size,g_imageInfoBuf_, g_imageInfoSize_);if (ret != ACLLITE_OK) {ACLLITE_LOG_ERROR("Create mode input dataset failed, error:%d", ret);return ACLLITE_ERROR;}std::vector<InferenceOutput> inferenceOutput;ret = g_model_.Execute(inferenceOutput);if (ret != ACLLITE_OK) {g_model_.DestroyInput();ACLLITE_LOG_ERROR("Execute model inference failed, error: %d", ret);return ACLLITE_ERROR;}g_model_.DestroyInput();//8.将YUV图像转换为opencv图像ImageData yuvImage;ret = CopyImageToLocal(yuvImage, image, g_runMode_);if (ret == ACLLITE_ERROR) {ACLLITE_LOG_ERROR("Copy image to host failed");return ACLLITE_ERROR;}cv::Mat yuvimg(yuvImage.height * 3 / 2, yuvImage.width, CV_8UC1, yuvImage.data.get());cv::Mat origImage;cv::cvtColor(yuvimg, origImage, CV_YUV2BGR_NV12);//模型后处理(根据目标跟踪需要的输入进行获取xywh)float* detectData = (float *)inferenceOutput[0].data.get();float* boxNum = (float *)inferenceOutput[1].data.get();uint32_t totalBox = boxNum[0];//获取(x,y,w,h) std::vector<Object> obj;float widthScale = (float)(origImage.cols) / 640.0;float heightScale = (float)(origImage.rows) / 640.0;vector<box> detectResults;for (uint32_t i = 0; i < totalBox; i++) {box boundBox;boundBox.score = float(detectData[totalBox * SCORE + i]);boundBox.x = detectData[totalBox * TOPLEFTX + i] * widthScale;boundBox.y = detectData[totalBox * TOPLEFTY + i] * heightScale;boundBox.w = detectData[totalBox * BOTTOMRIGHTX + i] * widthScale;boundBox.h = detectData[totalBox * BOTTOMRIGHTY + i] * heightScale;boundBox.classIndex = (uint32_t)detectData[totalBox * LABEL + i];detectResults.emplace_back(boundBox);}for (size_t i = 0; i < detectResults.size(); i++){if (res[i].classId != class_id){ continue; }obj[i].label = detectResults[i].classIndex;obj[i].rect.x = detectResults[i].x;obj[i].rect.y = detectResults[i].y;obj[i].rect.height = detectResults[i].h;obj[i].rect.width = detectResults[i].w;obj[i].prob = detectResults[i].score;}std::vector<STrack> output_stracks = tracker.update(obj);for (size_t i = 0; i < output_stracks.size(); i++){std::vector<float> tlwh = output_stracks[i].tlwh;cv::Scalar __color = tracker.get_color(output_stracks[i].track_id);cv::putText(origImage, std::to_string(output_stracks[i].track_id), cv::Point(tlwh[0], tlwh[1] - 10), cv::FONT_ITALIC, 0.75, __color, 2);cv::rectangle(origImage, cv::Rect(tlwh[0], tlwh[1], tlwh[2], tlwh[3]), __color, 2);    }//跟踪完成后写推流memcpy(g_brgBuf, origImage.data, g_rgbSize);sws_scale(g_imgCtx,g_rgbFrame->data,g_rgbFrame->linesize,0,g_codecCtx->height,g_yuvFrame->data,g_yuvFrame->linesize);g_yuvFrame->pts = i;if (avcodec_send_frame(g_codecCtx, g_yuvFrame) >= 0) {// cout<<a<<endl;while (avcodec_receive_packet(g_codecCtx, g_pkt) >= 0) {cout<<"avcodec_receive_packet"<<endl;g_pkt->stream_index = g_avStream->index;av_packet_rescale_ts(g_pkt, g_codecCtx->time_base, g_avStream->time_base);g_pkt->pos = -1;int ret = av_interleaved_write_frame(g_fmtCtx, g_pkt);if (ret < 0) {ACLLITE_LOG_ERROR("error is: %d", ret);}}}}av_packet_free(&g_pkt);avcodec_close(g_codecCtx);if (g_fmtCtx) {avio_close(g_fmtCtx->pb);avformat_free_context(g_fmtCtx);}if (cap_ != nullptr) {cout << "cap is not open" << endl;cap_->Close();delete cap_;}dvpp_.DestroyResource();return 0;
}

跟踪器方面的函数,可以搜索开源代码yolov5-bytetrack-main.cpp截取内部跟踪部分,检测部分使用华为ACL编写的推理代码进行检测;

可以加入学习讨论:1076799627

相关文章:

yolov5+bytetrack算法在华为NPU上进行端到端开发

自从毕业后开始进入了华为曻腾生态圈&#xff0c;现在越来越多的公司开始走国产化路线了&#xff0c;现在国内做AI芯片的厂商比如&#xff1a;寒武纪、地平线等&#xff0c;虽然我了解的不多&#xff0c;但是相对于瑞芯微这样的AI开发板来说&#xff0c;华为曻腾的生态比瑞芯微…...

【Java-LangChain:使用 ChatGPT API 搭建系统-1】简介

简介 欢迎来到课程《使用 ChatGPT API 搭建系统》 , 旨在指导开发者如何基于 ChatGPT 搭建完整的智能问答系统。 使用 ChatGPT 不仅仅是一个单一的 Prompt 或单一的模型调用&#xff0c;本课程将分享使用 LLM 构建复杂应用的最佳实践。 本课程以构建客服助手为例&#xff0c…...

BJT晶体管

BJT晶体管也叫双极结型三极管&#xff0c;主要有PNP、NPN型两种&#xff0c;符号如下&#xff1a; 中间的是基极&#xff08;最薄&#xff0c;用于控制&#xff09;&#xff0c;带箭头的是发射极&#xff08;自由电子浓度高&#xff09;&#xff0c;剩下的就是集电极&#xff0…...

ORACLE中SQL运算符的优先级

SQL运算符优先级: 注&#xff1a; 1、可以使用括号改变优先级顺序 2、可以看出OR的优先级最低&#xff0c;算术运算符的优先级最高 另&#xff1a;操作符优先级 * / - 1、乘除的优先级高于加减&#xff1b; 2、同一优先级运算符从左向右执行&#xff1b; 3、括号内的…...

springboot和vue:十一、Axios网络请求的安装引入与使用、跨域问题解决(CORS)

Axios简介与安装 Axios是一个基于promise的网络请求库&#xff0c;作用于node.js和浏览器中Axios在浏览器端使用XMLHttpRequests发送网络请求&#xff0c;并自动完成json数据的转换安装&#xff1a;npm install axios官方文档&#xff1a;https://www.axios-http.cn/ Axios基…...

外汇天眼:真实记录,投资者在盗版MT4平台SCE Group上做交易的经历!

外汇市场是全球最大的金融市场&#xff0c;比起其他市场有着更多天然的优势&#xff0c;但也因为资讯的不对等&#xff0c;导致很多人上当受骗。而在外汇市场上最常见的骗局之一&#xff0c;就是黑平台使用盗版MT4/5交易软件&#xff0c;因为截至目前MT4/5仍是外汇市场交易使用…...

FFmpeg 命令:从入门到精通 | ffmpeg 命令视频录制

FFmpeg 命令&#xff1a;从入门到精通 | ffmpeg 命令视频录制 FFmpeg 命令&#xff1a;从入门到精通 | ffmpeg 命令视频录制安装软件&#xff1a;Screen Capturer Recorder查看可用设备名字音视频录制录制视频&#xff08;默认参数&#xff09;录制声音&#xff08;默认参数&am…...

html 笔记:CSS

1 什么是CSS CSS 指层叠样式表 (Cascading Style Sheets) 样式定义如何显示 HTML 元素样式通常存储在样式表中 1.1 css的语法格式 1.1.1 选择器种类 HTML选择器&#xff1a; 重新定义HTML的某种标签的显示格式id选择器 对于HTML文档中的某个标签&#xff0c;定义它的显示格式…...

【LeetCode - 每日一题】901. 股票价格跨度(23.10.07)

901. 股票价格跨度 题意 设计一个数据结构返回股票当日价格的跨度&#xff08;必须是当日开始的&#xff09; 解法 暴力 优化 一开始没理解题意&#xff0c;以为是求第 i 天及以前&#xff0c;小于等于 prices[i] 的最大连续子串的长度。后来才发现&#xff0c;这个最大连…...

第二证券:突发!A股T+0?刚刚,紧急回应!

沪深生意所急迫回应 6日&#xff0c;商场传出一个消息&#xff0c;传延伸A股生意时刻和部分票可日内T0一次。一个版本是提早至9点&#xff0c;然后下午延伸至15&#xff1a;30&#xff0c;另一个版本是上午推延至12点&#xff0c;下午延伸至16&#xff1a;00。 7日&#xff0…...

ShardingSphereJDBC5.4.0支持Nacos配置(SpringCloud版)

背景 在ShardingSphere在5.3.0版本之前&#xff0c;我们可以通过依赖shardingsphere-jdbc-core-spring-boot-starter模块&#xff0c;在application.yml文件里配置数据库连接信息。再结合spring-cloud-starter-alibaba-nacos-config&#xff0c;在项目启动时&#xff0c;从Nac…...

基于SSM的学院学生论坛系统的设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用Vue技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…...

Unity记录5.4-地图-带种子的柏林噪声

文章首发见博客&#xff1a;https://mwhls.top/4850.html。 无图/格式错误/后续更新请见首发页。 更多更新请到mwhls.top查看 欢迎留言提问或批评建议&#xff0c;私信不回。 汇总&#xff1a;Unity 记录 现在卡在了跨地图洞穴生成&#xff0c;没想到什么好的方法能够像地面一样…...

阅读论文:Label-Free Liver Tumor Segmentation

论文标题&#xff1a;Label-Free Liver Tumor Segmentation 翻译&#xff1a;无标记的肝肿瘤分割 摘要 论文的目的&#xff1a;肿瘤合成&#xff0c;通过使用合成数据来改进医学图像分析和AI在肝脏肿瘤检测方面的性能 我们的主要贡献是合成了一种肿瘤生成器&#xff0c;它提…...

leetcode64 最小路径和

题目 给定一个包含非负整数的 m x n 网格 grid &#xff0c;请找出一条从左上角到右下角的路径&#xff0c;使得路径上的数字总和为最小。 说明&#xff1a;每次只能向下或者向右移动一步。 示例 输入&#xff1a;grid [[1,3,1],[1,5,1],[4,2,1]] 输出&#xff1a;7 解释&a…...

金盘图书馆微信管理后台信息泄露漏洞 复现

金盘图书馆微信管理后台信息泄露漏洞 复现 0x01 前言 免责声明&#xff1a;请勿利用文章内的相关技术从事非法测试&#xff0c;由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失&#xff0c;均由使用者本人负责&#xff0c;所产生的一切不良后果…...

nginx实现负载均衡(三)

之前说过大部分我们用到的配置都是在http模块中配置的&#xff0c;这里要实现的负载均衡也是一样的&#xff0c;要在http模块中的http全局块中指定&#xff0c;这里我们先给出一个例子 demo #user nobody; worker_processes 1;#error_log logs/error.log; #error_log log…...

Android---深入理解ClassLoader的加载机制

目录 Java 中的 ClassLoader 1. APPClassLoader 系统类加载器 2. ExtClassLoader 扩展类加载器 3. BootstrapClassLoader 启动类加载器 双亲委派模式(Parents Delegation Model) Android 中的 ClassLoader 1. PathClassLoader 2. DexClassLoader 总结 一个完整的 Java…...

超自动化加速落地,助力运营效率和用户体验显著提升|爱分析报告

RPA、iPaaS、AI、低代码、BPM、流程挖掘等在帮助企业实现自动化的同时&#xff0c;也在构建一座座“自动化烟囱”。自动化工具尚未融为一体&#xff0c;协同价值没有得到释放。Gartner于2019年提出超自动化&#xff08;Hyperautomation&#xff09;概念&#xff0c;主要从技术组…...

Linux posix_spawn和fork的区别

posix_spawn和fork都是用于在Linux中创建新进程的函数&#xff0c;但它们的工作方式有所不同。posix_spawn它的工作方式类似于fork()后跟exec()。 fork&#xff1a;fork函数创建一个新的进程&#xff0c;该进程是调用进程的一个副本。这意味着除了必要的启动资源外&#xff0c;…...

聊聊分布式架构02——Http到Https

目录 HTTP通信协议 请求报文 响应报文 持久连接 状态管理 HTTPS通信协议 安全的HTTPS HTTP到HTTPS的演变 对称加密 非对称加密 混合加密机制 证书机构 SSL到底是什么 HTTPS是身披SSL外壳的HTTP HTTP通信协议 一次HTTP请求的通信流程&#xff1a;客户端浏览器通过…...

1024 画跳动的爱心#程序代码 #编程语言 #计算机

废话不多说 直接开干! 用到库 random time tkinter 快速镜像 pip install -i https://pypi.tuna.tsinghua.edu.cn/simple tkinter 上代码 import random import time from math import sin, cos, pi, log from tkinter import *CANVAS_WIDTH 640 # 画布的宽 CANVAS_HEIGH…...

【排序算法】堆排序详解与实现

一、堆排序的思想 堆排序(Heapsort)是指利用堆积树&#xff08;堆&#xff09;这种数据结构所设计的一种排序算法&#xff0c;它是选择排序的一种。它是通过堆&#xff08;若不清楚什么是堆&#xff0c;可以看我前面的文章&#xff0c;有详细阐述&#xff09;来进行选择数据&am…...

java Spring Boot整合jwt实现token生成

先在 pom.xml 文件中注入依赖 <!-- JWT --> <dependency><groupId>io.jsonwebtoken</groupId><artifactId>jjwt-api</artifactId><version>0.11.2</version> </dependency> <dependency><groupId>io.jsonw…...

如何使用Git和GitHub进行版本控制

如何使用Git和GitHub进行版本控制 版本控制是软件开发过程中的重要组成部分&#xff0c;它允许开发者跟踪和管理代码的变化&#xff0c;以确保团队协作顺畅&#xff0c;并帮助在需要时回溯到以前的代码状态。Git和GitHub是最流行的版本控制工具之一&#xff0c;本文将介绍如何…...

彻底解决 WordPress cURL error 28 错误

cURL 连接超时。 这种情况最普遍&#xff0c;这里的超时并不是完全不可连接&#xff0c;而是因为网络状况或其它原因数据传输缓慢&#xff0c;超过连接的时间限制导致传输中断引起的错误。 不论是何种原因导致连接超时&#xff0c;都可以通过增加超时限制来解决此问题。但 UR…...

LLM项目代码改写

背景&#xff1a; 最近在做代码大语言模型生成项目代码的课题。代码生成现在大部分的工作是在做即时代码生成&#xff0c;这个有点类似代码智能提示&#xff0c;只不过生成的可能是一段片段代码&#xff1b;然而对于整个项目代码的生成做的团队并不多&#xff0c;原因大致如下…...

小谈设计模式(14)—建造者模式

小谈设计模式&#xff08;14&#xff09;—建造者模式 专栏介绍专栏地址专栏介绍 建造者模式角色分类产品&#xff08;Product&#xff09;抽象建造者&#xff08;Builder&#xff09;具体建造者&#xff08;Concrete Builder&#xff09;指挥者&#xff08;Director&#xff0…...

【kubernetes】k8s中的选主机制

leader-election选主机制 1 为什么需要leader-election&#xff1f; 在集群中存在某种业务场景&#xff0c;一批相同功能的进程同时运行&#xff0c;但是同一时刻&#xff0c;只能有一个工作&#xff0c;只有当正在工作的进程异常时&#xff0c;才会由另一个进程进行接管。这…...

学生选课系统基础版

第四章java中的集合框架 4.1&#xff1a;java中的集合框架概述 1.java概念与作用 现实中很多事物凑在一起都是集合 如购物车是商品的集合 军队呢 是军人的集合 学校是学生的结合 数学中的集合&#xff1a; 具有共同属性的事物的总体 java中的集合类呢 跟数学的集…...

广州机械网站建设/营销app

工作窃取在本系列的第一部分中&#xff0c;您学习了足够JavaScript和CSS来使动画角色在浏览器中移动。 在本文中&#xff0c;我将探讨一些计算机游戏技术&#xff0c;这些技术将使我们能够对多个精灵进行动画处理&#xff0c;并使它们彼此交互。 如果您想在家中试用此代码&…...

暴雪网易2023后不代理了/seo外包费用

查看自己的ip和采用什么方式上网(网通/电信)http://www.whatchina.com/html/sip.asp本文转自 xcf007 51CTO博客&#xff0c;原文链接&#xff1a;http://blog.51cto.com/xcf007/161180&#xff0c;如需转载请自行联系原作者...

小程序推广网站/百度网络推广怎么收费

中石油校内的比赛&#xff0c;只能后续补题了&#xff0c;题目来说还是比较的不错 A 数方格&#xff08;思维&#xff09; 规定了都是正方形&#xff0c;那么枚举就可以一行的按照规律也好枚举列数也好枚举 代码 #include <bits/stdc.h> using namespace std; int main()…...

陕西省住房城乡建设部门户网站/外包公司什么意思

缓存区溢出漏洞工具DoonaDoona是缓存区溢出漏洞工具BED的分支。它在BED的基础上&#xff0c;增加了更多插件&#xff0c;如nttp、proxy、rtsp、tftp等。同时&#xff0c;它对各个插件扩充了攻击载荷&#xff0c;这里也称为模糊用例&#xff08;fuzz case&#xff09;&#xff0…...

国内做的好网站有哪些/关键词推广seo怎么优化

按天备份 按周备份 mysql的mysqldump备份什么时候能派上用场1&#xff0c;迁移或者升级数据库时2&#xff0c;增加从库的时候3&#xff0c;如果因为硬件或特殊情况&#xff0c;主库或者从库宕机&#xff0c;主从可以互相切换&#xff0c;无需备份4&#xff0c;人为的DDL,DML语句…...

网站建设需要资料/营销方案案例范文

MD5的全称是Message-Digest Algorithm 5&#xff0c;在90年代初由MIT的计算机科学实验室和RSA Data Security Inc发明&#xff0c;经MD2、MD3和MD4发展而来。 MD5将任意长度的“字节串”变换成一个128bit的大整数&#xff0c;并且它是一个不可逆的字符串变换算法&#xff0…...