跳到正文
cccskills
Microsoft 官方免费在 GitHub 公开

azure-speech-to-text-rest-py

Build Python transcription for audio files up to 60 seconds using Azure Speech to Text through HTTP requests, without the Speech SDK. Covers language selection, recognition results, authentication, and error handling.

中文简介正在准备中。当前显示英语简介。

原文查看原文说明

Azure Speech to Text REST API for short audio (Python). Use for simple speech recognition of audio files up to 60 seconds without the Speech SDK. Triggers: "speech to text REST", "short audio transcription", "speech recognition REST API", "STT REST", "recognize speech REST". DO NOT USE FOR: Long audio (>60 seconds), real-time streaming, batch transcription, custom speech models, speech translation. Use Speech SDK or Batch Transcription API instead.

集成工具Azure
查看安装方法

适用场景

  • Transcribing short voice recordings
  • Adding transcription to Python scripts without the Speech SDK
  • Retrieving recognition confidence scores
  • Handling silence and recognition failures

包含的文件(2)

  • SKILL.md11.8 KB
  • references/pronunciation-assessment.md7.6 KB

SKILL.md(原文)

安装前可以查看交给 AI 代理的指令内容。

Azure Speech to Text REST API for Short Audio

Simple REST API for speech-to-text transcription of short audio files (up to 60 seconds). No SDK required - just HTTP requests.

Prerequisites

  1. Azure subscription - Create one free
  2. Speech resource - Create in Azure Portal
  3. Get credentials - After deployment, go to resource > Keys and Endpoint

Environment Variables

# Required
AZURE_SPEECH_KEY=<your-speech-resource-key>
AZURE_SPEECH_REGION=<region>  # e.g., eastus, westus2, westeurope

# Alternative: Use endpoint directly
AZURE_SPEECH_ENDPOINT=https://<region>.stt.speech.microsoft.com

Installation

pip install requests

Authentication & Lifecycle

🔑 Two rules apply to every code sample below:

  1. Two auth modes are supported. Use a subscription key (Ocp-Apim-Subscription-Key header) for quick access, or a Microsoft Entra token (including one acquired with DefaultAzureCredential) via the Authorization request header (see "Option 2" below). Never hardcode credentials in source.
  2. Use context managers for files and HTTP resources so file handles and network connections are released deterministically:
    • Sync: with open(...) as f: and (when reusing connections) with requests.Session() as session:
    • Async: async with aiohttp.ClientSession() as session:

Snippets may abbreviate this setup, but production code should always follow both rules.

Quick Start

import os
import requests

def transcribe_audio(audio_file_path: str, language: str = "en-US") -> dict:
    """Transcribe short audio file (max 60 seconds) using REST API."""
    region = os.environ["AZURE_SPEECH_REGION"]
    api_key = os.environ["AZURE_SPEECH_KEY"]
    
    url = f"https://{region}.stt.speech.microsoft.com/speech/recognition/conversation/cognitiveservices/v1"
    
    headers = {
        "Ocp-Apim-Subscription-Key": api_key,
        "Content-Type": "audio/wav; codecs=audio/pcm; samplerate=16000",
        "Accept": "application/json"
    }
    
    params = {
        "language": language,
        "format": "detailed"  # or "simple"
    }
    
    with open(audio_file_path, "rb") as audio_file:
        response = requests.post(url, headers=headers, params=params, data=audio_file)
    
    response.raise_for_status()
    return response.json()

# Usage
result = transcribe_audio("audio.wav", "en-US")
print(result["DisplayText"])

Audio Requirements

FormatCodecSample RateNotes
WAVPCM16 kHz, monoRecommended
OGGOPUS16 kHz, monoSmaller file size

Limitations:

  • Maximum 60 seconds of audio
  • For pronunciation assessment: maximum 30 seconds
  • No partial/interim results (final only)

Content-Type Headers

# WAV PCM 16kHz
wav_headers = {
    "Content-Type": "audio/wav; codecs=audio/pcm; samplerate=16000"
}

# OGG OPUS
ogg_headers = {
    "Content-Type": "audio/ogg; codecs=opus"
}

Response Formats

Simple Format (default)

params = {"language": "en-US", "format": "simple"}
{
  "RecognitionStatus": "Success",
  "DisplayText": "Remind me to buy 5 pencils.",
  "Offset": "1236645672289",
  "Duration": "1236645672289"
}

Detailed Format

params = {"language": "en-US", "format": "detailed"}
{
  "RecognitionStatus": "Success",
  "Offset": "1236645672289",
  "Duration": "1236645672289",
  "NBest": [
    {
      "Confidence": 0.9052885,
      "Display": "What's the weather like?",
      "ITN": "what's the weather like",
      "Lexical": "what's the weather like",
      "MaskedITN": "what's the weather like"
    }
  ]
}

Chunked Transfer (Recommended)

For lower latency, stream audio in chunks:

import os
import requests

def transcribe_chunked(audio_file_path: str, language: str = "en-US") -> dict:
    """Stream audio in chunks for lower latency."""
    region = os.environ["AZURE_SPEECH_REGION"]
    api_key = os.environ["AZURE_SPEECH_KEY"]
    
    url = f"https://{region}.stt.speech.microsoft.com/speech/recognition/conversation/cognitiveservices/v1"
    
    headers = {
        "Ocp-Apim-Subscription-Key": api_key,
        "Content-Type": "audio/wav; codecs=audio/pcm; samplerate=16000",
        "Accept": "application/json",
        "Transfer-Encoding": "chunked",
        "Expect": "100-continue"
    }
    
    params = {"language": language, "format": "detailed"}
    
    def generate_chunks(file_path: str, chunk_size: int = 1024):
        with open(file_path, "rb") as f:
            while chunk := f.read(chunk_size):
                yield chunk
    
    response = requests.post(
        url, 
        headers=headers, 
        params=params, 
        data=generate_chunks(audio_file_path)
    )
    
    response.raise_for_status()
    return response.json()

Authentication Options

Option 1: Subscription Key (Simple)

headers = {
    "Ocp-Apim-Subscription-Key": os.environ["AZURE_SPEECH_KEY"]
}

Option 2: Bearer Token

import requests
import os

def get_access_token() -> str:
    """Get access token from the token endpoint."""
    region = os.environ["AZURE_SPEECH_REGION"]
    api_key = os.environ["AZURE_SPEECH_KEY"]
    
    token_url = f"https://{region}.api.cognitive.microsoft.com/sts/v1.0/issueToken"
    
    response = requests.post(
        token_url,
        headers={
            "Ocp-Apim-Subscription-Key": api_key,
            "Content-Type": "application/x-www-form-urlencoded",
            "Content-Length": "0"
        }
    )
    response.raise_for_status()
    return response.text

# Use token in requests (valid for 10 minutes)
token = get_access_token()
headers = {
    "Authorization": f"Bearer {token}",
    "Content-Type": "audio/wav; codecs=audio/pcm; samplerate=16000",
    "Accept": "application/json"
}

Query Parameters

ParameterRequiredValuesDescription
languageYesen-US, de-DE, etc.Language of speech
formatNosimple, detailedResult format (default: simple)
profanityNomasked, removed, rawProfanity handling (default: masked)

Recognition Status Values

StatusDescription
SuccessRecognition succeeded
NoMatchSpeech detected but no words matched
InitialSilenceTimeoutOnly silence detected
BabbleTimeoutOnly noise detected
ErrorInternal service error

Profanity Handling

# Mask profanity with asterisks (default)
params = {"language": "en-US", "profanity": "masked"}

# Remove profanity entirely
params = {"language": "en-US", "profanity": "removed"}

# Include profanity as-is
params = {"language": "en-US", "profanity": "raw"}

Error Handling

import requests

def transcribe_with_error_handling(audio_path: str, language: str = "en-US") -> dict | None:
    """Transcribe with proper error handling."""
    region = os.environ["AZURE_SPEECH_REGION"]
    api_key = os.environ["AZURE_SPEECH_KEY"]
    
    url = f"https://{region}.stt.speech.microsoft.com/speech/recognition/conversation/cognitiveservices/v1"
    
    try:
        with open(audio_path, "rb") as audio_file:
            response = requests.post(
                url,
                headers={
                    "Ocp-Apim-Subscription-Key": api_key,
                    "Content-Type": "audio/wav; codecs=audio/pcm; samplerate=16000",
                    "Accept": "application/json"
                },
                params={"language": language, "format": "detailed"},
                data=audio_file
            )
        
        if response.status_code == 200:
            result = response.json()
            if result.get("RecognitionStatus") == "Success":
                return result
            else:
                print(f"Recognition failed: {result.get('RecognitionStatus')}")
                return None
        elif response.status_code == 400:
            print(f"Bad request: Check language code or audio format")
        elif response.status_code == 401:
            print(f"Unauthorized: Check API key or token")
        elif response.status_code == 403:
            print(f"Forbidden: Missing authorization header")
        else:
            print(f"Error {response.status_code}: {response.text}")
        
        return None
        
    except requests.exceptions.RequestException as e:
        print(f"Request failed: {e}")
        return None

Async Version

import os
import aiohttp
import asyncio

async def transcribe_async(audio_file_path: str, language: str = "en-US") -> dict:
    """Async version using aiohttp."""
    region = os.environ["AZURE_SPEECH_REGION"]
    api_key = os.environ["AZURE_SPEECH_KEY"]
    
    url = f"https://{region}.stt.speech.microsoft.com/speech/recognition/conversation/cognitiveservices/v1"
    
    headers = {
        "Ocp-Apim-Subscription-Key": api_key,
        "Content-Type": "audio/wav; codecs=audio/pcm; samplerate=16000",
        "Accept": "application/json"
    }
    
    params = {"language": language, "format": "detailed"}
    
    async with aiohttp.ClientSession() as session:
        with open(audio_file_path, "rb") as f:
            audio_data = f.read()
        
        async with session.post(url, headers=headers, params=params, data=audio_data) as response:
            response.raise_for_status()
            return await response.json()

# Usage
result = asyncio.run(transcribe_async("audio.wav", "en-US"))
print(result["DisplayText"])

Supported Languages

Common language codes (see full list):

CodeLanguage
en-USEnglish (US)
en-GBEnglish (UK)
de-DEGerman
fr-FRFrench
es-ESSpanish (Spain)
es-MXSpanish (Mexico)
zh-CNChinese (Mandarin)
ja-JPJapanese
ko-KRKorean
pt-BRPortuguese (Brazil)

Best Practices

  1. Pick sync OR async and stay consistent. Do not mix azure.xxx sync clients with azure.xxx.aio async clients in the same call path. Choose one mode per module.
  2. Use context managers for files and HTTP resources. Use with open(...) as f: and (when reusing connections) with requests.Session() as session: for sync code, or async with aiohttp.ClientSession() as session: for async code.
  3. Use WAV PCM 16kHz mono for best compatibility
  4. Enable chunked transfer for lower latency
  5. Cache access tokens for 9 minutes (valid for 10)
  6. Specify the correct language for accurate recognition
  7. Use detailed format when you need confidence scores
  8. Handle all RecognitionStatus values in production code

When NOT to Use This API

Use the Speech SDK or Batch Transcription API instead when you need:

  • Audio longer than 60 seconds
  • Real-time streaming transcription
  • Partial/interim results
  • Speech translation
  • Custom speech models
  • Batch transcription of many files

Reference Files

FileContents
references/pronunciation-assessment.mdPronunciation assessment parameters and scoring

评价

还没有评价。欢迎分享你的使用感受。

评论

无需登录即可发表。欢迎分享使用感受、提问,或说明在哪些环境下无法运行。

还没有评论。来写第一条吧。

提交后会立即公开。请勿填写邮箱、电话等个人信息。URL 最多 2 个。

0 / 1000 字

此表单受 reCAPTCHA 保护,适用 Google 的隐私权政策和服务条款。

同一仓库的技能

agent-framework-azure-ai-py

Microsoft 官方免费

Create Python agents on Azure AI Foundry that retain conversation context and use multiple tools. The skill covers code execution, file and web search, external tool connections, streaming responses, and outputs organized into defined fields.

中文简介正在准备中。当前显示英语简介。

  • Build an agent that retains conversation context
  • Combine code execution with file and web search
  • Connect external tools through MCP
microsoft/skills31422026年10月23日 更新

airunway-aks-setup

Microsoft 官方免费

Set up AI Runway on an existing AKS cluster, from checking cluster health and GPU compatibility to installing model serving software, deploying a first AI model, and verifying that it runs.

中文简介正在准备中。当前显示英语简介。

  • Setting up AI Runway on an existing AKS cluster
  • Checking GPU compatibility before deploying a model
  • Choosing and installing model serving software
microsoft/skills31422026年10月23日 更新

aks-gpu-inference

Microsoft 官方免费

Investigate GPU and KAITO failures in AKS using read-only evidence. Helps distinguish scheduling problems, memory shortages, workspace readiness issues, and scaling failures, then organizes findings with confidence levels and missing evidence.

中文简介正在准备中。当前显示英语简介。

  • Investigating GPU pods stuck in Pending
  • Distinguishing container memory shortages from GPU memory failures
  • Investigating a KAITO Workspace that is not ready
microsoft/skills31422026年10月23日 更新

aks-known-issues

Microsoft 官方免费

Find documented fixes for known AKS errors by matching the exact error message and required conditions. Get an explanation of the cause, a proposed fix, a Microsoft Learn reference, and read-only verification steps.

中文简介正在准备中。当前显示英语简介。

  • Look up a documented fix for a specific AKS error
  • Check the cause of a node pool creation failure
  • Review verification steps before changing AKS resources
microsoft/skills31422026年10月23日 更新

aks-network-capture

Microsoft 官方免费

Collect bounded packet captures from AKS nodes or pods alongside Azure network settings. Use the captured traffic as evidence when investigating where packets are lost, after initial checks that do not change the environment.

中文简介正在准备中。当前显示英语简介。

  • Collect packet captures from an AKS node
  • Gather evidence of where packets are lost
  • Retrieve captures alongside Azure network settings
microsoft/skills31422026年10月23日 更新

aks-troubleshooting

Microsoft 官方免费

Investigate live Azure Kubernetes Service incidents through read-only checks of logs, events, and resource state. Trace workload, node, networking, or upgrade failures and produce an incident report with supporting evidence, confidence, and proposed remediation.

中文简介正在准备中。当前显示英语简介。

  • Investigating crashing or Pending pods
  • Tracing DNS, ingress, and connectivity failures
  • Diagnosing node-pool scaling and quota failures
microsoft/skills31422026年10月23日 更新

查看 microsoft 的全部技能

报告此技能的问题