Android 开发 OCR 照相 + ML Kit 辨认文字 巨具体全部代码教程
效果图[*]流程:点击照相,调取设备相机照相,获取图片显示到页面,提取照片内的文字
https://i-blog.csdnimg.cn/blog_migrate/7fa190decbbd3d6a252b382a03657d80.png
一、OCR的含义
ocr是Optical Character Recognition(光学字符辨认)是指电子设备(比方扫描仪或数码相机)检查纸上打印的字符,通过检测暗、亮的模式确定其外形,然后用字符辨认方法将外形翻译成盘算机文字的过程
二、什么是ML Kit
[*]官网奉上
ML Kit是一个由Google开发的跨平台移动SDK(Android和iOS)。它带来了谷歌的端上呆板学习本领。
ML Kit全部在端上运行的API允许实时和离线功能。这也意味着这些功能在离线模式下也可用。
ML Kit可以辨认超过100种语言的文本,包罗原生拼写及罗马转写系统,好比汉语、俄语、印地语、英语、希腊语等。点击查看支持语言的完整列表
三、官网步骤教程
[*]本文跟着官网教程走,如下图:
https://i-blog.csdnimg.cn/blog_migrate/d5cfd37d8642b0464413d402097aa06f.png
1、添加依靠
留意此 API 需要 Android API 级别 21 或更高版本。确保应用的 build file 使用值 21 或更高。minSdkVersion
[*]在项目级文件中,请确保在 your 和 sections 中都包罗 Google 的Maven 存储库。build.gradlebuildscriptallprojects
[*]将 ML Kit Android 库的依靠项添加到模块的应用级 gradle 文件,该文件通常为:app/build.gradle
本文讲的是中文辨认,以是只导入了中文依靠包,你可以根据自己所需选择导入的依靠包
// To recognize Chinese script
implementation 'com.google.mlkit:text-recognition-chinese:16.0.0'
https://i-blog.csdnimg.cn/blog_migrate/1702282cfd804d71250409b5f2ddc11d.png
2、创建TextRecognizer
因为本文是中文,以是使用的中文脚本库
ChineseTextRecognizerOptions build = new ChineseTextRecognizerOptions.Builder().build();
TextRecognizer recognizer = TextRecognition.getClient(build);
https://i-blog.csdnimg.cn/blog_migrate/8fd2cf44a2bc7b7b68544bcc7717cd90.png
3、输入图像
图像来源有:
[*]使用media.Image
[*]使用文件 URI
[*]使用 或ByteBufferByteArray
[*]使用Bitmap
本文用的是使用Bitmap,如下图
InputImage image = InputImage.fromBitmap(bitmap, 0);
https://i-blog.csdnimg.cn/blog_migrate/68223e95f27fbfff40e63af498f71c44.png
4、处理图像
将图像传递给方法:process
recognizer.process(image)
.addOnSuccessListener(new OnSuccessListener<Text>() {
@Override
public void onSuccess(Text visionText) {
// Task completed successfully
// ...
}
})
.addOnFailureListener(
new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
// Task failed with an exception
// ...
}
});
https://i-blog.csdnimg.cn/blog_migrate/5eecdaa39c9c5074a075732f1d9e6a08.png
四、实际代码案例Demo如下:
别忘了导入依靠包!!!
1、Main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity">
<Button
android:id="@+id/btn"
android:text="拍照"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<ImageView
android:id="@+id/image"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<TextView
android:id="@+id/tv_result"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</LinearLayout>
1、Main.java
package com.example.mlkitapplication;import androidx.annotation.NonNull;import androidx.appcompat.app.AppCompatActivity;import androidx.core.app.ActivityCompat;import androidx.core.content.ContextCompat;import android.Manifest;import android.annotation.SuppressLint;import android.content.Intent;import android.content.pm.PackageManager;import android.graphics.Bitmap;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 com.google.android.gms.tasks.OnFailureListener;import com.google.android.gms.tasks.OnSuccessListener;import com.google.mlkit.vision.common.InputImage;import com.google.mlkit.vision.text.Text;import com.google.mlkit.vision.text.TextRecognition;import com.google.mlkit.vision.text.TextRecognizer;import com.google.mlkit.vision.text.chinese.ChineseTextRecognizerOptions;public class MainActivity extends AppCompatActivity { private static final int REQUEST_CAMERA_PERMISSION = 1; private static final int REQUEST_IMAGE_CAPTURE = 1; private TextView tv_result; private ImageView image; @SuppressLint("MissingInflatedId") @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); tv_result=findViewById(R.id.tv_result); image=findViewById(R.id.image); //权限检查 requestCameraPermission(); @SuppressLint({"MissingInflatedId", "LocalSuppress"}) Button btn=findViewById(R.id.btn); btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { dispatchTakePictureIntent();//调本地相机 } }); } private void dispatchTakePictureIntent() { Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); if (takePictureIntent.resolveActivity(getPackageManager()) != null) { startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE); } } private void requestCameraPermission() { if (ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) { ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CAMERA}, REQUEST_CAMERA_PERMISSION); } } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == RESULT_OK) { Bundle extras = data.getExtras(); Bitmap imageBitmap = (Bitmap) extras.get("data"); image.setImageBitmap(imageBitmap); // 在这里使用imageBitmap举行文字辨认 recognizeTextFromBitmap(imageBitmap); } } private void recognizeTextFromBitmap(Bitmap bitmap) { InputImage image = InputImage.fromBitmap(bitmap, 0);
ChineseTextRecognizerOptions build = new ChineseTextRecognizerOptions.Builder().build(); TextRecognizer recognizer = TextRecognition.getClient(build); recognizer.process(image) .addOnSuccessListener(new OnSuccessListener<Text>() { @Override public void onSuccess(com.google.mlkit.vision.text.Text text) { String text1 = text.getText(); tv_result.setText(text1); recognizer.close(); } }) .addOnFailureListener(new OnFailureListener() { @Override public void onFailure(@NonNull Exception e) { // 处理错误 e.printStackTrace(); // 释放资源 recognizer.close(); } }); }}
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页:
[1]