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

安卓图片识别文字源码

安卓图片文字识别可借助ML Kit实现,核心代码为:添加 implementation 'com.google.ml:text-recognition:17.0.3',通过 TextRecognizer处理Bitmap,调用 processImage()获取文字结果

技术选型与依赖配置

项目 说明
OCR引擎 Google ML Kit(支持多语言、高精度、免费)
依赖配置 build.gradle 中添加:
“`gradle
implementation ‘com.google.mlkit:text-recognition:17.0.3’
“`
权限配置 AndroidManifest.xml 中声明读取存储权限:
“`xml
“`

核心功能实现步骤

布局文件设计

<LinearLayout
    android:orientation="vertical"
    android:padding="16dp">
    <Button
        android:id="@+id/btn_select_image"
        android:text="选择图片"/>
    <ImageView
        android:id="@+id/image_view"
        android:layout_width="match_parent"
        android:layout_height="200dp"
        android:scaleType="fitCenter"/>
    <TextView
        android:id="@+id/tv_result"
        android:text="识别结果"
        android:textSize="16sp"
        android:paddingTop="16dp"/>
</LinearLayout>

图片选择与预处理

// 调用系统相册选择图片
btn_select_image.setOnClickListener {
    val intent = Intent(Intent.ACTION_GET_CONTENT).apply {
        type = "image/"
    }
    startActivityForResult(intent, IMAGE_PICK_CODE)
}
// 处理选中的图片
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
    if (requestCode == IMAGE_PICK_CODE && resultCode == RESULT_OK) {
        val uri = data?.data ?: return
        // 通过URI获取Bitmap对象
        val bitmap = MediaStore.Images.Media.getBitmap(contentResolver, uri)
        image_view.setImageBitmap(bitmap)
        // 调用OCR识别
        recognizeText(bitmap)
    }
}

OCR文字识别逻辑

private fun recognizeText(bitmap: Bitmap) {
    val recognizer = TextRecognizer.getClient()
    val inputImage = InputImage.fromBitmap(bitmap, 0) // 0为图片旋转角度
    recognizer.process(inputImage)
        .addOnSuccessListener { visionText ->
            // 拼接识别结果
            val result = visionText.text.trim()
            tv_result.text = result
        }
        .addOnFailureListener { e ->
            Toast.makeText(this, "识别失败: ${e.message}", Toast.LENGTH_SHORT).show()
        }
}

关键参数与优化方案

功能点 说明
多语言支持 默认支持中英文,可通过 TextRecognizer.Builder().setLanguagePreference() 指定语言
图片质量优化 对低分辨率图片进行缩放(推荐宽度不超过1024像素)
异步处理优化 使用 addOnSuccessListener 避免阻塞主线程
离线识别 ML Kit 需联网,若需离线可集成 Tesseract OCR(需额外配置训练数据)

完整代码结构示例

class MainActivity : AppCompatActivity() {
    private val IMAGE_PICK_CODE = 1001
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        // 动态申请存储权限(Android 10+)
        if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
            ActivityCompat.requestPermissions(this, arrayOf(Manifest.permission.READ_EXTERNAL_STORAGE), 1)
        }
        // 绑定按钮事件(见第二步)
    }
    // 其他函数(见第二、三步)
}

相关问题与解答

问题1:如何提高复杂背景下的文字识别准确率?

解答

安卓图片识别文字源码

  1. 对图片进行灰度化、二值化等预处理(如使用OpenCV);
  2. 调整ML Kit的 TextRecognizer 参数,启用 CloudModel(需网络):
    val options = TextRecognizerOptions.builder()
        .setConfidenceThreshold(0.5f) // 置信度阈值
        .setExecutor(Executors.newSingleThreadExecutor()) // 自定义线程池
        .build()
    val recognizer = TextRecognizer.getClient(options)

问题2:ML Kit是否支持实时摄像头文字识别?

解答
支持,需结合 CameraXCamera2 API 实时获取帧图像,示例流程:

安卓图片识别文字源码

  1. 通过 ImageAnalysis 采集摄像头画面;
  2. 将每帧图像转换为 InputImage
  3. 调用 recognizer.process(inputImage) 输出实时文字