Rhino achieves superior accuracy compared to IBM Watson, Google Dialogflow, Amazon Lex, and Microsoft LUIS. Picovoice backs its performance claims with open-source and reproducible benchmarks. [1]
All voice data is processed on-device. Intrinsically HIPAA and GDPR compliant.
Edge-first architecture eliminates unpredictable network delay.
100% of the voice recognition is on-device. No concurrency limit. No downtime.
rhino = pvrhino.create(access_key,context_path)while not rhino.process(audio_frame()):passinference = rhino.get_inference()Build with Python
let rhino = new Rhino(accessKey,contextPath);while (!rhino.process(audioFrame())) { }let inference = rhino.getInference();Build with NodeJS
RhinoManager rhinoManager = new RhinoManager.Builder().setAccessKey(accessKey).setContextPath(contextPath).build(appContext,new RhinoManagerCallback() {@Overridepublic void invoke(RhinoInference inference) {// Inference callback}});rhinoManager.start()Build with Android
let rhinoManager = RhinoManager(accessKey: accessKey,contextPath: contextPath,onInferenceCallback: { inference in// Inference callback});try rhinoManager.start()Build with iOS
const {contextInfo,isLoaded,isListening,isError,isTalking,errorMessage,pushToTalk,start,pause,stop,} = useRhino(RhinoWorkerFactory,{accessKey: accessKey,context: context,start: true},(rhinoInference) => {// Inference callback});Build with React
RhinoManager rhinoManager = await RhinoManager.create(accessKey,contextPath,(inference) => {// Inference callback});await rhinoManager.process()Build with Flutter
let rhinoManager = await RhinoManager.create(accessKey,contextPath,(inference) => {// Inference callback});await rhinoManager.process()Build with React Native
RhinoManager rhinoManager = RhinoManager.Create(accessKey,contextPath,(inference) => {// Inference callback});rhinoManager.Start();Build with Unity
constructor(private rhinoService: RhinoService) {this.inferenceDetection = rhinoService.inference$.subscribe(inference => {// Inference callback})}async ngOnInit() {await this.rhinoService.init(RhinoWorkerFactory,{accessKey: accessKey,context: context})}Build with Angular
<Rhinoref="rhino"v-bind:rhinoFactoryArgs="{accessKey: accessKey,context: context}"v-bind:rhinoFactory="factory"v-on:rhn-inference="rhnInferenceFn"/>methods: {rhnInferenceFn: function (inference) {// Inference callback}}Build with Vue
Rhino rhino = Rhino.Create(accessKey,contextPath);while (rhino.Process(AudioFrame())) { }Inference inference = rhino.GetInference();Build with .NET
Rhino rhino = new Rhino.Builder().setAccessKey(accessKey).setContextPath(contextPath).build();while (!rhino.process(audioFrame())) { }RhinoInference inference = rhino.getInference();Build with Java
rhino := NewRhino(accessKey,contextPath)err := rhino.Init()for {isFinalized, err := rhino.Process(AudioFrame())if isFinalized {break}}inference, err := rhino.GetInference()Build with Go
let rhino: Rhino =RhinoBuilder::new(access_key,context_path).init().expect("");loop {if let Ok(is_finalized) = rhino.process(&audio_frame()) {if is_finalized {if let Ok(inference) = rhino.get_inference() {// Inference callback}}}}Build with Rust
pv_rhino_init(access_key,model_path,context_path,sensitivity,require_endpoint,&rhino);while (true) {pv_rhino_process(rhino,audio_frame(),&is_finalized);if (is_finalized) {pv_rhino_get_intent(rhino,&intent,&num_slots,&slots,&values);}}Build with C
English
German
Deutsch
French
Français
Spanish
Español
Japanese
日本語
Korean
한국어
Portuguese
Português
Italian
Italiano