一、注册一个百度账号
二、点击下方链接使用百度账号登录百度智能云

百度智能云登录地址:https://login.bce.baidu.com/

三、进入百度智能云个人中心,找到图像识别

四、点击创建图像识别应用


五、创建成功(一定要记住这个API Key和Secret Key)

六、打开百度AI开放平台,找到图像识别

百度AI开发平台地址:http://ai.baidu.com/

七、打开动物识别界面,打开技术文档


八、点击下方链接进行Access Token获取

方式一:查找动物识别的文档,稍微往下翻一下就看到了下面的内容,然后点击Access Token获取

方式二:点击链接地址:https://ai.baidu.com/docs#/Auth/top 进行Access Token获取

九、打开IDEA创建一个包

十、创建一个类名为AuthService的java文件


这里的 API Key和Secret Key下面的代码会用到

代码如下

package com.baidu.ai.aip.auth;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类*/
public class AuthService {public static void main(String[] args) {getAuth();   }    //百度技术文档里面是没有主方法的,这里需要自己创建,然后调用getAuth()/*** 获取权限token* @return 返回示例:* {* "access_token": "24.460da4889caad24cccdb1fea17221975.2592000.1491995545.282335-1234567",* "expires_in": 2592000* }*/public static String getAuth() {// 官网获取的 API Key 更新为你注册的(唯一需要收到的更改的地方  将百度云应用的AK---->API Key)String clientId = "百度云应用的AK";// 官网获取的 Secret Key 更新为你注册的(唯一需要收到的更改的地方  将百度云应用的AK---->Secret Key)String clientSecret = "百度云应用的SK";return getAuth(clientId, clientSecret);}/*** 获取API访问token* 该token有一定的有效期,需要自行管理,当失效时需重新获取.* @param ak - 百度云官网获取的 API Key* @param sk - 百度云官网获取的 Securet Key* @return assess_token 示例:* "24.460da4889caad24cccdb1fea17221975.2592000.1491995545.282335-1234567"*/public 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()));String result = "";String line;while ((line = in.readLine()) != null) {result += line;}/*** 返回结果示例*/System.err.println("result:" + result);JSONObject jsonObject = new JSONObject(result);String access_token = jsonObject.getString("access_token");return access_token;} catch (Exception e) {System.err.printf("获取token失败!");e.printStackTrace(System.err);}return null;}}
十一、点击运行获取access_token的值(一串数字)


小编这里运行产生的值是(一定要记住,最好找一个记事本复制进去):24.0e499aea1d600d794a1f4226604d3df1.2592000.1576589696.282335-17789002

十二、回到我们的动物识别的技术文档

十三、找到请求代码示例,选择Java

十四、下面需要下载四个FileUtil,Base64Util,HttpUtil,GsonUtils.java文件

百度官方提供的所需工具类的下载地址

/*** 重要提示代码中所需工具类* 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* 下载*/

将这四个.java文件放入你的项目下面

package baiduapi;/*** Base64 工具类*/
public class Base64Util {private static final char last2byte = (char) Integer.parseInt("00000011", 2);private static final char last4byte = (char) Integer.parseInt("00001111", 2);private static final char last6byte = (char) Integer.parseInt("00111111", 2);private static final char lead6byte = (char) Integer.parseInt("11111100", 2);private static final char lead4byte = (char) Integer.parseInt("11110000", 2);private static final char lead2byte = (char) Integer.parseInt("11000000", 2);private static final char[] encodeTable = new char[]{'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '+', '/'};public Base64Util() {}public static String encode(byte[] from) {StringBuilder to = new StringBuilder((int) ((double) from.length * 1.34D) + 3);int num = 0;char currentByte = 0;int i;for (i = 0; i < from.length; ++i) {for (num %= 8; num < 8; num += 6) {switch (num) {case 0:currentByte = (char) (from[i] & lead6byte);currentByte = (char) (currentByte >>> 2);case 1:case 3:case 5:default:break;case 2:currentByte = (char) (from[i] & last6byte);break;case 4:currentByte = (char) (from[i] & last4byte);currentByte = (char) (currentByte << 2);if (i + 1 < from.length) {currentByte = (char) (currentByte | (from[i + 1] & lead2byte) >>> 6);}break;case 6:currentByte = (char) (from[i] & last2byte);currentByte = (char) (currentByte << 4);if (i + 1 < from.length) {currentByte = (char) (currentByte | (from[i + 1] & lead4byte) >>> 4);}}to.append(encodeTable[currentByte]);}}if (to.length() % 4 != 0) {for (i = 4 - to.length() % 4; i > 0; --i) {to.append("=");}}return to.toString();}
}
package baiduapi;import java.io.*;/*** 文件读取工具类*/
public class FileUtil {/*** 读取文件内容,作为字符串返回*/public static String readFileAsString(String filePath) throws IOException {File file = new File(filePath);if (!file.exists()) {throw new FileNotFoundException(filePath);} if (file.length() > 1024 * 1024 * 1024) {throw new IOException("File is too large");} StringBuilder sb = new StringBuilder((int) (file.length()));// 创建字节输入流  FileInputStream fis = new FileInputStream(filePath);  // 创建一个长度为10240的Bufferbyte[] bbuf = new byte[10240];  // 用于保存实际读取的字节数  int hasRead = 0;  while ( (hasRead = fis.read(bbuf)) > 0 ) {  sb.append(new String(bbuf, 0, hasRead));  }  fis.close();  return sb.toString();}/*** 根据文件路径读取byte[] 数组*/public static byte[] readFileByBytes(String filePath) throws IOException {File file = new File(filePath);if (!file.exists()) {throw new FileNotFoundException(filePath);} else {ByteArrayOutputStream bos = new ByteArrayOutputStream((int) file.length());BufferedInputStream in = null;try {in = new BufferedInputStream(new FileInputStream(file));short bufSize = 1024;byte[] buffer = new byte[bufSize];int len1;while (-1 != (len1 = in.read(buffer, 0, bufSize))) {bos.write(buffer, 0, len1);}byte[] var7 = bos.toByteArray();return var7;} finally {try {if (in != null) {in.close();}} catch (IOException var14) {var14.printStackTrace();}bos.close();}}}
}

下面的这个GsonUtils.java会报错,解决方面在下面!

/** Copyright (C) 2017 Baidu, Inc. All Rights Reserved.*/
package baiduapi;import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.JsonParseException;import java.lang.reflect.Type;/*** Json工具类.*/
public class GsonUtils {private static Gson gson = new GsonBuilder().create();public static String toJson(Object value) {return gson.toJson(value);}public static <T> T fromJson(String json, Class<T> classOfT) throws JsonParseException {return gson.fromJson(json, classOfT);}public static <T> T fromJson(String json, Type typeOfT) throws JsonParseException {return (T) gson.fromJson(json, typeOfT);}
}
package baiduapi;import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.List;
import java.util.Map;/*** http 工具类*/
public class HttpUtil {public static String post(String requestUrl, String accessToken, String params)throws Exception {String contentType = "application/x-www-form-urlencoded";return HttpUtil.post(requestUrl, accessToken, contentType, params);}public static String post(String requestUrl, String accessToken, String contentType, String params)throws Exception {String encoding = "UTF-8";if (requestUrl.contains("nlp")) {encoding = "GBK";}return HttpUtil.post(requestUrl, accessToken, contentType, params, encoding);}public static String post(String requestUrl, String accessToken, String contentType, String params, String encoding)throws Exception {String url = requestUrl + "?access_token=" + accessToken;return HttpUtil.postGeneralUrl(url, contentType, params, encoding);}public static String postGeneralUrl(String generalUrl, String contentType, String params, String encoding)throws Exception {URL url = new URL(generalUrl);// 打开和URL之间的连接HttpURLConnection connection = (HttpURLConnection) url.openConnection();connection.setRequestMethod("POST");// 设置通用的请求属性connection.setRequestProperty("Content-Type", contentType);connection.setRequestProperty("Connection", "Keep-Alive");connection.setUseCaches(false);connection.setDoOutput(true);connection.setDoInput(true);// 得到请求的输出流对象DataOutputStream out = new DataOutputStream(connection.getOutputStream());out.write(params.getBytes(encoding));out.flush();out.close();// 建立实际的连接connection.connect();// 获取所有响应头字段Map<String, List<String>> headers = connection.getHeaderFields();// 遍历所有的响应头字段for (String key : headers.keySet()) {System.err.println(key + "--->" + headers.get(key));}// 定义 BufferedReader输入流来读取URL的响应BufferedReader in = null;in = new BufferedReader(new InputStreamReader(connection.getInputStream(), encoding));String result = "";String getLine;while ((getLine = in.readLine()) != null) {result += getLine;}in.close();System.err.println("result:" + result);return result;}
}
十五、如何解决GsonUtils.java报错警告呢??这里需要下载两个json包,分别是google和org的json包

两个jar包的百度网盘下载地址如下所示

链接:https://pan.baidu.com/s/1uXB7WQJWqJ2mbBKhEA1BWg
提取码:y9kv 链接:https://pan.baidu.com/s/1rheup48ht06kWkHRcoBlyQ
提取码:uo5p
十六、最重要的一步来了,如何在IDEA项目里面导入jar包呢?

第一步:打开file下的project structure

第二步:找到modules的你的项目放的位置,然后选择dependencies,然后找到“+”

第三步:点击“+”,然后点击JARs or directories,然后找到你下载的两个jar包所在的位置 ,点击ok


最后选择apply,然后点击OK,就不会报错了

十七、创建一个Animal的类,然后将动物识别的那段代码复制粘贴过去
package com.baidu.ai.aip;  //这里导你自己项目的Animal所在的包的路径/*import com.baidu.ai.aip.utils.Base64Util;
import com.baidu.ai.aip.utils.FileUtil;
import com.baidu.ai.aip.utils.HttpUtil;*/import java.net.URLEncoder;/**
* 动物识别
*/
public class Animal {/*** 重要提示代码中所需工具类* 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 String animal() {// 请求urlString url = "https://aip.baidubce.com/rest/2.0/image-classify/v1/animal";try {// 本地文件路径String filePath = "[本地文件路径]";   //需要改两处,第一处就将引号内部的[本地文件路径]替换为你想要识别的动物图片的地址,小编这里填的是“D:\甲骨文代码\学习总结图片\Animal\three.jpeg”(要具体到图片)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 = "[调用鉴权接口获取的token]";  //第二处改的值为小编要大家复制到记事本的那个token值String result = HttpUtil.post(url, accessToken, param);System.out.println(result);return result;} catch (Exception e) {e.printStackTrace();}return null;}public static void main(String[] args) {Animal.animal();}
}
十七、点击运行,获取识别结果如下所示

{"log_id": 4508637444409713969, "result": [{"score": "0.903391", "name": "金毛犬"}, {"score": "0.0613776", "name": "拉布拉多"}, {"score": "0.004973", "name": "中华田园犬"}, {"score": "0.00133911", "name": "豹犬"}, {"score": "0.00120851", "name": "腊肠犬"}, {"score": "0.000717416", "name": "串串狗"}]}

如果小伙伴们成功出现了这样的返回结果,代表步骤和方法都操作正确,恭喜你们!!
如果小伙伴们出现了错误,也别着急,请再认真仔细的参考小编编写的步骤,相信你们一定会成功的!!

如何正确调用百度AI开放平台的API进行图像识别相关推荐

  1. Java调用百度AI开放平台API

    百度AI开放平台 百度AI开放平台是全球领先的人工智能服务平台,面向开发者及企业开放120多项全球领先的AI能力和软硬一体组件,并提供 EasyDL定制化训练平台.对话系统开发平台UNIT.自定义模板 ...

  2. AI导论-调用百度AI开放平台进行图象识别

    0. 百度AI开放平台使用步骤 https://www.cnblogs.com/ghgxj/p/14219117.html 1 建立连接与对象 # https://ai.baidu.com/ai-do ...

  3. 【人脸识别】调用百度AI开放平台人脸识别接口,获取图片结果

    1.获取接口权限 (1)获取AppID,API Key和Secret Key 进入百度云人脸识别平台,点击"应用列表"一栏,创建应用: 创建完应用,就可以看到相应的"Ap ...

  4. python api调用百度ai平台_百度ai开放平台使用方法(附带详细案例步骤)

    百度ai开放平台 1.百度ai开放平台内有众多功能,如文字识别,语音技术等等内容,本文章以身份证识别为例子,教大家怎么使用它啦 链接走起:https://cloud.baidu.com/?from=c ...

  5. 百度AI开放平台在线体验及API接口调用(python)

    写在前面 百度AI开放平台将目前已有的深度学习和人工智能的项目成果做了一个集成,并供用户体验和开发者调用. 在线体验 图像技术 色情识别 人像分割 图像无损放大 图像风格转换 文字识别 车牌识别 文字 ...

  6. 图像识别教程(百度AI开放平台)

    百度AI开放平台 官网准备 网址 百度AI开放平台:http://ai.baidu.com/ 登录/注册 没有注册过百度账号可以先去注册一个. 打开控制台 选择图像识别 创建应用 正确填写 得到对应A ...

  7. 百度AI开放平台3.0:平等赋能成为百度AI关键词

    "让每一位开发者都能平等便捷地获取AI能力是我们的愿景,也是我们的承诺.我们非常感谢各位合作伙伴.开发者使用百度的AI能力,让人们的生活更便捷.让学习更有趣.让企业管理更高效.让人类更健康. ...

  8. java 百度账号注册界面_基于百度AI开放平台的人脸识别的注册登录(1)

    百度ai开放平台首页 2.选择产品服务,人脸与人体识别,人脸识别选项.打开后如图所示 人脸识别 3.点击立即使用 3.jpg 4.点击创捷应用 创建应用 这一页大家按自己需求填写即可 5.创建完成后点 ...

  9. 百度ai开放平台使用方法(附带例子详细步骤)

    百度ai开放平台 1.百度ai开放平台内有众多功能,如文字识别,语音技术等等内容,本文章以身份证识别为例子,教大家怎么使用它啦 链接走起:https://cloud.baidu.com/?from=c ...

最新文章

  1. python输入与输出165
  2. nagios一键安装脚本
  3. php-cgi 68%,php cgi 进程占用太多怎么办
  4. 互联网短平快下,DevCloud如何支撑软件开发的“转型”?
  5. 机器学习 - [集成学习]Bagging算法的编程实现
  6. Javascript数据类型,类型转换
  7. 【Django 2021年最新版教程15】数据库定义 models字段类型 限制 用法 总结
  8. HDU4825/5536 [01 字典树/简单字典树更新]
  9. window10+cuda+cudnn下载
  10. 简体生僻汉字大全21418个-GBK编码中的汉字
  11. 一款好看的 VSCode 代码主题和图标主题
  12. 海外服务器配置多少带宽比较合适?
  13. Carpet-mod常用的用法记录
  14. 2019年制定的小目标
  15. Linux 终端浏览器 w3m
  16. 上古卷轴5捏脸php导入,上古卷轴5捏脸预设导入 上古卷轴5捏脸预设怎么导入
  17. matlab热应力计算,不同温度下热应力的计算 - 仿真模拟 - 小木虫 - 学术 科研 互动社区...
  18. linux学习笔记:06-ubuntu中挂载U盘
  19. windows提示“为了对电脑进行保护,已经阻止此应用mmc.exe ”
  20. 车联网未来发展会是怎么样的呢

热门文章

  1. c 语言调用java_C语言调用java的方法
  2. 面试题——js垃圾回收机制和引起内存泄漏的操作
  3. 00942 ora 表存在_ORA-00942:写入数据库中的表时,表或视图不存在错误
  4. android popupmenu icon,带有图标的PopupMenu
  5. 在WIN7系统中安装Ubuntu系统
  6. EnterCriticalSection TryEnterCriticalSection
  7. 前端做预览word(docx)功能
  8. AltiumDesigner的PCB网格显示改点显示
  9. Cookie介绍服务端操作cookie
  10. Linux里桥接模式ping主机失败