语音模块学习——LSYT201B模组(实际操作篇)
目录
一、定制词条
二、直接用串口通信
三、使用单片机通信
理论篇在这,依旧是深圳雷龙发展的语音模块。
http://t.csdnimg.cn/2SzJL
一、定制词条
因为我想后面加到我的毕设上加个语音模块,所以定制的词条都是和芯测相关的。
| 动作 | 词条 | 播报 | 串口输出(9600) |
| 开机播报 | 无 | ||
| 10S自动退出唤醒 | 有需要再叫我 | 无 | |
| 唤醒词 | 你好小龙 | 我在 | FE 04 00 00 02 FD |
| 命令词 | 录制音频 | 开始录制 | FE 04 00 01 03 FD |
| 播放音频 | 开始播放 | FE 04 00 02 04 FD | |
| 显示红色 | 显示红色 | FE 04 00 03 05 FD | |
| 显示多色 | 显示多色 | FE 04 00 04 06 FD | |
| 调节背光 | 调节背光 | FE 04 00 05 07 FD | |
| 时钟测试 | 开始测试 | FE 04 00 06 08 FD | |
| 四八五测试 | 开始测试 | FE 04 00 07 09 FD | |
| 看测试 | 开始测试 | FE 04 00 08 0A FD | |
| 按键测试 | 开始测试 | FE 04 00 09 0B FD | |
| 查看温度 | 查看温度 | FE 04 00 0A 0C FD | |
| 开始网络通信 | 开始网络通信 | FE 04 00 0B 0D FD | |
| 关闭网络通信 | 关闭网络通信 | FE 04 00 0C 0E FD | |
| 关闭显示器 | 关闭显示器 | FE 04 00 0D 0F FD | |
| 打开显示器 | 打开显示器 | FE 04 00 0E 10 FD | |
| 查看环境温度 | 查看环境温度 | FE 04 00 0F 11 FD | |
| 查看环境湿度 | 查看环境湿度 | FE 04 00 10 12 FD | |
| 查看当前位置 | 查看单签位置 | FE 04 00 11 13 FD | |
| 前进 | 前进 | FE 04 00 12 14 FD | |
| 后退 | 后退 | FE 04 00 13 15 FD | |
| 停止 | 停止 | FE 04 00 14 16 FD |
二、直接用串口通信
| 起始码 | 长度 | 方向 | 动作ID | SUM | 结束码 |
| 0xFE | 0x04 | 0x00 | 0xXX | 0xXX | 0xFD |
和技术人员沟通电源最好用5V的供电,我直接接串口用PC做了下测试


因为这个接线柱是2.0的所以不能直接用杜邦线,杜邦线是2.54的。所欲我就扒了个皮给他焊上了,防止不同接线柱之间连电,这里需要保留一部分塑料。

随便测了几个指令这里拾音度是真的高很灵敏。比我之前做的那个灵敏。但是还是那个缺点,不能自己改语音指令有点难受。
为了低功耗,所以这类语音模块都是那种唤醒词形式的。像咱们的手机小爱同学,hi,Siri等等这种,我的这个叫你好小龙。
总体来说可定制化很高比那种自己可以拿SDK烧写的要高很多,缺点是没SDK。
音量的调节也比较麻烦需要修改电阻的大小。具体怎么修改到时候可以问技术人员

大概就是修改这两个电阻。
三、使用单片机通信
重点来咯,怎么用单片机实现,之前想着用I.MAX6ULL来着,但是我现在没时间,就用经典c8t6来做个demo吧。很好一年没写32的程序了已经忘的差不多了哈哈。
先说说思路,初始化串口1和串口2.串口2接我们的模块,接收到指令后分析一下转化成对应语句打印到串口1很简单的程序,为什么不真的来控制一下呢,还是那句话,没时间。c8t6最小系统没有板载传感器,连灯泡也就一个。难受的很我要自己焊接,属实麻烦嘿嘿。各位读者朋友见谅哈。作者要做毕设,时间紧任务重呀,用韦东山老师的板子本来以为有移植好的鸿蒙和驱动,我只做服务器客户端还有通信就可用呢。但是被骗了,裸机写的驱动程序,和鸿蒙没有一毛钱关系。我要开发14个驱动程序还要学习鸿蒙应用层开发,以及最难的。把鸿蒙移植到I.MAX6ULL上。所以木有办法咯,抱歉抱歉后面有机会再来好好写写怎么用语音模块。
下面是串口2的驱动程序,基于标准库的,为什么叫ESP8266因为我懒所以拿那个代码改的哈哈。
/* 函数体 --------------------------------------------------------------------*/
/*** 函数功能: 初始化ESP8266用到的GPIO引脚* 输入参数: 无* 返 回 值: 无* 说 明:无*/
static void ESP8266_GPIO_Config ( void )
{/*定义一个GPIO_InitTypeDef类型的结构体*/GPIO_InitTypeDef GPIO_InitStructure;/* 配置 CH_PD 引脚*/RCC_APB2PeriphClockCmd( ESP8266_RST_CLK, ENABLE ); GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; /* 配置 RST 引脚*/ GPIO_InitStructure.GPIO_Pin = ESP8266_RST_PIN;GPIO_Init ( ESP8266_RST_PORT, & GPIO_InitStructure ); /* 拉高WiFi模块的复位重启引脚 */GPIO_ResetBits( ESP8266_RST_PORT, ESP8266_RST_PIN );}/*** 函数功能: 配置 ESP8266 USART 的 NVIC 中断优先级* 输入参数: 无* 返 回 值: 无* 说 明:无*/
static void ESP8266_USART_NVIC_Configuration ( void )
{NVIC_InitTypeDef NVIC_InitStructure; /* Configure the NVIC Preemption Priority Bits */ NVIC_PriorityGroupConfig ( NVIC_PriorityGroup_2 );/* Enable the USART2 Interrupt */NVIC_InitStructure.NVIC_IRQChannel = ESP8266_USART_IRQ; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;NVIC_Init(&NVIC_InitStructure);}/*** 函数功能: 初始化ESP8266用到的 USART* 输入参数: 无* 返 回 值: 无* 说 明:无*/
static void ESP8266_USART_Config ( void )
{GPIO_InitTypeDef GPIO_InitStructure;USART_InitTypeDef USART_InitStructure; /* config USART clock */ESP8266_USART_APBxClock_FUN ( ESP8266_USART_CLK, ENABLE );ESP8266_USART_GPIO_APBxClock_FUN ( ESP8266_USART_GPIO_CLK | RCC_APB2Periph_AFIO, ENABLE );/* USART GPIO config *//* Configure USART Tx as alternate function push-pull */GPIO_InitStructure.GPIO_Pin = ESP8266_USART_TX_PIN;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(ESP8266_USART_TX_PORT, &GPIO_InitStructure); /* Configure USART Rx as input floating */GPIO_InitStructure.GPIO_Pin = ESP8266_USART_RX_PIN;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;GPIO_Init(ESP8266_USART_RX_PORT, &GPIO_InitStructure);/* USART1 mode config */USART_InitStructure.USART_BaudRate = ESP8266_USART_BAUD_RATE;USART_InitStructure.USART_WordLength = USART_WordLength_8b;USART_InitStructure.USART_StopBits = USART_StopBits_1;USART_InitStructure.USART_Parity = USART_Parity_No ;USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;USART_Init(ESP8266_USARTx, &USART_InitStructure);/* 中断配置 */USART_ITConfig ( ESP8266_USARTx, USART_IT_RXNE, ENABLE ); //使能串口接收中断 USART_ITConfig ( ESP8266_USARTx, USART_IT_IDLE, ENABLE ); //使能串口总线空闲中断 ESP8266_USART_NVIC_Configuration(); USART_Cmd(ESP8266_USARTx, ENABLE); /* 清除发送完成标志 */USART_ClearFlag(ESP8266_USARTx, USART_FLAG_TC|USART_FLAG_TXE|USART_FLAG_RXNE);
}/*** 函数功能: 格式化输出,类似于C库中的printf,但这里没有用到C库* 输入参数: USARTx 串口通道,这里只用到了串口2,即USART2* Data 要发送到串口的内容的指针* ... 其他参数* 返 回 值: 无* 说 明:典型应用 USART2_printf( USART2, "\r\n this is a demo \r\n" );* USART2_printf( USART2, "\r\n %d \r\n", i );* USART2_printf( USART2, "\r\n %s \r\n", j );*/
void USART_printf(USART_TypeDef * USARTx, char * Data, ... )
{const char *s;int d; char buf[16];va_list ap;va_start(ap, Data);while ( * Data != 0 ) // 判断是否到达字符串结束符{ if ( * Data == 0x5c ) //'\'{ switch ( *++Data ){case 'r': //回车符USART_SendData(USARTx, 0x0d);Data ++;break;case 'n': //换行符USART_SendData(USARTx, 0x0a); Data ++;break;default:Data ++;break;} }else if ( * Data == '%'){ //switch ( *++Data ){ case 's': //字符串s = va_arg(ap, const char *);for ( ; *s; s++) {USART_SendData(USARTx,*s);while( USART_GetFlagStatus(USARTx, USART_FLAG_TXE) == RESET );} Data++; break;case 'd': //十进制d = va_arg(ap, int); itoa(d, buf, 10); for (s = buf; *s; s++) {USART_SendData(USARTx,*s);while( USART_GetFlagStatus(USARTx, USART_FLAG_TXE) == RESET );} Data++; break; default:Data++; break; } } else USART_SendData(USARTx, *Data++);while ( USART_GetFlagStatus ( USARTx, USART_FLAG_TXE ) == RESET );}
}/*** 函数功能: 将整形数据转换成字符串* 输入参数: radix =10 表示10进制,其他结果为0* value 要转换的整形数* buf 转换后的字符串* radix = 10* 返 回 值: 无* 说 明:被USART_printf()调用*/
static char * itoa( int value, char *string, int radix )
{int i, d;int flag = 0;char *ptr = string;/* This implementation only works for decimal numbers. */if (radix != 10){*ptr = 0;return string;}if (!value){*ptr++ = 0x30;*ptr = 0;return string;}/* if this is a negative value insert the minus sign. */if (value < 0){*ptr++ = '-';/* Make the value positive. */value *= -1;}for (i = 10000; i > 0; i /= 10){d = value / i;if (d || flag){*ptr++ = (char)(d + 0x30);value -= (d * i);flag = 1;}}/* Null terminate the string. */*ptr = 0;return string;
} /* NCL_Itoa *//*** 函数功能: ESP8266初始化函数* 输入参数: 无* 返 回 值: 无* 说 明:无*/
void ESP8266_Init ( void )
{ESP8266_GPIO_Config (); ESP8266_USART_Config ();
}
下面是串口1的初始化和输入输出重定向
void DEBUG_USART_Init(void)
{/* 定义IO硬件初始化结构体变量 */GPIO_InitTypeDef GPIO_InitStructure;/* 定义USART初始化结构体变量 */USART_InitTypeDef USART_InitStructure;/* 使能USART时钟 */DEBUG_USARTx_ClockCmd(DEBUG_USARTx_CLK,ENABLE);/* 使能USART功能GPIO时钟 */DEBUG_USARTx_GPIO_ClockCmd(DEBUG_USARTx_TX_CLK | DEBUG_USARTx_RX_CLK | RCC_APB2Periph_AFIO,ENABLE);/* 调试USART功能GPIO初始化 *//* 设定USART发送对应IO编号 */GPIO_InitStructure.GPIO_Pin = DEBUG_USARTx_TX_PIN;/* 设定USART发送对应IO模式:复用推挽输出 */GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;/* 设定USART发送对应IO最大操作速度 :GPIO_Speed_50MHz */GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;/* 初始化USART发送对应IO */GPIO_Init(DEBUG_USARTx_TX_PORT, &GPIO_InitStructure); /* 设定USART接收对应IO编号 */GPIO_InitStructure.GPIO_Pin = DEBUG_USARTx_RX_PIN;/* 设定USART发送对应IO模式:浮空输入 */GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;/* 其他没有重新赋值的成员使用与串口发送相同配置 *//* 初始化USART接收对应IO */GPIO_Init(DEBUG_USARTx_RX_PORT, &GPIO_InitStructure); /* USART工作环境配置 *//* USART波特率:115200 */USART_InitStructure.USART_BaudRate = DEBUG_USARTx_BAUDRATE;/* USART字长(有效位):8位 */USART_InitStructure.USART_WordLength = USART_WordLength_8b;/* USART停止位:1位 */USART_InitStructure.USART_StopBits = USART_StopBits_1;/* USART校验位:无 */USART_InitStructure.USART_Parity = USART_Parity_No ;/* USART硬件数据流控制(硬件信号控制传输停止):无 */USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;/* USART工作模式使能:允许接收和发送 */USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;/* 初始化USART */USART_Init(DEBUG_USARTx, &USART_InitStructure);/* 使能USART */USART_Cmd(DEBUG_USARTx, ENABLE);}/*** 函数功能: 重定向c库函数printf到USARTx* 输入参数: 无* 返 回 值: 无* 说 明:无*/
int fputc(int ch, FILE *f)
{/* 发送一个字节数据到调试串口 */USART_SendData(DEBUG_USARTx, (uint8_t) ch);/* 等待串口数据发送完毕 */while (USART_GetFlagStatus(DEBUG_USARTx, USART_FLAG_TXE) == RESET); return (ch);
}/*** 函数功能: 重定向c库函数getchar,scanf到USARTx* 输入参数: 无* 返 回 值: 无* 说 明:无*/
int fgetc(FILE *f)
{/* 等待串口输入数据 */while (USART_GetFlagStatus(DEBUG_USARTx, USART_FLAG_RXNE) == RESET);return (int)USART_ReceiveData(DEBUG_USARTx);
}
主要是中断处理,在中断接收数据并存入缓冲区然后主函数中对缓冲区内容与ID进行比对,最后打印到串口助手。
void ESP8266_USART_INT_FUN(void)
{uint8_t ucCh;count++;if ( USART_GetITStatus (ESP8266_USARTx, USART_IT_RXNE ) != RESET ){
// ucCh = USART_ReceiveData(ESP8266_USARTx );
// ucaRxBuf[count] = ucCh;if ( strEsp8266_Fram_Record .InfBit .FramLength < ( RX_BUF_MAX_LEN - 1 ) ) //预留1个字节写结束符strEsp8266_Fram_Record .Data_RX_BUF [ strEsp8266_Fram_Record .InfBit .FramLength ++ ] = ucCh;}if ( USART_GetITStatus(ESP8266_USARTx, USART_IT_IDLE ) == SET ) //数据帧接收完毕{if(strEsp8266_Fram_Record .InfBit .FramLength >= 6){ ucTcpClosedFlag = 1;strEsp8266_Fram_Record .InfBit .FramFinishFlag = 1;strEsp8266_Fram_Record .Data_RX_BUF [ strEsp8266_Fram_Record .InfBit .FramLength++ ] = '\0';}ucCh = USART_ReceiveData(ESP8266_USARTx );//ucTcpClosedFlag = strstr(strEsp8266_Fram_Record .Data_RX_BUF, "CLOSED\r\n" ) ? 1 : 0;}else{strEsp8266_Fram_Record .InfBit .FramFinishFlag = 0;//ucTcpClosedFlag = 0;}
}
稍微修改了一下。
主函数的逻辑大家按照自己的需要去做就行,接收到什么ID对应去操作什么器件。我这里就直接解析并且打印了。

相关文章:
语音模块学习——LSYT201B模组(实际操作篇)
目录 一、定制词条 二、直接用串口通信 三、使用单片机通信 理论篇在这,依旧是深圳雷龙发展的语音模块。 http://t.csdnimg.cn/2SzJL 一、定制词条 因为我想后面加到我的毕设上加个语音模块,所以定制的词条都是和芯测相关的。 动作词条播报串口输…...
Android应用界面
概述:由于学校原因,估计会考,曹某人就浅学一下。 目录 View概念 创建和使用布局文件 相对布局 线性布局 水平线性布局 垂直线性布局 表格布局 帧布局 扁平化布局 Android控件详解 AdapterView及其子类 View概念 安卓中的View是所…...
生活的色彩--爱摸鱼的美工(17)
题记 生活不如意事十之八九, 恶人成佛只需放下屠刀,善人想要成佛却要经理九九八十一难。而且历经磨难成佛的几率也很小,因为名额有限。 天地不仁以万物为刍狗! 小美工记录生活,记录绘画演变过程的一天。 厨房 食…...
【YOLO v5 v7 v8 v9小目标改进】AFPN 渐进式特征金字塔网络:解决多尺度特征融合中,信息在传递过程丢失
AFPN 渐进式特征金字塔网络:解决多尺度特征融合中,信息在传递过程丢失 提出背景AFPN 多尺度特征金字塔 非邻近层次的直接特征融合 自适应空间融合操作 小目标涨点YOLO v5 魔改YOLO v7 魔改YOLO v8 魔改YOLO v9 魔改 提出背景 论文:https:…...
问题解决 | vscode无法连接服务器而ssh和sftp可以
解决步骤 进入家目录删除.vscode-server rm -rf .vscode-server 然后再次用vscode连接服务器时,会重新安装,这时可能报出一些缺少依赖的错 需要联系管理员安装相关依赖,比如 sudo apt-get install libstdc6 至此问题解决...
Git 远程操作
1.分布式版本控制系统 我们目前所说的所有内容(工作区,暂存区,版本库等等),都是在本地!也就是在你的笔记本或者计算机上。而我们的 Git 其实是分布式版本控制系统!什么意思呢 可以简单理解为&am…...
Windows C++ 实现远程虚拟打印机(远程共享打印机)
编译错误已经修改完后的工程修改后的下载地址 https://download.csdn.net/download/2403_83063732/88928550 1、下载clawpdf(0.8.7版本) https://github.com/clawsoftware/clawPDF 2、打开clawpdf工程开始编译C#工程,出现如下错误…...
【jvm】java对象占用内存问题深入解析
一个Java对象占用多大内存-CSDN博客 关于Object o new Object()追魂九连问(个人学习笔记) - 知乎JVM(Java虚拟机)-史上最全、最详细JVM笔记-CSDN博客...
金现代产品方案部部长王宁,将出席“ISIG-低代码/零代码技术与应用发展峰会”
3月16日,第四届「ISIG中国产业智能大会」将在上海中庚聚龙酒店拉开序幕。本届大会由苏州市金融科技协会指导,企智未来科技(LowCode低码时代、RPA中国、AIGC开放社区)主办。大会旨在聚合每一位产业成员的力量,深入探索低…...
数据结构——lesson7二叉树 堆的介绍与实现
前言💞💞 啦啦啦~这里是土土数据结构学习笔记🥳🥳 💥个人主页:大耳朵土土垚的博客 💥 所属专栏:数据结构学习笔记 💥对于数据结构顺序表链表有疑问的都可以在上面数据结…...
阿里云DSW做AI绘画时的显卡选择A10?V100?
V100是Volta架构,A10是Ampere架构,架构上讲A10先进点,其实只是制程区别,用起来没区别。 V100是HBM的内存读取,带宽大,但是DDR5的。 二块卡都是全精度为主的算力卡,半精度优势不明显。 需要用…...
MySQL安装使用(mac)
目录 一、下载MySQL 二、环境变量 三、启动 MySql 四、初始化密码设置 一、下载MySQL 打开 MySql 官方下载页面 我是macOS12,所以选择了8.0.30 下载完成之后,打开安装,一直下一步安装完成,在最后安装完成时,会弹出…...
Qt控制台项目也能使用opencv的imshow来显示摄像头视频
创建一个Qt控制台项目,目的是实现在控制台打开摄像头视频。由于windows平台是支持GUI(图形用户界面)功能,所以在windows环境下是可以打开的,但是linux环境下,由于不支持GUI功能,而是支持wayland,…...
前端缓存使用规范
一、Cookie使用规范 cookie的存储空间非常有限且会携带在请求头中会浪费不必要的流量,如果仅仅是为存储数据,可以采用其他替代方案,例如 webStorage,非必要不使用cookie。 1、使用方法 注意:过期时间时需转换成UTC格…...
Linux rmmod命令教程:如何卸载内核模块(附实例详解和注意事项)
Linux rmmod命令介绍 rmmod(全称:remove module)用于从Linux内核中卸载已加载的内核模块。它允许您在运行时移除不再需要的模块,以释放系统资源或更改内核配置。 Linux rmmod命令适用的Linux版本 rmmod在大多数Linux发行版中通…...
中国气象要素年度空间插值数据集
摘要 中国气象要素年度空间插值数据集是地理遥感生态网平台基于全国2400多个站点的气象要素站点日观测数据,在计算各气象要素年值的基础上,基于Anuspl插值软件生成1960-2021年各年度蒸发量、地温、降水量、气压、相对湿度、日照时数 、气温、风速8个气象…...
链表习题-力扣oj (附加思路版)
LCR 140. 训练计划 IIhttps://leetcode.cn/problems/lian-biao-zhong-dao-shu-di-kge-jie-dian-lcof/ 给定一个头节点为 head 的链表用于记录一系列核心肌群训练项目编号,请查找并返回倒数第 cnt 个训练项目编号。 思路:双指针,快指针先走cnt…...
HNU-计算机网络-甘晴void学习感悟
前言 计算机网络其实我没太学懂, 仅从应试来说,考试成绩也不太好。 这也是为什么一直没有更新这一学科的学习感悟。 大三下还是有点闲,一周三天小长假,闲来无事还是给写了。 教材使用这本: 总领 期中考试 30% 期…...
混合输入矩阵乘法的性能优化
作者 | Manish Gupta OneFlow编译 翻译|宛子琳、杨婷 AI驱动的技术正逐渐融入人们日常生活的各个角落,有望提高人们获取知识的能力,并提升整体生产效率。语言大模型(LLM)正是这些应用的核心。LLM对内存的需求很高&…...
安卓Kotlin面试题 41-50
41、如何在 Kotlin 中实现 Builder 模式?首先,在大多数情况下,您不需要在 Kotlin 中使用构建器,因为我们有默认和命名参数,但如果您需要使用://add private constructor if necessary class Car( val model: String?,val year: Int) { private constructor(build…...
Unity网络开发革命:Netcode for GameObjects完整入门指南
Unity网络开发革命:Netcode for GameObjects完整入门指南 【免费下载链接】com.unity.netcode.gameobjects Netcode for GameObjects is a high-level netcode SDK that provides networking capabilities to GameObject/MonoBehaviour workflows within Unity and …...
C# 14 AOT编译Dify客户端:从.NET 8到.NET 9 Preview 5,实测启动速度提升92%的5步极简流程
第一章:C# 14 AOT编译Dify客户端:技术演进与价值定位C# 14 引入的原生AOT(Ahead-of-Time)编译能力,标志着.NET平台在云原生与边缘计算场景中迈出了关键一步。当这一能力被应用于构建Dify服务的轻量级客户端时ÿ…...
介绍玻璃线纹尺
玻璃线纹尺(标准玻璃尺)不是用来直接量零件的“普通尺子”,而是精密仪器和机床的“标尺”。它的核心作用是校准(检定仪器精度)和标定(设定系统比例),通常需要配合显微镜或影像系统使…...
如何在Mac上安装飞秋:跨平台局域网通信的终极解决方案
如何在Mac上安装飞秋:跨平台局域网通信的终极解决方案 【免费下载链接】feiq 基于qt实现的mac版飞秋,遵循飞秋协议(飞鸽扩展协议),支持多项飞秋特有功能 项目地址: https://gitcode.com/gh_mirrors/fe/feiq 还在为Mac与Windows电脑之间…...
adobe acrobat pro 2024 经常无故退出,是什么原因,是破解不成功,还是那个序列号到期了,如何解决?
adobe acrobat pro 2024 经常无故退出,是什么原因,是破解不成功,还是那个序列号到期了,如何解决? THIS APP HAS BEEN DISABLED This unlicensed Adobe app has been disabled Switch to genuine Adobe apps - at up to 57%- to get the latest features and functionality…...
从“几周”到“几小时”:iSolarBP光伏设计软件一站式搞定光伏项目全流程
当传统光伏设计还在为一张图纸反复修改时,iSolarBP已经用15分钟生成了整个电站的“数字孪生”,并精准测算出未来25年的每一度电收益。 传统光伏设计流程中,人工踏勘、手工绘图、经验决策的环节不仅耗时数周,更因数据误差和方案粗…...
Codex + 自建中转站,用不完的token+GPT5.4 做成了一个AI机器人
Codex 自建中转站,用不完的tokenGPT5.4 做成了一个AI机器人 最近因为gemini实在太贵,订阅了两个月后还是和团队一起搞了自建中转站,这也正是高龄程序员的痛,所以也想着给自己多搞个退路,对于AI,我的第一感…...
从‘换脸’到‘换物’:手把手用Attention-GAN实现图片局部精准转换(避坑指南)
从‘换脸’到‘换物’:手把手用Attention-GAN实现图片局部精准转换(避坑指南) 在数字图像处理领域,生成对抗网络(GAN)技术已经从早期的整体风格迁移发展到如今的局部精准编辑。想象这样一个场景:…...
题解:AcWing 204 表达整数的奇怪方式
本文分享的必刷题目是从蓝桥云课、洛谷、AcWing等知名刷题平台精心挑选而来,并结合各平台提供的算法标签和难度等级进行了系统分类。题目涵盖了从基础到进阶的多种算法和数据结构,旨在为不同阶段的编程学习者提供一条清晰、平稳的学习提升路径。 欢迎大家订阅我的专栏:算法…...
从源码演变看PyTorch forward设计:从v0.1.12到2.x的钩子(Hook)机制进化史
PyTorch forward设计演进:从基础调用到钩子体系的架构升级 在深度学习框架的发展历程中,PyTorch以其动态计算图和直观的接口设计赢得了大量开发者的青睐。作为模型定义的核心方法,forward的调用机制经历了从简单直接到复杂灵活的演变过程。本…...
