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) } }
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) } // 绑定按钮事件(见第二步) } // 其他函数(见第二、三步) }
解答:
TextRecognizer
参数,启用 CloudModel
(需网络): val options = TextRecognizerOptions.builder() .setConfidenceThreshold(0.5f) // 置信度阈值 .setExecutor(Executors.newSingleThreadExecutor()) // 自定义线程池 .build() val recognizer = TextRecognizer.getClient(options)
解答:
支持,需结合 CameraX
或 Camera2
API 实时获取帧图像,示例流程:
ImageAnalysis
采集摄像头画面; InputImage
; recognizer.process(inputImage)
输出实时文字