You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在React Native应用中使用Python脚本实现离线语音识别及手机控制?

解决方案:React Native整合Vosk离线语音识别(完全离线)

核心思路

无需搭建独立Python服务器,直接在React Native应用中集成Vosk的移动端原生能力,通过社区封装的库或自定义原生桥接,在设备本地完成离线语音识别,同时用React Native处理所有手机控制逻辑。

步骤1:选用React Native Vosk封装库

优先使用维护活跃的社区封装库react-native-vosk,它已完成Vosk Android/iOS SDK的桥接,可直接实现离线识别功能。

安装与基础配置

  1. 安装库:
npm install react-native-vosk --save
# 或使用yarn
yarn add react-native-vosk
  1. React Native 0.60+版本会自动完成原生依赖链接,低版本需手动执行链接操作
  2. 准备离线模型:
    • 下载对应语言的Vosk离线模型(如中文小模型vosk-model-small-cn-0.22)
    • 将模型文件夹放入Android项目的android/app/src/main/assets目录,以及iOS项目的ios/Resources目录

步骤2:实现离线语音识别与控制逻辑

在React Native组件中初始化Vosk、加载本地模型,并处理语音识别结果触发手机控制操作:

import React, { useState, useEffect } from 'react';
import { View, Button, Text, Alert } from 'react-native';
import Vosk from 'react-native-vosk';

const VoiceControlScreen = () => {
  const [transcript, setTranscript] = useState('');
  const [isListening, setIsListening] = useState(false);

  useEffect(() => {
    // 初始化Vosk并加载本地模型
    const initVosk = async () => {
      try {
        // Android用'model'对应assets中的模型文件夹;iOS直接填模型文件夹名称
        await Vosk.initialize('model');
      } catch (err) {
        Alert.alert('初始化失败', err.message);
      }
    };

    initVosk();

    return () => Vosk.destroy(); // 组件卸载时清理Vosk实例
  }, []);

  const toggleListening = () => {
    if (isListening) {
      Vosk.stopListening();
      setIsListening(false);
    } else {
      setIsListening(true);
      Vosk.startListening({
        onResult: (res) => setTranscript(res.text),
        onFinalResult: (finalRes) => {
          setTranscript(finalRes.text);
          setIsListening(false);
          // 处理识别出的语音指令
          executeCommand(finalRes.text);
        },
        onError: (err) => {
          Alert.alert('识别出错', err.message);
          setIsListening(false);
        }
      });
    }
  };

  const executeCommand = (command) => {
    // 这里编写手机控制逻辑,比如打开应用、调整系统设置等
    if (command.includes('打开相机')) {
      // 调用React Native原生API或第三方相机库执行操作
      console.log('执行打开相机操作');
    } else if (command.includes('调低音量')) {
      // 调用系统音量控制API
      console.log('执行调低音量操作');
    } else if (command.includes('返回主页')) {
      // 调用返回主页的原生逻辑
      console.log('执行返回主页操作');
    }
  };

  return (
    <View style={{ flex: 1, justifyContent: 'center', alignItems: 'center', padding: 20 }}>
      <Text style={{ fontSize: 18, marginBottom: 30, textAlign: 'center' }}>
        识别结果:{transcript || '等待语音输入...'}
      </Text>
      <Button
        title={isListening ? '停止识别' : '开始语音指令'}
        onPress={toggleListening}
        color={isListening ? '#ff4444' : '#2196f3'}
      />
    </View>
  );
};

export default VoiceControlScreen;

步骤3:平台专属配置

Android端

  1. 在AndroidManifest.xml添加权限:
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
  1. 在android/build.gradle中配置NDK支持:
android {
  defaultConfig {
    ndk {
      abiFilters 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64'
    }
  }
}

iOS端

  1. 在Info.plist添加权限描述:
<key>NSSpeechRecognitionUsageDescription</key>
<string>需要使用麦克风进行离线语音识别</string>
<key>NSMicrophoneUsageDescription</key>
<string>需要访问麦克风采集语音指令</string>
  1. 将模型文件夹添加到Xcode项目,勾选"Copy items if needed"并关联到目标APP

替代方案:自定义原生桥接

如果需要高度定制化功能,可自行编写React Native原生模块:

  • Android:引入Vosk Android依赖,编写Java/Kotlin模块暴露识别接口给React Native
  • iOS:通过CocoaPods引入Vosk iOS SDK,编写Objective-C/Swift模块封装识别逻辑

此方案工作量较大,仅适合有原生开发经验的场景。

关键注意事项

  • 模型文件体积较大,可选择小体积模型平衡识别速度与精度,或在APP首次启动时引导用户下载
  • 测试时需断开网络,验证离线识别功能是否正常
  • 针对低性能设备,建议优化模型加载逻辑,避免启动卡顿

内容的提问来源于stack exchange,提问作者theaniketpatil

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 23:41:11