不知道大家有没有被最近的AlphaGo刷屏,反正我是看的心痒痒的。也不知道咋搞的就看到了百度云的人工智能上面。闲来无事就试了试图像识别。
百度云图像识别提供了多种语言的SDK各位根据自己的需求下载相应sdk就行了。此处以javaSDK为例。
1.下载官方SDK包
2.导入项目的lib中
本以为跟着文档就行,哪只采坑刚刚开始(流泪中……),下面详细讲讲过程。官方java代码已经公开,地址https://github.com/Baidu-AIP/java-sdk
本文做的是车型识别,根据文档指引代码是这样的:
public class Sample {
//设置APPID/AK/SK
public static final String APP_ID = "你的 App ID";
public static final String API_KEY = "你的 Api Key";
public static final String SECRET_KEY = "你的 Secret Key";
public static void main(String[] args) {
// 初始化一个AipImageClassifyClient
AipImageClassifyClient client = new AipImageClassifyClient(APP_ID, API_KEY, SECRET_KEY);
// 可选:设置网络连接参数
client.setConnectionTimeoutInMillis(2000);
client.setSocketTimeoutInMillis(60000);
// 可选:设置代理服务器地址, http和socket二选一,或者均不设置
client.setHttpProxy("proxy_host", proxy_port); // 设置http代理
client.setSocketProxy("proxy_host", proxy_port); // 设置socket代理
// 调用接口
String path = "test.jpg";
JSONObject res = client.objectDetect(path, new HashMap<String, String>());
System.out.println(res.toString(2));
}
}
but什么鬼,AipImageClassifyClient找不到,刚开始我以为我粗心下载错了,还特意从新下载,发现还是没有,没办法跑到github上查看官方公布的代码,并没有找到。好吧找不到咱就直接掉api吧!(顺道说下,我用车型识别的api全局找了下也没找到,谁知道原因的说下,谢谢)
下面是直接调用api实现的代码及结果:
public class MainActivity extends AppCompatActivity {
String access_token;
TextView result;
ImageView iv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
findViewById(R.id.button).setOnClickListener(listener);
result = (TextView) findViewById(R.id.textView);
iv = (ImageView) findViewById(R.id.iv);
Auth();
}
private void Auth() {
OkGo.<String>get("https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=你的应用key&client_secret=你的应用secret")
.tag(this)
.execute(new StringCallback() {
@Override
public void onSuccess(Response<String> response) {
try {
JSONObject jsonObject = new JSONObject(response.body());
access_token = jsonObject.getString("access_token");
} catch (JSONException e) {
e.printStackTrace();
}
}
@Override
public void onError(Response<String> response) {
super.onError(response);
}
});
}
View.OnClickListener listener = new View.OnClickListener() {
@Override
public void onClick(View view) {
ImagePicker imagePicker = ImagePicker.getInstance();
imagePicker.setImageLoader(new GlideAlbumLoader());
imagePicker.setShowCamera(true);
imagePicker.setMultiMode(false);
imagePicker.setCrop(false);
Intent intent = new Intent(MainActivity.this, ImageGridActivity.class);
startActivityForResult(intent, 1002);
}
};
public void car(String path) {
String url = "https://aip.baidubce.com/rest/2.0/image-classify/v1/car?access_token=" + access_token;
try {
String imgStr = file2String(new File(path));
OkGo.<String>post(url)
.tag(this)
.params("Content-Type", "application/x-www-form-urlencoded")//
.params("image", imgStr)//
.params("top_num", "20")//
.isMultipart(true)
.execute(new StringCallback() {
@Override
public void onSuccess(Response<String> response) {
CarBean bean = new Gson().fromJson(response.body(), CarBean.class);
if (!(bean.getResult() == null || bean.getResult().size() == 0)) {
DecimalFormat df = new DecimalFormat("###0.00");
result.setText("此车型有" + (df.format((Math.round(bean.getResult().get(0).getScore() / 1 * 10000) / 10000.0) * 100)) + "%的可能是:" + bean.getResult().get(0).getName());
} else {
Toast.makeText(MainActivity.this, "", Toast.LENGTH_LONG).show();
}
}
});
} catch (Exception e) {
e.printStackTrace();
}
}
private String file2String(File file) {
byte[] buffer = new byte[0];
try {
FileInputStream inputFile = new FileInputStream(file);
buffer = new byte[(int) file.length()];
inputFile.read(buffer);
inputFile.close();
} catch (IOException e) {
e.printStackTrace();
}
return Base64.encodeToString(buffer, Base64.DEFAULT);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == ImagePicker.RESULT_CODE_ITEMS) {
if (data != null && requestCode == 1002) {
ArrayList<ImageItem> images = (ArrayList<ImageItem>) data.getSerializableExtra(ImagePicker.EXTRA_RESULT_ITEMS);
iv.setImageBitmap(BitmapFactory.decodeFile(images.get(0).path));
car(images.get(0).path);
} else {
Toast.makeText(this, "没有数据", Toast.LENGTH_SHORT).show();
}
}
}
}
这里面引入了imageloader与OkGo两框架,具体使用请自行查看相应文档.好啦!今天就这样吧!哈哈,好没得营养呀!有问题可以留言。
分享图片
分享图片