java做图文识别

现在的世界,什么都需要人工智能AI进行处理,那么,对于Java程序猿来说,是不是有些工作是不是就不能胜任呢,答案是显然是不一定的,对于图片识别来说,这个任务就可以使用Java进行开发,虽然效率可能不是最好的,但是,结果是一致的。
下面我就开始出大招了
第一步,添加技能点
如果需要进行图片识别,那么肯定需要识别的插件或者是一个库呀,不然程序怎么清楚是识别那些东西,识别是中文还是英文,对不对,这个时候呢,就出现了“野怪”——ocr,给我们提供支持,从而进行升级添加技能点
什么事OCR,这个大家可以自行百度,其主要作用就是为我们进行识别图片中的文字的一个重要角色,下载方式直接百度tesseract下载就行
下载完成后,需要进行配置环境变量,我这也不进行过多描述,可以自行百度,如果需要,可后续追加一篇配置下载的博客说明
那么野怪位置找到了,我们就需要开始刷怪升级了
第二步,添加词库
需要识别文字,那么武器必不可少,如果没有装备,野怪也是能秒人的,所以,我们需要去下载一些词库,例如中文词库:chi_sim.traineddata,下载方式也可在百度上进行下载下来,下载完成后,在刚刚安装的tesseract下找到tessdata文件夹,将其复制过来就可以了,我的是D盘下,所以位置如下图
在这里插入图片描述
移动过来后,我们就有武器了,开始刷怪
第三步,开大,结束战斗(前方高能)

    public static String IdentifyThePicture(){
        //识别图片
        System.out.println("开始识别");
        long starttime = System.currentTimeMillis();
        //获取当前程序执行绝对路径。
        String text = orcde("normal", "D:\\tesseract-ocr\\tessdata", "D://JT//1.png");
        System.out.println("discriminate interval:" + (System.currentTimeMillis() - starttime) + ",ocr text:" + text);
        return text;
    }
public static String orcde(String lang, String langpath, String imageurl){
        // 识别图片的路径(修改为自己的图片路径)
        String path = imageurl;

        // 语言库位置(修改为跟自己语言库文件夹的路径)
        String lagnguagePath = langpath;

        File file = new File(path);
        ITesseract instance = new Tesseract();

        //设置训练库的位置
        instance.setDatapath(lagnguagePath);

        //chi_sim :简体中文, eng    根据需求选择语言库
        instance.setLanguage(lang);
        String result = null;
        try {
            long startTime = System.currentTimeMillis();
            result =  instance.doOCR(file);
            long endTime = System.currentTimeMillis();
            System.out.println("Time is:" + (endTime - startTime) + " 毫秒");
        } catch (TesseractException e) {
            e.printStackTrace();
        }

        System.out.println("result: ");
        System.out.println(result);
       return result;
    }

运行结果如下:
在这里插入图片描述
图片中的内容如下:
在这里插入图片描述
你是不是发现有两个字不对,这个咱暂时不告诉你,请继续往下看
代码看起来是不是很简单,(你心里觉得是这样想的)因为这是有野怪,如果没有野怪怎么办,或者等级不够怎么办(1级单挑100级?)显然是不可以的,这个时候就需要进行训练了,训练啥,训练词库,怎么训练,如下:
第一步,下载jTessBoxEditor_jb51(找到新手训练营)
jTessBoxEditor_jb51这是啥东西,我告诉你,这个是训练词库必须要用的一个jar包,但是呢,他不是在项目里面使用的,而是独立运行的,怎么使用,待会就来
第二步,生产词条(找到野怪)
怎么生产词条,也就将你需要识别的一些文字,做成一个jpg的图片,怎么做,直接截图呗,然后保存为jpg就行了
是不是说好简单,还没完呢!
有了jpg图片后,需要对其改变格式,不能手动改变后缀,需要通过格式工厂,或者在线转换插件进行转换,将jpg的图片转换为tif的文件格式,然后启动我们的新手训练营jTessBoxEditor_jb51,(里面有一个启动脚本的了)
在这里插入图片描述
就是上面圈住的这个bat脚本,启动后,会出来一个Java窗口
在这里插入图片描述
先过去将刚刚的图片更改图片名字,这个是有要求的

tif文面命名格式[lang].[fontname].exp[num].tif
lang是语言           fontname是字体
比如我们要训练自定义字库myfontlab      字体名normal
那么我们把图片文件重命名 myfontlab.normal.exp0.jpg在转tif。

在这里插入图片描述

这个时候呢,我们需要打开黑命令框(CMD)输入命令生成box文件

tesseract myfontlab.normal.exp0.jpg myfontlab.normal.exp0 -l chi_sim batch.nochop makebox

运行结果如图
在这里插入图片描述
然后就会产生一个新的文件在该文件夹下
在这里插入图片描述
这个时候就需要用的我们的jTessBoxEditor_jb51了,点击open,选择刚刚处理过得tif文件图片得到下面结果数据
在这里插入图片描述
在这里插入图片描述

然后开始修改我们不对的字第5行的窝应该是我,所以需要进修改,选择改行,
在这里插入图片描述
然后点击save进保存,这个时候就词条就生产完毕了需要导入到我们的词库中去

第三步,词条添加到词库中(捡装备了)
cmd中输入命令,生成.tr文件

tesseract  myfontlab.normal.exp0.jpg  myfontlab.normal.exp0  nobatch box.train

在这里插入图片描述
再输入命令,生成unicharset文件

unicharset_extractor myfontlab.normal.exp0.box

在这里插入图片描述

新建一个font_properties.txt文件
里面内容写入 normal 0 0 0 0 0 表示默认普通字体
运行命令

shapeclustering -F font_properties.txt -U unicharset myfontlab.normal.exp0.tr

在这里插入图片描述

mftraining -F font_properties.txt -U unicharset -O unicharset myfontlab.normal.exp0.tr

在这里插入图片描述

cntraining myfontlab.normal.exp0.tr

在这里插入图片描述
目录下会生成对应下列五个文件,在这五个文件前加上normal.进行重命名
在这里插入图片描述
合并五个文件,此时目录下的normal.traineddata 就是训练好的字库文件
执行 命令

combine_tessdata normal. 

在这里插入图片描述
最后就产生了一个新的文件,这就是刚刚训练出来的词库
在这里插入图片描述
最后将新的词库放人的OCR中就行了,怎么放,教你
把normal.traineddata 复制到Tesseract-OCRt程序目录下的“tessdata”目录,
在Tesseract-OCRt程序目录下执行

tesseract.exe myfontlab.normal.exp0.jpg out –l normal

在这里插入图片描述
这个时候,词库就好了,再运行一下试试
在这里插入图片描述
完美,图文识别成功

疯狂打架去吧,再也不用担心打不过了 ^_^

以上内容可能有不正确的地方,望大佬指正,如果需要下载配置介绍,欢迎评论去留言哦
附上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.5.4</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.play</groupId>
    <artifactId>play</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>play</name>
    <description>Demo project for Spring Boot</description>
    <properties>
        <java.version>1.8</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <!--tesseract-platform里面包含了所有tesseract所需要的jar-->
        <dependency>
            <groupId>org.bytedeco.javacpp-presets</groupId>
            <artifactId>tesseract-platform</artifactId>
            <version>3.04.01-1.3</version>
        </dependency>

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

    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

  • 8
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
以下是使用百度AI识别图片Java代码示例: ```java import java.util.ArrayList; import java.util.HashMap; import java.util.List; import com.baidu.aip.imageclassify.AipImageClassify; import org.json.JSONArray; import org.json.JSONObject; public class ImageClassify { // 设置APPID/AK/SK public static final String APP_ID = "your_app_id"; public static final String API_KEY = "your_api_key"; public static final String SECRET_KEY = "your_secret_key"; public static void main(String[] args) { // 初始化一个AipImageClassify AipImageClassify client = new AipImageClassify(APP_ID, API_KEY, SECRET_KEY); // 可选:设置网络连接参数 client.setConnectionTimeoutInMillis(2000); client.setSocketTimeoutInMillis(60000); // 调用接口 String path = "your_image_path"; JSONObject res = client.advancedGeneral(path, new HashMap<String, String>()); System.out.println(res.toString(2)); // 解析返回结果 JSONArray resultArray = res.getJSONArray("result"); List<String> resultList = new ArrayList<>(); for (int i = 0; i < resultArray.length(); i++) { JSONObject obj = resultArray.getJSONObject(i); String keyword = obj.getString("keyword"); resultList.add(keyword); } System.out.println("识别结果:" + resultList); } } ``` 其中,`APP_ID`、`API_KEY`和`SECRET_KEY`需要替换为自己在百度AI开放平台创建应用后获取的对应信息。`path`为待识别图片路径,`res`为识别结果,可以通过`res.toString(2)`将其以JSON格式输出。最后,从识别结果中解析出关键词即可。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值