【C++风云录】深度学习的开源力量:在音视频处理与通信中的关键角色

说话者和声纹识别: 开源库的力量

前言

本文将介绍六个不同的开源库,它们各自在音视频处理,计算机视觉,深度学习和语音识别领域有着重要作用。这些库包括PJSIP、ALIZE、WebRTC、OpenCV、TensorFlow和Kaldi,我们将会探索每一个库中特定的功能和应用。

欢迎订阅专栏:C++风云录

文章目录

  • 说话者和声纹识别: 开源库的力量
    • 前言
  • 声纹识别与语音加密
    • 1. PJSIP:开源跨平台音频/视频通信库
      • 1.1 C++ API的作用
        • 1.1.1 语音加密
        • 1.1.2 通信应用
    • 2. ALIZE:用于说话者识别和声纹识别的C++库
      • 2.1 说话者识别
      • 2.2 声纹识别
    • 3. WebRTC: 实时通信协议库
      • 3.1 音频处理
        • 3.1.1 噪声消除
        • 3.1.2 回声消除
      • 3.2 视频处理
        • 3.2.1 视频编解码
        • 3.2.2 视频捕获和渲染
    • 4. OpenCV:开源计算机视觉库
      • 4.1 图像处理
        • 4.1.1 滤波器
        • 4.1.2 边缘检测
      • 4.2 视频分析
        • 4.2.1 目标跟踪
        • 4.2.2 动态场景理解
    • 5. TensorFlow:开源深度学习库
      • 5.1 训练神经网络模型
      • 5.2 使用训练好的模型进行预测
    • 6. Kaldi:专注于语音识别的软件工具包
      • 6.1 特征提取
        • 6.1.1 MFCC
        • 6.1.2 PLP
      • 6.2 声学模型
        • 6.2.1 GMM-HMM
        • 6.2.2 DNN-HMM
    • 总结

声纹识别与语音加密

1. PJSIP:开源跨平台音频/视频通信库

PJSIP是一个免费开源的音频和视频通信协议栈库,提供了丰富的功能以支持各种实时交互应用。PJSIP支持多种操作系统和硬件平台,包括Windows, Linux, macOS, iOS和Android。

1.1 C++ API的作用

PJSIP库提供了一套API接口,方便开发人员快速开发音频和视频通信应用。这些API提供了对SIP, SDP, RTP, STUN, TURN, and ICE等协议的支持,并且可以轻松地扩展到其他协议。

1.1.1 语音加密

在音视频通信中,保护通信内容的安全是非常重要的。PJSIP提供了语音加密的机制,可以有效防止通话内容被窃听。以下是一个简单的C++代码示例,演示如何使用PJSIP的API进行语音加密:

#include <pjmedia/transport_srtp.h>
// 初始化SRTP设置
pjmedia_srtp_setting srtpOpt;
pjmedia_srtp_setting_default(&srtpOpt);
srtpOpt.close_member_tp = PJ_TRUE;

// 创建SRTP传输
status = pjmedia_transport_srtp_create(pjmedia_endpt_instance(), transport, &srtpOpt, &srtp_transport);
if (status != PJ_SUCCESS) {
    // 错误处理
}

// 启动SRTP传输
status = pjmedia_transport_srtp_start(srtp_transport, &crypto, NULL);
if (status != PJ_SUCCESS) {
    // 错误处理
}

详细信息请参考PJSIP 官方文档

1.1.2 通信应用

在PJSIP库中,开发者可以使用一些基本的组件来创建自己的通信应用。下面的C++代码示例展示了如何使用PJSIP的API创建一个简单的通信应用客户端:

#include <pjsua-lib/pjsua.h>
// 初始化库
pjsua_create();

// 创建PJSUA配置
pjsua_config cfg;
pjsua_config_default(&cfg);

// 初始化并启动PJSUA
pjsua_init(&cfg, NULL, NULL);

// 添加SIP账户
pjsua_acc_config acc_cfg;
pjsua_acc_config_default(&acc_cfg);
pj_str_t uri = pj_str((char *)"sip:your_sip_server");
pjsua_acc_add(&acc_cfg, PJ_FALSE, NULL);

// 开始处理事件
pjsua_start();

详细信息请参考PJSIP 官方文档

2. ALIZE:用于说话者识别和声纹识别的C++库

Alize是一个开源平台,它是为了使说话者识别、说话者分析和说话者跟踪变得容易。该库专门设计用于处理大量的数据和实验。

2.1 说话者识别

说话者识别是指通过分析和比较声音信号中的特征参数,确定当前说话者的身份。以下是一个简单的使用ALIZE进行说话者识别的C++代码例子:

#include "alize.h"

int main() {
    alize::MixtureServer ms;
    ms.loadMixtureFile("path_to_mixture_file");

    alize::FeatureServer fs(config, "path_to_feature_file");
    alize::Feature f;

    while (fs.readFeature(f)) {
        real_t score = ms.computeTopGaussLike(f);
        std::cout << "Score: " << score << std::endl;
    }

    return 0;
}

更多详情,请参考ALIZE官方文档.

2.2 声纹识别

声纹识别是通过分析和比较声音信号中的特征参数,确定某段语音是否由某个特定的人发出。以下是一个简单的使用ALIZE进行声纹识别的C++代码例子:

#include "alize.h"

int main() {
    alize::MixtureServer ms;
    ms.loadMixtureFile("path_to_mixture_file");

    alize::FeatureServer fs(config, "path_to_feature_file");
    alize::Feature f;

    while (fs.readFeature(f)) {
        real_t score = ms.computeTopGaussLike(f);
        std::cout << "Score: " << score << std::endl;
        if (score > threshold) {
            std::cout << "Voiceprint recognized!" << std::endl;
        } else {
            std::cout << "Voiceprint not recognized." << std::endl;
        }
    }

    return 0;
}

更多详情,请参考ALIZE官方文档.

3. WebRTC: 实时通信协议库

WebRTC (Web Real-Time Communication) 是一套开源的实时通信技术,它包含了音频、视频通话和数据共享等功能。这一协议库可以让你在网页或者移动应用中嵌入视频聊天等实时通信功能。

官方网站

3.1 音频处理

在WebRTC中,音频处理是非常重要的部分,其中涉及到噪声消除和回声消除等关键技术。

3.1.1 噪声消除

噪声消除是用于减少背景噪声、风声、电器噪声等的技术。下面是一个简单的C++示例代码:

#include <webrtc/modules/audio_processing/include/audio_processing.h>

// 创建AudioProcessing对象
webrtc::AudioProcessing* apm = webrtc::AudioProcessing::Create();

// 开启噪声消除
apm->noise_suppression()->Enable(true);

更多信息和示例代码可以参考WebRTC官方文档

3.1.2 回声消除

回声消除是用于防止扬声器的声音被麦克风再次捕获,形成回声。下面提供一个示例代码:

#include <webrtc/modules/audio_processing/include/audio_processing.h>

// 创建AudioProcessing对象
webrtc::AudioProcessing* apm = webrtc::AudioProcessing::Create();

// 开启回声消除
apm->echo_cancellation()->enable_drift_compensation(true);

3.2 视频处理

视频处理也是WebRTC中的重要环节,包括视频编解码和视频捕获与渲染。

3.2.1 视频编解码

视频编解码是将原始视频流转换为压缩的格式(编码)以及将压缩的格式转换回原始视频流(解码)。以下提供一个基本的编解码示例代码:

#include <webrtc/video_frame.h>
#include <webrtc/media/base/videocodec.h>

// 创建编解码器
webrtc::VideoCodec codec;
codec.codecType = webrtc::kVideoCodecVP8;

webrtc::VideoFrame frame = ...; // 从某个地方获取一帧视频

// 编码一帧
webrtc::EncodedImage encoded_image;
webrtc::CodecSpecificInfo codec_specific_info;
webrtc::RTPFragmentationHeader fragmentation_header;
int32_t result = encoder->Encode(frame, &codec_specific_info, &fragmentation_header);

更多关于视频编解码的信息可以参考WebRTC官方文档

3.2.2 视频捕获和渲染
#include <webrtc/api/video_codecs/video_encoder.h>
#include <webrtc/api/video/video_frame.h>
#include <webrtc/api/video/video_sink_interface.h>

// 创建VideoTrackSource对象,用于从摄像头获取视频数据
rtc::scoped_refptr<webrtc::VideoTrackSourceInterface> video_source =
    peer_connection_factory->CreateVideoSource();

// 创建VideoTrack对象,将其添加到PeerConnection中
rtc::scoped_refptr<webrtc::VideoTrackInterface> video_track =
    peer_connection_factory->CreateVideoTrack(kStreamLabel, video_source);

// 设置视频数据的接收端(例如一个窗口)
video_track->AddOrUpdateSink(video_window, rtc::VideoSinkWants());

更多关于视频捕获和渲染的内容可以查看WebRTC官方文档 。

4. OpenCV:开源计算机视觉库

OpenCV是一个基于BSD许可(也可以说是商业许可)发行的跨平台计算机视觉库,可以运行在Linux、Windows、Android和Mac OS操作系统上。它轻量级且高效——由一系列 C 函数和少量 C++ 类构成,提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。官网链接:OpenCV

4.1 图像处理

4.1.1 滤波器

滤波器是一种可以改变图像强度(如亮度或暗度)的方法,在OpenCV中,我们可以通过如下代码实现滤波操作:

#include <opencv2/opencv.hpp>

int main( int argc, char** argv )
{
    // 加载原始图像
    cv::Mat src = cv::imread(argv[1], 1);

    // 均值滤波
    cv::Mat dst;
    blur(src, dst, cv::Size(5,5));
    
    return 0;
}

更多详细信息可参考OpenCV滤波器官方文档。

4.1.2 边缘检测

边缘检测是识别图像边界的重要步骤,以下代码展示了如何使用OpenCV进行边缘检测:

#include <opencv2/opencv.hpp>
#include <opencv2/imgproc/imgproc.hpp>

int main(int argc, char** argv)
{
    cv::Mat src, edge, gray;

    // 读入图片,转为灰度图象
    src = imread(argv[1], 1);
    cvtColor(src, gray, CV_BGR2GRAY);

    // 使用Canny进行边缘检测
    Canny(gray, edge, 50, 150, 3);
    
    return 0;
}

关于边缘检测的更多细节,请访问OpenCV边缘检测官方文档。

4.2 视频分析

OpenCV对视频的支持也非常完善,包括目标跟踪、动态场景理解等功能。

4.2.1 目标跟踪

目标跟踪是计算机视觉中的一个重要部分,OpenCV提供了简单易用的API进行目标跟踪。以下就是一个简单的例子:

#include <opencv2/opencv.hpp>

int main(int argc, char** argv)
{
    cv::Mat frame;
    // 设置初始化边界框的位置
    cv::Rect2d bbox(287, 23, 86, 320);

    // 加载视频
    cv::VideoCapture video(argv[1]);

    // 创建KCF跟踪器
    cv::Ptr<cv::Tracker> tracker = cv::TrackerKCF::create();

    // 初始化跟踪器
    tracker->init(frame, bbox);
    
    while(video.read(frame))
    {   
        // 更新跟踪结果
        tracker->update(frame, bbox);

        // 画出边界框
        rectangle(frame, bbox, cv::Scalar(255, 0, 0), 2, 1); 

        // 显示结果
        imshow("Tracking", frame);
        
        if(cv::waitKey(1) == 27) break;
    }
    
    return 0;
}

关于目标跟踪的更多信息,请参考OpenCV官方文档。

4.2.2 动态场景理解

OpenCV 提供了背景消除等动态场景理解的方法。例如,可以使用 createBackgroundSubtractorMOG2() 创建一个背景消除器。

Ptr<BackgroundSubtractor> pMOG2 = createBackgroundSubtractorMOG2();
pMOG2->apply(frame, fgmask);

5. TensorFlow:开源深度学习库

TensorFlow是一个强大的开源深度学习库,支持多种平台。它由Google Brain团队开发,用于进行机器学习和神经网络研究。

5.1 训练神经网络模型

首先,我们需要训练一个神经网络模型。以下是一个简单的神经网络模型训练的C++实例代码:

#include "tensorflow/core/public/session.h"
#include "tensorflow/core/platform/env.h"

using namespace tensorflow;

int main(int argc, char* argv[]) {
    // Initialize a TensorFlow session.
    Session* session;
    Status status = NewSession(SessionOptions(), &session);
    if (!status.ok()) {
        cout << status.ToString() << "\n";
        return 1;
    }

    // Load the data
    Tensor x(DT_FLOAT, TensorShape({3, 3}));
    auto x_flat = x.flat<float>();
    for (int i = 0; i < x_flat.size(); ++i) {
        x_flat(i) = 1.0;
    }

    // Run the session
    std::vector<Tensor> outputs;
    status = session->Run({{"x", x}}, {"y"}, {}, &outputs);
    if (!status.ok()) {
        cout << status.ToString() << "\n";
        return 1;
    }

    // Print the result
    cout << outputs[0].flat<float>() << "\n";

    // Free any resources used by the session
    session->Close();
    delete session;
}

以上代码初始化了一个TensorFlow会话,然后加载数据并运行会话。

5.2 使用训练好的模型进行预测

当我们有一个训练好的模型后,我们就可以用它来进行预测。以下是一个使用训练好的模型进行预测的C++实例代码:

#include "tensorflow/core/public/session.h"
#include "tensorflow/core/platform/env.h"

using namespace tensorflow;

int main(int argc, char* argv[]) {
    // Initialize a new session
    Session* session;
    Status status = NewSession(SessionOptions(), &session);
    if (!status.ok()) {
        cout << status.ToString() << "\n";
        return 1;
    }
    
    // Load the trained model
    GraphDef graph_def;
    status = ReadBinaryProto(Env::Default(), "./trained_model.pb", &graph_def);
    if (!status.ok()) {
        cout << status.ToString() << "\n";
        return 1;
    }

    // Add the graph to the session
    status = session->Create(graph_def);
    if (!status.ok()) {
        cout << status.ToString() << "\n";
        return 1;
    }

    // Run the session with input, check the output
    std::vector<Tensor> outputs;
    Tensor x(DT_FLOAT, TensorShape({3, 5}));
    auto x_flat = x.flat<float>();
    for (int i = 0; i < x_flat.size(); ++i) {
        x_flat(i) = 1.0;
    }
    status = session->Run({{"x", x}}, {"y"}, {}, &outputs);
    if (!status.ok()) {
        cout << status.ToString() << "\n";
        return 1;
    }

    // Print the result
    cout << outputs[0].flat<float>() << "\n";

    // Free any resources used by the session
    session->Close();
    delete session;
}

以上代码首先初始化一个新的TensorFlow会话,然后加载训练好的模型,并使用模型进行预测。

6. Kaldi:专注于语音识别的软件工具包

Kaldi是一个由Daniel Povey和他的团队开发的开源语音识别工具包。它提供了一套完整的语音识别系统,包括特征提取、声学模型、解码器和训练工具等。Kaldi的主页链接是这里。

6.1 特征提取

在Kaldi中,有两种主要的特征提取方法:MFCC(Mel频率倒谱系数)和PLP(感知线性预测)。下面我们将会分别进行介绍。

6.1.1 MFCC

MFCC是一种广泛使用的语音特征提取方法。以下是一个C++例子,展示了如何在Kaldi中提取MFCC特征:

#include "feat/mfcc.h"

void ComputeMFCC(KaldiInputStream& input, Matrix<BaseFloat>& mfcc_features) {
    MfccOptions options;
    Mfcc mfcc(options);
    
    WaveData wave_data;
    wave_data.Read(input);
    
    mfcc.Compute(wave_data.Data(), 1.0, &mfcc_features);
}
6.1.2 PLP

PLP是另一种常用的语音特征提取方法。以下是一个C++例子,展示了如何在Kaldi中提取PLP特征:

#include "feat/plp.h"

void ComputePLP(KaldiInputStream& input, Matrix<BaseFloat>& plp_features) {
    PlpOptions options;
    Plp plp(options);

    WaveData wave_data;
    wave_data.Read(input);

    plp.Compute(wave_data.Data(), 1.0, &plp_features);
}

6.2 声学模型

Kaldi支持多种声学模型,包括GMM-HMM和DNN-HMM。

6.2.1 GMM-HMM

在Kaldi中,可以通过以下方式来构建和训练GMM-HMM模型:

#include "gmm/am-diag-gmm.h"
#include "hmm/hmm-utils.h"

AmDiagGmm am_gmm;
TransitionModel trans_model;

// 构建和训练GMM-HMM模型
TrainHmmModel(features, labels, &am_gmm, &trans_model);

// 保存模型
WriteKaldiObject(am_gmm, "gmm.mdl", binary);
WriteKaldiObject(trans_model, "trans.mdl", binary);
6.2.2 DNN-HMM

在Kaldi中,DNN-HMM模型的构建和训练可以通过以下方式进行:

#include "nnet3/nnet-utils.h"
#include "hmm/hmm-utils.h"

Nnet nnet;
TransitionModel trans_model;

// 构建和训练DNN-HMM模型
TrainDnnHmmModel(features, labels, &nnet, &trans_model);

// 保存模型
WriteKaldiObject(nnet, "nnet.mdl", binary);
WriteKaldiObject(trans_model, "trans.mdl", binary);

更多关于Kaldi的使用和详细信息,请参考其官方文档。

总结

通过对PJSIP、ALIZE、WebRTC、OpenCV、TensorFlow和Kaldi六个开源库的深入研究,我们得到的结论是,这些开源库在各自的领域中都显示出了强大的功能。它们的存在极大地推动了技术的进步,并为相关领域的专业人士提供了有效的工具。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

springboot+vue实现登录注册,短信注册以及微信扫描登录

说明&#xff1a;微信扫描登录需要微信注册--要钱&#xff0c;感谢尚硅谷提供的免费接口&#xff1b;短信注册需要阿里云的注册很麻烦并且短信费&#xff0c;没有接口&#xff0c;所以不打算实现&#xff0c;不过能做出效果。 目录 一、建立数据库 二、后端idea实现接口 1.…

幻兽帕鲁专用服务器怎样买省钱便宜?一个月30元

在数字娱乐的浪潮中&#xff0c;幻兽帕鲁Palworld以其独特的魅力吸引了无数玩家的目光。想要拥有流畅、稳定的游戏体验&#xff0c;一台专属的游戏服务器是必不可少的。而如何以最经济的价格购买到高品质的服务器&#xff0c;正是玩家们最关心的问题。腾讯云服务器性价比是很高…

每日Attention学习6——Context Aggregation Module

模块出处 [link] [code] [IJCAI 22] Boundary-Guided Camouflaged Object Detection 模块名称 Context Aggregation Module (CAM) 模块作用 增大感受野&#xff0c;全局特征提取 模块结构 模块代码 import torch import torch.nn as nn import torch.nn.functional as Fcla…

Anaconda安装和深度学习环境的安装(TensorFlow、Pytorch)

换了新电脑&#xff0c;重新装一下anaconda这些编程环境。好久没装过了&#xff0c;自己也需要查查资料&#xff0c;然后记录一下&#xff0c;分享给别人。 目标&#xff0c;三个环境&#xff1a;1.anaconda基础环境&#xff08;包含xgboost和lightgbm&#xff09;&#xff0c…

卫星通信现状与展望三 -- 分类总结及6G应用

作者:私语茶馆 卫星通信分类总结及6G应用 一、卫星轨道类型 卫星按照轨道距离地面的距离主要分为以下几种: 卫星轨道类型 卫星用途 轨道高度 VLEO(Very Low Earth Orbit) 对地观测、通信

Python中使用tkinter模块和类结构的结合使用举例——编写制作一个简单的加数GUI界面

Python中使用tkinter模块和类结构的结合使用举例——编写制作一个简单的加数GUI界面 这里写目录标题 Python中使用tkinter模块和类结构的结合使用举例——编写制作一个简单的加数GUI界面一、tkinter模块和类的简述1.1 tkinter的简要介绍1.2 类结构的简要介绍 二、基于类机构和t…

成本降低 90%,出海社交平台 Typing 基于 Databend 的大数据探

Typing&#xff08;输入中科技&#xff09;成立于 2022 年&#xff0c;是一家主要面向东南亚、拉美、中东等海外地区提供社交平台的出海企业。其社交平台类似于国内的 Soul、陌陌等&#xff0c;提供视频直播、语音聊天室、短视频、生活分享、文字聊天等社交功能&#xff0c;注册…

【C++】零钱兑换的始端---柠檬水找零

欢迎来CILMY23的博客 本篇主题为 零钱兑换的始端---柠檬水找零 个人主页&#xff1a;CILMY23-CSDN博客 个人专栏系列&#xff1a; Python | C | C语言 | 数据结构与算法 感谢观看&#xff0c;支持的可以给个一键三连&#xff0c;点赞关注收藏。 前言&#xff1a; 柠檬水找…

2024年最新【SpringBoot2】开发实用篇-测试_springboot2 test(1),2024年最新2024春招BAT面试真题详解

既有适合小白学习的零基础资料&#xff0c;也有适合3年以上经验的小伙伴深入学习提升的进阶课程&#xff0c;涵盖了95%以上软件测试知识点&#xff0c;真正体系化&#xff01; 由于文件比较多&#xff0c;这里只是将部分目录截图出来&#xff0c;全套包含大厂面经、学习笔记、…

吸血鬼崛起v rising皮革获取教程 v rising皮革机怎么获得

《V Rising》是一款由Stunlock Studios公司制作并发行的生存建造类游戏&#xff0c;以“吸血鬼”为题材。中文名为“吸血鬼崛起”。在游戏中&#xff0c;打boss可以获得许多掉落材料&#xff0c;有些材料需要合成&#xff0c;而制作皮革则需要使用皮革机。下面就为大家介绍一下…

利用大语言模型(KIMI)生成OPC UA 信息模型

在大语言模型没有出现之前&#xff0c;人们更倾向使用图形化工具或者基于窗口的软件来构建信息模型&#xff0c;图形化工具能够直观地表达信息模型中各元素之间的相互关系。但是图形化工具也有缺点&#xff0c;当描述一个复杂的信息模型时&#xff0c;图形会变得非常复杂和庞大…

如何通过OMS加快大表迁移至OceanBase

OMS&#xff0c;是OceanBase官方推出的数据迁移工具&#xff0c;能够满足众多数据迁移场景的需求&#xff0c;现已成为众多用户进行数据迁移同步的重要工具。OMS不仅支持多种数据源&#xff0c;还具备全量迁移、增量同步、数据校验等功能&#xff0c;并能够对分表进行聚合操作&…

豪投巨资,澳大利亚在追逐海市蜃楼吗?

澳大利亚政府正在积极投资于量子计算领域。继2021年向量子技术投资逾1亿澳元后&#xff0c;2023年5月&#xff0c;该国发布了首个国家量子战略&#xff0c;详细阐述了如何把握量子技术的未来及保持全球领先地位。 澳大利亚的国家量子战略概述 原文链接&#xff1a; https://ww…

jQuery-1.语法、选择器、节点操作

jQuery jQueryJavaScriptQuery&#xff0c;是一个JavaScript函数库&#xff0c;为编写JavaScript提供了更高效便捷的接口。 jQuery安装 去官网下载jQuery&#xff0c;1.x版本练习就够用 jQuery引用 <script src"lib/jquery-1.11.2.min.js"></script>…

力扣HOT100 - 4. 寻找两个正序数组的中位数

解题思路&#xff1a; 两个数组合并&#xff0c;然后根据奇偶返回中位数。 class Solution {public double findMedianSortedArrays(int[] nums1, int[] nums2) {int m nums1.length;int n nums2.length;int[] nums new int[m n];if (m 0) {if (n % 2 0) return (nums2…

游戏专用设备指纹方案解析

如同人类拥有独一无二的指纹&#xff0c;设备也有设备的指纹&#xff0c;我们可以把设备指纹理解为设备的唯一识别码。 构建设备指纹需要采集设备硬件信息、软件信息、环境信息、网络信息等维度信息&#xff0c;进行加密/压缩&#xff0c;再通过算法处理&#xff0c;赋予设备唯…

手机视频提取gif怎么操作?分享这个方法不能错过!

随着网络的发展动态gif表情包已经是人们交流的重要部分了。想要通过手机来实现视频转换gif的操作&#xff0c;还不想下载软件的情况下。可以通过使用手机端的视频转gif工具-GIF中文网&#xff0c;无需下载软件。手机端轻松一键就能在线实现视频提取gif的操作。一起来看看具体的…

【ETAS CP AUTOSAR工具链】RTA-OS基本概念与开发流程

RTA-OS基于早期ETAS操作系统的成熟技术&#xff0c;迄今为止&#xff0c;已在全球超过3.5亿个ECU中使用。RTA-OS是一个可静态配置的抢占式实时操作系统(RTOS)&#xff0c;它常被用于资源受限但有着高性能要求的方案中。内核的实现不仅遵循了AUTOSAR R3.x、R4.0、R4.1、R4.2、R4…

【stomp 实战】spring websocket 接收消息源码分析

后台消息的发送过程&#xff0c;我们通过spring websocket用户消息发送源码分析已经了解了。我们再来分析一下后端接收消息的过程。这个过程和后端发送消息过程有点类似。 前端发送消息 前端发送消息给服务端的示例如下&#xff1a; 发送给目的/app/echo一个消息。 //主动发…

英码科技推出昇腾系列AI加速卡:专为视频解析与模型推理场景打造,更具成本竞争力!

当前&#xff0c;人工智能的发展已进入加速渗透千行百业的阶段&#xff0c;算力已然成为数字化转型关键的新质生产力。随着国际挑战的加剧&#xff0c;国产算力的发展趋势愈发明显&#xff0c;市场需求也呈现出激增的态势。在这一大背景下&#xff0c;华为昇腾以其强大的技术实…
最新文章