利用“姿态相似度比较”功能,对运动(动作)识别检测“秒”适配

本周迎来了「AI运动识别小程序插件」一个具有里程碑意义的功能更新:“姿态相似度比较”功能。利用此特性可以极大的提高您适配运动(动作)识别检测的速度,下面就带您体验一下此特性的魅力。

一、确保将插件版本升级至v1.0.7

//app.json
{
	"plugins": {
        "aiSport": {
            "version": "1.0.7",
            "provider": "wx6130e578c4a26a1a"
        }
    }
}

二、姿态相似度比较API介绍

「姿态相似度比较」功能,是对给定的两组“人体关键点”进行分区及综合比较,并给出评分,省去了您在适配运动(动作)识别检测时,配置检测规则的繁琐。功能有三个主要对象放置在插件的calc命名空间,分别是:calc.PoseComparercalc.PoseComparerResultcalc.PoseComparerPartItem,详情的请参考api-docs

三、取姿态样本

进行姿态比较前您需要取一个标准姿态的关键点样本,您可以通过我们为您提供的「运动构建调试工具」来提取样本。
image

四、执行样本比较


//样本姿态人体关键点
const sample = 
 [{y:95.41808288282594,x:214.42673274576924,score:0.51611328125,name:"nose"},
 {y:84.61684727250136,x:221.80983627909686,score:0.7265625,name:"left_eye"},
 {y:87.59059985661885,x:202.12153237356293,score:0.59130859375,name:"right_eye"},
 {y:92.85449529945058,x:234.93538334278358,score:0.814453125,name:"left_ear"},
 {y:99.07546188234281,x:188.58581196413604,score:0.6806640625,name:"right_ear"},
 {y:149.86859452983884,x:271.3040866650822,score:0.7246093153953552,name:"left_shoulder"},
 {y:162.78905492065545,x:158.09624324078422,score:0.82666015625,name:"right_shoulder"},
 {y:236.41516213602512,x:280.8747980656871,score:0.728515625,name:"left_elbow"},
 {y:246.8062369181066,x:156.3188420992395,score:0.55859375,name:"right_elbow"},
 {y:305.46100866896046,x:286.61722490605007,score:0.6591796875,name:"left_wrist"},
 {y:313.80120003234475,x:152.9006975047454,score:0.70849609375,name:"right_wrist"},
 {y:304.5039375289,x:251.342317172392,score:0.87646484375,name:"left_hip"},
 {y:303.68360752741575,x:189.6796075527766,score:0.8740234375,name:"right_hip"},
 {y:431.38422581120494,x:237.66987231438497,score:0.70703125,name:"left_knee"},
 {y:430.01698132540423,x:189.6796075527766,score:0.8017578125,name:"right_knee"},
 {y:529.8258287888553,x:229.19295650242066,score:0.6884765625,name:"left_ankle"},
 {y:534.747908937738,x:201.71134233782658,score:0.578125,name:"right_ankle"}];

//当前帧动作,抽帧并且识别后,取人体识别结果中的keypoints
const frame = 
 [{y:154.06250001297832,x:258.7499999883252,score:0.728515625,name:"nose"},
 {y:143.12500001305142,x:254.37499998835446,score:0.56298828125,name:"left_eye"},
 {y:143.75001908653357,x:255.937499988344,score:0.69482421875,name:"right_eye"},
 {y:143.984394086532,x:229.99999998851743,score:0.43115234375,name:"left_ear"}
 ,{y:146.17187501303107,x:236.09374998847667,score:0.4919433891773224,name:"right_ear"},
 {y:201.4062690861481,x:205.9375190621646,score:0.51416015625,name:"left_shoulder"},
 {y:202.03125001265758,x:227.96874998853102,score:0.66259765625,name:"right_shoulder"},
 {y:281.25001908561427,x:234.6874999884861,score:0.26416015625,name:"left_elbow"},
 {y:270.6250190856853,x:254.06249998835656,score:0.278076171875,name:"right_elbow"},
 {y:246.09376908584932,x:289.06249998812257,score:0.1997070610523224,name:"left_wrist"},
 {y:238.43750001241418,x:300.62499998804526,score:0.50927734375,name:"right_wrist"},
 {y:321.5624618648858,x:218.59376906208004,score:0.58154296875,name:"left_hip"},
 {y:323.43750001184594,x:224.06249998855716,score:0.5615234375,name:"right_hip"},
 {y:453.43750001097675,x:217.34376906208837,score:0.6103515625,name:"left_knee"},
 {y:455.6250000109622,x:214.06249998862396,score:0.51416015625,name:"right_knee"},
 {y:572.5000000101808,x:215.31249998861563,score:0.403564453125,name:"left_ankle"},
 {y:593.1250000100429,x:216.0937499886104,score:0.52294921875,name:"right_ankle"}];

//新建比较器,执行比较
 const poseComparer = new AiSports.calc.PoseComparer();
 const result = poseComparer.compare(sample, frame);
 console.log(result);

//输出结果
//{items:
//         [{key:"head",score:0.4327263684686711,summary:"头部偏转相似度"},
//          {key:"trunk",score:0.8407704975917485,summary:"躯干形态相似度"},
//          {key:"left_hand",score:0.2155245751055277,summary:"左手相似度"},
//          {key:"right_hand",score:0.21361728579451628,summary:"左手相似度"},
//          {key:"left_foot",score:0.5147016736506456,summary:"左脚相似度"},
//          {key:"right_foot",score:0.5190758118853293,summary:"右脚相似度"}],
// score:0.5110266728697409  //整体相似度评分
//}

五、相似度结果应用

取得相似结果后,您可以根据运动(动作)的要求,直接进行总体评分或指定分区的评分判断(建议相似度在≥0.80时视为通过)。若有更精细的要求,也可以再配置一些加强规则进行再检测,详情请参考集成文档的body-calc相关章节。

注:目前相似度的比较,在前、后视角时置信度相对更高,正侧视图稍差些,后期我们将针对侧视图进行优化,敬请期待。

image

AI运动识别小程序插件介绍:

本插件可以为您的小程序提供人体检测、运动识别的AI能力,插件目前支持跳绳、开合跳、俯卧撑、仰卧起坐、深蹲(深蹲起)、平板支撑、马步蹲等运动的识别检测计时、计数分析,更多的运动类型正在丰富中;插件运动识别引擎提供了基于规则配置的运动识别能力,您可以通过配置一些简单的规则,增加一项新的运动(动作)识别能力,若是复杂的运动种类,也可以通过代码扩展的方式进行。

提供信息系统、公众号、小程序、APP订制开发服务

www.yztob.com

QQ:316455841

欢迎通过各种渠道咨询了解,免费提供信息系统建设咨询服务。

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

相关文章

  • Android架构之路-三步实现MVP架构(下)

    在上一篇我已经介绍了MVP的概念,还有对Google官方的示例进行了讲解。请移步:Android架构之路-三步实现MVP架构(上)。本文我将带领大家一起架构MVP。1MVP项目分包对于项目分包,有的人喜欢根据功能分包,也有人喜欢根据组件或者模块进行分包。分包原则:使得项目结构清晰,功能明确,便于查询与后期维护。具体看个人爱好,没有严格规定,大家先看一张我分包后的项目结构:1-1项目结构项目结构:1、base:存放一些我们封装的基类。 2、contract:存放契约类。 3、database:存放一些手机数据sqlite数据。 4、event:存放一些消息事件,我使用的是开源eventBus3.0。 5、http:就是你封装的网络框架。 6、listener:存放一些自己定义的监听。 7、model:里面又分两个包,bean(存放实体类)、impl(存放model实现类)。 8、presenter:就是MVP中的P,俗称媒介。 9、ui:MVP中的V,我把adapter(适配器)和widget(自定义View)也放在这个包。 10、utils:存放一些开发中的工具类。 这样看起来是不是项

  • 中国人工智能城市竞赛,哪个城市跑得最快?

    导读:凭什么北京是最大赢家?来源:前瞻产业研究院(ID:qianzhancy)01行业发展现状分析1.全球专利申请数量第一我国为抓住新一轮科技革命和产业变革机遇,近年来大力发展新一代人工智能。在新一代人工智能相关学科发展、理论建模、技术创新、软硬件升级等整体推进下,我国人工智能技术得到了快速发展,在全球竞争力也得到了显著的提升。2018年,我国人工智能专利申请数量达到94539件,是2010年申请数量的10倍左右。2000-2019年,我国人工智能累计申请专利数超过44万件,位居全球第一。2.应用场景广泛,疫情加速AI医疗领域发展目前,我国人工智能场景应用广泛,涉及的领域包括安防、金融、零售、交通、教育、医疗、制造、健康等。其中,安防和金融是我国目前人工智能应用最广的领域,我国已建成集数据传输和控制与一体的自动化监控平台,优必选5G智能巡检机器人安巡士在2019年已经正式“上岗”深圳市塘朗派出所,以一键报警、实时视频监控、数据采集等7项警务辅助功能助力警务工作数字化、安防监控智能化。金融行业拥有良好的数据积累,人工智能在工作流程与相关技术的运用上得到了广泛的应用。此外,人工智能在今年的

  • GNS3 7.3与SecureCRT、W

       最近限于自身的经济条件的限制,而我对网络的学习欲望愈发强烈。于是在这种情况下对使用GNS3模拟器模拟网络实验感兴趣起来。以下是我在使用GNS3过程中的一点小总结,特贴出来和大家共享。以下主要讲的是如何在GNS3中使用SecureCRT打开路由的配置页面和使用Wireshark软件进行抓包。既然要使用SecureCRT先说一说为什么要使用它吧,即使用它给我们带来的好处。一、使在N多路由器页面打开时,每个路由页面清楚标识,便于管理。    不知你是否遇到过这种情况,就是直接使用GNS3中的telnet连接时,当打开一个路由器时,自己能知道哪个页面是哪个路由器的,但当打开大量的路由配置页面时,你自己是否还能分得清呢?即使你说你的记忆力很好分得清,你是否想过干嘛不通过一种软件的方式,将每个路由配置页面标记,便于自己区分。让自己的大脑从那些繁琐的记忆中解放出来,而SecureCRT正是这样的软件。当然,SecureCRT的功能是相当强大的,这里有点大材小用了。这里是我用SecureCRT打开的四个路由器的画面: 可以看出:SecureCRT清楚的将每个路由配置页面标记清楚了。二、使用Sec

  • 干货!大话EXT4文件系统完整版

    以下文章来源于SSDFans,作者Martrixer一:VFS我们知道SSD是一场存储革命,设计和制造一个好的SSD固然重要,但如何正确使用以充分发挥SSD性能同样重要。SSD内在的并行性和先擦再写的特性决定了它不同于机械硬盘简单的LBA和存储块一一对应,要充分挖掘SSD的并行性,提升性能,延长寿命,缩短延迟,就必须在上层应用做出改动。很多SSD的使用大户都作出了这种尝试,从国外的Google,Microsoft,Facebook,到国内的Baidu,Alibaba等,本站就曾经介绍过百度的软件定义闪存,把对象存储和SSD内部结构统一起来使用。但对大部分企业来讲,这种结构还是太独特了,我们还是要关注通用的架构,首先来了解离硬盘最近的软件:文件系统。本系列文章将以Linux系统最常见的EXT4文件系统为例,从SSD爱好者的角度来揭开文件系统的庐山真面目。VFS架构要说Linux文件系统,不得不说VFS:VirtualFileSystem,如上图,Linux设计了一个文件系统的中间层,上层用户都直接和VFS打交道,文件系统开发者再把VFS转换为自己的格式。这样做的优点主要有:用户层应用不用

  • iOS 开发:『Runtime』详解(二)Method Swizzling

    本文用来介绍iOS开发中『Runtime』中的黑魔法MethodSwizzling。通过本文,您将了解到: MethodSwizzling(动态方法交换)简介MethodSwizzling使用方法(四种方案)MethodSwizzling使用注意MethodSwizzling应用场景 4.1全局页面统计功能 4.2字体根据屏幕尺寸适配 4.3处理按钮重复点击 4.4TableView、CollectionView异常加载占位图 4.5APM(应用性能管理)、防止崩溃文中示例代码在:bujige/YSC-Runtime-MethodSwizzling 1.MethodSwizzling(动态方法交换)简介MethodSwizzling用于改变一个已经存在的selector实现。我们可以在程序运行时,通过改变selector所在Class(类)的methodlist(方法列表)的映射从而改变方法的调用。其实质就是交换两个方法的IMP(方法实现)。上一篇文章中我们知道:Method(方法)对应的是objc_method结构体;而objc_method结构体中包含了SELmethod_name

  • Linux 内核 TCP MSS 机制详细分析

    作者:Hcamael@知道创宇404实验室 时间:2019年6月26日 英文版本:https://paper.seebug.org/967/前言上周Linux内核修复了4个CVE漏洞[1],其中的CVE-2019-11477感觉是一个很厉害的Dos漏洞,不过因为有其他事打断,所以进展的速度比较慢,这期间网上已经有相关的分析文章了。[2][3]而我在尝试复现CVE-2019-11477漏洞的过程中,在第一步设置MSS的问题上就遇到问题了,无法达到预期效果,但是目前公开的分析文章却没对该部分内容进行详细分析。所以本文将通过Linux内核源码对TCP的MSS机制进行详细分析。测试环境1.存在漏洞的靶机操作系统版本:Ubuntu18.04内核版本:4.15.0-20-generic地址:192.168.11.112内核源码:$sudoaptinstalllinux-source-4.15.0 $ls/usr/src/linux-source-4.15.0.tar.bz2复制带符号的内核:$cat/etc/apt/sources.list.d/ddebs.list debhttp://ddebs

  • 从Twitter的XSS漏洞构造出Twitter XSS Worm

    2018年年中,当时我发现了一个Twitter的存储型XSS漏洞,该漏洞位于Twitter的犄角旮旯之处,一般人很难发现。重点在于,后来我又发现,这个存储型XSS漏洞可以被进一步构造形成一个稳定的XSSworm!XSSWorm介绍XSSWorm(XSS蠕虫)是XSS漏洞利用的终极武器,也就是把XSS漏洞打造成蠕虫来进行广泛传播感染,安全威胁轻则为“恶作剧”,重则为窃取用户数据或瘫痪网络应用。早有2005年的Myspace蠕虫,19岁少年制作的XSSworm在短短几小时之内就通过Myspace空间感染了100万用户;还有2007年的百度空间蠕虫,至百度进行屏蔽防护时,这个XSSworm已经感染了8700多个博客空间。XSSworm对社交网站和大型社区论坛危害性极大。更多信息请参考wikipedia。开门见山上XSSWormPayloadXSSWormPayload开门见山,一来就上该TwitterXSSworm的漏洞利用URL链接(exploit)吧,稍后我们再详解其中的特别之处。在该XSS漏洞修复之前,通过Twitter发布以下URL链接就会创建出一个XSSworm来,它可以在推特圈内

  • 腾讯TStack,帮助用户构建自己的专属腾讯云服务

    .

  • Java 池化技术你了解多少?

    大家好,我是不才陈某~在我们平常的编码中,通常会将一些对象保存起来,这主要考虑的是对象的创建成本。比如像线程资源、数据库连接资源或者TCP连接等,这类对象的初始化通常要花费比较长的时间,如果频繁地申请和销毁,就会耗费大量的系统资源,造成不必要的性能损失。并且这些对象都有一个显著的特征,就是通过轻量级的重置工作,可以循环、重复地使用。这个时候,我们就可以使用一个虚拟的池子,将这些资源保存起来,当使用的时候,我们就从池子里快速获取一个即可。在Java中,池化技术应用非常广泛,常见的就有数据库连接池、线程池等,本文主讲连接池,线程池我们将在后续的博客中进行介绍。公用池化包CommonsPool2简介我们首先来看一下Java中公用的池化包CommonsPool2,来了解一下对象池的一般结构。根据我们的业务需求,使用这套API能够很容易实现对象的池化管理。<!--https://mvnrepository.com/artifact/org.apache.commons/commons-pool2--> <dependency> <groupId>org.apa

  • 探索 Python/Django 支持分布式多租户数据库,如 Postgres+Citus

    在 确定分布策略 中,我们讨论了在多租户用例中使用Citus所需的与框架无关的数据库更改。在这里,我们专门研究如何借助 django-multitenant 库将多租户Django应 用程序迁移到Citus存储后端。 Django https://www.djangoproject.com/ 确定分布策略 http://citus.hacker-linner.com/develop/migration_mt_schema.html#mt-schema-migration django-multitenant https://github.com/citusdata/django-multitenant 此过程将分为5个步骤: 将租户列介绍给我们想要分发的缺少它的模型 更改分布式表的主键以包含租户列 更新模型以使用 TenantModelMixin 分发数据 将Django应用程序更新为范围查询 准备横向扩展多租户应用程序 最初,您将从放置在单个数据库节点上的所有租户开始。为了能够扩展django,必须对模型进

  • 终于有人把“TCC分布式事务”实现原理讲明白了!

    之前网上看到很多写分布式事务的文章,不过大多都是将分布式事务各种技术方案简单介绍一下。很多朋友看了还是不知道分布式事务到底怎么回事,在项目里到底如何使用。 所以这篇文章,就用大白话+手工绘图,并结合一个电商系统的案例实践,来给大家讲清楚到底什么是TCC分布式事务。 首先说一下,这里可能会牵扯到一些SpringCloud的原理,如果有不太清楚的同学,可以参考之前的文章:《拜托,面试请不要再问我SpringCloud底层原理!》。 业务场景介绍 咱们先来看看业务场景,假设你现在有一个电商系统,里面有一个支付订单的场景。 那对一个订单支付之后,我们需要做下面的步骤: 更改订单的状态为“已支付” 扣减商品库存 给会员增加积分 创建销售出库单通知仓库发货 这是一系列比较真实的步骤,无论大家有没有做过电商系统,应该都能理解。 进一步思考 好,业务场景有了,现在我们要更进一步,实现一个TCC分布式事务的效果。 什么意思呢?也就是说,[1]订单服务-修改订单状态,[2]库存服务-扣减库存,[3]积分服务-增加积分,[4]仓储服务-创建销售出库单。 上述这几个步骤,要么一起成功,要么一起失败,必须

  • golang物联网之路一:来个简单的CRUD吧

    互联网目前已进入其生命末期,而物联网则正在落地开发,随之而来的各种原生云则是让互联网进入生命末期的主要诱因。同时由于物联网的兴起,对云的要求则更加迫切,所以这里不得不掌握一门新的云语言来增强自身的技能属性,避免被时代抛弃,golang,作为新生代语言,则属于天选之子。 当然了,新语言学习,我一向认为单纯的看语法,按部就班的学习,是一件很枯燥且性价比极低的事情,所以这里,我们就从mysql的crud来学起吧。当然了,工欲善其事必先利其器,我们首先要在本地安装好mysqlserver,gosdk,goland等必备工具,由于安装过程寥寥几笔,无需浓墨重彩,我这里不需多言。下面展示的是安装好之后的代码步骤 代码层级  代码层级很简单,dao放数据访问层,entity是实体层,service中则是增删改查的各种服务,main.go负责运行,而go.mod则是创建项目的时候,goland默认给我们创建的,注意这个go.mod非常重要,不要删除,否则会导致无法import一些包。 数据库连接connection.go packagedao import( "database/sq

  • 2012年第三届蓝桥杯Java本科组省赛试题解析

    题目地址:https://wenku.baidu.com/view/326f7b4be518964bcf847c96.html?rec_flag=default  =>百度文档     题目及解析如下: 题目大致介绍: 第一题到第四题是结果填空,方法不限只要得到最后结果就行 第五题到第七题是代码填空,要求在指定的位置处填代码 第八题到第十题是编程题,要求编程解决问题   第一题 第一题很简单,就是个签到题,详情如下: 1//黄金分割数 2 3publicclasst1{ 4 5publicstaticvoidmain(String[]args){ 6 7inta=1; 8intb=3; 9 10for(inti=0;i<=50;i++){ 11inttemp=a+b; 12doubles=(double)b/temp; 13System.out.println(b+""+temp+""+s); 14a=b; 15b=temp; 16} 17 18} 19 20//answer:577893490.618034014333

  • vue的mode: &#39;history&#39;模式

    1constrouter=newVueRouter({ 2mode:'history', 3routes:[...] 4})复制 不用mode:'history'的时候,页面url地址后面会加上一个“#”(官方文档说这样需要后台配置参考地址 https://router.vuejs.org/zh/guide/essentials/history-mode.html#%E5%90%8E%E7%AB%AF%E9%85%8D%E7%BD%AE%E4%BE%8B%E5%AD%90) 使用mode:'history'的时候,页面上的url就是正常的地址

  • 从远程库克隆

    上次我们讲了先有本地库,后有远程库的时候,如何关联远程库。 现在,假设我们从零开发,那么最好的方式是先创建远程库,然后,从远程库克隆。 首先,登陆GitHub,创建一个新的仓库,名字叫gitskills: 我们勾选InitializethisrepositorywithaREADME,这样GitHub会自动为我们创建一个README.md文件。创建完毕后,可以看到README.md文件: 现在,远程库已经准备好了,下一步是用命令gitclone克隆一个本地库: $gitclonegit@github.com:michaelliao/gitskills.git Cloninginto'gitskills'... remote:Countingobjects:3,done. remote:Total3(delta0),reused0(delta0) Receivingobjects:100%(3/3),done. $cdgitskills $ls README.md 复制 注意把Git库的地址换成你自己的,然后进入gitskills目录看看,已经有README.md文件了。 如果有多

  • 手机尾号评分

    /*30年的改革开放,给中国带来了翻天覆地的变化。2011全年中国手机产量约为11.72亿部。手机已经成为百姓的基本日用品! 给手机选个好听又好记的号码可能是许多人的心愿。但号源有限,只能辅以有偿选号的方法了。 这个程序的目的就是:根据给定的手机尾号(4位),按照一定的规则来打分。其规则如下: 1.如果出现连号,不管升序还是降序,都加5分。例如:5678,4321都满足加分标准。 2.前三个数字相同,或后三个数字相同,都加3分。例如:4888,6665,7777都满足加分的标准。注意:7777因为满足这条标准两次,所以这条规则给它加了6分。 3.符合AABB或者ABAB模式的加1分。例如:2255,3939,7777都符合这个模式,所以都被加分。注意:7777因为满足这条标准两次,所以这条标准给它加了2分。 4.含有:6,8,9中任何一个数字,每出现一次加1分。例如4326,6875,9918都符合加分标准。其中,6875被加2分;9918被加3分。 尾号最终得分就是每条标准的加分总和! 要求程序从标准输入接收数据,在标准输出上输出结果。 输入格式为

  • Spring中类型自动装配--byType

    在Spring中,“类型自动装配”的意思是如果一个bean的数据类型与其它bean属性的数据类型相同,将自动兼容装配它。 例如,一个“persion” bean 公开以“ability”类数据类型作为属性,Spring会找到ability类相同的数据类型,并自动装配它的Bean。如果没有匹配找到,它什么也不做。   packageauto_w; /** *Createdbyluozhitaoon2017/8/8. */ publicclassablity{ publicvoidsetWrite_able1(Stringwrite_able1){ this.write_able1=write_able1; } publicStringgetWrite_able1(){ returnwrite_able1; } privateStringwrite_able1; }复制   packageauto_w; /** *Createdbyluozhitaoon2017/8/8. */ publicclassPerson{ publi

  • 01分数规划

    01分数规划 二分答案。设二分的值为实数mid。 如果途中存在一个环S,使得\(\sum{(mid*wt[j]-wf[t])}<0\),那么我们可知: 存在一个\(S\),使得\(mid<\frac{\sum{wf}}{\sumwt}\) 也即是说,本题所求的最大值一定大于\(mid\)。 如果对图中任意一个环\(S\),都有\(\sum(mid*wt[j]-wf[t])>=0\),同理可知: 所有的\(S\),都有\(mid<\frac{\sumwf}{\sumwt}\) 也就是说,本题所求的最大值不超过mid。 综上所述对于每轮二分,我们建立一张新图,结构与原图相同,但是没有点权,有向边的权值是\(mid*wt[j]-wf[t]\),即本来的边权乘上\(mid\)再减去入点的权值。 在这张新图上,\(\sum(mid*wt[j]-wf[t])<0\)的含义就是图中存在负环。因此,我们用\(SPFA\)算法在新图上求最短路,若有负环,说明\(mid\)比答案小,应该令\(l=mid\)。若最短路的求解正常结束,则令\(r=mid\)。二分结束

  • react+echarts/g2/bizcharts可视化图表

    一.echarts的折线图的使用demo如下,linecharts为实例化的封装组件,line为实际应用的组件 cnpminstallecharts复制 importReactfrom'react'; import'./lineCharts.less'; letecharts=require('echarts'); /** *组件参数配置 * *@param{string}id *id=每个图标的标识 *@param{array}color *color=多组数据的颜色区分,第一组数据为第一种颜色 *@param{}legendShow *legendShow是否显示默认标注,右上角颜色对应块 *@param{string}legendTextStyle *legendTextStyle=折线图标注的文字颜色 *@param{}noPercent *noPercent折线图不是以百分比来显示 *@param{array}xAxis *xAxis":["翡翠城西南区","盛世嘉园","西溪北苑"], *@param{array}yAxis *"yAxis":[ { "data":

  • python 多个for循环和range结合的列表推导式;如果有多个for循环,则最终的数据数量为多个for循环的笛卡尔积.

    如果有多个for循环,则最终的数据数量为多个for循环的笛卡尔积. #多个for循环的列表推导式 #range取值5-15,步长为5,range()取值顾头不顾尾,所以取值为5和10 list_e=[(e,f*f)foreinrange(3)forfinrange(5,15,5)] print(list_e) lis=[fforfinrange(5,15,5)]#取值5-15,步长为5,range()取值顾头不顾尾,所以取值为5和10 print(lis) 结果是: [(0,25),(0,100),(1,25),(1,100),(2,25),(2,100)] [5,10] 复制

  • LoadRunner性能测试系统学习教程:JVM调优(8)

    上期我们讲到LoadRunner性能测APR配置,这期我们讲LoadRunner性能测试JVM调优。 JVM调优 JVM:JavaVirtualMachine叫Java虚拟机Java语言最大的特点就是可以跨平台操作,JAVA之所以可以跨平台操作,是因为JAVA将写好的目标代码装载在一个叫JAVA虚拟机的平台上,这样可以保证在不同平台上运行时,不需要再次编译代码。那么所以运行的代码其实是在JVM中,即代码不是直接运行在我们操作平台,所以JVM调优核心是如何让JAVA源代码在JVM中运行的效率更高。影响JVM运行的效率核心指标是内存的使用,所以我们通常说的JVM调优都是在谈论内存分配的问题。 JVM内存模型 JVM的内存模型是由JMM来定义的,是一种规范。主要定义JVM在计算机内存RAM中的工作方式。它屏蔽了各种硬件和操作系统的访问差异,不像C那么直接访问硬件内存,相对来说会更安全些。其主要是解决多线程通过共享内存进行通信时本地内存数据不一致、指令重排序、代码乱序等执行相关的问题。这样可以更好的保证并发时场景中的原子性、可见性和有序性。其实关于JVM内存模型是开发要理解的,那为什么我们做

相关推荐

推荐阅读