java_批量处理图片转文字

开发原因:

最近前端老师布置作业,要求把书上的一章所有案例都抄一遍。本着借鉴的态度,在网上找了一圈资源,没有找到前端书上的案例源代码。因为有扫描版的书籍的pdf文件,想到可以用qq截图的文字扫描功能来复制粘贴。
问题来了,这需要依次截图几十张,手动创建几十个html文件,手动复制粘贴,麻烦。
所以,可不可以只需要一堆截图,一个程序,就可以直接生成好所有的html文件。

开发环境:
java1.8+

一、阿里云文字识别接口

文字识别需要接口来实现,这里选择了阿里云文字识别接口。当然也可以选择腾讯、科大讯飞等。

👉网站传送:阿里云文字识别官网

1、测试效果

👉:测试网页

image-20220316012359673

使用之前可以在官方测试一下 接口的实现结果是否达到自己的标准

下面是我自己的图的测试效果,效果还是很不错的

书上的原图

image-20220316003819955

官方接口测试

image-20220316003745825

可以看到内容识别没有差错,所有内容均识别成功

返回json串:

观察一下json返回的数据,发现获取到数据中的"content"内容即可

image-20220316004020519

2、依照官方示例使用

👉官方文档:官方文档

阿里云有专门的文字识别接口,使用如下

image-20220316005439336

示例代码是上传网络中的图片,而不是上传电脑本地的图片,如何上传电脑本地的图片,示例如下

详细案例代码再文章的最后部分

读取图片部分的代码

//读取文件夹照片
java.io.InputStream bodySyream = com.aliyun.darabonba.stream.Client.readFromFilePath("文件名");
//将照片写入request
RecognizeAdvancedRequest recognizeAdvancedRequest = new RecognizeAdvancedRequest().setBody(bodySyream);
RecognizeAdvancedResponse response= client.recognizeAdvanced(recognizeAdvancedRequest);

二、案例具体实现

需要实现的功能步骤如下:

  1. 读取指定文件夹下的所有图片文件

  2. 依次遍历图片文件

    1. 将图片传入接口
    2. 将返回的结果以html文件格式输出指定目录

读取所有文件

获取指定目录下的所有文件的文件名

//new一个存放图片的目录
File file=new File("C:\\Users\\bhy\\Desktop\\html\\pictures");
//list()方法获得目录下所有文件的文件名
String [] fileName = file.list();  //用于存放文件底下所有子文件名的数组

遍历处理文件和图片写入接口

for(int i = 0 ; i <fileName.length;i++)
{
    //通过一个阿里云的库获取图片的输入流 (具体依赖导入放在文末
    java.io.InputStream bodySyream = com.aliyun.darabonba.stream.Client.readFromFilePath("C:\\Users\\bhy\\Desktop\\html\\pictures\\"+fileName[i]);

    //图片传入接口
    //将照片写入request
    RecognizeAdvancedRequest recognizeAdvancedRequest = new RecognizeAdvancedRequest().setBody(bodySyream);
    
    
   
    ...
}

处理返回结果

RecognizeAdvancedResponse response= client.recognizeAdvanced(recognizeAdvancedRequest);
//获取json数据中的内容
JSONObject  jsonObject = new JSONObject(response.getBody().getData());
String outcome = jsonObject.getString("content");

//测试内容
//System.out.println(jsonObject.getString("content"));

//将返回结果输出html文件放入指定文件夹中
File writeName = new File("C:\\Users\\bhy\\Desktop\\html\\outcomes\\html"+String.valueOf(i+1)+".html");
writeName.createNewFile();
try (FileWriter writer = new FileWriter(writeName);
     BufferedWriter out = new BufferedWriter(writer)
    ) {
    out.write(outcome);
    out.flush(); // 把缓存区内容压入文件
}

三、效果

输入(书上的截图)
image-20220316011902080

程序执行后的输出结果

image-20220316011943368
网页基本上都显示成功,nice👍

四、 pom依赖 和 具体代码实现

maven导入依赖pom.xml

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.aliyun</groupId>
    <artifactId>sample</artifactId>
    <version>1.0.0</version>
    <packaging>jar</packaging>
    <name>sample</name>
    <description>Alibaba Cloud SDK Code Sample for Java
    </description>
    <url>https://github.com/aliyun/alibabacloud-code-sample</url>
    <licenses>
        <license>
            <name></name>
            <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
        </license>
    </licenses>
    <developers>
        <developer>
            <id>aliyundeveloper</id>
            <name>Aliyun SDK</name>
            <email>aliyunsdk@aliyun.com</email>
        </developer>
    </developers>
    <distributionManagement>
        <snapshotRepository>
            <id>sonatype-nexus-snapshots</id>
            <url>https://s01.oss.sonatype.org/content/repositories/snapshots</url>
        </snapshotRepository>
        <repository>
            <id>sonatype-nexus-staging</id>
            <url>https://s01.oss.sonatype.org/service/local/staging/deploy/maven2/</url>
        </repository>
    </distributionManagement>
    <scm>
        <connection></connection>
        <developerConnection></developerConnection>
        <url></url>
    </scm>
    <dependencies>
        <dependency>
            <groupId>org.json</groupId>
            <artifactId>json</artifactId>
            <version>20160810</version>
        </dependency>
        <dependency>
            <groupId>com.aliyun</groupId>
            <artifactId>ocr_api20210707</artifactId>
            <version>1.1.1</version>
        </dependency>
        <dependency>
            <groupId>com.aliyun</groupId>
            <artifactId>darabonba-stream</artifactId>
            <version>0.0.1</version>
        </dependency>
        <dependency>
            <groupId>com.aliyun</groupId>
            <artifactId>tea-openapi</artifactId>
            <version>0.2.0</version>
        </dependency>
        <dependency>
            <groupId>com.aliyun</groupId>
            <artifactId>tea-console</artifactId>
            <version>0.0.1</version>
        </dependency>
        <dependency>
            <groupId>com.aliyun</groupId>
            <artifactId>tea-util</artifactId>
            <version>0.2.13</version>
        </dependency>
        <dependency>
            <groupId>com.aliyun</groupId>
            <artifactId>tea</artifactId>
            <version>1.1.14</version>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.6.1</version>
                <configuration>
                    <source>7</source>
                    <target>7</target>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-gpg-plugin</artifactId>
                <version>1.6</version>
                <executions>
                    <execution>
                        <id>sign-artifacts</id>
                        <phase>verify</phase>
                        <goals>
                            <goal>sign</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.sonatype.plugins</groupId>
                <artifactId>nexus-staging-maven-plugin</artifactId>
                <version>1.6.3</version>
                <extensions>true</extensions>
                <configuration>
                    <serverId>sonatype-nexus-staging</serverId>
                    <nexusUrl>https://s01.oss.sonatype.org/</nexusUrl>
                    <autoReleaseAfterClose>true</autoReleaseAfterClose>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-javadoc-plugin</artifactId>
                <version>3.1.1</version>
                <configuration>
                    <encoding>UTF-8</encoding>
                    <doclint>none</doclint>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>2.22.1</version>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-assembly-plugin</artifactId>
                <version>2.4.1</version>
                <configuration>
                    <descriptorRefs>
                        <descriptorRef>jar-with-dependencies</descriptorRef>
                    </descriptorRefs>
                    <archive>
                        <manifest>
                            <addClasspath>true</addClasspath>
                            <mainClass>com.aliyun.sample.Sample</mainClass>
                        </manifest>
                    </archive>
                </configuration>
                <executions>
                    <execution>
                        <id>make-assembly</id>
                        <phase>package</phase>
                        <goals>
                            <goal>single</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>

java代码

import com.aliyun.ocr_api20210707.Client;
import com.aliyun.ocr_api20210707.models.RecognizeAdvancedRequest;
import com.aliyun.ocr_api20210707.models.RecognizeAdvancedResponse;
import com.aliyun.teaopenapi.models.Config;
import com.aliyun.teautil.models.RuntimeOptions;
import org.json.JSONObject;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;

public class test {
    public static void main(String[] args) throws Exception {

        // 1 创建Config实例并初始化
        Config authConfig = new Config();
        authConfig.accessKeyId = "阿里云用户的accesskeyid";
        authConfig.accessKeySecret = "阿里云用户的accesskeysecret";
        
        // 文字识别的服务入口
        authConfig.endpoint = "ocr-api.cn-hangzhou.aliyuncs.com";
        Client client = new Client(authConfig);

        // 2 创建RuntimeObject实例并设置运行参数
        RuntimeOptions runtime = new RuntimeOptions();
        // 是否开启失败重试
        runtime.autoretry = true;
        // 最大重试次数
        runtime.maxAttempts = 5;

        // 3 创建API请求并设置参数

        //设置图片文件
        File file=new File("C:\\Users\\bhy\\Desktop\\html\\pictures");
        String [] fileName = file.list();  //用于存放文件底下所有子文件名的数组

        for(int i = 0 ; i <fileName.length;i++)
        {
            //读取文件夹照片
            java.io.InputStream bodySyream = com.aliyun.darabonba.stream.Client.readFromFilePath("C:\\Users\\bhy\\Desktop\\html\\pictures\\"+fileName[i]);
            //将照片写入request
            RecognizeAdvancedRequest recognizeAdvancedRequest = new RecognizeAdvancedRequest().setBody(bodySyream);
            RecognizeAdvancedResponse response= client.recognizeAdvanced(recognizeAdvancedRequest);
            //获取json数据中的内容
            JSONObject  jsonObject = new JSONObject(response.getBody().getData());
            String outcome = jsonObject.getString("content");

            //测试内容
            //System.out.println(jsonObject.getString("content"));

            File writeName = new File("C:\\Users\\bhy\\Desktop\\html\\outcomes\\html"+String.valueOf(i+1)+".html");
            writeName.createNewFile();
            try (FileWriter writer = new FileWriter(writeName);
                 BufferedWriter out = new BufferedWriter(writer)
                ) {
                out.write(outcome);
                out.flush(); // 把缓存区内容压入文件
            }
        }
    }
}


  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

WWWOWhite

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

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

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

打赏作者

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

抵扣说明:

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

余额充值