Transcrição de Áudio Avançada (Speech-to-Text)
Os serviços de STT (Speech-to-Text) do SipPulse AI convertem arquivos de áudio em texto com alta precisão, permitindo enriquecer suas aplicações com dados vocais valiosos. Nossa plataforma oferece:
- Modelos proprietários de alta performance
pulse-precision
(foco em máxima acurácia, resultando em um excelente Word Error Rate - WER) epulse-speed
(otimizado para baixa latência), ambos com suporte avançado a diarização (identificação de múltiplos interlocutores). - Recursos avançados como anonimização de dados sensíveis e Audio Intelligence para análises estruturadas e insights automáticos a partir das transcrições.
Para informações detalhadas sobre preços e especificações de cada modelo, consulte nossa página de Pricing.
Playground Interativo
O Playground Interativo de Transcrição de Áudio (acesse aqui) é a ferramenta ideal para experimentar e validar os modelos STT de forma intuitiva:
Upload de Arquivo de Áudio
- Realize o upload de arquivos de áudio (formatos MP3, WAV, PCM, OGG com limite de 25 MB) arrastando e soltando ou através do seletor de arquivos.
Seleção do Modelo de Transcrição
- Escolha entre os modelos disponíveis:
pulse-precision
: Otimizado para a mais alta precisão na transcrição.pulse-speed
: Prioriza a velocidade de processamento, ideal para casos de uso que exigem menor latência.whisper-1
: Modelo da OpenAI.whisper-chat
: Modelo da OpenAI com alta velocidade de resposta. Ideal para aplicações que requerem respostas rápidas, mesmo que com uma leve redução na precisão em comparação aopulse-precision
.
- Escolha entre os modelos disponíveis:
Configuração de Parâmetros
Formato de Saída (
format
): Defina o formato desejado para a transcrição (text
,json
,vtt
,srt
,verbose_json
,diarization
). Obs:diarization
só está disponível para os modelospulse-precision
epulse-speed
.Idioma (
language
): Especifique o idioma do áudio (e.g.,pt
,en
,es
).Instruções (
prompt
): Forneça instruções ou contexto adicional (termos específicos, nomes próprios) para orientar e refinar o processo de transcrição.
Recursos Avançados
- Anonimização (
anonymize
): Habilite para ofuscar automaticamente dados sensíveis identificados na transcrição (e.g., CPF, e-mail, endereços IP). Consulte a documentação de Redação de Texto para detalhes sobre o funcionamento. - Audio Intelligence (
insights
): Ative para receber análises estruturadas juntamente com a transcrição. As opções incluem sumarização, identificação de tópicos, análise de sentimento, entre outras, processadas diretamente no endpoint.
- Anonimização (
Executar Transcrição
- Clique no botão Transcrever para que o áudio seja processado utilizando o modelo e os parâmetros selecionados. O resultado da transcrição será exibido na interface.
Visualizar Código de Integração
- A funcionalidade “Ver Código” gera automaticamente exemplos de código para integração em cURL (Bash), Python e JavaScript (Node.js). Estes exemplos são pré-configurados com os mesmos parâmetros utilizados no Playground, facilitando a implementação da funcionalidade de transcrição em suas aplicações.
Consumo via API REST
Utilize o endpoint nativo /v1/asr/transcribe
para ter controle total sobre todos os recursos e modelos, incluindo os avançados pulse-precision
e pulse-speed
com diarização.
# Exemplo: Transcrição com diarização, anonimização e Audio Intelligence (sumarização e tópicos)
# utilizando o modelo pulse-precision.
curl -X POST 'https://api.sippulse.ai/v1/asr/transcribe' \
-H 'api-key: $SIPPULSE_API_KEY' \
-F 'file=@audio.wav' \
-F 'model=pulse-precision' \
-F 'format=verbose_json' \
-F 'language=pt' \
-F 'diarization=true' \
-F 'anonymize=true' \
-F 'insights=["summarization","topics"]'
import os
import requests
import json # Adicionado para requests.utils.json.dumps, ou usar json.dumps diretamente
def transcribe_audio_advanced(
file_path: str,
model: str = "pulse-precision", # Padrão para nosso modelo de alta precisão
output_format: str = "verbose_json",
language: str = "pt",
enable_diarization: bool = True,
enable_anonymization: bool = True,
audio_insights: list = None
) -> dict:
"""
Realiza a transcrição de um arquivo de áudio utilizando o endpoint /v1/asr/transcribe
do SipPulse AI, com suporte a recursos avançados.
Args:
file_path: Caminho para o arquivo de áudio.
model: Modelo de transcrição a ser utilizado (e.g., "pulse-precision", "pulse-speed").
output_format: Formato da saída da transcrição.
language: Código do idioma do áudio.
enable_diarization: Ativa/desativa a diarização (separação de interlocutores).
enable_anonymization: Ativa/desativa a anonimização de dados sensíveis.
audio_insights: Lista de análises de Audio Intelligence a serem aplicadas (e.g., ["summarization", "topics"]).
"""
api_url = "https://api.sippulse.ai/v1/asr/transcribe"
headers = {"api-key": os.getenv("SIPPULSE_API_KEY")}
with open(file_path, "rb") as audio_file:
files = {"file": audio_file}
payload = {
"model": model,
"format": output_format,
"language": language,
"diarization": str(enable_diarization).lower(),
"anonymize": str(enable_anonymization).lower(),
}
if audio_insights:
# Usando json.dumps diretamente, já que requests.utils.json é um alias para o módulo json padrão
payload["insights"] = json.dumps(audio_insights)
response = requests.post(api_url, headers=headers, files=files, data=payload)
response.raise_for_status() # Levanta uma exceção para respostas de erro HTTP
return response.json()
if __name__ == "__main__":
# Substitua "audio.wav" pelo caminho do seu arquivo de áudio
# É necessário ter a variável de ambiente SIPPULSE_API_KEY configurada
try:
transcription_result = transcribe_audio_advanced(
"audio.wav",
model="pulse-precision",
audio_insights=["summarization", "topics"]
)
print(json.dumps(transcription_result, indent=2, ensure_ascii=False))
except FileNotFoundError:
print("Erro: Arquivo de áudio não encontrado. Verifique o caminho.")
except requests.exceptions.HTTPError as e:
print(f"Erro na API: {e.response.status_code} - {e.response.text}")
except Exception as e:
print(f"Ocorreu um erro inesperado: {e}")
// Node.js com node-fetch e form-data
import fs from "fs";
import FormData from "form-data";
import fetch from "node-fetch"; // Certifique-se de que node-fetch@2 está instalado ou use a API fetch nativa do Node 18+
async function transcribeAudioAdvanced(
filePath,
model = "pulse-precision", // Padrão para nosso modelo de alta precisão
outputFormat = "verbose_json",
language = "pt",
enableDiarization = true,
enableAnonymization = true,
audioInsights = ["summarization", "topics"]
) {
const apiUrl = "https://api.sippulse.ai/v1/asr/transcribe";
const apiKey = process.env.SIPPULSE_API_KEY;
if (!apiKey) {
throw new Error("A variável de ambiente SIPPULSE_API_KEY não está configurada.");
}
const form = new FormData();
form.append("file", fs.createReadStream(filePath));
form.append("model", model);
form.append("format", outputFormat);
form.append("language", language);
form.append("diarization", String(enableDiarization).toLowerCase());
form.append("anonymize", String(enableAnonymization).toLowerCase());
if (audioInsights && audioInsights.length > 0) {
form.append("insights", JSON.stringify(audioInsights));
}
const response = await fetch(apiUrl, {
method: "POST",
headers: {
"api-key": apiKey,
// FormData define Content-Type automaticamente com o boundary correto
// ...form.getHeaders() // Descomente se estiver usando uma versão mais antiga de form-data que requer isso
},
body: form,
});
if (!response.ok) {
const errorBody = await response.text();
throw new Error(`Erro na API: ${response.status} ${response.statusText} - ${errorBody}`);
}
return response.json();
}
// Exemplo de uso:
// (async () => {
// try {
// // Substitua "audio.wav" pelo caminho do seu arquivo de áudio
// const result = await transcribeAudioAdvanced("audio.wav");
// console.log(JSON.stringify(result, null, 2));
// } catch (error) {
// console.error("Falha ao transcrever áudio:", error);
// }
// })();
Considerações sobre Custos Adicionais:
- A utilização dos recursos de Diarization, Anonymization e Audio Intelligence pode incorrer em custos adicionais, calculados por token ou por caractere processado. Recomenda-se verificar o Dashboard da sua conta para um acompanhamento detalhado dos custos.
Listagem de Modelos
Para consultar os modelos STT atualmente disponíveis para sua organização, utilize o seguinte endpoint:
curl -X GET 'https://api.sippulse.ai/v1/asr/models' \
-H 'api-key: $SIPPULSE_API_KEY'
import os
import requests
import json
def list_available_stt_models() -> dict:
"""
Lista os modelos de Speech-to-Text (STT) disponíveis na API SipPulse AI.
"""
api_url = "https://api.sippulse.ai/v1/asr/models"
headers = {"api-key": os.getenv("SIPPULSE_API_KEY")}
response = requests.get(api_url, headers=headers)
response.raise_for_status()
return response.json()
if __name__ == "__main__":
# É necessário ter a variável de ambiente SIPPULSE_API_KEY configurada
try:
models = list_available_stt_models()
print("Modelos STT disponíveis:")
print(json.dumps(models, indent=2))
except requests.exceptions.HTTPError as e:
print(f"Erro na API: {e.response.status_code} - {e.response.text}")
except Exception as e:
print(f"Ocorreu um erro inesperado: {e}")
// Node.js com node-fetch
// import fetch from "node-fetch"; // Se não estiver usando Node 18+ com fetch nativo
async function listAvailableSTTModels() {
const apiUrl = "https://api.sippulse.ai/v1/asr/models";
const apiKey = process.env.SIPPULSE_API_KEY;
if (!apiKey) {
throw new Error("A variável de ambiente SIPPULSE_API_KEY não está configurada.");
}
const response = await fetch(apiUrl, {
headers: { "api-key": apiKey },
});
if (!response.ok) {
const errorBody = await response.text();
throw new Error(`Erro na API: ${response.status} ${response.statusText} - ${errorBody}`);
}
return response.json();
}
// Exemplo de uso:
// (async () => {
// try {
// const models = await listAvailableSTTModels();
// console.log("Modelos STT disponíveis:");
// console.log(JSON.stringify(models, null, 2));
// } catch (error) {
// console.error("Falha ao listar modelos STT:", error);
// }
// })();
SDK da OpenAI
É possível utilizar os modelos de transcrição do SipPulse AI, incluindo os proprietários pulse-precision
e pulse-speed
, bem como o whisper-1
, através do SDK oficial da OpenAI. Para isso, é necessário configurar o parâmetro baseURL
para o endpoint do SipPulse AI, que oferece compatibilidade com a API da OpenAI para transcrições.
import OpenAI from "openai";
import fs from "fs"; // Para ler o arquivo em Node.js
const sippulseOpenAI = new OpenAI({
apiKey: process.env.SIPPULSE_API_KEY, // Sua chave da API SipPulse
baseURL: "https://api.sippulse.ai/v1/openai", // Endpoint de compatibilidade do SipPulse AI
});
async function transcribeWithSippulseOpenAI(audioFilePath, modelName = "pulse-precision") {
// Em Node.js, você precisa fornecer um File-like object, como um ReadableStream.
// No browser, você pode usar um objeto File diretamente de um <input type="file">.
const audioFileStream = fs.createReadStream(audioFilePath);
try {
console.log(`Iniciando transcrição com o modelo: ${modelName}`);
const response = await sippulseOpenAI.audio.transcriptions.create({
file: audioFileStream, // Pode ser um Blob, ReadableStream, ou objeto File
model: modelName, // Ex: "pulse-precision", "pulse-speed", ou "whisper-1"
response_format: "verbose_json", // Formato de resposta detalhado
temperature: 0.0, // Para maior determinismo na transcrição
// Outros parâmetros suportados pela API de transcrição da OpenAI podem ser adicionados aqui
});
console.log("Transcrição concluída:");
console.log(JSON.stringify(response, null, 2));
return response;
} catch (error) {
console.error("Erro durante a transcrição com SDK OpenAI:", error);
throw error;
}
}
// Exemplo de uso em Node.js:
// (async () => {
// try {
// // Substitua "caminho/para/seu/audio.wav" pelo caminho real do arquivo
// await transcribeWithSippulseOpenAI("audio.wav", "pulse-precision");
// // await transcribeWithSippulseOpenAI("audio.wav", "whisper-1");
// } catch (e) {
// // Erro já tratado dentro da função
// }
// })();
from openai import OpenAI
import os
# Configuração do cliente OpenAI para usar o endpoint SipPulse AI
client = OpenAI(
api_key=os.getenv("SIPPULSE_API_KEY"), # Sua chave da API SipPulse
base_url="https://api.sippulse.ai/v1/openai" # Endpoint de compatibilidade do SipPulse AI
)
def transcribe_with_sippulse_openai(file_path: str, model_name: str = "pulse-precision"):
"""
Transcreve um arquivo de áudio usando um modelo do SipPulse AI
através da interface compatível com OpenAI.
"""
try:
with open(file_path, "rb") as audio_file:
print(f"Iniciando transcrição com o modelo: {model_name}")
result = client.audio.transcriptions.create(
file=audio_file,
model=model_name, # Ex: "pulse-precision", "pulse-speed", ou "whisper-1"
response_format="verbose_json",
temperature=0.0
# Outros parâmetros suportados pela API de transcrição da OpenAI podem ser adicionados aqui
)
print("Transcrição concluída.")
return result
except Exception as e:
print(f"Erro durante a transcrição com SDK OpenAI: {e}")
raise
if __name__ == "__main__":
# É necessário ter a variável de ambiente SIPPULSE_API_KEY configurada
# Substitua "audio.wav" pelo caminho do seu arquivo de áudio
try:
# Exemplo com pulse-precision
transcription_result = transcribe_with_sippulse_openai("audio.wav", model_name="pulse-precision")
# Exemplo com whisper-1 (se disponível e desejado)
# transcription_result = transcribe_with_sippulse_openai("audio.wav", model_name="whisper-1")
if transcription_result:
# Imprime o resultado da transcrição de forma legível
import json
print(json.dumps(transcription_result.dict(), indent=2, ensure_ascii=False))
except FileNotFoundError:
print(f"Erro: Arquivo de áudio 'audio.wav' não encontrado.")
except Exception:
# Erro já tratado e impresso pela função
pass
Limitação Importante:
- Ao utilizar o SDK da OpenAI (mesmo com o
baseURL
apontado para o SipPulse AI), recursos avançados e proprietários do SipPulse AI, comodiarization
,anonymize
ouinsights
, não são suportados. Esses parâmetros são específicos da API REST nativa do SipPulse AI (/v1/asr/transcribe
). Para usufruir da totalidade dos recursos, recomenda-se o uso direto da API REST nativa.
Boas Práticas
Para obter os melhores resultados e otimizar o uso dos modelos STT:
- Qualidade do Áudio: Forneça áudios com a maior clareza possível, minimizando ruídos de fundo e garantindo boa captação da voz.
- Fragmentação de Áudios Longos: Para arquivos de áudio extensos (e.g., >60 minutos), considere dividi-los em segmentos menores antes de enviar para transcrição. Isso pode melhorar a performance e o gerenciamento do processo.
- Uso Estratégico da Diarization: Em gravações de diálogos, reuniões ou qualquer cenário com múltiplos interlocutores, utilize o recurso de diarização (disponível nos modelos
pulse-precision
epulse-speed
). A correta identificação e separação dos falantes enriquece significativamente as análises e a usabilidade da transcrição. - Anonimização Consciente: Ative o recurso de anonimização sempre que a transcrição puder conter dados pessoais sensíveis. Esteja ciente dos custos adicionais associados a este processamento.
- Audio Intelligence para Insights Imediatos: Combine a transcrição com as funcionalidades de Audio Intelligence (e.g., sumarização, identificação de tópicos, análise de sentimento) para extrair valor e insights de forma automatizada e imediata, diretamente na resposta da API.
- Monitoramento de Custos: Acompanhe regularmente o consumo e os custos associados às transcrições e aos recursos avançados através do Dashboard da sua conta SipPulse AI.
Perguntas Frequentes (FAQ)
Qual é a principal diferença entre os modelos pulse-precision
e pulse-speed
?
pulse-precision
: É otimizado para máxima acurácia na transcrição, sendo a escolha ideal quando a precisão do texto é o fator mais crítico. Este modelo tende a apresentar um Word Error Rate (WER) inferior, mas pode ter uma latência ligeiramente maior. pulse-speed
: Prioriza a velocidade de processamento e menor latência, sendo adequado para aplicações que requerem respostas mais rápidas, mesmo que isso implique uma acurácia marginalmente inferior em comparação ao pulse-precision
.
É possível utilizar o recurso de diarização com o modelo whisper-1
através do SipPulse AI?
Não. A funcionalidade de diarização é um recurso avançado e exclusivo dos modelos proprietários do SipPulse AI: pulse-precision
e pulse-speed
. Estes modelos foram especificamente desenvolvidos para oferecer uma análise detalhada de áudios com múltiplos interlocutores.
Como posso obter análises estruturadas, como sumarização ou tópicos, a partir da minha transcrição?
Para receber análises estruturadas, você deve utilizar o parâmetro insights
ao fazer a requisição para o endpoint nativo da API REST do SipPulse AI (/v1/asr/transcribe
). Especifique uma lista com as análises desejadas (e.g., ["summarization", "topics"]
). Os resultados dessas análises serão incluídos no objeto audio_insights
dentro da resposta JSON. A funcionalidade "Ver Código" no Playground do SipPulse AI pode gerar exemplos de como formatar corretamente este parâmetro na sua requisição.
Qual o tempo médio para processamento de uma transcrição?
O tempo de processamento pode variar, mas geralmente corresponde a alguns segundos por minuto de áudio. Fatores como o modelo selecionado (pulse-speed
tende a ser mais rápido), a duração e complexidade do áudio, e a carga atual do sistema podem influenciar o tempo total.