Android 百度图像识别(详细步骤+源码)

本文详细介绍了如何在Android中实现百度图像识别,包括获取鉴权Token的步骤和使用Retrofit构建网络请求接口。首先,通过调用鉴权API获取access_token,然后利用这个Token调用图像识别API。文章提供了解析返回的JSON数据并创建相应实体类的示例,以便处理识别结果。最后,展示了如何展示识别结果,并提供了通过相册选取图片进行识别的功能。
摘要由CSDN通过智能技术生成

}

那么这样简单的网络框架写好了。

四、添加请求API接口


百度的图像识别,首先要完成鉴权认证,拿到一个Token,然后通过这个Token再去请求图像识别的API接口才行,所以要完成两步操作。先来看第一步

鉴权的地址如下:

https://aip.baidubce.com/oauth/2.0/token

这里面需要再带三个Url参数,使用Post请求方式。

grant_type: 必须参数,固定为client_credentials;

client_id: 必须参数,应用的API Key;

client_secret: 必须参数,应用的Secret Key;

返回的是一串JSON字符串,如下:

{

“refresh_token”: “25.b55fe1d287227ca97aab219bb249b8ab.315360000.1798284651.282335-8574074”,

“expires_in”: 2592000,

“scope”: “public wise_adapt”,

“session_key”: “9mzdDZXu3dENdFZQurfg0Vz8slgSgvvOAUebNFzyzcpQ5EnbxbF+hfG9DQkpUVQdh4p6HbQcAiz5RmuBAja1JJGgIdJI”,

“access_token”: “24.6c5e1ff107f0e8bcef8c46d3424a0e78.2592000.1485516651.282335-8574074”,

“session_secret”: “dfac94a3489fe9fca7c3221cbf7525ff”

}

当请求和返回都确定之后,我们就可以构建请求实体和返回实体了。

而请求实体都是放在Url中的,因此不需要通过实体来构建,直接传参数就好。

在com.llw.imagediscerndemo包下新建一个model包,包下新建一个GetTokenResponse类,里面的代码如下:

package com.llw.imagediscerndemo.model;

/**

  • 获取鉴权认证Token响应实体

*/

public class GetTokenResponse {

/**

  • refresh_token : 25.b55fe1d287227ca97aab219bb249b8ab.315360000.1798284651.282335-8574074

  • expires_in : 2592000

  • scope : public wise_adapt

  • session_key : 9mzdDZXu3dENdFZQurfg0Vz8slgSgvvOAUebNFzyzcpQ5EnbxbF+hfG9DQkpUVQdh4p6HbQcAiz5RmuBAja1JJGgIdJI

  • access_token : 24.6c5e1ff107f0e8bcef8c46d3424a0e78.2592000.1485516651.282335-8574074

  • session_secret : dfac94a3489fe9fca7c3221cbf7525ff

*/

private String refresh_token;

private long expires_in;

private String scope;

private String session_key;

private String access_token;

private String session_secret;

public String getRefresh_token() {

return refresh_token;

}

public void setRefresh_token(String refresh_token) {

this.refresh_token = refresh_token;

}

public long getExpires_in() {

return expires_in;

}

public void setExpires_in(long expires_in) {

this.expires_in = expires_in;

}

public String getScope() {

return scope;

}

public void setScope(String scope) {

this.scope = scope;

}

public String getSession_key() {

return session_key;

}

public void setSession_key(String session_key) {

this.session_key = session_key;

}

public String getAccess_token() {

return access_token;

}

public void setAccess_token(String access_token) {

this.access_token = access_token;

}

public String getSession_secret() {

return session_secret;

}

public void setSession_secret(String session_secret) {

this.session_secret = session_secret;

}

}

这是通过刚才的返回数据生成的实体Bean,当网络请求返回数据后通过Retrofit会解析成这个返回实体。

下面添加接口,在network包下新建一个ApiService接口,里面的代码如下:

package com.llw.imagediscerndemo.network;

import com.llw.imagediscerndemo.model.GetTokenResponse;

import retrofit2.Call;

import retrofit2.http.Field;

import retrofit2.http.FormUrlEncoded;

import retrofit2.http.Headers;

import retrofit2.http.POST;

/**

  • API服务

  • @author llw

  • @date 2021/4/1 17:48

*/

public interface ApiService {

/**

  • 获取鉴权认证Token

  • @param grant_type 类型

  • @param client_id API Key

  • @param client_secret Secret Key

  • @return GetTokenResponse

*/

@FormUrlEncoded

@POST(“/oauth/2.0/token”)

Call getToken(@Field(“grant_type”) String grant_type,

@Field(“client_id”) String client_id,

@Field(“client_secret”) String client_secret);

}

这里还有一个接口呢,那就是图像识别接口。地址为:

https://aip.baidubce.com/rest/2.0/image-classify/v2/advanced_general

找个接口比较特殊,官方文档的描述如下:

在这里插入图片描述

看你是否理解了。返回数据如下:

{

“log_id”: 327863200205075661,

“result_num”: 5,

“result”: [{

“score”: 0.967622,

“root”: “公众人物”,

“baike_info”: {

“baike_url”: “http://baike.baidu.com/item/%E6%96%B0%E5%9E%A3%E7%BB%93%E8%A1%A3/8035884”,

“image_url”: “http://imgsrc.baidu.com/baike/pic/item/91ef76c6a7efce1b27893518a451f3deb58f6546.jpg”,

“description”: “新垣结衣(Aragaki Yui),1988年6月11日出生于冲绳县那霸市。日本女演员、歌手、模特。毕业于日出高中。2001年,参加《nicola》模特比赛并获得最优秀奖。2005年,因出演现代剧《涩谷15》而作为演员出道。2006年,参演校园剧《我的老大,我的英雄》;同年,她还出版了个人首本写真集《水漾青春》。2007年,她从日出高校毕业后开始专注于演艺发展,并发表个人首张音乐专辑《天空》;同年,新垣结衣还主演了爱情片《恋空》,而她也凭借该片获得了多个电影新人奖项。2010年,主演爱情片《花水木》。2011年,主演都市剧《全开女孩》。2012年,相继参演现代剧《Legal High》、剧情片《剧场版新参者:麒麟之翼》。2013年,主演都市剧《飞翔情报室》。2014年,她主演了剧情片《黎明的沙耶》。2016年,主演爱情喜剧《逃避虽可耻但有用》,并凭借该剧获得了多个电视剧女主角奖项。2017年,主演爱情片《恋爱回旋》,凭借该片获得第60届蓝丝带奖最佳女主角;同年11月,她还凭借医疗剧《Code Blue 3》获得第94届日剧学院赏最佳女配角。”

},

“keyword”: “新垣结衣”

},

{

“score”: 0.716067,

“root”: “人物-人物特写”,

“keyword”: “头发”

},

{

“score”: 0.421281,

“root”: “商品-穿戴”,

“keyword”: “围巾”

},

{

“score”: 0.22347,

“root”: “商品-五金”,

“keyword”: “拉链”

},

{

“score”: 0.028031,

“root”: “商品-穿戴”,

“keyword”: “脖套”

}]

}

通过这个返回示例数据,可以生成一个实体Bean。在model包下新建一个GetDiscernResultResponse类,代码如下:

package com.llw.imagediscerndemo.model;

import java.util.List;

/**

  • 获取识别结果响应实体

*/

public class GetDiscernResultResponse {

/**

  • log_id : 327863200205075661

  • result_num : 5

  • result : [{“score”:0.967622,“root”:“公众人物”,“baike_info”:{“baike_url”:“http://baike.baidu.com/item/%E6%96%B0%E5%9E%A3%E7%BB%93%E8%A1%A3/8035884”,“image_url”:“http://imgsrc.baidu.com/baike/pic/item/91ef76c6a7efce1b27893518a451f3deb58f6546.jpg”,“description”:“新垣结衣(Aragaki Yui),1988年6月11日出生于冲绳县那霸市。日本女演员、歌手、模特。毕业于日出高中。2001年,参加《nicola》模特比赛并获得最优秀奖。2005年,因出演现代剧《涩谷15》而作为演员出道。2006年,参演校园剧《我的老大,我的英雄》;同年,她还出版了个人首本写真集《水漾青春》。2007年,她从日出高校毕业后开始专注于演艺发展,并发表个人首张音乐专

  • 19
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值