首页 文章 精选 留言 我的

精选列表

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

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

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

增强型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增强算法(5)

CStringExportListToExcel(CStringsExcelFile,CListCtrl*pList,CStringstrTitle) { CStringwarningStr; if(pList->GetItemCount()>0){ CDatabasedatabase; CStringsSql; CStringtableName=strTitle; //检索是否安装有Excel驱动"MicrosoftExcelDriver(*.xls)" CStringsDriver; sDriver=GetExcelDriver(); if(sDriver.IsEmpty()) { //没有发现Excel驱动 AfxMessageBox("没有安装Excel!\n请先安装Excel软件才能使用导出功能!"); returnNULL; } ///默认文件名 /*CStringsExcelFile; if(!GetDefaultXlsFileName(sExcelFile)) returnNULL;*/ //创建进行存取的字符串 sSql.Format("DRIVER={%s};DSN='';FIRSTROWHASNAMES=1;READONLY=FALSE;CREATE_DB=\"%s\";DBQ=%s",sDriver,sExcelFile,sExcelFile); //创建数据库(既Excel表格文件) if(database.OpenEx(sSql,CDatabase::noOdbcDialog)) { //创建表结构 inti; LVCOLUMNcolumnData; CStringcolumnName; intcolumnNum=0; CStringstrH; CStringstrV; sSql=""; strH=""; columnData.mask=LVCF_TEXT; columnData.cchTextMax=100; columnData.pszText=columnName.GetBuffer(100); for(i=0;pList->GetColumn(i,&columnData);i++) { if(i!=0) { sSql=sSql+","; strH=strH+","; } sSql=sSql+""+columnData.pszText+"TEXT"; strH=strH+""+columnData.pszText+""; } columnName.ReleaseBuffer(); columnNum=i; sSql="CREATETABLE"+tableName+"("+sSql+")"; database.ExecuteSQL(sSql); //插入数据项 intnItemIndex; for(nItemIndex=0;nItemIndex<pList->GetItemCount();nItemIndex++){ strV=""; for(i=0;i<columnNum;i++) { if(i!=0) { strV=strV+","; } strV=strV+"'"+pList->GetItemText(nItemIndex,i)+"'"; } sSql="INSERTINTO"+tableName +"("+strH+")" +"VALUES("+strV+")"; database.ExecuteSQL(sSql); } } //关闭数据库 database.Close(); returnsExcelFile; } } 图像处理生成了结果,如果需要保存为报表文件,或者想进一步存入数据库中,Excel都是非常好的选择。在这里集成了vc知识库中提供的代码。版权为 ////////////////////////////////////////////////////////////////////////////// //名称:GetExcelDriver //功能:获取ODBC中Excel驱动 //作者:徐景周(jingzhou_xu@163.net) //组织:未来工作室(FutureStudio) //日期:2002.9.1 ///////////////////////////////////////////////////////////////////////////// 使用的时候,只需要将生成的结果填入 CListCtrl 控件中,而后直接到处就可以。也就是把excel输出的问题变成了向 CListCtrl 控件输出的问题。同时代码中还提供了能够直接写到两个sheet中的方法,可供参考 来自为知笔记(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文件系统,支持十年生命周期更新。

WebStorm

WebStorm

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

用户登录
用户注册