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

安卓做图片识别文字简单代码

java,// 引入ML Kit依赖,implementation 'com.google.mlkit:text-recognition:17.0.3',// 核心代码示例,InputImage image = InputImage.fromBitmap(bitmap, 0);,TextRecognizer recognizer = TextRecognition.getClient();,recognizer.process(image).addOnSuccessListener(text -> { / 处理结果 / });,

环境准备

  1. 开发工具:Android Studio(支持Gradle构建)
  2. 依赖库:使用Google ML Kit的文本识别功能(无需训练模型)
  3. 权限配置:读取外部存储权限

依赖配置

app/build.gradle 中添加ML Kit依赖:

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

同步Gradle后即可使用。

安卓做图片识别文字简单代码


布局设计 (activity_main.xml)

<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:padding="16dp">
    <Button
        android:id="@+id/btn_select_image"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="选择图片" />
    <ImageView
        android:id="@+id/iv_selected_image"
        android:layout_width="match_parent"
        android:layout_height="200dp"
        android:scaleType="fitCenter"
        android:visibility="gone" />
    <TextView
        android:id="@+id/tv_result"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textSize="16sp"
        android:textColor="#000"
        android:paddingTop="16dp" />
</LinearLayout>

权限配置 (AndroidManifest.xml)

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

注意:Android 11及以上需动态申请权限。

安卓做图片识别文字简单代码


核心代码实现 (MainActivity.java)

import android.Manifest;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.graphics.Bitmap;
import android.net.Uri;
import android.os.Bundle;
import android.provider.MediaStore;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import com.google.mlkit.vision.common.ModelDownloadConditions;
import com.google.mlkit.vision.text.TextRecognition;
import com.google.mlkit.vision.text.TextRecognizer;
import com.google.mlkit.vision.text.latin.TextRecognizerOptions;
import java.io.IOException;
public class MainActivity extends AppCompatActivity {
    private static final int IMAGE_PICK_CODE = 100;
    private ImageView ivSelectedImage;
    private TextView tvResult;
    private TextRecognizer textRecognizer;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        // 初始化视图
        ivSelectedImage = findViewById(R.id.iv_selected_image);
        tvResult = findViewById(R.id.tv_result);
        Button btnSelectImage = findViewById(R.id.btn_select_image);
        // 初始化OCR引擎(支持多语言可替换LanguageIdentifier)
        textRecognizer = TextRecognition.getClient(TextRecognizerOptions.DEFAULT_OPTIONS);
        // 检查存储权限
        if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
            ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, 100);
        }
        // 绑定事件
        btnSelectImage.setOnClickListener(v -> openImagePicker());
    }
    // 打开系统相册选择图片
    private void openImagePicker() {
        Intent intent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
        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 && data != null) {
            Uri imageUri = data.getData();
            try {
                // 加载图片并显示
                Bitmap bitmap = MediaStore.Images.Media.getBitmap(this.getContentResolver(), imageUri);
                ivSelectedImage.setImageBitmap(bitmap);
                ivSelectedImage.setVisibility(View.VISIBLE);
                // 执行文字识别
                recognizeTextFromImage(bitmap);
            } catch (IOException e) {
                e.printStackTrace();
                Toast.makeText(this, "图片加载失败", Toast.LENGTH_SHORT).show();
            }
        }
    }
    // 使用ML Kit进行文字识别
    private void recognizeTextFromImage(Bitmap bitmap) {
        textRecognizer.processImage(bitmap)
                .addOnSuccessListener(visionText -> {
                    // 拼接识别结果
                    StringBuilder result = new StringBuilder();
                    for (com.google.mlkit.vision.text.Text.Element element : visionText.getTextBlocks()) {
                        result.append(element.getText()).append("
");
                    }
                    tvResult.setText(result.toString());
                })
                .addOnFailureListener(e -> {
                    Toast.makeText(this, "识别失败: " + e.getMessage(), Toast.LENGTH_LONG).show();
                });
    }
}

运行效果说明

  1. 点击「选择图片」按钮,从相册中选择包含文字的图片。
  2. 图片显示在 ImageView 中,下方 TextView 展示识别结果。
  3. 支持中英文混合、多行文本识别。

注意事项

问题 解决方案
首次使用ML Kit需下载模型 自动完成,需保证网络畅通
Android 11+存储权限限制 使用 MediaStoreStorage Access Framework
大分辨率图片可能导致内存溢出 对图片进行压缩处理
复杂背景或模糊文字识别率低 优化图片质量或预处理(如灰度化)

相关问题与解答

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

解答

  1. 确保图片清晰,文字无遮挡或扭曲。
  2. 对图片进行预处理(如灰度化、二值化)。
  3. 使用 TextRecognizerOptions 配置语言模型(如指定中文):
    TextRecognizerOptions options = new TextRecognizerOptions.Builder()
        .setLanguagePreference(TextRecognizerOptions.SUPPORTED_LANGUAGES[1]) // 中文为索引1
        .build();
    textRecognizer = TextRecognition.getClient(options);

问题2:如何实时拍摄照片并识别文字?

解答

安卓做图片识别文字简单代码

  1. 使用 CameraXIntent 调用系统相机。
  2. 获取拍照后的 Bitmap 直接传入 recognizeTextFromImage()
  3. 关键代码修改:
    // 启动相机Intent
    Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    startActivityForResult(takePictureIntent, CAMERA_REQUEST_CODE);