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

开发基于React Native Vision Camera的Expo模块遇崩溃问题求助

Expo模块集成Vision Camera帧处理器崩溃问题

我要开发一个Expo模块,实现自定义的React Native Vision Camera帧处理功能,类似现有插件的作用,但目前相关插件都不是用Expo模块开发的,也没有参考文档。

当我在模块里声明接收Vision Camera帧的函数时,应用会无提示崩溃,我推测是帧处理器插件注册有问题,但解决不了。

当前代码

MlkitTextRecognitionModule

class MlkitTextRecognitionModule : Module() {
  companion object {
    init {
      FrameProcessorPluginRegistry.addFrameProcessorPlugin("recognizeTextFromFrame") { proxy, options ->
        MlkitTextRecognitionFrameProcessor(proxy, options)
      }
    }
  }

  override fun definition() = ModuleDefinition {

    Name("MlkitTextRecognition")

    Constants(
      "PI" to Math.PI
    )
    Events("onChange")

    Function("recognizeTextFromUri") { uri: String ->
      val file = File(uri)
      if (!file.exists()) {
        throw Exception("File not found at: $uri")
      }

      val bitmap = BitmapFactory.decodeFile(file.absolutePath)
      val inputImage = InputImage.fromBitmap(bitmap, 0)

      val recognizer = TextRecognition.getClient(JapaneseTextRecognizerOptions.Builder().build())
      val visionText = try {
        Tasks.await(recognizer.process(inputImage))
      } catch (e: Exception) {
        throw Exception("Text recognition failed: ${e.message}")
      }

      visionText.text
    }

// 取消注释这段就会崩溃
//    Function("recognizeTextFromFrame") { frame: Frame ->
//
//    }
}

MlkitTextRecognitionFrameProcessor

class MlkitTextRecognitionFrameProcessor(proxy: VisionCameraProxy, options: Map<String, Any>?): FrameProcessorPlugin() {
    override fun callback(frame: Frame, arguments: Map<String, Any>?): Any? {
        return "hello"
    }
}

问题原因与解决办法

  1. 重复绑定冲突
    你犯了核心错误:既通过FrameProcessorPluginRegistry注册了帧处理器插件,又试图在Expo模块的ModuleDefinition里用Function声明同名的recognizeTextFromFrame函数。这会导致Native层和JS层的绑定逻辑冲突,直接触发无提示崩溃。

Vision Camera的帧处理器插件机制已经完成了JS与Native的绑定,不需要再在Expo模块里额外声明同名函数。

  1. 修正步骤
  • 直接删除ModuleDefinition中那段注释的Function("recognizeTextFromFrame")代码块,保留FrameProcessorPluginRegistry的注册逻辑即可。
  • 确保项目中正确引入了Vision Camera的Native依赖,编译时没有缺失VisionCameraProxy、Frame等核心类。
  • JS层调用示例:
    import { useFrameProcessor } from 'react-native-vision-camera';
    import { recognizeTextFromFrame } from './your-expo-module';
    
    const frameProcessor = useFrameProcessor((frame) => {
      const result = recognizeTextFromFrame(frame);
      console.log('识别结果:', result);
    }, []);
    
  1. 额外注意事项
  • 帧处理器的callback方法运行在Vision Camera的专用帧处理线程,不要在这里执行同步的耗时操作(比如ML Kit的文本识别),建议把识别逻辑放到后台线程执行,避免阻塞帧流导致应用卡顿或崩溃。
  • 测试时可以先让callback返回简单字符串验证功能正常,再逐步集成ML Kit的识别逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 09:25:19