首页 > 其他分享 >基于语音识别的智能电子病历(三)之 Soniox

基于语音识别的智能电子病历(三)之 Soniox

时间:2024-05-28 21:05:08浏览次数:13  
标签:key int32 name Soniox 病历 api 语音 message string

Soniox成立于2020年,目前总部位于美国加州福斯特城,该公司开发了市场上最好的语音识别引擎之一。该公司目前提供市面上领先的云转录引擎之一——这也是audioXpress成功用于采访和一般语音转文本转换的引擎。

专注于语音AI的Soniox在2021年推出了世界上第一个用于语音识别的无监督学习方法。这一创新对于克服之前阻碍语音系统性能的局限性至关重要。

2023年,Soniox开始从语音AI向通用AI转型。

我们是在2022年开始使用Soniox的。最初的时候Soniox的识别结果是这样的:

识别结果里除了 每个单词的时间,识别质量,还有 Speaker,这个是用来标记,多人对话的语音中,说话者的不同。

2023年开始,Soniox 推出了基于语义分析的Section结果(俺还为他们提供了大量的训练数据)。主要是 SectionId、Title。

Soniox的使用也很简单,在C#的nuget中直接搜索 Soniox,缺点就是 语义分析 的服务比较贵。

syntax = "proto3";

package soniox.speech_service;
option csharp_namespace = "Soniox.Proto.SpeechService";

import "google/protobuf/timestamp.proto";

service SpeechService {
  // Synchronous transcription
  rpc Transcribe(TranscribeRequest) returns (TranscribeResponse) {}
  rpc TranscribeStream(stream TranscribeStreamRequest) returns (stream TranscribeStreamResponse) {}
  rpc TranscribeMeeting(stream TranscribeMeetingRequest) returns (stream TranscribeMeetingResponse) {}

  // Asynchronous transcription
  rpc TranscribeAsync(stream TranscribeAsyncRequest) returns (TranscribeAsyncResponse) {}
  rpc GetTranscribeAsyncStatus(GetTranscribeAsyncStatusRequest) returns (GetTranscribeAsyncStatusResponse) {}
  rpc GetTranscribeAsyncResult(GetTranscribeAsyncResultRequest) returns (stream GetTranscribeAsyncResultResponse) {}
  rpc DeleteTranscribeAsyncFile(DeleteTranscribeAsyncFileRequest) returns (DeleteTranscribeAsyncFileResponse) {}

  // Speech context
  rpc CreateSpeechContext(CreateSpeechContextRequest) returns (CreateSpeechContextResponse) {}
  rpc DeleteSpeechContext(DeleteSpeechContextRequest) returns (DeleteSpeechContextResponse) {}
  rpc ListSpeechContextNames(ListSpeechContextNamesRequest) returns (ListSpeechContextNamesResponse) {}
  rpc GetSpeechContext(GetSpeechContextRequest) returns (GetSpeechContextResponse) {}
  rpc UpdateSpeechContext(UpdateSpeechContextRequest) returns (UpdateSpeechContextResponse) {}

  // Speaker AI
  rpc AddSpeaker(AddSpeakerRequest) returns (AddSpeakerResponse) {}
  rpc GetSpeaker(GetSpeakerRequest) returns (GetSpeakerResponse) {}
  rpc RemoveSpeaker(RemoveSpeakerRequest) returns (RemoveSpeakerResponse) {}
  rpc ListSpeakers(ListSpeakersRequest) returns (ListSpeakersResponse) {}
  rpc AddSpeakerAudio(AddSpeakerAudioRequest) returns (AddSpeakerAudioResponse) {}
  rpc GetSpeakerAudio(GetSpeakerAudioRequest) returns (GetSpeakerAudioResponse) {}
  rpc RemoveSpeakerAudio(RemoveSpeakerAudioRequest) returns (RemoveSpeakerAudioResponse) {}
}

// Transcribe

message TranscribeRequest {
  string api_key = 1;
  TranscriptionConfig config = 4;
  bytes audio = 3;
}

message TranscribeResponse {
  Result result = 1;
  repeated Result channel_results = 2;
}

// TranscribeStream

message TranscribeStreamRequest {
  string api_key = 1;
  TranscriptionConfig config = 4;
  bytes audio = 3;
}

message TranscribeStreamResponse {
  Result result = 1;
}

// TranscribeMeeting

message TranscribeMeetingRequest {
  string api_key = 1;
  TranscriptionConfig config = 10;
  int32 seq_num = 3;
  int32 stream_id = 4;
  bool start_of_segment = 5;
  bytes audio = 6;
  bool end_of_segment = 7;
}

message TranscribeMeetingResponse {
  int32 seq_num = 1;
  int32 stream_id = 2;
  bool start_of_segment = 3;
  bool end_of_segment = 4;
  Result result = 5;
  string error = 6;
}

// TranscribeAsync

message TranscribeAsyncRequest {
  string api_key = 1;
  string reference_name = 3;
  TranscriptionConfig config = 5;
  bytes audio = 4;
}
message TranscribeAsyncResponse {
  string file_id = 1;
}

// GetTranscribeAsyncStatus

message GetTranscribeAsyncStatusRequest {
  string api_key = 1;
  string file_id = 2;
}
message GetTranscribeAsyncStatusResponse {
  repeated TranscribeAsyncFileStatus files = 1;
}
message TranscribeAsyncFileStatus {
  string file_id = 1;
  string reference_name = 2;
  // One of: QUEUED, TRANSCRIBING, COMPLETED, FAILED
  string status = 3;
  // UTC timestamp
  google.protobuf.Timestamp created_time = 4;
  string error_message = 5;
  string transcribe_async_mode = 6;
}

// GetTranscribeAsyncResult

message GetTranscribeAsyncResultRequest {
  string api_key = 1;
  string file_id = 2;
}
message GetTranscribeAsyncResultResponse {
  bool separate_recognition_per_channel = 2;
  Result result = 1;
}

// DeleteTranscribeAsyncFile

message DeleteTranscribeAsyncFileRequest {
  string api_key = 1;
  string file_id = 2;
}
message DeleteTranscribeAsyncFileResponse {
}

// Common

message TranscriptionConfig {
  // Input options
  string audio_format = 1;
  int32 sample_rate_hertz = 2;
  int32 num_audio_channels = 3;

  // Output options
  bool include_nonfinal = 4;
  bool enable_separate_recognition_per_channel = 16;

  // Speech adaptation
  SpeechContext speech_context = 5;

  // Content moderation
  bool enable_profanity_filter = 6;
  repeated string content_moderation_phrases = 7;

  // Speaker diarization
  bool enable_streaming_speaker_diarization = 8;
  bool enable_global_speaker_diarization = 9;
  int32 min_num_speakers = 10;
  int32 max_num_speakers = 11;

  // Speaker identification
  bool enable_speaker_identification = 12;
  repeated string cand_speaker_names = 13;

  // Model options
  string model = 14;
  bool enable_dictation = 15;

  // Asynchronous transcription
  string transcribe_async_mode = 17;
}

message Result {
  repeated Word words = 1;
  int32 final_proc_time_ms = 2;
  int32 total_proc_time_ms = 3;
  repeated ResultSpeaker speakers = 6;
  int32 channel = 7;
}

message Word {
  string text = 1;
  int32 start_ms = 2;
  int32 duration_ms = 3;
  bool is_final = 4;
  int32 speaker = 5;
  string orig_text = 8;
  double confidence = 9;
}

message ResultSpeaker {
  int32 speaker = 1;
  string name = 2;
}

// SpeechContext

message SpeechContext {
  repeated SpeechContextEntry entries = 1;
  string name = 2;
}

message SpeechContextEntry {
  repeated string phrases = 1;
  double boost = 2;
}

message CreateSpeechContextRequest {
  string api_key = 1;
  SpeechContext speech_context = 2;
}
message CreateSpeechContextResponse {
}

message DeleteSpeechContextRequest {
  string api_key = 1;
  string name = 2;
}
message DeleteSpeechContextResponse {
}

message ListSpeechContextNamesRequest {
  string api_key = 1;
}
message ListSpeechContextNamesResponse {
  repeated string names = 1;
}

message GetSpeechContextRequest {
  string api_key = 1;
  string name = 2;
}
message GetSpeechContextResponse {
  SpeechContext speech_context = 1;
}

message UpdateSpeechContextRequest {
  string api_key = 1;
  SpeechContext speech_context = 2;
}
message UpdateSpeechContextResponse {
}

// Speaker AI

// AddSpeaker

message AddSpeakerRequest {
  string api_key = 1;
  string name = 2;
}

message AddSpeakerResponse {
  string name = 1;
  google.protobuf.Timestamp created = 2;
}

// GetSpeaker

message GetSpeakerRequest {
  string api_key = 1;
  string name = 2;
}

message GetSpeakerResponse {
  string name = 1;
  google.protobuf.Timestamp created = 2;
  repeated GetSpeakerResponseAudio audios = 3;
}

message GetSpeakerResponseAudio {
  string audio_name = 1;
  google.protobuf.Timestamp created = 2;
  int32 duration_ms = 3;
}

// RemoveSpeaker

message RemoveSpeakerRequest {
  string api_key = 1;
  string name = 2;
}

message RemoveSpeakerResponse {}

// ListSpeakers

message ListSpeakersRequest {
  string api_key = 1;
}

message ListSpeakersResponse {
  repeated ListSpeakersResponseSpeaker speakers = 1;
}

message ListSpeakersResponseSpeaker {
  string name = 1;
  google.protobuf.Timestamp created = 2;
  int32 num_audios = 3;
}

// AddSpeakerAudio

message AddSpeakerAudioRequest {
  string api_key = 1;
  string speaker_name = 2;
  string audio_name = 3;
  bytes audio = 4;
}

message AddSpeakerAudioResponse {
  string speaker_name = 1;
  string audio_name = 2;
  google.protobuf.Timestamp created = 3;
  int32 duration_ms = 4;
}

// GetSpeakerAudio

message GetSpeakerAudioRequest {
  string api_key = 1;
  string speaker_name = 2;
  string audio_name = 3;
}

message GetSpeakerAudioResponse {
  string speaker_name = 1;
  string audio_name = 2;
  google.protobuf.Timestamp created = 3;
  int32 duration_ms = 4;
  bytes audio = 5;
}

// RemoveSpeakerAudio

message RemoveSpeakerAudioRequest {
  string api_key = 1;
  string speaker_name = 2;
  string audio_name = 3;
}

message RemoveSpeakerAudioResponse {}

标签:key,int32,name,Soniox,病历,api,语音,message,string
From: https://blog.csdn.net/withcsharp2/article/details/139276891

相关文章

  • OpenAI用26分钟改变世界!免费版GPT-4震撼登场,视频语音交互迈向科幻片级别
    一场长达26分钟的发布会,再次掀起了AI行业的风浪,将深刻改变我们未来的生活,也将让无数AI初创公司感到焦虑不安。这并非标题党,因为这次发布会由OpenAI主办。就在刚刚,OpenAI正式发布了GPT-4o。这个“o”代表“omni”,即全面、全能的意思。这一模型不仅拥有文本处理能力,还能处理图......
  • 视觉语音识别挑战赛 CNVSRC 2024
        CNVSRC2024由NCMMSC2024组委会发起,清华大学、北京邮电大学、海天瑞声、语音之家共同主办。竞赛的目标是通过口唇动作来推断发音内容,进一步推动视觉语音识别技术的发展。视觉语音识别(也称为读唇技术)是一种通过观察唇部动作推断发音内容的技术,广泛应用于公共安全、......
  • 陪玩系统音频社交系统语音直播系统短视频系统陪玩陪玩系统程序陪玩系统搭建陪玩源码开
    在当今的科技世界中,游戏已经成为了人们日常生活的一部分。随着移动设备的普及和网络的发展,各种类型的游戏应运而生,满足了不同人群的需求。然而,有一种新兴的游戏模式正在逐渐受到玩家们的欢迎,那就是“陪玩”系统。那么,什么是陪玩系统开发呢?本文将对此进行详细的探讨。一、陪玩......
  • 深度学习-语音识别-gm与hmm参数的学习--81
    目录1.GMMHMM参数的学习2.GMM概率计算3.具体训练流程4.三音素模型6.三音素GMM-HMM模型训练7.串接HMM的Viterbi识别1.GMMHMM参数的学习GMM-->声学模型声学特征与音素的映射关系HMM-->语言模型已经直到发音决绝如何得到正确的文本一个发硬会对应多个文本哪种文......
  • 深度学习-语音识别-gmm在语音识别中的作用--80
    目录1.假设你是一位技术专家,我不了解机器学习里面的高斯混合模型,你能用通俗的语言解释一下吗?2.结合上面的回答,语音识别里面,高斯混合模型(GaussianMixtureModel,GMM)是用来做什么的3.假设你是一位机器学习算法工程师,想深入的学习高斯混合模型,如何用python实现高斯混合模型(Gaus......
  • Python调用科大讯飞在线语音合成API --内附完整项目
    一,注册讯飞账号,并实名制。讯飞开放平台-以语音交互为核心的人工智能开放平台(xfyun.cn)二、找到音频合成,按页面提示申请免费试用。在线语音合成_免费试用-讯飞开放平台(xfyun.cn)三、申请免费使用后,找到API信息如下:​ 四、找到开发者文档,仔细阅读语音合成(流式版)WebAP......
  • java调用科大讯飞在线语音合成API --内附完整项目
    科大讯飞语音开放平台基础环境搭建1.用户注册 注册科大讯飞开放平台账号2.注册好后先创建一个自己的应用创建完成后进入应用可以看到我们开发需要的三个参数:APPID,APISecret,APIKey3.因为平台提供的SDK中只支持了简单的中英两种语言语音合成,所以这里我们不会用提供的Jav......
  • 【语音处理】语音信号时域频域分析,降噪滤波,端点检测,特征提取附Matlab代码
     ✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,代码获取、论文复现及科研仿真合作可私信。......
  • 【语音处理】语音信号时域频域分析,降噪滤波,端点检测,特征提取附Matlab代码
     ✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,代码获取、论文复现及科研仿真合作可私信。......
  • ThinkEditor跨平台BS电子病历编辑器控件具备哪些能力
            笔者从事医疗信息化行业工作10多年,对当前热门的BS架构的电子病历编辑器有一些自己的思考发出来供大家讨论,笔者信译,演示网址:www.thinkeditor.com。1.病历结构是否需要结构化        首先是陈旧的自定义字符串格式,虽格式灵活,但需自己编写病历格式解析......