阅读更多
Druid是阿里巴巴开源平台上的一个项目,整个项目由数据库连接池、插件框架和SQL解析器组成。该项目主要是为了扩展JDBC的一些限制,可以让程序员实现一些特殊的需求,比如向密钥服务请求凭证、统计SQL信息、SQL性能收集、SQL注入检查、SQL翻译等,程序员可以通过定制来实现自己需要的功能。

该项目在阿里巴巴内部得到了广泛的部署,在外部也有大量的用户群。为了使大家更好地了解和使用Druid,我们采访了Druid项目的主要负责人——温少(博客)。

温少是ITeye的名人了,为了照顾新会员,先来个自我介绍吧! Top

我2001年毕业于深圳大学,毕业后到金蝶软件研发中心工作9年,工作内容包括工作流引擎、多数据库支持引擎、短信网网关等。

2010年3月加入阿里巴巴至今,主要的工作是设计和实现阿里巴巴应用监控系统Dragoon,Druid和Fastjson都是监控系统实现的副产品。

Druid是什么?有什么作用? Top

Druid首先是一个数据库连接池,但它不仅仅是一个数据库连接池,它还包含一个ProxyDriver,一系列内置的JDBC组件库,一个SQL Parser。

Druid的项目背景?目前的项目团队情况?开源目的? Top

2010年开始,我负责设计一个叫做Dragoon的监控系统,需要一些监控组件,监控应用程序的运行情况,包括Web URI、Spring、JDBC等。为了监控SQL执行情况,我做了一个Filter-Chain模式的ProxyDriver,缺省提供StatFilter。当时我还做了一个SQL Parser。老板说,不如我们来一个更大的计划,把连接池、SQL Parser、Proxy Driver合起来做一个项目,命名为Druid,于是Druid就诞生了。

2011年2月春节期间,我完成了连接池(DruidDataSource)的第一个版本,4月开始在生产环境测试,2012年第一季度开始大规模实施。

提交过代码的开发者有5个人,主要代码是我维护,有一人专门负责内部实施。

通过开源,希望有更多使用场景,更多的反馈,更多人参与其中,共同打造最好的数据库连接池。

Druid支持哪些数据库? Top

Druid支持所有JDBC兼容的数据库,包括Oracle、MySql、Derby、Postgresql、SQL Server、H2等等。

Druid针对Oracle和MySql做了特别优化,比如Oracle的PS Cache内存占用优化,MySql的ping检测优化。

Druid是如何扩展JDBC的? Top

Druid在DruidDataSourc和ProxyDriver上提供了Filter-Chain模式的扩展API,类似Serlvet的Filter,配置Filter拦截JDBC的方法调用。

为什么说Druid是“最好的数据库连接池”?体现在哪些方面?这是如何实现的? Top

阿里巴巴是一个重度使用关系数据库的公司,我们在生产环境中大量的使用Druid,通过长期在极高负载的生产环境中实际使用、修改和完善,让Druid逐步发展成最好的数据库连接池。Druid在监控、可扩展性、稳定性和性能方面都有明显的优势。

首先,强大的监控特性,通过Druid提供的监控功能,可以清楚知道连接池和SQL的工作情况。

  • 监控SQL的执行时间、ResultSet持有时间、返回行数、更新行数、错误次数、错误堆栈信息。
  • SQL执行的耗时区间分布。什么是耗时区间分布呢?比如说,某个SQL执行了1000次,其中0~1毫秒区间50次,1~10毫秒800次,10~100毫秒100次,100~1000毫秒30次,1~10秒15次,10秒以上5次。通过耗时区间分布,能够非常清楚知道SQL的执行耗时情况。
  • 监控连接池的物理连接创建和销毁次数、逻辑连接的申请和关闭次数、非空等待次数、PSCache命中率等。

其次,方便扩展。Druid提供了Filter-Chain模式的扩展API,可以自己编写Filter拦截JDBC中的任何方法,可以在上面做任何事情,比如说性能监控、SQL审计、用户名密码加密、日志等等。

Druid内置提供了用于监控的StatFilter、日志输出的Log系列Filter、防御SQL注入攻击的WallFilter。

阿里巴巴内部实现了用于数据库密码加密的CirceFilter,以及和Web、Spring关联监控的DragoonStatFilter。


第三,Druid集合了开源和商业数据库连接池的优秀特性,并结合阿里巴巴大规模苛刻生产环境的使用经验进行优化。

  • ExceptionSorter。当一个连接产生不可恢复的异常时,例如Oracle error_code_28 session has been killed,必须立刻从连接池中逐出,否则会产生大量错误。目前只有Druid和JBoss DataSource实现了ExceptionSorter。
  • PSCache内存占用优化对于支持游标的数据库(Oracle、SQL Server、DB2等,不包括MySql),PSCache可以大幅度提升SQL执行性能。一个PreparedStatement对应服务器一个游标,如果PreparedStatement被缓存起来重复执行,PreparedStatement没有被关闭,服务器端的游标就不会被关闭,性能提高非常显著。在类似“SELECT * FROM T WHERE ID = ?”这样的场景,性能可能是一个数量级的提升。但在Oracle JDBC Driver中,其他的数据库连接池(DBCP、JBossDataSource)会占用内存过多,极端情况可能大于1G。Druid调用OracleDriver提供管理PSCache内部API。
  • LRU是一个性能关键指标,特别Oracle,每个Connection对应数据库端的一个进程,如果数据库连接池遵从LRU,有助于数据库服务器优化,这是重要的指标。Druid、DBCP、Proxool、JBoss是遵守LRU的。BoneCP、C3P0则不是。BoneCP在mock环境下性能可能还好,但在真实环境中则就不好了。

Druid的性能如何?能否给出一些测试对比数据? Top

性能不是Druid的设计目标,但是测试数据表明,Druid性能比DBCP、C3P0、Proxool、JBoss都好。

这里有一些测试数据:http://code.alibabatech.com/wiki/pages/viewpage.action?pageId=2916539

谈谈Druid的SQL解析功能?效率如何? Top

Druid提供了MySql、Oracle、Postgresql、SQL-92的SQL的完整支持,这是一个手写的高性能SQL Parser,支持Visitor模式,使得分析SQL的抽象语法树很方便。

简单SQL语句用时10微秒以内,复杂SQL用时30微秒。

通过Druid提供的SQL Parser可以在JDBC层拦截SQL做相应处理,比如说分库分表、审计等。Druid防御SQL注入攻击的WallFilter就是通过Druid的SQL Parser分析语义实现的。

Druid的扩展性如何? Top

Druid提供Filter-Chain模式的插件框架,通过编写Filter配置到DruidDataSource中就可以拦截JDBC的各种API,从而实现扩展。Druid提供了一系列内置Filter。

在SQL注入防御方面,Druid的优势是什么?实现原理是什么? Top

Druid的优势是在JDBC最低层进行拦截做判断,不会遗漏。

Druid实现了Oracle、MySql、Postgresql、SQL-92的Parser,基于SQL语法分析实现,理解其中的SQL语义,智能、准确、误报率低。

具体细节参考这里:http://code.alibabatech.com/wiki/display/Druid/WallFilter

目前Druid的应用(部署)情况? Top

Druid是阿里巴巴监控系统Dragoon的副产品,从Dragoon监控系统的数据来看,在阿里巴巴已经部署了600多个应用。在阿里巴巴外部也有很多Druid的用户,外部用户没有正式统计数据,但经常有反馈。

我想将其中的某个模块(比如监控模块)用到其他连接池,是否可以?模块的独立性如何? Top

可以通过DruidDriver把内置的Filter用在其他连接池中。在2011年上半年DruidDataSource不成熟的时候,我们也是这么做的。在其他连接池中使用内置的Filter,需要修改jdbc-url,使用DruidDriver作为一个ProxyDriver。

我想在项目中使用,应该注意哪些事项?能否用于商业项目? Top

Druid是一个开源项目,基于Apache 2.0协议,你可以免费自由使用。Druid只支持JDK 6以上版本,不支持JDK 1.4和JDK 5.0。

配置是否复杂?能否给出一个典型的配置实例? Top

为了方便大家迁移,Druid的配置和DBCP是基本一致的,如果你原来是使用DBCP,迁移是十分方便的,只需要把corg.apache.commons.dbcp.BasicDataSource修改为om.alibaba.druid.pool.DruidDataSource就好了。

以下是一个参考配置:

<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close"> 
    <property name="url" value="${jdbc_url}" />
    <property name="username" value="${jdbc_user}" />
    <property name="password" value="${jdbc_password}" />
     
    <property name="filters" value="stat" />
 
    <property name="maxActive" value="20" />
    <property name="initialSize" value="1" />
    <property name="maxWait" value="60000" />
    <property name="minIdle" value="1" />
 
    <property name="timeBetweenEvictionRunsMillis" value="60000" />
    <property name="minEvictableIdleTimeMillis" value="300000" />
 
    <property name="validationQuery" value="SELECT 'x'" />
    <property name="testWhileIdle" value="true" />
    <property name="testOnBorrow" value="false" />
    <property name="testOnReturn" value="false" />
     
    <property name="poolPreparedStatements" value="true" />
    <property name="maxPoolPreparedStatementPerConnectionSize" value="50" />
</bean>

在上面的配置中,通常你需要配置url、username、password、maxActive这几项。

在DruidDataSource中,你可以不配置DriverClass,它根据url自动识别。Druid能够自动识别20多中url,常见的JDBC Driver都包括了。

我目前使用其他连接池(DBCP/C3P0/Proxool等),如何迁移到Druid? Top

从DBCP迁移最方便,把org.apache.commons.dbcp.BasicDataSource修改为om.alibaba.druid.pool.DruidDataSource就好了。

Druid网站上提供了Druid/DBCP/C3P0/JBoss/WebLogic的参数对照表,通过这个对照表来迁移你目前的配置。

其他开发者如何反馈问题、提交bug? Top

Druid源码托管在github.com上,项目地址是https://github.com/AlibabaTech/druid

你可以在github上提交patch和issue(包括bug和新特性)。你也可以加入我们的QQ群92748305,和开发者以及其他用户一起交流。
  • 大小: 81.4 KB
  • 大小: 79.4 KB


评论 共 97 条
37 楼 magic4u 2012-07-17 15:05
wenshao 写道
magic4u 写道
最好的...我觉得这个还是加一个之一吧。目前没有看到有除阿里之外的大规模部署范例。

阿里巴巴的大规模布署之后还不够么?  你能够找到比Druid更好的数据库连接池么?


hehe,作为开源产品来说,Druid缺乏案例证明,我不认为在阿里的环境中大规模部署了就是最好的东西,只能说是最合适阿里的东西。
另外,作为连接池framework来说,Druid做过市面上大部分数据库产品的兼容性测试么?
36 楼 wenshao 2012-07-17 14:22
swen00 写道
没找到jar,要自己编译?


有:
http://central.maven.org/maven2/com/alibaba/druid/0.2.4/
35 楼 wenshao 2012-07-17 14:21
xuershan 写道
在和mybatis整合的时候出现了个问题。最后修改了源码。


什么问题?是否能够反馈给我?
34 楼 xuershan 2012-07-17 13:53
在和mybatis整合的时候出现了个问题。最后修改了源码。
33 楼 swen00 2012-07-17 13:39
没找到jar,要自己编译?
32 楼 vb2005xu 2012-07-17 13:25
温少 是不是 那个json 库的 开发者?
31 楼 wenshao 2012-07-17 12:46
hilinw 写道
来顶温少同学。
温少是java方面的高手,是我们学习的榜样,kdbc,sasa框架,是一个很好的程序员和架构师。
不知道这个项目,是不是把Xdbc也开源了?


我在金蝶期间,其中一个项目是“KSQL多数据库支持”,积累了JDBC和Parser相关经验。

但是,Druid和KSQL没关系,代码完全重写,代码结构完全不一样,功能也完全不一样。

金蝶研发中心的网络是封闭的,不存在重复利用代码的可能。
30 楼 hilinw 2012-07-17 12:36
来顶温少同学。
温少是java方面的高手,是我们学习的榜样,kdbc,sasa框架,是一个很好的程序员和架构师。
不知道这个项目,是不是把Xdbc也开源了?
29 楼 meifangzi 2012-07-17 11:37
温少爷太牛逼了 佩服!
28 楼 jyjava 2012-07-17 10:50
我们公司也有个监控系统,不过他都是现在代码里面的用的是Monitor,不过我们不是用的过滤器,而且我们还包括对bean的监控,了解Druid是不是可以进阿里啊,呵呵,lz感兴趣的话,可以聊聊,
27 楼 z466459262 2012-07-17 10:26
我天天都能看到温少。。。。真是太崇拜你了。。
26 楼 wenshao 2012-07-17 10:24
nutz框架使用druid的demo : https://github.com/nutzam/nutzdemo/tree/master/demo/nutz2druid
25 楼 belliedmonkey 2012-07-17 09:50
专门来顶温少的, 温少不仅自己技术牛逼,还能推动团队,推动社区一起进步,太酷了!
24 楼 wenshao 2012-07-17 08:35
Druid有1538个TestCase,每次发布前都会做回归测试。
23 楼 cwocwo 2012-07-17 08:35
在项目上用了, 感觉不错, 推荐
22 楼 zgjzc 2012-07-16 22:51
支持,不错的想法,用过fastjson,很给力。近期在做一些复杂匹配的业务逻辑有想实现一个sql parser,刚好碰上weshao发福利,万分感谢!
21 楼 wenshao 2012-07-16 20:41
Properties properties = new Properties();
properties.put("maxActive", "100");
properties.put("maxIdle", "30");
properties.put("maxWait", "10000");
properties.put("url", "jdbc:mock:");
properties.put("filters", "stat");
properties.put("validationQuery", "SELECT 1");
DruidDataSource dataSource = (DruidDataSource) DruidDataSourceFactory.createDataSource(properties);


直接用Property作为参数传入不也是一样的么?

yunnysunny 写道
yunnysunny 写道
wenshao 写道
yunnysunny 写道
wenshao 写道
yunnysunny 写道
只能用spring配置连接参数吗?


支持JNDI配置:
http://code.alibabatech.com/wiki/pages/viewpage.action?pageId=2916633

直接调用:
https://github.com/AlibabaTech/druid/blob/master/src/test/java/com/alibaba/druid/bvt/pool/TestH2.java

能否支持像dbcp那样,传递一个Property对象来初始化datasource。类似这种形式:
BasicDataSource dataSource = (BasicDataSource) BasicDataSourceFactory.createDataSource(Property p);
这样我配置一个properties文件后,初始化的时候读取配置文件数据到p变量后,就可以用了。

有的:com.alibaba.druid.pool.DruidDataSourceFactory.createDataSource(Map)

晕,用的数据结构竟然是Map,看来还得用Property转化一遍。

很显然用property更方便
 try {        	
            
            InputStream input = new FileInputStream(configPath);
            if (input != null) {
            	p.load(input);
            	        	
	        	System.out.println("driverClassName is " + p.getProperty("driverClassName"));
	        	logger.info(p.getProperty("url"));
	        	logger.info(p.getProperty("username"));
	            dataSource = (BasicDataSource) BasicDataSourceFactory.createDataSource(p);
            } else {
            	logger.fatal("获取数据库配置文件失败.");
            }

        } catch (Exception e) {            
        	logger.fatal("初始化数据库失败:", e);        	
        }

另外问一下,Druid有没有网络断线重新初始化datasource的功能。
20 楼 yunnysunny 2012-07-16 20:36
yunnysunny 写道
wenshao 写道
yunnysunny 写道
wenshao 写道
yunnysunny 写道
只能用spring配置连接参数吗?


支持JNDI配置:
http://code.alibabatech.com/wiki/pages/viewpage.action?pageId=2916633

直接调用:
https://github.com/AlibabaTech/druid/blob/master/src/test/java/com/alibaba/druid/bvt/pool/TestH2.java

能否支持像dbcp那样,传递一个Property对象来初始化datasource。类似这种形式:
BasicDataSource dataSource = (BasicDataSource) BasicDataSourceFactory.createDataSource(Property p);
这样我配置一个properties文件后,初始化的时候读取配置文件数据到p变量后,就可以用了。

有的:com.alibaba.druid.pool.DruidDataSourceFactory.createDataSource(Map)

晕,用的数据结构竟然是Map,看来还得用Property转化一遍。

很显然用property更方便
 try {        	
            
            InputStream input = new FileInputStream(configPath);
            if (input != null) {
            	p.load(input);
            	        	
	        	System.out.println("driverClassName is " + p.getProperty("driverClassName"));
	        	logger.info(p.getProperty("url"));
	        	logger.info(p.getProperty("username"));
	            dataSource = (BasicDataSource) BasicDataSourceFactory.createDataSource(p);
            } else {
            	logger.fatal("获取数据库配置文件失败.");
            }

        } catch (Exception e) {            
        	logger.fatal("初始化数据库失败:", e);        	
        }

另外问一下,Druid有没有网络断线重新初始化datasource的功能。
19 楼 wenshao 2012-07-16 20:32
Property也是Map啊,可以直接作为参数传入

yunnysunny 写道
wenshao 写道
yunnysunny 写道
wenshao 写道
yunnysunny 写道
只能用spring配置连接参数吗?


支持JNDI配置:
http://code.alibabatech.com/wiki/pages/viewpage.action?pageId=2916633

直接调用:
https://github.com/AlibabaTech/druid/blob/master/src/test/java/com/alibaba/druid/bvt/pool/TestH2.java

能否支持像dbcp那样,传递一个Property对象来初始化datasource。类似这种形式:
BasicDataSource dataSource = (BasicDataSource) BasicDataSourceFactory.createDataSource(Property p);
这样我配置一个properties文件后,初始化的时候读取配置文件数据到p变量后,就可以用了。

有的:com.alibaba.druid.pool.DruidDataSourceFactory.createDataSource(Map)

晕,用的数据结构竟然是Map,看来还得用Property转化一遍。

18 楼 yunnysunny 2012-07-16 20:30
wenshao 写道
yunnysunny 写道
wenshao 写道
yunnysunny 写道
只能用spring配置连接参数吗?


支持JNDI配置:
http://code.alibabatech.com/wiki/pages/viewpage.action?pageId=2916633

直接调用:
https://github.com/AlibabaTech/druid/blob/master/src/test/java/com/alibaba/druid/bvt/pool/TestH2.java

能否支持像dbcp那样,传递一个Property对象来初始化datasource。类似这种形式:
BasicDataSource dataSource = (BasicDataSource) BasicDataSourceFactory.createDataSource(Property p);
这样我配置一个properties文件后,初始化的时候读取配置文件数据到p变量后,就可以用了。

有的:com.alibaba.druid.pool.DruidDataSourceFactory.createDataSource(Map)

晕,用的数据结构竟然是Map,看来还得用Property转化一遍。
17 楼 wenshao 2012-07-16 20:18
yunnysunny 写道
wenshao 写道
yunnysunny 写道
只能用spring配置连接参数吗?


支持JNDI配置:
http://code.alibabatech.com/wiki/pages/viewpage.action?pageId=2916633

直接调用:
https://github.com/AlibabaTech/druid/blob/master/src/test/java/com/alibaba/druid/bvt/pool/TestH2.java

能否支持像dbcp那样,传递一个Property对象来初始化datasource。类似这种形式:
BasicDataSource dataSource = (BasicDataSource) BasicDataSourceFactory.createDataSource(Property p);
这样我配置一个properties文件后,初始化的时候读取配置文件数据到p变量后,就可以用了。

有的:com.alibaba.druid.pool.DruidDataSourceFactory.createDataSource(Map)
16 楼 yunnysunny 2012-07-16 20:10
wenshao 写道
yunnysunny 写道
只能用spring配置连接参数吗?


支持JNDI配置:
http://code.alibabatech.com/wiki/pages/viewpage.action?pageId=2916633

直接调用:
https://github.com/AlibabaTech/druid/blob/master/src/test/java/com/alibaba/druid/bvt/pool/TestH2.java

能否支持像dbcp那样,传递一个Property对象来初始化datasource。类似这种形式:
BasicDataSource dataSource = (BasicDataSource) BasicDataSourceFactory.createDataSource(Property p);
这样我配置一个properties文件后,初始化的时候读取配置文件数据到p变量后,就可以用了。
15 楼 wenshao 2012-07-16 20:04
magic4u 写道
最好的...我觉得这个还是加一个之一吧。目前没有看到有除阿里之外的大规模部署范例。


阿里巴巴的大规模布署之后还不够么?  你能够找到比Druid更好的数据库连接池么?
14 楼 wenshao 2012-07-16 20:02
yunnysunny 写道
只能用spring配置连接参数吗?


支持JNDI配置:
http://code.alibabatech.com/wiki/pages/viewpage.action?pageId=2916633

直接调用:
https://github.com/AlibabaTech/druid/blob/master/src/test/java/com/alibaba/druid/bvt/pool/TestH2.java
13 楼 yunnysunny 2012-07-16 19:27
只能用spring配置连接参数吗?
12 楼 magic4u 2012-07-16 18:15
最好的...我觉得这个还是加一个之一吧。目前没有看到有除阿里之外的大规模部署范例。
11 楼 cutesunshineriver 2012-07-16 17:31
代码写得很好,能不能考虑加上中文注释。
10 楼 xjb19880523 2012-07-16 15:21
我这里 前几天 也是刚换用的这个之前在用dbcp 主要用的还是连接池的功能  效果不错
9 楼 youjianbo_han_87 2012-07-16 14:21
一直在关注这个项目。。。
8 楼 wenshao 2012-07-16 13:02
supercwg 写道
提供监控页面?能否提供一个可部署的java工程的?


这里有我fork springside4做的监控页面示例,https://github.com/wenshao/springside4。修改的内容在这两个commit中:
https://github.com/wenshao/springside4/commit/f261996b9ce2f5cccc38dfb8534afe47f17df821

https://github.com/wenshao/springside4/commit/6caa7a17b27e8e8225b540230331995a8056f939

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • (转载)阿里巴巴开源项目 Druid 负责人温少访谈

    http://www.iteye.com/magazines/90?page=2#111

  • YOLO算法-城市电杆数据集-496张图像带标签-电杆.zip

    YOLO系列算法目标检测数据集,包含标签,可以直接训练模型和验证测试,数据集已经划分好,包含数据集配置文件data.yaml,适用yolov5,yolov8,yolov9,yolov7,yolov10,yolo11算法; 包含两种标签格:yolo格式(txt文件)和voc格式(xml文件),分别保存在两个文件夹中,文件名末尾是部分类别名称; yolo格式:<class> <x_center> <y_center> <width> <height>, 其中: <class> 是目标的类别索引(从0开始)。 <x_center> 和 <y_center> 是目标框中心点的x和y坐标,这些坐标是相对于图像宽度和高度的比例值,范围在0到1之间。 <width> 和 <height> 是目标框的宽度和高度,也是相对于图像宽度和高度的比例值; 【注】可以下拉页面,在资源详情处查看标签具体内容;

  • (177406840)JAVA图书管理系统毕业设计(源代码+论文).rar

    JAVA图书管理系统毕业设计(源代码+论文) JAVA图书管理系统毕业设计(源代码+论文) JAVA图书管理系统毕业设计(源代码+论文) JAVA图书管理系统毕业设计(源代码+论文) JAVA图书管理系统毕业设计(源代码+论文) JAVA图书管理系统毕业设计(源代码+论文) JAVA图书管理系统毕业设计(源代码+论文) JAVA图书管理系统毕业设计(源代码+论文) JAVA图书管理系统毕业设计(源代码+论文) JAVA图书管理系统毕业设计(源代码+论文) JAVA图书管理系统毕业设计(源代码+论文) JAVA图书管理系统毕业设计(源代码+论文) JAVA图书管理系统毕业设计(源代码+论文) JAVA图书管理系统毕业设计(源代码+论文) JAVA图书管理系统毕业设计(源代码+论文) JAVA图书管理系统毕业设计(源代码+论文) JAVA图书管理系统毕业设计(源代码+论文) JAVA图书管理系统毕业设计(源代码+论文) JAVA图书管理系统毕业设计(源代码+论文) JAVA图书管理系统毕业设计(源代码+论文) JAVA图书管理系统毕业设计(源代码+论文) JAVA图书管理系统毕业设计(源代

  • (35734838)信号与系统实验一实验报告

    内容来源于网络分享,如有侵权请联系我删除。另外如果没有积分的同学需要下载,请私信我。

  • YOLO算法-椅子检测故障数据集-300张图像带标签.zip

    YOLO系列算法目标检测数据集,包含标签,可以直接训练模型和验证测试,数据集已经划分好,包含数据集配置文件data.yaml,适用yolov5,yolov8,yolov9,yolov7,yolov10,yolo11算法; 包含两种标签格:yolo格式(txt文件)和voc格式(xml文件),分别保存在两个文件夹中,文件名末尾是部分类别名称; yolo格式:<class> <x_center> <y_center> <width> <height>, 其中: <class> 是目标的类别索引(从0开始)。 <x_center> 和 <y_center> 是目标框中心点的x和y坐标,这些坐标是相对于图像宽度和高度的比例值,范围在0到1之间。 <width> 和 <height> 是目标框的宽度和高度,也是相对于图像宽度和高度的比例值; 【注】可以下拉页面,在资源详情处查看标签具体内容;

  • 基于小程序的新冠抗原自测平台小程序源代码(java+小程序+mysql+LW).zip

    系统可以提供信息显示和相应服务,其管理新冠抗原自测平台小程序信息,查看新冠抗原自测平台小程序信息,管理新冠抗原自测平台小程序。 项目包含完整前后端源码和数据库文件 环境说明: 开发语言:Java JDK版本:JDK1.8 数据库:mysql 5.7 数据库工具:Navicat11 开发软件:eclipse/idea Maven包:Maven3.3 部署容器:tomcat7 小程序开发工具:hbuildx/微信开发者工具

  • YOLO算法-俯视视角草原绵羊检测数据集-4133张图像带标签-羊.zip

    YOLO系列算法目标检测数据集,包含标签,可以直接训练模型和验证测试,数据集已经划分好,包含数据集配置文件data.yaml,适用yolov5,yolov8,yolov9,yolov7,yolov10,yolo11算法; 包含两种标签格:yolo格式(txt文件)和voc格式(xml文件),分别保存在两个文件夹中,文件名末尾是部分类别名称; yolo格式:<class> <x_center> <y_center> <width> <height>, 其中: <class> 是目标的类别索引(从0开始)。 <x_center> 和 <y_center> 是目标框中心点的x和y坐标,这些坐标是相对于图像宽度和高度的比例值,范围在0到1之间。 <width> 和 <height> 是目标框的宽度和高度,也是相对于图像宽度和高度的比例值; 【注】可以下拉页面,在资源详情处查看标签具体内容;

  • (171674830)PYQT5+openCV项目实战:微循环仪图片、视频记录和人工对比软件源码

    内容来源于网络分享,如有侵权请联系我删除。另外如果没有积分的同学需要下载,请私信我。

  • 新建 文本文档.docx

    新建 文本文档.docx

  • hw06.zip

    hw06

  • 3. Kafka入门-安装与基本命令

    3. Kafka入门-安装与基本命令

  • 燃气管道施工资质和特种设备安装改造维修委托函.docx

    燃气管道施工资质和特种设备安装改造维修委托函.docx

  • The state of AI 2024.pdf

    AI大模型研究相关报告

  • lab02.zip

    lab02

  • Unity视频插件AVPro的Win端2.2.3

    仅供学习使用,其他用途请购买正版资源AVPro Video Core Windows Edition 2.2.3 亲测可用的视频播放插件,能丝滑播放透明视频等.

  • 建设工程消防验收现场指导意见表.docx

    建设工程消防验收现场指导意见表.docx

  • MVIMG_20241222_194113.jpg

    MVIMG_20241222_194113.jpg

  • 五相电机双闭环矢量控制模型-采用邻近四矢量SVPWM-MATLAB-Simulink仿真模型包括: (1)原理说明文档(重要):包括扇区判断、矢量作用时间计算、矢量作用顺序及切时间计算、PWM波的生成

    五相电机双闭环矢量控制模型_采用邻近四矢量SVPWM_MATLAB_Simulink仿真模型包括: (1)原理说明文档(重要):包括扇区判断、矢量作用时间计算、矢量作用顺序及切时间计算、PWM波的生成; (2)输出部分仿真波形及仿真说明文档; (3)完整版仿真模型:包括邻近四矢量SVPWM模型和完整双闭环矢量控制Simulink模型; 资料介绍过程十分详细,零基础手把手教学,资料已经写的很清楚

Global site tag (gtag.js) - Google Analytics