精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

OpenHarmony集成OCR三方庫實現文字提取

系統 OpenHarmony
本樣例基于Tesseract 庫進行適配,使其可以運行在 OpenAtom OpenHarmony(以下簡稱“OpenHarmony”)上,并新增N-API接口供上層應用調用,這樣上層應用就可以使用Tesseract提供的相關功能。

??想了解更多關于開源的內容,請訪問:??

??51CTO 開源基礎軟件社區??

??https://ost.51cto.com??

一、簡介

Tesseract (Apache 2.0 License)是一個可以進行圖像OCR識別的C++庫,可以跨平臺運行 。本樣例基于Tesseract 庫進行適配,使其可以運行在 OpenAtom OpenHarmony(以下簡稱“OpenHarmony”)上,并新增N-API接口供上層應用調用,這樣上層應用就可以使用Tesseract提供的相關功能。

二、效果展示

動物圖片識別文字

OpenHarmony集成OCR三方庫實現文字提取-開源基礎軟件社區

身份信息識別:

OpenHarmony集成OCR三方庫實現文字提取-開源基礎軟件社區

提取文字信息到本地文件:

OpenHarmony集成OCR三方庫實現文字提取-開源基礎軟件社區

相關代碼已經上傳至SIG倉庫,鏈接如下:
https://gitee.com/openharmony-sig/knowledge_demo_temp/tree/master/FA/OCRDemo。

三、目錄結構

OpenHarmony集成OCR三方庫實現文字提取-開源基礎軟件社區

四、調用流程

OpenHarmony集成OCR三方庫實現文字提取-開源基礎軟件社區


調用過程主要涉及到三方面,首先應用層實現樣例的效果,包括頁面的布局和業務邏輯代碼;中間層主要起橋梁的作用,提供N-API接口給應用調用,再通過三方庫的接口去調用具體的實現;Native層使用了三方庫Tesseract提供具體的實現功能。

五、源碼分析

本樣例源碼的分析主要涉及到兩個方面,一方面是N-API接口的實現,另一方面是應用層的頁面布局和業務邏輯。

N-API實現

1、首先在index.d.ts文件中定義好接口

/**
* 初始化文字識別引擎
* @param lang 識別的語言, eg:eng、chi_sim、 eng+chi_sim,為Null或不傳則為中英文(eng+chi_sim)
* @param trainDir 訓練模型目錄,為Null或不傳則為默認目錄
*
* @return 初始化是否成功 0=>成功,-1=>失敗
*/
export const initOCR: (lang: string, trainDir: string) => Promise<number>;

export const initOCR: (lang: string, trainDir: string, callback: AsyncCallback<number>) => void;

/**
* 開始識別
* @param imagePath 圖片路徑(當前支持的圖片格式為png, jpg, tiff)
*
* @return 識別結果
*/
export const startOCR: (imagePath: string) => Promise<string>;
export const startOCR: (imagePath: string, callback: AsyncCallback<string>) => void;


/**
* 銷毀資源
*/
export const destroyOCR: () => void;

代碼中可以看出N-API接口initOCR和startOCR都采用了兩種方式,一種是Promise,一種是Callback的方式。在樣例的應用層,使用的是它們的Callback方式。

2、注冊N-API模塊和接口

EXTERN_C_START
static napi_value Init(napi_env env, napi_value exports) {
napi_property_descriptor desc[] = {
{
"initOCR", nullptr, InitOCR, nullptr, nullptr, nullptr, napi_default, nullptr
},
{
"startOCR", nullptr, StartOCR, nullptr, nullptr, nullptr, napi_default, nullptr
},
{
"destroyOCR", nullptr, DestroyOCR, nullptr, nullptr, nullptr, napi_default, nullptr
},
{
};
napi_define_properties(env, exports, sizeof(desc) / sizeof(desc[0]), desc);
return exports;
}
EXTERN_C_END

static napi_module demoModule = {
.nm_version = 1,
.nm_flags = 0,
.nm_filename = nullptr,
.nm_register_func = Init,
.nm_modname = "tesseract",
.nm_priv = ((void *)0),
.reserved = {
0
},
};

extern "C" __attribute__((constructor)) void RegisterHelloModule(void) {
napi_module_register(& demoModule);
}

通過nm_modname定義模塊名,nm_register_func注冊接口函數,在Init函數中指定了JS中initOCR,startOCR,destroyOCR對應的本地實現函數,這樣就可以在對應的本地實現函數中調用三方庫Tesseract的具體實現了。

3、以startOCR的Callback方式為例介紹N-API中的具體實現

static napi_value StartOCR(napi_env env, napi_callback_info info) {
OH_LOG_ERROR(LogType::LOG_APP, "OCR StartOCR 111");
size_t argc = 2;
napi_value args[2] = { nullptr };//1. 獲取參數
napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);


//2. 共享數據
auto addonData = new StartOCRAddOnData{
.asyncWork = nullptr,
};
//3. N-API類型轉成C/C++類型
char imagePath[1024] = { 0 };
size_t length = 0;
napi_get_value_string_utf8(env, args[0], imagePath, 1024, &length);

addonData->args0 = string(imagePath);

napi_create_reference(env, args[1], 1, &addonData->callback);

//4. 創建async work
napi_value resourceName = nullptr;
napi_create_string_utf8(env, "startOCR", NAPI_AUTO_LENGTH, &resourceName);
napi_create_async_work(env, nullptr, resourceName, executeStartOCR, completeStartOCRForCallback, (void *)addonData, &addonData->asyncWork);

//將創建的async work加到隊列中,由底層調度執行
napi_queue_async_work(env, addonData->asyncWork);

napi_value result = 0;
napi_get_null(env, &result);

return result;
}

首先通過napi_get_cb_info方法獲取JS側傳入的參數信息,將參數轉成C++對應的類型,然后創建異步工作,異步工作的方法參數中包含,執行的函數以及函數執行完成的回調函數。
我們看一下執行函數:

static void executeStartOCR(napi_env env, void* data) {
//通過data來獲取數據
StartOCRAddOnData * addonData = (StartOCRAddOnData *)data;
napi_value resultValue;
try {
if (api != nullptr) {
//調用具體的實現,讀取圖片像素
PIX * pix = pixRead((const char*)addonData->args0.c_str());
//設置api的圖片像素
api->SetImage(pix);

//調用文字提取接口,獲取圖片中的文字
char * result = api->GetUTF8Text();
addonData->result = result;

//釋放資源
pixDestroy (& pix);
delete[] result;
}
} catch (std::exception e) {
std::string error = "Error: ";
if (initResult != 0) {
error += "please first init tesseractocr.";
} else {
error += e.what();
}
addonData->result = error;
}
}

這個方法中通過data獲取JS傳入的參數,然后調用Tesseract庫中提供的接口,調用具體的文字提取功能,獲取圖片中的文字。

執行完成后,會回調到completeStartOCRForCallback,在這個方法中會將執行函數中返回的結果轉換為JS的對應類型,然后通過Callback的方式返回。

static void completeStartOCRForCallback(napi_env env, napi_status status, void * data) {
StartOCRAddOnData * addonData = (StartOCRAddOnData *)data;
napi_value callback = nullptr;
napi_get_reference_value(env, addonData->callback, &callback);
napi_value undefined = nullptr;
napi_get_undefined(env, &undefined);
napi_value result = nullptr;
napi_create_string_utf8(env, addonData->result.c_str(), addonData->result.length(), &result);
//執行回調函數
napi_value returnVal = nullptr;
napi_call_function(env, undefined, callback, 1, &result, &returnVal);
//刪除napi_ref對象
if (addonData->callback != nullptr) {
napi_delete_reference(env, addonData->callback);
}
//刪除異步工作項
napi_delete_async_work(env, addonData->asyncWork);
delete addonData;
}

應用層實現

應用層主要分為三個模塊:動物圖片文字識別,身份信息識別,提取文字到本地文件

1、動物圖片文字識別

build() {
Column() {
Row() {
Text('點擊圖片進行文字提取 提取結果 : ').fontSize('30fp').fontColor(Color.Blue)
Text(this.ocrResult).fontSize('50fp').fontColor(Color.Red)
}.margin('10vp').height('10%').alignItems(VerticalAlign.Center)

Grid() {
ForEach(this.images, (item, index) => {
GridItem() {
AnimalItem({
path1: item[0],
path2: item[1]
});
}
})
}
.padding({left: this.columnSpace, right: this.columnSpace})
.columnsTemplate("1fr 1fr 1fr") // Grid寬度均分成3份
.rowsTemplate("1fr 1fr") // Grid高度均分成2份
.rowsGap(this.rowSpace) // 設置行間距
.columnsGap(this.columnSpace) // 設置列間距
.width('100%')
.height('90%')
}
.backgroundColor(Color.Pink)
}

布局主要使用了Grid的網格布局,每個Item都是對應的圖片,通過點擊圖片可以對點擊圖片進行文字提取,將提取出的文字顯示在標題欄。

2、身份信息識別

build() {
Row() {
Column() {
Image('/common/idImages/aobamao.jpg')
.onClick(() => {
//點擊圖片進行信息識別
console.log('OCR begin dialog open 111');
this.ocrDialog.open();
ToolUtils.ocrResult(ToolUtils.aobamao, (result) => {
console.log('111 OCR result = ' + result);
this.result = result;
this.ocrDialog.close();
});
})
.margin('10vp')
.objectFit(ImageFit.Auto)
.height('50%')
Image('/common/idImages/weixiaobao.jpg')
.onClick(() => {
//點擊圖片進行信息識別
this.ocrDialog.open();
ToolUtils.ocrResult(ToolUtils.weixiaobao, (result) => {
console.log('111 OCR result = ' + result);
this.result = result;
this.ocrDialog.close();
});
})
.margin('10vp')
.objectFit(ImageFit.Auto)
.height('50%')
}
.width(this.screenWidth/2)
.padding('20vp')
Column() {
Text(this.title).height('10%').fontSize('30fp').fontColor(this.titleColor)

Column() {
Text(this.result)
.fontColor('#0000FF')
.fontSize('50fp')
}.justifyContent(FlexAlign.Center).alignItems(HorizontalAlign.Center).height('90%')
}
.justifyContent(FlexAlign.Start)
.width('50%')
}
.width('100%')
.height('100%')
}

身份信息識別的布局最外層是一個水平布局,分為左右兩部分,左邊的子布局是垂直布局,里面是兩張不同的身份證圖片,右邊子布局也是垂直布局,主要是標題區和識別結果的內容顯示區。

3、提取文字到本地文件

Row() {
Column() {
Image('/common/save2FileImages/testImage1.png')
.onClick(() => {
//點擊圖片進行信息識別
ToolUtils.ocrResult(ToolUtils.testImage1, (result) => {
let path = this.dir + 'ocrresult1.txt';
try {
let fd = fileio.openSync(path, 0o100 | 0o2, 0o666);
fileio.writeSync(fd, result);
fileio.closeSync(fd);
this.displayText = '文件寫入' + path;
} catch (e) {
console.log('OCR fileio error = ' + e);
}
});
})
Image('/common/save2FileImages/testImage2.png')
.onClick(() => {
//點擊圖片進行信息識別
ToolUtils.ocrResult(ToolUtils.testImage2, (result) => {
let path = this.dir + 'ocrresult2.txt';
let fd = fileio.openSync(path, 0o100 | 0o2, 0o666);
fileio.writeSync(fd, result);
fileio.closeSync(fd);
this.displayText = '文件寫入' + path;
});
})
}
Column() {
Text(this.title)
Column() {
Text(this.displayText)
}
}
}

這個功能首先通過接口識別出圖片中的文字,然后再通過fileio的能力將文字寫入文件中。

六、總結

樣例通過Native的方式將C++的三方庫集成到應用中,通過N-API方式提供接口給上層應用調用。對于依賴三方庫能力的應用,都可以使用這種方式來進行,移植三方庫到Native,通過N-API提供接口給應用調用。

??想了解更多關于開源的內容,請訪問:??

??51CTO 開源基礎軟件社區??

??https://ost.51cto.com??。

責任編輯:jianghua 來源: 51CTO開源基礎軟件社區
相關推薦

2023-02-07 15:43:13

三方庫適配鴻蒙

2022-10-11 15:04:28

NAPI開發鴻蒙

2022-04-25 09:00:46

npm包管理器

2022-01-14 09:57:14

鴻蒙HarmonyOS應用

2023-03-22 09:09:21

鴻蒙Speexdsp

2019-07-30 11:35:54

AndroidRetrofit

2021-09-26 10:43:08

注冊Istio集成

2022-11-21 16:15:41

ArkUI鴻蒙

2015-04-27 19:32:16

Moxtra

2014-07-22 10:56:45

Android Stu第三方類庫

2015-11-05 16:44:37

第三方登陸android源碼

2014-04-08 15:16:00

2014-07-25 09:33:22

2011-05-07 14:20:25

加密方案Transcoder BlackBerry

2011-07-25 14:14:49

iPhone SQLITE Pldatabase

2010-03-03 15:10:49

第三方Python庫

2013-08-14 09:50:32

iOS類庫

2021-10-11 06:38:52

Go開源庫語言

2020-06-04 07:48:08

Istio服務注冊API Server

2022-10-25 15:05:17

NAPI開發鴻蒙
點贊
收藏

51CTO技術棧公眾號

在线网址91| 成人午夜免费福利| 国产韩国精品一区二区三区| 欧美一区二区视频在线观看2022 | 欧美白人做受xxxx视频| 青娱乐精品视频| 欧美福利小视频| 日韩人妻一区二区三区| av一级久久| 欧美午夜宅男影院在线观看| 正在播放国产精品| 天天射天天色天天干| 美国欧美日韩国产在线播放| 欧美日韩成人精品| 久久国产柳州莫菁门| 试看120秒一区二区三区| 色婷婷亚洲综合| 人妻无码一区二区三区四区| 国产精品秘入口| 成人综合婷婷国产精品久久蜜臀| 国产精品久久久亚洲| 国产精品第一页在线观看| 大色综合视频网站在线播放| 日韩不卡中文字幕| 日本女人黄色片| 8av国产精品爽爽ⅴa在线观看| 亚洲综合色噜噜狠狠| 亚洲免费不卡| 精品推荐蜜桃传媒| 不卡视频在线看| 91pron在线| 一级日韩一级欧美| 水野朝阳av一区二区三区| 欧美激情第一页xxx| www.黄色com| 国产一区二区三区四区五区传媒| 亚洲第一偷拍网| 色哟哟网站在线观看| 亚洲精品成人一区| 欧美视频在线观看一区二区| 男人天堂网视频| 9765激情中文在线| 樱花草国产18久久久久| 一区二区三区四区视频在线观看| 欧美色综合一区二区三区| av在线一区二区| 国产亚洲欧美一区二区| 精品国产18久久久久久| 国产一区二区三区在线观看免费视频| 国产精品爽爽爽| 波多野结衣高清视频| 久久婷婷久久| 国产精品com| 中文字幕69页| 日韩va欧美va亚洲va久久| 欧美一区二区三区…… | 国产高清视频在线| 久久精品一区四区| 欧美性天天影院| www 日韩| 亚洲欧洲成人av每日更新| 亚洲欧洲三级| 国产淫片在线观看| 亚洲精品国产视频| 国产肉体ⅹxxx137大胆| 丁香影院在线| 欧美性生交大片免费| 国产福利视频在线播放| 国产免费不卡| 欧美色窝79yyyycom| 男女视频在线看| 国产95亚洲| 欧美mv日韩mv国产| 中文成人无字幕乱码精品区| 天天久久夜夜| 在线午夜精品自拍| 男人操女人的视频网站| 欧美视频二区| 国产91ⅴ在线精品免费观看| 免费观看日批视频| 精品一区二区三区在线播放 | 国内精品国产三级国产在线专| 久久精品久久精品久久| 亚洲欧美日本日韩| 国产欧洲精品视频| 亚洲乱码精品久久久久..| 91丨porny丨中文| 亚洲成人蜜桃| 欧美1—12sexvideos| 狠狠躁夜夜躁人人躁婷婷91| 成年人小视频网站| 国产va免费精品观看精品| 精品999在线播放| 免费看黄色的视频| 午夜视频一区| 国产成人精品一区二区在线| 99视频免费看| 久久精品一区蜜桃臀影院| 99re99热| 免费成人直播| 日韩欧美激情在线| 国产精品久久久久无码av色戒| 99九九热只有国产精品| 97免费中文视频在线观看| 国产偷人爽久久久久久老妇app| 国产剧情一区在线| 日本视频精品一区| 国产啊啊啊视频在线观看| 欧美在线色视频| 国产一级免费片| 第一会所sis001亚洲| 久久青草福利网站| 国产精品久久影视| 国产婷婷色一区二区三区| 国产资源在线免费观看| 全球中文成人在线| 日韩久久免费电影| 麻豆一区二区三区精品视频| 奇米影视7777精品一区二区| 国产亚洲一区在线播放| 国产在线观看免费麻豆| 91黄色免费网站| 完美搭档在线观看| 在线一区电影| 成人高清视频观看www| 国产一级在线观看| 欧美日韩一区二区免费视频| 亚洲一级Av无码毛片久久精品| 清纯唯美日韩| 日本国产高清不卡| 人妻少妇精品无码专区| 亚洲一区中文日韩| 国产黄色一区二区三区| 99精品综合| 国产日韩欧美黄色| 在线观看免费黄视频| 日本韩国欧美在线| 成人免费看aa片| 亚洲视频1区| 狠狠色噜噜狠狠狠狠色吗综合| 最新av在线播放| 欧美一区二区三区四区五区| 麻豆精品国产免费| 精品一区二区在线看| 在线观看国产一区| 天天综合91| xxx成人少妇69| 国产又大又黄的视频| 中文字幕一区二区三区四区不卡 | 国产乱码精品一区二区三区忘忧草| 日韩欧美亚洲v片| 久久毛片亚洲| 国产亚洲人成网站在线观看| 69av视频在线观看| 国产精品理伦片| 中文字幕12页| 欧美黄色大片网站| 国产91视觉| 蜜桃视频在线观看播放| 亚洲精品一区中文字幕乱码| 潘金莲一级淫片aaaaaa播放| 国产免费成人在线视频| 91看片在线免费观看| 日韩在线高清| 亚洲综合日韩在线| 不卡av免费观看| 日韩精品免费一线在线观看| 波多野结衣日韩| 国产精品第五页| 亚洲成a人片在线www| 一区二区日本视频| 日韩精品一区二区三区色偷偷| 99久久亚洲国产日韩美女| 日韩视频永久免费观看| 精品国自产在线观看| 无码av中文一区二区三区桃花岛| 草草影院第一页| 免费看欧美女人艹b| 丰满人妻一区二区三区53号| 黄色美女久久久| 国产精品444| 色a资源在线| 精品亚洲精品福利线在观看| 伊人影院中文字幕| 一区二区三区加勒比av| 国产精品1000部啪视频| 日韩av二区在线播放| 亚洲av综合色区| 亚洲ab电影| 成人免费视频a| 亚洲一二三四| 久久国产色av| 国产在线视频网站| 欧美一级日韩免费不卡| 亚洲欧美精品一区二区三区| 国产精品久久免费看| 深田咏美中文字幕| 蜜乳av一区二区| 日本中文字幕网址| 久久久久久久久久久妇女| 狠狠干一区二区| 国产日本亚洲| 日韩美女av在线免费观看| 成人福利在线观看视频| 亚洲欧洲午夜一线一品| 亚洲精品成人电影| 欧美日韩在线电影| 久久99精品波多结衣一区| 亚洲欧美另类小说视频| 蜜桃无码一区二区三区| 成人一区在线观看| 久久国产精品国产精品| 国产精品久久久一区二区| 国产女人18毛片| 日韩精品诱惑一区?区三区| 国产午夜精品在线| 精品视频一区二区三区| 国产精品免费久久久| 国模雨婷捆绑高清在线| 久久精品国产亚洲一区二区| 裸体xxxx视频在线| 亚洲国产成人精品电影| 国产视频在线观看免费| 欧美三级视频在线播放| 亚洲欧美一区二区三区在线观看| 亚洲线精品一区二区三区八戒| xxxxx99| 99这里只有精品| 国产亚洲精品成人a| 国产精品白丝jk黑袜喷水| 亚洲欧美国产日韩综合| 石原莉奈一区二区三区在线观看| 免费一级特黄特色毛片久久看| 欧美日本一区二区高清播放视频| 伊人婷婷久久| 欧美h版在线| 亚洲国产日韩综合一区| 精品国产一区探花在线观看| 蜜桃日韩视频| 亚州国产精品| 久久艳妇乳肉豪妇荡乳av| 神马日本精品| 欧美日韩三区四区| 国产成人精品999在线观看| 欧美二区在线看| 亚洲伊人春色| 欧美人与性禽动交精品| 免费精品国产的网站免费观看| 久久综合九色综合网站| 亚洲资源网站| 青娱乐国产91| 日韩片欧美片| 艳母动漫在线免费观看| 亚洲精品a级片| 真人做人试看60分钟免费| 欧美91大片| 日韩网站在线免费观看| 国产精品毛片在线| 久草在在线视频| 六月婷婷色综合| 亚洲精品mv在线观看| 国内精品写真在线观看| 不许穿内裤随时挨c调教h苏绵 | 久久国产精品久久w女人spa| 少妇高清精品毛片在线视频| 日韩经典一区二区| 极品粉嫩美女露脸啪啪| 国产成人亚洲综合a∨婷婷图片 | www.国产精品一区| av激情久久| 亚洲自拍电影| 在线视频不卡国产| 黄色免费成人| aaa毛片在线观看| 激情综合一区二区三区| 丰满少妇xbxb毛片日本| 久久蜜桃香蕉精品一区二区三区| 老熟妇一区二区| 亚洲日穴在线视频| 日韩视频免费观看高清| 欧美性xxxxxx少妇| xxxx国产精品| 亚洲美女视频网| 国产一二三区在线观看| 久久免费视频观看| 国产亚洲精品精品国产亚洲综合| 亚洲精品女av网站| 竹菊久久久久久久| 浴室偷拍美女洗澡456在线| 一本久道综合久久精品| 色婷婷成人在线| av成人免费在线观看| 亚洲天堂av中文字幕| 亚洲午夜精品网| 亚洲熟妇av乱码在线观看| 精品久久99ma| 欧美一区二区三区| 国产+成+人+亚洲欧洲| 激情亚洲小说| 精品无码久久久久国产| 91精品国产91久久久久久密臀 | 黄色一级视频免费| 在线视频你懂得一区| 丰满人妻一区二区三区免费视频 | 国产欧美一区二区三区另类精品 | 被灌满精子的波多野结衣| 日本人妖一区二区| 亚洲欧美日韩色| 亚洲色图欧美激情| 天天干天天插天天射| 亚洲成人av片在线观看| 免费在线观看av网站| 2020国产精品视频| 91久久精品无嫩草影院| 亚洲bbw性色大片| 午夜综合激情| 欧美图片自拍偷拍| 日韩理论片在线| 最近中文字幕免费观看| 日韩av在线一区| 欧美xxxxhdvideosex| 91精品视频专区| 日韩综合一区| 无码内射中文字幕岛国片| 99精品偷自拍| 日本一级淫片免费放| 日韩限制级电影在线观看| 国产精品刘玥久久一区| 国产精品视频xxx| 欧美三级伦理在线| 可以免费在线看黄的网站| 99精品国产99久久久久久白柏| 欧美交换国产一区内射| 91精品国产91久久久久久一区二区| 触手亚洲一区二区三区| 国产91在线视频| 亚洲理论电影| 已婚少妇美妙人妻系列| 2021久久国产精品不只是精品| 日韩aaaaaa| 亚洲成人在线视频播放| 黄页网站在线观看免费| 国产精品久久7| 亚洲毛片一区| 欧美无人区码suv| 欧美性猛xxx| 午夜av免费观看| 人人澡人人澡人人看欧美| 一区二区三区视频免费观看| 人妻有码中文字幕| 国产丝袜欧美中文另类| 午夜精品久久久久久久蜜桃| 亚洲午夜未满十八勿入免费观看全集| 亚洲成a人片| 亚洲欧美日韩国产yyy| 精品中文字幕一区二区小辣椒| 欧美丰满熟妇bbbbbb| 日韩欧美一区二区三区在线| 激情av在线播放| 免费久久久一本精品久久区| 日本特黄久久久高潮| 最新av电影网站| 欧美成人精品1314www| jizzjizz中国精品麻豆| 久久久久久久久一区| 久久精品三级| 日韩在线观看免| 日韩欧美一区二区久久婷婷| 99热99re6国产在线播放| 乱色588欧美| 蜜乳av一区二区| 国产一二三四在线| 精品一区二区三区电影| 欧美综合影院| 日韩日韩日韩日韩日韩| 国产婷婷色一区二区三区四区| 136福利视频导航| 久久久久久美女| 奇米狠狠一区二区三区| 三区视频在线观看| 午夜精品久久久久久久| √新版天堂资源在线资源| 91精品国产99久久久久久红楼| 中文精品视频| 美女网站视频色| 亚洲第一综合天堂另类专| 全球最大av网站久久| 美女av免费观看| 国产欧美日韩激情| 亚洲经典一区二区三区| 国产成人综合一区二区三区| 一区二区不卡| 久久午夜福利电影| 日韩精品一区国产麻豆| 欧美日韩五区| 国产综合中文字幕| 1区2区3区精品视频| 欧美成人综合在线| 国产99在线免费| 麻豆成人免费电影|