安卓使用相机拍照识别文字,使用机器学习套件识别图片中的文本
使用google, mlkit库图片文字识别
·
1. AndroidManifest.xml添加权限
<uses-permission android:name="android.permission.CAMERA"/>
2.申请权限
private fun requestPermission() {
if (ContextCompat.checkSelfPermission(baseContext, Manifest.permission.CAMERA)
!= PackageManager.PERMISSION_GRANTED
) {
if (shouldShowRequestPermissionRationale(Manifest.permission.CAMERA)) {
} else {
requestPermissions(
arrayOf(Manifest.permission.CAMERA),
MY_PERMISSIONS_REQUEST_CALL_CAMERA
)
}
} else {
openCamera()
}
}
3.打开相机
private var photoFile: File? = null
private var photoURI: Uri? = null
private var myPhotoFile: File? = null
private fun openCamera() {
val takePictureIntent = Intent(MediaStore.ACTION_IMAGE_CAPTURE)
if (takePictureIntent.resolveActivity(packageManager) != null) {
photoFile = try {
createImageFile()
} catch (ex: IOException) {
// 错误处理
null
}
// 继续只有在photoFile不为null的情况下
photoFile?.let {
photoURI = FileProvider.getUriForFile(
baseContext,
"com.qqqa.kdfdj.fileprovider",
it
)
takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, photoURI)
startActivityForResult(takePictureIntent, MY_PERMISSIONS_REQUEST_CALL_CAMERA)
}
}
}
private fun createImageFile(): File {
// 创建一个存储图片的Image文件
val timeStamp: String = SimpleDateFormat("yyyyMMdd_HHmmss").format(Date())
val imageFileName: String = "JPEG_" + timeStamp + "_"
val storageDir: File? = getExternalFilesDir(Environment.DIRECTORY_PICTURES)
return File.createTempFile(
imageFileName, /* 前缀 */
".jpg", /* 后缀 */
storageDir /* 文件夹 */
).apply {
myPhotoFile = this
}
}
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
if (requestCode == MY_PERMISSIONS_REQUEST_CALL_CAMERA && resultCode == RESULT_OK) {
myPhotoFile?.let {
recognizeTextFromImage(this, it) { result ->
// 处理识别结果
runOnUiThread {
binding.etTitleDesc.text = result
}
}
}
} else if (requestCode == REQUEST_IMAGE_PICK && resultCode == RESULT_OK && data != null && data.data != null) {
val imageUri = data.data
if (imageUri != null) {
//recognizeTextFromImage(baseContext,imageUri)
}
}
}
4.处理返回文字
private fun recognizeTextFromImage(context: Context, imageUri: File, callback: (String) -> Unit) {
val bitmap = BitmapFactory.decodeFile(imageUri.toString())
val image = InputImage.fromBitmap(bitmap, 0)
val recognizer = TextRecognition.getClient(ChineseTextRecognizerOptions.Builder().build())
recognizer.process(image)
.addOnSuccessListener { visionText ->
val text = visionText.text
callback(text)
}
.addOnFailureListener { e ->
callback("Error: $e")
}
// recognizer.close()
}
更多推荐
所有评论(0)