RNCamera 文本识别在人像模式下失败
RNCamera text recognition fails on Portrait mode
我正在使用 react-native-camera 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 设备测试 int
这是 React-native-community 问题 gitHub 页面的 link。
我能够通过修改一些 Java 代码来解决问题。
我注意到它与旋转有关。它正在尝试自下而上阅读文本。
当我将 phone 从纵向旋转到横向时,它仍然会尝试从 phone 的自下而上进行识别,现在是从左到右。
在 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) {
//...
}
不知道旋转是否只适用于部分机型
我正在使用 react-native-camera 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 设备测试 int
这是 React-native-community 问题 gitHub 页面的 link。
我能够通过修改一些 Java 代码来解决问题。 我注意到它与旋转有关。它正在尝试自下而上阅读文本。
当我将 phone 从纵向旋转到横向时,它仍然会尝试从 phone 的自下而上进行识别,现在是从左到右。
在 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) {
//...
}
不知道旋转是否只适用于部分机型