use whisper
v0.2.0
React Hook para Operai Whisper API con grabadora de voz, transcripción en tiempo real y eliminación de silencio incorporada
Se está desarrollando Use Whisper para React Native.
Repositorio: https://github.com/chengsokdara/use-whisper-native
Progress: Chengsokdara/Use-Whisper-Native#1
npm i @chengsokdara/use-whisper
yarn add @chengsokdara/use-whisper
import { useWhisper } from '@chengsokdara/use-whisper'
const App = ( ) => {
const {
recording ,
speaking ,
transcribing ,
transcript ,
pauseRecording ,
startRecording ,
stopRecording ,
} = useWhisper ( {
apiKey : process . env . OPENAI_API_TOKEN , // YOUR_OPEN_AI_TOKEN
} )
return (
< div >
< p > Recording: { recording } < / p >
< p > Speaking: { speaking } < / p >
< p > Transcribing: { transcribing } < / p >
< p > Transcribed Text: { transcript . text } < / p >
< button onClick = { ( ) => startRecording ( ) } > Start < / button >
< button onClick = { ( ) => pauseRecording ( ) } > Pause < / button >
< button onClick = { ( ) => stopRecording ( ) } > Stop < / button >
< / div >
)
}
import { useWhisper } from '@chengsokdara/use-whisper'
const App = ( ) => {
/**
* you have more control like this
* do whatever you want with the recorded speech
* send it to your own custom server
* and return the response back to useWhisper
*/
const onTranscribe = ( blob : Blob ) => {
const base64 = await new Promise < string | ArrayBuffer | null > (
( resolve ) => {
const reader = new FileReader ( )
reader . onloadend = ( ) => resolve ( reader . result )
reader . readAsDataURL ( blob )
}
)
const body = JSON . stringify ( { file : base64 , model : 'whisper-1' } )
const headers = { 'Content-Type' : 'application/json' }
const { default : axios } = await import ( 'axios' )
const response = await axios . post ( '/api/whisper' , body , {
headers ,
} )
const { text } = await response . data
// you must return result from your server in Transcript format
return {
blob ,
text ,
}
}
const { transcript } = useWhisper ( {
// callback to handle transcription with custom server
onTranscribe ,
} )
return (
< div >
< p > { transcript . text } < / p >
< / div >
)
}
import { useWhisper } from '@chengsokdara/use-whisper'
const App = ( ) => {
const { transcript } = useWhisper ( {
apiKey : process . env . OPENAI_API_TOKEN , // YOUR_OPEN_AI_TOKEN
streaming : true ,
timeSlice : 1_000 , // 1 second
whisperConfig : {
language : 'en' ,
} ,
} )
return (
< div >
< p > { transcript . text } < / p >
< / div >
)
}
import { useWhisper } from '@chengsokdara/use-whisper'
const App = ( ) => {
const { transcript } = useWhisper ( {
apiKey : process . env . OPENAI_API_TOKEN , // YOUR_OPEN_AI_TOKEN
// use ffmpeg-wasp to remove silence from recorded speech
removeSilence : true ,
} )
return (
< div >
< p > { transcript . text } < / p >
< / div >
)
}
import { useWhisper } from '@chengsokdara/use-whisper'
const App = ( ) => {
const { transcript } = useWhisper ( {
apiKey : process . env . OPENAI_API_TOKEN , // YOUR_OPEN_AI_TOKEN
// will auto start recording speech upon component mounted
autoStart : true ,
} )
return (
< div >
< p > { transcript . text } < / p >
< / div >
)
}
import { useWhisper } from '@chengsokdara/use-whisper'
const App = ( ) => {
const { transcript } = useWhisper ( {
apiKey : process . env . OPENAI_API_TOKEN , // YOUR_OPEN_AI_TOKEN
nonStop : true , // keep recording as long as the user is speaking
stopTimeout : 5000 , // auto stop after 5 seconds
} )
return (
< div >
< p > { transcript . text } < / p >
< / div >
)
}
import { useWhisper } from '@chengsokdara/use-whisper'
const App = ( ) => {
const { transcript } = useWhisper ( {
apiKey : process . env . OPENAI_API_TOKEN , // YOUR_OPEN_AI_TOKEN
autoTranscribe : true ,
whisperConfig : {
prompt : 'previous conversation' , // you can pass previous conversation for context
response_format : 'text' , // output text instead of json
temperature : 0.8 , // random output
language : 'es' , // Spanish
} ,
} )
return (
< div >
< p > { transcript . text } < / p >
< / div >
)
}
La mayoría de estas dependientes son cargadas cargadas, por lo que solo se importa cuando es necesario
Nombre | Tipo | Valor predeterminado | Descripción |
---|---|---|---|
apagado | cadena | '' | Tu token API de OpenAI |
autostart | booleano | FALSO | Grabación de discurso de inicio automático en el montaje de componentes |
autotranscribe | booleano | verdadero | ¿Deberían transcribir automáticamente después de dejar de grabar? |
modo | cadena | transcripciones | Control del modo Whisper transcripciones o traducciones, actualmente solo admite la traducción al inglés |
sin escalas | booleano | FALSO | Si es verdadero, el registro se detendrá automáticamente después del tiempo de detención. Sin embargo, si el usuario sigue hablando, la grabadora seguirá grabando |
eliminación | booleano | FALSO | Eliminar el silencio antes de enviar el archivo a la API de OpenAI |
parada | número | 5,000 ms | Si no es cierto, esto se requiere. Este control cuando la grabadora se detiene automáticamente |
transmisión | booleano | FALSO | Transcribir el discurso en tiempo real basado en TimesLice |
TimesLice | número | 1000 ms | Intervalo entre cada evento en OnDataVailable |
whisperconfig | Whisperapiconfig | indefinido | Configuración de transcripción de la API de Whisper |
onataavilable | (blob: blob) => void | indefinido | Función de devolución de llamada para obtener Blob registrado en intervalo entre TimesLice |
intranscribir | (Blob: Blob) => Promise <Transcript> | indefinido | función de devolución de llamada para manejar la transcripción en su propio servidor personalizado |
Nombre | Tipo | Valor predeterminado | Descripción |
---|---|---|---|
inmediato | cadena | indefinido | Un texto opcional para guiar el estilo del modelo o continuar con un segmento de audio anterior. El aviso debe coincidir con el lenguaje de audio. |
respuesta_format | cadena | json | El formato de la salida de transcripción, en una de estas opciones: JSON, Texto, SRT, Verbose_Json o VTT. |
temperatura | número | 0 | La temperatura de muestreo, entre 0 y 1. Los valores más altos como 0.8 harán que la salida sea más aleatoria, mientras que los valores más bajos como 0.2 lo hará más enfocado y determinista. Si se establece en 0, el modelo utilizará la probabilidad de registro de aumentar automáticamente la temperatura hasta que se alcancen ciertos umbrales. |
idioma | cadena | interno | El lenguaje del audio de entrada. El suministro del lenguaje de entrada en formato ISO-639-1 mejorará la precisión y la latencia. |
Nombre | Tipo | Descripción |
---|---|---|
grabación | booleano | Estado de grabación del habla |
discurso | booleano | detectar cuando el usuario está hablando |
transcripción | booleano | Mientras elimina el silencio del discurso y envía solicitud a la API Operai Whisper |
transcripción | Transcripción | Regreso de objetos después de la transcripción de susurro completo |
pauserecording | Promesa | Pausa de grabación del habla |
startrecording | Promesa | Iniciar grabación del habla |
parada | Promesa | Detener la grabación del habla |
Nombre | Tipo | Descripción |
---|---|---|
gota | Gota | Discurso grabado en JavaScript Blob |
texto | cadena | Texto transcrito devuelto de Whisper API |
Contacte conmigo para el desarrollo de aplicaciones web o móvil utilizando React o React Native
https://chengsokdara.github.io