java实现调用百度图像识别API,批量识别车辆车型、颜色等信息
在需要大量识别车辆车辆信息时,我们可以调用百度AI开放平台提供的API接口来完成批量处理。在百度AI开放平台申请好账号,创建应用后,我们就可以根据百题提供的APP_ID,APP_KEY,SECRET_KEYl来调用api接口,根据返回的识别数据,提取出自己所需要的车辆车型、颜色等信息,下面是利用java所实现的过程。
首先,下载百度图像识别API提供的Java SDK,地址为Java SDK,将SDK中的四个jar包添加到依赖。
接下来,调用百度API进行车型识别的具体代码如下:
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.util.HashMap;
import org.json.JSONArray;
import org.json.JSONObject;
import com.baidu.aip.imageclassify.AipImageClassify;
public class CarRecognition {
//填入自己申请的AAP_ID APP_KEY SECRET_KEY
public static final String APP_ID = "AAP_ID";
public static final String API_KEY = "APP_KEY";
public static final String SECRET_KEY = "SECRET_KEY";
public static void main(String[] args) {
AipImageClassify aic = new AipImageClassify(APP_ID, API_KEY, SECRET_KEY);
sample(aic); //调用识别方法
}
public static void sample(AipImageClassify client) {
HashMap<String, String> options = new HashMap<String, String>(); // 传入可选参数调用接口
String color = null; //定义一个字符串用于后面存储车身颜色
String type = null; //定义一个字符串用于后面存储车辆型号
options.put("top_num", "3"); //设置识别出的车型数量
options.put("baike_num", "0"); //设置给出的结果中是否需要包含车辆的百度百科描述信息
String path = "car\\"; //需要识别的本地图片所在文件夹路径
File file = new File(path);
File[] files = file.listFiles();
try {
BufferedWriter bufw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(new File("result\\carInfo.txt")),"gbk"));//建一个输出流用于输出车辆识别结果信息
bufw.write("文件名 车型1 车型2 车型3 颜色"); //首先在文档中写出表头,使用$符号分割方便后期将txt文档数据导入excel中做分割
bufw.newLine();
for(int i=0;i<files.length;i++) {
System.out.println(files[i].getName()); //打印一下当前正在处理的图片名称,方便看进度
String image = files[i].getAbsolutePath(); //获取本地图片的绝对路径
bufw.write(files[i].getName()+" "); //第一项数据为文件名
JSONObject res = client.carDetect(image, options); //获取调用API接口所获取的车辆信息识别数据res,格式为JSONobject
//下面进行JSONobjec数据的解析,提取出识别出的车型、颜色信息
JSONArray results = res.getJSONArray("result"); //将返回的JSONObject中result数组的转化成JSONarray,下面利用循环分别获得每一种车型结果数据
for(int j = 0;j<results.length();j++) {
JSONObject obj = (JSONObject)results.get(j); //将JSONOarray中第j个JSONObject数据拿出
type = (String) obj.get("name"); //利用键“name”获取车型值
bufw.write(type+" ");
}
color = (String) res.get("color_result"); //利用键“color_result”获取返回的JSONObject中车辆颜色信息值
bufw.write(color);
bufw.newLine();
bufw.flush();
}
bufw.flush();
bufw.close();
}
catch (IOException e) {
e.printStackTrace();
}
}
}
示例:我们从网上找了一本田思域的照片:
运行程序输出结果如下:
识别结果中,排在第一位的就是可能性最大的车型。