代码如下:
这里调用的图像识别接口是百度ai-细粒度图像识别;
识别后对植物详细介绍的接口为欧拉蜜-百科。
图像识别支持植物、动物、车型等识别,这里以植物识别为例。
需要识别的图片的限制:图像数据,base64编码,要求base64编码后大小不超过4M,最短边至少15px,最长边最大4096px,支持jpg/png/bmp格式。
识别图为:
运行结果为:
名称:绿萝
产地:原产中美、南美的热带雨林地区。现国内各地上海、江苏、福建、台湾、广东、广西等地均有人工园林居室养植。
门:被子植物门
生活型:藤本植物
界:植物界
种:绿萝
目:泽泻目
习性:绿萝属阴性植物,忌阳光直射,喜散射光,较耐阴。室内栽培可置窗旁,但要避免阳光直射。阳光过强会灼伤绿萝的叶片,过阴会使叶面上美丽的斑纹消失,通常以接受四小时的散射光,绿萝的生长发育最好。
土壤:在一般环境下均能生长,性喜温暖、潮湿环境,要求土壤疏松、肥沃、排水良好
科:天南星科
纲:单子叶植物纲
分布:原产中美、南美的热带雨林地区。现国内各地上海、江苏、福建、台湾、广东、广西等地均有人工园林居室养植。
属:绿萝属
域:真核域
大型常绿藤本植物。生长于热带地区常攀援生长在雨林的岩石和树干上,可长成巨大的藤本植物。绿色的叶片上有黄色的斑块。其缠绕性强,气根发达,既可让其攀附于用棕扎成的圆柱上,摆于门厅、宾馆,也可培养成悬垂状置于书房、窗台,是一种较适合室内摆放的花卉。
1、ImageRec.java
package imageRecognition;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.URL;
import java.net.URLConnection;
import java.net.URLEncoder;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
public class ImageRec {
public static byte[] getImageByte(String imgFile) {
InputStream inputStream = null;
byte[] data = null;
try {
inputStream = new FileInputStream(imgFile);
data = new byte[inputStream.available()];
inputStream.read(data);
inputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
return data;
}
public static String plant() {
String url = "https://aip.baidubce.com/rest/2.0/image-classify/v1/plant";
try {
// 本地文件路径
String filePath = "D:\\test.jpg";
byte[] imgData = getImageByte(filePath);
String imgStr = Base64Util.encode(imgData);
String imgParam = URLEncoder.encode(imgStr, "UTF-8");
String param = "image=" + imgParam;
// 注意这里仅为了简化编码每一次请求都去获取access_token,线上环境access_token有过期时间, 客户端可自行缓存,过期后重新获取。
String accessToken = AuthService.getAuth();
String resultStr = sendPost(url+"?access_token="+accessToken, param);
JSONObject jsobj = JSONObject.parseObject(resultStr);
JSONArray jsary = jsobj.getJSONArray("result");
String name = jsary.getJSONObject(0).getString("name");
return getIntroduce(name);
} catch (Exception e) {
e.printStackTrace();
}
return "fail";
}
public static String getIntroduce(String keyword){
return new NLIProcess().parse("介绍"+keyword);
}
public static String sendPost(String url, String param