首页 文章 精选 留言 我的

精选列表

搜索[知识库增强],共10005篇文章
优秀的个人博客,低调大师

小诺官方文档再次增强

开源版本Java脚手架(快速开发平台)层出不穷,作为一块项目利器+私活利器,开发途中难免会遇到一些问题,这时大部分小伙伴也会想到说是去看官方文档。对于一块文档齐全的脚手架开发起来也是效率挺高,如果只是开源了没有文档或者是文档不齐全是件很头疼的事情。 现在让我们来说说小诺快速开发平台,一开始我们的第一个版本为vue版本的,前端选型采用AntDesignVue,不仅界面美观,还是Vue开发的,这对于喜欢Vue开发的小伙伴简直是福音。也有部分小伙伴问我们为什么没适配React,可能React这方面的使用的人还是少。 昨天(2021年1月18日),我们对整体的文档进行了大规模的改动,上面包含了Layui(单体版本)、Vue(前后分离)、Cloud(微服务前后分离)等周边文档的链接,更加的全面贴近用户使用习惯。 目前还有一些小伙伴从0开始跟我们学习,我们的文档将会在后面的版本中包含通过小诺0基础开发业务,大家期待吗? 想更多的了解我们,请关注我们官网:https://xiaonuo.vip,咱们Gitee代码中不见不散!

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

Django 3.1 发布,异步支持增强

Django 3.1 已经发布。此版本亮点包括: 进一步支持异步视图与异步中间件。 要开始使用异步视图,需要声明一个视图:asyncdef async def my_view(request): await asyncio.sleep(0.5) return HttpResponse('Hello, async world!') 无论是在 WSGI 还是 ASGI 模式下运行,都支持所有异步功能。但是,在 WSGI 模式下使用异步代码会导致性能下降。Django 的 ORM、缓存层和其它长时间运行网络调用的代码尚不支持异步访问。 新增 models.JSONField 和 forms.JSONField,可在所有受支持的数据库后端上使用。这两个字段都支持使用自定义 JSON 编码器和解码器。 from django.db import models class ContactInfo(models.Model): data = models.JSONField() ContactInfo.objects.create(data={ 'name': 'John', 'cities': ['London', 'Cambridge'], 'pets': {'dogs': ['Rufus', 'Meg']}, }) ContactInfo.objects.filter( data__name='John', data__pets__has_key='dogs', data__cities__contains='London', ).delete() tokens、cookies、sessions 和 signatures 现在使用 SHA-256 哈希算法。 详情查看发布公告: https://www.djangoproject.com/weblog/2020/aug/04/django-31-released

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

使用HanLP增强Elasticsearch分词功能

hanlp-ext 插件源码地址:http://git.oschina.net/hualongdata/hanlp-ext 或 https://github.com/hualongdata/hanlp-ext Elasticsearch 默认对中文分词是按“字”进行分词的,这是肯定不能达到我们进行分词搜索的要求的。官方有一个 SmartCN 中文分词插件,另外还有一个 IK 分词插件使用也比较广。但这里,我们采用 HanLP 这款 自然语言处理工具 来进行中文分词。 ElasticsearchElasticsearch 的默认分词效果是惨不忍睹的。 GET /_analyze?pretty { "text" : ["重庆华龙网海数科技有限公司"] } 输出: { "tokens": [ { "token": "重", "start_offset": 0, "end_offset": 1, "type": "<IDEOGRAPHIC>", "position": 0 }, { "token": "庆", "start_offset": 1, "end_offset": 2, "type": "<IDEOGRAPHIC>", "position": 1 }, { "token": "华", "start_offset": 2, "end_offset": 3, "type": "<IDEOGRAPHIC>", "position": 2 }, { "token": "龙", "start_offset": 3, "end_offset": 4, "type": "<IDEOGRAPHIC>", "position": 3 }, { "token": "网", "start_offset": 4, "end_offset": 5, "type": "<IDEOGRAPHIC>", "position": 4 }, { "token": "海", "start_offset": 5, "end_offset": 6, "type": "<IDEOGRAPHIC>", "position": 5 }, { "token": "数", "start_offset": 6, "end_offset": 7, "type": "<IDEOGRAPHIC>", "position": 6 }, { "token": "科", "start_offset": 7, "end_offset": 8, "type": "<IDEOGRAPHIC>", "position": 7 }, { "token": "技", "start_offset": 8, "end_offset": 9, "type": "<IDEOGRAPHIC>", "position": 8 }, { "token": "有", "start_offset": 9, "end_offset": 10, "type": "<IDEOGRAPHIC>", "position": 9 }, { "token": "限", "start_offset": 10, "end_offset": 11, "type": "<IDEOGRAPHIC>", "position": 10 }, { "token": "公", "start_offset": 11, "end_offset": 12, "type": "<IDEOGRAPHIC>", "position": 11 }, { "token": "司", "start_offset": 12, "end_offset": 13, "type": "<IDEOGRAPHIC>", "position": 12 } ]}可以看到,默认是按字进行分词的。 elasticsearch-hanlpHanLP HanLP 是一款使用 Java 实现的优秀的,具有如下功能: 中文分词词性标注命名实体识别关键词提取自动摘要短语提取拼音转换简繁转换文本推荐依存句法分析语料库工具安装 elasticsearch-hanlp(安装见:https://github.com/hualongdata/hanlp-ext/tree/master/es-plugin)插件以后,我们再来看看分词效果。 GET /_analyze?pretty { "analyzer" : "hanlp", "text" : ["重庆华龙网海数科技有限公司"] } 输出: { "tokens": [ { "token": "重庆", "start_offset": 0, "end_offset": 2, "type": "ns", "position": 0 }, { "token": "华龙网", "start_offset": 2, "end_offset": 5, "type": "nr", "position": 1 }, { "token": "海数", "start_offset": 5, "end_offset": 7, "type": "nr", "position": 2 }, { "token": "科技", "start_offset": 7, "end_offset": 9, "type": "n", "position": 3 }, { "token": "有限公司", "start_offset": 9, "end_offset": 13, "type": "nis", "position": 4 } ]}HanLP 的功能不止简单的中文分词,有很多功能都可以集成到 Elasticsearch 中。 文章来源于羊八井的博客

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

增强型MonkeyRunner 脚本计划

前一段时间写的monkeyrunner资料 http://youxilua.blog.51cto.com/3357586/772666 功能说明: 可以自动安装apk到android模拟器或者android实机 可以截取设定好activity运行在android模拟器或者android实机上的效果图 截图根据设备名和截取时间保存 能够自动设别所有运行中的android模拟器或者android实机 能够自动安装在特定文件夹下所有的apk文件到android模拟器或者实机 功能实现: 环境配置: 设置好android /tootls 和 android /platform-tools 目录的到环境变量中,确保adb命令能够在cmd下正常运行 脚本编写: 该功能需要创建以下几个文件 componentName.txt 使用约定 每一行为需要运行的activity的完整名字 例如: kg.tom/.HandlerThreadActivity kg.monkey/.MonkeyActivity takeSnap.bat @echo off rem 获取当前运行设备 adb devices > devices.txt rem 获取APK文件 dir apk /B > apk.txt rem 运行monkeyrunner 脚本 monkeyrunner work.py xxxx 核心运行脚本: #导入我们需要用到的包和类并且起别名 import sys,time,datetime from com.android.monkeyrunner import MonkeyRunner as mr from com.android.monkeyrunner import MonkeyDevice as md from com.android.monkeyrunner import MonkeyImage as mi deviceslist = [] devices = [] snapshot = [] templist = [] f = open("devices.txt") while True: line = f.readline() if line: templist.append(line.strip()) else: break; f.close() templist.pop() for i in range(len(templist)): deviceslist.append(templist[i].split('\t')) fc = open("componentName.txt") complist = [] while True: comp = fc.readline() if comp: complist.append(comp.strip()) else: break; fc.close() fp = open("apk.txt") apklist = [] while True: apk = fp.readline() if apk: apklist.append(apk.strip()) else: break; print 'apk list :'print apklist print 'start componentName list :' print complist print 'devices list:'print deviceslist for i in range(1,len(deviceslist)): print 'current devices:' print deviceslist[i] devices.append(mr.waitForConnection(1.0,deviceslist[i][0])) #安装apk文件 for j in range(len(apklist)): devices[i-1].installPackage('apk/'+apklist[j]) #启动activity for k in range(len(complist)): print 'current start activity:' print complist[k] devices[i-1].startActivity(component=complist[k]) #设置延时秒数 mr.sleep(5.0) #---------------- #这里可进行一定的UI操作 #---------------- #mr.sleep(3.0) #进行截图 snapshot.append(devices[i-1].takeSnapshot()) print 'end snapshot' #创建时间字符串 t = time.strftime("%Y-%m-%d-%X",time.localtime()) t = t.replace(":","-") #保存截图 package = complist[k].replace('/.','.') snapshot[0].writeToFile('takeSnapshot/'+deviceslist[i][0]+'-'+t+'-'+package+'.png','png'); snapshot.pop() 由于之前毫无编写python的经验,只能写成这样了,欢迎高手补充!!!!!! 使用: 把tools文件夹里面的全部文件,同样放在android sdk tools 文件夹下即可,运行takeSnap.bat就可以获取到多个设备运行时的截图了,这个期间…你可以选择去泡一杯咖啡…耗时情况…看你要测试几个设备,还有如何测试了…… 效果图: 三个虚拟机,在一台实机,测试两个apk在这些设备的运行境况 以下为全部截图文件: 以后可能会更新的部分和改善的地方 1,支持从外部读取monkeyrunner 脚本进行多设备运行…其实..现在这个也可以…只是没写上 2,同一样设备的截图放置在一样设备名的文件,(这个…其实补充起来也很快…不过,要做完善就要判断设备名与创建文件名是否合法等等,不过…我感觉,将所有截图放到一个文件夹下更方便用来比较,就没写了,有兴趣的自行补充…同时,也顺便贴到这里来吧…) 3,由于,本人的脚步编写功底实在是烂,不知道如何在运行环境中设置环境变量,就不得已要在android sdk tools目录 下运行,如果,觉得这个脚步还可以,希望帮忙完善,能够达到在任意目录下… 4,当设备是离线状态无法判断,不过,在以上的脚本中已经实现了获取设备的状态,只是,很少,碰到就懒得补充了…. 5,如果,出现无法连接设备…那么请再运行一遍…如果…还不行…就重启吧…这跟脚本没关系吧…貌似…就是有这种问题… 6,最后,附上下载地址: 本文转自 liam2199 博客,原文链接: http://blog.51cto.com/youxilua/772652 如需转载请自行联系原作者

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

【20160924】GOCVHelper 图像增强部分(3)

//顶帽去光差,radius为模板半径 MatmoveLightDiff(Matsrc,intradius){ Matdst; Matsrcclone=src.clone(); Matmask=Mat::zeros(radius*2,radius*2,CV_8U); circle(mask,Point(radius,radius),radius,Scalar(255),-1); //顶帽 erode(srcclone,srcclone,mask); dilate(srcclone,srcclone,mask); dst=src-srcclone; returndst; } 算法来自于冈萨雷斯《数字图像处理教程》形态学篇章。完全按照教程实现,具备一定作用。 //将DEPTH_8U型二值图像进行细化经典的Zhang并行快速细化算法 //细化算法 voidthin(constMat&src,Mat&dst,constintiterations){ constintheight=src.rows-1; constintwidth=src.cols-1; //拷贝一个数组给另一个数组 if(src.data!=dst.data) src.copyTo(dst); intn=0,i=0,j=0; MattmpImg; uchar*pU,*pC,*pD; boolisFinished=FALSE; for(n=0;n<iterations;n++){ dst.copyTo(tmpImg); isFinished=FALSE;//一次先行后列扫描开始 //扫描过程一开始 for(i=1;i<height;i++){ pU=tmpImg.ptr<uchar>(i-1); pC=tmpImg.ptr<uchar>(i); pD=tmpImg.ptr<uchar>(i+1); for(intj=1;j<width;j++){ if(pC[j]>0){ intap=0; intp2=(pU[j]>0); intp3=(pU[j+1]>0); if(p2==0&&p3==1) ap++; intp4=(pC[j+1]>0); if(p3==0&&p4==1) ap++; intp5=(pD[j+1]>0); if(p4==0&&p5==1) ap++; intp6=(pD[j]>0); if(p5==0&&p6==1) ap++; intp7=(pD[j-1]>0); if(p6==0&&p7==1) ap++; intp8=(pC[j-1]>0); if(p7==0&&p8==1) ap++; intp9=(pU[j-1]>0); if(p8==0&&p9==1) ap++; if(p9==0&&p2==1) ap++; if((p2+p3+p4+p5+p6+p7+p8+p9)>1&&(p2+p3+p4+p5+p6+p7+p8+p9)<7){ if(ap==1){ if((p2*p4*p6==0)&&(p4*p6*p8==0)){ dst.ptr<uchar>(i)[j]=0; isFinished=TRUE; } } } } }//扫描过程一结束 dst.copyTo(tmpImg); //扫描过程二开始 for(i=1;i<height;i++){ pU=tmpImg.ptr<uchar>(i-1); pC=tmpImg.ptr<uchar>(i); pD=tmpImg.ptr<uchar>(i+1); for(intj=1;j<width;j++){ if(pC[j]>0){ intap=0; intp2=(pU[j]>0); intp3=(pU[j+1]>0); if(p2==0&&p3==1) ap++; intp4=(pC[j+1]>0); if(p3==0&&p4==1) ap++; intp5=(pD[j+1]>0); if(p4==0&&p5==1) ap++; intp6=(pD[j]>0); if(p5==0&&p6==1) ap++; intp7=(pD[j-1]>0); if(p6==0&&p7==1) ap++; intp8=(pC[j-1]>0); if(p7==0&&p8==1) ap++; intp9=(pU[j-1]>0); if(p8==0&&p9==1) ap++; if(p9==0&&p2==1) ap++; if((p2+p3+p4+p5+p6+p7+p8+p9)>1&&(p2+p3+p4+p5+p6+p7+p8+p9)<7){ if(ap==1){ if((p2*p4*p8==0)&&(p2*p6*p8==0)){ dst.ptr<uchar>(i)[j]=0; isFinished=TRUE; } } } } } }//一次先行后列扫描完成 //如果在扫描过程中没有删除点,则提前退出 if(isFinished==FALSE) break; } } } #endofthin 细化算法,在处理毛笔字一类的时候效果很好。使用的过程中,注意需要保留的部分要处理为白色,也就是scalar(255) 来自为知笔记(Wiz) 目前方向:图像拼接融合、图像识别 联系方式:jsxyhelu@foxmail.com

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

【20160924】GOCVHelper MFC增强算法(2)

//创建或续写目录下的csv文件,填写“文件位置-分类”对 intwriteCsv(conststring&filename,constVector<pair<string,string>>srcVect,charseparator){ ofstreamfile(filename.c_str(),ofstream::app); if(!file) return0; for(inti=0;i<srcVect.size();i++){ file<<srcVect[i].first<<separator<<srcVect[i].second<<endl; } returnsrcVect.size(); } //读取目录下的csv文件,获得“文件位置-分类”对 vector<pair<string,string>>readCsv(conststring&filename,charseparator){ pair<string,string>apair; stringline,path,classlabel; vector<pair<string,string>>retVect; ifstreamfile(filename.c_str(),ifstream::in); if(!file) returnretVect; while(getline(file,line)){ stringstreamliness(line); getline(liness,path,separator); getline(liness,classlabel); if(!path.empty()&&!classlabel.empty()){ apair.first=path; apair.second=classlabel; retVect.push_back(apair); } } returnretVect; } csv文件是最为简单的带格式文件。这种格式在opencv的人脸识别教程中得到了使用,这里是扣的它的代码。 //获得ini文件中的值 CStringGetInitString(CStringName1,CStringName2){ charc[100]; memset(c,0,100); CStringcsCfgFilePath; GetModuleFileName(NULL,csCfgFilePath.GetBufferSetLength(MAX_PATH+1),MAX_PATH); csCfgFilePath.ReleaseBuffer(); intnPos=csCfgFilePath.ReverseFind('\\'); csCfgFilePath=csCfgFilePath.Left(nPos); csCfgFilePath+="\\Config"; BOOLbr=GetPrivateProfileString(Name1,Name2,"0",c,100,csCfgFilePath); CStringrstr; rstr.Format("%s",c); returnrstr; } //写入ini问价中的值 voidWriteInitString(CStringName1,CStringName2,CStringstrvalue){ CStringcsCfgFilePath; GetModuleFileName(NULL,csCfgFilePath.GetBufferSetLength(MAX_PATH+1),MAX_PATH); csCfgFilePath.ReleaseBuffer(); intnPos=csCfgFilePath.ReverseFind('\\'); csCfgFilePath=csCfgFilePath.Left(nPos); csCfgFilePath+="\\Config"; BOOLbr=WritePrivateProfileString(Name1,Name2,strvalue,csCfgFilePath); if(!br) TRACE("savewrong"); } 这两个函数主要是用来保存和修改配置文件的。通过直接将配置文件写入.ini中达到这个目标。 来自为知笔记(Wiz) 目前方向:图像拼接融合、图像识别 联系方式:jsxyhelu@foxmail.com

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

【20160924】GOCVHelper 图像增强部分(2)

//填充孔洞 //fillholes MatfillHoles(Matsrc){ Matdst=getInnerHoles(src); threshold(dst,dst,0,255,THRESH_BINARY_INV); dst=src+dst; returndst; } //获得图像中白色的比率 floatgetWhiteRate(Matsrc){ intiWhiteSum=0; for(intx=0;x<src.rows;x++){ for(inty=0;y<src.cols;y++){ if(src.at<uchar>(x,y)!=0) iWhiteSum=iWhiteSum+1; } } return(float)iWhiteSum/(float)(src.rows*src.cols); } //获得内部孔洞图像 MatgetInnerHoles(Matsrc){ Matclone=src.clone(); srand((unsigned)time(NULL));//生成时间种子 floatfPreRate=getWhiteRate(clone); floatfAftRate=0; do{ clone=src.clone(); //xy对于colsrows floodFill(clone,Point((int)rand()%src.cols,(int)rand()%src.rows),Scalar(255)); fAftRate=getWhiteRate(clone); }while(fAftRate<0.6); returnclone; } //endoffillHoles 填充孔洞算法是我参考相关资料自己实现的。填充孔洞的关键在于获得“内部孔洞图像”。我采用的方法是在图像上随机寻找一个点作为floodfill的初始点,然后以scalar(255)来进行填充。重复这个过程,直到整个图片的白色值占到了全部图像的60%. 填充前 填充后 来自为知笔记(Wiz) 目前方向:图像拼接融合、图像识别 联系方式:jsxyhelu@foxmail.com

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

【20160924】GOCVHelper MFC增强算法(3)

//获得当前目录路径 staticCStringGetLocalPath(){ CStringcsCfgFilePath; GetModuleFileName(NULL,csCfgFilePath.GetBufferSetLength(MAX_PATH+1),MAX_PATH); csCfgFilePath.ReleaseBuffer(); intnPos=csCfgFilePath.ReverseFind('\\'); csCfgFilePath=csCfgFilePath.Left(nPos); returncsCfgFilePath; } //获得.exe路径 staticCStringGetExePath() { CStringstrPath; GetModuleFileName(NULL,strPath.GetBufferSetLength(MAX_PATH+1),MAX_PATH); strPath.ReleaseBuffer(); returnstrPath; } MFC程序涉及的时候存在一个问题,就是某些操作会修改自动"当前路径"的值。这两个函数能够获得当前的路径。 //开机自动运行 staticBOOLSetAutoRun(CStringstrPath,boolflag) { CStringstr; HKEYhRegKey; BOOLbResult; str=_T("Software\\Microsoft\\Windows\\CurrentVersion\\Run"); if(RegOpenKey(HKEY_LOCAL_MACHINE,str,&hRegKey)!=ERROR_SUCCESS) bResult=FALSE; else { _splitpath(strPath.GetBuffer(0),NULL,NULL,str.GetBufferSetLength(MAX_PATH+1),NULL); strPath.ReleaseBuffer(); str.ReleaseBuffer();//str是键的名字 if(flag){ if(::RegSetValueEx(hRegKey,str,0,REG_SZ,(CONSTBYTE*)strPath.GetBuffer(0),strPath.GetLength())!=ERROR_SUCCESS) bResult=FALSE; else bResult=TRUE; }else{ if(::RegDeleteValue(hRegKey,str)!=ERROR_SUCCESS) bResult=FALSE; else bResult=TRUE; } strPath.ReleaseBuffer(); } returnbResult; } 这个无需更多说明。 来自为知笔记(Wiz) 目前方向:图像拼接融合、图像识别 联系方式:jsxyhelu@foxmail.com

资源下载

更多资源
腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Spring

Spring

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

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

Sublime Text

Sublime Text

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

用户登录
用户注册