首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >亚马逊转录流媒体服务语音转文本.NET软件开发工具包

亚马逊转录流媒体服务语音转文本.NET软件开发工具包
EN

Stack Overflow用户
提问于 2019-01-22 07:26:01
回答 1查看 1.4K关注 0票数 4

我在亚马逊.NET软件开发工具包中找不到任何转录流媒体服务(从语音到文本)的参考资料。

在.NET SDK亚马逊转录流媒体服务中可以使用吗?任何参考资料都会有帮助。

EN

回答 1

Stack Overflow用户

发布于 2021-04-01 13:28:07

我是这样做的:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
using System;
using System.Collections.Generic;
using System.IO;
using System.Net;
using System.Threading.Tasks;
using Amazon;
using Amazon.S3;
using Amazon.S3.Model;
using Amazon.TranscribeService;
using Amazon.TranscribeService.Model;
using Newtonsoft.Json;
using QuickScreenHelper;

namespace CognitiveFace.Speech
{
    public class AwsSpeech : IDisposable
    {
        public AwsSpeech(RegionEndpoint regionEndpoint = null)
        {
            RegionEndpoint = regionEndpoint ?? RegionEndpoint.APNortheast1;
            //todo add region endpoint for AWS Face
            S3Client = new AmazonS3Client(RegionEndpoint);
            TranscribeClient = new AmazonTranscribeServiceClient(RegionEndpoint);
        }

        private RegionEndpoint RegionEndpoint { get; }

        private AmazonTranscribeServiceClient TranscribeClient { get; }

        private AmazonS3Client S3Client { get; }

        public void Dispose()
        {
            //TODO remember to call
            S3Client.Dispose();
            TranscribeClient.Dispose();
            //TODO dispose for faceClient
            //todo dispose for gcp speech and azure speech
        }

        public async Task TranscribeInputFile(string fileName, string targetLanguageCode = "ja-JP")
        {
            var bucketName = "transcribe-" + Guid.NewGuid();
            var putBucketResponse = await CreateBucket(bucketName);
            if (putBucketResponse.HttpStatusCode == HttpStatusCode.OK)
            {
                var uploadInputFileToS3 = await UploadInputFileToS3(fileName, bucketName);
                if (uploadInputFileToS3.HttpStatusCode == HttpStatusCode.OK)
                {
                    var startTranscriptionJobResponse =
                        await TranscribeInputFile(fileName, bucketName, targetLanguageCode);
                    //todo
                    //todo delete bucket
                }
                else
                {
                    Logger.WriteLine($"Fail to transcribe {fileName} because cannot upload {fileName} to {bucketName}",
                        uploadInputFileToS3);
                }
            }
            else
            {
                Logger.WriteLine($"Fail to transcribe {fileName} because cannot create bucket {bucketName}",
                    putBucketResponse);
            }
        }

        private async Task<TranscriptionJobResult> TranscribeInputFile(string fileName, string bucketName,
            string targetLanguageCode)
        {
            var objectName = Path.GetFileName(fileName);

            var media = new Media()
            {
                MediaFileUri = $"https://s3.{RegionEndpoint.SystemName}.amazonaws.com/{bucketName}/{objectName}"
            };

            var transcriptionJobName = $"transcribe-job-{bucketName}";
            var transcriptionJobRequest = new StartTranscriptionJobRequest()
            {
                LanguageCode = targetLanguageCode,
                Media = media,
                MediaFormat = MediaFormat.Wav,
                TranscriptionJobName = transcriptionJobName,
                OutputBucketName = bucketName
            };

            var startTranscriptionJobResponse =
                await TranscribeClient.StartTranscriptionJobAsync(transcriptionJobRequest);
            if (startTranscriptionJobResponse.HttpStatusCode == HttpStatusCode.OK)
            {
                return await WaitForTranscriptionJob(startTranscriptionJobResponse.TranscriptionJob, bucketName);
            }
            else
            {
                //todo
                throw new NotImplementedException();
            }
        }

        private async Task<TranscriptionJobResult> WaitForTranscriptionJob(TranscriptionJob transcriptionJob,
            string bucketName, int delayTime = 16000)
        {
            var transcriptionJobTranscriptionJobStatus = transcriptionJob.TranscriptionJobStatus;
            Logger.WriteLine($"transcriptionJobTranscriptionJobStatus={transcriptionJobTranscriptionJobStatus}");
            if (transcriptionJobTranscriptionJobStatus ==
                TranscriptionJobStatus.COMPLETED)
            {
                var keyName = $"{transcriptionJob.TranscriptionJobName}.json";
                Logger.WriteLine($"Downloading {keyName}");
                var result = await GetFileFromS3(keyName, bucketName);
                return JsonConvert.DeserializeObject<TranscriptionJobResult>(result);
                /*using var stringReader = new StringReader(result);
                using var jsonTextReader = new JsonTextReader(stringReader);*/
            }
            else if (transcriptionJobTranscriptionJobStatus == TranscriptionJobStatus.FAILED)
            {
                //TODO
                throw new NotImplementedException();
            }
            else
            {
                await Task.Delay(delayTime);
                var getTranscriptionJobResponse = await TranscribeClient.GetTranscriptionJobAsync(
                    new GetTranscriptionJobRequest()
                    {
                        TranscriptionJobName = transcriptionJob.TranscriptionJobName
                    });
                return await WaitForTranscriptionJob(getTranscriptionJobResponse.TranscriptionJob, bucketName,
                    delayTime * 2);
            }
        }

        public async Task<PutBucketResponse> CreateBucket(string bucketName)
        {
            var putBucketRequest = new PutBucketRequest()
            {
                BucketName = bucketName,
            };

            return await S3Client.PutBucketAsync(putBucketRequest);
        }

        public async Task<PutObjectResponse> UploadInputFileToS3(string fileName, string bucketName)
        {
            var objectName = Path.GetFileName(fileName);

            var putObjectRequest = new PutObjectRequest
            {
                BucketName = bucketName,
                Key = objectName,
                ContentType = "audio/wav",
                FilePath = fileName
            };

            return await S3Client.PutObjectAsync(putObjectRequest);
        }

        public async Task<string> GetFileFromS3(string keyName, string bucketName)
        {
            var request = new GetObjectRequest()
            {
                BucketName = bucketName,
                Key = keyName
            };
            using var response = await S3Client.GetObjectAsync(request);
            using var responseStream = response.ResponseStream;
            using var reader = new StreamReader(responseStream);
            /*string title = response.Metadata["x-amz-meta-title"]; // Assume you have "title" as medata added to the object.
            string contentType = response.Headers["Content-Type"];
            Console.WriteLine("Object metadata, Title: {0}", title);
            Console.WriteLine("Content type: {0}", contentType);*/

            return await reader.ReadToEndAsync(); // Now you process the response body.
        }
    }

    //todo move
    public class TranscriptionJobResult
    {
        public string jobName { get; set; }
        public string accountId { get; set; }
        public string status { get; set; }
        public TranscriptionResult results { get; set; }
    }

    public class TranscriptionResult
    {
        public List<Transcript> transcripts { get; set; }
        public List<TranscriptItem> items { get; set; }
    }

    public class Transcript
    {
        public string transcript { get; set; }
    }

    public class TranscriptItem
    {
        public string start_time { get; set; }
        public string end_time { get; set; }
        public List<AlternativeTranscription> alternatives { get; set; }
        public string type { get; set; }
    }

    public class AlternativeTranscription
    {
        public string confidence { get; set; }
        public string content { get; set; }
    }
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54303167

复制
相关文章
亚马逊宣布Transcribe支持实时音频转录功能
在新推出的Comprehend服务之后,亚马逊今天宣布其自动语音识别(ASR)服务Amazon Transcribe获得对实时转录的支持。
AiTechYun
2018/12/18
1.3K0
亚马逊宣布Transcribe支持实时音频转录功能
.NET 的文本转语音合成
我经常飞去芬兰见我的妈妈。每次飞机降落在万塔机场时,我都会对鲜有旅客前往机场出口感到惊讶。绝大多数的旅客会转机到跨越所有中欧及东欧的目的地。所以难怪在飞机开始下降时,会发出一大堆有关转机的公告。“如果你的目的地是塔林,请到 123 号登机口登机”,“如果是飞往圣彼德堡的 XYZ 次航班,请到 234 号登机口登机”等。当然,乘务员通常不会讲十几种语言,因此他们使用英语,而英语不是大多数旅客的本地语言。鉴于客机上的公告 (PA) 系统的质量,以及引擎噪音、哭闹的婴儿和其他干扰,如何有效地传达信息?
AI.NET 极客圈
2019/07/19
2K0
谷歌通过定制的深度学习模型升级了其语音转文字的服务
一个月前,谷歌宣布在源于Magenta项目的文字转语音(Text-to-Speech,简称TTS)技术上取得代际突破,接着该公司又对其语音转文字(Speech-to-Text,简称STT)API云服务进行了重大升级。更新后的服务利用语音转录的深度学习模型,根据特定用例量身定制:短语音命令、打电话或视频,在所有其他上下文中都有一个默认模型。如今,升级后的服务可以处理120种语言以及不同模型可用性和功能级别的变体。商业应用范围包括电话会议、呼叫中心和视频转录。转录的准确性在有多个扬声器和明显背景噪音的情形下有了
程序你好
2018/07/20
1.7K0
亚马逊要把Alexa装进更多第三方硬件,推出开发工具
陈桦 编译整理 量子位 出品 | 公众号 QbitAI 亚马逊希望Alexa智能助手进入更多设备,而不仅只适用于自主硬件。因此,亚马逊今天发布了开发者工具,帮助商用设备厂商开发集成Alexa的产品。
量子位
2018/03/27
8480
亚马逊要把Alexa装进更多第三方硬件,推出开发工具
Google亚马逊相继开放语音API,全面争夺AI市场
Google大部分资金来自广告和搜索,并将企业产品(如云服务)视为未来收入增长的主要推动力,但这方面仍落后于亚马逊和微软。新版Google语音软件是尝试成为更有竞争力的云服务商的一个例子。这也是在与亚
BestSDK
2018/02/28
1.5K0
Google亚马逊相继开放语音API,全面争夺AI市场
python文本转语音(微软xiaoxiao语音)
因为xiaoxiao的语音属于神经网络语音 所以选择地区时要选择 神经网络可用区域 才能使用微软xiaoxiao语音
wo.
2021/06/15
8.9K1
python文本转语音(微软xiaoxiao语音)
学界 | 谷歌联合英伟达重磅论文:实现语音到文本的跨语言转录
选自arxiv 机器之心编译 参与:吴攀、李亚洲、蒋思源 机器翻译一直是人工智能研究领域的重头戏,自去年谷歌推出了神经机器翻译(GNMT)服务以来,相关技术的研发并没有止步不前,在多语言翻译和 zero-shot 翻译上也取得了引人注目的进展。近日,谷歌大脑和英伟达联合发布的一篇论文《序列到序列模型可以直接转录外语语音(Sequence-to-Sequence Models Can Directly Transcribe Foreign Speech)》将机器翻译这方面的研究又向前推进了一步,实现了从一种语
机器之心
2018/05/07
1.1K0
学界 | 谷歌联合英伟达重磅论文:实现语音到文本的跨语言转录
4.17 VR扫描:专业级无人机Flying Eye售价75000美元,提供6K VR直播
专业级无人机Flying Eye售价75000美元,提供6K VR直播 360 Designs的无人机Flying Eye 将于本月在拉斯维加斯举办的美国广播电视协会会议(NAB)亮相,售价75000
VRPinea
2018/05/15
5940
AWS机器学习初探(2):文本翻译Translate、文本转语音Polly、语音转文本Transcribe
AWS Translate 服务是一种AWS 机器学习应用服务,它利用高级机器学习技术来进行文本翻译。它的使用非常简单,只需要提供输入文本,该服务就给出输出文本。
SammyLiu
2019/06/28
2K0
AWS机器学习初探(2):文本翻译Translate、文本转语音Polly、语音转文本Transcribe
文本转语音如此简单
哈喽,大家好,我是小马,这两天在研究文本转音的功能,有时候担心自己的普通话不标准,比方说要录制一个视频,即兴讲可能会卡壳,这个时候我们就可以先准备好文本,然后再利用人工智能来生成音频,下面就分享下我的研究成果吧!
狂奔滴小马
2022/03/30
1.7K0
文本转语音如此简单
直播软件开发科普之流媒体介绍
直播软件开发常用的流媒体协议主要有 HTTP 渐进下载和基于 RTSP/RTP 的实时流媒体协议,这二种基本是完全不同的东西
云豹kj的晨曦
2020/09/16
1.2K0
直播软件开发科普之流媒体介绍
iOS-文本转语音
iOS提供了一个类AVSpeechSynthesizer来实现文本到语音的功能, 即读出文字
周希
2019/10/15
7620
python 文本转语音播报
第一步:安装pyttsx第三方库 windows安装:pip install pyttsx # -*- coding: utf-8-*- import sys   reload(sys)   sys.setdefaultencoding('utf8')    import pyttsx   engine = pyttsx.init()   engine.say('你好')   engine.runAndWait()   # 朗读一次   engine.endLoop() 
py3study
2020/01/10
1.7K0
谷歌语音转录背后的神经网络
【编者按】由于“记忆单元”的优势,LSTM RNNs已经应用于Google、百度、科大讯飞的语音处理之中。最近,Google在其技术博客中自述了使用LSTM模型取代GMM模型实现语音转录的过程。文章尚未披露训练模型的具体步骤,但介绍了数据源的解决、建模的思想,并对目前尚未解决的问题进行解析,如错认“噪音”和转录标点符号,对希望尝试LSTM的团队有借鉴意义。 在过去的几年中,深度学习在世界计算机科学难题中表现出了卓越的成就,从图像分类、字幕添加到机器翻译,再到可视化模型技术。最近,我们宣布了在谷歌语音转录上使
用户1737318
2018/06/05
6900
Snips推出语音助手SDK,支持离线工作
Snips是一家法国初创公司,其提供的服务主要是为用户建立自定义语音助手。Snips并不使用亚马逊的Alexa语音服务或谷歌助手SDK,而是帮助用户建立自己的语音助手,并嵌入到设备上。此外,由于这个语
BestSDK
2018/03/02
4K1
Snips推出语音助手SDK,支持离线工作
AI NEXT | 微软黄学东:微软在很多AI领域领先Google
AI科技评论按:本月 18 日,由美中技术与创新协会(Association of Technology and Innovation,ATI)主办的第一届“AI NEXT”大会在西雅图召开。本次会议的主要嘉宾包括:微软首席 AI 科学家邓力,微软院士黄学东,Uber 深度学习负责人 Luming Wang 等。华人之外,还有亚马逊 Alexa 首席科学家 Nikko Strom,微软小娜架构师 Savas Parastatidis 等业内知名专家。 大会主题是“探索 AI 的潜力,把 AI 技术应用于
AI科技评论
2018/03/12
9790
AI NEXT | 微软黄学东:微软在很多AI领域领先Google
微软黄学东:微软在很多AI领域领先Google | AI NEXT
AI 研习社按:本月 18 日,由美中技术与创新协会(Association of Technology and Innovation,ATI)主办的第一届“AI NEXT”大会在西雅图召开。本次会议的主要嘉宾包括:微软首席 AI 科学家邓力,微软院士黄学东,Uber 深度学习负责人 Luming Wang 等。华人之外,还有亚马逊 Alexa 首席科学家 Nikko Strom,微软小娜架构师 Savas Parastatidis 等业内知名专家。 大会主题是“探索 AI 的潜力,把 AI 技术应用于实用
AI研习社
2018/03/29
7690
微软黄学东:微软在很多AI领域领先Google | AI NEXT
微软的文本转语音服务,已经听不出是机器了
今天刷到了微软在 2021 年 5 月发布的文本转语音服务(TTS),试了下,真的听不出这是机器在读,而且,可以分辨出中文的多音字,如士大夫和大(dai)夫,儿化音也可以连起来,可以自动推断出语气和情感,非常智能。感觉以后的播音员要失业了。
somenzz
2021/12/21
2.1K0
微软的文本转语音服务,已经听不出是机器了
Qt如何实现文本转语音?
对,Qt没有食言,9月底如期发布了6.2 LTS。嗯,昨天是9月30日,是月底没错,准时没毛病。博客地址如下
单片机点灯小能手
2021/10/26
3.1K0
Qt如何实现文本转语音?
揭秘亚马逊内部与众不同的软件开发系统
作者 | Gergely Orosz 译者 | 平川 策划 | Tina 本文最初发布于 Gergely Orosz 的个人博客。 亚马逊有大量的内部系统。作为软件工程师和工程经理,下面这些值得了解一下。 当作为 SDE(软件开发工程师)或 SDM(软件开发经理)加入时,你必须学会使用亚马逊自定义的技术栈,这和 AWS 客户所使用的技术栈有着惊人的差异。下面这些是你可能会遇到的系统。 与 SDE 密切相关的内部系统 Code:代码搜索和 VCS(Git)。 Crux:亚马逊的代码评审系统。 B
深度学习与Python
2023/03/29
6890
揭秘亚马逊内部与众不同的软件开发系统

相似问题

亚马逊转录流媒体服务

10

亚马逊网络服务CloudFormation .NET软件开发工具包

10

基于.NET的亚马逊网络服务软件开发工具包

254

部署亚马逊.NET软件开发工具包项目失败

04

在亚马逊.NET软件开发工具包中列出实例

20
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文