• <tr id="yyy80"></tr>
  • <sup id="yyy80"></sup>
  • <tfoot id="yyy80"><noscript id="yyy80"></noscript></tfoot>
  • 99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

    面向計算機(jī)視覺的領(lǐng)域特定語言

    2020-05-12 09:09:46鄭啟龍
    關(guān)鍵詞:代碼生成算子代碼

    姜 靖,鄭啟龍,2

    1(中國科學(xué)技術(shù)大學(xué) 計算機(jī)科學(xué)與技術(shù)學(xué)院,合肥 230026)

    2(中國科學(xué)技術(shù)大學(xué) 國家高性能計算中心,合肥 230026)

    E-mail:jjdl@mail.ustc.edu.cn

    1 引 言

    計算機(jī)視覺(Computer Vision,CV)是指使用計算機(jī)及相關(guān)設(shè)備對生物視覺的一種模擬,最終目標(biāo)是使計算機(jī)能夠像人類一樣通過視覺觀察進(jìn)而理解世界,具有自主適應(yīng)環(huán)境的能力[1].近些年來,計算機(jī)視覺得到了飛速發(fā)展,大量高效、實用的AI算子被設(shè)計了出來.傳統(tǒng)CV算子庫也得到了更新和完善.更多基于計算機(jī)視覺的軟件和系統(tǒng)已被廣泛使用.

    領(lǐng)域特定語言(Domain Specific Language,DSL)是領(lǐng)域工程技術(shù)之一,它是針對某一特定領(lǐng)域具有受限制表達(dá)性的一種計算機(jī)程序設(shè)計語言[2].不同于普通的編程語言,領(lǐng)域特定語言抽象層次更高.針對特定領(lǐng)域,領(lǐng)域特定語言能更簡潔、清晰、系統(tǒng)地描述某部分的意圖,提高開發(fā)效率,使開發(fā)過程更加輕松.隨著需求和技術(shù)的不斷更新,領(lǐng)域特定語言的種類也越來越多.以下是一些比較常見的領(lǐng)域特定語言:用于描述Web頁面的HTML,用于構(gòu)造軟件系統(tǒng)的Ant、RAKE、MAKE,用于表達(dá)語法的 BNF 范式,語法分析器生成語言 YACC、Bison、ANTLR,用于數(shù)據(jù)庫結(jié)構(gòu)化查詢的SQL,用于描述樣式表的CSS,專用的排版系統(tǒng)LaTex等[3].近些年隨著人工智能的快速發(fā)展,一些面向機(jī)器學(xué)習(xí)、深度學(xué)習(xí)的領(lǐng)域特定語言也相繼面世,例如OptiML、DeepDSL等.

    在工業(yè)生產(chǎn)和科研工作中,有時需使用大量計算機(jī)視覺算子,例如OpenCV算子[4,5]、Halcon算子[6,7]以及其它商業(yè)算子,同時也在越來越多的使用基于機(jī)器學(xué)習(xí)和深度學(xué)習(xí)的AI算子[8].這些算子間的組合調(diào)用較為困難,難以集成.例如在完成某商品包裝的缺陷檢測時,比較好的方式是先做A濾波再做亞像素的邊緣提取,A濾波算子只有OpenCV提供,而亞像素的邊緣提取只有某商業(yè)算子庫提供,所以需要跨算子庫調(diào)用兩種算子.雖然大部分算子庫均提供C++接口,用C++可以完成這些任務(wù),但編碼過于繁瑣,而且一些計算機(jī)視覺開發(fā)人員并非計算機(jī)背景出身,因此他們更愿意使用一種更抽象、簡單的語言.在開發(fā)過程中,領(lǐng)域?qū)<液途幋a人員的溝通也存在很大的問題.故本文設(shè)計實現(xiàn)了一種DSL,其基本思想是為現(xiàn)有的常用計算機(jī)視覺算子庫和AI算子提供簡單、一致的語法,從而整合使用這些算子,以提供統(tǒng)一的開發(fā)平臺.這樣一種DSL減少了編碼時間和編碼量,能讓領(lǐng)域工作者將更多的時間和精力放在算法設(shè)計上.具有開發(fā)經(jīng)驗的用戶也可以修改添加平臺內(nèi)的元模型,從而實現(xiàn)對平臺的擴(kuò)展.此處將面向計算機(jī)視覺的領(lǐng)域特定語言命名為CVDSL.

    圖1 CVDSL整體設(shè)計圖

    本文采用模型驅(qū)動開發(fā)的方式對CVDSL進(jìn)行建模、設(shè)計與實現(xiàn),主要進(jìn)行了以下幾個方面的工作:1)構(gòu)建CV領(lǐng)域元模型;2)定義CVDSL語法規(guī)則;3)定制CVDSL語法檢查器;4)定制將CVDSL轉(zhuǎn)換為C++的代碼自動生成器.CVDSL的整體設(shè)計方案如圖1所示.

    2 CVDSL的設(shè)計與實現(xiàn)

    本文首先確定了構(gòu)建CV領(lǐng)域元模型的方法及工具,并通過分析領(lǐng)域中的共性和變性、所需要的原始數(shù)據(jù)類型、必須的原始數(shù)據(jù)規(guī)模等一系列領(lǐng)域相關(guān)因素,確定了元模型的組成內(nèi)容,在此基礎(chǔ)上建立了CV領(lǐng)域元模型.

    本文在CV領(lǐng)域元模型的映射和持久化的基礎(chǔ)上,定義了CVDSL語法規(guī)則體系.同時通過自定義語法規(guī)則庫,定制了模型語法檢查器.語法檢查的目的是為了防止開發(fā)人員在使用領(lǐng)域特定語言編碼時產(chǎn)生語法錯誤,從而影響生成代碼的正確性.

    本文通過研究基于模板映射語言的、符合特定標(biāo)準(zhǔn)的應(yīng)用模型代碼自動生成技術(shù),設(shè)計了將CVDSL代碼轉(zhuǎn)換成對應(yīng)的C++代碼的代碼自動生成器,實現(xiàn)領(lǐng)域特定語言向通用語言的自動轉(zhuǎn)換.

    2.1 構(gòu)建CV領(lǐng)域元模型

    元模型的構(gòu)建依據(jù)元對象機(jī)制(MOF,Meta Object Facility).MOF也被稱為MOF標(biāo)準(zhǔn),其特點是具有易擴(kuò)展性,高開放性及良好的互操作性.MOF方法的核心是一種具有易擴(kuò)展性的元模型數(shù)據(jù)管理方法,其實現(xiàn)的方式是對元數(shù)據(jù)分層.它的特點是提供了一種四層建模結(jié)構(gòu),支持各種元數(shù)據(jù)的框架.在需要添加新元模型數(shù)據(jù)的時候,就可以方便地加入新的類型[9].

    MOF的層次分別為M0、M1、M2和M3,且M3∈M2∈M1∈M0.

    1)M3層,元元模型層.為領(lǐng)域元模型的提取或搭建,而定義的模型.一般這些模型包括屬性、數(shù)據(jù)類型、關(guān)聯(lián)關(guān)系等,是元模型搭建的基礎(chǔ).CVDSL的元元模型包括獨立的算子(如讀取圖片的算子)、單個的語法規(guī)則(如賦值語句)等.

    2)M2層,元模型層.由上一層模型搭建而來,它的元素包括各個元元模型之間的關(guān)系、元元模型的類型等.這一層輸出的結(jié)果是領(lǐng)域元模型,它是定制領(lǐng)域特定語言語義模型和語法規(guī)范的基礎(chǔ).

    3)M1層,模型層.這一層的模型由用戶使用上一層的模型搭建而來.所以,這一層的模型是元模型層的實例,即用戶使用CVDSL編寫出來的應(yīng)用模型.語法檢查將基于這一層的輸出結(jié)果進(jìn)行.

    4)M0層,對象和數(shù)據(jù).這一層的結(jié)果是現(xiàn)實世界中的事物對象,由上一層的結(jié)果通過自動生成的方式得到,比如文檔和代碼等.

    元模型的構(gòu)建,需要去符合以下兩個條件:

    1)分析領(lǐng)域模型內(nèi)部特征的相似性,對相似特征進(jìn)行合并;

    2)對于合并之后的領(lǐng)域模型內(nèi)部特征,需要在對應(yīng)的元模型上體現(xiàn).

    元模型的構(gòu)建過程如圖2所示.

    圖2 元模型的構(gòu)建流程

    本文采用EMF(Eclipse Modeling Framework)作為構(gòu)建元模型的工具.用EMF搭建的元模型即Ecore模型.Ecore模型是一種簡化的UML模型.與UML類似,EMF也可以進(jìn)行圖形化的模型搭建,框架自帶了Existing Elements、Classifier、Feature、Relation、Dynamic、Package六大類型,包括Class、Datatype、Attribute、SuperType、Reference等實用基本模型[10].對于開發(fā)人員來說可以很方便地通過拖拽的方式搭建CV領(lǐng)域的元模型.

    另一方面,由于EMF的模型實例是由EMF框架提供的模型搭建的,如果當(dāng)模型實例需要修改或者添加的時候,就可以輕易地通過 EMF提供的各種模型對模型實例進(jìn)行修改或者額外添加一個新的模型實例.EMF中集成的 Class、Datatype、Attribute、SuperType、Reference 等模型即相當(dāng)于CV領(lǐng)域中的元元模型,用 EMF 搭建出來的模型實例,就相當(dāng)于CV領(lǐng)域中的元模型,而在設(shè)計好的開發(fā)平臺里用EMF搭建的模型實例再次搭建的模型,就相當(dāng)于是CV領(lǐng)域的模型實例了.將CV領(lǐng)域的模型實例通過代碼自動生成最終將得到模型的目標(biāo)代碼實現(xiàn).這樣MOF的四層結(jié)構(gòu)就很清晰了.

    通過對CV領(lǐng)域的分析,確定CV領(lǐng)域元模型的兩個主要組成部分如下:

    1)基礎(chǔ)語法部分.CV領(lǐng)域的實際應(yīng)用模型中,是需要循環(huán)、分支、跳轉(zhuǎn)等基礎(chǔ)語法結(jié)構(gòu)的,因此在元模型中,需要有常見的基礎(chǔ)語法建模.

    2)算子庫部分.CV領(lǐng)域應(yīng)用模型的核心是各種算子的組合調(diào)用.本文將所涉及的算子分為兩大類:ImageOperators和BasicOperators.其中ImageOperators中包含與圖像處理相關(guān)的算子,依據(jù)算子的功能劃分成File、Filter、Matching等23類.其中每一類又依據(jù)更具體的功能劃分成若干細(xì)分類,例如File中的算子被劃分成Images、XLD_file、Text、Misc、Region和Tuple六類.每一細(xì)分類中則包含具體的算子模型,例如Images中包含用于進(jìn)行圖片讀取的算子ReadImage(string path,stringname,string color).BasicOperators中則包含字符串操作、位操作、元組操作、數(shù)學(xué)函數(shù)以及異常處理等相關(guān)的算子.

    圖3 CV領(lǐng)域元模型部分結(jié)構(gòu)圖

    圖3為CV領(lǐng)域元模型部分結(jié)構(gòu)圖,其中”a-> b”表示a包含b,”0..*”表示一個a包含0個或多個b,”0..1”表示一個a包含0個或1個b.整個元模型為樹形結(jié)構(gòu),DomainModel為樹的根節(jié)點.元模型的樹形結(jié)構(gòu)是下文建立語法規(guī)則樹的基礎(chǔ),也是代碼自動生成器中,關(guān)鍵字查詢匹配的基礎(chǔ).

    元模型中不同類型的元元模型的具體構(gòu)建如表1所示.

    2.2 CVDSL語法規(guī)則定義

    CVDSL的語法規(guī)則定義分為以下兩步:

    2.2.1 元模型的映射

    在CV領(lǐng)域中,元模型本身會映射為領(lǐng)域特定語言中的語法框架,每個元元模型會映射為領(lǐng)域特定語言的每條基礎(chǔ)語法規(guī)則以及算子定義,元元模型的參數(shù)會映射成領(lǐng)域特定語言中各條語法規(guī)則定義的形參定義.

    2.2.2 規(guī)則添加

    為了領(lǐng)域特定語言語法的正確性與美觀,語法規(guī)范中除了元模型對應(yīng)的代碼之外,往往還需要加入其它的代碼.比如一個分支語句的開始結(jié)束要有關(guān)鍵字給予明顯的提示;在代碼中是否要明確體現(xiàn)每一個模塊之間的關(guān)聯(lián)關(guān)系等.

    表1 不同類型的元元模型示例

    本文選擇Xtext框架作為CVDSL語法規(guī)則定義的工具,因為其支持Ecore元模型的導(dǎo)入.Xtext是一種基于Eclipse的開源框架,配套語言為Xtend,其主要用于DSL的設(shè)計與實現(xiàn).

    語法模型映射活動圖如圖4所示.

    圖4 語法模型映射

    Xtext需要提取元模型語法的關(guān)鍵字與結(jié)構(gòu),組合它們,產(chǎn)生抽象語法樹.在本文中,Xtext的XModelSet()方法會訪問EMF項目中的 Model文件夾,捕獲所有類名稱、屬性、相互之間的邏輯關(guān)系等[11].

    作為DSL來說,本身即是一種不完備的語言,故在定制語法模型的時候一方面不能讓基于語法模型生成的代碼,在進(jìn)行語法檢查時遇到特征屬性缺失等問題.另一方面,要使領(lǐng)域開發(fā)人員能夠簡便地捕捉到DSL代碼中的相關(guān)信息,從而方便定制代碼生成的模板.

    CVDSL部分語法規(guī)則的Xtend語言形式化描述如下:

    DomainModel:(elements+=AbstractElement)*;

    AbstractElement:BasicGrammar | Operators;

    BasicGrammar:ControlFlow | Assignment |

    Import |Arithmetic |Comparison |VariableDeclaration;

    Operators:ImageOperatos | BasicOperatos;

    ImageOperatos:File |_1D_Measurling | XLD | _3D_Matching |_3D_Reconstruction | Classification | Calibration | Filter | Indentification | Graphics | Image | Inspection | Matirx | Matching | Object | OCR | Morphology | Regions | Segmentation | System | Transformations | Tools | _Tuple;

    BasicOperatos:BitOp | StringOp | TupleOp | BooleanOp | TrigonometricFunctions | ExponentialFunctions | NumericalFunctions | ExceptionHandling;

    File:Images | XLD_file | Text | Misc | Region | TupleFile;

    Images:ReadImage | WriteImage | ListImageFiles | ParseFilename;

    ReadImage:′ReadImage′′(′ path=CharacterType‘,’ name=CharacterType(‘,’color=CharcterType)?′)′;

    由此可知CVDSL的語法規(guī)則框架是繼承于元模型的樹形結(jié)構(gòu)的.

    表2為算子部分和基礎(chǔ)語法部分的語法規(guī)則定義的Xtend語言形式化描述示例.

    表2 算子和基礎(chǔ)語法定義示例

    因為Xtend的內(nèi)置數(shù)據(jù)類型有限,而在CV領(lǐng)域會涉及到豐富的數(shù)據(jù)類型,如RealType、Tuple、

    Matrix等,因此需要在元模型映射的基礎(chǔ)上擴(kuò)展新

    的數(shù)據(jù)類型.具體示例如下:

    1)擴(kuò)展數(shù)據(jù)類型語法定義示例:

    terminalDOUBLE:((′0′..′9′)*(′.′)(′0′..′9′)*);

    terminalBOOL:′true′ | ′false′;

    terminalTUPLE:′[′(STRING | ID | INT | DOUBLE)*′]′;

    terminalMATRIX_TYPE:′[′(TUPLE)*′]′;

    2)復(fù)合數(shù)據(jù)類型語法定義示例:

    CharacterType:STRING | ID;

    RealType:INT | DOUBLE;

    其中STRING、ID、INT為Xtend語言內(nèi)置數(shù)據(jù)類型,DOUBLE為擴(kuò)展數(shù)據(jù)類型.CharterType和RealType為復(fù)合數(shù)據(jù)類型.

    2.3 定制語法檢查器

    CV領(lǐng)域應(yīng)用模型檢查是依據(jù)語法規(guī)則庫,檢查在之前步驟中建立的CV領(lǐng)域應(yīng)用模型,判斷這些已經(jīng)建立的應(yīng)用模型的語法是否正確[12].

    語法檢查應(yīng)以領(lǐng)域特定語言的語法模型為基礎(chǔ),定制模型語法檢查器[13].模型語法檢查器通過用戶對模型的選擇,找到其對應(yīng)的對象根節(jié)點,然后找到應(yīng)用模型對應(yīng)的CV領(lǐng)域元模型.此時找到領(lǐng)域特定語言相應(yīng)元模型對應(yīng)的語法規(guī)則,驗證用戶搭建的應(yīng)用模型的正確性,與通用語言相同,這種驗證應(yīng)該是一種即時性的驗證.同時,在語法檢查器中還應(yīng)該包括警告驗證.警告,不一定會導(dǎo)致程序錯誤,但是可能會提高出錯的風(fēng)險,或者影響用戶閱讀體驗.比如模塊名稱是由不恰當(dāng)?shù)淖址M成,或者將不同類型的數(shù)據(jù)進(jìn)行比較等.無論是錯誤還是提醒,語法檢查器都應(yīng)該進(jìn)行快速定位,并將語法檢查的結(jié)果直觀體現(xiàn)在用戶界面上.語法檢查的流程如圖5所示.

    圖5 語法檢查流程

    語法檢查器的開發(fā)同樣基于Xtext.Xtext驗證機(jī)制中提供兩個文件:CVDSLValidator.Xtend和CVDSLQuickfixProvider.Xtend.這兩個文件,前者主要是添加檢查規(guī)則,對出現(xiàn)錯誤的代碼進(jìn)行標(biāo)注說明,后者主要是針對不同的代碼錯誤提供快速修正的方法.具體實現(xiàn)過程如下:

    1)由編輯器中的監(jiān)視器通知CVDSLValidator.Xtend,用戶修改了模型.

    2)由typeof()接口,確定模型的類型.

    3)再次調(diào)用typeof()接口確定檢查的屬性,或者調(diào)用方法的名稱.

    4)判斷相關(guān)屬性類型,屬性值等數(shù)據(jù)是否符合規(guī)范標(biāo)準(zhǔn).

    5)如果符合標(biāo)準(zhǔn),該次檢查結(jié)束.如果不符合標(biāo)準(zhǔn),定位不符合標(biāo)準(zhǔn)的代碼位置,執(zhí)行6).

    6)根據(jù)具體標(biāo)準(zhǔn)的不同,使用error()或者warning()接口.這兩個接口都需要提供代碼的定位以便標(biāo)注,同時為了用戶修改的方便,還需要提供相應(yīng)的提示文字.如果該類錯誤可控性較高,則將該錯誤用一串字符串作為特征,調(diào)用CVDSLQuickfixProvider.Xtend相應(yīng)快速修復(fù)方法.

    7)CVDSLQuickfixProvider.Xtend中的相應(yīng)方法會得到錯誤的關(guān)鍵信息,在提示框里對用戶提供快速修復(fù)按鈕.

    8)用戶點擊快速修復(fù)后,模型會發(fā)生相應(yīng)變化,故將再次激活步驟1).

    算法1描述了在CVDSLValidator.Xtend文件中檢查算子首字母是否大寫的過程.

    算法1.檢查算子首字母是否大寫:

    輸入:算子類型參數(shù)

    輸出:在編程界面上提示算子首字母是否大寫

    1.通過代碼生成器中的過濾器獲取每一個operator,將其作為參數(shù)傳入2.中函數(shù)

    2.defcheckOpetationNameStartsWithCapital:

    ifoperator.name.charAt(0).lowerCase==true

    warning("Operator′s name should start with a capital",CVDSLPackage.eINSTANCE.operation_Name,INVALID_NAME,operator.name);

    算法2描述了在CVDSLQuickfixProvider.Xtend文件中快速修正首字母為大寫的過程.

    算法2.快速修正算子首字母為大寫:

    輸入:Issue類對象,IssueResolutionAcceptor對象

    輸出:在編程界面上呈現(xiàn)出將算子首字母修正為大寫的提示,雙擊即可修正

    1.將輸入中的系統(tǒng)類的對象傳入2.中函數(shù)

    2.defvoidcapitalizeOperationNameFirstLetterWithModel

    acceptor.accept( issue,"Capitalize first letter","Capitalize first letter of ′" + issue.data.get( 0)+ "′","upcase.gif",[element,context|(element as Operation).

    name=issue.data.get(0).toFirstUpper])

    表3 語法檢查器運行示例

    表3為檢查算子首字母是否大寫及快速修正的運行示例.

    2.4 定制代碼自動生成器

    領(lǐng)域特定語言雖然在領(lǐng)域相關(guān)環(huán)境或者人員中具有其獨特的優(yōu)勢和作用,但是基于通用性、安全性等的考量,領(lǐng)域特定語言的代碼必須能夠轉(zhuǎn)換成通用語言代碼.

    由于計算機(jī)視覺領(lǐng)域軟件有規(guī)模龐大、功能復(fù)雜、迭代更新快等因素,再加上人工代碼的書寫習(xí)慣差異及良莠不齊的不確定性,希望人工通過領(lǐng)域語言代碼,編寫通用代碼是不現(xiàn)實的.所以選擇代碼自動生成是必然結(jié)果[14].

    代碼生成技術(shù)可以提高代碼質(zhì)量,增強(qiáng)代碼的一致性,也可以突出設(shè)計決策或者便于系統(tǒng)的遷移實現(xiàn).應(yīng)用模型代碼生成技術(shù)使設(shè)計師擁有更多的設(shè)計時間,使得程序員將更多的時間花在系統(tǒng)架構(gòu)設(shè)計上,從而可以提高系統(tǒng)健壯性、可擴(kuò)展性、以及可維護(hù)性.

    所以,CV領(lǐng)域軟件的非領(lǐng)域代碼生成器,應(yīng)當(dāng)建立在已經(jīng)研究的領(lǐng)域語言規(guī)則標(biāo)準(zhǔn)及非領(lǐng)域語言規(guī)則標(biāo)準(zhǔn)之上,然后將開發(fā)過程中各個階段的模型集成,從而形成統(tǒng)一且符合規(guī)則標(biāo)準(zhǔn)的持久化模型文件,然后將這些模型文件通過代碼生成器生成出符合已有標(biāo)準(zhǔn)的通用代碼.

    代碼自動生成器的開發(fā)同樣基于Xtext框架,因為其可滿足代碼自動生成器對于良好擴(kuò)展性的需求.代碼自動生成器主要由元模型分析數(shù)據(jù)、應(yīng)用模型分析數(shù)據(jù)、生成通用代碼的模板以及環(huán)境配置工具組成,其設(shè)計的核心思想是制定CVDSL與C++間的映射關(guān)系,確定每一條合法的CVDSL語句將對應(yīng)的C++代碼塊.當(dāng)代碼生成器獲取到CVDSL的應(yīng)用模型后,會依據(jù)上文中建立的語法樹,檢索每一行代碼,確定它所對應(yīng)的元元模型類型和語法規(guī)則,然后依據(jù)該語句與C++代碼塊的映射規(guī)則,進(jìn)行代碼生成.圖6為代碼自動生成活動圖.

    圖6 代碼自動生成活動圖

    算法3描述了CVDSL代碼自動轉(zhuǎn)換為C++代碼的過程.

    算法3.CVDSL代碼自動轉(zhuǎn)換C++代碼模板

    輸入:Resource類對象,IFileSystemAccess類對象,IGeneratorContext類對象

    輸出:生成的C++代碼文件

    1.對classCVDSLGeneratoreXtendsAbstractGenerator中的函數(shù)doGenerate進(jìn)行重寫

    2.在函數(shù)overridevoiddoGenerate(Resource resource,IFileSystemAccess2 fsa,IGeneratorContext context)中,對CVDSL中的每一個元元模型進(jìn)行遍歷,然后調(diào)用相應(yīng)的映射模板進(jìn)行代碼生成

    for(e:resource.allContents.toIterable.filter(AbstractElement)):

    /*調(diào)用自定義的映射模板中的函數(shù),獲取每一行CVDSL代碼所對應(yīng)的C++代碼塊,并進(jìn)行存儲*/

    fsa.generateFile(/*這里包含兩個參數(shù):①所生成的文件名②上文中已獲取的所需生成文件的內(nèi)容*/)

    算法4描述了ReadImage算子的代碼生成過程.

    算法4.ReadImage算子代碼生成模板

    輸入:CVDSL中的ReadImage類型變量

    輸出:ReadImage對應(yīng)的C++代碼

    1.將ReadImage變量作為參數(shù)傳遞給compile函數(shù),在complie函數(shù)中,解析ReadImage的參數(shù),并用content記錄對應(yīng)的C++代碼

    varcontent=′′′′′′

    content+=′′′Mat ′′′

    content+=readImage.name.compile

    content+=′′′=imread(′′′

    content+=readImage.path.compile

    content+=′′′,′′′

    if(readImage.color==null)

    content+="IMREAD_COLOR"

    else

    content+=readImage.color.compile

    content+=′′′)′′′

    2.返回content

    returncontent

    3 實驗及評估

    3.1 實 驗

    3.1.1 實驗過程

    本實驗邀請了四位領(lǐng)域工作者,并提前對他們進(jìn)行了兩種語言的培訓(xùn).而后將他們分為兩組,分別使用CVDSL和C++來開發(fā)貓眼識別、人臉識別和人臉定位三個CV應(yīng)用模型,并對開發(fā)時間以及代碼量進(jìn)行了對比.

    3.1.2 實驗結(jié)果及評估

    實驗結(jié)果如表4、表5所示.從表4可知,采用CVDSL的開發(fā)效率約為采用C++的3倍.從表5可知,采用CVDSL開發(fā)的代碼量約為采用C++的0.5倍.由此可得到初步結(jié)論:在CV領(lǐng)域,使用CVDSL編程比C++編程效率更高,所編寫的代碼量更少,更加面向領(lǐng)域工作者,凸顯出了CVDSL的易用性和高效性.

    表4 CVDSL與C++開發(fā)時間對比

    表5 CVDSL與C++代碼量對比

    表6為貓眼識別應(yīng)用模型示例,對比CVDSL源碼和所生成的C++代碼,可知CVDSL具有以下優(yōu)點:

    1)語法規(guī)則嚴(yán)格統(tǒng)一;從表6可知,使用C++調(diào)用不同底層算子庫中的算子時,在語法上是存在差異的.CVDSL在語法規(guī)則定義上,統(tǒng)一了所有算子的語法風(fēng)格,通過代碼生成器中制定的映射規(guī)則將這些差異透明化,從而可以極大降低領(lǐng)域工作者的編碼難度.

    2)相關(guān)頭文件及代碼自動補(bǔ)全;在表6中,生成的C++代碼中編號為0的行,是依據(jù)函數(shù)體中使用的相關(guān)算子自動補(bǔ)全的,既減少了領(lǐng)域工作者的編碼量,又降低了bug的出現(xiàn)率.

    3)算子合并;在構(gòu)建CV應(yīng)用模型時,很多時候某些算子間有著嚴(yán)格的調(diào)用次序,那么在構(gòu)建元模型和定制語法規(guī)則時,可將這些算子進(jìn)行合并.例如本例中CVDSL代碼中編號6的代碼行,在通過代碼生成后得到了對應(yīng)C++代碼中編號為6的兩行代碼.通過算子合并的方式可以極大降低領(lǐng)域工作者的編碼難度和編碼量.

    4)保證算子性能較優(yōu);通過前期的充分調(diào)研,以及與多位CV領(lǐng)域?qū)<?、工程師的充分溝通,本文對實現(xiàn)不同功能的算子的性能進(jìn)行了評估.例如Halcon中與域處理相關(guān)的算子的性能要優(yōu)于其他算子庫中的相應(yīng)算子,因此在進(jìn)行代碼生成時,以Region為前綴的算子,在生成的C++代碼中,默認(rèn)調(diào)用Halcon中的相應(yīng)算子.這樣領(lǐng)域工作者在進(jìn)行編碼時,僅需考慮算子的功能,而無需考慮算子的性能優(yōu)劣,這在很大程度上提高了其編碼效率.

    5)隱藏不同算子庫中變量的聲明;不同算子庫中的某些變量,在C++代碼中有著不同的變量類型.例如OpenCV用Mat來表示圖像類型,而Halcon中用Himage來表示圖像類型.CVDSL通過在代碼自動生成器中判別不同算子所屬的算子庫以及算子的參數(shù)類型,生成相應(yīng)變量聲明的C++代碼.同時CVDSL對不同類型變量的轉(zhuǎn)換進(jìn)行了封裝.這一過程對于領(lǐng)域工作者是透明的,從而降低了其編碼難度.

    3.2 基于FQAD對CVDSL的評估

    FQAD是基于ISO/IEC 25010:2011標(biāo)準(zhǔn)的用于DSL定性評估的框架[15].該框架定義了一套評估DSL質(zhì)量的特性,包括:功能適用性,可用性,可靠性,可擴(kuò)展性,可集成性,可維護(hù)性,生產(chǎn)力,兼容性,表達(dá)性和可重用性.本文基于以上特性,對CVDSL作出了如下評估:

    1)功能適用性是指DSL完全開發(fā)的程度,即判斷DSL是否包括所有必要的功能且不包括域中不存在的功能.CVDSL擁有完整的面向于域的語法定義,且其底層有多個計算機(jī)視覺算子庫的支持,并支持算子庫的擴(kuò)展,因此可以滿足大部分計算機(jī)視覺應(yīng)用模型開發(fā)的需求.且其語法規(guī)則不具有普適性,僅面向計算機(jī)視覺領(lǐng)域.綜上可知CVDSL擁有良好的功能適用性.

    2)可用性是指用戶可以使用DSL來實現(xiàn)指定目標(biāo)的難易程度.為分析CVDSL的可用性,本文邀請多位CV領(lǐng)域?qū)<液虲V領(lǐng)域工程師對CVDSL進(jìn)行了評估,得出的結(jié)論是:CVDSL簡單且具有表現(xiàn)力,相對容易學(xué)習(xí).與通用編程語言C++相比,CVDSL降低了構(gòu)建CV應(yīng)用模型的復(fù)雜性,并提高了可理解性和可維護(hù)性.綜上可知CVDSL的可用性極高,未來可通過完善用戶使用手冊來進(jìn)一步提高CVDSL的可用性.

    3)可靠性是指生成可靠程序語言的屬性.CVDSL語法規(guī)則的定義較為完善,并且本文針對CVDSL的語法規(guī)則及CV領(lǐng)域C++代碼風(fēng)格定制了語法檢查器,大幅度減少了在編碼過程中可能產(chǎn)生的語法錯誤.同時本文設(shè)計實現(xiàn)了基于模板映射的的代碼自動生成器,使得每一行CVDSL代碼能夠轉(zhuǎn)換成對應(yīng)的C++代碼塊,確保了C++代碼風(fēng)格的統(tǒng)一.以上都是CVDSL可靠性的保證,未來可通過在CVDSL級定制調(diào)試器來進(jìn)一步提高CVDSL的可靠性.

    4)可擴(kuò)展性是指DSL添加新功能的難易程度.本文是采用模型驅(qū)動開發(fā)的方式對CVDSL進(jìn)行建模、設(shè)計與實現(xiàn)的,因此可方便的通過擴(kuò)展元模型來實現(xiàn)對CVDSL功能的擴(kuò)展,可見CVDSL擁有很好的擴(kuò)展性.

    表6 貓眼識別應(yīng)用模型示例

    5)可集成性是指DSL與其他語言和建模工具集成的難易程度.CVDSL的開發(fā)是基于EMF工具和Xtext框架的,兩者均屬于Eclipse框架中的插件.Eclipse平臺允許開發(fā)人員通過插件擴(kuò)展Eclipse IDE等Eclipse應(yīng)用程序以及其他功能,故未來可將CVDSL語言框架開發(fā)為Eclipse框架中的插件,然后使用Eclipse IDE和整個OSGI組件模型來完成CVDSL和其他語言的集成.

    6)可維護(hù)性是指DSL易于維護(hù)的程度.可維護(hù)性與可擴(kuò)展性相關(guān),上文中已說明CVDSL具有很好的可擴(kuò)展性,并且CVDSL的構(gòu)建是基于元模型的,故易于修改和完善.由此可知CVDSL是具有良好的可維護(hù)性的.

    7)生產(chǎn)力是指DSL提高編程效率的程度.CVDSL僅面向計算機(jī)視覺領(lǐng)域,因此與通用編程語言相比,在領(lǐng)域概念的描述上有著明顯的優(yōu)勢,便于領(lǐng)域工作者的建模.從上文的實驗中可知使用CVDSL開發(fā)CV應(yīng)用模型的效率約為C++的3倍,大大提高了領(lǐng)域工作者的開發(fā)效率.

    8)兼容性是指DSL與域和開發(fā)過程的兼容程度.CVDSL是基于CV領(lǐng)域元模型的,因此與CV領(lǐng)域有很好的兼容性.同時CV領(lǐng)域元模型的構(gòu)建與CV應(yīng)用模型的開發(fā)過程密切相關(guān),這使得CVDSL與開發(fā)過程也有著良好的兼容性.

    9)可重用性是指DSL的語言結(jié)構(gòu)在其他語言中的使用程度.CVDSL本身的語言結(jié)構(gòu)是唯一的,但為CVDSL所定制的基于模板映射的代碼自動生成器是可重用的,通過修改映射規(guī)則,CVDSL可以轉(zhuǎn)換成任意一種通用編程語言.同時CVDSL底層的算子庫也是可重用的,凡有相應(yīng)算子庫接口的語言均可調(diào)用.

    10)表達(dá)性是指問題解決策略映射為程序的難易程度.CVDSL的語法規(guī)則是針對CV領(lǐng)域而定制的,因此其對于任何CV應(yīng)用模型都有很好的表達(dá)性.與C++相比,CVDSL封裝了很多與問題解決策略無關(guān)的編程細(xì)節(jié),如類型轉(zhuǎn)換等.通過使用CVDSL,領(lǐng)域工作者可以輕松的將問題解決策略映射為程序.在CV領(lǐng)域,CVDSL有著強(qiáng)大的表達(dá)性.

    3.3 CVDSL與Halide的性能比較

    Halide是面向圖像處理的著名領(lǐng)域特定語言,比起傳統(tǒng)編程語言,用Halide編寫的程序不僅更容易閱讀、編寫和修改,而且由于Halide能夠自動優(yōu)化代碼,因此程序運行速度也顯著提高[16].Halide語言將算法描述、算法中數(shù)據(jù)存儲與計算執(zhí)行等調(diào)度方便的內(nèi)容解耦合,從而算法的描述和性能的優(yōu)化可以分開進(jìn)行,可在不改動算法的情況下對算法進(jìn)行調(diào)優(yōu)[17].

    下面基于FQAD中定義的特性,對CVDSL與Halide進(jìn)行性能比較:

    1)功能適用性:Halide和CVDSL均只面向計算機(jī)視覺領(lǐng)域,在語法上均不具有普適性,且均能滿足大部分計算機(jī)視覺應(yīng)用模型的開發(fā),因此都具有很好的功能適用性.但在對代碼性能要求更高的情況下,Halide要優(yōu)于CVDSL.

    2)可用性:Halide不是獨立的編程語言,而是嵌入在C++中的.在語法上,相比較于CVDSL,要復(fù)雜一些,CVDSL更易于學(xué)習(xí)和使用.可用性上CVDSL要優(yōu)于Halide.

    3)可靠性:Halide是非常成熟的商用編程語言,有獨立的編譯器,能在多種操作系統(tǒng)上運行,且其能自動優(yōu)化代碼.而CVDSL目前沒有獨立的編譯器,僅提供從CVDSL到C++的代碼自動生成器.因此在可靠性上比Halide稍差一些.

    4)可擴(kuò)展性:Halide是成熟的商用編程語言,普通用戶很難在功能上進(jìn)行擴(kuò)展.而具有開發(fā)經(jīng)驗的用戶可通過擴(kuò)展元模型,方便的對CVDSL進(jìn)行功能擴(kuò)展.Halide提供C++API,甚至可以將Halide中功能強(qiáng)大的算子擴(kuò)展到CVDSL中,因此CVDSL有著更優(yōu)的可擴(kuò)展性.

    5)可集成性:CVDSL是一門獨立的語言,因此很難做到和其他語言集成,但后期可將CVDSL開發(fā)成Eclipse的插件,因此可將其與其它建模工具進(jìn)行集成.Halide在某種意義上可看做一個函數(shù)庫,因此它可與其它提供接口的通用編程語言進(jìn)行集成.由此可見在不同層面上,CVDSL和Halide都有較好的集成性.

    6)可維護(hù)性:CVDSL的構(gòu)建是基于元模型的,具有良好的維護(hù)性.Halide作為一門著名的編程語言,同樣具有很好的維護(hù)性.

    7)生產(chǎn)力:CVDSL語法更簡潔,底層算子庫更龐大.但Halide對于代碼的優(yōu)化更好,因此兩者都可以大大提高領(lǐng)域工作者的開發(fā)效率.對于不同的開發(fā)需求,兩者所能帶來的效率提升則不同.

    8)兼容性:CVDSL和Halide都是僅面向計算機(jī)視覺的編程語言,因此兩者與域及開發(fā)過程必然具有很好的兼容性.

    9)可重用性:CVDSL的可重用性體現(xiàn)在基于模板映射的代碼生成器.而Halide有著獨立的編譯器,其語言結(jié)構(gòu)很難在其他語言中重用,因此CVDSL相比較于Halide,有著更好的可重用性.

    10)表達(dá)性:CVDSL與Halide對于任何CV領(lǐng)域的問題,都可以方便的將解決策略映射為程序,因此兩者都具有很好的表達(dá)性.

    綜上可知,CVDSL與Halide各有優(yōu)劣,選擇哪門開發(fā)語言完全依賴于開發(fā)需求.

    4 總 結(jié)

    本文基于CV領(lǐng)域元模型,采用模型驅(qū)動開發(fā)的方式,設(shè)計實現(xiàn)了一種面向計算機(jī)視覺的領(lǐng)域特定語言——CVDSL.本文首先分析了CV領(lǐng)域元模型的結(jié)構(gòu)及構(gòu)建方法,然后在領(lǐng)域元模型的基礎(chǔ)上,定義了CVDSL的語法規(guī)則,并依據(jù)語法規(guī)則定制了語法檢查器,以減少在使用CVDSL編碼過程中出現(xiàn)的語法錯誤.最后本文基于模板映射規(guī)則,設(shè)計實現(xiàn)了將CVDSL轉(zhuǎn)換為C++的代碼自動生成器,保證了其通用性和安全性.

    本文通過實驗和FQAD框架,對CVDSL做了詳細(xì)評估,分析了CVDSL所具有的優(yōu)勢和特性,并依據(jù)FQAD對CVDSL和Halide進(jìn)行了比較.在未來的工作中,可通過定制CVDSL級調(diào)試器來提升其可靠性,并可通過將CVDSL語言框架封裝成Eclipse插件的方式來提升其可集成性.

    猜你喜歡
    代碼生成算子代碼
    擬微分算子在Hp(ω)上的有界性
    各向異性次Laplace算子和擬p-次Laplace算子的Picone恒等式及其應(yīng)用
    Lustre語言可信代碼生成器研究進(jìn)展
    一類Markov模算子半群與相應(yīng)的算子值Dirichlet型刻畫
    創(chuàng)世代碼
    動漫星空(2018年11期)2018-10-26 02:24:02
    創(chuàng)世代碼
    動漫星空(2018年2期)2018-10-26 02:11:00
    創(chuàng)世代碼
    動漫星空(2018年9期)2018-10-26 01:16:48
    創(chuàng)世代碼
    動漫星空(2018年5期)2018-10-26 01:15:02
    Roper-Suffridge延拓算子與Loewner鏈
    代碼生成技術(shù)在軟件開發(fā)中的應(yīng)用
    電子世界(2016年15期)2016-08-29 02:14:28
    卡戴珊不雅视频在线播放| 久久人人爽人人片av| 久久精品国产自在天天线| 国产成人精品福利久久| 成年av动漫网址| 日本欧美国产在线视频| 美女福利国产在线| 超碰成人久久| 国产精品久久久久久精品古装| 黑人巨大精品欧美一区二区蜜桃| 久久久久久久国产电影| 精品卡一卡二卡四卡免费| 高清欧美精品videossex| 欧美国产精品va在线观看不卡| 黄色怎么调成土黄色| 又黄又粗又硬又大视频| 精品久久久精品久久久| 99热全是精品| 18禁观看日本| 中文字幕制服av| 天天影视国产精品| 欧美变态另类bdsm刘玥| 下体分泌物呈黄色| 搡女人真爽免费视频火全软件| 国产亚洲欧美精品永久| 亚洲国产色片| 免费看不卡的av| 电影成人av| 熟女少妇亚洲综合色aaa.| 国语对白做爰xxxⅹ性视频网站| 少妇人妻 视频| 男人添女人高潮全过程视频| 黄片无遮挡物在线观看| 夫妻性生交免费视频一级片| 国产成人精品一,二区| 在线观看免费高清a一片| 免费在线观看视频国产中文字幕亚洲 | 日本爱情动作片www.在线观看| 亚洲一区中文字幕在线| 99香蕉大伊视频| 久久影院123| 狂野欧美激情性bbbbbb| 麻豆精品久久久久久蜜桃| 日韩视频在线欧美| 免费高清在线观看日韩| 大香蕉久久成人网| av网站在线播放免费| 大片免费播放器 马上看| 国产精品久久久久久精品古装| 丁香六月天网| 成人亚洲精品一区在线观看| 欧美日韩成人在线一区二区| 国产极品粉嫩免费观看在线| 欧美精品国产亚洲| 伦理电影免费视频| 欧美少妇被猛烈插入视频| 黑人猛操日本美女一级片| 欧美另类一区| 国产成人a∨麻豆精品| 少妇 在线观看| 另类精品久久| www.自偷自拍.com| 欧美av亚洲av综合av国产av | av线在线观看网站| 精品亚洲成a人片在线观看| 国产精品香港三级国产av潘金莲 | 99热网站在线观看| 国产精品亚洲av一区麻豆 | 免费观看a级毛片全部| 国产成人精品婷婷| 大片电影免费在线观看免费| 国产精品三级大全| 日韩三级伦理在线观看| 97在线视频观看| 国产精品成人在线| 久久精品国产自在天天线| 国产成人精品婷婷| 国产精品一区二区在线不卡| 在现免费观看毛片| 日韩中文字幕欧美一区二区 | 黑人欧美特级aaaaaa片| 亚洲欧美一区二区三区久久| 午夜激情av网站| videos熟女内射| 一区二区日韩欧美中文字幕| 色94色欧美一区二区| 精品国产乱码久久久久久小说| 成年女人毛片免费观看观看9 | 韩国精品一区二区三区| 精品人妻一区二区三区麻豆| 在线观看一区二区三区激情| 尾随美女入室| 你懂的网址亚洲精品在线观看| 成年美女黄网站色视频大全免费| 日本av免费视频播放| 七月丁香在线播放| 满18在线观看网站| 国产一区二区三区综合在线观看| 久久久久久久久久久久大奶| av免费在线看不卡| 久久国产亚洲av麻豆专区| 亚洲欧美中文字幕日韩二区| 麻豆精品久久久久久蜜桃| 99久久中文字幕三级久久日本| 久久久久久久久久久久大奶| 电影成人av| 亚洲国产日韩一区二区| 丁香六月天网| 国产老妇伦熟女老妇高清| 日日爽夜夜爽网站| 一区二区三区激情视频| 日本欧美视频一区| 色网站视频免费| 在线天堂最新版资源| 欧美激情 高清一区二区三区| 亚洲一区中文字幕在线| 丝袜美腿诱惑在线| 亚洲综合精品二区| www.熟女人妻精品国产| 中文字幕另类日韩欧美亚洲嫩草| 成人二区视频| 精品一区在线观看国产| 岛国毛片在线播放| 欧美国产精品va在线观看不卡| 日韩不卡一区二区三区视频在线| 宅男免费午夜| 国产精品嫩草影院av在线观看| 午夜av观看不卡| 久久久久久久亚洲中文字幕| 啦啦啦视频在线资源免费观看| 日韩av不卡免费在线播放| 丝袜喷水一区| 国产成人a∨麻豆精品| 国产 一区精品| 国产xxxxx性猛交| 黄色毛片三级朝国网站| av在线观看视频网站免费| 美女午夜性视频免费| 丝袜美足系列| 中文字幕人妻熟女乱码| 亚洲,欧美精品.| 国产精品久久久久久精品电影小说| 人人妻人人澡人人看| 国产av一区二区精品久久| 99久国产av精品国产电影| 久久久久精品久久久久真实原创| 中文欧美无线码| 久久午夜综合久久蜜桃| 国产精品熟女久久久久浪| 久久精品国产自在天天线| 少妇被粗大的猛进出69影院| av女优亚洲男人天堂| 一级毛片 在线播放| videosex国产| 久久久久久久国产电影| 啦啦啦在线免费观看视频4| 国产一区二区三区av在线| 亚洲成av片中文字幕在线观看 | 亚洲五月色婷婷综合| 丰满乱子伦码专区| 母亲3免费完整高清在线观看 | 久久精品国产亚洲av涩爱| 亚洲精品中文字幕在线视频| 人人澡人人妻人| 亚洲色图 男人天堂 中文字幕| 国产在线视频一区二区| 欧美 日韩 精品 国产| 黄色毛片三级朝国网站| 免费播放大片免费观看视频在线观看| 不卡视频在线观看欧美| 国产精品久久久久久久久免| xxxhd国产人妻xxx| 国产欧美日韩综合在线一区二区| 大香蕉久久网| 老熟女久久久| 亚洲精品国产av成人精品| 可以免费在线观看a视频的电影网站 | 日日摸夜夜添夜夜爱| 搡女人真爽免费视频火全软件| 成人亚洲欧美一区二区av| 男女午夜视频在线观看| 99久国产av精品国产电影| 熟女少妇亚洲综合色aaa.| 欧美激情高清一区二区三区 | 亚洲精品成人av观看孕妇| 黑人欧美特级aaaaaa片| 日韩中字成人| 人体艺术视频欧美日本| 亚洲欧美一区二区三区黑人 | 国产无遮挡羞羞视频在线观看| 国产成人av激情在线播放| 久久精品久久久久久噜噜老黄| 99精国产麻豆久久婷婷| 日本欧美视频一区| 亚洲五月色婷婷综合| 久久99热这里只频精品6学生| 精品国产乱码久久久久久小说| 777米奇影视久久| 午夜福利影视在线免费观看| 久久精品国产亚洲av天美| 在线免费观看不下载黄p国产| 免费看av在线观看网站| 纯流量卡能插随身wifi吗| 久久精品国产亚洲av天美| 宅男免费午夜| 亚洲色图 男人天堂 中文字幕| 欧美xxⅹ黑人| 亚洲在久久综合| 欧美av亚洲av综合av国产av | 久久 成人 亚洲| 国产男人的电影天堂91| 中文欧美无线码| 99国产综合亚洲精品| 一区福利在线观看| 蜜桃国产av成人99| 免费在线观看视频国产中文字幕亚洲 | 精品一区二区免费观看| 精品国产一区二区久久| 各种免费的搞黄视频| 国产精品欧美亚洲77777| 黄片播放在线免费| 国产免费视频播放在线视频| 国语对白做爰xxxⅹ性视频网站| 精品第一国产精品| 成人国产av品久久久| 交换朋友夫妻互换小说| 日韩,欧美,国产一区二区三区| 国产精品久久久av美女十八| 久久精品久久久久久久性| 夜夜骑夜夜射夜夜干| 国产高清国产精品国产三级| 亚洲欧洲国产日韩| 精品福利永久在线观看| www.av在线官网国产| 国产成人精品一,二区| 丰满饥渴人妻一区二区三| av国产久精品久网站免费入址| 男女边吃奶边做爰视频| 国产国语露脸激情在线看| 成人毛片60女人毛片免费| 十八禁网站网址无遮挡| 国产精品久久久av美女十八| 蜜桃国产av成人99| 亚洲欧美中文字幕日韩二区| 91精品国产国语对白视频| 国产精品人妻久久久影院| 黄片无遮挡物在线观看| 免费观看在线日韩| 中文字幕人妻丝袜一区二区 | 一级a爱视频在线免费观看| 国产精品久久久久久av不卡| 国产精品三级大全| 亚洲欧美成人综合另类久久久| 日韩人妻精品一区2区三区| videosex国产| 午夜福利,免费看| 男人添女人高潮全过程视频| 精品99又大又爽又粗少妇毛片| 日韩 亚洲 欧美在线| 精品国产国语对白av| 久久综合国产亚洲精品| 国产成人精品婷婷| 亚洲美女视频黄频| 街头女战士在线观看网站| 国产福利在线免费观看视频| 大香蕉久久网| 国产伦理片在线播放av一区| 久久久久久久亚洲中文字幕| 女的被弄到高潮叫床怎么办| 亚洲精品第二区| 又黄又粗又硬又大视频| 少妇猛男粗大的猛烈进出视频| 制服人妻中文乱码| 90打野战视频偷拍视频| 日韩精品有码人妻一区| 亚洲精品久久久久久婷婷小说| 国产有黄有色有爽视频| www.av在线官网国产| 宅男免费午夜| 久久精品aⅴ一区二区三区四区 | 亚洲欧美成人精品一区二区| av在线老鸭窝| 伊人久久国产一区二区| 国产一级毛片在线| 最近的中文字幕免费完整| 色婷婷久久久亚洲欧美| 人人妻人人添人人爽欧美一区卜| 日本猛色少妇xxxxx猛交久久| 美女国产视频在线观看| 99热国产这里只有精品6| av在线观看视频网站免费| 欧美精品人与动牲交sv欧美| 中文字幕人妻丝袜制服| 成人免费观看视频高清| 99国产精品免费福利视频| 18+在线观看网站| 一区福利在线观看| 欧美在线黄色| 一级爰片在线观看| 涩涩av久久男人的天堂| 国产深夜福利视频在线观看| 纯流量卡能插随身wifi吗| 久热久热在线精品观看| 精品少妇一区二区三区视频日本电影 | 狠狠精品人妻久久久久久综合| 国产精品99久久99久久久不卡 | 一边亲一边摸免费视频| 在线观看三级黄色| av又黄又爽大尺度在线免费看| 一区二区av电影网| av免费观看日本| 男人操女人黄网站| 国产一区二区三区av在线| 天天躁夜夜躁狠狠久久av| 中文字幕另类日韩欧美亚洲嫩草| 夫妻性生交免费视频一级片| 国产成人精品福利久久| 日韩av不卡免费在线播放| 免费不卡的大黄色大毛片视频在线观看| 久久久久久久精品精品| 亚洲一区中文字幕在线| 九九爱精品视频在线观看| 亚洲第一青青草原| 1024视频免费在线观看| 亚洲精品自拍成人| 这个男人来自地球电影免费观看 | 国产精品香港三级国产av潘金莲 | 欧美亚洲 丝袜 人妻 在线| 亚洲av中文av极速乱| 日韩av不卡免费在线播放| 国产精品 国内视频| 午夜日本视频在线| freevideosex欧美| 亚洲av国产av综合av卡| 精品一区二区免费观看| 午夜91福利影院| 国产精品久久久久久精品古装| 精品人妻在线不人妻| 欧美日韩一区二区视频在线观看视频在线| 国产一区二区三区av在线| 校园人妻丝袜中文字幕| 黑人巨大精品欧美一区二区蜜桃| 欧美最新免费一区二区三区| 精品一品国产午夜福利视频| 肉色欧美久久久久久久蜜桃| 一级毛片 在线播放| 热re99久久精品国产66热6| 午夜精品国产一区二区电影| 熟女电影av网| 国产精品人妻久久久影院| 亚洲精品中文字幕在线视频| 午夜福利,免费看| 99久久中文字幕三级久久日本| 亚洲精品成人av观看孕妇| 国产有黄有色有爽视频| 精品少妇久久久久久888优播| av在线老鸭窝| 日本av免费视频播放| 亚洲精品国产av成人精品| 精品少妇黑人巨大在线播放| 各种免费的搞黄视频| 妹子高潮喷水视频| 交换朋友夫妻互换小说| 综合色丁香网| 欧美精品高潮呻吟av久久| 亚洲欧美成人综合另类久久久| 亚洲欧美精品综合一区二区三区 | 国产成人精品福利久久| 色婷婷av一区二区三区视频| 少妇猛男粗大的猛烈进出视频| 国产欧美日韩综合在线一区二区| 校园人妻丝袜中文字幕| 男人舔女人的私密视频| 18+在线观看网站| videosex国产| 美女大奶头黄色视频| 人成视频在线观看免费观看| 久久久久久久大尺度免费视频| 亚洲精品第二区| 久久久久久免费高清国产稀缺| 久久久久久久国产电影| 十八禁高潮呻吟视频| 国产色婷婷99| 熟女av电影| 国产高清不卡午夜福利| 亚洲精品aⅴ在线观看| 黄片无遮挡物在线观看| 美女国产视频在线观看| 国产精品 欧美亚洲| 亚洲色图综合在线观看| 欧美 亚洲 国产 日韩一| 国产精品国产三级国产专区5o| 18禁观看日本| 成年女人在线观看亚洲视频| 国产探花极品一区二区| 黄频高清免费视频| 久久99精品国语久久久| 成人国产麻豆网| 午夜久久久在线观看| xxxhd国产人妻xxx| 日本欧美国产在线视频| 超碰97精品在线观看| 精品亚洲成a人片在线观看| 青春草视频在线免费观看| 国产精品二区激情视频| 精品国产一区二区三区久久久樱花| 人成视频在线观看免费观看| 哪个播放器可以免费观看大片| 亚洲综合色惰| 亚洲欧洲精品一区二区精品久久久 | 男女高潮啪啪啪动态图| 午夜福利视频精品| 美女国产高潮福利片在线看| 麻豆精品久久久久久蜜桃| www.自偷自拍.com| 成年动漫av网址| 免费大片黄手机在线观看| 国产成人精品久久久久久| 街头女战士在线观看网站| 色吧在线观看| 久久ye,这里只有精品| 久久韩国三级中文字幕| 欧美日韩av久久| 久久人人97超碰香蕉20202| 赤兔流量卡办理| 午夜福利在线免费观看网站| 男女啪啪激烈高潮av片| 亚洲av成人精品一二三区| 可以免费在线观看a视频的电影网站 | 少妇的逼水好多| 亚洲av电影在线进入| 汤姆久久久久久久影院中文字幕| 菩萨蛮人人尽说江南好唐韦庄| 9热在线视频观看99| 亚洲一区中文字幕在线| 丰满饥渴人妻一区二区三| 欧美精品高潮呻吟av久久| 国产成人一区二区在线| 永久网站在线| 亚洲美女视频黄频| 在线观看美女被高潮喷水网站| 亚洲国产精品成人久久小说| 久久精品国产鲁丝片午夜精品| 高清视频免费观看一区二区| 国产免费福利视频在线观看| 26uuu在线亚洲综合色| 成人18禁高潮啪啪吃奶动态图| 夜夜骑夜夜射夜夜干| 久久人人97超碰香蕉20202| 免费在线观看完整版高清| 国产女主播在线喷水免费视频网站| 日韩制服骚丝袜av| 久久99热这里只频精品6学生| 亚洲欧美中文字幕日韩二区| 国产亚洲av片在线观看秒播厂| 精品酒店卫生间| 制服诱惑二区| 亚洲内射少妇av| 丰满少妇做爰视频| 亚洲成人一二三区av| 久久久精品免费免费高清| 一级毛片黄色毛片免费观看视频| 婷婷色综合大香蕉| 中国国产av一级| 欧美日韩av久久| 国产日韩欧美亚洲二区| 免费大片黄手机在线观看| 超色免费av| 色哟哟·www| 99国产综合亚洲精品| 国产极品粉嫩免费观看在线| 久久久久人妻精品一区果冻| 亚洲国产精品成人久久小说| 黑人巨大精品欧美一区二区蜜桃| 国产精品不卡视频一区二区| 国产成人91sexporn| 丰满饥渴人妻一区二区三| 中文天堂在线官网| 久久久久网色| 亚洲男人天堂网一区| 亚洲欧洲国产日韩| 不卡av一区二区三区| 成年女人在线观看亚洲视频| 香蕉国产在线看| videossex国产| 日本91视频免费播放| 黑丝袜美女国产一区| 日本av免费视频播放| 青春草亚洲视频在线观看| 久久久久国产精品人妻一区二区| 久久精品国产亚洲av天美| 女性生殖器流出的白浆| 久久精品国产自在天天线| 9色porny在线观看| 日本欧美国产在线视频| 丝袜喷水一区| 亚洲第一区二区三区不卡| 国产精品无大码| 午夜免费鲁丝| 国产成人欧美| 人妻 亚洲 视频| 亚洲精品日韩在线中文字幕| 欧美国产精品一级二级三级| 18禁观看日本| 国产精品 国内视频| 亚洲精品av麻豆狂野| 青春草视频在线免费观看| av福利片在线| 国产精品熟女久久久久浪| 高清视频免费观看一区二区| 少妇的丰满在线观看| 超碰97精品在线观看| 精品国产乱码久久久久久男人| 高清av免费在线| 婷婷色综合www| 80岁老熟妇乱子伦牲交| 中文欧美无线码| 午夜福利视频精品| 久久久久久久亚洲中文字幕| 伊人亚洲综合成人网| 久久久久久久久免费视频了| 在线亚洲精品国产二区图片欧美| 久久久久久久久久人人人人人人| 少妇的丰满在线观看| 亚洲欧美精品综合一区二区三区 | 国产免费现黄频在线看| 十分钟在线观看高清视频www| 国产老妇伦熟女老妇高清| 国产成人一区二区在线| 久久97久久精品| 国产在线免费精品| 午夜老司机福利剧场| 亚洲欧美一区二区三区黑人 | 一级毛片黄色毛片免费观看视频| 中文字幕精品免费在线观看视频| 看十八女毛片水多多多| 精品一区二区三区四区五区乱码 | 国产免费一区二区三区四区乱码| 国产一区有黄有色的免费视频| 免费高清在线观看视频在线观看| 人人澡人人妻人| 男女午夜视频在线观看| 久久久亚洲精品成人影院| 天堂8中文在线网| 亚洲国产成人一精品久久久| 亚洲成色77777| 在线观看三级黄色| 99热全是精品| 国产白丝娇喘喷水9色精品| 中文字幕色久视频| 亚洲欧美日韩另类电影网站| 91精品三级在线观看| 国产精品偷伦视频观看了| 少妇猛男粗大的猛烈进出视频| 天天躁狠狠躁夜夜躁狠狠躁| 精品酒店卫生间| 大码成人一级视频| 一级黄片播放器| 黄色配什么色好看| 美女国产视频在线观看| 最近2019中文字幕mv第一页| 90打野战视频偷拍视频| 国产精品 欧美亚洲| 久久久久久人妻| 亚洲欧美一区二区三区黑人 | 亚洲国产欧美日韩在线播放| 90打野战视频偷拍视频| 制服人妻中文乱码| 91成人精品电影| 青草久久国产| 亚洲精品国产av成人精品| 午夜福利,免费看| 日韩三级伦理在线观看| 国产无遮挡羞羞视频在线观看| 久久人妻熟女aⅴ| 男女边吃奶边做爰视频| 中文字幕制服av| 久久精品国产亚洲av高清一级| 天美传媒精品一区二区| 日本欧美视频一区| 日本色播在线视频| 99久国产av精品国产电影| 国产探花极品一区二区| 欧美中文综合在线视频| 国产爽快片一区二区三区| 日韩av不卡免费在线播放| 精品少妇内射三级| 赤兔流量卡办理| 亚洲精品乱久久久久久| 久热久热在线精品观看| 欧美精品人与动牲交sv欧美| 99九九在线精品视频| 国产精品二区激情视频| 国产精品 欧美亚洲| 国产乱人偷精品视频| 91aial.com中文字幕在线观看| 国产片特级美女逼逼视频| 国产在线视频一区二区| 久久久精品94久久精品| 免费少妇av软件| 国产国语露脸激情在线看| 亚洲三区欧美一区| 欧美精品一区二区大全| 咕卡用的链子| 国产在线免费精品| 丰满迷人的少妇在线观看| 久热这里只有精品99| 亚洲综合色惰| 亚洲国产成人一精品久久久| 亚洲激情五月婷婷啪啪| 亚洲av免费高清在线观看| 大陆偷拍与自拍| 国精品久久久久久国模美| 亚洲视频免费观看视频| 爱豆传媒免费全集在线观看|