最新资讯

  • 基于虹软服务器版本SDK实现多路网络摄像头人脸检测

基于虹软服务器版本SDK实现多路网络摄像头人脸检测

2026-01-28 21:52:58 栏目:最新资讯 1 阅读

一、背景需求

​ 随着城市安防、智慧园区、智能零售以及工业监控等场景的快速发展,多路网络摄像头实时人脸检测已成为安防等系统中的核心需求。为了实现这些需求,我选择了虹软(ArcSoft)服务器版人脸识别 SDK(以下简称“SDK”),利用其在人脸检测、跟踪、识别方面的高精度与高性能特性,实现多路网络摄像头人脸检测功能。
​ 网络摄像头离不开ONVIF和RTSP,其中ONVIF(开放式网络视频接口论坛)是一个全球性开放标准,旨在实现不同品牌网络视频设备(如摄像头、录像机)之间的互联互通;RTSP是一种流媒体控制传输层协议,作为ONVIF中的一员,负责播放、暂停、快进、拉取实时视频流、暂停等操作;

​ 本文不详细介绍ONVIF,主要针对RTSP流获取、人脸SDK集成、实时检测人脸和检测结果渲染这几点展开说明。

二、前期准备

2.1 ONVIF介绍

​ ONVIF通过制定统一的通信协议,解决早期监控系统厂商壁垒问题,让用户能用不同品牌设备构建统一的IP安防系统,支持设备发现、配置、流媒体传输、云台控制、事件管理等功能。ONVIF的技术实现主要基于Web Services架构,通过一系列标准协议实现不同设备间的互操作。技术架构包括服务层(SOAP & XML)、接口描述(WSDL)、传输层(HTTP)和流媒体层(RTSP)。整体技术架构图如下。

​ 海康、大华等主流摄像头基本都支持ONVIF,不同厂商的产品可通过ONVIF实现互联。由于ONVIF体系过于庞大,本文就不做详细介绍了。

2.2 获取RTSP流

2.2.1 本地RTSP流

​ 使用VLC media Player播放器,加载本地视频文件,通过设置流的方式提供本地RTSP播放地址,本方式适合本地临时测试。

2.2.2 远程RTSP流

​ 接入远程硬件摄像头(如海康监控摄像头,基本都支持ONVIF协议),获取摄像头IP地址(带端口)、登录用户名和密码,在地址中输入rtsp://用户名:密码@IP地址:554/Streaming/Channels/通道号(主码流101,子码流102)即可获取视频流。

2.3 获取LINUX PRO SDK

​ 登录虹软开放平台(地址https://ai.arcsoft.com.cn),按要求注册认证,然后选择SDK(注意要选择人脸识别LINUX PRO)。前期开发测试可以申请试用码,申请通过后直接下载SDK。

2.4 开发环境

​ Ubuntu虚拟机或WSL,Visual Studio Code,maven + spring boot,jdk 1.8。前期先使用本地机器WSL环境开发,等正式上线后再迁移到云服务器上。

三、项目架构

  1. 获取本地/远程RTSP流。
  2. UI界面/接口:使用VUE3实现UI界面,支持输入多路RTSP地址。
  3. 拉流解码/转码:使用 ffmpeg编解码,opencv转换格式,每路 RTSP流有独立的处理周期。
  4. 人脸检测/识别:使用线程池,每个线程持有独立的SDK引擎实例,保证线程安全。
  5. 结果显示/上报:将人脸检测结果实时绘制到原视频帧上,将绘制结果编码推流,实时渲染在UI上。

四、实现流程

4.1 项目创建

使用java spring boot + maven框架创建项目,导入SDK,填写SDK试用码。编写激活和初始化功能,首次运行项目,验证SDK可用。项目框架如下。

使用当前比较主流的技术,后端使用Java语言实现相关逻辑,前端使用VUE3。

4.2 实现流程

4.2.1 RTSP流输入

​ 使用VUE3框架,简单编写了一个RTSP流实时输入和效果展示页面,目前支持4路RTSP流输入,页面如下图所示。如果只是实现后台检测服务,无需UI显示,可以省去此步骤。

​ 通过前文介绍的方式获取到稳定的RTSP流地址,输入地址点击播放后,通过StreamController类接收相关参数,代码如下。

@Controller
@Slf4j
public class StreamController {
    @Autowired
    private VideoPlayerService videoPlayerService;
    //解析RTSP流地址
    @RequestMapping(value = "/stream")
    public void test(HttpServletRequest request, HttpServletResponse response, @RequestParam(required = false) String address) throws Exception {
        response.addHeader("Content-Disposition", "attachment;filename="" + "127.0.0.1" + """);
        response.setContentType("video/x-flv");
        response.setHeader("Connection", "keep-alive");
        response.setHeader("accept_ranges", "bytes");
        response.setHeader("pragma", "no-cache");
        response.setHeader("cache_control", "no-cache");
        response.setHeader("transfer_encoding", "CHUNKED");
        response.setStatus(200);
        if(StringUtils.isEmpty(address)){
            throw new IllegalAccessException("地址不能为空");
        }
        try(FrameGrabber grabber=new FFmpegFrameGrabber(address)) {
            videoPlayerService.servletStreamPlayer(grabber, response.getOutputStream());
        }
    }
}
4.2.2 拉流解码和转码

​ 因为SDK对图像数据格式有一定要求,需要稳定、高效地将视频流逐帧解码/转码成符合要求的图像数据,所以我选择了“org.bytedeco.javacv”这个第三方库。这个库集成了ffmpeg,支持对rtsp流进行逐帧解码;集成了opencv,支持不同颜色格式之间转换。javacv库需要在pom.xml文件中集成,javacv可在github上搜索,根据需求填写,示例如下图所示。

​ FFmpegFrameGrabber和OpenCVFrameConverter这两个类是核心,FFmpegFrameGrabber是对FFmpeg解码流程的完整封装,包含打开输入源、解析流信息、初始化解码器、分配AVMFrame/AVMPacket等主要功能,可以对视频进行抓帧、解码;OpenCVFrameConverter负责将解码出来的帧数据进行转码,FFmpeg解码出来的通常是YUV420格式,可以转换成人脸SDK要求的BGR格式。注意,要实现多路RTSP流同时解析,每路都需要创建converter实例。

	public void servletStreamPlayer(FrameGrabber grabber, ServletOutputStream servletOutputStream) throws Exception {
        //要实现多路RTSP流同时解析,每路都需要创建一个converter实例
        OpenCVFrameConverter.ToIplImage converter = new OpenCVFrameConverter.ToIplImage();
        // 开启ffmpeg相关log,建议前期开发测试阶段开启
        //avutil.av_log_set_level(avutil.AV_LOG_DEBUG);
        // 生产环境关闭warning信息
        //avutil.av_log_set_level(avutil.AV_LOG_ERROR);
        // 超时时间(10秒)
        grabber.setOption("stimeout", "10 * 1000 * 1000");  
        // 强制使用TCP,要不然无法解码成功
        grabber.setOption("rtsp_transport", "tcp");
        grabber.setOption("threads", "1");
        // 设置缓存大小,提高画质、减少卡顿花屏
        grabber.setOption("buffer_size", "1024000");
        // 读写超时,适用于所有协议的通用读写超时
        grabber.setOption("rw_timeout", "10 * 1000 * 1000");
        // 探测视频流信息,为空默认5000000微秒
        grabber.setOption("probesize", "10 * 1000 * 1000");
        // 解析视频流信息,为空默认5000000微秒
        grabber.setOption("analyzeduration", "10 * 1000 * 1000");
        grabber.start();
        //启动人脸处理引擎
        FacePreview faceProcessEngine = new FacePreview();
        for (; ; ) {
            Frame frame = grabber.grab();
            if (frame == null) {
                break;
            }
            //抓取一帧视频并将其转换为图像IplImage
            IplImage iplImage = converter.convert(frame);
        }
    }
4.2.3 人脸检测识别
4.2.3.1 人脸检测参数配置

​ 根据官方解释,SDK单个引擎的同一功能模块中的算法功能函数不支持多线程调用,所以为了支持多路视频多线程并发检测,需要创建SDK人脸检测引擎池(以下简称“引擎池”)。借助springboot框架和“org.apache.commons.pool2.GenericObjectPool”对象池类,我们可以很方便的实现引擎池。在application.properties文件中添加以下引擎池配置

config.arcface-sdk.detect-pool-size=5	//大小可根据实际需求配置
config.arcface-sdk.app-id=从虹软官网获取appId
config.arcface-sdk.sdk-key=从虹软官网获取sdkKey
config.arcface-sdk.active-key=从虹软官网获取activeKey

​ 根据config文件实现通用人脸检测引擎池配置类,片段代码如下

@Configuration
@Slf4j
public class FaceEnginePoolConfig {
    @Value("${config.arcface-sdk.app-id}")
    public String appId;
    @Value("${config.arcface-sdk.sdk-key}")
    public String sdkKey;
    @Value("${config.arcface-sdk.active-key}")
    public String activeKey;
    @Value("${config.arcface-sdk.active-file}")
    public String activeFile;
    @Value("${config.arcface-sdk.detect-pool-size}")
    public Integer detectPoolSize;
    @Value("${config.arcface-sdk.compare-pool-size}")
    public Integer comparePoolSize;
    @Value("${config.arcface-sdk.faceModel}")
    public String faceModel;
    
    @Bean
    public FaceEnginePool faceEnginePool() {
        FaceModel faceModels = null;
        if ("large".equals(faceModel)) {
            faceModels = FaceModel.ASF_REC_LARGE;
        }else if ("middle".equals(faceModel)) {
            faceModels = FaceModel.ASF_REC_MIDDLE;
        }else {
            throw new BusinessException(ErrorCodeEnum.FAIL,"无效的人脸模型 config.arcface-sdk.faceModel");
        }
        return new FaceEnginePool(appId, sdkKey, activeKey, activeFile, detectPoolSize, comparePoolSize, faceModels);
    }
}
4.2.3.1 创建人脸检测引擎

创建通用人脸检测引擎池类FaceEnginePool,片段代码如下。

@Slf4j
public class FaceEnginePool {
    private GenericObjectPool<FaceEngine> ftPool;

    public FaceEnginePool(String appId, String sdkKey, String activeKey, String activeFile, Integer detectPoolSize, Integer comparePoolSize,FaceModel faceModel) {
        init();
    }

    private void init() {
        GenericObjectPoolConfig<FaceEngine> detectFtPoolConfig = new GenericObjectPoolConfig<>();
        detectFtPoolConfig.setMaxIdle(detectPoolSize);
        detectFtPoolConfig.setMaxTotal(detectPoolSize);
        detectFtPoolConfig.setMinIdle(detectPoolSize);
        detectFtPoolConfig.setLifo(false);
        EngineConfiguration detectFtCfg = new EngineConfiguration();
        FunctionConfiguration detectFtFunctionCfg = new FunctionConfiguration();
        detectFtFunctionCfg.setSupportFaceDetect(true);//开启人脸检测功能
        detectFtFunctionCfg.setSupportAge(true);//开启年龄检测功能
        detectFtFunctionCfg.setSupportGender(true);//开启性别检测功能
        detectFtFunctionCfg.setSupportLiveness(true);//开启活体检测功能
        detectFtCfg.setFunctionConfiguration(detectFtFunctionCfg);
        detectFtCfg.setDetectMode(DetectMode.ASF_DETECT_MODE_VIDEO);//图片检测模式,如果是连续帧的视频流图片,那么改成VIDEO模式
        detectFtCfg.setDetectFaceOrientPriority(DetectOrient.ASF_OP_0_ONLY);//人脸旋转角度
        detectFtCfg.setFaceModel(faceModel);
        //底层库算法对象池
        ftPool = new GenericObjectPool<>(new FaceEngineFactory(appId, sdkKey, activeKey, activeFile, detectFtCfg), detectFtPoolConfig);

        //初始化特征比较线程池
        GenericObjectPoolConfig<FaceEngine> comparePoolConfig = new GenericObjectPoolConfig<>();
        comparePoolConfig.setMaxIdle(comparePoolSize);
        comparePoolConfig.setMaxTotal(comparePoolSize);
        comparePoolConfig.setMinIdle(comparePoolSize);
        comparePoolConfig.setLifo(false);
        EngineConfiguration compareCfg = new EngineConfiguration();
        FunctionConfiguration compareFunctionCfg = new FunctionConfiguration();
        compareFunctionCfg.setSupportFaceRecognition(true);//开启人脸识别功能
        compareFunctionCfg.setSupportMaskDetect(true);//开启口罩检测功能
        compareFunctionCfg.setSupportImageQuality(true);//开启图像质量检测功能
        compareCfg.setFunctionConfiguration(compareFunctionCfg);
        compareCfg.setDetectMode(DetectMode.ASF_DETECT_MODE_IMAGE);//图片检测模式,如果是连续帧的视频流图片,那么改成VIDEO模式
        compareCfg.setDetectFaceOrientPriority(DetectOrient.ASF_OP_0_ONLY);//人脸旋转角度
        compareCfg.setFaceModel(faceModel);
        comparePool = new GenericObjectPool<>(new FaceEngineFactory(appId, sdkKey, activeKey, activeFile, compareCfg), comparePoolConfig);//底层库算法对象池
        try {
            comparePool.preparePool();
        } catch (Exception e) {
            log.error("", e);
        }
    }

    //通用人脸检测引擎池,适用于视频预览人脸检测
    public GenericObjectPool<FaceEngine> ftPool() {
        return ftPool;
    }
}
4.2.3.3 人脸检测识别

创建人脸检测、识别功能逻辑封装类FaceRecognize,支持人脸框检测、人脸图像质量检测和人脸比对识别等功能。片段代码如下。

@Slf4j
public class FaceRecognize {
    //用于视频预览人脸检测的引擎池
    private final GenericObjectPool<FaceEngine> ftEnginePool = SpringUtil.getBean(FaceEnginePool.class).ftPool();
    //VIDEO模式人脸检测引擎,用于视频预览人脸检测
    private FaceEngine ftEngine = null;

	//视频预览图人脸框检测
    public List<FacePreviewInfo> detectFaces(ImageInfo imageInfo) {
        if (ftEngine != null) {
            List<FaceInfo> faceInfoList = new ArrayList<>();
            int code = ftEngine.detectFaces(imageInfo.getImageData(), imageInfo.getWidth(), imageInfo.getHeight(),
                    imageInfo.getImageFormat(), faceInfoList);
            List<FacePreviewInfo> previewInfoList = new LinkedList<>();
            for (FaceInfo faceInfo : faceInfoList) {
                FacePreviewInfo facePreviewInfo = new FacePreviewInfo();
                facePreviewInfo.setFaceInfo(faceInfo);
                previewInfoList.add(facePreviewInfo);
            }
            clearFaceResultRegistry(faceInfoList);
            return previewInfoList;
        }
        return null;
    }
    
    //检测识别图像质量
    public boolean imageQuality(ImageInfo imageInfo, FaceInfo faceInfo) {}
    
    //人脸比对
    public FaceResult faceCompare(FaceInfo faceInfo, ImageInfo imageInfo) {
        faceResultRegistry.remove(faceInfo.getFaceId());
        FaceResult faceResult = new FaceResult();
        faceResultRegistry.put(faceInfo.getFaceId(), faceResult);
        frService.submit(new FaceInfoRunnable(faceInfo, imageInfo, faceResult));
        return faceResult;
    }

    //通过faceId获取人脸比对结果
    public FaceResult getFaceCompareResult(int faceId) {
        return faceResultRegistry.get(faceId);
    }
4.2.4 检测结果整合显示
4.2.4.1 检测结果处理

​ 如果需要在UI上实时显示检测结果,比如绘制人脸框、显示人脸比对结果,需要缓存SDK检测到的人脸框数据,提取坐标Rect信息,然后使用opencv_imgproc.cvRectangle函数将Rect绘制到单帧图像上,使用opencv_imgproc.cvPutText函数将人脸比对结果绘制到单帧图形上,通过recoder编码成H264视频流,最后通过ServletOutputStream输出到浏览器上显示。人脸框检测和人脸比对逻辑片段代码如下。

public class FacePreview {
    private static final CvScalar color = cvScalar(0, 0, 255, 0);       // blue [green] [red]
    private static final CvFont cvFont = cvFont(opencv_imgproc.FONT_HERSHEY_DUPLEX);
    private final FaceRecognize faceRecognize;
    //模拟触发人脸对比事件,当needRecognizeCount计数满足条件时触发一次人脸比对事件,实际可按照项目需求修改
    private int needRecognizeCount;
    
    //使用SDK检测人脸框,并通过opencv绘制人脸识别结果至IplImage上
    public void preview(IplImage iplImage) {
        ImageInfo imageInfo = new ImageInfo();
        imageInfo.setWidth(iplImage.width());
        imageInfo.setHeight(iplImage.height());
        imageInfo.setImageFormat(ImageFormat.CP_PAF_RGB24);
        byte[] imageData = new byte[iplImage.imageSize()];
        iplImage.imageData().get(imageData);
        imageInfo.setImageData(imageData);
        List<FaceRecognize.FacePreviewInfo> previewInfoList = faceRecognize.detectFaces(imageInfo);
        for (FaceRecognize.FacePreviewInfo facePreviewInfo : previewInfoList) {
        	//提取人脸框坐标Rect
            int x = facePreviewInfo.getFaceInfo().getRect().getLeft();
            int y = facePreviewInfo.getFaceInfo().getRect().getTop();
            int xMax = facePreviewInfo.getFaceInfo().getRect().getRight();
            int yMax = facePreviewInfo.getFaceInfo().getRect().getBottom();
            //将人脸框绘制到iplImage上,也就是视频预览帧数据上
            CvPoint pt1 = cvPoint(x, y);
            CvPoint pt2 = cvPoint(xMax, yMax);
            opencv_imgproc.cvRectangle(iplImage, pt1, pt2, color, 3, 4, 0);
        }
         FaceRecognize.FacePreviewInfo facePreviewInfo = previewInfoList.get(0);
            if (needRecognizeCount % 200 == 0) {
                FaceRecognize.FaceResult faceResult = faceRecognize.faceCompare(facePreviewInfo.getFaceInfo(), imageInfo);
                if (faceResult != null && faceResult.isFlag()) {
                    int x = facePreviewInfo.getFaceInfo().getRect().getLeft();
                    int y = facePreviewInfo.getFaceInfo().getRect().getTop();
                    CvPoint pt3 = cvPoint(x, y - 2);
                    opencv_imgproc.cvPutText(iplImage,  faceResult.getName(), pt3, cvFont, color);
                }
            } else {
                faceResult = faceRecognize.getFaceCompareResult(facePreviewInfo.getFaceInfo().getFaceId());
                if (faceResult != null && faceResult.isFlag()) {
                    int x = facePreviewInfo.getFaceInfo().getRect().getLeft();
                    int y = facePreviewInfo.getFaceInfo().getRect().getTop();
                    CvPoint pt3 = cvPoint(x, y - 2);
                    opencv_imgproc.cvPutText(iplImage, faceResult.getName(), pt3, cvFont, color);
                }
            }
    }
}
4.2.4.1 检测结果实时渲染

​ 得到绘制结果帧数据(IplImage)后,将帧数据编码成h264文件,并推送到浏览器UI上,这里需要注意设置格式为“flv”,其他配置可根据需求修改。代码片段如下。

private boolean needShowFacePreview = true;
public void servletStreamPlayer(FrameGrabber grabber, ServletOutputStream servletOutputStream) throws Exception {
        ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
        FFmpegFrameRecorder recorder = null;
        if (needShowFacePreview) {
            recorder = new FFmpegFrameRecorder(outputStream, grabber.getImageWidth(), grabber.getImageHeight(), 0);
            //UI渲染流格式/转码,当前支持flv格式
            recorder.setFormat("flv");
            recorder.setInterleaved(false);
            recorder.setVideoOption("tune", "zerolatency");
            recorder.setVideoOption("preset", "ultrafast");
            recorder.setVideoOption("crf", "26");
            recorder.setVideoOption("threads", "1");
            double frameRate = grabber.getFrameRate();
            recorder.setFrameRate(frameRate);// 设置帧率
            recorder.setGopSize(25);// 设置gop,关键帧
            int videoBitrate = grabber.getVideoBitrate();
            recorder.setVideoBitrate(videoBitrate);// 设置码率500kb/s,画质
            recorder.setVideoCodec(avcodec.AV_CODEC_ID_H264);
            recorder.setPixelFormat(avutil.AV_PIX_FMT_YUV420P);
            recorder.setAudioCodec(avcodec.AV_CODEC_ID_AAC);
            recorder.setTrellis(1);
            recorder.setMaxDelay(0);// 设置延迟
            recorder.setAudioChannels(grabber.getAudioChannels());
            recorder.start();
        }
        FacePreview faceProcessEngine = new FacePreview();
        long startTime = 0;
        long videoTS;
        for (; ; ) {
            Frame frame = grabber.grab();
            if (frame == null) {
                break;
            }
            IplImage iplImage = converter.convert(frame);//抓取一帧视频并将其转换为图像
            if (needShowFacePreview) {
                //需要将人脸检测框实时显示在UI上,首先将IplImage传入人脸处理引擎进行处理,
                //处理后IplImage会被修改,然后通过recoder编码成H264视频流,最后通过ServletOutputStream输出到浏览器
                if (iplImage != null) {
                    faceProcessEngine.preview(iplImage);
                    frame = converter.convert(iplImage);
                }
                if (startTime == 0) {
                    startTime = System.currentTimeMillis();
                }
                videoTS = 1000 * (System.currentTimeMillis() - startTime);
                if (recorder != null) {
                    if (videoTS > recorder.getTimestamp()) {
                        recorder.setTimestamp((videoTS));
                    }
                    recorder.record(frame);
                } 
                if (outputStream.size() > 0) {
                    //将检测结果实时渲染到UI上
                    byte[] bytes = outputStream.toByteArray();
                    servletOutputStream.write(bytes);
                    outputStream.reset();
                }
            } else {
                //不需要将人脸检测框实时显示在UI上,自定义实现保存逻辑,例如将结果聚合成JSON数据,在适当时机推送给其他端。
            }
        }
   }

​ 如下图(保护隐私,做了脱敏处理),输入多个RTSP地址,通过人脸识别检测后,会实时渲染到UI上。

​ 如果不需要实时显示人脸框,只保留后台服务,可以删除VUE3和HTML相关功能。也可以自定义实现人脸检测数据保存功能,对此本文不做详细展开。

六、总结

​ 本文主要介绍了虹软LINUX PRO人脸识别SDK的集成流程,对RTSP流进行解码,并进行人脸检测和显示结果,使用了当前主流的前后端开发技术。文中使用的ffmpeg + opencv是开源框架,支持很多协议和格式,如果大家想拓展其他视频流检测功能,可以在本文基础上二次开发,本文就不做详细介绍了。

​ 附上本文涉及到的工程源码路径。

​ 主工程(java + springboot):https://github.com/WeiLiqiang/ArcFaceDemoForLinuxPRO

​ UI工程(vue3):https://github.com/WeiLiqiang/ArcFaceDemoForLinuxPROUI

s0-1768271821449)]

本文地址:https://www.yitenyun.com/749.html

搜索文章

Tags

#服务器 #python #pip #conda #ios面试 #ios弱网 #断点续传 #ios开发 #objective-c #ios #ios缓存 香港站群服务器 多IP服务器 香港站群 站群服务器 #远程工作 #kubernetes #笔记 #平面 #容器 #linux #学习方法 #运维 #进程控制 #fastapi #html #css #Trae #IDE #AI 原生集成开发环境 #Trae AI #低代码 #爬虫 #音视频 #docker #后端 #数据库 #内网穿透 #网络 #cpolar #开发语言 #云原生 #iventoy #VmWare #OpenEuler #人工智能 #node.js #Conda # 私有索引 # 包管理 #开源 #RTP over RTSP #RTP over TCP #RTSP服务器 #RTP #TCP发送RTP #MobaXterm #ubuntu #kylin #物联网 #websocket #vscode #mobaxterm #深度学习 #计算机视觉 #android #腾讯云 #c# #数信院生信服务器 #Rstudio #生信入门 #生信云服务器 #安全 #nginx #tcp/ip #多个客户端访问 #IO多路复用 #回显服务器 #TCP相关API #学习 #算法 #大数据 #web安全 #java #jar #架构 #面试 #claude #华为 #ModelEngine #金融 #大模型 #mcp #金融投资Agent #Agent #github #git #我的世界 #n8n #本地部署 #windows #hadoop #hbase #hive #zookeeper #spark #kafka #flink #ssh #qt #C++ #云计算 #我的世界服务器搭建 #minecraft #压力测试 #gpu算力 #MCP #科技 #自然语言处理 #神经网络 #udp #c++ #c语言 #网络协议 #todesk #jenkins #ide #unity #游戏引擎 #需求分析 #scala #测试用例 #测试工具 #Dell #PowerEdge620 #内存 #硬盘 #RAID5 #MCP服务器 #性能优化 #缓存 #http #cpp #项目 #高并发 #NPU #CANN #gemini #gemini国内访问 #gemini api #gemini中转搭建 #Cloudflare #stm32 #macos #vue.js #前端 #vue #阿里云 #screen 命令 #JumpServer #堡垒机 #mvp #个人开发 #设计模式 #振镜 #振镜焊接 #AI编程 #单元测试 #集成测试 #pycharm #京东云 #DisM++ # GLM-4.6V # 系统维护 #SRS #流媒体 #直播 #守护进程 #复用 #screen #umeditor粘贴word #ueditor粘贴word #ueditor复制word #ueditor上传word图片 #YOLOFuse # Base64编码 # 多模态检测 #unity3d #游戏 #服务器框架 #Fantasy #mamba #Android #Bluedroid #智能手机 #电气工程 #C# #PLC #嵌入式硬件 #单片机 #oracle #java-ee #910B #golang #rdp #mysql #sql #libosinfo #Dify #ARM架构 #鲲鹏 #jmeter #功能测试 #软件测试 #自动化测试 #职场和发展 #自动化 #maven #gitlab #课程设计 #spring boot #centos #SSH反向隧道 # Miniconda # Jupyter远程访问 #EMC存储 #存储维护 #NetApp存储 #chatgpt #codex #yum #NAS #Termux #Samba #Linux #三维 #3D #三维重建 #万悟 #联通元景 #智能体 #镜像 #微信小程序 #小程序 #微信 #健身房预约系统 #健身房管理系统 #健身管理系统 #react.js #debian #php #鸭科夫 #逃离鸭科夫 #鸭科夫联机 #鸭科夫异地联机 #开服 #北京百思可瑞教育 #百思可瑞教育 #北京百思教育 #apache #risc-v #deepseek #flask #部署 #GPU服务器 #8U #硬件架构 #智能路由器 #5G #C2000 #TI #实时控制MCU #AI服务器电源 #运维开发 #东方仙盟 #1024程序员节 #SAP #ebs #metaerp #oracle ebs #编辑器 #搜索引擎 #DeepSeek #蓝耘智算 #昇腾 #AIGC #ida #ai #pytorch #Anaconda配置云虚拟环境 #密码学 #可信计算技术 #华为云 #测评 #CCE #Dify-LLM #Flexus #Nacos #web #微服务 #cursor #elasticsearch #django #web3.py #麒麟OS #信息与通信 #信号处理 #tcpdump #RustDesk #IndexTTS 2.0 #本地化部署 #ms-swift # 大模型 # 模型训练 #毕业设计 #车辆排放 #银河麒麟高级服务器操作系统安装 #银河麒麟高级服务器V11配置 #设置基础软件仓库时出错 #银河麒高级服务器系统的实操教程 #生产级部署银河麒麟服务系统教程 #Linux系统的快速上手教程 #AI #工具集 #PyTorch # Triton # 高并发部署 #transformer #javascript #epoll #sqlite #wordpress #雨云 #LobeChat #vLLM #GPU加速 #spring #tomcat #intellij-idea #ansible #人脸识别sdk #视频编解码 #人脸识别 #海外服务器安装宝塔面板 #负载均衡 #翻译 #开源工具 #经验分享 #大模型部署 #mindie #大模型推理 #创业创新 #业界资讯 #计算机网络 #laravel #openlayers #bmap #tile #server #milvus #langchain #大模型开发 #程序员 #ssl #redis #CosyVoice3 # 语音合成 #机器学习 #Puppet # IndexTTS2 # TTS #TCP #客户端 #嵌入式 #DIY机器人工房 #语音识别 #说话人验证 #声纹识别 #CAM++ #x86_64 #数字人系统 #windows11 #microsoft #系统修复 #信令服务器 #Janus #MediaSoup #其他 #rtsp #转发 #unix #fpga开发 #CVE-2025-61686 #网络安全 #漏洞 #路径遍历高危漏洞 #分布式 #SQL注入主机 #json #rust #ping通服务器 #读不了内网数据库 #bug菌问答团队 #jvm #大模型教程 #AI大模型 #大模型学习 #结构体 #制造 #webrtc #idm #YOLO # GPU租赁 # 自建服务器 #数据分析 #推荐算法 #devops #戴尔服务器 #戴尔730 #装系统 #shell #渗透测试 #黑客技术 #计算机 #文件上传漏洞 #mcu #ThingsBoard MCP #HeyGem # 服务器IP访问 # 端口映射 #A2A #GenAI #遛狗 #SSE # AI翻译机 # 实时翻译 #bug #asp.net #sqlserver #心理健康服务平台 #心理健康系统 #心理服务平台 #心理健康小程序 #聊天小程序 #数据安全 #注入漏洞 # 一锤定音 # 大模型微调 #adb #nodejs #交互 #SSH公钥认证 # PyTorch # 安全加固 #练习 #基础练习 #数组 #循环 #九九乘法表 #计算机实现 #dynadot #域名 #esb接口 #走处理类报异常 #vllm #ffmpeg #数据挖掘 #CUDA #Triton #dify #企业开发 #ERP #项目实践 #.NET开发 #C#编程 #编程与数学 #语言模型 #昇腾300I DUO #fiddler #银河麒麟部署 #银河麒麟部署文档 #银河麒麟linux #银河麒麟linux部署教程 #idea #intellij idea #opencv #Qwen3-14B # 大模型部署 # 私有化AI #vnstat #监控 #AI 推理 #NV #文心一言 #AI智能体 #vp9 #攻防演练 #Java web #红队 #leetcode #银河麒麟 #系统升级 #信创 #国产化 #SSH跳板机 # Python3.11 #LVDS #高速ADC #DDR #API限流 # 频率限制 # 令牌桶算法 #驱动开发 #chrome #处理器 #黑群晖 #虚拟机 #无U盘 #纯小白 #支付 #数据结构 #screen命令 #排序算法 #Gunicorn #WSGI #Flask #并发模型 #容器化 #Python #性能调优 #蓝湖 #Axure原型发布 #gitea #llama #门禁 #梯控 #智能一卡通 #门禁一卡通 #消费一卡通 #智能梯控 #一卡通 #源代码管理 #超时设置 #客户端/服务器 #网络编程 # 目标检测 #管道Pipe #system V #ai编程 #机器人 #muduo库 #uv #uvx #uv pip #npx #Ruff #pytest #YOLO26 #目标检测 #操作系统 #国产化OS #springboot #知识库 #react native #web server #请求处理流程 #html5 #SSH # 批量管理 #ASR #SenseVoice #星图GPU #中间件 #MQTT协议 #交通物流 #C语言 #vivado license #CVE-2025-68143 #CVE-2025-68144 #CVE-2025-68145 #rocketmq #selenium #prometheus #grafana #svn #证书 #scrapy #fabric #postgresql #openHiTLS #TLCP #DTLCP #商用密码算法 #ONLYOFFICE #MCP 服务器 # 双因素认证 # TensorFlow #毕设 #服务器繁忙 #蓝牙 #LE Audio #BAP #serverless #RAID #RAID技术 #磁盘 #存储 #嵌入式编译 #ccache #distcc #链表 #puppeteer #连接数据库报错 #安全威胁分析 #仙盟创梦IDE #硬件工程 #智能家居 #动态规划 #pyqt #xlwings #Excel #DNS #dlms #dlms协议 #逻辑设备 #逻辑设置间权限 #C #spring cloud #Spring AI #STDIO传输 #SSE传输 #WebMVC #WebFlux #bootstrap #nfs #iscsi #企业微信 #SPA #单页应用 #文件管理 #文件服务器 #swagger #visual studio code #prompt #mariadb #树莓派4b安装系统 #paddleocr #STDIO协议 #Streamable-HTTP #McpTool注解 #服务器能力 #wsl #电脑 #LangGraph #CLI #JavaScript #langgraph.json #ddos #系统架构 #KMS激活 #jdk #排序 #numpy #CSDN #数据仓库 # 水冷服务器 # 风冷服务器 #.netcore #VoxCPM-1.5-TTS # 云端GPU # PyCharm宕机 #儿童AI #图像生成 #Qwen #https #pjsip #LoRA # lora-scripts # 模型微调 #openresty #lua #智能体来了 #传统行业 #AI赋能 # CUDA #麒麟 #Syslog #系统日志 #日志分析 #日志监控 #生产服务器问题查询 #日志过滤 #p2p #Autodl私有云 #深度服务器配置 #SSH保活 #Miniconda #远程开发 #微PE # GLM-4.6V-Flash-WEB # AI部署 #everything #材料工程 #数码相机 #智能电视 #能源 #VMware创建虚拟机 #远程更新 #缓存更新 #多指令适配 #物料关联计划 #AI生成 # outputs目录 # 自动化 #挖漏洞 #攻击溯源 #编程 #stl #漏洞修复 #IIS Crypto #blender #warp #二值化 #Canny边缘检测 #轮廓检测 #透视变换 #DooTask #ZooKeeper #ZooKeeper面试题 #面试宝典 #深入解析 #Clawdbot #ComfyUI # 推理服务器 #防毒面罩 #防尘面罩 #n8n解惑 #编程助手 #.net #net core #kestrel #web-server #asp.net-core #elk #rabbitmq #uni-app #m3u8 #HLS #移动端H5网页 #APP安卓苹果ios #监控画面 直播视频流 #Prometheus #esp32 arduino #决策树 #Zabbix #语音合成 #HistoryServer #Spark #YARN #jobhistory #postman #内存接口 # 澜起科技 # 服务器主板 # 显卡驱动备份 #Socket #模拟退火算法 #计算机毕业设计 #程序定制 #毕设代做 #课设 #源码 #VMware #简单数论 #埃氏筛法 #openEuler #Hadoop #文件传输 #电脑文件传输 #电脑传输文件 #电脑怎么传输文件到另一台电脑 #电脑传输文件到另一台电脑 #身体实验室 #健康认知重构 #系统思维 #微行动 #NEAT效应 #亚健康自救 #ICT人 #eureka #云服务器 #个人电脑 #KMS 激活 #mongodb #wireshark #广播 #组播 #并发服务器 #nacos #银河麒麟aarch64 #MC #MC群组服务器 #uvicorn #uvloop #asgi #event # 服务器迁移 # 回滚方案 #大模型入门 #flutter #高级IO #select #homelab #Lattepanda #Jellyfin #Plex #Emby #Kodi #yolov12 #研究生life #开关电源 #热敏电阻 #PTC热敏电阻 #asp.net大文件上传 #asp.net大文件上传下载 #asp.net大文件上传源码 #ASP.NET断点续传 #asp.net上传文件夹 #asp.net上传大文件 #excel #gpu #nvcc #cuda #nvidia #漏洞挖掘 #gpt #TensorRT # 推理优化 #SSH别名 #zabbix #CS2 #debian13 #BoringSSL #时序数据库 #企业存储 #RustFS #对象存储 #高可用 #notepad++ #es安装 #远程控制 #Docker #云计算运维 #模块 #STUN #turn #ICE #信创国产化 #达梦数据库 #RXT4090显卡 #RTX4090 #深度学习服务器 #硬件选型 #群晖 #音乐 # ARM服务器 # 鲲鹏 #IntelliJ IDEA #Spring Boot #neo4j #NoSQL #SQL #http头信息 #Llama-Factory # 大模型推理 #Coturn #TURN #ci/cd #k8s #log4j #Jetty # CosyVoice3 # 嵌入式服务器 #echarts #harmonyos #鸿蒙PC #GPU #AutoDL ##租显卡 #树莓派 #温湿度监控 #WhatsApp通知 #IoT #MySQL # 服务器IP # 端口7860 #pdf #建筑缺陷 #红外 #数据集 #TCP服务器 #开发实战 #SMARC #ARM #全文检索 #银河麒麟服务器系统 #远程桌面 # 代理转发 # 跳板机 #Android16 #音频性能实战 #音频进阶 #短剧 #短剧小程序 #短剧系统 #微剧 #LangFlow # 智能运维 # 性能瓶颈分析 #空间计算 #原型模式 #hibernate #nosql #VibeVoice # 云服务器 #无人机 #junit #新人首发 #汽车 #web服务器 #可撤销IBE #服务器辅助 #私钥更新 #安全性证明 #双线性Diffie-Hellman # 公钥认证 #Reactor #Kylin-Server #国产操作系统 #服务器安装 #clickhouse #代理 #数据访问 #CTF #VMWare Tool #I/O模型 #并发 #水平触发、边缘触发 #多路复用 #FHSS #eclipse #servlet #arm64 #CNAS #CMA #程序文件 #word #SSH复用 # 远程开发 #磁盘配额 #存储管理 #形考作业 #国家开放大学 #系统运维 #自动化运维 #IO #DHCP #网络安全大赛 #C++ UA Server #SDK #Windows #跨平台开发 #信息可视化 #agent #ai大模型 #云服务器选购 #Saas #CPU #线程 #散列表 #哈希算法 #机器视觉 #6D位姿 #UOS #海光K100 #统信 #outlook #错误代码2603 #无网络连接 #2603 #dba #mssql #wpf #实时检测 #卷积神经网络 #串口服务器 #Modbus #MOXA #GATT服务器 #蓝牙低功耗 #googlecloud #lucene #DAG #具身智能 #SSH密钥 # ControlMaster #ETL管道 #RAG #向量存储 #数据预处理 #DocumentReader #硬件 #Fun-ASR # 语音识别 # WebUI #HarmonyOS APP #密码 #firefox #safari # RTX 3090 #jupyter #AI电商客服 #arm开发 #le audio #低功耗音频 #通信 #连接 #spring ai #oauth2 #数据可视化 #nmodbus4类库使用教程 #docker-compose #目标跟踪 #rtmp #PowerBI #企业 #windbg分析蓝屏教程 #fs7TF #c++20 #Buck #NVIDIA #算力 #交错并联 #DGX #ROS # 局域网访问 # 批量处理 #内存治理 #ui #cosmic #IFix # 高温监控 # 远程连接 #gerrit #opc ua #opc #npu # 环境迁移 #大剑师 #nodejs面试题 #matplotlib #安全架构 # 树莓派 # ARM架构 #H5 #跨域 #发布上线后跨域报错 #请求接口跨域问题解决 #跨域请求代理配置 #request浏览器跨域 # 网络延迟 #指针 #anaconda #虚拟环境 #GB28181 #SIP信令 #SpringBoot #视频监控 #远程软件 #WT-2026-0001 #QVD-2026-4572 #smartermail #游戏机 # GLM-TTS # 数据安全 #银河麒麟操作系统 #openssh #华为交换机 #信创终端 #xshell #host key #UDP的API使用 #TTS私有化 # IndexTTS # 音色克隆 #ESP32 # OTA升级 # 黄山派 #内网 #iBMC #UltraISO #设计师 #图像处理 #游戏美术 #技术美术 # Connection refused #系统管理 #服务 #teamviewer #视频 #代理服务器 #rsync # 数据同步 #ip #bash #Modbus-TCP #Apple AI #Apple 人工智能 #FoundationModel #Summarize #SwiftUI #LLM #大语言模型 #ceph #ambari #arm #多线程 #claudeCode #content7 #跳槽 #工作 #挖矿 #Linux病毒 #sql注入 #网安应急响应 #odoo #chat # GLM # 服务连通性 #azure # 高并发 #appche #数据恢复 #视频恢复 #视频修复 #RAID5恢复 #流媒体服务器恢复 #Ubuntu #aws #muduo #TcpServer #accept #高并发服务器 #go # GPU集群 #Gateway #认证服务器集成详解 #服务器开启 TLS v1.2 #IISCrypto 使用教程 #TLS 协议配置 #IIS 安全设置 #服务器运维工具 #ftp #sftp #uniapp #合法域名校验出错 #服务器域名配置不生效 #request域名配置 #已经配置好了但还是报错 #uniapp微信小程序 #框架搭建 #YOLO识别 #YOLO环境搭建Windows #YOLO环境搭建Ubuntu #状态模式 #AI-native # 轻量化镜像 # 边缘计算 #Tokio #华为od #华为机试 #Java #OpenHarmony #版本控制 #Git入门 #开发工具 #代码托管 #SSH跳转 #TTS #weston #x11 #x11显示服务器 #研发管理 #禅道 #禅道云端部署 #WinSCP 下载安装教程 #SFTP #FTP工具 #服务器文件传输 #计算几何 #斜率 #方向归一化 #叉积 #Ansible # 批量部署 #samba #RSO #机器人操作系统 #glibc #媒体 #远程连接 #cpu #套接字 #I/O多路复用 #字节序 #超算中心 #PBS #lsf #报表制作 #职场 #用数据讲故事 #手机h5网页浏览器 #安卓app #苹果ios APP #手机电脑开启摄像头并排查 #深度优先 #DFS #语音生成 #集成学习 #AI写作 #winscp #AI部署 # ms-swift #PN 结 #后端框架 #服务器线程 # SSL通信 # 动态结构体 #RWK35xx #语音流 #实时传输 #node #pxe #lvs # 数字人系统 # 远程部署 # TURN # NAT穿透 #MCP服务器注解 #异步支持 #方法筛选 #声明式编程 #自动筛选机制 #前端框架 #JNI #麦克风权限 #访问麦克风并录制音频 #麦克风录制音频后在线播放 #用户拒绝访问麦克风权限怎么办 #uniapp 安卓 苹果ios #将音频保存本地或上传服务器 #express #cherry studio #Node.js # child_process #free #vmstat #sar #KMS #slmgr #宝塔面板部署RustDesk #RustDesk远程控制手机 #手机远程控制 #铁路桥梁 #DIC技术 #箱梁试验 #裂纹监测 #四点弯曲 #rustdesk #可再生能源 #绿色算力 #风电 #spine #若依 #TRO #TRO侵权 #TRO和解 #运维工具 #GLM-4.6V-Flash-WEB # AI视觉 # 本地部署 #网络攻击模型 #进程 #进程创建与终止 #Discord机器人 #云部署 #程序那些事 #AI应用编程 # 自动化运维 #r语言 #mybatis #3d #服务器IO模型 #非阻塞轮询模型 #多任务并发模型 #异步信号模型 #多路复用模型 #系统安全 #ipmitool #BMC # 黑屏模式 # TTS服务器 #前端开发 #EN4FE #ollama #llm #领域驱动 #自由表达演说平台 #演说 #程序员创富 #移动端h5网页 #调用浏览器摄像头并拍照 #开启摄像头权限 #拍照后查看与上传服务器端 #摄像头黑屏打不开问题 #国产开源制品管理工具 #Hadess #一文上手 #jetty #蓝桥杯 #工业级串口服务器 #串口转以太网 #串口设备联网通讯模块 #串口服务器选型 #okhttp #embedding #IndexTTS2 # 阿里云安骑士 # 木马查杀 #范式 #入侵 #日志排查 #kmeans #聚类 #Karalon #AI Test #YOLOv8 # Docker镜像 #文件IO #输入输出流 #流程图 #论文阅读 #论文笔记 #图论 #人大金仓 #Kingbase #小艺 #鸿蒙 #搜索 #代理模式 #Spring AOP #程序人生 #健康医疗 #高考 #企业级存储 #网络设备 #iot #软件工程 #生信 #Smokeping #工程实践 #策略模式 #pve #租显卡 #训练推理 #AI应用 #图像识别 #多进程 #python技巧 #pencil #pencil.dev #设计 #zotero #WebDAV #同步失败 #轻量化 #低配服务器 #Beidou #北斗 #SSR #Anything-LLM #IDC服务器 #私有化部署 #V11 #kylinos #大模型应用 #API调用 #PyInstaller打包运行 #服务端部署 #raid #raid阵列 #API #taro #java大文件上传 #java大文件秒传 #java大文件上传下载 #java文件传输解决方案 #wps #Linux多线程 #bigtop #hdp #hue #kerberos #PyCharm # 远程调试 # YOLOFuse #Playbook #AI服务器 #欧拉 #simulink #matlab #journalctl #aiohttp #asyncio #异步 #信息安全 #信息收集 #Langchain-Chatchat # 国产化服务器 # 信创 #软件 #本地生活 #电商系统 #商城 #poll # IndexTTS 2.0 #全链路优化 #实战教程 #database #AI论文写作工具 #学术写作辅助 #论文创作效率提升 #AI写论文实测 #数字化转型 #实体经济 #商业模式 #软件开发 #数智红包 #商业变革 #创业干货 #AB包 #FASTMCP #sglang #Go并发 #高并发架构 #Goroutine #系统设计 #Tracker 服务器 #响应最快 #torrent 下载 #2026年 #Aria2 可用 #迅雷可用 #BT工具通用 #交换机 #三层交换机 #SSH Agent Forwarding # 容器化 #高斯溅射 #UEFI #BIOS #Legacy BIOS #产品运营 #eBPF #联机教程 #局域网联机 #局域网联机教程 #局域网游戏 #云开发 #性能 #优化 #RAM #Harbor #AI智能棋盘 #Rock Pi S #边缘计算 #PTP_1588 #gPTP #C/C++ #c++高并发 #百万并发 # 权限修复 #FTP服务器 #uip #进程等待 #wait #waitpid # HiChatBox # 离线AI #SMTP # 内容安全 # Qwen3Guard #X11转发 #MinIO服务器启动与配置详解 #改行学it #平板 #零售 #智能硬件 #vncdotool #链接VNC服务器 #如何隐藏光标 #H5网页 #网页白屏 #H5页面空白 #资源加载问题 #打包部署后网页打不开 #HBuilderX #gateway #Comate #Deepoc #具身模型 #开发板 #未来 #插件 #开源软件 #NFC #智能公交 #服务器计费 #FP-增长 #算力建设 #tdengine #涛思数据 #服务器解析漏洞 #b树 #Proxmox VE #虚拟化 #memory mcp #Cursor #网路编程 #smtp #smtp服务器 #PHP #声源定位 #MUSIC # 远程访问 #Streamlit #AI聊天机器人 #tensorflow #memcache #ServBay #ranger #MySQL8.0 #飞牛nas #fnos #ansys #ansys问题解决办法 #分布式数据库 #集中式数据库 #业务需求 #选型误 #智能体对传统行业冲击 #行业转型 #雨云服务器 #Minecraft服务器 #教程 #MCSM面板 #Socket网络编程 #HarmonyOS # 服务器配置 # GPU # 串口服务器 # NPort5630 #Python办公自动化 #Python办公 #量子计算 #copilot #个人博客 #硬盘克隆 #DiskGenius # 键鼠锁定 #mtgsig #美团医药 #美团医药mtgsig #美团医药mtgsig1.2 #opc模拟服务器 #工程设计 #预混 #扩散 #燃烧知识 #层流 #湍流 #反向代理 #政务 #参数估计 #矩估计 #概率论 #adobe #数据迁移 #powerbi #个人助理 #数字员工 #gmssh #宝塔 #1panel #Exchange #sentinel #系统安装 #MinIO #闲置物品交易系统 #静脉曲张 #腿部健康 #运动 #IPv6 #POC #问答 #交付 #scikit-learn #随机森林 #Minecraft #PaperMC #我的世界服务器 #AI Agent #开发者工具 #kong #Kong Audio #Kong Audio3 #KongAudio3 #空音3 #空音 #中国民乐 #计算机外设 #边缘AI # Kontron # SMARC-sAMX8 #凤希AI伴侣 #remote-ssh #SA-PEKS # 关键词猜测攻击 # 盲签名 # 限速机制 #scanf #printf #getchar #putchar #cin #cout #ET模式 #非阻塞 #多模态 #微调 #超参 #LLamafactory #产品经理 #就业 #CMake #Make #OpenAI #故障 #vps #docker安装seata