使用之前需要获取对应的项目API_KEY,SECRET_KEY,这些参数在使用API的时候必须用到,用于生成access_token。
如何获取这些参数:在百度开发者中心申请一个“通用文字识别”项目,然后就可以获取到这些参数。

十分钟快速教程

1、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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
 
    <groupId>cn.within</groupId>
    <artifactId>baiduSearch</artifactId>
    <version>1.0-SNAPSHOT</version>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>1.7</source>
                    <target>1.7</target>
                </configuration>
            </plugin>
        </plugins>
    </build>
    <dependencies>
    <!-- https://mvnrepository.com/artifact/com.alibaba/fastjson -->
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>fastjson</artifactId>
        <version>1.2.46</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.apache.httpcomponents/httpclient -->
    <dependency>
        <groupId>org.apache.httpcomponents</groupId>
        <artifactId>httpclient</artifactId>
        <version>4.5.5</version>
    </dependency>
    <dependency>
        <groupId>com.vaadin.external.google</groupId>
        <artifactId>android-json</artifactId>
        <version>0.0.20131108.vaadin1</version>
    </dependency>
</dependencies>
 
</project>
 2、获取access_token

package search;
 
/**
 * Created by within on 2018/10/9.
 */
import org.json.JSONObject;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.List;
import java.util.Map;
/**
 * 获取token类
 *
 * @Author : within
 */
 
public class AuthService {
 
    /**
     * 获取权限token
     * @return 返回示例:
     * {
     * "access_token": "24.460da4889caad24cccdb1fea17221975.2592000.1491995545.282335-1234567",
     * "expires_in": 2592000
     * }
     */
    public static String getAuth() {
        // 官网获取的 API Key 更新为你注册的
        String clientId = "0ddYMfgtVSqcE9qMQxHhZ4Yc";
        // 官网获取的 Secret Key 更新为你注册的
        String clientSecret = "XXXNKZlv1gi60a04pzABadI9KgDbfkRM";
        return getAuth(clientId, clientSecret);
    }
 
    /**
     * 获取API访问token
     * 该token有一定的有效期,需要自行管理,当失效时需重新获取.
     * @param ak - 百度云官网获取的 API Key
     * @param sk - 百度云官网获取的 Securet Key
     * @return assess_token 示例:
     * "24.460da4889caad24cccdb1fea17221975.2592000.1491995545.282335-1234567"
     */
    private static String getAuth(String ak, String sk) {
        // 获取token地址
        String authHost = "https://aip.baidubce.com/oauth/2.0/token?";
        String getAccessTokenUrl = authHost
                // 1\. grant_type为固定参数
                + "grant_type=client_credentials"
                // 2\. 官网获取的 API Key
                + "&client_id=" + ak
                // 3\. 官网获取的 Secret Key
                + "&client_secret=" + sk;
        try {
            URL realUrl = new URL(getAccessTokenUrl);
            // 打开和URL之间的连接
            HttpURLConnection connection = (HttpURLConnection) realUrl.openConnection();
            connection.setRequestMethod("GET");
            connection.connect();
            // 获取所有响应头字段
            Map<String, List<String>> map = connection.getHeaderFields();
            // 遍历所有的响应头字段
            for (String key : map.keySet()) {
                System.err.println(key + "--->" + map.get(key));
            }
            // 定义 BufferedReader输入流来读取URL的响应
            BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
            StringBuilder result = new StringBuilder();
            String line;
            while ((line = in.readLine()) != null) {
                result.append(line);
            }
            /**
             * 返回结果示例
             */
            System.err.println("result:" + result);
            JSONObject jsonObject = new JSONObject(result.toString());
            return jsonObject.getString("access_token");
        } catch (Exception e) {
            System.err.printf("获取token失败!");
            e.printStackTrace(System.err);
        }
        return null;
    }
 
    public static void main(String[] args) {
        getAuth();
    }
 
}
3、编写将图片转化成base64后再转化成urlencode的工具类

package search;
 
/**
 * Created by within on 2018/10/9.
 */
import sun.misc.BASE64Encoder;
 
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URLEncoder;
 
/**
 * 图片转化base64后再UrlEncode结果
 * @Author : within
 */
 
class BaseImg64 {
    /**
     * 将一张本地图片转化成Base64字符串
     * @param imgPath 本地图片地址
     * @return 图片转化base64后再UrlEncode结果
     */
    public static String getImageStrFromPath(String imgPath) {
        InputStream in;
        byte[] data = null;
        // 读取图片字节数组
        try {
            in = new FileInputStream(imgPath);
            data = new byte[in.available()];
            in.read(data);
            in.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
        // 对字节数组Base64编码
        BASE64Encoder encoder = new BASE64Encoder();
        // 返回Base64编码过再URLEncode的字节数组字符串
        return URLEncoder.encode(encoder.encode(data));
    }
}
 4、编写调用百度API接口的方法,获取识别结果

package search;
 
/**
 * Created by within on 2018/10/9.
 */
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;
 
import java.io.File;
import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
 
/**
 * 图像文字识别
 *
 * @Author : within
 */
 
public class check {
    private static final String POST_URL = "https://aip.baidubce.com/rest/2.0/ocr/v1/general_basic?access_token=" + AuthService.getAuth();
 
    /**
     * 识别本地图片的文字
     *
     * @param path 本地图片地址
     * @return 识别结果,为json格式
     * @throws URISyntaxException URI打开异常
     * @throws IOException        io流异常
     */
    public static String checkFile(String path) throws URISyntaxException, IOException {
        File file = new File(path);
        if (!file.exists()) {
            throw new NullPointerException("图片不存在");
        }
        String image = BaseImg64.getImageStrFromPath(path);
        String param = "image=" + image;
        return post(param);
    }
 
    /**
     * @param url 图片url
     * @return 识别结果,为json格式
     */
    public static String checkUrl(String url) throws IOException, URISyntaxException {
        String param = "url=" + url;
        return post(param);
    }
 
    /**
     * 通过传递参数:url和image进行文字识别
     *
     * @param param 区分是url还是image识别
     * @return 识别结果
     * @throws URISyntaxException URI打开异常
     * @throws IOException        IO流异常
     */
    private static String post(String param) throws URISyntaxException, IOException {
        //开始搭建post请求
        HttpClient httpClient = new DefaultHttpClient();
        HttpPost post = new HttpPost();
        URI url = new URI(POST_URL);
        post.setURI(url);
        //设置请求头,请求头必须为application/x-www-form-urlencoded,因为是传递一个很长的字符串,不能分段发送
        post.setHeader("Content-Type", "application/x-www-form-urlencoded");
        StringEntity entity = new StringEntity(param);
        post.setEntity(entity);
        HttpResponse response = httpClient.execute(post);
        System.out.println(response.toString());
        if (response.getStatusLine().getStatusCode() == 200) {
            String str;
            try {
                /*读取服务器返回过来的json字符串数据*/
                str = EntityUtils.toString(response.getEntity());
                System.out.println(str);
                return str;
            } catch (Exception e) {
                e.printStackTrace();
                return null;
            }
        }
        return null;
    }
 
    public static void main(String[] args) {
        String path = "D:\\ddd\\b.jpg";
        try {
            long now = System.currentTimeMillis();
            checkFile(path);
            checkUrl("https://gss3.bdstatic.com/-Po3dSag_xI4khGkpoWK1HF6hhy/baike/c0%3Dbaike80%2C5%2C5%2C80%2C26/sign=08c05c0e8444ebf8797c6c6db890bc4f/fc1f4134970a304e46bfc5f7d2c8a786c9175c19.jpg");
            System.out.println("耗时:" + (System.currentTimeMillis() - now) / 1000 + "s");
        } catch (URISyntaxException | IOException e) {
            e.printStackTrace();
        }
    }
}
5、结果对比:

HTTP/1.1 200 OK [Appid: 14374247, Connection: keep-alive, Content-Type: application/json, Date: Tue, 09 Oct 2018 02:33:39 GMT, P3p: CP=" OTI DSP COR IVA OUR IND COM ", P3p: CP=" OTI DSP COR IVA OUR IND COM ", P3p: CP=" OTI DSP COR IVA OUR IND COM ", Server: Apache, Set-Cookie: BAIDUID=85ED51BC904917BC65233AB4200AD43E:FG=1; expires=Wed, 09-Oct-19 02:33:39 GMT; max-age=31536000; path=/; domain=.baidu.com; version=1, Set-Cookie: BAIDUID=90083625BD94E791CA9F2204797662B5:FG=1; expires=Thu, 31-Dec-37 23:55:55 GMT; max-age=2145916555; path=/; domain=.baidu.com; version=1, Set-Cookie: BAIDUID=08654EC80A32DEBA38E50B18A85EDC5D:FG=1; expires=Thu, 31-Dec-37 23:55:55 GMT; max-age=2145916555; path=/; domain=.baidu.com; version=1, Tracecode: 20198605130249338634100910, Vary: Accept-Encoding, Vary: Accept-Encoding, Content-Length: 317] org.apache.http.conn.BasicManagedEntity@4461c7e3
{"log_id": 597441327730160468, "words_result_num": 5, "words_result": [{"words": "你想過普通的生活就會遇到普通的挫折"}, {"words": "你想過上最好的生活②"}, {"words": "就一定會遇上最强的傷害"}, {"words": "這世界很公平"}, {"words": "你想要最好就一定會給你最痛"}]}
十月 09, 2018 10:33:39 上午 org.apache.http.client.protocol.ResponseProcessCookies processCookies

--------------------- 
作者:@Within 
来源:CSDN 
原文:https://blog.csdn.net/qq_41264674/article/details/82979029 
版权声明:本文为博主原创文章,转载请附上博文链接!

Java基于百度API的图片文字识别相关推荐

  1. Java基于百度API的图片文字识别(支持中文,英文和中英文混合)

    点击上方"好好学java",选择"置顶公众号" 优秀学习资源.干货第一时间送达! 精彩内容 java实战练习项目教程 2018微服务资源springboot.s ...

  2. java 图像识别包_Java基于百度API的图片文字识别免费源码和jar包

    1.准备工作(jdk1.8) 使用之前需要获取对应的项目API_KEY,SECRET_KEY,这些参数在使用API的时候必须用到,用于生成access_token. 如何获取这些参数? 登陆后创建一个 ...

  3. Java-基于百度API的图片文字识别(支持中文,英文和中英文混合)

    具体文档:http://ai.baidu.com/docs#/OCR-API/e1bd77f3 PS: 基于Java 1.8 版本控制:maven 使用之前需要获取对应的项目API_KEY,SECRE ...

  4. Android Studio调用百度API(图片文字识别)

    1.登录百度AI平台(https://ai.baidu.com/),下载license文件 包名填写内容: 下载好的文件夹内包含四个文件 (OCR-Android-SDK.md文件里有使用说明) (1 ...

  5. Java调用百度OCR文字识别API实现图片文字识别软件

    java_baidu_ocr Java调用百度OCR文字识别API实现图片文字识别软件 这是一款小巧方便,强大的文字识别软件,由Java编写,配上了窗口界面 调用了百度ocr文字识别API 识别精度高 ...

  6. java ocr api_Java调用百度OCR文字识别API实现图片文字识别软件

    Java调用百度OCR文字识别API实现图片文字识别软件 原创isinple 发布于2019-01-06 13:35:59 阅读数 1296 收藏 展开 java_baidu_ocr Java调用百度 ...

  7. python调用百度接口实现ocr识别_Python调用百度OCR实现图片文字识别的示例代码

    百度AI提供了一天50000次的免费文字识别额度,可以愉快的免费使用!下面直接上方法: 首先在百度AI创建一个应用,按照下图创建即可,创建后会获得如下: 创建后会获得如下信息: APP_ID = '* ...

  8. python 百度ocr安装_Python调用百度OCR实现图片文字识别的示例代码

    百度AI提供了一天50000次的免费文字识别额度,可以愉快的免费使用!下面直接上方法: 首先在百度AI创建一个应用,按照下图创建即可,创建后会获得如下: 创建后会获得如下信息: APP_ID = '* ...

  9. 英文识别 java_Java-百度API的图片文字识别(支持英文)

    PS: 基于Java 1.8 版本控制:maven 使用之前需要获取对应的项目API_KEY,SECRET_KEY,这些参数在使用API的时候必须用到,用于生成access_token. 如何获取这些 ...

最新文章

  1. HDU3072(Kosaraju算法)
  2. quick cocos2d-x 使用CCTableView 例子
  3. 产品诞生过程--导图
  4. 洛谷P2870 [USACO07DEC]最佳牛线,黄金Best Cow Line, Gold
  5. mybatis编写一个查询数据库表的程序
  6. 基于 AWS 的一站式分布式数据库测试体系,简单易上手|TiDB Hackathon 2020 优秀项目分享
  7. 娓娓道来图模型、图查询、图计算和图学习知识
  8. 【程序人生】为什么开通博客?
  9. 复现 ASPCMS企业建站系统Cookies欺骗漏洞
  10. 微信H5生成海报图片并保存到手机
  11. uniapp选择图片及图片预览的实现
  12. 计算机操作系统的pv是什么意思,计算机操作系统关于PV操作的一道题
  13. json数据条件查询,json数据sql查询中文乱码
  14. 英语语法——句子分类
  15. 图片怎么转换成PDF格式?这两种方法都可以实现转换
  16. 技巧:Vimdiff 使用
  17. 使用 PyTorch 检测眼部疾病
  18. 官方QQ批量解除单向好友
  19. java文本复制和键盘输入文字保存到文件
  20. 不会Ps?没关系,这些在线平面设计网站,很实用

热门文章

  1. 给你的网页添加动画效果
  2. 不能让下属知道的 (下)
  3. 使用Stardock的围栏整理凌乱的桌面
  4. Tensor的创建方法
  5. 什么是物理地址、虚拟地址、总线地址
  6. 一文看懂基站无源交调
  7. KDE桌面没有网络部件
  8. 企业为什么要制作手机网站
  9. 松木ME2345A-G(替换)长电CJ3401A,P沟道30V低压MOS管方案!
  10. 高中学术|在重量级国际数学竞赛中,汇佳学校学子斩获大奖!