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

如何在Expo中集成OCR?尝试相关库失败求解决方案

Expo 中集成 OCR 的可行方案

在Expo Managed项目中,react-native-tesseract、react-native-text-detector这类依赖原生模块的库无法直接在Expo Go中使用(需要原生链接,而Expo Go不支持自定义原生模块)。以下是两种经过验证的可行集成方案:

方案一:使用 Expo Vision(推荐,无需预构建)

Expo Vision是官方维护的视觉工具库,其中的文本识别功能无需额外原生配置,直接兼容Expo Go。

1. 安装依赖

npx expo install expo-vision expo-image-manipulator

2. 配置权限

在app.json或app.config.js中添加相机和媒体库权限:

{
  "expo": {
    "ios": {
      "infoPlist": {
        "NSCameraUsageDescription": "需要使用相机拍摄文本进行识别",
        "NSPhotoLibraryUsageDescription": "需要访问相册选择图片进行识别"
      }
    },
    "android": {
      "permissions": [
        "android.permission.CAMERA",
        "android.permission.READ_MEDIA_IMAGES"
      ]
    }
  }
}

3. 实现 runOcr 函数

替换你的空runOcr函数,添加文本识别逻辑:

import { TextRecognizer } from 'expo-vision';
import { manipulateAsync, SaveFormat } from 'expo-image-manipulator';

// ...

runOcr = async (imageUri) => {
  try {
    // 可选:压缩并调整图片尺寸,提升识别速度与准确率
    const processedImage = await manipulateAsync(
      imageUri,
      [{ resize: { width: 600 } }],
      { compress: 0.7, format: SaveFormat.JPEG }
    );

    // 执行文本识别
    const recognitionResult = await TextRecognizer.recognizeAsync(processedImage.uri);
    
    // 拼接所有识别到的文本块
    const recognizedText = recognitionResult.blocks.map(block => block.text).join('\n');
    console.log('OCR识别结果:', recognizedText);
    
    // 将结果存入组件state(根据你的需求处理)
    this.setState({ ocrResult: recognizedText });
  } catch (error) {
    console.error('OCR识别失败:', error);
  }
};

4. 额外优化建议

  • 识别过程中添加loading状态提示,提升用户体验
  • 引导用户拍摄清晰、光线充足的文本区域,可显著提升准确率

方案二:使用 @react-native-ml-kit/text-recognition(需预构建)

如果你需要更高的识别准确率,可以使用Google ML Kit的文本识别库,但需要将Expo项目转为预构建模式(支持自定义原生模块)。

1. 安装依赖并预构建

npx expo install @react-native-ml-kit/text-recognition
npx expo prebuild

2. 配置权限(同方案一)

3. 实现 runOcr 函数

import TextRecognition from '@react-native-ml-kit/text-recognition';

// ...

runOcr = async (imageUri) => {
  try {
    // ML Kit直接支持Expo相机返回的本地URI
    const recognitionResult = await TextRecognition.recognize(imageUri);
    const recognizedText = recognitionResult.text;
    console.log('OCR识别结果:', recognizedText);
    
    this.setState({ ocrResult: recognizedText });
  } catch (error) {
    console.error('OCR识别失败:', error);
  }
};

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 18:01:29