如何拍照,但不能OCR:android studio

发布于 2025-01-11 13:25:32 字数 4484 浏览 3 评论 0原文

我组合了两个Java代码,但有一个问题:当我拍照然后我想用这张照片读取文本时,它会写入程序分配的图像的文本(不是拍摄的照片)。

问题是命令的组合,我无法排序。始终读取原始图像(ImageView 随 Bitmap 测试图像一起安装)。 我尝试了很多次但无法订购。

PS 我不想保存捕获的图像。

预先感谢您的反馈。

我的Java代码:

    public class MainActivity extends AppCompatActivity {

    private static final int CAMERA_REQUEST = 1888; ///////
    private ImageView imageView;///
    private static final int MY_CAMERA_PERMISSION_CODE = 100;////


    ////////////
    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults)
    {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        if (requestCode == MY_CAMERA_PERMISSION_CODE)
        {
            if (grantResults[0] == PackageManager.PERMISSION_GRANTED)
            {
                Toast.makeText(this, "camera permission granted", Toast.LENGTH_LONG).show();
                Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
                startActivityForResult(cameraIntent, CAMERA_REQUEST);
            }
            else
            {
                Toast.makeText(this, "camera permission denied", Toast.LENGTH_LONG).show();
            }
        }
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == CAMERA_REQUEST && resultCode == Activity.RESULT_OK) {
            Bitmap photo = (Bitmap) data.getExtras().get("data");
            imageView.setImageBitmap(photo);
        }
    }/////////////


    ImageView imageview;
    Button btnProcess;
    EditText txtView, txtVieww;
    Bitmap photo;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


        this.imageView = (ImageView)this.findViewById(R.id.image_view);////
        Button photoButton = (Button) this.findViewById(R.id.button1);////

        imageview = findViewById(R.id.image_view);
        btnProcess = findViewById(R.id.btnProcess);
        txtView = findViewById(R.id.txtView);
        txtVieww = findViewById(R.id.txtVieww);
        photo = BitmapFactory.decodeResource(getApplicationContext().getResources(),
                R.drawable.newyt);
        imageview.setImageBitmap(photo);


        /////
        photoButton.setOnClickListener(v -> {
            if (checkSelfPermission(Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED)
            {
                requestPermissions(new String[]{Manifest.permission.CAMERA}, MY_CAMERA_PERMISSION_CODE);
            }
            else
            {
                Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
                startActivityForResult(cameraIntent, CAMERA_REQUEST);
            }
        });


        ///////


        btnProcess.setOnClickListener(v -> {
            TextRecognizer txtRecognizer = new TextRecognizer.Builder(getApplicationContext()).build();
            if (!txtRecognizer.isOperational()) {
                txtView.setText(R.string.error_prompt);
                txtVieww.setText(R.string.error_prompt);
            } else {
                Frame frame = new Frame.Builder().setBitmap(photo).build();
                SparseArray<TextBlock> items = txtRecognizer.detect(frame);
                StringBuilder strBuilder = new StringBuilder();
                for (int i = 0; i < items.size(); i++) {
                    TextBlock item = items.valueAt(i);
                    strBuilder.append(item.getValue());
                    strBuilder.append("/");
                    for (Text line : item.getComponents()) {
                        //extract scanned text lines here
                        Log.v("lines", line.getValue());
                        for (Text element : line.getComponents()) {
                            //extract scanned text words here
                            Log.v("element", element.getValue());

                        }
                    }
                }
                final String substringi = strBuilder.substring(0, 10).replaceAll("\\s+", "");
                final String substringg = substringi.substring(0, 5);
                txtView.setText(substringi);
                txtVieww.setText(substringg);
            }
        });
    }


}

I combined the two Java codes, but I have a problem: when I take a picture and then I want to read the text with this picture, it writes the text of the program-assigned image (not taken photo).

The problem is the combination of commands, which I can not sort. Always read the original image (ImageView is installed with a Bitmap test image).
I tried many times but could not order.

P.S I do not want to save the captured image.

Thanks in advance for the feedback.

my Java code:

    public class MainActivity extends AppCompatActivity {

    private static final int CAMERA_REQUEST = 1888; ///////
    private ImageView imageView;///
    private static final int MY_CAMERA_PERMISSION_CODE = 100;////


    ////////////
    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults)
    {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        if (requestCode == MY_CAMERA_PERMISSION_CODE)
        {
            if (grantResults[0] == PackageManager.PERMISSION_GRANTED)
            {
                Toast.makeText(this, "camera permission granted", Toast.LENGTH_LONG).show();
                Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
                startActivityForResult(cameraIntent, CAMERA_REQUEST);
            }
            else
            {
                Toast.makeText(this, "camera permission denied", Toast.LENGTH_LONG).show();
            }
        }
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == CAMERA_REQUEST && resultCode == Activity.RESULT_OK) {
            Bitmap photo = (Bitmap) data.getExtras().get("data");
            imageView.setImageBitmap(photo);
        }
    }/////////////


    ImageView imageview;
    Button btnProcess;
    EditText txtView, txtVieww;
    Bitmap photo;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


        this.imageView = (ImageView)this.findViewById(R.id.image_view);////
        Button photoButton = (Button) this.findViewById(R.id.button1);////

        imageview = findViewById(R.id.image_view);
        btnProcess = findViewById(R.id.btnProcess);
        txtView = findViewById(R.id.txtView);
        txtVieww = findViewById(R.id.txtVieww);
        photo = BitmapFactory.decodeResource(getApplicationContext().getResources(),
                R.drawable.newyt);
        imageview.setImageBitmap(photo);


        /////
        photoButton.setOnClickListener(v -> {
            if (checkSelfPermission(Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED)
            {
                requestPermissions(new String[]{Manifest.permission.CAMERA}, MY_CAMERA_PERMISSION_CODE);
            }
            else
            {
                Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
                startActivityForResult(cameraIntent, CAMERA_REQUEST);
            }
        });


        ///////


        btnProcess.setOnClickListener(v -> {
            TextRecognizer txtRecognizer = new TextRecognizer.Builder(getApplicationContext()).build();
            if (!txtRecognizer.isOperational()) {
                txtView.setText(R.string.error_prompt);
                txtVieww.setText(R.string.error_prompt);
            } else {
                Frame frame = new Frame.Builder().setBitmap(photo).build();
                SparseArray<TextBlock> items = txtRecognizer.detect(frame);
                StringBuilder strBuilder = new StringBuilder();
                for (int i = 0; i < items.size(); i++) {
                    TextBlock item = items.valueAt(i);
                    strBuilder.append(item.getValue());
                    strBuilder.append("/");
                    for (Text line : item.getComponents()) {
                        //extract scanned text lines here
                        Log.v("lines", line.getValue());
                        for (Text element : line.getComponents()) {
                            //extract scanned text words here
                            Log.v("element", element.getValue());

                        }
                    }
                }
                final String substringi = strBuilder.substring(0, 10).replaceAll("\\s+", "");
                final String substringg = substringi.substring(0, 5);
                txtView.setText(substringi);
                txtVieww.setText(substringg);
            }
        });
    }


}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文