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

React Native实现图片OCR提取阀门序列号遇iOS编译错误求助

React Native iOS端OCR库编译失败问题

问题描述

在React Native项目中做OCR提取图片里的阀门序列号,测试了两个文本检测库,Android端运行正常,但iOS端编译时失败,报错信息如下:

CompileC /Users/Macbook/Library/Developer/Xcode/DerivedData/CRANE-ciqqhizauxjmlaevomkjkiypelyu/Build/Intermediates.noindex/Pods.build/Debug-iphonesimulator/RNTextDetector.build/Objects-normal/x86_64/RNTextDetector.o /Users/Macbook/Documents/GitHub/crane-app/CRANE/node_modules/rn-text-detector/ios/RNTextDetector.m normal x86_64 objective-c com.apple.compilers.llvm.clang.1_0.compiler (in target 'RNTextDetector' from project 'Pods')
(1 failure)

使用代码

import RNTextDetector from "rn-text-detector";

const captureImage = async type => {
    let options = {
      mediaType: type,
      maxWidth: 300,
      maxHeight: 550,
      quality: 1,
      videoQuality: 'low',
      durationLimit: 30, //视频最长录制时长(秒)
      saveToPhotos: true,
    };
    let isCameraPermitted = await requestCameraPermission();
    let isStoragePermitted = await requestExternalWritePermission();
    if (isCameraPermitted && isStoragePermitted) {
      launchCamera(options, response => {
        console.log('Response = ', response);

        if (response.didCancel) {
          alert('用户取消了相机选择');
          return;
        } else if (response.errorCode == 'camera_unavailable') {
          alert('设备相机不可用');
          return;
        } else if (response.errorCode == 'permission') {
          alert('权限未获取');
          return;
        } else if (response.errorCode == 'others') {
          alert(response.errorMessage);
          return;
        }
        console.log('base64 -> ', response.assets[0].base64);
        console.log('uri -> ', response.assets[0].uri);
        console.log('width -> ', response.assets[0].width);
        console.log('height -> ', response.assets[0].height);
        console.log('fileSize -> ', response.assets[0].fileSize);
        console.log('type -> ', response.assets[0].type);
        console.log('fileName -> ', response.assets[0].fileName);
        setFilePath(response.assets[0].uri);

        (async () => {
          const textRecognition = await RNTextDetector.detectFromUri(response.assets[0].uri);
          console.log('识别结果', textRecognition);
          setSerialNumber(textRecognition[0].text)
        })();

        RNFS.readFile(response.assets[0].uri, "base64").then(result => {
          setImage('data:/' + response.assets[0].type + ';' + 'base64,' + result)
          setScreenData({ ...screenData, image1: 'data:/' + response.assets[0].type + ';' + 'base64,' + result });
        })
      });
    }
};

目标识别图片

阀门序列号示例图片

解决建议

1. 清理iOS依赖并重新安装

进入项目的ios目录,执行以下命令:

pod deintegrate
rm -rf Podfile.lock
pod install

之后重启Xcode,清理项目(Command + Shift + K)再重新编译。

2. 检查Xcode编译配置

  • 打开Xcode,找到Pods项目下的RNTextDetector target,查看Build Settings中的Deployment Target,确保设置为iOS 11.0或更高(苹果Vision框架最低要求iOS 11)。
  • 检查Build Phases -> Link Binary With Libraries,确认已添加Vision.framework(若未添加,点击+手动添加)。

3. 验证库版本兼容性

确认使用的rn-text-detector库版本与当前React Native版本、Xcode版本兼容。如果使用的是旧版本库,尝试升级到最新版,或者降级到适配当前环境的版本。

4. 替换为维护更活跃的OCR库

如果上述方法无效,可以考虑替换为更稳定的OCR方案:

  • 使用react-native-vision-camera配合vision-camera-ocr插件,基于苹果Vision框架实现,兼容性更好。
  • 若项目基于Expo,可使用expo-image-picker配合expo-ocr,配置更简单。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 04:35:25