Android 开发 OCR 照相 + ML Kit 辨认文字 巨具体全部代码教程 ...

打印 上一主题 下一主题

主题 525|帖子 525|积分 1575

效果图



  • 流程:点击照相,调取设备相机照相,获取图片显示到页面,提取照片内的文字

一、OCR的含义

   ocr是Optical Character Recognition(光学字符辨认)是指电子设备(比方扫描仪或数码相机)检查纸上打印的字符,通过检测暗、亮的模式确定其外形,然后用字符辨认方法将外形翻译成盘算机文字的过程
  二、什么是ML Kit



  • 官网奉上
   ML Kit是一个由Google开发的跨平台移动SDK(Android和iOS)。它带来了谷歌的端上呆板学习本领。
ML Kit全部在端上运行的API允许实时和离线功能。这也意味着这些功能在离线模式下也可用。
  ML Kit可以辨认超过100种语言的文本,包罗原生拼写及罗马转写系统,好比汉语、俄语、印地语、英语、希腊语等。点击查看支持语言的完整列表
三、官网步骤教程



  • 本文跟着官网教程走,如下图:

1、添加依靠

   留意此 API 需要 Android API 级别 21 或更高版本。确保应用的 build file 使用值 21 或更高。minSdkVersion
  

  • 在项目级文件中,请确保在 your 和 sections 中都包罗 Google 的Maven 存储库。build.gradlebuildscriptallprojects
  • 将 ML Kit Android 库的依靠项添加到模块的应用级 gradle 文件,该文件通常为:app/build.gradle
本文讲的是中文辨认,以是只导入了中文依靠包,你可以根据自己所需选择导入的依靠包
  1. // To recognize Chinese script
  2.   implementation 'com.google.mlkit:text-recognition-chinese:16.0.0'
复制代码

2、创建TextRecognizer

因为本文是中文,以是使用的中文脚本库
  1. ChineseTextRecognizerOptions build = new ChineseTextRecognizerOptions.Builder().build();
  2. TextRecognizer recognizer = TextRecognition.getClient(build);
复制代码

3、输入图像

图像来源有:


  • 使用media.Image
  • 使用文件 URI
  • 使用 或ByteBufferByteArray
  • 使用Bitmap
本文用的是使用Bitmap,如下图
  1. InputImage image = InputImage.fromBitmap(bitmap, 0);
复制代码

4、处理图像

将图像传递给方法:process
  1. recognizer.process(image)
  2.                 .addOnSuccessListener(new OnSuccessListener<Text>() {
  3.                     @Override
  4.                     public void onSuccess(Text visionText) {
  5.                         // Task completed successfully
  6.                         // ...
  7.                     }
  8.                 })
  9.                 .addOnFailureListener(
  10.                         new OnFailureListener() {
  11.                             @Override
  12.                             public void onFailure(@NonNull Exception e) {
  13.                                 // Task failed with an exception
  14.                                 // ...
  15.                             }
  16.                         });
复制代码

四、实际代码案例Demo如下:

别忘了导入依靠包!!!
1、Main.xml

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3.     xmlns:app="http://schemas.android.com/apk/res-auto"
  4.     xmlns:tools="http://schemas.android.com/tools"
  5.     android:layout_width="match_parent"
  6.     android:layout_height="match_parent"
  7.     android:orientation="vertical"
  8.     tools:context=".MainActivity">
  9.     <Button
  10.         android:id="@+id/btn"
  11.         android:text="拍照"
  12.         android:layout_width="wrap_content"
  13.         android:layout_height="wrap_content"/>
  14.     <ImageView
  15.         android:id="@+id/image"
  16.         android:layout_width="wrap_content"
  17.         android:layout_height="wrap_content"/>
  18.     <TextView
  19.         android:id="@+id/tv_result"
  20.         android:layout_width="wrap_content"
  21.         android:layout_height="wrap_content"/>
  22. </LinearLayout>
复制代码
1、Main.java

  1. 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);
  2.         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企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

忿忿的泥巴坨

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表