labelme:图像数据标注

导读

深度学习第一步就是制作数据集,手动去标注一些数据。本文将介绍一个用于图像数据标注的软件:labelme,并介绍它的安装方法,使用方法等。

1. labelme

labelme是麻省理工(MIT)的计算机科学和人工智能实验室(CSAIL)研发的图像注释工具,它是用PythonPyQT编写的,用于图像标注。

  • 对图像进行多边形,矩形,圆形,多段线,线段,点形式的标注(可用于目标检测,图像分割,等任务)。
  • 对图像进行进行 flag 形式的标注(可用于图像分类 和 清理 任务)。
  • 视频标注
  • 生成 VOC 格式的数据集
  • 生成 COCO 格式的数据集

2. 安装

  • 利用conda安装
# 新建环境
conda create -n labelme python=3

# 激活环境
conda activate labelme

# 安装labelme
conda install labelme -c conda-forge
  • Docker安装
# on macOS
socat TCP-LISTEN:6000,reuseaddr,fork UNIX-CLIENT:\"$DISPLAY\" &
docker run -it -v /tmp/.X11-unix:/tmp/.X11-unix -e DISPLAY=docker.for.mac.host.internal:0 -v $(pwd):/root/workdir wkentaro/labelme

# on Linux
xhost +
docker run -it -v /tmp/.X11-unix:/tmp/.X11-unix -e DISPLAY=:0 -v $(pwd):/root/workdir wkentaro/labelme
  • Ubuntu
sudo apt-get install labelme

# or
sudo pip3 install labelme

# or install standalone executable from:
# https://github.com/wkentaro/labelme/releases

3. 使用

3.1. 命令行运行

# 确保已经激活虚拟环境
labelme

3.2. 程序主界面

运行上面命令后,正常情况下,会出现下面窗口。

程序界面主要分为六个区域,最上面为菜单栏,最左边为工具栏,中间为中心窗口(展示图片以及进行标注),右侧上方为展示标注标签的窗口,右侧下方为展示文件列表的窗口,最下面为状态栏。菜单栏、工具栏以及在中心窗口右键均可以选择命令进行执行,右侧的标签列表可以进行交互来进行与标注相关的动作,如切换、删除、编辑、隐藏标注等,右侧文件列表亦可进行交互来切换文件等。

3.3. 程序功能说明:

  • 菜单栏功能部分:
    • Open : 打开图片文件,通过点击命令或者快捷键即可运行。打开文件后,右侧文件列表会显示在同一目录下的所有文件,点击文件列表中的文件即可进行切换。图片格式支持jpg、png、gif、bmp、jpeg等
  • Next Image:切换至下一张图片,若无下一张图片,会弹出窗口提醒用户,通过点击命令或者快捷键即可运行。3d状态下会切换当前聚焦视角的图片,可通过鼠标点击切换聚焦视角。
    • Prev Image : 切换至上一张图片,若无上一张图片,会弹出窗口提醒用户,通过点击命令或者快捷键即可运行。3d状态下会切换当前聚焦视角的图片,可通过鼠标点击切换聚焦视角。
    • Open Dir:打开文件夹,通过点击或者快捷键即可运行。打开文件夹默认会显示文件夹中的第一张图片,同时右侧文件列表也会显示文件夹里的所有图片,点击文件列表中的文件可以进行文件切换。
    • Import:导入标注文件,通过点击即可运行。标注文件的样例文件请参考此处。
    • Save : 保存文件,通过点击或者快捷键即可运行。会将对标注的更改进行保存,写入默认标注文件中。
    • Close : 关闭当前文件,通过点击或者快捷键即可运行。
    • Quit : 退出程序,通过点击或者快捷键即可运行
    • Create Brush :
      • 2d状态下:创建画刷形状,通过点击或者快捷键即可运行。创建画刷形状用于进行分割标注,在想要进行标注的区域,点击鼠标即可进行绘制,绘制完毕后按下回车键即可键入标注文字,添加标注。
      • 3d状态下:创建画刷形状,在任意视角任意图片直接点击鼠标进行绘制即可,绘制完毕后按下回车键,键入标注文字即可添加标注。
    • Edit Brush :编辑画刷大小,通过点击或者快捷键即可运行。默认为圆形画刷,可以改变画刷大小(注,画刷大小是以当前图片的宽度为比例)
    • Create Rectangle :
      • 2d状态下:创建矩形,通过点击或者快捷键即可运行。在想要进行标注的区域,点击鼠标开始绘制,在移动鼠标的过程中,会同步显示矩形边框,绘制完毕时,再点击鼠标即可。
      • 3d状态下:创建长方体,通过在任意视角的图片点击即可开始该视角下的矩形框的绘制,再次点击鼠标该视角下矩形框即绘制完毕,这时在其他视角,可以通过右键聚焦视角,并进行图片的切换,当其他视角下有最开始创建的矩形框时,移动鼠标即可进行其他视角下的矩形框的绘制,绘制完毕时再次点击鼠标即可,长方体绘制完毕后,按下回车键,键入标注文字,即可添加标注。
    • Create Circle:创建圆形,操作与创建矩形类似,请参考创建矩形。
    • Create Polygons:创建多边形,通过点击或者快捷键即可运行。在想要标注的区域,点击鼠标开始绘制,在想要绘制的多边形顶点处再次点击鼠标,继续绘制,绘制完毕后,按下回车键。(即文档中要求的绘制闭合折线)
    • Create Curve:创建平滑曲线,通过点击或者快捷键即可运行。在想要标注的区域,点击鼠标开始绘制,接着自由移动鼠标即可,绘制完毕后按下回车键。
    • Edit Color:编辑标注颜色,通过点击或者快捷键即可运行。会弹出颜色对话框,任意选颜色即可。
    • Edit Polygons:进入编辑状态,通过点击或者快捷键即可运行。点击后会进入编辑状态,在该状态下,可以对标注进行拖动,选中,撤销,重做,放大缩小等一系列操作。
    • Delete Polygons:删除标注,通过点击或者快捷键即可运行。该动作只有在编辑状态下且有标注被选中才能进行操作。
    • Edit Label:编辑标注文字,通过点击或者快捷键即可运行。该动作只有在编辑状态且有标注被选中才能进行操作。
    • Undo:撤销动作,通过点击或者快捷键即可运行。可以撤销任意步数的动作。
    • Redo:重做动作,通过点击或者快捷键即可运行。可以重做任意步数的动作。
    • Undo last point:撤销当前正在创建的标注形状,通过点击或者快捷键即可运行。会移除当前正在创建的标注形状。
    • Polygon Labels:是否显示标签列表组件,点击即可进行切换。
    • File List:是否显示文件列表,点击即可进行切换。
    • 3D:是否进入3D模式,点击即可进行2d及3d状态的转换。
    • Hide Polygons:隐藏所有标注,点击即可运行。
    • Show Polygons:显示所有标注,点击即可运行。
    • Magnifier:是否显示放大镜,点击即可运行。默认会捕捉鼠标附近20$\times$20的区域,放大至100$\times$100,显示在图片右下角(需注意图片的大小,因为会在图片右下角显示100$\times$100)
    • Zoom In:放大图片,点击或者快捷键即可运行。默认会放大图片至1.2倍。
    • Zoom Out:缩小图片,点击或者快捷键即可运行。默认会缩小图片至0.8倍。
    • Original Size:图片恢复至原始图片大小,点击或者快捷键即可运行。会使图片按照原始大小显示。
    • Fit Window:图片宽度适应中心窗口,点击或者快捷键即可运行。会使图片按照中心窗口宽度显示。
  • 工具栏功能部分:
    • 工具栏命令即为菜单栏命令的部分,请参考菜单栏命令
  • 状态栏功能部分:
    • 部分命令执行时会在状态栏处显示。
  • 鼠标在图片上移动时,会同步在状态栏处显示当前鼠标的坐标。2d显示二维坐标,3d显示三维坐标。
  • 中心窗口功能部分:
    • 为方便用户交互,图片上的标注形状默认显示为不填充,即只显示边框,当鼠标进入标注形状内部时,标注形状为悬浮(hovered)状态,内部会填充颜色,当鼠标点击标注形状时,标注形状为选中(selected)状态,内部也会填充颜色,同时在标签列表窗口处也会显示标签选中状态。当标注脱离悬浮状态(unhovered)或者未选中状态(unselected)时,内部会显示不填充。对选中的标注形状即可进行一系列操作,如拖动标注形状,删除,更改等动作。
    • 2d状态下,在中心窗口点击右键亦可选择执行部分命令,方便交互。
  • 3d状态下,中心窗口分为3个视角,三个视角顺序未从左至右,从上至下,分别为0,1,2。第一个视角为从上往下看的俯视视角,图片顺序为从上至下,第二个视角为正视视角,图片顺序为从后往前,第三个视角为右视视角,图片顺序为从左至右。鼠标点击视角可进行视角图片的聚焦,即切换视角。
  • 标签列表组件功能部分:
    • 在标签列表窗口中右键可以选择并执行部分命令
  • 在标签列表窗口中可以通过点击标签进行标注的选中,选中状态会同步至中心窗口中并显示标注形状填充
    • 改变标签列表窗口中标签的checkstate可以进行是否显示该标注状态的切换,checked为显示,unchecked为隐藏
    • 在中心窗口对标注的交互会在标签列表中同步更新,例如添加标注、删除标注等
  • 文件列表组件功能部分:
    • 2d状态下,在文件列表窗口中点击文件即可进行文件的切换
  • 3d状态下,由于文件的切换由中心窗口控制,因此点击不会有反应
  • 其他说明:
    • 标注文件默认名说明:在读取图片时,会读取默认标注文件,默认标注文件名与图片名相同,后缀名为json。3d状态下默认标注文件名为该文件夹下第一张图片名+“_3D”,后缀名为json。
    • 标注文件格式说明:type表明标注形状的类型,分为Brush(画刷形状),Rectangle(矩形形状),Polygons(多边形形状),Circle(圆形形状),Curve(平滑曲线形状),Brush3D(3d画刷形状),Rectangle3D(3d长方体形状);color代表标注形状颜色;label代表标注标签文字,points代表像素点位(2d存储为横纵坐标比例,3d存储为横纵坐标比例,及z方向上的顺序)radius代表画刷形状的大小或者圆形形状的大小;width代表矩形的宽;height代表矩形的高;zspan代表3d长方体在z方向上的跨度
    • 程序中使用标签列表窗口显示标签,且在点击标签时,中心窗口会同步标注形状被选中,内部会显示为填充,其中颜色也为由用户自定义。
    • examples文件夹里面有样例图片以及样例标注文件可做测试用。

往期推荐

本文转载于网络 如有侵权请联系删除

相关文章

  • XML 和 JSON

    不久前看到一个讨论帖,说的是XML和JSON的比较,说着说着后来就变成了JSON到底比XML牛逼在哪里。不吹不黑,客观地来比较一下二者的异同。XML比JSON更胖吗?有的情况下是的,但也不一定,比较这样的片段:<userage="18"> <address> <cityname="Seattle"/> </address> </user>复制和{"user":{ "age":18, "address":{ city:{ name:"Seattle" } } }}复制二者信息量几乎均等,XML看起来并不显得多么冗余。有恰当的编辑器,二者都可以有比较美观的缩进表达。当然,也有很多情况我们可以看到XML要比JSON啰嗦(有人说JSON是fat-freealternativetoXML),比如XML写这样的东西:<employees> <employee> <addressvalue=&

  • 秒杀系统设计

    概述读了极客时间许令波的如何设计秒杀系统后,总结出秒杀系统设计的一些需要注意的点,如何从更多的角度去考量一个架构的设计,保证性能和高可用。这些经验或者说原则不仅仅适用于秒杀系统,在设计其他系统的时候也有一定的参考性。秒杀系统的五个原则总结起来就是:4要,1不要数据要尽量少这里的数据值得是用户和系统间传输的数据,包括用户上传给系统的数据和系统返回给用户的数据。数据少涉及几个方面:数据在网络中传输需要时间,数据量越大,网络包耗时越长服务器在写网络的时候,一般要进行压缩和字符编码,这些操作比较消耗cpu系统依赖的数据要尽量少,比如和数据库的交互,很容易形成瓶颈请求数要尽量少当用户请求页面后,还会有一些其他的额外请求,如静态资源css/js等,每一个请求都会做三次握手,如果资源不在同一个域名下,还会对dns解析形成负担。可以将多个资源合成一个文件,尽可能对减少请求数路径要尽量短路径指的是,用户发出一个请求到返回数据的过程中,经过的中间节点数。每新增一个节点不但会新增一次网络连接,并且会新增不确定性(多一个节点,就会增加多一个风险点)。缩短请求路径可以增加可用性,也能提升性能。做法一般是将多个互

  • ClickHouse 入门:数据查询流程解析

    前言ClickHouse是一款ROLAP列式数据库,在海量数据分析场景中,能够帮助我们快速得到想要的"分析性"数据。本文主要从个人视角讲解ClickHouse一次数据查询的整体流程,更多的是自己的一些理解和思考,如有不对,欢迎指出和交流。一、ClickHouse数据组织形式1.1ClickHouse集群、分片、副本含义一个ClickHouse集群是通过分片组成。ClickHouse分片可以由一台或者多台机器构成,当多台机器组成一个分片时,其中一个节点为主副本节点,其余则为数据副本节点,比如上图,副本数则为1。一个ClickHouse集群可以由多台机器构成,当然也可以根据不同业务特性进行划分,多个集群,但每个集群都有少量机器。ClickHouse分片你可以理解为就是ClickHouse一个单机数据库实例(副本节点也算),多个这种单机数据库实例构成一个ClickHouse集群。分片是指包含数据不同部分的服务器(要读取所有数据,必须访问所有分片)。ClickHouse通过分片,将一张表的数据水平分割在不同的节点上,随着业务的发展,当表数据的大小增加到很大时,也能够通过水平

  • 基于GF的后台管理系统,完善的权限用户管理,致力于快速高效开发

    ◆ 一、开源项目简介gfast是基于GF(GoFrame)的后台管理系统,完善的权限用户管理,致力于快速高效开发cms系统、督办系统、后续将加入流程审批、工作流引擎、项目管理、挂图作战、数据大屏等功能。基于全新GoFrame2.0+Vue3+ElementPlus开发的全栈前后端分离的管理系统前端采用vue-next-admin、Vue、ElementUI。本项目由奇讯科技团队开发。 ◆ 二、开源协议使用Apache-2.0开源协议◆ 三、界面展示演示图 ◆ 四、功能概述特征高生产率:几分钟即可搭建一个后台管理系统模块化:单应用多系统的模式,将一个完整的应用拆分为多个系统,后续扩展更加便捷,增加代码复用性。插件化:可通过插件的方式扩展系统功能认证机制:采用gtoken的用户状态认证及casbin的权限认证路由模式:得利于goframe2.0提供了规范化的路由注册方式,无需注解自动生成api文档面向接口开发内置功能用户管理:用户是系统操作者,该功能主要完成系统用户配置。部门管理:配置系统组织机构(公司、部门、小组),树结构展现支持数据权限。岗位管理:配置系统用户所属担任职务。菜单管理:

  • 用小程序·云开发轻松构建二手书商城小程序(上)丨实战

    导语今天是“世界读书日”,传承知识,手有余香~本文教你用小程序·云开发轻松制作二手书交易商城小程序,让智慧延续,让温暖传递。一、登录注册页目前小程序有了详细的登录规范,参考官方示例,本程序的登录入口限制于:(1)在需要涉及用户信息的部分,进行Modal提示进入,比如:游客发布、购买等(2)个人中心,未登录默认显示”点击登录“按钮好了,再来看看登录页面效果图及相应的代码吧:手机号获取(相关代码):<buttonclass="phone"open-type="getPhoneNumber"bindgetphonenumber="getPhoneNumber"> <blockwx:if="{{phone==''}}">请点击获取您的手机号</block> <blockwx:if="{{phone!==''}}">{{phone}}</block> <imagewx:if="{{p

  • 超级简单的虚拟机(Python 实现)

    我们这次实现的简单虚拟机,和计算机的cpu有点类似。无非就是取指令,执行指令之类的操作。 常见的虚拟机通常分为两类,一种是栈式虚拟机,另一种是寄存器虚拟机。比如说CPython,Jvm就是基于栈的虚拟机,而lua则是基于寄存器的虚拟机。我们这次实现的“玩具”虚拟机,就是一种基于栈的虚拟机。虚拟机有三个重要属性,code代表要执行的指令列表,stack用于保存临时变量,而addr代表当前指令的地址。#Python高效编程 classMachine: def__init__(self,code): self.code=code self.stack=list() self.addr=0 复制原理其实很简单,我们通过不断获取当前指令地址,从指令列表中获取指令和数据,如果是数字或者字符串,就压入栈中;如果是指令,就执行相应函数。为了少些几个字符,我们向Machine类中添加几个方法:defpush(self,value): self.stack.append(value) defpop(self): returnself.stack.pop() @property deftop(self)

  • ActiveMQ的安装与使用。

    1、什么是ActiveMQ 1ActiveMQ是Apache出品,最流行的,能力强劲的开源消息总线。ActiveMQ是一个完全支持JMS1.1和J2EE1.4规范的JMSProvider实现,尽管JMS规范出台已经是很久的事情了,但是JMS在当今的J2EE应用中间仍然扮演着特殊的地位。 2主要特点: 3  1).多种语言和协议编写客户端。语言:Java,C,C++,C#,Ruby,Perl,Python,PHP。应用协议:OpenWire,StompREST,WSNotification,XMPP,AMQP 4  2).完全支持JMS1.1和J2EE1.4规范(持久化,XA消息,事务)。 5  3.)对Spring的支持,ActiveMQ可以很容易内嵌到使用Spring的系统里面去,而且也支持Spring2.0的特性。 6  4.)通过了常见J2EE服务器(如Geronimo,JBoss4,GlassFish,WebLogic)的测试,其中通过JCA1.5resourceadaptors的配置,可以让ActiveMQ可以自动的部署到任何兼容J2EE1.4商业服务器上。 7  5).支持

  • 这是一份很有诚意的 Protocol Buffer 语法详解

    前言习惯用Json、XML数据存储格式的你们,相信大多都没听过ProtocolBufferProtocolBuffer其实是Google出品的一种轻量&高效的结构化数据存储格式,性能比Json、XML真的强!太!多! 由于Google出品,我相信ProtocolBuffer已经具备足够的吸引力 今天,我将详细介绍ProtocolBuffer的语法&如何去构建ProtocolBuffer的消息模型 目录1.定义一种结构化数据的数据存储格式(类似于XML、Json)Google出品(开源)ProtocolBuffer目前有两个版本:proto2和proto3因为proto3还是beta版,所以本次讲解是proto22.作用通过将结构化的数据进行串行化(序列化),从而实现数据存储/RPC数据交换的功能序列化:将数据结构或对象转换成二进制串的过程反序列化:将在序列化过程中所生成的二进制串转换成数据结构或者对象的过程3.特点对比于常见的XML、Json数据存储格式,ProtocolBuffer有如下特点:4.应用场景传输数据量大&网络环境不稳定的数据存储、RPC数据交换的

  • 兑兑换是什么?兑兑换安全吗?如何让手机积分变现?银行信用卡积分变现?

    兑兑换是一个将信用卡积分直接兑换成现金的平台 兑兑换是九方集团自主研发的一个全新产品。为了解决部分客户积分太少每次都被银行自动清零而无法兑换的苦恼信‌‌用卡积分兑换市场前景怎么样?全国信用卡交易破30万亿,一万积分兑10元的话,相当于300亿的市场看懂就赶紧行动吧通过“兑换→报单→审核提现”模式,安全、快速的将银行积分变现总部电话:13662565011(微同)一.用户怎么赚钱?1.银行积分变现2.合伙人/黄金合伙人赚会员兑换差价兑兑换采用等级会员制度,注册即可成为会员,免费将银行积分变现,有推广渠道的会员,可通过充值合伙人/黄金合伙人的方式进行身份升级升级成为合伙人/黄金合伙人后不但自己积分变现的价格提升,自己旗下邀请注册的会员兑换的差价也尽收自己囊中例如你有一万的积分,普通会员的兑换价格为12元,铂金合伙人的价格为16元,钻石合伙人邀请注册的会员每兑换1万积分,黄金合伙人可赚取4元的兑换差价3.升级奖励自己邀请注册的会员充值升级合伙人后,可获得120元的推荐现金奖励,推荐升级为钻石合伙人,即可获得1500元推荐的现金奖励作为开发商,我们支持OEM订制,专业的技术团队给你专业的渠道,

  • eclipse的一些小问题解决方案

    1解决eclipse闪退的问题: .删除文件:[workspace]/.metadata/.plugins/org.eclipse.e4.workbench/workbench.xmi2.导入包importjavax.imageio.ImageIO;提示以下错误Accessrestriction:ThetypeImageIOisnotaccessibleduetorestrictiononrequiredlibraryC:\ProgramFiles\Java\jdk1.7.0_06\jre\lib\rt.jar解决方案:(感觉是骗过了编译、直接运行了)(1:Windows->Preferences->Java->Compiler->Errors/Warnings->DeprecatedandtrstrictedAPI->Forbiddenreference(accessrules):->改变为warning(可以去掉错误,编译通过,但是这样做不太好) (2:[Project]->Properties->JavaBuildPath-

  • 最容易做到也是最难做到的事情

    一周时间,每天基本12点之前关掉手机就上床睡觉了,第二天都是7点多起床,中间也都有学习一些东西,但是昨天开始似乎又被自己一连串的坏习惯打回原型了。昨晚很晚才睡的,早上起得也有点晚,仅仅坚持了一周多时间,也并没有觉得有多困难,但还是中断了,因此我觉得,坚持,应该就是最容易做到也是最难做到的事情吧。早上起来,隐约觉得喉咙有一股很强的疼痛感(好像也好几天了),一杯水喝下去,似乎又不痛了,估计是智齿又要发作了。大脚趾也是,2个月了,一直没管它,也不想管,可能是现在真的要长出一颗新的脚趾甲,晚上睡觉前脚趾会痛,蹬地上也会觉得痛,而且是越来越强烈了现在。昨天中午坐在小冯同学的椅子上睡着了,醒来后,手机推来一条信息,说是乐视网第二次股东大会现场直播,于是就点进去了......我向来不太懂这个大公司的股东啊股权啊是个什么鬼,就觉得名字很高大上,不过我一直都有关注乐视发生的一系列事情,关注它也并不是说我跟乐视有什么关系,乐视视频是我第一个使用的电脑视频软件,应该是初中的时候吧,当时就觉得这个软件速度特别快,不过后来高中基本就没用了,再后来大学知道了这是贾跃亭乐视公司旗下的产品,当然也并没有怎么用。直播中

  • 腾讯云云防火墙删除新企业安全组规则api接口

    1.接口描述接口请求域名:cfw.tencentcloudapi.com。 删除新企业安全组规则 默认接口请求频率限制:20次/秒。 APIExplorer提供了在线调用、签名验证、SDK代码生成和快速检索接口等能力。您可查看每次调用的请求内容和返回结果以及自动生成SDK调用示例。 2.输入参数以下请求参数列表仅列出了接口请求参数和部分公共参数,完整公共参数列表见公共请求参数。 参数名称 必选 类型 描述 Action 是 String 公共参数,本接口取值:RemoveEnterpriseSecurityGroupRule。 Version 是 String 公共参数,本接口取值:2019-09-04。 Region 否 String 公共参数,本接口不需要传递此参数。 RuleUuid 是 Integer 规则的uuid,可通过查询规则列表获取 RemoveType 是 Integer 删除类型,0是单条删除,RuleUuid填写删除规则id,1为全部删除,RuleUuid填0即可 3.输出参数 参数名称 类型 描述 R

  • 腾讯云医疗报告结构化错误码

    功能说明如果返回结果中存在Error字段,则表示调用API接口失败。例如: { "Response":{ "Error":{ "Code":"AuthFailure.SignatureFailure", "Message":"Theprovidedcredentialscouldnotbevalidated.Pleasecheckyoursignatureiscorrect." }, "RequestId":"ed93f3cb-f35e-473f-b9f3-0d451b8b79c6" } }复制 Error中的Code表示错误码,Message表示该错误的具体信息。 错误码列表公共错误码 错误码 说明 ActionOffline 接口已下线。 AuthFailure.InvalidAuthorization 请求头部的Authorization不符合腾讯云标准。 AuthFailure.InvalidSecre

  • Spring.Net学习笔记四(IOC容器对象的作用域)

        容器中对象的部署分为两种方式:singleton和非singleton(java里叫prototype)。这里的singleton指的是“单例模式”,就是说当一个对象被定义为singleton时,容器中就只会有一个共享的实例,任何时候通过id或别名请求该对象都会返回这个共享实例的引用(也就是说这个对象只会被创建一次)。当使用非singleton,或者说原型模式布署时,每次请求对象都会创建新的实例。在某些场合,如果需要为每个用户返回单独的用户对象或其它对象,非singlton布署模式就比较理想。Spring.NET默认为singleton模式。每次调用GetObject方法时得到的都是同样的实例;当singleton="false"时,每次调用GetObject方法时得到的则是不同的实例。    测试代码:     1staticvoidMain(string[]args) 2{ 3 4string[]xmlFiles=newstring[]  5{ 6"assembly:../

  • hdoj:2023

    #include<iostream> #include<string> #include<vector> doublea[51][6],b[51],c[6]; usingnamespacestd; intmain() { intn,m; intcount=0; while(cin>>n>>m) { count=0; for(inti=1;i<=n;i++) { for(intj=1;j<=m;j++) { cin>>a[i][j]; } } //学生的平均成绩 for(inti=1;i<=n;i++) { doubler=0; for(intj=1;j<=m;j++) { r=r+a[i][j]; } b[i]=r/m; } //课程的平均值成绩 for(intj=1;j<=m;j++) { doublecol=0; for(inti=1;i<=n;i++) { col=col+a[i][j]; } c[j]=col/n; } //统计学生成绩均大于课程平均成绩的数量 for(

  • 关于系统跑进中断的说法

    随着对单片机的运用于了解,常常听别人说你得程序要一直跑入中断中,是不是有些奇怪?我一直觉得中断是一个触发事件,一直觉得是中断打断了程序。按理来说两种说法都对,但是在理解的角度上,其实第一种说法更加容易接受。怎么叫容易接受呢?它在逻辑上给出了一种顺序和主次关系,这样当你以后在设计一个程序的时候逻辑就会清晰一些。 首先让我们来了解一下中断的构成:中断是单片机内的一组寄存器,当我们规定了它的结构和运行规则之后,单片机就会自动产生中断,中断产生后就会向某个寄存器里面溢出一个高电平。此时单片机会“丢弃”原先正在执行的main程序跑到这个寄存器里去执行和产看中断系统中的命令。跑到中断的说法由此而来。 事实上单片机的程序执行也是单线程的,那么中断命令是如何执行的呢? 根据单片机检测中断的机制(单片机在每个机器周期检查中断源口线,检测到它的中断请求标志时,向cpu请求中断),我可以将该外部中断的模式(即是电平触发还是边沿触发)设置好。之后只要在中断里执行一些命令就可以了。这样,每当单片机检测到中断条件,程序就自动跑进这个中断里执行我的命令。 这样是不是很有趣呢?那么在编程的时候我如何让程序认出这是一个

  • 会声会影如何去除视频黑边

    我们经常看电影有黑边会显得场面宏伟大气,但是电视剧要是有黑边人就会被压缩的变形,本集小编就教大家用会声会影去除黑边。会声会影双11半价,提前嗨购!领券再购物,到手价只要448元 活动地址:http://www.huishenghuiying.com.cn/index.php?page=goumai&ref=ssy11其实会声会影去黑边有很多方法,这里为大家例举三样:1、变形素材 图1:使用变形素材去除黑边前后对比将视频素材插入视频轨中,然后双击素材,在“属性栏中”选择“变形素材”,然后在预览框中调整素材大小使得整个黑边到移动到窗口之外即可。2、自定义动作   图2:使用自定义动作出去黑边前后对比图自定义动作的设置:首先将素材导入轨道,然后右击鼠标选择“自定义动作”,在大小栏中,调整Y值的大小,直至黑边在预览界面之外,然后复制第一帧的参数到最后一帧。前后效果对比图,见上图。想学自定义教程,可以参考《匆匆那年》MV制作教程(上)3、视频摇动与缩放滤镜 图3:使用“视频摇动与缩放”滤镜的前后效果对比滤镜的设置,同样将素材导入会会,然后为其添加“视频摇动与缩放”滤镜,点击右侧

  • httpleaks及url的小技巧(http:evil)

    HTTPLeak攻击简介 当前Web技术下包含了大量HTML元素和属性,这些HTML元素和属性会请求一些外部资源,而在它们的HTTP请求过程中,可能存在潜在的敏感信息泄露。为此,德国著名网络安全公司Cure53发起了名为HTTPLeaks的攻击方法研究项目(项目参见Github-HttpLeaks),其攻击方法目的在于,枚举出各类HTTP请求中可能存在的信息泄露问题。 另外,某些场景下,还能利用HTTPLeak绕过CSP防护机制,如@filedescriptor的《CSP2015》,以及@intidc大神的《HTMLinjectioncanleadtodatatheft》。 就比如,在HTTP请求涉及的一些HTML邮件格式中,如果存在HTTPLeak问题,那么,可以利用它来知道收信人是否打开或者阅读了邮件;还有一些Web代理工具,它们声称可以用“匿名”的方式去访问某些网站,但一些HTML元素或属性的重写过程中,就会涉及到外部资源的HTTP请求,如果这其中存在信息泄露问题,那么,其声称的“匿名”保护也就无从谈起了。 简单地说,就是有些HTML元素和属性,这些HTML元素和属性会请求一些外

  • PTA 7-38 数列求和-加强版

       代码如下: #include<stdio.h> intmain() { intx,n; scanf("%d%d",&x,&n); if(n==0){printf("0");return0;} intaccum[99999]={0},i,j=0,temp=0,p=0; for(i=n;i>0;i--) { temp=i*x+p; p=temp/10; accum[j++]=temp%10; } if(p!=0) printf("%d",p); for(i=j-1;i>=0;i--) printf("%d",accum[i]); } 复制   参考代码: #include<stdio.h> intmain() { intx,n; scanf("%d%d",&x,&n); intdata[n],accum[9999]={0},i,j,temp=0; for(i=0;i<n;i++) { temp=i; data[i]=x; while(temp>=0) accum[temp]+

  • 资产三大报表

    一,资产负债表  a,资产负债表反映的是一个时间点的资产负债状况,一般有一年,半年,一个季度(如2012/12/302012/6/30)  b,资产=负债+股东权益  c,资产一般分为流动资产和非流动资产    流动资产:货币,债权,存货    非流动资产:投资,固定,无形   d,资产分类:按对利润的贡献方式    1,经营资产:货币,债权,存货,固定资产,无形资产    2,投资资产:可供出售金融资产,持有至到期资产,长期股权投资     二,利润表   a,反映的是一个时间段盈亏状况  b,净利润=收入-费用  c,收入:营业收入,营业外收入,投资收益,公允价值变动收益  d,费用:营业成本,财务费用,营业外支出   三,现金流量表 &

  • jquery-ui拖动

    <linkrel="stylesheet"href="css/jquery-ui.min.css"> <divid="containment-wrapper"></div> $(function(){ $("#containment-wrapper").resizable({ handles:'s' });//设置缩放 });复制 参考网址:https://www.jeasyui.cn/document/base/resizable.html

相关推荐

推荐阅读