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

FreeSWITCH 简单图形化界面43 - 使用百度的unimrcp搞个智能话务台,用的在线的ASR和TTS

FreeSWITCH 简单图形化界面43 - 使用百度的unimrcp搞个智能话务台

  • 0、一个fs的web配置界面预览
  • 1、安装unimrcp模块
  • 2、安装完成后,配置FreeSWITCH。
    • 2.1 有界面的配置
      • 2.1.1 mod_unimrcp模块配置
      • 2.1.2 mod_unimrcp客户端配置
    • 2.2 无界面的配置
  • 3、呼叫规则
  • 4、编写流程
    • 4.1 python代码
    • 4.2 主要是detect_speech和speak
  • 5、效果
  • 6、 一些参考的官网网址


0、一个fs的web配置界面预览

http://myfs.f3322.net:8020/
用户名:admin,密码:admin

FreeSWITCH界面安装参考:https://blog.csdn.net/jia198810/article/details/137820796

1、安装unimrcp模块

参考链接:
1、https://docs.qq.com/pdf/DVFFub1JpSmNMRXdJ] 百度mrcp章节
2、https://blog.csdn.net/jia198810/article/details/118461176?spm=1011.2415.3001.5331

安装完成后,配置unimrcp服务器的端口为6060。

如果这里模块没有安装成功,就不用继续了哈,请划过。

2、安装完成后,配置FreeSWITCH。

2.1 有界面的配置

2.1.1 mod_unimrcp模块配置

在这里插入图片描述

2.1.2 mod_unimrcp客户端配置

在这里插入图片描述

2.2 无界面的配置

如果使用的是没有界面的FreeSWITCH,配置如下:

<configuration name="unimrcp.conf" description="UniMRCP Client"><settings><!--  UniMRCP profile to use for TTS  --><param name="default-tts-profile" value="baidu"/><!--  UniMRCP profile to use for ASR  --><param name="default-asr-profile" value="baidu"/><!--  UniMRCP logging level to appear in freeswitch.log.  Options are:EMERGENCY|ALERT|CRITICAL|ERROR|WARNING|NOTICE|INFO|DEBUG  --><param name="log-level" value="info"/><!--  Enable events for profile creation, open, and close  --><param name="enable-profile-events" value="true"/><param name="max-connection-count" value="100"/><param name="offer-new-connection" value="1"/><param name="request-timeout" value="3000"/></settings>
<profiles>
<profile name="baidu" version="2"><param name="server-ip" value="127.0.0.1"/><!--  Mrcp Server 端口号  --><param name="server-port" value="6060"/><param name="resource-location" value=""/><param name="client-ip" value="127.0.0.1"/><param name="client-port" value="6061"/><param name="sip-transport" value="udp"/><param name="rtp-ip" value="127.0.0.1"/><param name="rtp-port-min" value="30000"/><param name="rtp-port-max" value="30500"/><param name="speechsynth" value="speechsynthesizer"/><param name="speechrecog" value="speechrecognizer"/><param name="codecs" value="PCMU PCMA L16/96/8000"/><!--  Add any default MRCP params for SPEAK requests here  --><synthparams> </synthparams><!--  Add any default MRCP params for RECOGNIZE requests here  --><recogparams><!-- param name="start-input-timers" value="false"/ --></recogparams></profile>
</profiles>
</configuration>

3、呼叫规则

<extension name="测试:11120"><condition expression="^(11120)$" field="destination_number"><action application="python" data="baidu-mrcpserver"/><action application="hangup"/></condition>
</extension>

如下图:
在这里插入图片描述

4、编写流程

编写baidu-mrcpserver.py代码,放在/usr/local/freeswitch/scripts/下面,如下代码用的python,lua脚本换下语法即可,Freeswitch的lua API和python的API是通用的,名称都一样。

4.1 python代码

#!/usr/local/python3/bin/python3
from freeswitch import *
"""
baidu-mrcpserver.py
拨号规则:
<extension name="测试:11120"><condition expression="^(11120)$" field="destination_number"><action application="python" data="baidu-mrcpserver"/><action application="hangup"/></condition>
</extension># 识别用户输入后,交由第三方处理,并读出结果。
"""
from xml.dom import minidom
from openai import OpenAI
import redeepseek_api_key = "i am a key "# 解析百度的asr结果,XML格式的
def parse_xml(xml_string):text = ""try:dom = minidom.parseString(xml_string)input_element = dom.getElementsByTagName('input')[0]text = input_element.firstChild.nodeValueexcept Exception as e:consoleLog("error", f"解析xml出错:{e}")return text# 说
def speak(session, text):if text:session.consoleLog("info", f"正在说:{text}")session.execute("speak", f"unimrcp:baidu||{text}")# 开始听
def start_listen(session):# timeout为语音识别时间,单位为毫秒# session.consoleLog("info", f"开始语音识别")# 设置识别超时时间timeout = 10000session.execute("detect_speech", f"param speech-timeout {timeout}")session.execute("detect_speech", "unimrcp baidu builtin:grammar/baidu")# 暂停听
def pause_listen(session):session.consoleLog("info", "暂停语音识别")session.execute("detect_speech", "pause")# 结束听
def stop_listen(session):session.consoleLog("info", "结束语音识别")session.execute("detect_speech", "stop")# 恢复听
def resume_listen(session):session.consoleLog("info", "恢复语音识别")# resume 不好使,用detect_speech代替# session:execute("detect_speech", "resume");start_listen(session)# 连说带听,不会触发回调
def speak_and_listen(session, text, time=5000):session.execute("set","tts_engine=unimrcp")session.execute("play_and_detect_speech",f"say:{text} detect:unimrcp:baidu builtin:grammar/baidu")session.execute("sleep", f"{time}")# 第三方处理
# 这里可以编写对于语音识别的处理,这里是调用deepseek的python接口处理语音识别结果
def process_result(session, result):if "挂机" in result or "退出" in result or "结束" in result or "再见" in result or "结束通话" in result or "挂断" in result or "拜拜" in result:speak(session, "再见")session.hangup()return "break"if session.ready():speak(session, f"正在查询{result},请稍等")try:sentence_delimiters = r'([,。!?,\.!\?\n])'  # [1,3,7](@ref)buffer = ""current_sentence = ""client = OpenAI(api_key=deepseek_api_key, base_url="https://api.deepseek.com")response = client.chat.completions.create(model="deepseek-chat",messages=[{"role": "system", "content": "生活助手"},{"role": "user", "content": f"{result},不要超过100字回复,简洁回答,不要出现表情、星号、井号等特殊符号"},],stream=True  # 设置 stream 参数为 True)for chunk in response:if chunk.choices and chunk.choices[0].delta.content:content = chunk.choices[0].delta.contentbuffer += content# 实时检测分隔符while True:match = re.search(sentence_delimiters, buffer)if not match:break# 分割出完整句子split_pos = match.end()sentence_part = buffer[:split_pos]buffer = buffer[split_pos:]# 将句子片段添加到当前句子current_sentence += sentence_part# 判断是否遇到句子结束符if match.group() in ['。', '.', '!', '!', '?', '?', '\n']:  # [3,7](@ref)# 分段说,避免句子太长,tts生成的太慢speak(session,current_sentence.strip())current_sentence = ""# 输出缓冲区剩余内容if buffer.strip():speak(session,current_sentence.strip())except Exception as e:consoleLog("info", f"处理结果出错:{e}")return "break"# 只有在detect_speech成功后才会调用,play_and_detect_speech不会调用
# 最大识别次数,超过次数挂机
max_retries = 3
def on_input(session, callback_type, obj, arg):global max_retriesif max_retries <= 0:# 重试次数用完,结束监听speak(session, "通话超时,感谢您的使用")session.hangup()return "break"# 处理用户按键if callback_type == "dtmf":session.consoleLog("info", f"用户按了DTMF,收集到的按键:{obj.digit}")return ""# 处理事件if callback_type == "event":event_type = obj.getHeader("Speech-Type")# 触发了detected-speech事件if event_type == "detected-speech":speech_output = obj.getBody()if speech_output:text = parse_xml(speech_output)if text and len(text) >= 2:# 获取结果后进行其他处理process_result(session, text)speak(session, "还有什么可以帮到您?")else:# 识别结果太短,重新开始监听speak(session, "没听清,请再说一遍")else:# 识别结果太短,重新开始监听speak(session, "没听清,请再说一遍")max_retries -= 1# 立即结束本次处理return "break"# 立即结束本次处理return "break"# 立即结束本次处理return "break"# 通话入口
def handler(session, args):# 应答session.answer()# 是否向event_socket发送asr事件,我们是拨号规则处理asr事件,所以不需要# session.setVariable("fire_asr_events", "true")# 注册事件回调,python的回调函数不要加引号session.setInputCallback(on_input)# 欢迎语speak(session,text="请问有什么可以帮助您的?")# 一直听,识别,读结果,直到max_retries用完while session.ready():start_listen(session)session.streamFile("silence_stream://90000000")# 挂机session.hangup()

4.2 主要是detect_speech和speak

5、效果

freeswitch 百度mrcp测试

6、 一些参考的官网网址

mod_unimrcp
https://developer.signalwire.com/freeswitch/FreeSWITCH-Explained/Modules/mod_unimrcp_6586728
MRCP的参数设置
No-Input-Timeout, Recognition-Timeout, Start-Input-Timers
https://www.rfc-editor.org/rfc/rfc6787
speak
https://developer.signalwire.com/freeswitch/FreeSWITCH-Explained/Modules/mod-dptools/6587123/#0-about
play_and_detect_speech
https://developer.signalwire.com/freeswitch/FreeSWITCH-Explained/Modules/mod-dptools/6586714#lua
detect_speech
https://developer.signalwire.com/freeswitch/FreeSWITCH-Explained/Modules/mod-dptools/6586756#about
详细的语音识别流程,识别用户分机的案例
https://developer.signalwire.com/freeswitch/FreeSWITCH-Explained/Client-and-Developer-Interfaces/Lua-API-Reference/Lua-examples/Lua-ASR-TTS-Directory-example_1049011/

祝君成功,好运连连

相关文章:

FreeSWITCH 简单图形化界面43 - 使用百度的unimrcp搞个智能话务台,用的在线的ASR和TTS

FreeSWITCH 简单图形化界面43 - 使用百度的unimrcp搞个智能话务台 0、一个fs的web配置界面预览1、安装unimrcp模块2、安装完成后&#xff0c;配置FreeSWITCH。2.1 有界面的配置2.1.1 mod_unimrcp模块配置2.1.2 mod_unimrcp客户端配置 2.2 无界面的配置 3、呼叫规则4、编写流程4…...

C 语言学习笔记(函数)

内容提要 函数 函数的概述函数的分类函数的定义形参和实参函数的返回值 函数 函数的概述 **函数&#xff1a;**实现一定功能的&#xff0c;独立的代码模块&#xff0c;对于函数的使用&#xff0c;一定是先定义&#xff0c;后使用。 使用函数的优势&#xff1a; ①我们可以…...

数据结构 -- 树形查找(二)平衡二叉树

平衡二叉树 定义 平衡二叉树&#xff08;AVL树&#xff09; – 树上的任意一点的左子树和右子树的高度之差不超过1 节点的平衡因子 左子树高-右子树高 平衡二叉树的结点的平衡因子的值只可能是-1、0、1 //平衡二叉树结点 typedef struct AVLNode{int key; //数据域int bal…...

day 29

类装饰器 类有修饰器&#xff0c;他的逻辑&#xff1a;接收一个类&#xff0c;返回一个修改后的类。例如 1. 添加新的方法或属性&#xff08;如示例中的 log 方法&#xff09;。 2. 修改原有方法&#xff08;如替换 __init__ 方法&#xff0c;添加日志&#xff09;。 3. 甚…...

Java 并发编程

黑马程序员深入学习Java并发编程 进程与线程 预备知识 java8&#xff0c;pom.xml <dependencies><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.10</version></depe…...

windows笔记本连接RKNN3588网络配置解析

这几天拿到了一块RKNN3588的板子,准备做视觉和Ros开发用,但是拿到后就蒙蔽了,不知道怎么ssh连到板子上去,更甚者不知道怎么配置网络让RKNN能够联网更新环境,这里记录一下整个过程。主要包括以下两个内容: 1.adb连接RKNN3588开发 2. 网口连接RKNN更新板子环境开发 adb连…...

C++ asio网络编程(8)处理粘包问题

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言 粘包问题一、粘包原因总结&#xff1a; 二、如何处理粘包处理方法 三、完善消息节点MsgNode代码部分细节详解memcpy(_data, &max_len, HEAD_LENGTH);_data…...

【架构美学】Java 访问者模式:解构数据与操作的双重分发哲学

一、模式定义与核心思想 访问者模式&#xff08;Visitor Pattern&#xff09;是一种行为型设计模式&#xff0c;其核心目标是将数据操作与数据结构分离。通过定义一个独立的访问者类&#xff0c;使得新增对数据结构中元素的操作时&#xff0c;无需修改元素本身的类结构&#x…...

UE5无法编译问题解决

1. vs编译 2. 删除三个文件夹 参考...

Java可变参数与Collections工具类详解

Java可变参数与Collections工具类详解 一、可变参数&#xff08;Variable Arguments&#xff09; 1.1 基本概念 可变参数是Java 5引入的特性&#xff0c;允许在方法中定义数量可变的形参。其核心特点是&#xff1a;形参个数可以动态变化&#xff08;0个、1个、多个&#xff…...

Git版本管理命令reset

目录 命令 git reset 场景一只回退 工作区代码 场景二回退暂存库与工作区 场景三回退暂存库&#xff0c;工作区&#xff0c;版本库内容 命令 git reset git reset --[soft/mixed(默认)/hard] [文件] soft&#xff1a;只回退版本库中内容 mixed&#xff1a;回退暂存区&…...

改进模糊C均值时序聚类+编码器状态识别!IPOA-FCM-Transformer组合模型

改进模糊C均值时序聚类编码器状态识别&#xff01;IPOA-FCM-Transformer组合模型 目录 改进模糊C均值时序聚类编码器状态识别&#xff01;IPOA-FCM-Transformer组合模型效果分析基本描述程序设计参考资料 效果分析 基本描述 1.创新未发表&#xff01;研究亮点&#xff01;时序…...

Zookeeper入门(三)

Zookeeper Java 客户端 项目构建 ookeeper 官方的客户端没有和服务端代码分离&#xff0c;他们为同一个jar 文件&#xff0c;所以我们直接引入 zookeeper的maven即可&#xff0c; 这里版本请保持与服务端版本一致&#xff0c;不然会有很多兼容性的问题 1 <dependency>…...

使用Redission来实现布隆过滤器

简述布隆过滤器 布隆过滤器是一种概率型数据结构&#xff0c;它可以用来判断一个元素是否在一个集合中。我们当时使用的是Redisson实现的布隆过滤器。它的底层原理是&#xff0c;先初始化一个比较大的数组&#xff0c;里面存放的是二进制0或1。一开始都是0&#xff0c;当一个k…...

Seata源码—6.Seata AT模式的数据源代理一

大纲 1.Seata的Resource资源接口源码 2.Seata数据源连接池代理的实现源码 3.Client向Server发起注册RM的源码 4.Client向Server注册RM时的交互源码 5.数据源连接代理与SQL句柄代理的初始化源码 6.Seata基于SQL句柄代理执行SQL的源码 7.执行SQL语句前取消自动提交事务的源…...

Spring-Beans的生命周期的介绍

目录 1、Spring核心组件 2、Bean组件 2.1、Bean的定义 2.2、Bean的生命周期 1、实例化 2、属性填充 3、初始化 4、销毁 2.3、Bean的执行时间 2.4、Bean的作用域 3、常见问题解决方案 4、与Java对象区别 前言 关于bean的生命周期&#xff0c;如下所示&#xff1a; …...

目标检测新突破:用MSBlock打造更强YOLOv8

文章目录 YOLOv8的现状与挑战YOLO-MS的MSBlock简介MSBlock的工作原理MSBlock的优势 利用MSBlock改进YOLOv8替换YOLOv8主干网络中的部分模块代码实现&#xff1a;替换CSP模块为MSBlock 在YOLOv8的颈部&#xff08;Neck&#xff09;中插入MSBlock代码实现&#xff1a;在颈部区域插…...

[SpringBoot]Spring MVC(4.0)

获取Header 传统获取 header 从 HttpServletRequest 中获取 RequestMapping("/r8")public String r8(HttpServletRequest request) {String userAgent request.getHeader("User-Agent");return "userAgent: "userAgent;}使用浏览器访问后&…...

Linux概述:从内核到开源生态

Linux概述&#xff1a;从内核到开源生态 Linux 是当今计算机领域最核心的开源操作系统内核&#xff0c;其影响力已渗透到服务器、嵌入式设备、云计算甚至超级计算机等各个领域。本章将深入解析Linux的本质、核心架构及其背后的开源哲学。 1. Linux的本质&#xff1a;不只是“操…...

【ubuntu24.04】pycharm 死机结束进程

windows 远程pycharm到ubuntu执行程序 pycharm 在调试过程中&#xff0c;内存耗尽&#xff0c;然后死机了 pycharm 进程 (base) rootk8s-master-pfsrv:/home/zhangbin/下载# ps -ef | grep pycharm root 121245 3230568 0 5月14 pts/8 00:00:00 /bin/bash --rcfile …...

【PRB】深度解析GaN中最浅的受主缺陷

2025 年 1 月 16 日,Virginia Commonwealth University 的 M. A. Reshchikov 和 SUNY–Albany 的 B. McEwen 等人在《Physical Review B》期刊发表了题为《Identity of the shallowest acceptor in GaN》的文章,基于对 50 多个 Be 掺杂 GaN 样品的光致发光实验以及 Heyd-Scus…...

Flink CEP是什么?

Apache Flink 的 CEP&#xff08;Complex Event Processing&#xff0c;复杂事件处理&#xff09; 是 Flink 提供的一个库&#xff0c;用于在无界数据流中检测符合特定模式的事件组合。 &#x1f3af; 一、什么是 CEP&#xff1f; ✅ 定义&#xff1a; CEP 是一种从连续的数据…...

基于STM32的多传感器融合的设施农业小型搬运机器人避障控制系统设计

一、系统总体设计目标 针对设施农业场景中狭窄通道、障碍物多样(如农机具、作物植株、水管)的特点,设计一款基于 STM32 的小型搬运机器人避障控制系统。系统通过多传感器融合实现 360 环境感知,采用模糊 PID 控制算法实现平滑避障,满足温室、大棚等场景的搬运需求。 二、…...

从零开始实现大语言模型(十六):加载开源大语言模型参数

1. 前言 预训练大语言模型的难点不在于算法&#xff0c;而在于数据和算力&#xff0c;绝大多数企业和机构都没有预训练大语言模型的算力资源。在工业界的大语言模型应用实践中&#xff0c;通常会使用领域数据微调开源大语言模型参数&#xff0c;以构建领域大语言模型。 本文介…...

Spark,数据提取和保存

以下是使用 Spark 进行数据提取&#xff08;读取&#xff09;和保存&#xff08;写入&#xff09;的常见场景及代码示例&#xff08;基于 Scala/Java/Python&#xff0c;不含图片操作&#xff09;&#xff1a; 一、数据提取&#xff08;读取&#xff09; 1. 读取文件数据&a…...

java19

1.集合体系结构 注意&#xff1a; 2.collection遍历之迭代器遍历 一次循环只能一次next方法的原因&#xff1a; 原因&#xff1a;集合长度是单数就报错 3.collection遍历之增强for遍历 如何代码简写呢&#xff1a;集合名.for回车 4.collection遍历之Lambda表达式遍历 5.使用多态…...

从0到1吃透卷积神经网络(CNN):原理与实战全解析

一、开篇&#xff1a;CNN 在 AI 领域的地位 在当今人工智能&#xff08;AI&#xff09;飞速发展的时代&#xff0c;卷积神经网络&#xff08;Convolutional Neural Network&#xff0c;简称 CNN&#xff09;无疑是深度学习领域中最为耀眼的明星之一 。它就像是 AI 世界里的超级…...

建一个结合双向长短期记忆网络(BiLSTM)和条件随机场(CRF)的模型

构建一个结合双向长短期记忆网络&#xff08;BiLSTM&#xff09;和条件随机场&#xff08;CRF&#xff09;的模型&#xff0c;通常用于序列标注任务&#xff0c;如命名实体识别&#xff08;NER&#xff09;、词性标注&#xff08;POS Tagging&#xff09;等。下面我将通过口述的…...

mvc-ioc实现

IOC 1&#xff09;耦合/依赖 依赖&#xff0c;是谁离不开谁 就比如上诉的Controller层必须依赖于Service层&#xff0c;Service层依赖于Dao 在软件系统中&#xff0c;层与层之间存在依赖。我们称之为耦合 我们系统架构或者设计的一个原则是&#xff…...

符合Python风格的对象(再谈向量类)

再谈向量类 为了说明用于生成对象表示形式的众多方法&#xff0c;我们将使用一个 Vector2d 类&#xff0c;它与第 1 章中的类似。这一节和接下来的几节会不断实 现这个类。我们期望 Vector2d 实例具有的基本行为如示例 9-1 所示。 示例 9-1 Vector2d 实例有多种表示形式 &g…...

4.1.8文件共享

知识总览 基于索引节点的共享方式(硬链接)&#xff1a; 让不同用户的文件目录项指向同一个文件的索引节点 用户1创建文件1&#xff0c;并让文件目录项aaa指向了文件1&#xff0c;这个文件对应了一个索引节点&#xff0c;这个索引节点 包含了文件的物理地址和文件的其他属性信…...

[LevelDB]LevelDB版本管理的黑魔法-为什么能在不锁表的情况下管理数据?

文章摘要 LevelDB的日志管理系统是怎么通过双链表来进行数据管理为什么LevelDB能够在不锁表的情况下进行日志新增 适用人群: 对版本管理机制有开发诉求&#xff0c;并且希望参考LevelDB的版本开发机制。数据库相关从业者的专业人士。计算机狂热爱好者&#xff0c;对计算机的…...

普通用户的服务器连接与模型部署相关记录

普通用户的服务器连接与模型部署相关记录 一、从登录到使用自己的conda 1.账号登陆&#xff1a; ssh xxx172.31.226.236 2.下载与安装conda&#xff1a; 下载conda&#xff1a; wget -c https://repo.anaconda.com/archive/Anaconda3-2023.03-1-Linux-x86_64.sh 安装con…...

WebSocket解决方案的一些细节阐述

今天我们来看看WebSocket解决方案的一些细节问题&#xff1a; 实际上&#xff0c;集成WebSocket的方法都有相关的工程挑战&#xff0c;这可能会影响项目成本和交付期限。在最简单的层面上&#xff0c;构建 WebSocket 解决方案似乎是添加接收实时更新功能的前进方向。但是&…...

架构思维:构建高并发扣减服务_分布式无主架构

文章目录 Pre无主架构的任务简单实现分布式无主架构 设计和实现扣减中的返还什么是扣减的返还返还实现原则原则一&#xff1a;扣减完成才能返还原则二&#xff1a;一次扣减可以多次返还原则三&#xff1a;返还的总数量要小于等于原始扣减的数量原则四&#xff1a;返还要保证幂等…...

C++函数基础:定义与调用函数,参数传递(值传递、引用传递)详解

1. 引言 函数是C编程中的核心概念之一&#xff0c;它允许我们将代码模块化&#xff0c;提高代码的可读性、复用性和可维护性。本文将深入探讨&#xff1a; 函数的定义与调用参数传递方式&#xff08;值传递 vs 引用传递&#xff09;应用场景与最佳实践 2. 函数的定义与调用 …...

深入解析Python中的Vector2d类:从基础实现到特殊方法的应用

引言 在Python面向对象编程中&#xff0c;特殊方法&#xff08;或称魔术方法&#xff09;是实现对象丰富行为的关键。本文将以Vector2d类为例&#xff0c;详细讲解如何通过特殊方法为自定义类添加多种表示形式和操作能力。 Vector2d类的基本行为 Vector2d类是一个二维向量类…...

【25软考网工】第六章(7)网络安全防护系统

博客主页&#xff1a;christine-rr-CSDN博客 ​​专栏主页&#xff1a;软考中级网络工程师笔记 ​​​ 大家好&#xff0c;我是christine-rr !目前《软考中级网络工程师》专栏已经更新三十多篇文章了&#xff0c;每篇笔记都包含详细的知识点&#xff0c;希望能帮助到你&#x…...

Mac下载bilibili视频

安装 安装 yt-dlp brew install yt-dlp安装FFmpeg 用于合并音视频流、转码等操作 brew install ffmpeg使用 下载单个视频 查看可用格式 yt-dlp -F --cookies-from-browser chrome "https://www.bilibili.com/video/BV15B4y1G7F3?spm_id_from333.788.recommend_more_vid…...

6个月Python学习计划:从入门到AI实战(前端开发者进阶指南)

作者&#xff1a;一名前端开发者的进阶日志 计划时长&#xff1a;6个月 每日学习时间&#xff1a;2小时 覆盖方向&#xff1a;Python基础、爬虫开发、数据分析、后端开发、人工智能、深度学习 &#x1f4cc; 目录 学习目标总览每日时间分配建议第1月&#xff1a;Python基础与编…...

批量处理 Office 文档 高画质提取图片、视频、音频素材助手

各位办公小能手们&#xff01;你们有没有遇到过想从 Office 文档里提取图片、音频和视频&#xff0c;却又搞得焦头烂额的情况&#xff1f;今天就给大家介绍一款超厉害的工具——OfficeImagesExtractor&#xff01; 这货的核心功能那可真是杠杠的&#xff01;首先是高画质提取&a…...

【甲方安全建设】Python 项目静态扫描工具 Bandit 安装使用详细教程

文章目录 一、工具简介二、工具特点1.聚焦安全漏洞检测2.灵活的扫描配置3.多场景适配4.轻量且社区活跃三、安装步骤四、使用方法场景1:扫描单个Python文件场景2:递归扫描整个项目目录五、结果解读六、总结一、工具简介 Bandit 是由Python官方推荐的静态代码分析工具(SAST)…...

【推荐】新准则下对照会计报表172个会计科目解释

序号 科目名称 对应的会计报表项目 序号 科目名称 对应的会计报表项目   一、资产类     二、负债类   1 1001 库存现金 货币资金 103 2001 短期借款 短期借款 2 1002 银行存款 货币资金 104 2101 交易性金融负债 易性金融负债 3 1012 其他货币资…...

IntelliJ IDEA设置编码集

在IntelliJ IDEA中设置Properties文件的编码格式&#xff0c;主要涉及以下步骤和注意事项&#xff1a; 1. ‌全局和项目编码设置‌ 打开设置界面&#xff1a;File -> Settings -> Editor -> File Encodings。在Global Encoding和Project Encoding下拉菜单中均选择UT…...

类魔方 :多变组合,灵活复用

文章目录 一、类的基础1. 类的基本结构与语法1. 类的定义与实例化2. 成员变量&#xff08;属性&#xff09;3. 构造函数&#xff08;Constructor&#xff09;4. 成员方法 2. 访问修饰符1. 基本访问规则2. 子类对父类方法的重写3. 构造函数的访问修饰符4. 参数属性与继承总结 3.…...

支持多方式拼接图片的软件

软件介绍 本文介绍一款名为 PicMerger 的图片拼接软件。 拼接亮点 PicMerger 这款软件最大的亮点在于&#xff0c;它能够将不同分辨率的图片完美地拼接在一起。拼接时会自动以分辨率最小的图片为标准&#xff0c;操作十分方便。 拼接方式与设置 该软件支持横向和纵向的拼接…...

Qt音视频开发过程中一个疑难杂症的解决方法/ffmpeg中采集本地音频设备无法触发超时回调

一、前言 最近在做实时音视频通话的项目中&#xff0c;遇到一个神奇的问题&#xff0c;那就是用ffmpeg采集本地音频设备&#xff0c;当音频设备拔掉后&#xff0c;采集过程会卡死在av_read_frame函数中&#xff0c;尽管设置了超时时间&#xff0c;也设置了超时回调interrupt_c…...

Android studio Could not move temporary workspace

Android studio Could not move temporary workspace 在Window上运行AS出现Could not move temporary workspace报错方法一&#xff08;有效&#xff09;方法二方法三方法四总结 在Window上运行AS出现Could not move temporary workspace报错 Could not move temporary workspa…...

深度估计中为什么需要已知相机基线(known camera baseline)?

在计算机视觉和立体视觉的上下文中&#xff0c;“已知相机基线”&#xff08;known camera baseline&#xff09;的解释 1. 相机基线的定义 相机基线是指两个相机中心之间的距离。在立体视觉系统中&#xff0c;通常有两个相机&#xff08;或一个相机在不同位置拍摄两张图像&a…...

Spring Cloud 技术实战

Spring Cloud 简介 Spring Cloud 是基于 Spring Boot 构建的微服务框架&#xff0c;提供了一套完整的微服务解决方案。它利用 Spring Boot 的开发便利性&#xff0c;并通过各种组件简化分布式系统的开发。 核心组件 Spring Cloud Netflix Eureka: 服务注册与发现Spring Clou…...