java如何实现识别图片上的文字

1、概述

除了文本的敏感词识别,我们还会遇到识别图片上的问题,以及过滤敏感词的需求。

2、图片文字识别技术OCR

OCR (Optical Character Recognition,光学字符识别)是指电子设备(例如扫描仪或数码相机)检查纸上打印的字符,通过检测暗、亮的模式确定其形状,然后用字符识别方法将形状翻译成计算机文字的过程。备选方案有以下几种:

在这里插入图片描述
我这里选用tess4J的方案。

3、tess4J方案示例

3.1、引入依赖

<dependency>
    <groupId>net.sourceforge.tess4j</groupId>
    <artifactId>tess4j</artifactId>
    <version>4.1.1</version>
</dependency>

3.2、导入中文字体库

中文字体库下载链接
链接:https://pan.baidu.com/s/1oTJEK6lVpL0jgenKfmFbdg
提取码:epa8
下载后解压,把tessdata文件夹拷贝到指定的文件夹下,比如:D:\tessdata

3.3、封装tess4J图片识别工具类

在yml配置文件中添加tess4J的相关配置

tess4j:
  data-path: D:\tessdata
  language: chi_sim
@Getter
@Setter
@Component
@ConfigurationProperties(prefix = "tess4j")
public class Tess4jClient {

    private String dataPath;
    private String language;

// 入参:图片流
    public String doOCR(BufferedImage image) throws TesseractException {
        //创建Tesseract对象
        ITesseract tesseract = new Tesseract();
        //设置中文字体库路径
        tesseract.setDatapath(dataPath);
        //中文识别
        tesseract.setLanguage(language);
        //执行ocr识别
        String result = tesseract.doOCR(image);
        //替换回车和tal键  使结果为一行
        result = result.replaceAll("\\r|\\n", "-").replaceAll(" ", "");
        return result;
    }
}

3.4、使用示例

try {
    for (String image : images) {
        byte[] bytes = fileService.downLoadFile(image);
        //从byte[]转换为butteredImage
        ByteArrayInputStream in = new ByteArrayInputStream(bytes);
        BufferedImage imageFile = ImageIO.read(in);
        //识别图片的文字
        String result = tess4jClient.doOCR(imageFile);
        //再结合敏感词过滤算法,审核图片中的文字是否包含敏感词
        boolean isSensitive = sensitiveScan(result);
    } 
}catch (Exception e){
    e.printStackTrace();
}

fileService部分代码,使用MinIO下载图片

 public byte[] downLoadFile(String pathUrl)  {
        String key = pathUrl.replace(minIOConfigProperties.getEndpoint()+"/","");
        int index = key.indexOf("/");
        String bucket = key.substring(0,index);
        String filePath = key.substring(index+1);
        InputStream inputStream = null;
        try {
            inputStream = minioClient.getObject(GetObjectArgs.builder().bucket(minIOConfigProperties.getBucket()).object(filePath).build());
        } catch (Exception e) {
            log.error("minio down file error.  pathUrl:{}",pathUrl);
            e.printStackTrace();
        }

        ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
        byte[] buff = new byte[100];
        int rc = 0;
        while (true) {
            try {
                if (!((rc = inputStream.read(buff, 0, 100)) > 0)) break;
            } catch (IOException e) {
                e.printStackTrace();
            }
            byteArrayOutputStream.write(buff, 0, rc);
        }
        return byteArrayOutputStream.toByteArray();
    }

以上就是java实现图片文字识别技术,欢迎点赞收藏。

### Java OCR 图片文字识别库及教程 #### 使用 Spire.OCR for Java 进行 OCR 文字识别 Spire.OCR for Java 是一款强大的 OCR 组件,能够处理多种语言和字体的文字识别工作。该组件可以读取 JPG、PNG、GIF、BMP 和 TIFF 等常见图片格式中的文本信息[^1]。 为了在 Java 中集成并使用 Spire.OCR for Java实现 OCR 功能,开发者需要先下载对应的 JAR 文件并将它们添加到项目的构建路径中。接着,在代码里创建 `Ocr` 类实例来加载待分析的图像文件,并调用相应的方法执行识别操作: ```java import com.spire.ocr.*; public class OCRExample { public static void main(String[] args){ try{ // 创建一个新的 Ocr 对象 Ocr ocr = new Ocr(); // 设置要解析的语言(这里设置为中文) ocr.setLanguage(OcrLang.CHINESE_SIMPLIFIED); // 加载图像文件 String imagePath = "path/to/image.png"; Image image = ImageIO.read(new File(imagePath)); // 解析图像中的文本 List<String> resultTextList = ocr.recognizeImageToStringList(image, null); // 输出结果 System.out.println(resultTextList.toString()); }catch(Exception e){ e.printStackTrace(); } } } ``` 需要注意的是,在实际应用过程中可能会遇到一些异常情况,比如由于缺少本地依赖而导致的 UnsatisfiedLinkError 错误。此时应该确保所有必需的动态链接库都已正确安装并且环境变量配置无误[^2]。 #### 利用 Tesseract 实现 OCR 识别功能 另一种流行的解决方案是采用开源项目 Tesseract。此工具提供了丰富的 API 接口供开发人员调用,同时也拥有良好的社区支持和服务文档说明。对于特定语种的支持,则可以通过下载相应的 tessdata 数据包完成初始化设定过程[^3]。 下面是一个简单的例子展示怎样借助于 Tess4J 库——即 Tesseract 的 Java 封装版本——来进行基本的 OCR 处理任务: ```java import net.sourceforge.tess4j.ITesseract; import net.sourceforge.tess4j.Tesseract; public class TesseractExample { private final ITesseract tesseract = new Tesseract(); public void recognizeText() throws Exception { // 设定tessdata目录位置 tesseract.setDatapath("/usr/share/tesseract-ocr/4.00/tessdata"); // 指定目标语言(此处设为中国大陆使用的简化汉字) tesseract.setLanguage("chi_sim"); // 定义输入源图像路径以及输出目的地字符串变量 String imgFilePath = "/home/user/images/sample.jpg"; String outputStr = tesseract.doOCR(new File(imgFilePath)); // 展示最终获得的结果 System.out.print(outputStr); } public static void main(String[] args) throws Exception { (new TesseractExample()).recognizeText(); } } ``` 通过上述两种方式之一即可轻松实现Java 平台上对图片内嵌入的文字内容进行有效的提取与转换。
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

TheChainsmokers-

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值