use whisper
v0.2.0
React Hook pour API Openai Whisper avec enregistreur vocal, transcription en temps réel et suppression de silence intégrée
usewhisper pour React Native est en cours de développement.
Référentiel: https://github.com/chengsokdara/use-whisper natif
Progrès: Chengsokdara / use-whisper natif # 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 plupart de ces dépendances sont chargées paresseuses, donc elle n'est importée que lorsqu'elle est nécessaire
Nom | Taper | Valeur par défaut | Description |
---|---|---|---|
apikey | chaîne | '' | Votre jeton API OpenAI |
AutoStart | booléen | FAUX | Enregistrement de la parole de démarrage automatique sur le support de composant |
autotranscript | booléen | vrai | devrait se transcrire automatique après l'arrêt de l'enregistrement |
mode | chaîne | transcriptions | Control Whisper Mode TRANSCRIPTIONS ou TRADUCTIONS, ne prend actuellement en charge que la traduction en anglais |
sans escale | booléen | FAUX | Si vous êtes vrai, l'enregistrement s'arrête automatiquement après StopTimeout. Cependant, si l'utilisateur continue de parler, l'enregistreur continuera d'enregistrer |
supprimer | booléen | FAUX | Supprimer le silence avant d'envoyer un fichier à l'API OpenAI |
stoptimeout | nombre | 5 000 ms | Si le non-stop est vrai, cela devient requis. Ce contrôle lorsque l'enregistreur s'arrête automatiquement |
streaming | booléen | FAUX | Transcrire la parole en temps réel en fonction de la tranche de temps |
cinglé | nombre | 1000 ms | intervalle entre chaque événement ondataavailable |
chuchoteur | Chuchotement | indéfini | Configuration de transcription de l'API Whisper |
ondataavailable | (blob: blob) => void | indéfini | Fonction de rappel pour obtenir un blob enregistré dans l'intervalle entre la tranche de temps |
onTranscrip | (blob: blob) => promesse <transcript> | indéfini | Fonction de rappel pour gérer la transcription sur votre propre serveur personnalisé |
Nom | Taper | Valeur par défaut | Description |
---|---|---|---|
rapide | chaîne | indéfini | Un texte facultatif pour guider le style du modèle ou continuer un segment audio précédent. L'invite doit correspondre à la langue audio. |
réponse_format | chaîne | json | Le format de la sortie de la transcription, dans l'une de ces options: JSON, Texte, SRT, Verbose_json ou VTT. |
température | nombre | 0 | La température d'échantillonnage, entre 0 et 1. Des valeurs plus élevées comme 0,8 rendront la sortie plus aléatoire, tandis que des valeurs plus faibles comme 0,2 le rendront plus ciblé et déterministe. S'il est réglé sur 0, le modèle utilisera la probabilité du logarithme pour augmenter automatiquement la température jusqu'à ce que certains seuils soient atteints. |
langue | chaîne | en | La langue de l'audio d'entrée. La fourniture du langage d'entrée au format ISO-639-1 améliorera la précision et la latence. |
Nom | Taper | Description |
---|---|---|
enregistrement | booléen | État d'enregistrement de la parole |
Parlant | booléen | détecter quand l'utilisateur parle |
transcription | booléen | Tout en supprimant le silence du discours et envoyez une demande à l'Openai Whisper API |
transcription | Transcription | Retour d'objet après la transcription Whisper complète |
pause | Promesse | Enregistrement de discours de pause |
starTrecording | Promesse | Démarrer l'enregistrement de la parole |
étoile | Promesse | Arrêter l'enregistrement de la parole |
Nom | Taper | Description |
---|---|---|
goutte | Goutte | discours enregistré dans JavaScript blob |
texte | chaîne | Texte transcrit retourné de l'API Whisper |
Contactez-moi pour le développement d'applications Web ou mobile à l'aide de React ou React Native
https://chengsokdara.github.io