首页 文章 精选 留言 我的

精选列表

搜索[开源生态],共10000篇文章
优秀的个人博客,低调大师

Meta 开源业界首个同时适用于图像、音频和文字的自我监督算法

Meta AI(前身为 Facebook AI,虽然已改名三个月时间,但说到 Meta 很多人还是无法第一时间反应过来)近日详细介绍了「首个高性能自我监督机器学习算法」—— data2vec,该算法可以应用于语音、图像和文本。 自我监督学习算法 —— 是一种机器通过直接观察环境进行学习的算法,而不通过由人工标记过的图像、文本、音频和其他数据源来学习,这种算法能够大大推动人工智能的发展。 从人类自身学习的角度来看,我们日常都在使用视觉和听觉等感官知觉来了解和学习身边的事物,但目前市面上普遍存在的自我监督学习算法通常只能针对某一个单独的领域(如:仅限图像、语音和文本中的一种,而不能用于所有情景),这一点也正是 data2vec 和其他自我监督算法最大的不同之处。 data2vec 提供一个能够用于语音、图像和文本的单一自我监督算法 —— 这意味着它不依赖于人工标记的数据集,而且还能够跨语音、图像和文本使用。除了这个优势以外,data2vec 与以前的算法相比,还具备经过简化的训练方式,并且在算法速度和准确性上还能够与特定模式的对手相匹配或略胜一筹。 Meta AI 为了证明这个算法的可行性,在流行的 ImageNet 计算机视觉基准上对 data2vec 进行了测试,结果显示它在流行的模型大小上比现有的方法表现更好。 而在语音方面,data2vec 的表现则优于 wav2vec 2.0 和 HuBERT(错误率越低越好),他们两个是 Meta AI 所开发的另两个语音自我监督算法。 对于文本的处理,经过 GLUE 基准套件测试,它的表现与 RoBERTa 基本一致。 Meta AI 指出,Data2vec 的诞生表明,同样的自我监督算法可以在不同的模式中很好地工作 —— 而且往往比现有的单一最佳算法更好。这为更普遍的自我监督学习铺平了道路,使我们更接近人工智能可以使用视频、文字和声音来学习这个复杂世界的愿景。 详细介绍 data2vec 的论文可从 Meta AI 官网获得,与此同时他们还在 GitHub 上发布了 data2vec 的源代码和预训练模型,该算法没有创建单独的仓库,而是位于 PyTorch-Fairseq 仓库之下,算法采用 MIT 许可。

优秀的个人博客,低调大师

Java 开源办公开发平台 O2OA V6.3 发布 | ElementUI 组件上线!

O2OA6.3版本中,新增了一组基于Vue的ElementUI组件,在流程表单设计界面,就可以在左边的工具栏找到ElementUI组件。它能让界面设计更加简洁直观,只需要将对应的组件拖动到表单设计区域就可以创建组件,还能保证产品设计人员搭建逻辑清晰、搭建出结构合理且高效易用的产品。 创建界面的布局容器后,可以选择字段类型组件、自动完成框、计数器、选择框、级联选择器、按钮、通用组件等进行快速搭建,提升设计效率,让界面更加美观,结构更加合理。以日期范围选择器为例,点击"Preview"按钮可预览组件样式: 保存表单就创建了一个用与选择日期范围的组件,组件的值会自动绑定到“v-model”属性指向的key,本例中,选择框的值被绑定到了this.data.value1中。我们再给日期选择框添加一些快捷选项,保存表单后即可看到效果: 除此之外,此次版本在流程管理中新增了onlyoffice控件、wps控件、金格控件、永中控件作为正文控件,支持在线编辑word、excel、ppt、pdf等文件,加强与同事之间的远程协同;新增了LibreOffice预览,满足了用户在线预览各类文件的需求,助力协同办公,实现高效的团队管理。 O2OA V6.3还包含其他的功能更新和问题修正,让平台更稳定,用户操作更方便: 功能新增 [通用]HTML编辑器CKEditor升级到4161,增加了阅读状态的图片延迟加载功能、浏览原图功能。涉及的应用有流程表单、内容管理表单和论坛帖子 [数据中心]新增了查询视图中导出Excel的功能 [内容管理]新增了内容管理文档的操作条中置顶的功能,并为内容管理列表增加置顶标记 [服务管理]新增了服务管理的代理和接口开发界面调试的功能 [流程管理]新增了表单设计界面增加数据模板的时候带入默认相关组件,数据模板导出字段配置自动获取的功能 [流程管理]新增了onlyoffice控件 [流程管理]新增了wps控件 [流程管理]新增了金格控件 [流程管理]新增了永中控件 [流程管理]新增了LibreOffice预览 [移动办公]新增了微信公众号,关注回复的消息的功能 [移动办公]新增了企业微信考勤数据导入查询功能 [移动办公]新增了移动端App支持tokenName修改的功能 [移动办公]新增了移动端App支持通讯录权限控制的功能 [移动办公]新增了移动端App个人信息页面的个人属性展现的功能 [数据库]新增了南大通用GBASE华库数据库支持 [日志]新增了服务器http request access log [流程平台]新增了流程起草权限增加群组设置的功能 [内容管理]新增了根据条件查找附件的接口 [流程平台]新增了流程起草增加权限校验 [人员组织]新增了人员组织管理模块接口mockput和mockdelete [流程平台]新增了待办、待阅根据title查询 [平台架构]新增了平台审计日志自定义程序分析功能 [流程平台]增加了公文编辑器转换Word后加密的功能 [流程平台]增加了公文编辑器加盖图片章的功能 [流程平台]新增了公文编辑器增加标题字体定义的功能 [流程平台]新增了公文编辑器保证版记在偶数页的功能 [流程平台]新增了公文编辑器增加附件内容编辑的功能 [流程平台]新增了公文编辑器增加编辑器属性配置的功能 [平台架构]新增了主菜单排序设置功能,管理员可设置默认和强制方式 [平台架构]新增了一组ElementUI组件 功能优化 [考勤管理]优化了考勤管理界面 [脚本API]优化了脚本API(增加了后台脚本API,增加了发送待阅、添加参阅) [内容管理]优化了内容管理表单事件,增加postSave、 postPublish [内容管理]整理了内容管理操作条的图标 [移动办公]优化了主题切换功能 [移动办公]优化了移动端已阅意见功能支持 [移动办公]O2云连接配置UI修改,以及一些页面功能调整优化 [移动办公]优化了移动端App分享功能 [移动办公]优化了移动端App拍照功能 [服务器]集群增加健康检查 [服务器]优化了线程池 [服务器]优化了缓存机制 [认证]验证码改为全匹配,并更新验证码实现 [内容管理]优化了文档发布消息发送条件,未配置消息类型不往消息处理器发送消息 [人员组织]优化了人员身份唯一编码,使其根据组织编码和人员唯一编码生成 [内容管理]优化了文档权限刷新,增加多线程处理,增加根据文档类型刷新权限 [内容管理]优化了分页查询的查询速度 [内容管理]优化了review表索引,减少不必要索引,增加联合索引 [流程平台]优化了公文编辑器格式展现 [流程平台]公文编辑器粘贴表格时,控制合适的宽度 [流程平台]公文编辑器只有一个附件时不显示序号 [平台架构]修复this.data绑定的Array数据类型问题 [平台优化]基于Authorization请求头的系统认证 问题修复 [流程管理]修复了重置处理人未剔除待办人的问题 [流程管理]修复了人员选择保存范围刷新后变回精简的问题 [内容管理]修复了内容管理设计端语言包上的一些问题 [流程管理]修复了表单Tab组件设置宽度无效的问题 [流程管理]修复了表单中TextArea组件只读时setData的问题 [流程管理]修复了数据表格移动端条目为0时无添加按钮的问题 [移动办公]修复了钉钉、企业微信考勤数据展现的bug [流程引擎]修复了定时节点无法清空已选值的bug [内容管理]修复了文档阅读记录出现cipher用户的问题 [内容管理]修复了根据创建时间查询文档错误的问题 [流程平台]修复了根据状态分页查找work的bug [内容管理]修复了文档保存时未保存置顶信息的问题 [流程平台]修复了执行this.data.save脚本时,在表单未载入完全时,可能造成数据丢失的问题 [平台架构]修复了loadCss方法会多次载入的问题 [流程平台]去除流程启动前和流程结束前两个事件 [平台架构]修复Promise的uncatch错误

优秀的个人博客,低调大师

鸿蒙开源第三方组件——自定义图片缩放组件PinchImageView-ohos

背景 PinchImageView-ohos是一个支持多点触控的ImageView手势操控组件,通过识别单指双击、双指捏合、单指滑动等手势指令,实现图片的放大、缩小、滑动等效果。该组件功能丰富且使用简单,被广泛应用于各类图片预览类应用。 组件效果展示 1、双指相向或相对捏合,实现图片的缩放变化。 2、单指双击实现图片的放大缩小。 3、单指双击后单指移动,实现图片的放大后平移。 Sample解析 Sample部分主要负责整体显示布局的搭建。首先为PinchImageView-ohos组件设置显示图片,然后将组件对象添加到显示布局中。下面将详细介绍组件的使用方法。 步骤1. 创建整体的显示布局。 步骤2. 导入相关类并实例化PinchImageView-ohos组件对象。 步骤3. 设置显示图片。 步骤4. 将PinchImageView-ohos组件对象添加到整体显示布局中。 //步骤1 创建整体的显示布局 DirectionalLayout directionalLayout = new DirectionalLayout(this); //步骤2 导入相关类并实例化对象 PinchImageViewnew pinchImageView = new PinchImageViewnew(this); //步骤3 设置显示图片 pinchImageView.setPixelMap(this, ResourceTable.Media_1111); //步骤4 将pinchImageView添加到整体显示布局中 directionalLayout.addComponent(pinchImageView); setUIContent(directionalLayout); Library解析 Library主要为PinchImageView-ohos组件实现手势获取功能和图片操控功能。 开发者通过设置监听器来捕捉各类手势,根据不同的手势执行不同的图片操控方法,从而显示不同的图片操控效果,如放大、缩小、移动。 1、手势获取方法 手势获取对实现PinchImageView-ohos组件的功能尤为重要,此处主要通过onTouchEvent()方法来捕捉对应的手势。主要用到的手势包含PRIMARY_POINT_UP(最后一根手指从屏幕上抬起)、PRIMARY_POINT_DOWN(第一根手指触摸屏幕)、OTHER_POINT_DOWN(当一根或多根手指已经触摸屏幕时,另一个手指触摸屏幕 )、OTHER_POINT_UP(一些手指从屏幕上抬起,而一些手指仍留在屏幕上 )、POINT_MOVE(手指在屏幕上移动)。通过监控各类手势的操作顺序和触碰时间等条件,达到识别捏合、滑动、单击、双击等复杂手势的效果。 onTouchEvent()函数首先通过TouchEvent.getAction()方法获取当前的手势,当手势为: (1)PRIMARY_POINT_UP 需要判断图片之前是否处于缩放模式(此时图片处于缩放状态)。如果是缩放模式,则触发结束缩放动画,后将手势状态置于自由模式。 //最后一个点抬起或者取消,结束所有模式 if (action == TouchEvent.PRIMARY_POINT_UP || action == TouchEvent.CANCEL) { //如果之前是缩放模式,还需要结束缩放动画 if (mPinchMode == PINCH_MODE_SCALE) { scaleEnd();//缩放结束 } //手势状态置于自由模式 mPinchMode = PINCH_MODE_FREE; } (2)PRIMARY_POINT_DOWN 需要判断图片是否在缩放动画中,若不在,图片将切换到滚动模式(此时图片处于可自由移动状态),并保存触发点的位置,用于(5)中的计算。 else if (action == TouchEvent.PRIMARY_POINT_DOWN) { //在缩放动画过程中不允许启动滚动模式 if (!(mScaleAnimator != null && mScaleAnimator.isRunning())) { //在动画过程中不允许启动滚动模式,停止所有动画 cancelAllAnimator(); //切换到滚动模式 mPinchMode = PINCH_MODE_SCROLL; //保存触发点的位置用于(5)中的计算 mLastMovePoint.modify(event.getPointerPosition(0).getX(), event.getPointerPosition(0).getY()); } } (3)OTHER_POINT_DOWN 需要将图片模式切换到缩放模式,并保存两个触发点的位置,用于(5)中的计算。 else if (action == TouchEvent.OTHER_POINT_DOWN) { //在动画过程中不允许启动缩放模式,停止所有动画 cancelAllAnimator(); //切换到缩放模式 mPinchMode = PINCH_MODE_SCALE; //保存缩放的两个触发点的位置,用于(5)中的计算 saveScaleContext(event.getPointerPosition(0).getX(), event.getPointerPosition(0).getY(), event.getPointerPosition(1).getX(), event.getPointerPosition(1).getY()); } (4)OTHER_POINT_UP 。需要判断手指抬起后图片是否处于缩放模式。 。。如果处于缩放模式下,判断识别到的手指是否超过两个。 。。。在剩余手指超过两个(缩放模式未结束)的情况下,第一个触摸的手指抬起, 那么让第二个触摸的手指和第三个触摸的手指所在的点作为缩放控制点。 。。。在剩余手指超过两个(缩放模式未结束)的情况下,第二个触摸的手指抬起, 那么让第一个触摸的手指和第三个触摸的手指所在的点作为缩放控制点。 。。如果处于缩放模式下,判断识别到的手指只有一个。此时不能允许它切换到滚动模式,因为图片可能没有在初始的位置上。 。手指抬起后图片未处于缩放模式时(屏幕上仅剩余一个手指),开启滚动模式,并记录开始滚动的点。 else if (action == TouchEvent.OTHER_POINT_UP) { //多个手指情况下抬起一个手指,此时需要是缩放模式才触发 if (mPinchMode == PINCH_MODE_SCALE) { //抬起的点如果大于2,那么缩放模式还有效,但是有可能初始点变了,重新测量初始点 if (event.getPointerCount() > 2) { //如果还没结束缩放模式,但是第一个点抬起了,那么让第二个点和第三个点作为缩放控制点 if (event.getAction() >> 8 == 0) { event.getPointerPosition(1).getX(); saveScaleContext(event.getPointerPosition(1).getX(), event.getPointerPosition(1).getY(), event.getPointerPosition(2).getX(), event.getPointerPosition(2).getY()); //如果还没结束缩放模式,但是第二个点抬起了,那么让第一个点和第三个点作为缩放控制点 } else if (event.getAction() >> 8 == 1) { saveScaleContext(event.getPointerPosition(0).getX(), event.getPointerPosition(0).getY(), event.getPointerPosition(2).getX(), event.getPointerPosition(2).getY()); } } //如果抬起的点等于2,那么此时只剩下一个点,也不允许进入单指模式,因为此时可能图片没有在正确的位置上 } } (5)POINT_MOVE 需要判断当前图片的模式。当为滚动模式时,执行scrollBy()方法来实现图片的移动效果;当它为缩放模式时,计算两个缩放点的距离和缩放点的中心,并执行scale()方法实现图片的缩放效果。scrollBy()方法和scale()方法的具体逻辑在图片操控方法中有详细介绍,此处就不做过多赘述。 else if (action == TouchEvent.POINT_MOVE) { if (!(mScaleAnimator != null && mScaleAnimator.isRunning())) { //在滚动模式下移动 if (mPinchMode == PINCH_MODE_SCROLL) { //每次移动产生一个差值累积到图片位置上 scrollBy(event.getPointerPosition(0).getX() - mLastMovePoint.position[0], event.getPointerPosition(0).getY() - mLastMovePoint.position[1]); //记录新的移动点 mLastMovePoint.modify(event.getPointerPosition(0).getX(), event.getPointerPosition(0).getY()); //在缩放模式下移动 } else if (mPinchMode == PINCH_MODE_SCALE && event.getPointerCount() > 1) { //两个缩放点间的距离 float distance = MathUtils.getDistance(event.getPointerPosition(0).getX(), event.getPointerPosition(0).getY(), event.getPointerPosition(1).getX(), event.getPointerPosition(1).getY()); //保存缩放点中心 float[] lineCenter = MathUtils.getCenterPoint(event.getPointerPosition(0).getX(), event.getPointerPosition(0).getY(), event.getPointerPosition(1).getX(), event.getPointerPosition(1).getY()); mLastMovePoint.modify(lineCenter[0], lineCenter[1]); //处理缩放 scale(mScaleCenter, mScaleBase, distance, mLastMovePoint); } } } 2、图片操控方法 1、图片缩放 (1)双指捏合 双指捏合,顾名思义是表示两根手指向相反方向移动的操作,该操作可实现图片放大缩小的效果。双指捏合完成图片缩放的功能是由scale()方法实现的。 在scale()方法体中需要设置各种缩放参数:scaleBase是缩放系数、scaleCenter代表图片缩放中点、distance指两指间距离、lineCenter是两指中点。scaleBase和distance相乘会得到缩放比例,图片依旧缩放比例进行变化。在缩放过程中,图片缩放中点scaleCenter会跟随两指中点lineCenter移动,实现以两指中点为中心对图片进行放大缩小的效果,缩放效果如图4所示。 private void scale(Point scaleCenter, float scaleBase, float distance, Point lineCenter) { if (!isReady()) { return; } //计算图片从fit center状态到目标状态的缩放比例 float scale = scaleBase * distance; Matrix matrix = MathUtils.matrixTake(); //按照图片缩放中心缩放,并且让缩放中心在缩放点中点上 matrix.postScale(scale, scale, scaleCenter.position[0], scaleCenter.position[1]); //让图片的缩放中点跟随手指缩放中点 matrix.postTranslate(lineCenter.position[0] - scaleCenter.position[0], lineCenter.position[1] - scaleCenter.position[1]); //应用变换 mOuterMatrix.setMatrix(matrix); MathUtils.matrixGiven(matrix); dispatchOuterMatrixChanged(); //重绘 invalidate(); } (2)单指双击 单指双击表示用单根手指双击屏幕的操作,该操作可实现图片放大缩小的效果,单指双击完成图片缩放的功能是由doubleTap()方法实现的。 在doubleTap()方法体中我们初始化了一个缩放动画的对象mScaleAnimator(),它有两个参数分别为mOuterMatrix(开始矩阵)和animEnd(结束矩阵)。开始矩阵表示图片原来的位置与大小;结束矩阵表示图片缩放后的位置与大小,是根据放大比例和双击点位置确定的。确定图片的开始和结束矩阵后,启动缩放动画,便可以实现缩放效果,如图5所示。 private void doubleTap(float x, float y) { ... //开始计算缩放动画的结果矩阵 Matrix animEnd = MathUtils.matrixTake(mOuterMatrix); //计算还需缩放的倍数 animEnd.postScale(nextScale / currentScale, nextScale / currentScale, x, y); //将放大点移动到控件中心 animEnd.postTranslate(displayWidth / 2f - x, displayHeight / 2f - y); RectFloat testBound = MathUtils.rectFTake(0,0,mp.getImageInfo().size.width,mp.getImageInfo().size.height); ... //清理当前可能正在执行的动画 cancelAllAnimator(); //启动矩阵动画 mScaleAnimator = new ScaleAnimator(mOuterMatrix, animEnd); mScaleAnimator.start(); ... } 2、图片在缩放状态下移动 单指滑动表示手指在屏幕上完成矢量平移,是图片移动的唯一方式。该功能是通过scrollBy()方法实现的。 以实现图片左右移动为例,在scrollBy()方法中,需要判断缩放状态下图片位移的最大距离,有以下几种不同的情况: 图片移动后,左侧边缘超出控件的左侧边缘,图片无法移动; 图片移动后,右侧边缘超出控件的右侧边缘,图片无法移动; 图片移动后,两侧都未超出控件边缘的情况下,将以手指触碰点作为控制点,对图片进行水平移动。 图片上下平移的情况与左右平移类似,这里不做赘述,图片移动效果如图6所示。 public boolean scrollBy(float xDiff, float yDiff) { ... if (bound.right - bound.left < displayWidth) { xDiff = 0; //如果图片左边在移动后超出控件左边 } else if (bound.left + xDiff > 0) { //如果在移动之前是没超出的,计算应该移动的距离 if (bound.left < 0) { xDiff = -bound.left; //否则无法移动 } else { xDiff = 0; } //如果图片右边在移动后超出控件右边 } else if (bound.right + xDiff < displayWidth) { //如果在移动之前是没超出的,计算应该移动的距离 if (bound.right > displayWidth) { xDiff = displayWidth - bound.right; //否则无法移动 } else { xDiff = 0; } } ... } 项目贡献人 陈丛笑 郑森文 朱伟 陈美汝 张馨心 薛德凡 蔡志杰 李珂 想了解更多关于鸿蒙的内容,请访问: 51CTO和华为官方战略合作共建的鸿蒙技术社区 https://harmonyos.51cto.com/#bkwz

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册