当前位置:首页 > 行业动态 > 正文

安卓图片文字识别代码

通过ML Kit的Vision API实现,需添加依赖并调用Vision.getText()方法处理Bitmap对象,可实时返回图像中的文字内容

环境准备

添加依赖项

build.gradle 文件中添加 ML Kit 依赖:

dependencies {
    implementation 'com.google.mlkit:text-recognition:17.0.3'
}

申请权限

AndroidManifest.xml 中声明读取存储权限:

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

布局设计

创建一个简单的布局文件 activity_main.xml

安卓图片文字识别代码

<LinearLayout orientation="vertical" 
    android:padding="16dp">
    <Button 
        android:id="@+id/btn_select_image"
        android:text="选择图片" />
    <TextView 
        android:id="@+id/tv_result"
        android:textSize="18sp"
        android:paddingTop="20dp"/>
</LinearLayout>

核心代码实现

MainActivity.java 中实现逻辑:

public class MainActivity extends AppCompatActivity {
    private Button btnSelectImage;
    private TextView tvResult;
    private static final int IMAGE_PICK_CODE = 100;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        btnSelectImage = findViewById(R.id.btn_select_image);
        tvResult = findViewById(R.id.tv_result);
        // 动态申请存储权限(Android 6.0+)
        ActivityCompat.requestPermissions(this, 
            new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, 1);
        btnSelectImage.setOnClickListener(v -> {
            Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
            intent.setType("image/");
            startActivityForResult(intent, IMAGE_PICK_CODE);
        });
    }
    @Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == IMAGE_PICK_CODE && resultCode == RESULT_OK) {
            Uri imageUri = data.getData();
            recognizeTextFromImage(imageUri);
        }
    }
    private void recognizeTextFromImage(Uri imageUri) {
        // 获取 Firebase ML Kit 实例
        FirebaseVisionImage firebaseVisionImage;
        try {
            firebaseVisionImage = FirebaseVisionImage.fromFilePath(this, imageUri);
        } catch (IOException e) {
            e.printStackTrace();
            tvResult.setText("图片加载失败");
            return;
        }
        // 创建文本识别器
        FirebaseVisionTextRecognizer detector = FirebaseVision.getInstance().getOnDeviceTextRecognizer();
        // 执行识别任务
        detector.processImage(firebaseVisionImage)
            .addOnSuccessListener(firebaseVisionText -> {
                String resultText = firebaseVisionText.getText();
                tvResult.setText(resultText); // 显示识别结果
            })
            .addOnFailureListener(e -> {
                tvResult.setText("识别失败: " + e.getMessage());
            });
    }
}

方法对比表

方法 优点 缺点
ML Kit OCR 高精度、支持多语言、易集成 依赖网络(在线模式)
Tesseract OCR 完全离线、开源可定制 配置复杂、识别速度较慢
第三方API(如阿里云) 高精度、多语言支持、无需SDK 需付费、存在网络延迟

相关问题与解答

问题1:如何提高文字识别准确率?

解答

安卓图片文字识别代码

  1. 确保图片清晰,文字无遮挡或扭曲
  2. 对图片进行预处理(如灰度化、二值化、降噪)
  3. 使用高质量摄像头拍摄(避免模糊或过曝)
  4. 在 ML Kit 中启用多语言支持:
    FirebaseVisionTextRecognizerOptions options = 
        new FirebaseVisionTextRecognizerOptions.Builder()
            .setLanguages(Arrays.asList("en", "zh")) // 设置多语言
            .build();

问题2:能否实现完全离线的文字识别?

解答

  1. 使用 Tesseract OCR

    安卓图片文字识别代码

    • 添加 Tesseract 依赖(需手动集成训练数据包)
    • 优势:完全离线,支持多语言
    • 劣势:需处理复杂的训练数据和模型文件
  2. ML Kit 离线模式

    • 下载离线模型到设备(需提前配置)
    • 通过 FirebaseVisionTextRecognizer.Builder 指定本地模型路径
    • 注意:仍需少量网络请求初始化