软件构造实验作业

实验名称:百度图像识别SDK实验

班级:信1905-1      学号:20194171      姓名:常金悦       

 

一、 实验要求

每个步骤必须截图并说明

二、实验步骤

任务一:配置百度图像识别Java SDK

1、  在官方网站下载Java SDK压缩工具包。

网址SDK下载_文字识别SDK_语音识别SDK-百度AI开放平台 (baidu.com)

2、  将下载的aip-java-sdk-version.zip解压,在工程文件夹中新建lib文件夹,把解压后的jar包复制进去。

3、   在Eclipse右键“工程 -> Properties -> Java Build Path -> Add JARs”,选择上述jar包并添加进来。

任务二:了解百度图像识别相关功能并进行总结

百度图像识别相关功能

百度图像识别拥有多种功能,提供多场景图像识别,为我们的生活带来更多便利,把更多简单重复的工作交给机器去做,解放劳动力。

 

任务三:完成动物识别,自行拍摄动物图片进行上传并查看结果

  1. 百度识图代码(32条消息) 百度图像识别java使用笔记_m0_37566422的博客-CSDN博客

  1. 解析json文件代码使用Java读取JSON数据 - 愚蠢的程序员 - 博客园 (cnblogs.com)

  1. 将json写入json文件代码(32条消息) java中将简单的json数据写入文件_、风天行的博客-CSDN博客_java写json文件

  1. double转百分制(32条消息) Java中Double或Float类型,转百分数_一火的专栏-CSDN博客

  1. 整理

代码:

ReadJSON

package Sample;

import java.io.FileNotFoundException;

import java.io.FileReader;

import java.math.BigDecimal;

import java.text.DecimalFormat;

import java.text.NumberFormat;

import com.google.gson.JsonArray;

import com.google.gson.JsonIOException;

import com.google.gson.JsonObject;

import com.google.gson.JsonParser;

import com.google.gson.JsonSyntaxException;

public class ReadJSON {

/**

* 通过解析器将test.json转换成JsonObject

*/

public static void main(String[] args) {

//将 test.json 的数据转换成 JSON 对象

//需要创建一个解析器,可以用来解析字符串或输入流

JsonParser parser=new JsonParser();

try {

//创建一个JSON对象,接收parser解析后的返回值

//使用parse()方法,传入一个Reader对象,返回值是JsonElement类型

//因为要读取文件,所以传入一个FileReader

//JsonObject是JsonElement的子类,所以需要强转

//有异常抛出,使用 try catch 捕获

JsonObject object=(JsonObject) parser.parse(new FileReader("test.json"));

//先将两个外部的属性输出 category 和 pop

//先 get 到名称(键),返回的是 JsonElement,再 getAs 转换成什么类型的值

//依据 json 格式里的数据类型

System.out.println("log_id="+object.get("log_id").getAsString());

System.out.println("result_num="+object.get("result_num").getAsString());

//接着读取test.json里的JSON数组,名称是languages(键)

//创建一个JsonArray

JsonArray array=object.get("result").getAsJsonArray();

for (int i = 0; i < array.size(); i++) {

//分隔线

System.out.println("-----------------");

//创建一个JsonObject,从array的下标获取,get() 返回JsonElement类型

//这里不用强转,而用 getAsJsonObject() 进行转换

JsonObject subObject=array.get(i).getAsJsonObject();

NumberFormat fmt = NumberFormat.getPercentInstance();

fmt.setMaximumFractionDigits(2);//最多两位百分小数,如25.23%

String score=fmt.format(subObject.get("score").getAsDouble());

System.out.println("score="+score);

System.out.println("root="+subObject.get("root").getAsString());

System.out.println("keyword="+subObject.get("keyword").getAsString());

}

} catch (JsonIOException e) {

e.printStackTrace();

} catch (JsonSyntaxException e) {

e.printStackTrace();

} catch (FileNotFoundException e) {

e.printStackTrace();

}

}

}

Sample

package Sample;

import java.io.BufferedWriter;

import java.io.File;

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.OutputStreamWriter;

import java.io.UnsupportedEncodingException;

import java.util.HashMap;

import javax.tools.Tool;

import org.json.JSONException;

import org.json.JSONObject;

import com.baidu.aip.imageclassify.AipImageClassify;

public class Sample {

//设置APPID/AK/SK

public static final String APP_ID = "11156716";

public static final String API_KEY = "Wz0qmeT0SkzNeakFG9n5tLxY";

public static final String SECRET_KEY = "ip1AP0GUe5qNG20f3zFFixHnaOg2uhjR";

public static void main(String[] args) throws JSONException, IOException {

//初始化

AipImageClassify aic = new AipImageClassify(APP_ID, API_KEY, SECRET_KEY);

//图片路径作为参数,此处使用相对路径,相对于项目根目录而言,即cat.jpg放在项目根目录下

String path = "cat2.jpg";

//返回JSON格式的数据

JSONObject res = aic.advancedGeneral(path, new HashMap<String, String>());

//System.out.println(res.toString(2));

File file=new File("test.json");

if(!file.exists())//判断文件是否存在,若不存在则新建

{

file.createNewFile();

}

FileOutputStream fileOutputStream=new FileOutputStream(file);//实例化FileOutputStream

OutputStreamWriter outputStreamWriter=new OutputStreamWriter(fileOutputStream,"gbk");//将字符流转换为字节流

BufferedWriter bufferedWriter= new BufferedWriter(outputStreamWriter);//创建字符缓冲输出流对象

bufferedWriter.write(res.toString(2));//将格式化的jsonarray字符串写入文件

bufferedWriter.flush();//清空缓冲区,强制输出数据

bufferedWriter.close();//关闭输出流

ReadJSON read=new ReadJSON();

read.main(args);

}

}

图片:

结果:

 

任务四:完成植物识别,自行拍摄植物图片进行上传并查看结果

代码:

ReadJSON

package Sample;

import java.io.FileNotFoundException;

import java.io.FileReader;

import java.math.BigDecimal;

import java.text.DecimalFormat;

import java.text.NumberFormat;

import com.google.gson.JsonArray;

import com.google.gson.JsonIOException;

import com.google.gson.JsonObject;

import com.google.gson.JsonParser;

import com.google.gson.JsonSyntaxException;

public class ReadJSON {

/**

* 通过解析器将test.json转换成JsonObject

*/

public static void main(String[] args) {

//将 test.json 的数据转换成 JSON 对象

//需要创建一个解析器,可以用来解析字符串或输入流

JsonParser parser=new JsonParser();

try {

//创建一个JSON对象,接收parser解析后的返回值

//使用parse()方法,传入一个Reader对象,返回值是JsonElement类型

//因为要读取文件,所以传入一个FileReader

//JsonObject是JsonElement的子类,所以需要强转

//有异常抛出,使用 try catch 捕获

JsonObject object=(JsonObject) parser.parse(new FileReader("test.json"));

//先将两个外部的属性输出 category 和 pop

//先 get 到名称(键),返回的是 JsonElement,再 getAs 转换成什么类型的值

//依据 json 格式里的数据类型

System.out.println("log_id="+object.get("log_id").getAsString());

System.out.println("result_num="+object.get("result_num").getAsString());

//接着读取test.json里的JSON数组,名称是languages(键)

//创建一个JsonArray

JsonArray array=object.get("result").getAsJsonArray();

for (int i = 0; i < array.size(); i++) {

//分隔线

System.out.println("-----------------");

//创建一个JsonObject,从array的下标获取,get() 返回JsonElement类型

//这里不用强转,而用 getAsJsonObject() 进行转换

JsonObject subObject=array.get(i).getAsJsonObject();

NumberFormat fmt = NumberFormat.getPercentInstance();

fmt.setMaximumFractionDigits(2);//最多两位百分小数,如25.23%

String score=fmt.format(subObject.get("score").getAsDouble());

System.out.println("score="+score);

System.out.println("root="+subObject.get("root").getAsString());

System.out.println("keyword="+subObject.get("keyword").getAsString());

}

} catch (JsonIOException e) {

e.printStackTrace();

} catch (JsonSyntaxException e) {

e.printStackTrace();

} catch (FileNotFoundException e) {

e.printStackTrace();

}

}

}

Sample

package Sample;

import java.io.BufferedWriter;

import java.io.File;

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.OutputStreamWriter;

import java.io.UnsupportedEncodingException;

import java.util.HashMap;

import javax.tools.Tool;

import org.json.JSONException;

import org.json.JSONObject;

import com.baidu.aip.imageclassify.AipImageClassify;

public class Sample {

//设置APPID/AK/SK

public static final String APP_ID = "11156716";

public static final String API_KEY = "Wz0qmeT0SkzNeakFG9n5tLxY";

public static final String SECRET_KEY = "ip1AP0GUe5qNG20f3zFFixHnaOg2uhjR";

public static void main(String[] args) throws JSONException, IOException {

//初始化

AipImageClassify aic = new AipImageClassify(APP_ID, API_KEY, SECRET_KEY);

//图片路径作为参数,此处使用相对路径,相对于项目根目录而言,即cat.jpg放在项目根目录下

String path = "rose.jpg";

//返回JSON格式的数据

JSONObject res = aic.advancedGeneral(path, new HashMap<String, String>());

//System.out.println(res.toString(2));

File file=new File("test.json");

if(!file.exists())//判断文件是否存在,若不存在则新建

{

file.createNewFile();

}

FileOutputStream fileOutputStream=new FileOutputStream(file);//实例化FileOutputStream

OutputStreamWriter outputStreamWriter=new OutputStreamWriter(fileOutputStream,"gbk");//将字符流转换为字节流

BufferedWriter bufferedWriter= new BufferedWriter(outputStreamWriter);//创建字符缓冲输出流对象

bufferedWriter.write(res.toString(2));//将格式化的jsonarray字符串写入文件

bufferedWriter.flush();//清空缓冲区,强制输出数据

bufferedWriter.close();//关闭输出流

ReadJSON read=new ReadJSON();

read.main(args);

}

}

图片:

结果:

 

三、实验总结

这次实验还算简单,但也确实考验我们的读代码并和运用代码的能力,也启发我对于java的编程开发。

 

 

百度图像识别SDK实验的更多相关文章

  1. Android使用百度定位SDK 方法及错误处理

    之前我的项目中的位置定位使用的是基站方法,使用的Google提供的API,但是前天中午突然就不返回数据了,到网上搜了一下才知道,Google的接 口不提供服务了,基于时间紧迫用了百度现有的SDK,但是 ...

  2. 百度AI之百度图像识别java版本使用

    百度AI之百度图像识别java版本使用\ 官网 http://ai.baidu.com/ 创建应用 查看 appid,appkey,sk 下载sdk https://ai.baidu.com/sdk# ...

  3. 【月入41万】Mono For Android中使用百度地图SDK

    借助于Mono For Android技术,.Net开发者也可以使用自己熟悉的C#语言以及.Net来开发Android应用.由于Mono For Android把Android SDK中绝大部分类库都 ...

  4. GJM:Unity导入百度地图SDK [转载]

    感谢您的阅读.喜欢的.有用的就请大哥大嫂们高抬贵手"推荐一下"吧!你的精神支持是博主强大的写作动力以及转载收藏动力.欢迎转载! 版权声明:本文原创发表于 [请点击连接前往] ,未经 ...

  5. iOS百度地图SDK集成详细步骤

    1.iOS百度地图下载地址 http://developer.baidu.com/map/index.php?title=iossdk/sdkiosdev-download 根据需要选择不同的版本  ...

  6. 百度地图SDK

      百度地图官方SDK文档 http://lbsyun.baidu.com/index.php?title=androidsdk   一.申请百度地图SDK 每一个app对应一个百度地图AK,百度地图 ...

  7. 百度地图SDK 遇到的问题及解决方案

    目前项目工作中用到了百度地图sdk,遇到了不少问题,在此记录一下,顺便吐槽下希望百度能把这地图sdk做的更好用一点. 1,开发环境, Xcode6.0 (6A313) + 百度地图 iOS SDK v ...

  8. Android Studio集成百度地图SDK

    1.建议先阅读百度地图官方的继承指南,针对了Eclipse和Android Studio. 百度官方集成指南 2.下载百度地图SDK Android SDK v4.1.1 下载有两种: 1.一键下载( ...

  9. iOS开发之引用百度地图SDK(一)-----------SDK开发指南

    (void)viewWillAppear:(BOOL)animated { [_mapView viewWillAppear]; _mapView.delegate = self; // 此处记得不用 ...

随机推荐

  1. Cloud Computing Chapter3 (云计算第三章)

    本篇文章是对课程大型软件系统设计与体系结构(双语)[又名:云计算]的课堂内容总结,适用于大连交通大学. Cloud Computing Chapter3 Understanding Cloud Com ...

  2. js格式化树形数据(扁平化数据)

    需求: 1.把如下数据按照parent_id等于id的规则建立父子关系 2.同一层级的数组按照order升序 [ { "id": 1, "name": &quo ...

  3. 5. 堪比JMeter的.Net压测工具 - Crank 实战篇 - 接口以及场景压测

    目录 堪比JMeter的.Net压测工具 - Crank 入门篇 堪比JMeter的.Net压测工具 - Crank 进阶篇 - 认识yml 堪比JMeter的.Net压测工具 - Crank 进阶篇 ...

  4. 记一次CentOS根目录空间占满的解决方案

    问题背景是这样的,根目录初始大小是50G,我把mysql和docker都装在根目录底下了. 随着时间推移,mysql大小达到了27个G,docker则是22个G 根目录空间不够用了,上图: 图 1-1 ...

  5. 采用 DIV+CSS 布局网页练习

    实验四:采用 DIV+CSS 布局网页练习 实验目的: 熟悉 DIV+CSS 布局网页的方法 实验要求: 1.制作一个完整网页和一个 css 文件: 2.在网页中采用 DIV+CSS 布局 4 个以上 ...

  6. CF375D题解

    昨天教练布置的莫队作业,然后一看我老早就用 DSU on tree 切了,来补题解( 题意 静态树询问子树中,同一种元素的数量不小于 \(k\) 的元素有多少种. 莫队做法 容易观察到子树在 \(\r ...

  7. JAVA 线上问题排查方法

    CPU 磁盘 内存 GC问题 网络 线上故障主要会包括cpu.磁盘.内存以及网络问题,而大多数故障可能会包含不止一个层面的问题,所以进行排查时候尽量四个方面依次排查一遍. 同时例如jstack.jma ...

  8. 4月4日 python学习总结 os pickle logging

    1.序列化和反序列化 我们把对象(变量)从内存中变成可存储或传输的过程称之为序列化,在Python中叫pickling. 反过来,把变量内容从序列化的对象重新读到内存里称之为反序列化,即unpickl ...

  9. java高级用法之:无所不能的java,本地方法调用实况

    目录 简介 JDK的本地方法 自定义native方法 总结 简介 相信每个程序员都有一个成为C++大师的梦想,毕竟C++程序员处于程序员鄙视链的顶端,他可以俯视任何其他语言的程序员. 但事实情况是,无 ...

  10. 一致性检验评价方法kappa

    最近在做眼底图像的无监督分类,使用的数据集辣子kaggle的Diabetic Retinopathy,简称DR,中文称糖尿病型眼底疾病. 最后的评估方法是二次加权kappa.以前没接触过,网上也没有具 ...