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

猜你喜欢

转载自blog.csdn.net/china_coding/article/details/130330539