当前位置: 首页 > article >正文

【方案三】JAVA中使用ocr(Umi-OCR)

目录

前言:

需求:

代码:

难点:

参考文档:


前言:

前两个方案都是自己做着玩儿的,实际运用到上线项目是要收费的,该方案使用的是免费开源的工具,就算运用到商业项目也不会侵权,建议使用这个方案。

需求:

上传图片,识别出内容

代码:

@Value("${ocr.url}")
//"http://121.229.10.211:32009/umi/api/ocr"
private String ocrUrl;

@PostMapping("/ocr")
@ApiOperationSupport(order = 3)
@ApiOperation(value = "识别图像", notes = "上传图像")
public R<FarmerApplyEntity> ocr(@RequestBody MultipartFile file) throws IOException, ParseException {
        // 创建临时文件
        File tfile = File.createTempFile("tempfile", file.getOriginalFilename());
        // 写入数据
        file.transferTo(tfile);

        // 构造请求体
        JSONObject inputObject = new JSONObject();
        String base64 = Base64.encode(tfile);
        inputObject.put("base64", base64.replace("data:image/png;base64,", ""));
        JSONObject options = new JSONObject();
        options.put("ocr.language", "models/config_chinese.txt");
        options.put("ocr.cls", true);
        options.put("ocr.limit_side_len", 4320);
        options.put("tbpu.parser", "multi_none");
        options.put("data.format", "txt");
        inputObject.put("options", options);

        String jsonInputString = inputObject.toString();
        // 发送 POST 请求
        HttpResponse response = HttpUtil.createPost(ocrUrl)
                .contentType("application/json") // 设置请求头,指定内容类型为 JSON
                .body(jsonInputString) // 设置请求体
                .execute();
        System.out.printf(JSON.parseObject(response.body()).toJSONString());
        JSONObject retObject = JSON.parseObject(response.body());
        JSONArray data = retObject.getJSONArray("data");
        // 将JSONArray里的每一个object里的text串联起来
        // 用于存储串联结果的StringBuilder
        StringBuilder concatenatedText = new StringBuilder();

        // 遍历JSONArray
        for (int i = 0; i < data.size(); i++) {
            // 获取每个JSONObject
            JSONObject jsonObject = data.getJSONObject(i);
            // 获取text属性
            String text = jsonObject.getString("text");
            // 将text添加到StringBuilder
            concatenatedText.append(text);
        }
        tfile.delete();

        return R.data(contractService.boxOcrResult(concatenatedText.toString()));
    }

难点:

需要自己启动一个ocr的服务,上面代码是调用这个服务进行识别,ocrUrl就是启动后的服务访问地址,下载发行版启动服务(仅支持win7以上)

如果系统是linux则需要使用docker 构建镜像启动服务

参考文档:

Umi-OCR: Umi-OCR 是一款免费、开源、可批量的离线 OCR 软件,基于 PaddleOCR,适用于 Windows10/11 平台


http://www.kler.cn/a/421971.html

相关文章:

  • 【工具变量】上市公司企业所在地城市等级直辖市、副省级城市、省会城市 计划单列市(2005-2022年)
  • 三步入门Log4J 的使用
  • 洛谷P2670扫雷游戏(Java)
  • node.js基础学习-fs模块-Stream流(七)
  • 使用go语言写一个脚本 实现WebSockt连接 用户发送a 得到返回b
  • 【数据事务】.NET开源 ORM 框架 SqlSugar 系列
  • 嵌入式硬件实战提升篇(三)商用量产电源设计方案 三路电源输入设计 电源管理 多输入供电自动管理 DCDC降压
  • 剖析设备像素、CSS 像素等的特性与用途
  • 关于layui的dropdown下拉框缓存问题修复
  • 【星海随笔】syslinux
  • 面试题-RocketMQ的基本架构、支持的消息模式、如何保证消息的可靠传输
  • Elasticsearch做分词实践
  • Day 30 贪心算法 part04
  • Linux安装部署Redis教程
  • Linux基础—防火墙2
  • 【CVPR24】One-Prompt to Segment All Medical Images
  • 面试题整理(二)
  • 2411C++,CXImage简单使用
  • 怎么把项目提交到git上
  • 【WRF-Urban】Urban 模块是否运行完成及与标准 WRF 的区别
  • 编译MT7620 OpenWrt的所有机型的固件
  • PTA--数据结构预习报告: 考试排名汇总
  • Oracle篇—通过官网下载最新的数据库软件或者历史数据库软件
  • 解码气候:全球气候变化驱动因素预测!气候变化的驱动因素主要包括哪些?全球气候变化对哪些领域有影响?
  • MYSQL练习
  • 免交互运用