apollo3录音到wav播放解决方法
SDK DEMO项目:ap3bp_evb_vos_pcm_recorder_20210901
pcm_recorder.c
//*****************************************************************************
//
// Options
//
//*****************************************************************************
#define PRINT_UART 0
#define USE_OPUS 1
//*****************************************************************************
//
// Cache configuration
//
//*****************************************************************************
const am_hal_cachectrl_config_t am_hal_cachectrl_benchmark =
{
.bLRU = 0,
.eDescript = AM_HAL_CACHECTRL_DESCR_1WAY_128B_512E,
.eMode = AM_HAL_CACHECTRL_CONFIG_MODE_INSTR,
};
#define RTT_LOGGER_BUFFER_LENGTH_BYTE (128*1024)
uint8_t ui8RttLoggerBuffer[RTT_LOGGER_BUFFER_LENGTH_BYTE];
#define AUDIO_FRAME_MS 20
#define AUDIO_FRAME_SIZE_SAMPLES ((16000)/(1000/AUDIO_FRAME_MS))
#define AUDIO_FRAME_SIZE_MONO_BYTES (AUDIO_FRAME_SIZE_SAMPLES*2)
#define AUDIO_FRAME_SIZE_STEREO_BYTES (AUDIO_FRAME_SIZE_SAMPLES*4)
#define ENCODED_HEADER_SIZE_BYITES 8
#define ENCODED_COMPRESS_RATE 8
#define ENCODED_FRAME_SIZE_BYTES ((AUDIO_FRAME_SIZE_SAMPLES*2/ENCODED_COMPRESS_RATE) + ENCODED_HEADER_SIZE_BYITES)
uint8_t g_opusAudioInputBuffer[AUDIO_FRAME_SIZE_MONO_BYTES]; // 20ms mono raw audio frame
bool g_opusInputReadyFlag = false;
#if USE_OPUS
uint8_t g_opusAudioOutputBuffer[ENCODED_FRAME_SIZE_BYTES]; // encoded audio frame, with header
uint16_t g_opusInputIndex = 0;
#endif // #if USE_OPUS
//*****************************************************************************
//
// PDM configuration information.
//
//*****************************************************************************
void *PDMHandle = NULL;
#define PDM_CLK 12
#define PDM_CLK_PIN_CFG AM_HAL_PIN_12_PDMCLK
#define PDM_DATA 11
#define PDM_DATA_PIN_CFG AM_HAL_PIN_11_PDMDATA
am_hal_pdm_config_t g_sPdmConfig =
{
.eClkDivider = AM_HAL_PDM_MCLKDIV_1, //主时钟分频设置为1,不分频
.eLeftGain = AM_HAL_PDM_GAIN_P105DB, //左声道增益延迟设置为105dB
.eRightGain = AM_HAL_PDM_GAIN_P105DB,
.ui32DecimationRate = 48, // CLK 1.5 Mhz //降频采样倍数
.bHighPassEnable = 0, //禁用高通滤波器
.ui32HighPassCutoff = 0xB,
.ePDMClkSpeed = AM_HAL_PDM_CLK_1_5MHZ, //PDM采样频率,1.5M转换后是16K音频频率
.bInvertI2SBCLK = 0,
.ePDMClkSource = AM_HAL_PDM_INTERNAL_CLK, //使用内部时钟源
.bPDMSampleDelay = 0, //PDM采样延迟
.bDataPacking = 1, //启用数据换包
.ePCMChannels = AM_HAL_PDM_CHANNEL_LEFT, //录音声道选择
.bLRSwap = 0, //不交换左右声道
.bSoftMute = 0, //禁用软静音
};
//*****************************************************************************
//
// Start a transaction to get some number of bytes from the PDM interface.
//
//*****************************************************************************
uint32_t g_ui32PDMDataBuffer[AUDIO_FRAME_SIZE_MONO_BYTES/4];
void
pdm_trigger_dma(void)
{
//
// Configure DMA and target address.
//
am_hal_pdm_transfer_t sTransfer;
sTransfer.ui32TargetAddr = (uint32_t ) g_ui32PDMDataBuffer;
sTransfer.ui32TotalCount = (AUDIO_FRAME_SIZE_MONO_BYTES);
//
// Start the data transfer.
//
am_hal_pdm_dma_start(PDMHandle, &sTransfer);
}
//*****************************************************************************
//
// Structure for handling PDM register state information for power up/down
//
//*****************************************************************************
typedef struct
{
bool bValid;
}
am_hal_pdm_register_state_t;
//*****************************************************************************
//
// Structure for handling PDM HAL state information.
//
//*****************************************************************************
typedef struct
{
am_hal_handle_prefix_t prefix;
am_hal_pdm_register_state_t sRegState;
uint32_t ui32Module;
}
am_hal_pdm_state_t;
void am_app_KWD_pdm_dma_disable(void *pHandle)
{
am_hal_pdm_state_t *pState = (am_hal_pdm_state_t *) pHandle;
uint32_t ui32Module = pState->ui32Module;
//
// Disable DMA
//
PDMn(ui32Module)->DMACFG_b.DMAEN = PDM_DMACFG_DMAEN_DIS;
}
//-----------------------------------------------------------------------------
// METHOD: PDM_Init
// PURPOSE: PDM module configuration
//-----------------------------------------------------------------------------
void PDMInit(void)
{
if (PDMHandle != NULL)
return;
//
// Initialize, power-up, and configure the PDM.
//
am_hal_pdm_initialize(0, &PDMHandle);
//
// Configure the necessary pins.
//
am_hal_gpio_pincfg_t sPinCfg = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
sPinCfg.uFuncSel = PDM_CLK_PIN_CFG;
am_hal_gpio_pinconfig(PDM_CLK, sPinCfg);
sPinCfg.uFuncSel = PDM_DATA_PIN_CFG;
am_hal_gpio_pinconfig(PDM_DATA, sPinCfg);
am_hal_pdm_power_control(PDMHandle, AM_HAL_PDM_POWER_ON, false);
am_hal_pdm_configure(PDMHandle, &g_sPdmConfig);
am_hal_pdm_fifo_flush(PDMHandle);
//
// Configure and enable PDM interrupts (set up to trigger on DMA
// completion).
//
am_hal_pdm_interrupt_enable(PDMHandle, (AM_HAL_PDM_INT_DERR
| AM_HAL_PDM_INT_DCMP
| AM_HAL_PDM_INT_UNDFL
| AM_HAL_PDM_INT_OVF));
NVIC_EnableIRQ(PDM_IRQn);
}
void PDMDeInit()
{
if(PDMHandle == NULL)
return;
am_hal_pdm_interrupt_clear(PDMHandle, (AM_HAL_PDM_INT_DERR
| AM_HAL_PDM_INT_DCMP
| AM_HAL_PDM_INT_UNDFL
| AM_HAL_PDM_INT_OVF));
am_hal_pdm_interrupt_disable(PDMHandle, (AM_HAL_PDM_INT_DERR
| AM_HAL_PDM_INT_DCMP
| AM_HAL_PDM_INT_UNDFL
| AM_HAL_PDM_INT_OVF));
NVIC_DisableIRQ(PDM_IRQn);
am_hal_gpio_pinconfig(PDM_CLK, g_AM_HAL_GPIO_DISABLE);
am_hal_gpio_pinconfig(PDM_DATA, g_AM_HAL_GPIO_DISABLE);
// This was a workaround code to measure power consumption. Need to review!!
am_app_KWD_pdm_dma_disable(PDMHandle);
am_hal_pdm_disable(PDMHandle);
am_hal_pdm_power_control(PDMHandle, AM_HAL_PDM_POWER_OFF, false);
am_hal_pdm_deinitialize(PDMHandle);
PDMHandle = NULL;
}
void am_pdm0_isr(void)
{
uint32_t ui32Status;
//
// Read the interrupt status.
//
am_hal_pdm_interrupt_status_get(PDMHandle, &ui32Status, true);
am_hal_pdm_interrupt_clear(PDMHandle, ui32Status);
//
// Once our DMA transaction completes, we will disable the PDM and send a
// flag back down to the main routine. Disabling the PDM is only necessary
// because this example only implemented a single buffer for storing FFT
// data. More complex programs could use a system of multiple buffers to
// allow the CPU to run the FFT in one buffer while the DMA pulls PCM data
// into another buffer.
//
if (ui32Status & AM_HAL_PDM_INT_DCMP)
{
// trigger next traction
PDMn(0)->DMATOTCOUNT = AUDIO_FRAME_SIZE_MONO_BYTES; // FIFO unit in bytes
amu2s_send(Amu2s_pcm, g_ui32PDMDataBuffer, AMU2S_PCM_BYTES);
#if USE_OPUS
//
// move data to opus buffer
//
memmove(g_opusAudioInputBuffer, g_ui32PDMDataBuffer,AUDIO_FRAME_SIZE_MONO_BYTES);
g_opusInputReadyFlag = true;
#endif // #if USE_OPUS
}
else if(ui32Status & (AM_HAL_PDM_INT_UNDFL | AM_HAL_PDM_INT_OVF))
{
am_hal_pdm_fifo_flush(PDMHandle);
}
}
#define AM_CRITICAL_BEGIN_VOS \
if ( 1 ) \
{ \
volatile uint32_t ui32Primask_04172010; \
ui32Primask_04172010 = am_hal_interrupt_master_disable();
#define AM_CRITICAL_END_VOS \
am_hal_interrupt_master_set(ui32Primask_04172010); \
}
//*****************************************************************************
//
// Main Function.
//
//*****************************************************************************
int
main(void)
{
//
// Set the clock frequency.
//
am_hal_clkgen_control(AM_HAL_CLKGEN_CONTROL_SYSCLK_MAX, 0);
//
// Set the default cache configuration
//
am_hal_cachectrl_config(&am_hal_cachectrl_benchmark);
am_hal_cachectrl_enable();
//
// Configure the board for low power operation.
//
am_bsp_low_power_init();
#if (PRINT_UART == 1)
am_bsp_uart_printf_enable();
//
// Clear the terminal and print the banner.
//
am_util_stdio_terminal_clear();
am_util_stdio_printf("Ambiq Micro 'while' example.\n\n");
//
// Brief description
//
am_util_stdio_printf("Used for measuring power in an infinite while loop.\n");
//
// Print the compiler version.
//
am_util_stdio_printf("App Compiler: %s\n", COMPILER_VERSION);
am_util_stdio_printf("HAL Compiler: %s\n", g_ui8HALcompiler);
am_util_stdio_printf("HAL SDK version: %d.%d.%d\n",
g_ui32HALversion.s.Major,
g_ui32HALversion.s.Minor,
g_ui32HALversion.s.Revision);
am_util_stdio_printf("HAL compiled with %s-style registers\n",
g_ui32HALversion.s.bAMREGS ? "AM_REG" : "CMSIS");
#endif // PRINT_UART
amu2s_init();
PDMInit();
am_hal_pdm_enable(PDMHandle);
pdm_trigger_dma();
SEGGER_RTT_ConfigUpBuffer(1, "TestDataLogger", ui8RttLoggerBuffer, RTT_LOGGER_BUFFER_LENGTH_BYTE, SEGGER_RTT_MODE_NO_BLOCK_SKIP);
#if USE_OPUS
/* initialize the audio encoder */
audio_enc_init(true); // true for with header
#endif // #if USE_OPUS
// master interrupt enable
am_hal_interrupt_master_enable();
while(1)
{
#if USE_OPUS
if(g_opusInputReadyFlag == true)
{
g_opusInputReadyFlag = false;
// data ready to encode, run encoder
uint32_t encoded_bytes = audio_enc_encode_frame((short*)g_opusAudioInputBuffer, AUDIO_FRAME_SIZE_SAMPLES, (unsigned char*)g_opusAudioOutputBuffer);
// send to RTT
SEGGER_RTT_Write(1, (uint8_t*)g_opusAudioOutputBuffer, encoded_bytes);
// send to AmU2S
amu2s_send(Amu2s_opus, g_opusAudioOutputBuffer, AMU2S_OPUS_BYTES);
#endif // #if USE_OPUS
}
}
项目编译,在开发板上运行,打开官方配备的工具,抓取录音数据,如下图:
按任意键停止抓取,即可抓取到非标准的PCM音频,如下图:
使用提供的 Python 脚本
运行以下命令解码为 PCM 文件:
python ftdi_bin_decoder.py decoder input.bin --output=audio --format=raw
生成文件:audio_pcm
(原始 PCM 数据)
执行成功,同时生成标准的PCM数据BIN文件和OPUS压缩的BIN文件,如下图:
如果出现以下错误提示
import pandas as pd
ModuleNotFoundError: No module named 'pandas'
遇到 ModuleNotFoundError: No module named 'pandas' 错误,说明你的 Python 环境中缺少 pandas 库
通过 pip 直接安装:pip install pandas
转换为 WAV 播放命令 :
python bin_to_wav.py mono -i audio_pcm
在PCM音频(BIN)文件加上WAV文件头,
执行成功后,生成可播放音频文件,如下图:
如果出现以下错误提示:
import soundfile as sf
ModuleNotFoundError: No module named 'soundfile'
错误 ModuleNotFoundError: No module named 'soundfile' 表明 Python 环境中缺少 soundfile 库。该库用于读写音频文件(如 WAV 格式),是 bin_to_wav.py 脚本的依赖项。
解决方法
安装 soundfile 库
通过 pip 直接安装:pip install soundfile
bin_to_wav.py这个python脚本重要补充说明
-
硬件适配特性:
-
声道交换:通过
--swap 1
参数修正 Apollo PDM 模块的左右声道反接问题 -
位深度处理:假设输入为 16-bit PCM,通过
/32768
实现标准化
-
-
音频处理流程: 原始PCM --> 解析为整数 --> 声道分离 --> 浮点归一化 --> 峰值归一化 --> 输出WAV
相关文章:
apollo3录音到wav播放解决方法
SDK DEMO项目:ap3bp_evb_vos_pcm_recorder_20210901 pcm_recorder.c //***************************************************************************** // // Options // //***************************************************************************** #define PRINT…...
信号处理抽取多项滤波的数学推导与仿真
昨天的《信号处理之插值、抽取与多项滤波》,已经介绍了插值抽取的多项滤率,今天详细介绍多项滤波的数学推导,并附上实战仿真代码。 一、数学变换推导 1. 多相分解的核心思想 将FIR滤波器的系数 h ( n ) h(n) h(n)按相位分组,每…...
Java网络多线程
网络相关概念: 关于访问: IP端口 因为一个主机上可能有多个服务, 一个服务监听一个端口,当你访问的时候主机通过端口号就能知道要和哪个端口发生通讯.因此一个主机上不能有两个及以上的服务监听同一个端口. 协议简单来说就是数据的组织形式 好像是两个人交流一样,要保证自己说…...
linux centos 忘记root密码拯救
在CentOS 7中,如果忘记root密码,可以通过修改系统启动参数进入单用户模式或紧急模式进行重置。以下是两种常用方法,适用于物理机或虚拟机环境: 方法一:通过rd.break参数重置密码 步骤: 重启系统并进入GRU…...
C# 事件使用详解
总目录 前言 在C#中,事件(Events)是一种基于委托的重要机制,用于实现对象之间的松耦合通信。它通过发布-订阅模式(Publisher-Subscriber Pattern),允许一个对象(发布者)…...
flink cdc同步mysql数据
一、api 添加依赖 <dependency><groupId>org.apache.flink</groupId><artifactId>flink-connector-mysql-cdc</artifactId><!-- 请使用已发布的版本依赖,snapshot 版本的依赖需要本地自行编译。 --><version>3.3-SNAP…...
tomcat负载均衡配置
这里拿Nginx和之前做的Tomcat 多实例来实现tomcat负载均衡 1.准备多实例与nginx tomcat单机多实例部署-CSDN博客 2.配置nginx做负载均衡 upstream tomcat{ server 192.168.60.11:8081; server 192.168.60.11:8082; server 192.168.60.11:8083; } ser…...
Ceph(1):分布式存储技术简介
1 分布式存储技术简介 1.1 分布式存储系统的特性 (1)可扩展 分布式存储系统可以扩展到几百台甚至几千台的集群规模,而且随着集群规模的增长,系统整体性能表现为线性增长。分布式存储的水平扩展有以下几个特性: 节点…...
16、JavaEE核心技术-EL与 JSTL
EL与 JSTL 实践 一. EL(Expression Language) EL(表达式语言)是 JSP 2.0 中引入的一种简单的脚本语言,用于在 JSP 页面中简化数据的访问和显示。它通过一种类似于 JavaScript 的语法,允许开发者在 JSP 页面…...
RabbitMQ报错:Shutdown Signal channel error; protocol method
报错信息: Shutdown Signal: channel error; protocol method: #method<channel.close>(reply-code406, reply-textPRECONDITION_FAILED - unknown delivery tag 1, class-id60, method-id80) 原因 默认情况下 RabbitMQ 是自动ACK(确认签收&…...
使用DeepSeek完成一个简单嵌入式开发
开启DeepSeek对话 请帮我使用Altium Designer设计原理图、PCB,使用keil完成代码编写;要求:使用stm32F103RCT6为主控芯片,控制3个流水灯的原理图 这里需要注意,每次DeepSeek的回答都不太一样。 DeepSeek回答 以下是使…...
NLP技术介绍
NLP技术介绍 语言分析技术分词词性标注命令实体识别句法分析语义分析文本处理技术文本分类文本聚类情感分析文本生成机器翻译对话系统与交互技术聊天机器人问答系统语音识别与合成知识图谱与语义理解技术知识图谱语义搜索语义推理深度学习与预训练模型循环神经网络(RNN)及其变…...
pycharm + anaconda + yolo11(ultralytics) 的视频流实时检测,保存推流简单实现
目录 背景pycharm安装配置代码实现创建本地视频配置 和 推流配置视频帧的处理和检测框绘制主要流程遇到的一些问题 背景 首先这个基于完整安装配置了anaconda和yolo11的环境,如果需要配置开始的话,先看下专栏里另一个文章。 这次的目的是实现拉取视频流…...
C++编译问题——1模板函数的实现必须在头文件中
今天编译数据结构时,遇见一个编译错误 假设你有一个头文件 SeqList.h 和一个源文件 SeqList.cpp。 SeqList.h #ifndef SEQLIST_H #define SEQLIST_H#include <stdexcept> #include <iostream>template<typename T> class SeqList { private:sta…...
深度学习PyTorch之数据加载DataLoader
深度学习pytorch之简单方法自定义9类卷积即插即用 文章目录 数据加载基础架构1、Dataset类详解2、DataLoader核心参数解析3、数据增强 数据加载基础架构 核心类关系图 torch.utils.data ├── Dataset (抽象基类) ├── DataLoader (数据加载器) ├── Sampler (采样策略)…...
使用Beanshell前置处理器对Jmeter的请求body进行加密
这里我们用HmacSHA256来进行加密举例: 步骤: 1.先获取请求参数并对请求参数进行处理(处理成String类型) //处理请求参数的两种方法: //方法一: //获取请求 Arguments args sampler.getArguments(); //转…...
前端面试:如何减少项目里面 if-else?
在前端开发中,大量使用 if-else 结构可能导致代码调试困难、可读性降低和冗长的逻辑。不妨考虑以下多种策略来减少项目中的 if-else 语句,提高代码的可维护性和可读性: 1. 使用对象字面量替代 用对象字面量来替代 if-else 语句,…...
05.基于 TCP 的远程计算器:从协议设计到高并发实现
📖 目录 📌 前言🔍 需求分析 🤔 我们需要解决哪些问题? 🎯 方案设计 💡 服务器架构 🚀 什么是协议?为什么要设计协议? 📌 结构化数据的传输问题 …...
Matlab:矩阵运算篇——矩阵数学运算
目录 1.矩阵的加法运算 实例——验证加法法则 实例——矩阵求和 实例——矩阵求差 2.矩阵的乘法运算 1.数乘运算 2.乘运算 3.点乘运算 实例——矩阵乘法运算 3.矩阵的除法运算 1.左除运算 实例——验证矩阵的除法 2.右除运算 实例——矩阵的除法 ヾ( ̄…...
git reset的使用,以及解决还原后如何找回
文章目录 git reset 详解命令作用常用参数1. --soft2. --mixed(默认参数,可省略)3. --hard4. 提交引用 总结 git reset --hard HEAD^ 还原代码如何找回?利用 git reflog找回 git reset 详解 git reset 是 Git 中一个功能强大且较…...
react中字段响应式
class中用法: import React, { Component } from react export default class Index extends Component<any, any> { constructor(props) { super(props) this.state { settingInfo: {}, } } async componentDidMount() { let settingInfo awa…...
vue中,watch里,this为undefined的两种解决办法
提示:vue中,watch里,this为undefined的两种解决办法 文章目录 [TOC](文章目录) 前言一、问题二、方法1——使用function函数代替箭头函数()>{}三、方法2——使用that总结 前言 尽量使用方法1——使用function函数代替箭头函数()…...
智能客服意图识别:结合知识库数据构建训练语料的专业流程
智能客服意图识别:结合知识库数据构建训练语料的专业流程 构建基于知识库的智能客服意图识别模型,需要综合运用 NLP(自然语言处理)、知识图谱、机器学习 等技术,确保意图识别的准确性和覆盖度。以下是专业的流程&…...
Spring Boot集成Spring Statemachine
Spring Statemachine 是 Spring 框架下的一个模块,用于简化状态机的创建和管理,它允许开发者使用 Spring 的特性(如依赖注入、AOP 等)来构建复杂的状态机应用。以下是关于 Spring Statemachine 的详细介绍: 主要特性 …...
压缩空气储能仿真simulink模型
压缩空气储能仿真simulink模型,适合matlab 2017及以上版本 CompressingGas.slx , 40474...
Tomcat 安装
一、Tomcat 下载 官网:Apache Tomcat - Welcome! 1.1.下载安装包 下载安装包: wget https://dlcdn.apache.org/tomcat/tomcat-9/v9.0.102/bin/apache-tomcat-9.0.102.tar.gz 安装 javajdk。 yum install java-1.8.0-openjdk.x86_64 -y /etc/altern…...
贪心算法和遗传算法优劣对比——c#
项目背景:某钢管厂的钢筋原材料为 55米,工作需要需切割 40 米(1段)、11 米(15 段)等 4 种规格 ,现用贪心算法和遗传算法两种算法进行计算: 第一局:{ 40, 1 }, { 11, 15…...
系统开发资源
一、前端篇 1.1 菜鸟CSS教程 1.2 HTML/CSS/JS 在线工具 二、后端篇 三、其他篇 3.1 菜鸟官网 3.2 黑马程序员学习路线 3.3 根据地区获取经纬度...
深度学习 bert与Transformer的区别联系
BERT(Bidirectional Encoder Representations from Transformers)和Transformer都是现代自然语言处理(NLP)中的重要概念,但它们代表不同的层面。理解这两者之间的区别与联系有助于更好地掌握它们在NLP任务中的应用。 …...
unity使用mesh 画图(1)
plane 圆 空心椭圆 椭圆 using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI;public class DrawMeshManager {static DrawMeshManager instance;public static DrawMeshManager Instance {get {if (instance ! null){retu…...
SpringMVC响应页面及不同类型的数据,
目录 响应页面 响应数据 文本数据 响应POJO对象 编辑 响应生命周期 视图解析器 控制器(Controller)处理完客户端请求后,生成的并返回给客户端的结果就是响应,响应的结果可以是静态页面,数据,HTM…...
地理信息系统(ArcGIS)在水文水资源及水环境中的应用:空间数据管理、空间分析功能、可视化表达
随着全球工业化和经济的快速发展,水资源短缺、水污染等问题日益严峻,成为制约可持续发展的重大瓶颈。地理信息系统(GIS)以其强大的空间数据管理和分析能力,在水文水资源及水环境的研究和管理中展现出独特优势。本文将深…...
电路原理(电容 集成电路NE555)
电容 1.特性:充放电,隔直流,通交流 2.电容是通过聚集正负电荷来存储电能的 3.电容充放电过程可等效为导通回路 4.多电容并联可以把容量叠加,但是多电容串联就不会,只会叠加电容的耐压值。 6.电容充放电时相当于通路&a…...
C++对象的初始化和对象所占资源的清理-----初始化列表
一、初始化列表 C 提供了 初始化列表(initializer list) 语法,可以在 构造函数 中用来初始化类的成员变量。它的主要优势是 提高效率,特别是在初始化 const 或 reference 类型的成员时,以及避免额外的赋值操作。 1.…...
零成本搭建Calibre个人数字图书馆支持EPUB MOBI格式远程直读
文章目录 前言1.网络书库软件下载安装2.网络书库服务器设置3.内网穿透工具设置4.公网使用kindle访问内网私人书库 前言 嘿,各位书虫们!今天要给大家安利一个超级炫酷的技能——如何在本地Windows电脑上搭建自己的私人云端书库。亚马逊服务停了ÿ…...
Ansible命令行模式常用模块使用案例(二)
在Ansible中,命令行模式(Ad-Hoc 模式)是一种快速执行任务的方式,适合临时任务或简单操作。以下是 Ansible 命令行模式中常用模块的使用案例(第二部分): 1 file模块 功能特性:主要用于…...
12. Pandas :使用pandas读Excel文件的常用方法
一 read_excel 函数 其他参数根据实际需要进行查找。 1.接受一个工作表 在 11 案例用到的 Excel 工作簿中,数据是从第一张工作表的 A1 单元格开始的。但在实际场景中, Excel 文件可能并没有这么规整。所以 panda 提供了一些参数来优化读取过程。 比如 s…...
Pytorch中矩阵乘法使用及案例
六种矩阵乘法 torch中包含许多矩阵乘法,大致可以分为以下几种: *:即a * b 按位相乘,要求a和b的形状必须一致,支持广播操作 torch.matmul():最广泛的矩阵乘法 :与torch.matmul()效果一样&…...
【MySQL】增删改查进阶
目录 一、数据库约束 约束类型 NULL约束:非空约束 UNIQUE:唯一约束 DEFAULT:默认值约束 PRIMARY KEY:主键约束 FOREIGN KEY:外键约束 二、表的设计 三、新增 四、查询 聚合查询 聚合函数 GROUP BY子句 HA…...
【Linux 指北】常用 Linux 指令汇总
第一章、常用基本指令 # 注意: # #表示管理员 # $表示普通用户 [rootlocalhost Practice]# 说明此处表示管理员01. ls 指令 语法: ls [选项][目录或文件] 功能:对于目录,该命令列出该目录下的所有子目录与文件。对于文件…...
父组件中循环生成多个子组件时,有且只有最后一个子组件的watch对象生效问题及解决办法
提示:父组件中循环生成多个子组件时,有且只有最后一个子组件的watch对象生效问题及解决办法 文章目录 [TOC](文章目录) 前言一、问题二、解决方法——使用function函数代替箭头函数()>{}总结 前言 问题:子组件用that解决watch无…...
stable Diffusion 中的 VAE是什么
在Stable Diffusion中,VAE(Variational Autoencoder,变分自编码器)是一个关键组件,用于生成高质量的图像。它通过将输入图像编码到潜在空间(latent space),并在该空间中进行操作&…...
麒麟v10 ARM64架构系统升级mysql数据库从mysql-5.7.27到mysql-8.4.4图文教程
1、背景与问题说明 因mysql-5.2.27版本存在安全漏洞问题,为保障系统安全,需将处于生产环境的麒麟v10 ARM64架构系统服务器上当前部署的mysql-5.7.27版本升级到mysql-8.4.4,以规避潜在风险,提升系统整体的安全性和稳定性。 1.1 本…...
图论·拓扑排序
拓扑排序 有向无环图的遍历 检查有向图是否连通/有环 核心操作 统计度数,对于度为0的点作为起始点,添加度为0的点作为遍历 如何验证有环?注意不建议直接模拟,如果出现环这起始点的度一定不为0,肯定会少遍历一些点&…...
Uniapp组件 Textarea 字数统计和限制
Uniapp Textarea 字数统计和限制 在 Uniapp 中,可以通过监听 textarea 的 input 事件来实现字数统计功能。以下是一个简单的示例,展示如何在 textarea 的右下角显示输入的字符数。 示例代码 首先,在模板中定义一个 textarea 元素ÿ…...
一文了解JVM的垃圾回收
Java堆内存结构 java堆内存是垃圾回收器管理的主要区域,也被称为GC堆。 为了方便垃圾回收,堆内存被分为新生代、老年代和永久代。 新创建的对象的内存会在新生代中分配,达到一定存活时长后会移入老年代,而永久代存储的是类的元数…...
Vector底层结构和源码分析(JDK1.8)
参考视频:韩顺平Java集合 Vector 类的定义说明: Vector 的底层也是一个对象数组,protected Object[] elementData;Vector 是线程同步的,即线程安全,Vectoe 类的操作方法带有 synchronized 关键字:public sy…...
uni-app+vue3学习随笔
目录相关 static文件 编译器会把static目录中的内容整体复制到最终编译包内, 非 static 目录下的文件(vue组件、js、css 等)只有被引用时,才会被打包编译。 css、less/scss 等资源不要放在 static 目录下,建议这些…...
JetBrains(全家桶: IDEA、WebStorm、GoLand、PyCharm) 2024.3+ 2025 版免费体验方案
JetBrains(全家桶: IDEA、WebStorm、GoLand、PyCharm) 2024.3 2025 版免费体验方案 前言 JetBrains IDE 是许多开发者的主力工具,但从 2024.02 版本起,JetBrains 调整了试用政策,新用户不再享有默认的 30 天免费试用…...
移远通信联合德壹发布全球首款搭载端侧大模型的AI具身理疗机器人
在汹涌澎湃的人工智能浪潮中,具身智能正从实验室构想迈向现实应用。移远通信凭借突破性的端侧AI整体解决方案,为AI机器人强势赋能,助力其实现跨行业拓展,从工业制造到服务接待,再到医疗康养,不断改写各行业…...