Latest

dxf-viewer文本高亮方案

我们最近使用ezdxf后端实现复杂dxf图纸。(工业一次系统图) 遇到一个问题,使用各类cad软件打开文字显示正常,但是放入前端dxf-viewer框架中档图缩小时候,文字是完全模糊不见的。 方案1:尝试切换各类字体、包括黑体。(无用) 方案2:切换各类其他前端dxf展示,作用也不大。 方案3:自己查看 dxf-viewer 源码,想通过了解底层实现逻辑来实现文本的高亮。 dxf-viewer: 使用three.js 来实现渲染的。 three.js 是可以通过修改字体、修改渲染效果的。 从这里入手: 1:监听dxf-viewer  渲染事件, 2:重新渲染和文本有关的entity。 首先,我们得自定义three.js 使用的字体,three.js 使用json格式字体,你需要自己在官网通过脚本等,转化为json字体。 this.dxfViewer = new DxfViewer(this.$refs.canvasContainer, this.options)
yin

mrcp-server 版本发布

考虑到unimrcp使用不方便,我们开始寻求自研mrcp协议、sip等。   之前开源了 client版本。https://github.com/laoyin/java-sip-mrcp GitHub - laoyin/java-sip-mrcp: java版本的mrcp服务,实现sip、mrcp等协议,实现实时语音流处理、回调等。java版本的mrcp服务,实现sip、mrcp等协议,实现实时语音流处理、回调等。. Contribute to laoyin/java-sip-mrcp development by creating an account on GitHub.GitHublaoyin 最近我们逐步完善了 mrcp-server版本,做大量代码测试等。 自研java版本mrcp-server_哔哩哔哩_bilibilihttps://github.com/laoyin/java-sip-mrcp, 基于此实现了server,用于和freeswitch进行asr交互。Java SIP
yin

freeswitch-mediabug回调细节

有群友询问如何进行监听和会写媒体。 很多人根据我的文档和文章知道了使用media bug,但是有几个回调有疑虑。 我这边出一个源码的细则,大家便非常清楚了。 类型解释 SWITCH_ABC_TYPE_INIT 初始化 close 关闭这里不再赘述 SWITCH_ABC_TYPE_WRITE_REPLACE: 将读取的进行替换 SWITCH_ABC_TYPE_WRITE_REPLACE: 写出时候,可以进行媒体替换 代码样例 那么你如何进行读取和写出时候进行替换呢? 我们看一部分代码 static switch_bool_t replace_callback(switch_media_bug_t *bug, void *user_data, switch_abc_type_t type) { displace_
yin

如何自定义freeswitch-cdr

关于cdr,只要涉及freeswitch,都关心cdr存储和处理。 如果现有的cdr你自己不满意,如何自定义呢? 我们参考freeswitch mod_json_cdr 来看看源码如何实现的。 源码只有几百行,特别适合初学者学习。 /* * FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application * Copyright (C) 2005-2014, Anthony Minessale II * * Version: MPL 1.1 * * The contents of this file are subject to the Mozilla Public License Version * 1.1 (the "License"); you may not
yin

kam实践-安装和基本概念

安装: 要在 Ubuntu 上安装 Kamailio,你可以按照以下步骤进行: 1. 打开终端。 2. 更新软件包列表: bashCopy code sudo apt update 1. 安装 Kamailio 及其附加组件: bashCopy code sudo apt install kamailio kamailio-mysql-modules kamailio-tls-modules kamailio-websocket-modules 这将安装 Kamailio 主程序以及一些常用的模块,如 MySQL 数据库支持、TLS(Transport Layer Security)支持和 WebSocket 支持。 1. 完成安装后,编辑 Kamailio 的配置文件。主配置文件位于 /etc/kamailio/kamailio.
yin

电话实现大规模姓名匹配02

上一讲,我们讲到通过ner命名实体识别,实现信息提取。 当我们分析完用户说的话,提取出对应的名称,接下来就是问题的重中之重。 如果用户说的内容asr翻译的是李命薄,或者用户不记得对方名字,只有他的昵称。鸵鸟。我们如何去解决这类问题。 多种方案 1:使用es做相似查询搜索 es及elasticsearch,熟悉es的人清楚,es将文本内容解析成token之后,使用倒排索引方式存储。 如果我们使用es进行相似匹配,效果可能不好,因为姓名此类,如何使用分词呢?按字分词检索? 2:使用词向量来做相似匹配。 我个人采用词向量方式。 什么是词向量,embedding 最近大模型爆火,很多人使用chatgpt,或者其他开源大模型时候,经常接触embedding。就是将文本转化为可以计算的向量。 词向量-可以使用对汉字的词向量,方式很多。 可以调用chatgpt的embedding接口 可以使用bert-embedding方式,甚至可以使用Word2vec等等经典方式处理。 解析出对应的embedding向量之后,将向量存储起来,形成embedding库
yin

电话实现大规模姓名匹配01

客户有这样的需求,公司500-1000名员工,通过姓名、昵称转接给当事人。 初看觉得是个简单问题,提取姓名+匹配即可。 你期望的而输入 query == 姓名,然后做匹配。 真实情况可能是: A: query== 帮我转接给李鬼(姓名) B: query== 那个叫李奎的帮我转接 C: query== 帮我转给黑旋风 ……………… 所以,这个简单的需求,其实是ner命名实体识别+多维相似匹配。 ner命名实体识别,我们可以采用bert等+crf来实现。 对应提取的姓名而言,这只是实现了第一步。 现在需要将姓名和近1000个进行相似匹配。 实现了相似匹配还需要考虑一个问题,1000个姓名,包含了n个昵称。 同时,还得考虑asr转写之后的口音问题。 我们下一篇文章来介绍,我是如何处理的。
yin

mrcp协议图解流程

最近很多小伙伴在询问想了解mrcp协议的具体流程和细节问题。 抽空我就梳理一下,做个介绍。 mrcp协议,目前业界使用的是v2版本,即基于sip信令的mrcp协议。 mrcp协议和sip、rtp、密不可分的协议。 以下是mrcpV2协议,大家有空可以详细研读协议本事。https://www.rfc-editor.org/rfc/rfc6787 如果你不想看枯燥的文档,可以继续看我的文章,希望对你有个深入浅出的理解。 上图是mrcp协议的处理流程图。 mrcp-client-和server之间,首先先进行的是 sip协商。  实际抓包流程如下图所示 sip协议的invite会携带 resource:speechrecog 代表client需求是asr识别。  server返回200会携带mrcp-v2的tcp端口和new channel 信息给到client。 当client和server处理完sip-200-ack之后,就到了mrcp 处理asr、tts协议了。收到200后返回ack,client既可以进行 MRCP-RECONIZE client根据sip-
yin
开源mrcp-client-java版本

开源mrcp-client-java版本

我们已经实现了 基于sip协议-mrcpv2协议的 mrcp-client java版本。 机缘巧合下,我们实现了 mrcp-client java版本。 我们查看了github上开源的mrcp相关的有node、c++、java版本的,但是java版本的只支持mrcp协议不支持sip协议。 因此我们萌生了自己动手实现一个sip+mrcpv2版本的java服务。 1:mrcp4j年久失修,里面有一些处理mrcp协议的bug。     mrcp4j 没有sip协议处理 2:我们基于peers实现sip协议。 我们先开源client,基于client你可以实现自定义音频文件传入给client,并通过client将媒体流传给mrcp-server服务, 同时client能够监听和处理来自server的asr信息。 以下是代码情况,近期请期待。
yin
我要自救-吵架机器人-怒怼工贼

我要自救-吵架机器人-怒怼工贼

需求:我要实现一个能够帮助语言组织能力欠佳的人,怒怼工贼。 设计: 输入:实时语音流 分析:语音转文字--》大模型处理(TMD-GPT)--》文字转语音--》实时回怼。 涉及相关技术领域如下: 编程语言:JavaScript、python、java 领域:AIGC、ASR、TTS、前端、webRTC、后端 前端选择 vue 实时音频-webrtc 后端选择 java- 多线程处理优势,处理流和webrtc python-处理算法相关 ASR服务 1:实时语音转写服务 前端语音分流实现-js worker方式传送音频 2:实时语音处理,切分vad等 3:asr服务 TTS服务 声纹复刻服务 桌面应用 electron CMD-GPT 1:数据生成1:
yin
ChatGLM微调

ChatGLM微调

清华大学最近新出了第二代chatGLM必须尝鲜一下。 下载chatGLM模型非常费劲,下载之后进行模型测试运行。 from transformers import AutoTokenizer, AutoModel tokenizer = AutoTokenizer.from_pretrained('/mode/path', trust_remote_code=True) model = AutoModel.from_pretrained('/model/path', trust_remote_code=True,device='cuda') model = model.eval() model.chat(tokenizer, "测试测试") 我们使用 chatGLM-efficient-Tuning 项目进行微调。使用lora模型 微调也很方便: 自定义好训练数据 python src/train_sft.py
yin