程式碼檢測工具箱——checkstyle、findbugs、pmd-cpd
寫在前面
好吧,我承認,我懶了,寫了一天文件,到這裡直接貼上了,希望大家能看懂,如果需要一份格式完整的文件,請去我的百度文庫下載,地址是:
下面,開始
一.目的:
最近要跟蹤一個專案的程式碼質量,保障專案質量。個人總是認為,質量保障這個東西要用資料說話的。程式碼走查是一個方面,但要能使用工具完成部分標準化的程式碼走查,發現部分錯誤,也不失為一種不錯的補充手段。結合之前自己用過、聽過的幾種開源工具,整合到一起,實現一個適合目前專案的簡單工具。
二.取捨:
首先是工具的選擇,經過多個工具的使用結合目前專案組成員的水平和狀態,決定從幾個方面進行檢查:
常規bug
編碼規範
重複程式碼
不想檢查太多,以前沒有開展過這方面的工作,領導是否支援,專案成員反響是否良好都很難說,如果大家都喜歡再完善更多的檢查也不晚。
其實還差一個依賴的檢測,但現在專案使用的是ssh的架構,現有依賴檢查的工具中,對spring的支援都不是很好,遂放棄。
對於工具的選擇,緊著自己熟悉的就選擇了checkstyle、findbugs和pmd的cpd工具。
三.期望結果:
使用ant指令碼,一步完成所有工作,針對專案直接產生檢查報告。
四.步驟:
1.準備工具
ant、checkstyle、findbugs、pmd下載。還要下載cvs和eclipse,因為指令碼中需要使用cvs更新程式碼,eclipse會讓ant指令碼的編輯和環境配置更加簡單。
2.指令碼規劃
規劃指令碼,整個指令碼分為幾個部分,如下:
<?xml version="1.0" encoding="utf-8"?> <project name="myProject" default="start" > <!-- 變數定義 --> <!-- 環境初始化 --> <!-- checkout --> <!-- javac --> <!-- jar --> <!-- checkstyle --> <!-- findbugs --> <!-- pmd cpd --> <!-- run --> <target name="start"> </target> </project> |
整個指令碼規劃描述了指令碼執行的過程,每個註釋都將新增具體的內容。系統執行start任務,這個任務通過依賴呼叫其他任務,任務間通過依賴定義過程。
l 首先“變數定義”中定義變數,便於將來多個專案複用。
l “環境初始化”中初始化環境,所有環境清理和環境建立都在這裡完成。
l “checkout”完成cvs的更新工作。
l 由於findbugs需要檢查二進位制程式碼,“javac”完成程式碼編譯工作。
l 同樣為findbugs需要,“jar”將程式碼打包。
l “checkstyle”完成程式碼拼寫檢查。
l “findbugs”完成bug檢查
l “pmd cpd”使用pmd的cpd功能檢查重複程式碼。
3.checkout
變數定義和環境初始化部分,在需要時隨時新增,首先是checkout過程,將程式碼檢出cvs庫。
3.1指令碼編寫
checkout部分指令碼如下:
<target name="checkoutlib" depends="mkDir"> <cvs cvsroot="${cvsroot}" package="WorkingArea/Code/lib" /> </target> <target name="checkoutsrc" depends="checkoutlib"> <cvs cvsroot="${cvsroot}" package="WorkingArea/Code/project" /> </target> |
checkoutlib檢出公共庫,checkoutsrc檢出程式碼,同時在變數定義部分定義cvsroot變數,如下:
<property name="cvsroot" value=":pserver:wangjianxuan:[email protected]:/repository/project" /> |
其中文字部分與我們常用的cvs寫法相同,可以參考eclipse中的cvs檢視的部分。
注意:上面指令碼中依賴的mkDir任務是初始化部分的,為了建立相關的目錄,後面有詳細描述。
3.2執行
eclipse中執行ant就是有這點好,缺少什麼不用去修改環境變數,eclipse內部就解決了。執行前有幾個地方需要確認:
指令碼上點右鍵-》Run As-》Ant Build…
注意,一定是帶有省略號的選單,這個選單才能配置環境,開啟介面如下圖:
這裡Targets可以選擇要執行的任務,執行時會連依賴的任務一起執行。ClassPath定義依賴的類庫,JRE用來定義JRE的版本,Environment標籤很重要,可以定義一些環境變數中未定義的變數,這裡我因為一直沒有找到cvs路徑,但命令列中能夠找到cvs,所以把Path環境變數複製定義到這裡了,如下圖:
指令碼執行後,會將程式碼檢出到工程目錄下的“WorkingArea/Code/project”位置。
注意:環境變數和類路徑等內容的設定在更改ant指令碼名稱後會丟失,需要重新設定。
3.3問題處理
ant呼叫cvs網上文章較少,問題的處理就更少了,也許是太簡單了吧,但我還是碰到了一些問題。
首先,如果path路徑中沒有增加cvs路徑,或者你沒有安裝cvs(windows系統需要安裝cvsnt),找不到cvs路徑,將報錯。所以保證命令列中任意路徑下呼叫“cvs”命令可以成功,如果還報錯,可以將“path”環境變數增加到eclipse中。
另外,按照ant的cvs任務說明,cvs密碼應該使用cvspass任務生成cvspass檔案,在cvs任務中使用cvspass標籤呼叫這個檔案。但是,我在eclipse中這麼做不會產生檔案,同時cvs checkout會報告訪問被拒絕(很明白,沒密碼)。處理辦法就是將密碼加在cvsroot屬性中,在使用者名稱後,“@”符號前增加“:密碼”即可。
4. javac
javac任務將剛剛檢出的程式碼進行編譯,編譯後的程式碼放到bin目錄下。
4.1指令碼
javac部分的指令碼如下:
<target name="javac" depends="checkoutsrc"> <javac srcdir="${srcdir}" destdir="${builddir}" source="1.6"> <compilerarg value="-Xlint:unchecked" /> </javac> </target> |
其中,depends指定剛剛檢出指令碼,使指令碼執行時先執行檢出才會執行編譯。source指定編譯時使用的jdk版本,這裡指定了1.6版本。由於程式碼編譯需要,指定了一個編譯引數“-Xlint:unchecked”,根據實際情況,可指定任何引數,可多次使用,與命令列編譯對應。
在變數定義部分定義了兩個變數:“srcdir”指定原始碼路徑;“builddir”指定編譯後代碼路徑。指令碼如下:
<property name="projdir" value="D:/work/quality_workspace/AntScript" /> <property name="srcdir" value="${projdir}/WorkingArea/Code/cginfo/src/main" /> <property name="builddir" value="${projdir}/WorkingArea/Code/cginfo/bin" /> |
srcdir和builddir變數共同以當前專案目錄為基礎,所以,又定義了一個變數“projdir”宣告專案目錄。
4.2執行
簡單執行javac指令碼可能會出現問題,需要使classpath包含類路徑。同樣,指令碼上右鍵-》Run As-》Ant Build…開啟視窗中選擇Classpath頁籤,如下:
這裡要注意,
1. 只有選擇“User Entries”節點時,新增jar包的按鈕才有效。
2. 不知道是不是我使用的問題,Add Folders新增目錄後,並不能把目錄下所有jar包都新增到類路徑來,只能將所有jar包攤在這裡。
編譯後就是打包了,見下節。
5.jar
與javac同樣,由於findbugs的需要,將javac編譯後的程式碼打包
5.1指令碼
<target name="jar" depends="javac"> <jar destfile="${packagedir}/app.jar" basedir="${builddir}" /> </target> |
指令碼destfile指定了編譯後的jar包路徑和檔名,basedir指定原始碼的路徑。
這裡在變數定義部分定義了變數packagedir用於指定jar包的路徑,指令碼如下:
<property name="package" value="WorkingArea/Code/commonMakeManage"/> |
執行後會在destfile位置找到打好的jar包。
6.checkstyle
終於進入正題了,準備工作完成,可以開始檢查了,首先是checkstyle檢查並且生成報告。
6.1指令碼
檢查指令碼如下:
<target name="checkstyle" depends="jar"> <taskdef resource="checkstyletask.properties" /> <checkstyle config="lib/check_rules.xml"> <formatter type="xml" tofile="${checkstyledir}/checkstyle_report.xml" /> <fileset dir="${srcdir}" includes="**/*.java" /> </checkstyle> <style in="${checkstyledir}/checkstyle_report.xml" out="${checkstyledir}/checkstyle_report.html" style="lib/checkstyle-frames.xsl" /> </target> |
指令碼有點長,逐個解說:
首先,taskdef定義了checkstyle的ant task,以及聲明瞭屬性檔案,這就需要ant的類路徑中有checkstyle的jar包,這裡我用的是checkstyle-5.4-all.jar。
下面,checkstyle定義了檢查的各方面,“config”定義了檢查規則,規則可以自定義編寫,隨後說明。
formatter子元素定義了輸出格式以及輸出檔案的位置,這裡定義了xml格式,同時定義了“checkstyledir”變數,代表checkstyle報告目錄。後面說明具體變數定義。
fileset子元素定義了原始碼位置,dir指定了原始碼目錄,includes指定檔案型別,也可以使用excludes排除一些檔案,詳見checkstyle文件。
執行後生成xml報告檔案,使用style標籤結合checkstyle中自帶的xsl檔案將xml生成html,便於檢視,checkstyle自帶了很多xsl檔案,多嘗試一下,看看哪個適合。
注意:這裡使用的是框架樣式,生成的html,生成後有時會在“${checkstyledir}”的同級目錄生成files目錄,目錄中包含部分檢查結果。
6.2變數定義
指令碼如下:
<property name="checkstyledir" value="${projdir}/checkstyle" /> |
6.3環境初始化指令碼
由於每次檢查程式碼前要將之前的檢查結果刪除,保證結果是最新的。同時要保證檔案目錄存在,否則寫報告時報錯。所以有如下指令碼:
<target name="delDir"> <delete dir="${builddir}" /> <delete dir="${checkstyledir}" /> <delete dir="${findbugsdir}" /> <delete dir="${cpddir}" /> </target> <target name="mkDir" depends="delDir"> <mkdir dir="${builddir}" /> <mkdir dir="${checkstyledir}" /> <mkdir dir="${findbugsdir}" /> <mkdir dir="${cpddir}" /> </target> |
這裡將所有需要刪除和建立的指令碼都寫出來了,包括編譯的目錄builddir;程式碼檢查結果目錄checkstyledir;bug檢查結果目錄findbugsdir以及程式碼重複檢查目錄cpddir。
6.3執行
指令碼執行後會在checkstyledir目錄下建立checkstyle_report.xml和checkstyle_report.html檔案
6.4自定義規則
checkstyle規則可以自定義,詳細規則可以參考checkstyle文件,這裡我只需要檢查很少的規則,從checkstyle規則中刪除不必要的規則,保留一部分需要的即可。規則如下:
<?xml version="1.0"?> <!DOCTYPE module PUBLIC "-//Puppy Crawl//DTD Check Configuration 1.3//EN" "http://www.puppycrawl.com/dtds/configuration_1_3.dtd"> <!-- Checkstyle configuration that checks the sun coding conventions from: - the Java Language Specification at http://java.sun.com/docs/books/jls/second_edition/html/index.html - the Sun Code Conventions at http://java.sun.com/docs/codeconv/ - the Javadoc guidelines at http://java.sun.com/j2se/javadoc/writingdoccomments/index.html - the JDK Api documentation http://java.sun.com/j2se/docs/api/index.html - some best practices Checkstyle is very configurable. Be sure to read the documentation at http://checkstyle.sf.net (or in your downloaded distribution). Most Checks are configurable, be sure to consult the documentation. To completely disable a check, just comment it out or delete it from the file. Finally, it is worth reading the documentation. --> <module name="Checker"> <!-- If you set the basedir property below, then all reported file names will be relative to the specified directory. See http://checkstyle.sourceforge.net/5.x/config.html#Checker <property name="basedir" value="${basedir}"/> --> <!-- Checks that property files contain the same keys. --> <!-- See http://checkstyle.sf.net/config_misc.html#Translation --> <module name="Translation"/> <module name="TreeWalker"> <!-- Checks for Javadoc comments. --> <!-- See http://checkstyle.sf.net/config_javadoc.html --> <module name="JavadocMethod"/> <module name="JavadocType"/> <module name="JavadocVariable"/> <!-- Checks for Naming Conventions. --> <!-- See http://checkstyle.sf.net/config_naming.html --> <module name="ConstantName"/> <module name="LocalFinalVariableName"/> <module name="LocalVariableName"/> <module name="MemberName"/> <module name="MethodName"/> <module name="PackageName"/> <module name="ParameterName"/> <module name="StaticVariableName"/> <module name="TypeName"/> <!-- Checks for Headers --> <!-- See http://checkstyle.sf.net/config_header.html --> <!-- <module name="Header"> --> <!-- The follow property value demonstrates the ability --> <!-- to have access to ANT properties. In this case it uses --> <!-- the ${basedir} property to allow Checkstyle to be run --> <!-- from any directory within a project. See property --> <!-- expansion, --> <!-- http://checkstyle.sf.net/config.html#properties --> <!-- <property --> <!-- name="headerFile" --> <!-- value="${basedir}/java.header"/> --> <!-- </module> --> <!-- Following interprets the header file as regular expressions. --> <!-- <module name="RegexpHeader"/> --> <!-- Checks for imports --> <!-- See http://checkstyle.sf.net/config_import.html --> <module name="AvoidStarImport"/> <module name="IllegalImport"/> <!-- defaults to sun.* packages --> <module name="RedundantImport"/> <module name="UnusedImports"/> <!-- Checks for common coding problems --> <!-- See http://checkstyle.sf.net/config_coding.html --> <module name="SimplifyBooleanExpression"/> <module name="SimplifyBooleanReturn"/> </module> </module> |
7.findbugs
使用findbugs檢查常見bug
7.1指令碼
指令碼如下:
<target name="findbugs" depends="checkstyle"> <taskdef name="findbugs" classname="edu.umd.cs.findbugs.anttask.FindBugsTask" /> <findbugs home="${findbugs.home}" output="html" outputFile="${findbugsdir}/findbugs_report.html"> <sourcePath path="${srcdir}" /> <class location="${projdir}/WorkingArea/Code/cginfo/app.jar" /> </findbugs> </target> |
同樣,taskdef定義了findbugs的ant task,需要classpath中增加findbugs的jar包。一個findbugs-ant.jar基本就夠了。
findbugs標籤,home指定findbug安裝目錄。
output定義輸出樣式,一般輸出html形式,xml形式也可,但xml形式再用樣式轉html總是顯示不了bug,沒仔細查問題發生在哪裡。
outputFile指定報告的路徑和檔名。
sourcePath指定原始碼目錄
class指定jar包的目錄和檔名。
7.2執行
執行後檢視報告即可。但findbugs生成的報告與findbugs eclipse外掛檢查的結果有些出入,沒有檢視具體問題發生在哪裡。
8.cpd
cpd是pmd的一個元件,用來檢查重複程式碼。
8.1指令碼
指令碼如下:
<target name="pmdcpd" depends="findbugs"> <taskdef name="cpd" classname="net.sourceforge.pmd.cpd.CPDTask" /> <cpd minimumTokenCount="100" encoding="UTF-8" format="xml" outputFile="${cpddir}/cpd.xml"> <fileset dir="${srcdir}"> <include name="**/*.java" /> </fileset> </cpd> </target> |
taskdef定義了cpd的ant任務,這與pmd任務是分開的。classpath中需要增加pmd解壓目錄的lib目錄下的所有jar包。
cpd標籤的minimumTokenCount指定了最小重複行數,當重複函式大於這個量時產生報告。
encoding指定檔案編碼。
format指定輸出檔案格式。
outputFile指定輸出檔案路徑和檔名稱。
include指定檢查的檔案。可以使用exclude指定剔除的檔案。
8.2執行
執行後檢視輸出檔案,雖然是xml格式,但使用IE開啟很容易檢視,由於只能使用xslt結合xml形式生成html,且初步試驗,生成html檔案有點問題,就放棄了。
9.完整指令碼
完整指令碼如下:
<?xml version="1.0" encoding="utf-8"?> <project name="myProject" default="start"> <!-- 變數定義 --> <property name="cvsroot" value=":pserver:wangjianxuan:[email protected]:/repository/opermanage" /> <property name="projdir" value="D:/work/quality_workspace/AntScript" /> <property name="srcdir" value="${projdir}/WorkingArea/Code/cginfo/src/main" /> <property name="builddir" value="${projdir}/WorkingArea/Code/cginfo/bin" /> <property name="checkstyledir" value="${projdir}/checkstyle" /> <property name="findbugsdir" value="${projdir}/findbugs" /> <property name="findbugs.home" value="D:/work/quality_workspace/findbugs-1.3.9" /> <property name="cpddir" value="${projdir}/cpd" /> <!-- init --> <target name="delDir"> <delete dir="${builddir}" /> <delete dir="${checkstyledir}" /> <delete dir="${findbugsdir}" /> <delete dir="${cpddir}" /> </target> <target name="mkDir" depends="delDir"> <mkdir dir="${builddir}" /> <mkdir dir="${checkstyledir}" /> <mkdir dir="${findbugsdir}" /> <mkdir dir="${cpddir}" /> </target> <!-- checkout --> <target name="checkoutlib" depends="mkDir"> <cvs cvsroot="${cvsroot}" package="WorkingArea/Code/lib" /> </target> <target name="checkoutsrc" depends="checkoutlib"> <cvs cvsroot="${cvsroot}" package="WorkingArea/Code/cginfo" /> </target> <!-- javac --> <target name="javac" depends="checkoutsrc"> <javac srcdir="${srcdir}" destdir="${builddir}" source="1.6"> <compilerarg value="-Xlint:unchecked" /> </javac> </target> <!-- jar --> <target name="jar" depends="javac"> <jar destfile="${projdir}/WorkingArea/Code/cginfo/app.jar" basedir="${builddir}" /> </target> <!-- checkstyle --> <target name="checkstyle" depends="jar"> <taskdef resource="checkstyletask.properties" /> <checkstyle config="lib/check_rules.xml" failureProperty="checkstyle.failure" failOnViolation="false"> <formatter type="xml" tofile="checkstyle/checkstyle_report.xml" /> <fileset dir="${srcdir}" includes="**/*.java" /> </checkstyle> <style in="checkstyle/checkstyle_report.xml" out="checkstyle/checkstyle_report.html" style="lib/checkstyle-frames.xsl" /> </target> <!-- findbugs --> <target name="findbugs" depends="checkstyle"> <taskdef name="findbugs" classname="edu.umd.cs.findbugs.anttask.FindBugsTask" /> <findbugs home="${findbugs.home}" output="html" outputFile="${findbugsdir}/findbugs_report.html"> <sourcePath path="${srcdir}" /> <class location="${projdir}/WorkingArea/Code/cginfo/app.jar" /> </findbugs> </target> <!-- pmd cpd --> <target name="pmdcpd" depends="findbugs"> <taskdef name="cpd" classname="net.sourceforge.pmd.cpd.CPDTask" /> <cpd minimumTokenCount="100" encoding="UTF-8" format="xml" outputFile="${cpddir}/cpd.xml"> <fileset dir="${srcdir}"> <include name="**/*.java" /> </fileset> </cpd> </target> <!-- run --> <target name="start" depends="pmdcpd"> </target> </project> |
相關推薦
程式碼檢測工具箱——checkstyle、findbugs、pmd-cpd
寫在前面 好吧,我承認,我懶了,寫了一天文件,到這裡直接貼上了,希望大家能看懂,如果需要一份格式完整的文件,請去我的百度文庫下載,地址是: 下面,開始 一.目的: 最近要跟蹤一個專案的程式碼質量,保障專案質量。個人總是認為,質量保障這個東西要用資料說話的。程
idea,配置checkstyle 【提高程式碼質量,檢查程式碼規範的工具 】Checkstyle,FindBugs,PMD,Jtest
idea,配置checkstyle 【提高程式碼質量,檢查程式碼規範的工具 】Checkstyle,FindBugs,PMD,Jtest 2016年12月15日 14:19:02 common_util 閱讀數:18818更多 個人分類: 開發 版權宣告:本文為博主原創文章,可以轉載分
主流Java靜態檢查工具checkstyle,findbugs,PMD異同點
工作之中遇到了JAVA靜態檢查相關內容,在此以作總結。 目錄 靜態檢查概念 靜態檢查理論基礎和應用技術 主流Java靜態分析工具 三者區別 三者內建程式設計規範 簡單對比 總結 靜態檢查概念 靜態程式碼分析是指無需執行被測程式碼,僅通過分析或檢查源程式的語法
Intellij IDEA 使用checkstyle、pmd、findbugs檢查靜態程式碼質量
checkstye、pmd、findbugs的對比 在IDEA setting-plugins 下分別搜尋 checkstyle、pmd、findbugs 安裝,安裝後要重啟IDEA。 checkstyle 如上圖開啟checkstyle面板。 可以自己設
Findbugs、PMD、CheckStyles程式碼分析工具介紹
FindBugs、PMD和CheckStyle對比 1. 概要 工具 目的 檢查項 FindBugs 檢查.class 基於Bug Pattern
IDEAL葵花寶典:java程式碼開發規範外掛 checkstyle、visualVM、PMD 外掛
前言: visualVM: 執行java程式的時候啟動visualvm,方便檢視jvm的情況 比如堆記憶體大小的分配;某個物件佔用了多大的記憶體,jvm調優必備工具。 checkstyle: CheckStyle是SourceForge下的一個專案,提供了一個幫助JAVA開發人員遵守某些編碼規範的工具。
FindBugs、PMD和CheckStyle對比
FindBugs、PMD和CheckStyle對比 1. 概要 工具 目的 檢查項 FindBugs 檢查.class 基於Bug Pattern
MyEclipse2014 安裝 checkstyle、PMD、findbugs 最簡便
近期由於實驗要求進行程式碼評審和程式效能優化,需要在MyEclipse下安裝一些外掛,但是因為現在的MyEclipse版本和大多數教程的不一樣了,一些安裝選項也已經改變,所以安裝起來很費事,通過不斷的嘗試,參考和剁教程並且自己實踐的基礎上,整理了一下關於checksty
如何更好地利用Pmd、Findbugs和CheckStyle分析結果
這裡列出了很多Java靜態分析工具,每一種工具關注一個特定的能發揮自己特長的領域,我們可以列舉一下: 工具 目的 檢查項 FindBugs 檢查.class 基於Bug Patterns概念,查詢javabytecode(.class檔案)中
Java程式碼靜態檢查、規範、格式化和checkstyle檢查配置文件
<?xml version="1.0"?> <!DOCTYPE module PUBLIC "-//Puppy Crawl//DTD Check Configuration 1.2//EN" "http://www.puppycrawl.co
Jenkins+maven+git 實現自動構建、許可權管理、靜態程式碼檢測、遠端部署、傳送郵件功能
Jenkins配置 1. 使用者許可權設定 配置->Configure Global Security (注:想讓匿名使用者可以瀏覽jenkins網站 需勾選Overall 中的read 和 Job
阿里p3c是CheckStyle、FindBugs的補充
高階黑: P3C是老美的先進反潛偵察機,新聞裡經常能看到; 阿里將程式碼規範檢查外掛命名為p3c,大概就是取其先進、監測的意思吧。 阿里雲棲大會最新開源的Java程式碼規範檢查工具p3c, 作用類似於CheckStyle, 是《阿里巴巴Jav
【特徵工程】一種異常值檢測方法、原理、程式碼實現 (基於箱線圖)
先介紹使用到的方法原理,也就是一種異常檢測的方法。 首先要先了解箱線圖。 箱線圖 箱線圖(Boxplot)也稱箱須圖(Box-whisker Plot),是利用資料中的五個統計量:最小值、第一四分位數、中位數、第三四分位數與最大值來描述資料的一種方法,它也可以
影象特徵檢測描述(一):SIFT、SURF、ORB、HOG、LBP特徵的原理概述及OpenCV程式碼實現
什麼叫特徵檢測?就是檢測影象中目標的特徵唄,所謂特徵,不管你怎麼旋轉目標,離目標遠近,它的特徵都應不變才對,這兩個特性稱為叫旋轉不變性和尺度不變性。當然還有其它特徵,如光照不一樣,也不應該變化嘛,只是旋轉不變性和尺度不變性是最基本的兩個要求。 對特徵的描述有很多種方法和運算
Java程式碼質量檢查checkstyle, pmd, cpd, p3c,findbugs, jacoco, sonarquebe以及和Jenkins整合
概述 又搞一邊質量掃描外掛,之前做過一遍,然後後面各種忽略,然後就放棄了,所以,應該尋找一種方法,循序漸進的實施。本次將實施一個基本的打包掃描方案,包含 checkstyle 固定團隊編碼風格,固定命名風格以及換行風格等,原型配置出資googlestyle, 修改縮排為4個字元(原型是2個) surefil
我收集的一些目標檢測、跟蹤、識別標準測試視頻集和圖像數據庫
ima detail track 分離 urb images data mic hang 一個網友收集的運動目標檢測,陰影檢測的標準測試視頻 http://blog.csdn.net/sunbaigui/article/details/6363390 很權威的c
adb命令檢測apk啟動時間、內存、CPU使用情況、流量、電池電量等——常用的adb命令
serial 信息 proc idg 情況 電量 pid art str ADB:Android Debug Bridge,是Android SDK裏一個可以直接操作安卓模擬器或真實設備的工具,頗為強大。 檢測APP: adb shell am start
OpenCV——邊緣檢測(sobel算子、Laplacian算子、scharr濾波器)
scale 變換 得到 疊加 操作 fault sch laplacian 技術 1 #include <opencv2/opencv.hpp> 2 #include <iostream> 3 4 using nam
學習筆記-目標檢測、定位、識別(RCNN,Fast-RCNN, Faster-RCNN,Mask-RCNN,YOLO,SSD 系列)
0. 前言 說到深度學習的目標檢測,就要提到傳統的目標檢測方法。 傳統的目標檢測流程: 1)區域選擇(窮舉策略:採用滑動視窗,且設定不同的大小,不同的長寬比對影象進行遍歷,時間複雜度高) 2)特徵提取(SIFT、HOG等;形態多樣性、光照變化多樣性、背景多樣性使得特徵魯棒性差)
獲取省、市、區的js程式碼控制
$(function() { // 初始化省市區 initAddress(); // 更改省份後的操作 $("select[name='province']").change(function() { var provCode = $("select