Ошибка распознавания текста RNCamera в портретном режиме

Я разрабатываю приложение, используя реагирующую камеру, RNCamera, в режиме извлечения.

Кстати, функция распознавания текста должна работать только для Android.

В портретном режиме он обнаруживает только одиночные или двойные символы в каждом событии обнаружения, например «O», «IC».

Когда я поворачиваюсь в ландшафтный режим, он работает отлично.

Вот как я обрабатываю событие и визуализирую его:

onTextRecognized = ({textBlocks}) => this.setState({ detectedTexts: textBlocks.map(b => b.value) })

renderDetectedText() {
    return (
      <View style={[styles.facesContainer,{left: 10, top:"50%"}]}>
        <Text style={styles.flipText}>{this.state.detectedTexts.join("\n")}</Text>
      </View>
    )
  }
renderCamera() {
<RNCamera
  ref={ref => {this.camera = ref;}}
  style={{flex: 1}}
  type={this.state.type}
  flashMode={this.state.flash}
  autoFocus={this.state.autoFocus}
  zoom={this.state.zoom}
  whiteBalance={this.state.whiteBalance}
  ratio={this.state.ratio}
  onTextRecognized={this.onTextRecognized}
  focusDepth={this.state.depth}
  permissionDialogTitle={'Permission to use camera'}
  permissionDialogMessage={'We need your permission to use your camera phone'}>
  {this.renderDetectedText()}
</RNCamera>
}

Я тестирую на реальном устройстве Android 7.0.

Вот ссылка для сообщества React-native-community Выпустить страницу gitHub.


person diogenesgg    schedule 01.08.2018    source источник


Ответы (1)


Мне удалось решить проблему, изменив некоторый код Java. Я заметил, что это связано с вращением. Он пытался читать текст снизу вверх.

Когда я поворачивал телефон из книжной в альбомную, он все равно пытался распознавать телефон снизу вверх, а теперь слева направо.

В org.reactnative.camera.RNCameraView (находится на node_modules/react-native-camera/android/src) я изменил метод onFramePreview, чтобы удалить следующий код (закомментирован):

  @Override
  public void onFramePreview(CameraView cameraView, byte[] data, int width, int height, int rotation) {
    int correctRotation = RNCameraViewHelper.getCorrectCameraRotation(rotation, getFacing());
    int correctWidth = width;
    int correctHeight = height;
    byte[] correctData = data;
    //if (correctRotation == 90) {
    //  correctWidth = height;
    //  correctHeight = width;
    //  correctData = rotateImage(data, correctHeight, correctWidth);
    //}
    if (mShouldScanBarCodes && !barCodeScannerTaskLock && cameraView instanceof BarCodeScannerAsyncTaskDelegate) {
    //...
  }

Интересно, подходит ли поворот только для некоторых моделей устройств.

person diogenesgg    schedule 02.08.2018
comment
Хм, может быть, это вращение является исправлением для других функций камеры, таких как распознавание лиц. - person diogenesgg; 02.08.2018
comment
У меня возникает аналогичная проблема: когда изображение поворачивается, камера не распознает текст в Android и iOS. Я проверил org.reactnative.camera.RNCameraView, но там нет строк кода, которые вы упомянули в onFramePreview. Как я могу заархивировать это? - person DevLover; 14.02.2020
comment
С тех пор реактивная камера сильно изменилась. Я бы посоветовал вам опубликовать новый вопрос, а также поделиться им на странице проблем GitHub для react-native-camera. - person diogenesgg; 14.02.2020