Open jestag4 opened 3 years ago
package com.example.image2text;
import android.Manifest; import android.content.ContentValues; import android.content.Intent; import android.content.pm.PackageManager; import android.graphics.Bitmap; import android.graphics.drawable.BitmapDrawable; import android.net.Uri; import android.os.Bundle; import android.provider.MediaStore; import android.util.SparseArray; import android.view.Menu; import android.view.MenuItem; import android.widget.EditText; import android.widget.ImageView; import android.widget.Toast;
import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.appcompat.app.ActionBar; import androidx.appcompat.app.AlertDialog; import androidx.appcompat.app.AppCompatActivity; import androidx.core.app.ActivityCompat; import androidx.core.content.ContextCompat;
import com.google.android.gms.vision.Frame; import com.google.android.gms.vision.text.TextBlock; import com.google.android.gms.vision.text.TextRecognizer; import com.theartofdev.edmodo.cropper.CropImage; import com.theartofdev.edmodo.cropper.CropImageView;
public class MainActivity extends AppCompatActivity {
EditText mResultEt; ImageView mPreview; private static final int CAMERA_REQUEST_CODE = 200; private static final int STORAGE_REQUEST_CODE = 400; private static final int IMAGE_PICK_GALLERY_CODE = 1000; private static final int IMAGE_PICK_CAMERA_CODE = 1001; String[] cameraPermission; String[] storagePermission; Uri image_Uri; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ActionBar actionBar = getSupportActionBar(); actionBar.setSubtitle("Click + button to scan Image"); mResultEt = findViewById(R.id.resultEt); mPreview = findViewById(R.id.imageIv); //camera permission cameraPermission = new String[]{Manifest.permission.CAMERA, Manifest.permission.WRITE_EXTERNAL_STORAGE}; storagePermission = new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}; }
//action bar @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.menu_main, menu); return true; }
@Override public boolean onOptionsItemSelected(@NonNull MenuItem item) { int id = item.getItemId(); if (id == R.id.addImage){ showImageImportDialog(); } if (id == R.id.settings){ Toast.makeText(this, "Settings", Toast.LENGTH_SHORT).show(); } return super.onOptionsItemSelected(item); } private void showImageImportDialog() { //display String[] items = {"Camera", "Gallery"}; AlertDialog.Builder dialog = new AlertDialog.Builder(this); //title dialog.setTitle("Select Image"); dialog.setItems(items, (dialog1, which) -> { if (which == 0){ //camera option if (!checkCameraPermission()){ requestCameraPermissions(); } else { //permission allowed pickCamera(); } } if (which == 1){ //gallery option if (!checkStoragePermission()){ requestStoragePermissions(); } else { //permission allowed pickGallery(); } } }); dialog.create().show(); //show dialog } private void pickGallery() { //pick image from gallery Intent intent = new Intent(Intent.ACTION_PICK); //set intent type intent.setType("image/*"); startActivityForResult(intent, IMAGE_PICK_GALLERY_CODE); } private void pickCamera() { ContentValues values = new ContentValues(); values.put(MediaStore.Images.Media.TITLE, "NewPic"); values.put(MediaStore.Images.Media.DESCRIPTION, "Image To Text"); image_Uri = getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values); Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, image_Uri); startActivityForResult(cameraIntent,IMAGE_PICK_CAMERA_CODE); } private void requestStoragePermissions() { ActivityCompat.requestPermissions(this,storagePermission, STORAGE_REQUEST_CODE ); } private boolean checkStoragePermission(){ boolean result = ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) == (PackageManager.PERMISSION_GRANTED); return result; } private void requestCameraPermissions() { ActivityCompat.requestPermissions(this,cameraPermission, CAMERA_REQUEST_CODE ); } private boolean checkCameraPermission() { boolean result = ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA) == (PackageManager.PERMISSION_GRANTED); boolean result1 = ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) == (PackageManager.PERMISSION_GRANTED); return result && result1; } //handle permission result @Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { switch (requestCode){ case CAMERA_REQUEST_CODE: if (grantResults.length>0){ boolean cameraAccepted = grantResults[0] == PackageManager.PERMISSION_GRANTED; boolean writeStorageAccepted = grantResults[0] == PackageManager.PERMISSION_GRANTED; if (cameraAccepted && writeStorageAccepted){ pickCamera(); } else { Toast.makeText(this, "permission denied", Toast.LENGTH_SHORT).show(); } } break; case STORAGE_REQUEST_CODE: if (grantResults.length>0){ boolean writeStorageAccepted = grantResults[0] == PackageManager.PERMISSION_GRANTED; if (writeStorageAccepted){ pickGallery(); } else { Toast.makeText(this, "permission denied", Toast.LENGTH_SHORT).show(); } } break; } } //handle image result @Override protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == RESULT_OK) { if (requestCode == IMAGE_PICK_GALLERY_CODE) { //got image from gallery Uri image_Uri = data.getData(); CropImage.activity(image_Uri) .setGuidelines(CropImageView.Guidelines.ON) .setAspectRatio(1, 1) .start(this); } if (requestCode == IMAGE_PICK_CAMERA_CODE) { //got image from camera CropImage.activity(image_Uri) .setGuidelines(CropImageView.Guidelines.ON) .setAspectRatio(1, 1) .start(this); } } //get cropped image if (requestCode == CropImage.CROP_IMAGE_ACTIVITY_REQUEST_CODE) { CropImage.ActivityResult result = CropImage.getActivityResult(data); if (resultCode == RESULT_OK) { Uri resultUri = result.getUri(); mPreview.setImageURI(resultUri); //get drawable bitmap BitmapDrawable bitmapDrawable = (BitmapDrawable) mPreview.getDrawable(); Bitmap bitmap = bitmapDrawable.getBitmap(); TextRecognizer recognizer = new TextRecognizer.Builder(getApplicationContext()).build(); if (!recognizer.isOperational()) { Toast.makeText(this, "Error", Toast.LENGTH_SHORT).show(); } else { Frame frame = new Frame.Builder().setBitmap(bitmap).build(); SparseArray<TextBlock> items = recognizer.detect(frame); StringBuilder sb = new StringBuilder(); //get text from sb for (int i = 0; i < items.size(); i++) { TextBlock myItem = items.valueAt(i); sb.append(myItem.getValue()); sb.append("\n"); } //set text to edit text mResultEt.setText(sb.toString()); } } else if (requestCode == CropImage.CROP_IMAGE_ACTIVITY_REQUEST_CODE) { //if there is any error show it Exception error = result.getError(); Toast.makeText(this, "" + error, Toast.LENGTH_SHORT).show(); } } }
}
@jestag4 π¨π¨π¨π¨π¨ THIS LIBRARY IS NOT MAINTAINED, PLEASE READ THIS π¨π¨π¨π¨π¨ #818
package com.example.image2text;
import android.Manifest; import android.content.ContentValues; import android.content.Intent; import android.content.pm.PackageManager; import android.graphics.Bitmap; import android.graphics.drawable.BitmapDrawable; import android.net.Uri; import android.os.Bundle; import android.provider.MediaStore; import android.util.SparseArray; import android.view.Menu; import android.view.MenuItem; import android.widget.EditText; import android.widget.ImageView; import android.widget.Toast;
import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.appcompat.app.ActionBar; import androidx.appcompat.app.AlertDialog; import androidx.appcompat.app.AppCompatActivity; import androidx.core.app.ActivityCompat; import androidx.core.content.ContextCompat;
import com.google.android.gms.vision.Frame; import com.google.android.gms.vision.text.TextBlock; import com.google.android.gms.vision.text.TextRecognizer; import com.theartofdev.edmodo.cropper.CropImage; import com.theartofdev.edmodo.cropper.CropImageView;
public class MainActivity extends AppCompatActivity {
//action bar @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.menu_main, menu); return true; }
}