Java使用Tesseract-OCR识别图片的文字信息

文章介绍了如何在本地安装和配置Tesseract-OCR进行图片识别,尤其是针对中文的困难。作者指出,由于用户需要本地安装且识别效果不佳,该功能在实际开发中的应用有限。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

开头:对于这个图片识别的功能,其实我对他的一个评价就是,食之无味,弃之可惜,识别中文比较困难,只能识别一些很少的文字,我在本地最多只能成功识别两个字,三个字都会识别不出来,识别出来的东西很low,根本没法用,但是英文识别还可以,比中文识别会好很多;
3个字中文识别模板:
在这里插入图片描述
识别出来的文字:
在这里插入图片描述
完全没法用
如果大家还是需要使用这个,就可以接着往下看了

第一步,在电脑上安装 Tesseract-OCR

安装包地址
https://digi.bib.uni-mannheim.de/tesseract/
我这里安装的是 tesseract-ocr-setup-3.05.01.exe,因为我安装最新安装包时会出现错误,然后在安装的时候会下载一些文件,然后我在下载的时候开了一个代理,如果不开,速度可能会比较慢。

第二步,配置环境变量

变量名:TESSDATA_PREFIX
在这里插入图片描述

再在Path里面配置这个:
在这里插入图片描述
做到这里,Tesseract-OCR 差不多就已经安装完毕了;
打开命令行工具,输入 tesseract -v,如果出现下面这个,表示安装成功:
在这里插入图片描述

第三步,编写代码

@RestController
public class OCRController {

    @PostMapping("/extractText")
    public String extractTextFromImage(@RequestParam("file") MultipartFile file) {
        try {
            String srImage = convertMultipartFileToFile(file);
            System.err.println(srImage);
            File imageFile = new File(srImage);
            if (!imageFile.exists()) {
                return "图片不存在";
            }
            BufferedImage textImage = ImageIO.read(imageFile);
            textImage = ImageHelper.convertImageToGrayscale(textImage);// 黑白处理
//            textImage = textImage.getSubimage(0,0,300,80);//截图图片
            textImage = ImageHelper.getScaledInstance(textImage, textImage.getWidth() * 10, textImage.getHeight() * 10);//放大图片识别
//            Tesseract instance = Tesseract.getInstance();
            Tesseract instance = new Tesseract();
            instance.setDatapath("D:\\Java\\tess-OCR\\Tesseract-OCR\\tessdata");//设置训练库
//            if (true)
            instance.setLanguage("chi_sim");//中文识别
            String result = null;
            result = instance.doOCR(textImage);
//            result = instance.doOCR(imageFile);
            System.out.println(result);
            return result;
        } catch (Exception e) {
            e.printStackTrace();
            return "识别失败";
        }
    }

    // 辅助方法:将MultipartFile转换为File
    private String convertMultipartFileToFile(MultipartFile file) throws IOException {

        if (!file.isEmpty()) {
            try {
                // 创建一个保存文件的目录
                String uploadDir = "E:\\temporaryFile";
                // 获取文件的原始名称
                String originalFilename = file.getOriginalFilename();

                // 构建目标文件对象
                File destFile = new File(uploadDir + File.separator + originalFilename);

                // 保存文件
                file.transferTo(destFile);

                // 文件已经保存在目标文件中,你可以在destFile对象中获取文件的路径
                String filePath = destFile.getAbsolutePath();

                // 打印文件路径
                System.out.println("文件保存路径:" + filePath);

                // 在这里可以进行其他操作,比如数据库记录等

                return filePath;
            } catch (IOException e) {
                e.printStackTrace();
                return "上传文件错误2";
            }
        } else {
            return "上传文件错误"; // 重定向到上传失败页面
        }
    }
}

做到这里,一个很简单的图片识别就已经完成了,但是,在实际的开发中,使用这个还是有很大的限制,比如说,如果想要使用这个图片识别的功能,就算是识别英文,但是,使用方需要在本地安装 Tesseract-OCR,这对于用户的体验并不友好,所以,这个功能在实际开发中基本上不会使用。如果大家有更好的,开源的一些图片识别的方法,欢迎大家在评论区留言。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值