OpenCV | 告别人工目检:深度学习技术引领工业品缺陷检测新时代
文章目录
- 机器视觉
- 缺陷检测
- 工业上常见缺陷检测方法
- 内容简介
- 作者简介
- 目录
- 读者对象
- 如何阅读本书
- 获取方式
机器视觉
机器视觉是使用各种工业相机,结合传感器跟电气信号实现替代传统人工,完成对象识别、计数、测量、缺陷检测、引导定位与抓取等任务。其中工业品的缺陷检测极大的依赖人工完成,特别是传统的3C制造环节,产品缺陷检测依赖于人眼睛来发现与检测,不仅费时费力还面临人员成本与工作时间等因素的制约。使用机器视觉来实现产品缺陷检测,可以节约大量时间跟人员成本,实现生产过程的自动化与流水线作业。
缺陷检测
常见得工业品缺陷主要包括划痕、脏污、缺失、凹坑、裂纹等,这些依赖人工目检(眼睛检测)的缺陷都可以通过机器视觉的缺陷检测算法来实现替代。当前工业缺陷检测算法目前主要分为两个方向,基于传统视觉的算法和基于深度学习的算法,前者主要依靠对检测目标的特征进行量化,比如颜色,形状,长宽,角度,面积等,好处是可解释性强、对样本数量没有要求、运行速度快,缺点是依赖于固定的光照成像,稍有改动就要改写程序重新部署,而且检测规则和算法跟开发者经验其主导作用。基于深度学习的缺陷检测算法刚好能弥补前者的不足之处,能够很好适应不同的光照,更好地适配同类缺陷要求,缺点是对样本数量有一定要求,对硬件配置相比传统也会有一定要求。
《OpenCV应用开发:入门、进阶与工程化实践》一书第十四 章 通过案例详细介绍基于OpenCV如何实现传统方式的缺陷检测跟基于深度学习的缺陷检测。
工业上常见缺陷检测方法
方法一:基于简单二值图像分析实现划痕提取,效果如下:
方法二:复杂背景下的图像缺陷分析,基于频域增强的方法实现缺陷检测,运行截图:
方法三:复杂背景下的图像缺陷分析,基于空域增强实现图像缺陷分析,针对复杂背景的图像,通过空域滤波增强以后实现缺陷查找,运行截图如下:
方法四:基于样品模板比对实现基于空域增强实现图像缺陷分析,通过二之分析与轮廓比对实现缺陷查找,运行截图如下:
方法五:基于深度学习UNet模型网络,实现裂纹与划痕检测,运行截图如下:
方法六:基于深度学习实例分割网络模型网络,实现细微缺陷检测,运行截图如下:
以上内容均来自最近出版的一本新书《OpenCV应用开发:入门、进阶与工程化实践》一书第十四章,分享给大家。
内容简介
本书专注于介绍OpenCV4在工业领域的常用模块,通过合理的章节设置构建了阶梯式的知识点学习路径。化繁就简、案例驱动,注重算法原理、代码演示及在相关场景的实际使用。本书还介绍了必备的深度学习知识与开发技巧,拓展OpenCV开发者技能。全书共16章,分为3篇。
● 基础篇(第1~4章):主要介绍OpenCV的简单使用、像素操作、色彩空间、图像直方图。
特色:从如何配置OpenCV开发环境开始到完成第一个OpenCV代码演示,从图像的表示到基本的像素操作,方便读者全面扎实地掌握基本图像处理知识与函数使用技巧,为深入学习打下坚实基础。
● 进阶篇(第5~12章):主要介绍卷积操作、二值图像分析、形态学分析、特征提取、视频分析、机器学习、DNN。
特色:结合代码演示学习OpenCV框架中主要图像处理模块的算法原理与相关函数使用,通过多个案例打通知识节点,学会使用OpenCV传统算法解决实际问题。
● 高级与实战篇(第13~16章):主要介绍YOLO 5自定义对象检测、缺陷检测、OpenVINO加速与CUDA加速。
特色:面向工程应用,帮助OpenCV开发者提升技能,通过实战案例增强OpenCV应用能力,掌握视觉开发必备的深度学习知识,以及从模型训练到部署加速的技巧。
作者简介
贾志刚
OpenVINO中文社区创始成员、英特尔物联网创新大使、华为晟腾HAE、51CTO学院金牌讲师。在机器视觉缺陷检测、生物医学细胞分类与检测识别、安防监控视频内容分析与提取、人工智能软件开发、深度学习框架集成开发等方面有深入研究,开发过多个图像处理算法模块并成功应用在医学检测与工业检测领域。开设有公众号“OpenCV学堂”,并著有《Java数字图像处理:编程技巧与应用实践》《OpenCV Android开发实战》等书。
张 振
上海赫立苏州研究院(赫芯科技)院长,具备丰富的机器视觉检测一线研发、管理与运营经验。深耕半导体/SMT缺陷检测领域10余年,拥有自主知识产权的软件和相关专利数十项。多年成功创业经历,积累了丰富的研发创新和团队管理经验,并参与市场与客户需求分析、技术分析与评估、方案制订、算法迭代、验收指标制定、标准机型量产的全流程管理与实践。
目录
前言基础篇第1章 OpenCV简介与安装 / 21.1 OpenCV简介 / 21.1.1 OpenCV历史 / 21.1.2 OpenCV的模块与功能 / 31.1.3 OpenCV4里程碑 / 41.1.4 OpenCV发展现状与应用趋势 / 41.2 OpenCV源码项目 / 41.3 OpenCV4开发环境搭建 / 51.4 第一个OpenCV开发程序 / 61.5 图像加载与保存 / 71.5.1 加载图像 / 71.5.2 保存图像 / 81.6 加载视频 / 91.7 小结 / 12第2章 Mat与像素操作 / 132.1 Mat对象 / 132.1.1 什么是Mat对象 / 132.1.2 一切图像皆Mat / 142.1.3 Mat类型与深度 / 152.1.4 创建Mat / 152.2 访问像素 / 182.2.1 遍历Mat中的像素 / 182.2.2 像素算术运算 / 202.2.3 位运算 / 212.2.4 调整图像亮度与对比度 / 222.3 图像类型与通道 / 232.3.1 图像类型 / 232.3.2 图像通道 / 232.3.3 通道操作 / 242.4 小结 / 25第3章 色彩空间 / 263.1 RGB色彩空间 / 263.2 HSV色彩空间 / 283.3 LAB色彩空间 / 293.4 色彩空间的转换与应用 / 303.5 小结 / 31第4章 图像直方图 / 324.1 像素统计信息 / 324.2 直方图的计算与绘制 / 344.2.1 直方图计算 / 354.2.2 直方图绘制 / 364.3 直方图均衡化 / 374.4 直方图比较 / 404.5 直方图反向投影 / 414.6 小结 / 43进阶篇第5章 卷积操作 / 465.1 卷积的概念 / 465.2 卷积模糊 / 495.3 自定义滤波 / 535.4 梯度提取 / 565.5 边缘发现 / 595.6 噪声与去噪 / 615.7 边缘保留滤波 / 645.8 锐化增强 / 665.9 小结 / 68第6章 二值图像 / 706.1 图像阈值化分割 / 706.2 全局阈值计算 / 726.3 自适应阈值计算 / 766.4 去噪与二值化 / 776.4.1 去噪对二值化的影响 / 776.4.2 其他方式的二值化 / 786.5 小结 / 79第7章 二值分析 / 807.1 二值图像分析概述 / 807.2 连通组件标记 / 827.3 轮廓发现 / 857.3.1 轮廓发现函数 / 857.3.2 轮廓绘制函数 / 877.3.3 轮廓发现与绘制的示例代码 / 877.4 轮廓测量 / 887.5 拟合与逼近 / 907.6 轮廓分析 / 957.7 直线检测 / 977.8 霍夫圆检测 / 997.9 最大内接圆与最小外接圆 / 1017.10 轮廓匹配 / 1027.11 最大轮廓与关键点编码 / 1047.12 凸包检测 / 1067.13 小结 / 107第8章 形态学分析 / 1088.1 图像形态学概述 / 1088.2 膨胀与腐蚀 / 1098.3 开/闭操作 / 1118.4 形态学梯度 / 1138.5 顶帽与黑帽 / 1158.6 击中/击不中 / 1168.7 结构元素 / 1198.8 距离变换 / 1208.9 分水岭分割 / 1218.10 小结 / 124第9章 特征提取 / 1259.1 图像金字塔 / 1259.1.1 高斯金字塔 / 1259.1.2 拉普拉斯金字塔 / 1289.1.3 图像金字塔融合 / 1299.2 Harris角点检测 / 1319.3 shi-tomas角点检测 / 1339.4 亚像素级别的角点检测 / 1359.5 HOG特征与使用 / 1379.5.1 HOG特征描述子 / 1379.5.2 HOG特征行人检测 / 1399.6 ORB特征描述子 / 1409.6.1 关键点与描述子提取 / 1409.6.2 描述子匹配 / 1449.7 基于特征的对象检测 / 1489.7.1 单应性矩阵计算方法 / 1489.7.2 特征对象的位置发现 / 1509.8 小结 / 152第10章 视频分析 / 15310.1 基于颜色的对象跟踪 / 15310.2 视频背景分析 / 15510.3 帧差法背景分析 / 15710.4 稀疏光流分析法 / 15810.5 稠密光流分析法 / 16110.6 均值迁移分析 / 16310.7 小结 / 166第11章 机器学习 / 16711.1 KMeans分类 / 16711.1.1 KMeans图像语义分割 / 16711.1.2 提取主色彩构建色卡 / 17011.2 KNN分类 / 17211.2.1 KNN函数支持 / 17211.2.2 KNN实现手写数字识别 / 17311.3 SVM分类 / 17511.3.1 SVM的原理与分类 / 17511.3.2 SVM函数 / 17611.3.3 SVM实现手写数字识别 / 17611.4 SVM与HOG实现对象检测 / 17711.4.1 数据样本特征提取 / 17811.4.2 SVM特征分类 / 17911.4.3 构建SVM对象检测器 / 17911.5 小结 / 181第12章 深度神经网络 / 18212.1 DNN概述 / 18212.2 图像分类 / 18312.3 对象检测 / 18612.3.1 SSD对象检测 / 18712.3.2 Faster-RCNN对象检测 / 18812.3.3 YOLO对象检测 / 19012.4 ENet图像语义分割 / 19312.5 风格迁移 / 19512.6 场景文字检测 / 19712.7 人脸检测 / 19912.8 小结 / 201高级与实战篇第13章 YOLO 5自定义对象检测 / 20413.1 YOLO 5对象检测框架 / 20413.2 YOLO 5对象检测 / 20513.3 自定义对象检测 / 20813.3.1 数据集制作与生成 / 20913.3.2 模型训练与查看损失曲线 / 21013.3.3 模型导出与部署 / 21113.4 小结 / 212第14章 缺陷检测 / 21314.1 简单背景下的缺陷检测 / 21314.2 复杂背景下的缺陷检测 / 21614.2.1 频域增强的缺陷检测 / 21614.2.2 空间域增强的缺陷检测 / 21914.3 案例:刀片缺陷检测 / 22014.4 基于深度学习的缺陷检测 / 22214.4.1 基于分类的缺陷检测 / 22314.4.2 基于分割的缺陷检测 / 22614.5 小结 / 228第15章 OpenVINO加速 / 22915.1 OpenVINO框架安装与环境配置 / 22915.1.1 OpenVINO安装 / 23015.1.2 配置C++开发支持 / 23215.2 OpenVINO2022.x版SDK推理演示 / 23315.2.1 推理SDK介绍 / 23415.2.2 推理SDK演示 / 23515.3 OpenVINO支持UNet部署 / 23615.4 OpenVINO支持YOLO 5部署 / 23715.5 小结 / 239第16章 CUDA加速 / 24016.1 编译OpenCV源码支持CUDA加速 / 24016.2 用CUDA加速传统图像处理 / 24516.2.1 Mat与GpuMat / 24516.2.2 加速图像处理与视频分析 / 24616.3 加速DNN / 24816.4 小结 / 249
读者对象
本书适合以下读者阅读:
- 计算机视觉领域的从业者。
- OpenCV的爱好者。
- 高等院校相关专业的师生。
- C++/Python开发者。
如何阅读本书
本书共16章,分为3篇,由浅入深地讲解OpenCV的技术及应用。
基础篇(第1~4章)主要介绍了OpenCV4框架中基础模块相关的图像知识、函数及应用。
进阶篇(第5~12章)深入介绍了OpenCV4核心模块的功能与应用场景,主要包括图像卷积、二值分析、形态学分析、特征提取、视频分析、机器学习模块等,其中穿插大量实践案例。
高级与实战篇(第13~16章)全面介绍了OpenCV4支持的各种性能加速技术与深度学习模型推理技术,从项目实现出发,讲解了对象检测、缺陷检测、深度学习模型加速等高级应用层面的OpenCV开发技术。
获取方式
京东图书:《OpenCV4应用开发:入门、进阶与工程化实践》(贾志刚,张振)
相关文章:
OpenCV | 告别人工目检:深度学习技术引领工业品缺陷检测新时代
文章目录 机器视觉缺陷检测工业上常见缺陷检测方法内容简介作者简介目录读者对象如何阅读本书获取方式 机器视觉 机器视觉是使用各种工业相机,结合传感器跟电气信号实现替代传统人工,完成对象识别、计数、测量、缺陷检测、引导定位与抓取等任务。其中工…...
Inkscape SVG 编辑器 导入 Gazebo
概述 本教程描述了拉伸 SVG 文件的过程,这些文件是 2D 的 图像,用于在 Gazebo 中为您的模型创建 3D 网格。有时是 更容易在 Inkscape 或 Illustrator 等程序中设计模型的一部分。 在开始之前,请确保您熟悉模型编辑器。 本教程将向您展示如…...
基于比较的排序算法总结(java实现版)
目录 什么是基于比较的排序算法 什么是排序算法的稳定性 基础排序算法的稳定性 插入排序法 希尔排序法 冒泡排序法 总结 高级算法的稳定性 快速排序法 堆排序法 归并排序法 总结 注意 什么是基于比较的排序算法 基于比较的排序算法定义:之所以能给元素…...
集群与分布式的概念及区别
目前在工作中经常接触到集群的概念,通过这篇文章总结一下集群的几种方式以及和分布式对比学习 1.集群(Cluster) 集群是由多个计算机节点组成的网络,旨在共同提供服务,并确保高性能和高可用性。在高可用集群中…...
基于ssm+vue的在线听书网站论文
摘 要 传统信息的管理大部分依赖于管理人员的手工登记与管理,然而,随着近些年信息技术的迅猛发展,让许多比较老套的信息管理模式进行了更新迭代,书籍信息因为其管理内容繁杂,管理数量繁多导致手工进行处理不能满足广大…...
hive命令启动出现classnotfound
环境:ambari集群三个节点node104、node105和node106,其中node105上有hiveserver2,并且三个节点均有HIVE CLIENT 注意:“./”指hive安装目录 其中装有hiveserver2的node105节点,由于某种需要向lib目录下上传了某些jar包…...
拥抱数字化转型,共赢数字时代 | 创维汽车商学院走进竹云
数字化浪潮汹涌而来,变革与创新接踵而至。随着数字技术日益融入经济社会发展的各个领域,数字经济与实体经济的“双向奔赴”也不断催生着新产业、新业态、新模式,为经济社会发展持续注入创新活力。12月19日,创维汽车商学院带领嘉宾…...
蓝桥杯:日期问题
目录 引言一、日期问题1.题目描述2.代码实现3.测试 二、回文日期1.题目描述2.代码实现3.测试 引言 关于这个蓝桥杯的日期问题,其实有一个明确的思路就感觉很简单,这个思路就是不用依照日期的顺序去把每一天走完,而是根据一个数加一ÿ…...
vue 简单实现购物车:商品基础信息最终的 html 文件 + 商品计数器的组件处理,实现了购物车;
购物车实现过程: Ⅰ、商品购物车作业需求:1、商品购物车页面示例:2、具体需求: Ⅱ、html 文件的构建:商品购物车.html Ⅲ、组件文件的构建:商品购物车1.js Ⅳ、小结: Ⅰ、商品购物车作业需求&am…...
交叉熵损失(Cross Entropy Loss)学习笔记
在分类任务中,我们通常使用交叉熵作为损失函数,首先给出交叉熵的计算公式: 二分类中: L 1 N ∑ i L i 1 N ∑ i − [ y i l o g ( p i ) ( 1 − y i ) ⋅ l o g ( 1 − p i ) ] \mathcal{L}\frac1{N}\sum_{i}L_i\frac1{N}\sum…...
python flask alchemy在判断None值时与flake8格式检测冲突
python flask alchemy 在判断None值时候,推荐使用/!来判断。例如: query.filter(User.nameNone)query.filter(User.name!None) 但是这样的代码提交后时过不了flake8的语法检查,会报错: flake8...................................…...
Text Intelligence - TextIn.com AI时代下的智能文档识别、处理、转换
本指南将介绍Text Intelligence,AI时代下的智能文档技术平台 Textin.com 关注TechLead,分享AI全维度知识。作者拥有10年互联网服务架构、AI产品研发经验、团队管理经验,同济本复旦硕,复旦机器人智能实验室成员,阿里云认…...
55.0/CSS 的应用(详细版)
目录 55.1.1 设计边框样式 55.1.2 调整边框的粗细 55.1.3 边框颜色 55.1.4 复合设置边框 55.2 模块的边距 55.3 模块的内边距 55.4 层的应用 55.4.1 层的建立 55.4.2 浮动——float 55.4.3 清除浮动 55.4.4 层的定位 55.4.5 设置层的溢出——overflow 55.4.6 设置鼠…...
磁盘类型选择对阿里云RDS MySQL的性能影响
测试说明 这是一个云数据库性能测试系列,旨在通过简单标准的性能测试,帮助开发者、企业了解云数据库的性能,以选择适合的规格与类型。这个系列还包括: * 云数据库(RDS MySQL)性能深度测评与对比 * 阿里云RDS标准版(x86) vs 经济…...
数据结构---算法的时间复杂度
文章目录 前言计算机重要存储数据结构与算法数据结构概念算法 数据库概念 算法的复杂度时间复杂度概念为什么有时间复杂度大O渐进表示法时间复杂度实例实例1:时间复杂度:O(N)实例2:这里输入参数是不确定的所以 时间复杂…...
后缀为.vue是什么文件
.vue是一种文件格式,它是用于构建Web应用程序的前端框架Vue.js的组件文件 Vue.js是一个流行的JavaScript框架,用于构建用户界面 在Vue.js中,应用程序被组织为一组可重用的组件,而.vue文件就是用来定义这些组件的 一个.vue文件包…...
前端微信小程序AES加密解密踩坑
项目场景: 今天蛮沮丧的,在和别人对接的时候aes加解密的时候踩了坑。今天有个同事请假了,所以本来他和别人对接的活,老大给了我,然后我就正式踏上了战战兢兢的对接之路。 1.一开始的时候对面先是问用的啥加密方法。这…...
代码随想录算法训练营第五十八天| 739 每日温度 496 下一个更大元素 |
目录 739 每日温度 496 下一个更大元素 | 739 每日温度 求后面第一个比他大的元素的位置,单调栈如果递增 求后面第一个比他小的元素的位置,单调栈需要递减 class Solution { public:vector<int> dailyTemperatures(vector<int>& tempe…...
配置自定义RedisTemplate 解决redis序列化java8 LocalDateTime
目录 配置自定义RedisTemplate 引入依赖 配置连接redis 编写测试类 出现问题 配置序列化 解决redis序列化java8 LocalDateTime 问题背景 问题描述 问题分析 解决方案一(全局) 解决方案二(单个字段) 配置自定义RedisTe…...
华为---登录USG6000V防火墙---console、web、telnet、ssh方式登录
目录 一、环境搭建 二、第一次登录USG6000V防火墙,即通过console方式登录 三、用户配置 四、web登录USG6000V防火墙 1. 用web创建的用户通过web方式登录USG6000V防火墙 2. 命令行创建的用户通过web方式登录USG6000V防火墙 五、ssh方式登录USG6000V防火墙 1. 用…...
css图片属性,图片自适应
CSS 图片属性指南:background-size 和 object-fit 在前端开发中,使用图片是非常常见的。为了让图片在网页中显示得更好,CSS 提供了多种属性来调整和控制图片的大小和布局。其中,background-size 和 object-fit 是两个常用的属性&a…...
【Python百宝箱】数据科学的黄金三角:数据挖掘和聚类
数据之舞:Python数据科学库横扫全场 前言 在当今数据驱动的时代,Python成为数据科学家和分析师的首选工具之一。本文将介绍一系列强大的Python库,涵盖了数据处理、可视化、机器学习和自然语言处理等领域。无论你是初学者还是经验丰富的数据…...
【数据结构和算法】最大连续1的个数 III
其他系列文章导航 Java基础合集数据结构与算法合集 设计模式合集 多线程合集 分布式合集 ES合集 文章目录 其他系列文章导航 文章目录 前言 一、题目描述 二、题解 2.1 方法一:滑动窗口 2.2 滑动窗口解题模板 三、代码 3.1 方法一:滑动窗口 四、…...
AngularJS
理解实现代码的逻辑为主要,代码怎么写为次要。 参考资料: 《AngularJS入门与进阶》,江荣波著 前端开发常用框架 React:由Facebook开发,用于构建用户界面的JavaScript库,以组件化和虚拟DOM著称。 Angular&…...
初级数据结构(七)——二叉树
文中代码源文件已上传:数据结构源码 <-上一篇 初级数据结构(六)——堆 | NULL 下一篇-> 1、写在前面 二叉树的基本概念在《初级数据结构(五)——树和二叉树的概念》中已经介绍得足够详细了。上一…...
对比学习综述
1.简介 2.相关工作 2.1、Inst Disc 代理任务:个体判别。把每一个图片看作是一种类别,把每一个图片都区分开来。 正负样本选择:正样本是图片本身,负样本是数据集里的其他图片,该文章从memory bank中随机抽取4096个负…...
R语言【cli】——cli_warn可以更便捷的在控制台输出警告信息
Package cli version 3.6.2 cli_warn(message, ..., .envir parent.frame()) 参数【message】:它是通过调用 cli_bullets() 进行格式化的。进一步地,还需要调用 inline-makeup(内联标记)。 参数【...】:传递给 rlan…...
从零开始创建GPTs 人人都可以编写自己的ChatGPT产品
在这个人工智能迅猛发展的时代,GPT(生成式预训练变换器)已经成为一项令人兴奋的技术,它打开了创意和知识的新大门。无论你是一名编程新手、一位热爱探索的学生,还是对未来充满好奇的专业人士,GPTs都可以为你…...
人工智能对网络安全的影响
技术的快速发展带来了不断增长的威胁环境,网络犯罪分子和恶意行为者利用我们互联世界中的漏洞。在这个数字时代,数据泄露和网络攻击呈上升趋势,仅靠传统的安全措施已经不够了。人工智能 (AI) 的进步彻底改变了网络安全…...
鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之TextInput输入框组件
鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之TextInput输入框组件 一、操作环境 操作系统: Windows 10 专业版 IDE:DevEco Studio 3.1 SDK:HarmonyOS 3.1 二、TextInput 接口 TextInput(value?:{placeholder?: ResourceStr, tex…...
广州商城网站建设/百度关键词查询工具
问题: 有位来自日本的用户发邮件,请求我们在Spotfire报表(趋势分析报告) 网页上添加一个“Edit”按钮。说是以前是有的,现在的版本中找不到了。她需要对Spotifre的报表做一些优化,再报告给相关试验的CRA们…...
学做ps的网站有哪些/东莞网站制作十年乐云seo
在类中的静态函数里面不能使用$this因为静态不用实例化就生成了内存空间,而类需要实例化之后才生成内存空间,两个内存不在一起所以不能互相访问。所以下面的写法是错误的;class Book extends Goods {public $anthor;public $publisher;static…...
机关网站机制建设情况/seo优化包括
寄生组合式继承 定义:所谓寄生组合式继承,即通过借用构造函数来继承属性,通过原型链的混成形式来继承方法。其背后的基本思路是:不必为了指定子类型的原型而调用超类型的构造函数,我们所需要的无非就是超类型原型的一…...
网站建设 方案下载/网络软件开发
背景 随着产品功能不断的迭代,总会有需求希望在保证不影响其他区域功能的前提下,在某一区域实现根据选择器切换不同的内容显示。 苹果并不推荐嵌套滚动视图,如果直接添加的话,就会出现下图这种情况,手势的冲突造成了体…...
pytson做网站安全吗/seo外链工具
一、昨天干了什么? 对我们最后要发布的版本不断修复,将软件发布到蒲公英开放平台,集成蒲公英SDK,新增摇一摇反馈的功能和版本更新功能。 二、今天准备做什么? 向同学们宣传我们的软件,然后给我们提供反馈&a…...
ps做网站导航/投诉百度最有效的电话
http://blog.tangcs.com/2009/07/24/basketball-shooting/转载于:https://www.cnblogs.com/WarrenTang/articles/1530149.html...