java百度智能云实现图片识别文字,录入信息和搜索功能

Java实现图片转文字!(OCR实现) 在实现OCR之前,先要分清楚Tesseract和Tess4j的区别。Tesseract是一个开源的光学字符识别(OCR)引擎,它可以将图像中的文字转换为计算机可读的文本。支持多种语言和书面语言,并且可以在命令行中执行。它是一个流行的开源OCR工具,可以在许多不同的操作系统上运行。Tess4J是一个基于Tesseract OCR引擎的Java接口,可以用来识别图像中的文本,说白了,就是封装了它的API,让Java可以直接调用。 阅读详情

今天帮别人完成了俩个有意思的需求

1、根据上传的图片,识别图片的内容,进行搜索,搜索的内容就是列表的所有列标题。

 2、根据上传的图片,进行信息录入的功能。

上传图片,自动更新分数

3、看下上传图片的格式

基本要求:

1、需要图片识别的是列表的所有列标题。数据格式,比如名称和值用冒号:隔开,然后用逗号区分下一组数据,如果换行末尾必须以逗号区分一组数据。

2、图片的文字信息不定,可以是一个标题,也可以是多个标题,最多8个

 

 文本格式

课程号:8,
工号:4,
学号:2,
成绩:9,
学期:22-春季学期,
教师名:李玉民,
学生名:张四123,
课程名:组合数学

 4、实现

需要利用百度智能云的api实现(前提需要注册百度智能云的账号,开通网络图片文字识别的服务,注意这个不是免费的,免费1000次还是一个月,之后收费的,具体以官网为准)

Access_token获取参考:https://ai.baidu.com/ai-doc/REFERENCE/Ck3dwjhhu

官网:网络图片文字识别 - 文字识别OCR

代码里用到这3个值

5、核心代码

最核心代码

package com.auggie.student_server.utils;

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import org.apache.commons.lang3.StringUtils;

import java.net.URLEncoder;
import java.util.HashMap;
import java.util.Map;


public class ImgReadContent {

    /******************************
     * 用途说明:
     * 作者姓名: Administrator
     * 创建时间: 2023-04-19 19:15
     ******************************/
    /**
     * 重要提示代码中所需工具类
     * FileUtil,Base64Util,HttpUtil,GsonUtils请从
     * https://ai.baidu.com/file/658A35ABAB2D404FBF903F64D47C1F72
     * https://ai.baidu.com/file/C8D81F3301E24D2892968F09AE1AD6E2
     * https://ai.baidu.com/file/544D677F5D4E4F17B4122FBD60DB82B3
     * https://ai.baidu.com/file/470B3ACCA3FE43788B5A963BF0B625F3
     * 下载
     */
    public static Map<String, String> webImage(String fileUrl) {
        // 请求url
        String url = "https://aip.baidubce.com/rest/2.0/ocr/v1/webimage";
        try {
            // 本地文件路径
            String filePath = fileUrl;//"E:\\test10.png";
            byte[] imgData = FileUtil.readFileByBytes(filePath);
            String imgStr = Base64Util.encode(imgData);
            String imgParam = URLEncoder.encode(imgStr, "UTF-8");

            String param = "image=" + imgParam;

            // 注意这里仅为了简化编码每一次请求都去获取access_token,线上环境access_token有过期时间, 客户端可自行缓存,过期后重新获取。
            String accessToken = "这里是上边说的Access Token";

            String result = HttpUtil.post(url, accessToken, param);

            if (StringUtils.isBlank(result)) {
                return null;
            }
            JSONObject jsonData = JSONObject.parseObject(result);
            if (null == jsonData || !jsonData.containsKey("words_result")) {
                return null;
            }

            JSONArray jsonArray = jsonData.getJSONArray("words_result");
            /*{"words_result":[{"words":"课程号:1"},{"words":"成绩:9"},{"words":"工号:2"},{"words":"学号:3"},{"words":"学期:学期1"},
            {"words":"课程名:5"},{"words":"教师名:6"},{"words":"学生名:8"}],"words_result_num":8,"log_id":1648528150507199501}*/


            //words -> 姓名:张三年龄:16性别:女
            Map<String, String> map = new HashMap<String, String>();
            for (int i = 0; i < jsonArray.size(); i++) {
                JSONObject json = jsonArray.getJSONObject(i);

/*                String value = json.getString("words");
                if (value.contains(":")) {
                    getMapJsonData(map, value, ":");
                } else if (value.contains(":")) {
                    getMapJsonData(map, value, ":");
                }*/
                getMapJsonCommaData(map, json);
                System.out.println(map);

            }

            /*if (map.containsKey("课程号")) {
                map.get("课程号");
            }
            if (map.containsKey("成绩")) {
                map.get("成绩");
            }

            if (map.containsKey("工号")) {
                map.get("工号");
            }
            if (map.containsKey("学号")) {
                map.get("学号");
            }
            if (map.containsKey("学期")) {
                map.get("学期");
            }
            if (map.containsKey("课程名")) {
                map.get("课程名");
            }
            if (map.containsKey("教师名")) {
                map.get("教师名");
            }
            if (map.containsKey("学生名")) {
                map.get("学生名");
            }*/


            System.out.println("map = " + map);

            System.out.println("result = " + result);
            return map;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    public static Map<String, String> getMapJsonCommaData(Map<String, String> mapParam, JSONObject json) {

        String value = json.getString("words");
        String[] split = null;
        if (value.contains(",")) {
            split = value.split(",");

        } else if (value.contains(",")) {
            split = value.split(",");

        } else if (value.contains(":")) {
            //split = value.split(":");
            mapParam.put(value.split(":")[0], value.split(":")[1]);
        } else if (value.contains(":")) {
            //split = value.split(":");
            mapParam.put(value.split(":")[0], value.split(":")[1]);
        }
        if (split != null) {

            getMapJsonSemicolonData(mapParam, split);
        }

        return mapParam;

    }

    public static Map<String, String> getMapJsonSemicolonData(Map<String, String> mapParam, String[] split) {

        for (int i = 0; i < split.length; i++) {
            String[] splitMap = null;
            String value = split[i];
            if (value.contains(":")) {
                splitMap = value.split(":");
                mapParam.put(splitMap[0], splitMap[1]);
            } else if (value.contains(":")) {
                splitMap = value.split(":");
                mapParam.put(splitMap[0], splitMap[1]);
            }
        }


        return mapParam;

    }

    public static void main(String[] args) {
        webImage("");
    }
}

pom文件

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.6.2</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.auggie</groupId>
    <artifactId>student_server</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>student_server</name>
    <description>student_server</description>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.2.2</version>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>

        <dependency>
            <groupId>com.google.code.gson</groupId>
            <artifactId>gson</artifactId>
            <version>2.8.2</version>
        </dependency>
        <!-- json -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.83</version>
        </dependency>

        <!--引入commons-lang3-->
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
            <version>3.10</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <excludes>
                        <exclude>
                            <groupId>org.projectlombok</groupId>
                            <artifactId>lombok</artifactId>
                        </exclude>
                    </excludes>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>

6、效果图如下

需求1

上传图片识别文字自动检索数据 

需求2

上传图片更新分数

 点击图片上传,页面分数自动设置为9

 点击提交,更新分数为9

Java的开源文字识别Tess4j与Tesseract-OCR 由于项目需要,要求项目可以识别简单的图片,客户不想使用付费的大厂接口,于是我在查看资料后决定使用Tesseract-OCR,因为Tesseract-OCR可以在特定场景下训练语言识别提高正确率。但是在配置和使用过程中遇到各式各样的错误,经过一天的探索终于完成了Tesseract-OCR接口的基本使用。本文在旨在使读者能够掌握Tesseract-OCR并能使用Java代码进行简单的图像文字识别,以项目实战为例展示Tesseract-OCR的使用。 阅读详情

相关推荐

百度OCR 接口调用 问题

需要用FormData 传参。

三季雨 2106

Java调用百度云OCR文字识别(通用文字识别、身份证文字识别、车牌号识别)

在Java中调用百度云OCR文字识别服务,你需要首先在百度云平台上注册一个账号,创建一个应用并获取相应的API Key和Secret Key。然后,使用这些凭据,你可以调用百度云的REST API来进行文字识别。

系统看你学习很认真,随机送了一个月会员! 1098

百度智能云OCR API实战:5分钟搞定图片转文字(附Java完整代码)

本文详细介绍了如何利用百度智能云OCR API快速构建企业级图片与PDF文字识别服务。通过实战案例和完整的Java代码示例,指导开发者从环境配置、核心工具类设计到PDF多页处理与性能优化的全流程,帮助实现文档数字化,大幅提升工作效率。

alpha的博客 267

【项目管理】Java OCR实现图片文字识别

Java OCR实现图片文字识别

李晋江的博客 2万+

百度智能云OCR实战:身份证与户口本信息智能提取与解析

OCR(光学字符识别)技术就像一位不知疲倦的文字翻译官,它能将图片、扫描件中的文字内容自动识别并转换为可编辑的文本。而百度智能云OCR则是这位翻译官的"智能升级版"——它不仅支持常规印刷体识别,还能精准提取身份证、户口本等证件中的结构化信息(如姓名、性别、民族等字段),甚至能自动区分证件的正反面。在实际政务、金融等场景中,工作人员常需要手动录入海量证件信息,既耗时又容易出错。批量自动化处理:1分钟内可完成上百张证件信息的提取高准确率:身份证关键字段识别准确率超99%结构化输出。

weixin_30386713的博客 171

论文阅读《Eigen-GNN: A Graph Structure Preserving Plug-in for GNNs》

好久没看论文了,感觉好生疏 关于这篇文章的大致脉络,这篇文章已经介绍过了。

且视他人之疑目如盏盏鬼火,大胆地去走你的夜路 461

文心大模型5.0全量免费开放:全模态能力实战指南

多模态大模型正从‘单任务拼接’迈向‘统一表征协同’的新阶段。其核心原理在于将文本、图像、音频、视频等异构数据映射至同一高维向量空间,实现跨模态语义对齐与联合推理。这种架构天然要求训练、推理与服务调度一体化,因而‘全模态’必须依托‘全量免费开放’才能释放真实生产力——它保障了能力可及性,而非仅限性能上限。技术价值体现在降低AI使用门槛、消除模态割裂断层、支持一线场景即时响应;典型应用场景覆盖办公提效(周报/PPT/会议纪要)、工业诊断(设备图像+传感器数据联合分析)、教育辅助(板书识别→LaTeX公式)、政务

love android 741

Orange Pi 3B+刷入EmuELEC全过程:手把手教程

手把手教你如何在Orange Pi 3B+上成功刷入emuelec系统,涵盖烧录工具、镜像下载到启动设置的完整流程,让复古游戏体验轻松实现。

weixin_35732273的博客 1090

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

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

m0_45806184的博客 2万+

STM32 | DMA配置和使用如此简单(超详细)

DMA学习很难吗?其实DMA配置和使用如此简单!本文让你无论在DMA认识和理解上(抽象不抽象都有)还是在DMA配置和使用上有个彻彻底底的认识。文章包括寄存器和库函数讲解,省去你自行翻阅使用手册和固件库手册,点到点教会你DMA的配置和使用。

。。。 7万+

步进电机

步进电机

happygrilclh的博客 2140

【微信小程序】调用百度API进行图像识别(以植物识别为例)

在微信小程序中调用百度API进行植物识别,并渲染在前端页面中

S_Glora的博客 5089

论文阅读笔记(一)细粒度图像检索

0、参考文献 [1]见微知著 http://geek.youkuaiyun.com/news/detail/191718 [2]Xiu-Shen Wei 《Selective Convolutional Descriptor Aggregation for Fine-Grained Image Retrieval》 [3]Lingxi Xie 《Fine-Grained Image Search》 1...

huang2818138的博客 1万+

基于java识别图片中正方块拼接的字体或内容

java识别字体图片中的内容,并转化成指定的16进制字节数组

qq_14890693的博客 324

NSGA-III相关笔记

NSGA-III目录目的区别NSGA-III的算法流程非支配排序详解归一化详解 目录 NSGA-III基于matlab的实现 参考文献 1.An Evolutionary Many-Objective Optimization Algorithm Using Reference-point Based Non-dominated Sorting Approach,Part I: Solving P...

weixin_42555400的博客 1万+

2026年瑞芯微数字IC设计笔试试卷带答案

本文主要考察数字集成电路设计相关知识,包括低功耗设计、时序分析、跨时钟域处理、总线协议等内容。试题分为单选题、多选题、代码设计题和简答题四部分。 单选题涉及门控时钟降低动态功耗、静态时序分析的限制、跨时钟域同步方案、时序违例修复方法、AHB总线信号、异步FIFO设计、半导体工艺电阻特性、二进制数转换、同步/异步复位比较以及分频电路设计等知识点。 多选题重点考查动态功耗优化技术、亚稳态特性、异步FIFO设计规范、Verilog可综合代码编写要求以及AXI总线协议特点等。 代码设计题要求实现一个同步FIFO和3

Open 215

Java图片识别技术

利用Java语言提取图片上的文字

incgdl的博客 9836

YOLOv11改进 | 上采样篇 | YOLOv11引入DySample轻量级动态上采样器

虽然最近的基于内核的动态上采样器(如CARAFE、FADE和SAPA)的性能提升令人印象深刻,但它们引入了大量工作负载,主要是由于耗时的动态卷积和用于生成动态内核的额外子网。DySample模块的设计旨在解决现有动态上采样器的高计算开销和复杂性问题,同时提供更好的性能和效率。到此本文的正式分享内容就结束了,在这里给大家推荐我的YOLOv11改进有效涨点专栏,本专栏目前为新开的,后期我会根据各种前沿顶会进行论文复现,也会对一些老的改进机制进行补充,如果大家觉得本文帮助到你了,订阅本专栏,关注后续更多的更新~

tsg6698的博客 3125

利用java完成图像文字识别和翻译,实现拍照翻译的功能

需求:利用java完成图像文字识别和翻译,实现拍照翻译的功能 ​ 可拆分为以下两个小的功能逐一完成: (1)实现图像文字识别 (2)将识别出来的文字进行翻译。 1.实现图像文字识别 ​ 利用Tess4J进行图像文字识别 1.1 为方便集成tess4j的jar包,我们先创建一个maven项目,将所需jar包引入pom.xml <dependency> <groupId>net.sourceforge.tess4j</groupId>

qq_43548154的博客 5369

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

【实操】Java+百度ocr,实现图片识别文字小工具

通过Java+百度ocr,实现图片识别文字小工具。从Java Swing页面基础布局,百度ocr配置,将java项目打包成jar,exe4j将jar打包exe四个方面入手,实现功能的同时,也熟悉了其他工具的使用

JavaDog程序狗 3203

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

JAVA实现文字识别

【代码】JAVA实现文字识别。

正月看雪花的博客 1417

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

‍Java OCR技术全面解析:六大解决方案比较

在本篇博文中,我们深入探讨了六种主流的Java OCR(光学字符识别)技术解决方案,旨在为Java开发者提供全面的技术对比和实用指南。从开源神器Tesseract到云服务巨头Google Vision API,再到专业的OCR库如ABBYY,每种解决方案都将通过依赖引入、代码实例、GitHub上的数据集链接、应用场景对比以及优缺点分析进行详细介绍。无论是对于OCR新手还是经验丰富的开发大佬,本文都力求提供一份准确、易读、内容丰富的技术分享,确保每位读者都能找到满足其项目需求的最佳OCR解决方案。解决方案。

猫头虎技术团队:授渔优于赠鱼,兴趣引领智慧,探索之乐尤显珍贵。商务合作+:Libin9iOak ,万粉变现+:优快云WF,猫头虎承诺每年免费为100名C站创作者做账号流量诊断服务!全网搜:猫头虎技术团队,点击文章底部名片或直接私信我一切皆可谈,快找虎哥! 1万+

java实现识别图片上的文字(OCR识别身份证等证件信息)

根据图片识别文字,识别身份证等证件信息

dong__优快云的博客 8101

【方案一】在 Java 项目中扫描识别图片中的文字(ocr识别详细教程)

上传图片文件进行扫描,识别出文字内容。

yszbrzdd的博客 8117

使用Java实现图片文字识别

在 Java 中,图片文字识别可以通过 Tesseract-OCR 的 API 完成。Tesseract-OCR 是一个开源的 OCR(Optical character recognition,光学字符识别)引擎,用于识别各种类型的图片中的文本。此外,我们还需要 Leptonica 库的支持,这是一个用于图像处理和分析的开源库。

很酷的站长的博客 4858

Java调用百度OCR接口实现文字识别

博主在项目开发中需要完成一个文字识别功能,由于之前有过使用百度云平台接口进行身份证识别的经历,因此这次也是自然而然的再次选择了百度AI平台,首先需要开通百度通用文字识别功能。然后注意我们需要获取accessToken,这里我们动态获取。

pengxiang1998的博客 4203
上一篇: 精品文章
下一篇: Spring成神之路第一篇:为何要学Spring
码趣资源网
博客等级 码龄4年 268粉丝 518原创
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值