Advertisement
Combreal

OCR-mlkit-01.java

Aug 6th, 2022
1,266
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 10.92 KB | None | 0 0
  1. -----------------------------activity_main.xml
  2.  
  3.  
  4.  
  5. <?xml version="1.0" encoding="utf-8"?>
  6. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  7.     xmlns:app="http://schemas.android.com/apk/res-auto"
  8.     xmlns:tools="http://schemas.android.com/tools"
  9.     android:layout_width="match_parent"
  10.     android:layout_height="match_parent"
  11.     android:orientation="vertical"
  12.     tools:context=".MainActivity">
  13.  
  14.     <ImageView
  15.         android:id="@+id/imageId"
  16.         android:layout_width="match_parent"
  17.         android:layout_height="372dp" />
  18.     <Button
  19.         android:id="@+id/buttonId"
  20.         android:layout_width="match_parent"
  21.         android:layout_height="wrap_content"
  22.         android:text="take pic"/>
  23.         <!-- android:onClick="doProcess" -->
  24.  
  25.     <TextView
  26.         android:id="@+id/textId"
  27.         android:layout_width="match_parent"
  28.         android:layout_height="221dp" />
  29.  
  30. </LinearLayout>
  31.  
  32.  
  33.  
  34. -----------------------------AndroidManifest.xml
  35.  
  36.  
  37.  
  38. <?xml version="1.0" encoding="utf-8"?>
  39. <manifest xmlns:android="http://schemas.android.com/apk/res/android"
  40.     xmlns:tools="http://schemas.android.com/tools"
  41.     package="com.example.mlkit02">
  42.  
  43.     <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
  44.     <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
  45.     <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
  46.     <uses-permission android:name="android.permission.CAMERA"/>
  47.     <uses-permission android:name="android.permission.INTERNET"/>
  48.  
  49.     <application
  50.         android:allowBackup="true"
  51.         android:dataExtractionRules="@xml/data_extraction_rules"
  52.         android:fullBackupContent="@xml/backup_rules"
  53.         android:icon="@mipmap/ic_launcher"
  54.         android:label="@string/app_name"
  55.         android:roundIcon="@mipmap/ic_launcher_round"
  56.         android:supportsRtl="true"
  57.         android:theme="@style/Theme.Mlkit02"
  58.         android:requestLegacyExternalStorage="true"
  59.         tools:targetApi="29">
  60.         <activity
  61.             android:name=".MainActivity"
  62.             android:exported="true">
  63.             <intent-filter>
  64.                 <action android:name="android.intent.action.MAIN" />
  65.  
  66.                 <category android:name="android.intent.category.LAUNCHER" />
  67.             </intent-filter>
  68.         </activity>
  69.     </application>
  70.  
  71. </manifest>
  72.  
  73.  
  74.  
  75. -----------------------------build.gradle
  76.  
  77.  
  78.  
  79. plugins {
  80.     id 'com.android.application'
  81. }
  82.  
  83. android {
  84.     compileSdk 32
  85.  
  86.     defaultConfig {
  87.         applicationId "com.example.mlkit02"
  88.         minSdk 23
  89.         targetSdk 32
  90.         versionCode 1
  91.         versionName "1.0"
  92.  
  93.         testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
  94.     }
  95.  
  96.     buildTypes {
  97.         release {
  98.             minifyEnabled false
  99.             proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
  100.         }
  101.     }
  102.     compileOptions {
  103.         sourceCompatibility JavaVersion.VERSION_1_8
  104.         targetCompatibility JavaVersion.VERSION_1_8
  105.     }
  106. }
  107.  
  108. dependencies {
  109.  
  110.     implementation 'androidx.appcompat:appcompat:1.4.2'
  111.     implementation 'com.google.android.material:material:1.6.1'
  112.     implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
  113.     implementation 'com.google.android.gms:play-services-mlkit-text-recognition:18.0.0'
  114.     testImplementation 'junit:junit:4.13.2'
  115.     androidTestImplementation 'androidx.test.ext:junit:1.1.3'
  116.     androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
  117. }
  118.  
  119.  
  120. -----------------------------MainActivity.java
  121.  
  122.  
  123. package com.example.mlkit02;
  124.  
  125. import androidx.activity.result.ActivityResult;
  126. import androidx.activity.result.ActivityResultCallback;
  127. import androidx.activity.result.ActivityResultLauncher;
  128. import androidx.activity.result.contract.ActivityResultContracts;
  129. import androidx.annotation.NonNull;
  130. import androidx.annotation.RequiresApi;
  131. import androidx.appcompat.app.AppCompatActivity;
  132.  
  133. import android.Manifest;
  134. import android.app.Activity;
  135. import android.content.Intent;
  136. import android.content.pm.PackageManager;
  137. import android.graphics.Bitmap;
  138. import android.graphics.BitmapFactory;
  139. import android.graphics.Camera;
  140. import android.os.Build;
  141. import android.os.Bundle;
  142. import android.provider.MediaStore;
  143. import android.util.Log;
  144. import android.view.View;
  145. import android.widget.Button;
  146. import android.widget.ImageView;
  147. import android.widget.TextView;
  148.  
  149. import com.google.android.gms.tasks.OnFailureListener;
  150. import com.google.android.gms.tasks.OnSuccessListener;
  151. import com.google.android.gms.tasks.Task;
  152. import com.google.android.gms.tasks.Tasks;
  153. import com.google.mlkit.vision.common.InputImage;
  154. import com.google.mlkit.vision.text.Text;
  155. import com.google.mlkit.vision.text.TextRecognition;
  156. import com.google.mlkit.vision.text.TextRecognizer;
  157. import com.google.mlkit.vision.text.latin.TextRecognizerOptions;
  158.  
  159. import java.util.concurrent.ExecutionException;
  160.  
  161. public class MainActivity extends AppCompatActivity {
  162.  
  163.     ImageView imageView;
  164.     TextView textView;
  165.     Button pictButton;
  166.  
  167.     @RequiresApi(api = Build.VERSION_CODES.M)
  168.     @Override
  169.     protected void onCreate(Bundle savedInstanceState) {
  170.         super.onCreate(savedInstanceState);
  171.         setContentView(R.layout.activity_main);
  172.  
  173.         imageView = findViewById(R.id.imageId);
  174.         textView = findViewById(R.id.textId);
  175.         pictButton = findViewById(R.id.buttonId);
  176.  
  177.         if (checkSelfPermission(Manifest.permission.ACCESS_NETWORK_STATE) == PackageManager.PERMISSION_DENIED ||
  178.                 checkSelfPermission(Manifest.permission.CAMERA) == PackageManager.PERMISSION_DENIED ||
  179.                 checkSelfPermission(Manifest.permission.INTERNET) == PackageManager.PERMISSION_DENIED ||
  180.                 checkSelfPermission(Manifest.permission.READ_EXTERNAL_STORAGE) == PackageManager.PERMISSION_DENIED ||
  181.                 checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_DENIED) {
  182.             //permission not enabled, request it
  183.             String[] permission = {Manifest.permission.ACCESS_NETWORK_STATE, Manifest.permission.INTERNET, Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE};
  184.             requestPermissions(permission, 1000);
  185.         }
  186.  
  187.         pictButton.setOnClickListener(new View.OnClickListener() {
  188.             @Override
  189.             public void onClick(View v) {
  190.                 //Camera camera = getAndroidCamera();
  191.  
  192.                 Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
  193.                 someActivityResultLauncher.launch(cameraIntent);
  194.             }
  195.         });
  196.     }
  197.  
  198.     ActivityResultLauncher<Intent> someActivityResultLauncher = registerForActivityResult(
  199.             new ActivityResultContracts.StartActivityForResult(),
  200.             new ActivityResultCallback<ActivityResult>() {
  201.                 @Override
  202.                 public void onActivityResult(ActivityResult result) {
  203.                     if (result.getResultCode() == Activity.RESULT_OK) {
  204.                         Intent data = result.getData();
  205.                         Bundle bundle = data.getExtras();
  206.                         Bitmap bitmap = (Bitmap) bundle.get("data");
  207.                         imageView.setImageBitmap(bitmap);
  208.  
  209.                         String output = null;
  210.                         try {
  211.                             output = new OCR(imageView).execute().get(); //"/storage/emulated/0/Download/sticker01.jpg"
  212.                         } catch (ExecutionException e) {
  213.                             e.printStackTrace();
  214.                         } catch (InterruptedException e) {
  215.                             e.printStackTrace();
  216.                         }
  217.                         Log.i("===============OCR==RESULT======================>", output);
  218.                         textView.setText(output);
  219.                     }
  220.                 }
  221.     });
  222. }
  223.  
  224.  
  225.  
  226. -----------------------------OCR.java
  227.  
  228.  
  229.  
  230. package com.example.mlkit02;
  231.  
  232. import android.graphics.Bitmap;
  233. import android.graphics.BitmapFactory;
  234. import android.graphics.drawable.BitmapDrawable;
  235. import android.os.AsyncTask;
  236. import android.os.SystemClock;
  237. import android.util.Log;
  238. import android.widget.ImageView;
  239.  
  240. import androidx.annotation.NonNull;
  241.  
  242. import com.google.android.gms.tasks.OnFailureListener;
  243. import com.google.android.gms.tasks.OnSuccessListener;
  244. import com.google.android.gms.tasks.Task;
  245. import com.google.android.gms.tasks.Tasks;
  246. import com.google.mlkit.vision.common.InputImage;
  247. import com.google.mlkit.vision.text.Text;
  248. import com.google.mlkit.vision.text.TextRecognition;
  249. import com.google.mlkit.vision.text.TextRecognizer;
  250. import com.google.mlkit.vision.text.latin.TextRecognizerOptions;
  251.  
  252. import java.lang.ref.WeakReference;
  253.  
  254. public class OCR  extends AsyncTask<String, Void, String> {
  255.  
  256.     private ImageView mImgView;
  257.     public OCR(ImageView image) {
  258.         //WeakReference<ImageView> mImageView = new WeakReference<ImageView>(image);
  259.         mImgView = image;
  260.     }
  261.  
  262.     @Override
  263.     protected void onPreExecute() {
  264.         super.onPreExecute();
  265.     }
  266.  
  267.     @Override
  268.     protected String doInBackground(String... params) {
  269.         String resultText = null;
  270.         try {
  271.             //ImageView imgView = (ImageView) findViewById(R.id.params[0]);
  272.             BitmapDrawable drawable = (BitmapDrawable) mImgView.getDrawable();
  273.             Bitmap bitmap = drawable.getBitmap();
  274.             //Bitmap bitmap = BitmapFactory.decodeFile(params[0]);//"/storage/emulated/0/Download/wp01.png" //"/storage/emulated/0/DCIM/Camera/1659023147826.jpg"
  275.  
  276.             TextRecognizer recognizer = TextRecognition.getClient(TextRecognizerOptions.DEFAULT_OPTIONS);
  277.             InputImage mInputImage = InputImage.fromBitmap(bitmap, 0);
  278.  
  279.             Task<Text> result =
  280.                     recognizer.process(mInputImage).addOnSuccessListener(new OnSuccessListener<Text>() {
  281.                                 //@Override
  282.                                 public void onSuccess(Text visionText) {
  283.                                    
  284.                                 }
  285.                             })
  286.                             .addOnFailureListener(
  287.                                     new OnFailureListener() {
  288.                                         @Override
  289.                                         public void onFailure(@NonNull Exception e) {
  290.  
  291.                                         }
  292.                                     });
  293.             Tasks.await(result);
  294.  
  295.             resultText = result.getResult().getText();
  296.             //Log.i("RESULT ======================>", resultText);
  297.         } catch (Exception e) {
  298.             e.printStackTrace();
  299.             Log.e("Task failed", e.getMessage());
  300.         }
  301.  
  302.         return resultText;
  303.     }
  304.  
  305.     @Override
  306.     protected void onPostExecute(String result) {
  307.         super.onPostExecute(result);
  308.     }
  309. }
  310.  
  311.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement