在 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 | 需付费、存在网络延迟 |
解答:
FirebaseVisionTextRecognizerOptions options = new FirebaseVisionTextRecognizerOptions.Builder() .setLanguages(Arrays.asList("en", "zh")) // 设置多语言 .build();
解答:
使用 Tesseract OCR:
ML Kit 离线模式:
FirebaseVisionTextRecognizer.Builder
指定本地模型路径