Safe-splash页面(1)

本文介绍了一个App启动页的设计方案,包括加载logo、版本信息显示及版本检查更新流程。详细解释了如何通过子线程获取远程版本信息,并在必要时提示用户进行更新。

这个页面的功能有:基本的显示加载的logo页面,logo页面会有一些文本的信息,版本号版本名等信息。加载的时候,会保持logo页面至少2秒(睡眠的方式来实现)。进入的时候会判断一下当前的版本和服务端获取的json的版本信息,如果服务端的版本号大于现在的版本号会进行升级,同时splash页面会现在下载的进度等等信息。下载完成以后用户可以选择安装或者取消安装跳转首页,或者直接返回不安装跳转首页。

获取版本信息

/**
	 * 获取版本的版本名
	 */
	private String getVersionName() {
		// 获取到包的管理器
		PackageManager packagerManager = getPackageManager();

		try {
			// 获取包名
			PackageInfo packageInfo = packagerManager.getPackageInfo(
					getPackageName(), 0);
			// 版本号
			int versionCode = packageInfo.versionCode;
			// 版本名
			String versionName = packageInfo.versionName;
			System.out.println("versionName:" + versionName);
			return versionName;
		} catch (NameNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return "";
	}

	/**
	 * 获取版本的版本号
	 */
	private int getVersionCode() {
		// 获取到包的管理器
		PackageManager packagerManager = getPackageManager();

		try {
			// 获取包名
			PackageInfo packageInfo = packagerManager.getPackageInfo(
					getPackageName(), 0);
			// 版本号
			int versionCode = packageInfo.versionCode;
			// 版本名
			String versionName = packageInfo.versionName;
			System.out.println("versionCode:" + versionCode);
			return versionCode;
		} catch (NameNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return 0;
	}

下载版本,通过子线程的方式来进行下载,防止阻塞主线程,利用Handle消息队列机制来根据不同的消息来加载

/**
	 * 从服务器获取版本信息校验,确定是否需要进行升级
	 */
	private void checkVersion() {
		// 获取当前的时间
		final long startTime = System.currentTimeMillis();

		// 防止阻塞主线程
		new Thread() {
			@Override
			public void run() {
				String path = "http://192.168.0.100:8080/update.json";
				Message msg = Message.obtain();
				HttpURLConnection conn = null;
				try {
					URL url = new URL(path);
					conn = (HttpURLConnection) url.openConnection();
					conn.setRequestMethod("GET");// 请求方式
					conn.setConnectTimeout(5000);// 链接超时
					conn.setReadTimeout(5000);// 响应超时,连接成功,但服务器不给响应
					conn.connect();// 链接服务器
					int responseCode = conn.getResponseCode();// 获取响应码
					if (responseCode == 200) {
						InputStream inputStream = conn.getInputStream();
						String result = StreamUtils
								.readFromeStream(inputStream);
						System.out.println("返回的结果是:" + result);

						// 解析json,作者的版本鸡西不了json,因此设置成固定值,正常应该是解析出来的值,注释下面5行
						/*
						 * 解析不了json为了测试,写成固定值 JSONObject jo = new
						 * JSONObject(result); mVersionName =
						 * jo.getString("versionName"); mVersionCode =
						 * jo.getInt("VersionCode"); mDesc =
						 * jo.getString("description"); mDownloadUrl =
						 * jo.getString("downloadUrl");
						 */
						JSONObject jo = new JSONObject(result);
						mVersionName = "2.0";
						mVersionCode = 2;
						mDesc = "赶紧升级啊";
						mDownloadUrl = "http://192.168.0.100:8080/Safe2.0.apk";
						System.out.println("添加的功能:" + mDesc);
						if (mVersionCode > getVersionCode()) {
							// 服务器的版本号大于本地的版本号,需要升级
							// 需要升级,弹出升级对话框
							msg.what = CODE_UPDATE_DIALOG;
						} else {
							// 没有版本更新,跳转主页
							msg.what = CODE_ENTER_HOME;
						}

					}
				} catch (MalformedURLException e) {
					// 更新异常
					msg.what = CODE_UPDATE_ERROR;
					e.printStackTrace();
				} catch (IOException e) {
					// 网络异常
					msg.what = CODE_NET_ERROR;
					e.printStackTrace();
				} catch (JSONException e) {
					// JSON异常
					msg.what = CODE_JSON_ERROR;
					e.printStackTrace();
				} finally {
					// 强制logo界面加载显示2s
					long endTime = System.currentTimeMillis();
					long timeUsed = endTime - startTime;
					if (timeUsed < 2000) {
						try {
							Thread.sleep(2000 - timeUsed);
						} catch (InterruptedException e) {
							// TODO Auto-generated catch block
							e.printStackTrace();
						}
					}

					// 主线程发消息
					mHandler.sendMessage(msg);
					// 关闭网络连接
					if (conn != null) {
						conn.disconnect();
					}
				}
			}
		}.start();

	}

消息队列的处理

	private Handler mHandler = new Handler() {
		public void handleMessage(android.os.Message msg) {
			switch (msg.what) {
			case CODE_UPDATE_DIALOG:
				showUpdate();
				break;
			case CODE_UPDATE_ERROR:
				Toast.makeText(SplashActivity.this, "升级错误", Toast.LENGTH_SHORT)
						.show();
				// 跳转主页面
				enterHome();
				break;
			case CODE_NET_ERROR:
				Toast.makeText(SplashActivity.this, "网络错误", Toast.LENGTH_SHORT)
						.show();
				// 跳转主页面
				enterHome();
				break;
			case CODE_JSON_ERROR:
				Toast.makeText(SplashActivity.this, "JSON数据解析错误",
						Toast.LENGTH_SHORT).show();
				// 跳转主页面
				enterHome();
				break;
			case CODE_ENTER_HOME:
				// 跳转主页面
				enterHome();
				break;
			default:
				break;
			}
		}
	};

下载apk和安装apk的方法

/**
	 * 下载新版的apk
	 */
	protected void download() {
		// 先判断有没有sd卡
		if (Environment.getExternalStorageState().equals(
				Environment.MEDIA_MOUNTED)) {
			// 下载的时候让进度显示
			tv_progress.setVisibility(View.VISIBLE);

			// 文件下载的位置
			String target = Environment.getExternalStorageDirectory()
					+ "/UPDATE.APK";
			// 利用github的Xutils执行下载
			HttpUtils utils = new HttpUtils();
			utils.download(mDownloadUrl, target, new RequestCallBack<File>() {

				@Override
				public void onLoading(long total, long current,
						boolean isUploading) {
					super.onLoading(total, current, isUploading);
					System.out.println("下载进度" + current + "/" + total);

					tv_progress.setText("下载进度:" + current * 100 / total + "%");
				}

				// 下载失败
				@Override
				public void onFailure(HttpException arg0, String arg1) {
					Toast.makeText(SplashActivity.this, "下载失败",
							Toast.LENGTH_SHORT).show();

				}

				// 下载成功
				@Override
				public void onSuccess(ResponseInfo<File> arg0) {
					System.out.println("下载成功");
					// 跳转到系统的下载页面
					Intent intent = new Intent(Intent.ACTION_VIEW);
					intent.addCategory(Intent.CATEGORY_DEFAULT);
					intent.setDataAndType(Uri.fromFile(arg0.result),
							"application/vnd.android.package-archive");
					// startActivity(intent);
					startActivityForResult(intent, 0);// 如果用户取消安装,会返回结果,会调用发onActivityResult

				}

			});
		} else {
			Toast.makeText(SplashActivity.this, "没有sd卡", Toast.LENGTH_SHORT)
					.show();
		}

	}

在安装界面,用户可能点击返回,处理如下

/**
	 * 防止用户在升级界面按下返回按键
	 */
	@Override
	protected void onActivityResult(int requestCode, int resultCode, Intent data) {
		enterHome();
		super.onActivityResult(requestCode, resultCode, data);
	}

总代码如下:

package com.ldw.safe.Activity;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;

import org.json.JSONException;
import org.json.JSONObject;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.DialogInterface.OnCancelListener;
import android.content.DialogInterface.OnClickListener;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.view.animation.AlphaAnimation;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.Toast;

import com.ldw.safe.R;
import com.ldw.safe.db.dao.AntiVirous;
import com.ldw.safe.utils.StreamUtils;
import com.lidroid.xutils.HttpUtils;
import com.lidroid.xutils.exception.HttpException;
import com.lidroid.xutils.http.ResponseInfo;
import com.lidroid.xutils.http.callback.RequestCallBack;
import com.lidroid.xutils.http.client.HttpRequest.HttpMethod;

public class SplashActivity extends Activity {

	protected static final int CODE_UPDATE_DIALOG = 0;
	protected static final int CODE_UPDATE_ERROR = 1;
	protected static final int CODE_NET_ERROR = 2;
	protected static final int CODE_JSON_ERROR = 3;
	protected static final int CODE_ENTER_HOME = 4;

	private TextView tv_version;
	private TextView tv_progress;// 下载进度显示

	// 服务器json参数
	private String mVersionName;
	private int mVersionCode;
	private String mDesc;
	private String mDownloadUrl;
	
	private SharedPreferences mPref;//把设置的数据保存在mPref

	private Handler mHandler = new Handler() {
		public void handleMessage(android.os.Message msg) {
			switch (msg.what) {
			case CODE_UPDATE_DIALOG:
				showUpdate();
				break;
			case CODE_UPDATE_ERROR:
				Toast.makeText(SplashActivity.this, "升级错误", Toast.LENGTH_SHORT)
						.show();
				// 跳转主页面
				enterHome();
				break;
			case CODE_NET_ERROR:
				Toast.makeText(SplashActivity.this, "网络错误", Toast.LENGTH_SHORT)
						.show();
				// 跳转主页面
				enterHome();
				break;
			case CODE_JSON_ERROR:
				Toast.makeText(SplashActivity.this, "JSON数据解析错误",
						Toast.LENGTH_SHORT).show();
				// 跳转主页面
				enterHome();
				break;
			case CODE_ENTER_HOME:
				// 跳转主页面
				enterHome();
				break;
			default:
				break;
			}
		}
	};
	private RelativeLayout splash;
	private AntiVirous virous;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_splash);
		// 显示版本号
		TextView tv_version = (TextView) findViewById(R.id.tv_version);
		tv_version.setText("版本号:" + getVersionName());

		// 下载进度显示,默认是隐藏的
		tv_progress = (TextView) findViewById(R.id.tv_progress);
		//获取splsh的全局属性
		splash = (RelativeLayout)findViewById(R.id.splash);
		
		mPref = getSharedPreferences("config", MODE_PRIVATE);
		
		copyDB("address.db");//拷贝数据库
		copyDB("antivirus.db");//拷贝病毒库
		
		//更新病毒库
		updateVirous();
		
		//检测设置是否设置了自动更新
		boolean autoUpdate = mPref.getBoolean("auto_update", true);
		if(autoUpdate){
			checkVersion();
		}else{
			//不自动升级
			mHandler.sendEmptyMessageDelayed(CODE_ENTER_HOME, 2000);//延迟2s进入主页
		}
		
		//让splash页面有一个渐变的效果
		AlphaAnimation anim = new AlphaAnimation(0.3f, 1f);
		anim.setDuration(2000);
		splash.startAnimation(anim);
		
	}

	/*
	 * 更新病毒数据库
	 */
	private void updateVirous() {
		virous = new AntiVirous();
		//联网从服务器获取到最新数据的md5的特征码
		HttpUtils httpUtils = new HttpUtils();
		//新增的病毒库
		String url = "http://192.168.0.2:8080/virus.json";
		
		httpUtils.send(HttpMethod.GET, url, new RequestCallBack<String>() {

			@Override
			public void onFailure(HttpException arg0, String arg1) {
				// TODO Auto-generated method stub
				
			}

			@Override
			public void onSuccess(ResponseInfo<String> arg0) {
				//解析json
				try {
					JSONObject jsonObject = new JSONObject(arg0.result);
					/*
					 谷歌的gojosn
					 Gson gson = new Gson();
					//解析json
					Virus virus = gson.fromJson(arg0.result, Virus.class);
					dao.addVirus(virus.md5, virus.desc);
					 */
					//json的key-value配对{}
					String md5 = jsonObject.getString("md5");
					String desc = jsonObject.getString("desc");
					
					virous.addVirous(md5, desc);
				} catch (JSONException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				
			}
			
		});
		
	}

	/**
	 * 获取版本的版本名
	 */
	private String getVersionName() {
		// 获取到包的管理器
		PackageManager packagerManager = getPackageManager();

		try {
			// 获取包名
			PackageInfo packageInfo = packagerManager.getPackageInfo(
					getPackageName(), 0);
			// 版本号
			int versionCode = packageInfo.versionCode;
			// 版本名
			String versionName = packageInfo.versionName;
			System.out.println("versionName:" + versionName);
			return versionName;
		} catch (NameNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return "";
	}

	/**
	 * 获取版本的版本号
	 */
	private int getVersionCode() {
		// 获取到包的管理器
		PackageManager packagerManager = getPackageManager();

		try {
			// 获取包名
			PackageInfo packageInfo = packagerManager.getPackageInfo(
					getPackageName(), 0);
			// 版本号
			int versionCode = packageInfo.versionCode;
			// 版本名
			String versionName = packageInfo.versionName;
			System.out.println("versionCode:" + versionCode);
			return versionCode;
		} catch (NameNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return 0;
	}

	/**
	 * 从服务器获取版本信息校验,确定是否需要进行升级
	 */
	private void checkVersion() {
		// 获取当前的时间
		final long startTime = System.currentTimeMillis();

		// 防止阻塞主线程
		new Thread() {
			@Override
			public void run() {
				String path = "http://192.168.0.100:8080/update.json";
				Message msg = Message.obtain();
				HttpURLConnection conn = null;
				try {
					URL url = new URL(path);
					conn = (HttpURLConnection) url.openConnection();
					conn.setRequestMethod("GET");// 请求方式
					conn.setConnectTimeout(5000);// 链接超时
					conn.setReadTimeout(5000);// 响应超时,连接成功,但服务器不给响应
					conn.connect();// 链接服务器
					int responseCode = conn.getResponseCode();// 获取响应码
					if (responseCode == 200) {
						InputStream inputStream = conn.getInputStream();
						String result = StreamUtils
								.readFromeStream(inputStream);
						System.out.println("返回的结果是:" + result);

						// 解析json,作者的版本鸡西不了json,因此设置成固定值,正常应该是解析出来的值,注释下面5行
						/*
						 * 解析不了json为了测试,写成固定值 JSONObject jo = new
						 * JSONObject(result); mVersionName =
						 * jo.getString("versionName"); mVersionCode =
						 * jo.getInt("VersionCode"); mDesc =
						 * jo.getString("description"); mDownloadUrl =
						 * jo.getString("downloadUrl");
						 */
						JSONObject jo = new JSONObject(result);
						mVersionName = "2.0";
						mVersionCode = 2;
						mDesc = "赶紧升级啊";
						mDownloadUrl = "http://192.168.0.100:8080/Safe2.0.apk";
						System.out.println("添加的功能:" + mDesc);
						if (mVersionCode > getVersionCode()) {
							// 服务器的版本号大于本地的版本号,需要升级
							// 需要升级,弹出升级对话框
							msg.what = CODE_UPDATE_DIALOG;
						} else {
							// 没有版本更新,跳转主页
							msg.what = CODE_ENTER_HOME;
						}

					}
				} catch (MalformedURLException e) {
					// 更新异常
					msg.what = CODE_UPDATE_ERROR;
					e.printStackTrace();
				} catch (IOException e) {
					// 网络异常
					msg.what = CODE_NET_ERROR;
					e.printStackTrace();
				} catch (JSONException e) {
					// JSON异常
					msg.what = CODE_JSON_ERROR;
					e.printStackTrace();
				} finally {
					// 强制logo界面加载显示2s
					long endTime = System.currentTimeMillis();
					long timeUsed = endTime - startTime;
					if (timeUsed < 2000) {
						try {
							Thread.sleep(2000 - timeUsed);
						} catch (InterruptedException e) {
							// TODO Auto-generated catch block
							e.printStackTrace();
						}
					}

					// 主线程发消息
					mHandler.sendMessage(msg);
					// 关闭网络连接
					if (conn != null) {
						conn.disconnect();
					}
				}
			}
		}.start();

	}

	/**
	 * 弹出升级对话框
	 */
	private void showUpdate() {
		AlertDialog.Builder builder = new AlertDialog.Builder(this);
		builder.setTitle("最新版本:" + mVersionName);
		builder.setMessage(mDesc);
		// builder.setCancelable(false);//在升级页面不允许返回,这种方法不可取
		builder.setPositiveButton("立即更新", new OnClickListener() {

			@Override
			public void onClick(DialogInterface dialog, int which) {
				// 下载新版的apk
				download();

			}

		});

		builder.setNegativeButton("稍后更新", new OnClickListener() {

			@Override
			public void onClick(DialogInterface dialog, int which) {
				// 用户不升级直接跳转到主页
				enterHome();
			}

		});

		// 监听升级页面,用户按下返回按键,直接跳到主界面
		builder.setOnCancelListener(new OnCancelListener() {

			@Override
			public void onCancel(DialogInterface dialog) {
				// TODO Auto-generated method stub
				enterHome();
			}

		});

		builder.show();
	}

	/**
	 * 下载新版的apk
	 */
	protected void download() {
		// 先判断有没有sd卡
		if (Environment.getExternalStorageState().equals(
				Environment.MEDIA_MOUNTED)) {
			// 下载的时候让进度显示
			tv_progress.setVisibility(View.VISIBLE);

			// 文件下载的位置
			String target = Environment.getExternalStorageDirectory()
					+ "/UPDATE.APK";
			// 利用github的Xutils执行下载
			HttpUtils utils = new HttpUtils();
			utils.download(mDownloadUrl, target, new RequestCallBack<File>() {

				@Override
				public void onLoading(long total, long current,
						boolean isUploading) {
					super.onLoading(total, current, isUploading);
					System.out.println("下载进度" + current + "/" + total);

					tv_progress.setText("下载进度:" + current * 100 / total + "%");
				}

				// 下载失败
				@Override
				public void onFailure(HttpException arg0, String arg1) {
					Toast.makeText(SplashActivity.this, "下载失败",
							Toast.LENGTH_SHORT).show();

				}

				// 下载成功
				@Override
				public void onSuccess(ResponseInfo<File> arg0) {
					System.out.println("下载成功");
					// 跳转到系统的下载页面
					Intent intent = new Intent(Intent.ACTION_VIEW);
					intent.addCategory(Intent.CATEGORY_DEFAULT);
					intent.setDataAndType(Uri.fromFile(arg0.result),
							"application/vnd.android.package-archive");
					// startActivity(intent);
					startActivityForResult(intent, 0);// 如果用户取消安装,会返回结果,会调用发onActivityResult

				}

			});
		} else {
			Toast.makeText(SplashActivity.this, "没有sd卡", Toast.LENGTH_SHORT)
					.show();
		}

	}

	/**
	 * 防止用户在升级界面按下返回按键
	 */
	@Override
	protected void onActivityResult(int requestCode, int resultCode, Intent data) {
		enterHome();
		super.onActivityResult(requestCode, resultCode, data);
	}

	/**
	 * 进入主页面
	 */
	public void enterHome() {
		Intent intent = new Intent(this, HomeActivity.class);
		startActivity(intent);
	}
	
	/*
	 * 拷贝数据库
	 */
	public void copyDB(String dbName){
		//获取数据库的文件路径,要拷贝的目标地址
		File targetFile = new File(getFilesDir(), dbName);//
		//数据库存在
		if(targetFile.exists()){
			System.out.println("数据库已经存在");
			return;
		}
		FileOutputStream out = null;
		InputStream in = null;
		try {
			in = getAssets().open(dbName);
			out = new FileOutputStream(targetFile);
			//读数据
			int len = 0;
			byte[] buffer = new byte[1024];
			
			while((len = in.read(buffer)) != -1 ){
				out.write(buffer, 0, len);
			}
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally{
			try {
				in.close();
				out.close();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}

}



传送带损坏与对象检测数据集 一、基础信息 • 数据集名称:传送带损坏与对象检测数据集 • 图片数量: 训练集:645张图片 验证集:185张图片 测试集:92张图片 总计:922张工业监控图片 • 训练集:645张图片 • 验证集:185张图片 • 测试集:92张图片 • 总计:922张工业监控图片 • 分类类别: Hole(孔洞):传送带表面的孔洞损坏。 Human(人类):工作区域中的人类,用于安全监控。 Other Objects(其他对象):非预期对象,可能引起故障。 Puncture(刺穿):传送带被刺穿的损坏。 Roller(滚筒):传送带滚筒部件。 Tear(撕裂):传送带撕裂损坏。 impact damage(冲击损坏):由于冲击导致的损坏。 patch work(修补工作):已修补的区域。 • Hole(孔洞):传送带表面的孔洞损坏。 • Human(人类):工作区域中的人类,用于安全监控。 • Other Objects(其他对象):非预期对象,可能引起故障。 • Puncture(刺穿):传送带被刺穿的损坏。 • Roller(滚筒):传送带滚筒部件。 • Tear(撕裂):传送带撕裂损坏。 • impact damage(冲击损坏):由于冲击导致的损坏。 • patch work(修补工作):已修补的区域。 • 标注格式:YOLO格式,包含边界框和类别标签,适用于目标检测任务。 • 数据格式:图像数据来源于工业监控系统,适用于计算机视觉分析。 二、适用场景 • 工业自动化检测系统开发:用于构建自动检测传送带损坏和异物的AI模型,实现实时监控和预防性维护,减少停机时间。 • 安全监控应用:识别人类和其他对象,提升工业环境的安全性,避免事故和人员伤害。 • 学术研究与创新:支持计算机视觉在制造业、物流和自动化领域的应用研究,促进AI技术与工业实践的融合。 • 教育与培训:可用于培训AI模型或作为工业工程和自动化教育的案例数据,帮助学习者理解实际应用场景。 三、数据集优势 • 多样化的类别覆盖:包含8个关键类别,涵盖多种损坏类型和对象,确保模型能够处理各种实际工业场景,提升泛化能力。 • 精准的标注质量:采用YOLO格式,边界框标注准确,由专业标注人员完成,保证数据可靠性和模型训练效果。 • 强大的任务适配性:兼容主流深度学习框架(如YOLO、TensorFlow、PyTorch),可直接用于目标检测任务,并支持扩展至其他视觉任务需求。 • 突出的工业价值:专注于工业传送带系统的实际需求,帮助提升生产效率、降低维护成本,并增强工作场所安全,具有较高的实际应用价值。
一、基础信息 • 数据集名称:垃圾废弃物目标检测数据集 • 图片数量: 训练集:1124张图片 验证集:375张图片 总计:1499张图片 • 训练集:1124张图片 • 验证集:375张图片 • 总计:1499张图片 • 分类类别:包含60多个垃圾和废弃物类别,如气溶胶、铝泡罩包装、电池、破碎玻璃、卡片泡罩包装、香烟、透明塑料瓶、瓦楞纸箱、薯片袋、一次性食品容器、一次性塑料杯、饮料罐、饮料纸盒、鸡蛋盒、泡沫杯、泡沫食品容器、食品罐、食物垃圾、垃圾袋、玻璃瓶、玻璃杯、玻璃罐、杂志纸、餐盒、金属瓶盖、金属盖、普通纸、其他纸箱、其他塑料、其他塑料瓶、其他塑料容器、其他塑料杯、其他塑料包装、纸袋、纸杯、纸吸管、披萨盒、塑料瓶盖、塑料薄膜、塑料手套、塑料盖、塑料吸管、塑料餐具、聚丙烯袋、拉环、绳子、废金属、鞋子、一次性购物袋、六罐环、涂抹管、可挤压管、泡沫塑料片、纸巾、厕纸管、特百惠、未标记垃圾、包装纸等。 • 标注格式:YOLO格式,包含边界框和类别标签,适用于目标检测任务。 • 数据格式:图片来源于实际场景,细节清晰。 二、适用场景 • 垃圾自动分类系统开发:数据集支持目标检测任务,帮助构建能够自动识别和分类垃圾物品的AI模型,用于智能垃圾桶或回收系统,提升废弃物管理效率。 • 环保应用研发:集成至环保和废弃物管理应用,提供实时垃圾识别功能,促进回收和环境保护,支持可持续发展倡议。 • 学术研究与创新:支持计算机视觉与环保领域的交叉研究,助力发表垃圾识别和AI技术相关学术论文,推动技术创新。 • 教育与培训:可用于学校或培训机构,作为垃圾分类和AI目标检测教学的重要资源,培养环保意识和技术能力。 三、数据集优势 • 精准标注与多样性:每张图片经过准确标注,确保边界框定位精确;包含多种垃圾类别,覆盖常见废弃物,提升模型的泛化能力和鲁棒性。 • 任务适配性强:标注兼容主流深度学习框架(如YOLO等),可直接用于目标检测任务,并支持扩展到其他视觉任务,如分类或分割。 • 实际应用价值:专注于垃圾识别,为环保、废弃物管理和回收提供重要数据支撑,有助于减少污染和促进循环经济。
水下垃圾实例分割数据集 一、基础信息 • 数据集名称:水下垃圾实例分割数据集 • 图片数量: 训练集:1049张图片 验证集:300张图片 测试集:150张图片 总计:1499张图片 • 训练集:1049张图片 • 验证集:300张图片 • 测试集:150张图片 • 总计:1499张图片 • 分类类别: Aerosol(气溶胶罐) Aluminium blister pack(铝泡罩包装) Aluminium foil(铝箔) Battery(电池) Broken glass(碎玻璃) Carded blister pack(卡式泡罩包装) Cigarette(香烟) Clear plastic bottle(透明塑料瓶) Corrugated carton(瓦楞纸箱) Crisp packet(薯片袋) Disposable food container(一次性食品容器) Disposable plastic cup(一次性塑料杯) Drink can(饮料罐) Drink carton(饮料纸盒) Egg carton(鸡蛋盒) Foam cup(泡沫杯) Foam food container(泡沫食品容器) Food Can(食品罐) Food waste(食物垃圾) Garbage bag(垃圾袋) Glass bottle(玻璃瓶) Glass cup(玻璃杯) Glass jar(玻璃罐) Magazine paper(杂志纸) Meal carton(餐盒) Metal bottle cap(金属瓶盖) Metal lid(金属盖子) Normal paper(普通纸) Other carton(其他纸盒) Other plastic(其他塑料) Other plastic bottle(其他塑料瓶) Other plastic container(其他塑料容器) Other plastic cup(其他塑料杯) Other plastic wrapper(其他塑料包装) Paper bag(纸袋) Paper cup(纸杯) Paper straw(纸吸管) Pizza box(披萨盒) Plastic bottle cap(塑料瓶盖) Plastic film(塑料薄膜) Plastic gloves(塑料手套) Plastic lid(塑料盖子) Plastic straw(塑料吸管) Plastic utensils(塑料餐具) Polypropylene bag(聚丙烯袋) Pop tab(易拉罐拉环) Rope - strings(绳子-字符串) Scrap metal(废金属) Shoe(鞋子) Single-use carrier bag(一次性购物袋) Six pack rings(六罐环) Spread tub(涂抹桶) Squeezable tube(可挤压管) Styrofoam piece(泡沫塑料片) Tissues(纸巾) Toilet tube(卫生纸卷) Tupperware(特百惠) Unlabeled litter(未标记垃圾) Wrapping paper(包装纸) • Aerosol(气溶胶罐) • Aluminium blister pack(铝泡罩包装) • Aluminium foil(铝箔) • Battery(电池) • Broken glass(碎玻璃) • Carded blister pack(卡式泡罩包装) • Cigarette(香烟) • Clear plastic bottle(透明塑料瓶) • Corrugated carton(瓦楞纸箱) • Crisp packet(薯片袋) • Disposable food container(一次性食品容器) • Disposable plastic cup(一次性塑料杯) • Drink can(饮料罐) • Drink carton(饮料纸盒) • Egg carton(鸡蛋盒) • Foam cup(泡沫杯) • Foam food container(泡沫食品容器) • Food Can(食品罐) • Food waste(食物垃圾) • Garbage bag(垃圾袋) • Glass bottle(玻璃瓶) • Glass cup(玻璃杯) • Glass jar(玻璃罐) • Magazine paper(杂志纸) • Meal carton(餐盒) • Metal bottle cap(金属瓶盖) • Metal lid(金属盖子) • Normal paper(普通纸) • Other carton(其他纸盒) • Other plastic(其他塑料) • Other pl
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值