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

文本文字識別、公式識別、表格文字識別核心算法及思路及實踐-DBNet、CRNN、TrOCR 原創

發布于 2024-11-26 11:03
瀏覽
0收藏

前言

OCR技術作為文檔智能解析鏈路中的核心組件之一,貫穿整個技術鏈路,包括:文字識別、表格文字識別、公式識別,參看下面這張架構圖:

文本文字識別、公式識別、表格文字識別核心算法及思路及實踐-DBNet、CRNN、TrOCR-AI.x社區

前期介紹了很多關于文檔智能解析相關核心技術及思路,本著連載的目的,本次迎來介紹整個鏈路中的最后一塊拼圖-OCR。本文簡要介紹OCR常見落地的算法模型-DBNet、CRNN,并基于這兩個模型,簡單介紹文字識別在表格識別中參與的角色;并且額外介紹TrOCR這個端到端的模型,基于這個模型引入公式識別解析的思路及微調方法。

DBNet

DBNet是一種基于分割的文本檢測算法,算法將可微分二值化模塊(Differentiable Binarization)引入了分割模型,使得模型能夠通過自適應的閾值圖進行二值化,并且自適應閾值圖可以計算損失,能夠在模型訓練過程中起到輔助效果優化的效果。DBNet在效果和性能上都有比較大的優勢,是目前最常用的文本檢測算法之一。

模型結構

文本文字識別、公式識別、表格文字識別核心算法及思路及實踐-DBNet、CRNN、TrOCR-AI.x社區

DB文本檢測模型由三個部分組成:Backbone網絡、FPN網絡、Head網絡

1.Backbone網絡

負責提取圖像的特征。Backbone部分采用的是圖像分類網絡,論文中分別使用了ResNet50和ResNet18網絡。輸入圖像[1,3,640, 640] ,進入Backbone網絡,先經過一次卷積計算尺寸變為原來的1/2, 而后經過四次下采樣,輸出四個尺度特征圖:

文本文字識別、公式識別、表格文字識別核心算法及思路及實踐-DBNet、CRNN、TrOCR-AI.x社區

2.FPN網絡

文本文字識別、公式識別、表格文字識別核心算法及思路及實踐-DBNet、CRNN、TrOCR-AI.x社區

特征金字塔網絡

特征金子塔,Featurized image pyramid。負責結構增強特征。特征金字塔結構FPN是一種卷積網絡來高效提取圖片中各維度特征的常用方法。FPN網絡的輸入為Backbone部分的輸出,經FPN計算后輸出的特征圖的高度和寬度為原圖的1/4, 即[1, 256, 160, 160] 。

文本文字識別、公式識別、表格文字識別核心算法及思路及實踐-DBNet、CRNN、TrOCR-AI.x社區

DBNet中FPN特征提取融合過程:

  • 1/32特征圖: [1, N, 20, 20] ===> 卷積 + 8倍上采樣 ===> [1, 64, 160, 160]
  • 1/16特征圖:[1, N, 40, 40] ===> 加1/32特征圖的兩倍上采樣 ===> 新1/16特征圖 ==> 卷積 + 4倍上采樣 ===> [1, 64, 160, 160]
  • 1/8特征圖:[1, N, 80, 80] ===> 加新1/16特征圖的兩倍上采樣 ===>新1/8特征圖 ===> 卷積 + 2倍上采樣 ===> [1, 64, 160, 160]
  • 1/4特征圖:[1, N, 160, 160] ===> 加新1/8特征圖的兩倍上采樣 ===> 新1/4特征圖 ===> 卷積 ===> [1, 64, 160, 160]
  • 融合特征圖:[1, 256, 160, 160] # 將1/4,1/8, 1/16, 1/32特征圖按通道層合并在一起

3.Head網絡

負責計算文本區域概率圖的 Head 網絡,基于 FPN 特征進行上采樣,將 FPN 特征從原來的 1/4 尺寸映射回原圖尺寸。最終,Head 網絡會生成文本區域概率圖、文本區域閾值圖,并將這些圖合并,得到一個輸出大小為 [1, 3, 640, 640] 的結果。

文本文字識別、公式識別、表格文字識別核心算法及思路及實踐-DBNet、CRNN、TrOCR-AI.x社區

標簽生成

DB算法在進行模型訓練的時,需要根據標注框生成兩幅圖像:概率圖和閾值圖。生成過程如下圖所示:

文本文字識別、公式識別、表格文字識別核心算法及思路及實踐-DBNet、CRNN、TrOCR-AI.x社區

image圖像中的紅線是文本的標注框,文本標注框的點集合用如下形式表示:

文本文字識別、公式識別、表格文字識別核心算法及思路及實踐-DBNet、CRNN、TrOCR-AI.x社區

其中,n表示頂點的數量。

1.概率圖標簽Gs

在polygon圖像中,將紅色的標注框外擴distance得到綠色的polygon框,內縮distance得到藍色的polygon框。論文中標注框內縮和外擴使用相同的distance,其計算公式為:

文本文字識別、公式識別、表格文字識別核心算法及思路及實踐-DBNet、CRNN、TrOCR-AI.x社區

L代表周長,A代表面積,r代表縮放比例,通常r=0.4

多邊形輪廓的周長L和面積A通過Polygon庫計算獲得。

文本文字識別、公式識別、表格文字識別核心算法及思路及實踐-DBNet、CRNN、TrOCR-AI.x社區

得到上述效果簡單示例:

code ref:https://blog.csdn.net/yewumeng123/article/details/127503815

import cv2
import pyclipper
import numpy as np
from shapely.geometry import Polygon

def draw_img(subject, canvas, color=(255,0,0)):
    """作圖函數"""
    for i in range(len(subject)):
        j = (i+1)%len(subject)
        cv2.line(canvas, subject[i], subject[j], color)

# 論文默認shrink值
r=0.4
# 假定標注框
subject = ((100, 100), (250, 100), (250, 200), (100, 200))
# 創建Polygon對象
polygon = Polygon(subject)
# 計算偏置distance
distance = polygon.area*(1-np.power(r, 2))/polygon.length
print(distance)
# 25.2

# 創建PyclipperOffset對象
padding = pyclipper.PyclipperOffset()
# 向ClipperOffset對象添加一個路徑用來準備偏置
# padding.AddPath(subject, pyclipper.JT_ROUND, pyclipper.ET_CLOSEDPOLYGON)
# adding.AddPath(subject, pyclipper.JT_SQUARE, pyclipper.ET_CLOSEDPOLYGON)
padding.AddPath(subject, pyclipper.JT_MITER, pyclipper.ET_CLOSEDPOLYGON)

# polygon外擴
polygon_expand = padding.Execute(distance)[0]
polygon_expand = [tuple(l) for l in polygon_expand]
print(polygon_expand)
# [(75, 75), (275, 75), (275, 225), (75, 225)]
# polygon內縮
polygon_shrink = padding.Execute(-distance)[0]
polygon_shrink = [tuple(l) for l in polygon_shrink]
print(polygon_shrink)
# [(125, 125), (225, 125), (225, 175), (125, 175)]

# 作圖
canvas = np.zeros((300,350,3), dtype=np.uint8)
# 原輪廓用紅色線條展示
draw_img(subject, canvas, color=(0,0,255))
# 外擴輪廓用綠色線條展示
draw_img(polygon_expand, canvas, color=(0,255,0))
# 內縮輪廓用藍色線條展示
draw_img(polygon_shrink, canvas, color=(255,0,0))

cv2.imshow("Canvas", canvas) 
cv2.waitKey(0)

2.閾值圖標簽Gd

通過類似的過程,為閾值圖生成標簽。在 DBNet 中,閾值圖標簽的生成過程可以概述如下:

  • 多邊形文字區域擴張與收縮:首先,將原始的多邊形文字區域G 進行擴張,得到擴張后的區域Gd(綠線表示)。同時,將文字區域以偏移量D為標準進行收縮,得到收縮后的區域Gs(藍線表示)。其中,偏移量D與概率圖中的偏移量相同。
  • 邊界區域定義:收縮區域Gs和擴張區域Gd之間的間隙被視為文本區域的邊界。在這個邊界區域內,計算每個像素點到原始文字區域邊界G(紅線表示)的歸一化距離。這個距離是通過找到該像素點到最近的G邊界線段的距離來計算的。
  • 歸一化處理

           計算得到的歸一化距離顯示出:擴張框Gd和收縮框Gs 上的像素點距離值最大,而原始邊界G上的距離值最小(為 0)。

            隨著從GGsGd移動,距離值逐漸變大。

  • 距離轉換與二次歸一化
  • 計算完距離后,對這些距離值進行歸一化,即除以偏移量D,此時,GsGd上的距離值均變為 1,而G 上的值為 0,表現為以G為中心向GsGd 兩側的距離逐漸減小。
  • 接著,對這些歸一化值再進行一次變換,使用  減去這些距離值,最終得到:G上的值為 1,GsGd上的值為 0。這樣,Gs Gd區域內的像素值范圍變為 [0, 1]。
  • 最終標簽生成:在完成上述操作后,我們再次對這些值進行歸一化,得到像 [0.2, 0.8] 等不同范圍的標簽值。最終,這些值將作為閾值圖的標簽,幫助模型更好地學習文本區域與邊界之間的精確關系。

通過該過程生成的閾值圖標簽,結合 DBNet 的差分二值化策略,能夠有效提升文本檢測的邊界處理能力。

損失函數

損失函數為概率圖的損失 Ls、二值化圖的損失Lb和閾值圖的損失的和Lt

采用BCE Loss,為平衡正負樣本的比例,使用OHEM進行困難樣本挖掘,正樣本:負樣本=1:3:

文本文字識別、公式識別、表格文字識別核心算法及思路及實踐-DBNet、CRNN、TrOCR-AI.x社區

損失函數代碼ref:https://github.com/MhLiao/DB/blob/master/decoders/seg_detector_loss.py

文本識別算法-CRNN

模型包括三個部分,分別稱作卷積層、循環層以及轉錄層。

文本文字識別、公式識別、表格文字識別核心算法及思路及實踐-DBNet、CRNN、TrOCR-AI.x社區

CRNN網絡結構

卷積層由CNN構成,它的作用是從輸入的圖像中提取特征。提取的特征圖將會輸入到接下來的循環層中,循環層由RNN構成,它將輸出對特征序列每一幀的預測。最后轉錄層將得到的預測概率分布轉換成標記序列,得到最終的識別結果,它實際上就是模型中的損失函數。通過最小化損失函數,訓練由CNN和RNN組成的網絡。

1.卷積層 CRNN模型中的卷積層由一系列的卷積層、池化層、BN層構造而成。就像其他的CNN模型一樣,它將輸入的圖片轉化為具有特征信息的特征圖,作為后面循環層的輸入。當然,為了使提取的特征圖尺寸相同,輸入的圖像事先要縮放到固定的大小。

由于卷積神經網絡中卷積層和最大池化層的存在,使其具有平移不變性的特點。卷積神經網絡中的感受野指的是經過卷積層輸出的特征圖中每個像素對應的原輸入圖像區域的大小,它與特征圖上的像素從左到右,從上到下是一一對應的,如下圖所示。因此,可以將特征圖作為圖像特征的表示。

文本文字識別、公式識別、表格文字識別核心算法及思路及實踐-DBNet、CRNN、TrOCR-AI.x社區

2.循環層

在CRNN(Convolutional Recurrent Neural Network)模型中,循環層通常位于卷積層(Convolutional Layers)之后,用于處理卷積層提取的特征序列。

作用:

  • 捕捉序列中的上下文信息:循環層能夠記住之前處理過的信息,并利用這些信息來輔助當前的預測任務。
  • 處理任意長度的序列:與卷積神經網絡(CNN)不同,循環層可以處理變長的序列數據,因為它們可以逐個時間點地處理輸入。

文本文字識別、公式識別、表格文字識別核心算法及思路及實踐-DBNet、CRNN、TrOCR-AI.x社區

3.轉錄層

轉錄層的作用是將前面通過CNN層和RNN層得到的預測序列轉換成標記序列,得到最終的識別結果。簡單來說,就是選取預測序列中每個分量中概率最大的索引對應的符號作為識別結果,最終組成序列作為最終的識別序列。CRNN轉錄算法使用的是CTC算法,涉及原理可以自行查閱。

端到端的文本識別模型-TrOCR

TrOCR使用Transformer架構構建,包括用于提取視覺特征的圖像Transformer和用于語言建模的文本Transformer。在TrOCR中采用了普通的Transformer編碼器-解碼器結構。編碼器被設計為獲得圖像塊的表示,而解碼器被設計為在視覺特征和先前預測的指導下生成單詞片段序列。

文本文字識別、公式識別、表格文字識別核心算法及思路及實踐-DBNet、CRNN、TrOCR-AI.x社區

TrOCR的架構,其中編碼器-解碼器模型設計為預訓練圖像Transformer作為編碼器,預訓練文本Transformer作為解碼器。

1.編碼器

編碼器接收輸入圖像,并將其大小調整為固定大小(H,W)。由于Transformer編碼 器無法處理原始圖像,除非它們是一系列輸入tokens,因此編碼器將輸入圖像分解為一批 個固定大小為 (P,P) 的正方形patches,同時保證調整大小的圖像的寬度W和 高度H可被patch大小P整除,將patches展平為向量并線性投影到D維向量,即patch embeddings。D是Transformer在其所有層中的隱藏尺寸。

與ViT 和DeiT類似,論文保留了通常用于圖像分類任務的特殊標記"[CLS]"。"[CLS]"標記將來自所有patch embeddings的所有信息匯集在一起,并表示整個圖像。同時,當使用DeiT預訓練模型進行編碼器初始化時,論文還將蒸餾token保持在輸入序列中,這允許模型從教師模型學習。patch embeddings和兩個特殊tokens根據其絕對位置被賦予可學習的1D位置嵌入。

2.解碼器

使用TrOCR的原始Transformer解碼器。標準Transformer解碼器也有一個相同的層堆棧,其結構與編碼器中的層相似,只是解碼器在多頭自注意力和前饋網絡之間插入“encoder-decoder attention”,以在編碼器的輸出上分配不同的關注。在編碼器-解碼器注意模塊中,鍵(K)和值(V)來自編碼器輸出,而查詢(Q)來自解碼器輸入。此外,解碼器利用自注意力中的注意力掩碼來防止自己在訓練期間獲得未來的信息。基于解碼器的輸出將從解碼器的輸入向右移位一個位置,注意力掩碼需要確保位置i的輸出只和先前的輸出相關,即小于i的位置上的輸入:

來自解碼器的隱藏狀態通過線性層從模型維度投影到詞匯大小V的維度,而詞匯上的概率通過softmax函數計算。使用beam search來獲得最終輸出。

性能效果

文本文字識別、公式識別、表格文字識別核心算法及思路及實踐-DBNet、CRNN、TrOCR-AI.x社區

微調

  • 數據處理,helper.py

import pandas as pd
from sklearn.model_selection import train_test_split
import torch
from torch.utils.data import Dataset
from PIL import Image
from transformers import TrOCRProcessor


df = pd.read_csv('dataset/tex.csv')

train_df, test_df = train_test_split(df, test_size=0.1, shuffle=True, random_state=42)
# we reset the indices to start from zero
train_df.reset_index(drop=True, inplace=True)
test_df.reset_index(drop=True, inplace=True)

model_path = 'microsoft/trocr-base-stage1'


class IAMDataset(Dataset):
    def __init__(self, root_dir, df, processor, max_target_length=512):
        self.root_dir = root_dir
        self.df = df
        self.processor = processor
        self.max_target_length = max_target_length

    def __len__(self):
        return len(self.df)

    def __getitem__(self, idx):
        # get file name + text
        file_name = self.df['file_name'][idx]
        text = self.df['text'][idx]
        # prepare image (i.e. resize + normalize)
        image = Image.open(self.root_dir + file_name).convert("RGB")
        pixel_values = self.processor(image, return_tensors="pt").pixel_values
        # add labels (input_ids) by encoding the text
        labels = self.processor.tokenizer(
            text,
            padding="max_length",
            max_length=self.max_target_length,
            truncatinotallow=True
        ).input_ids
        # important: make sure that PAD tokens are ignored by the loss function
        labels = [label if label != self.processor.tokenizer.pad_token_id else -100 for label in labels]

        encoding = {"pixel_values": pixel_values.squeeze(), "labels": torch.tensor(labels)}
        return encoding


processor = TrOCRProcessor.from_pretrained(model_path)
train_dataset = IAMDataset(root_dir='./dataset/trainning_set/',
                           df=train_df,
                           processor=processor,
                           max_target_length=512
                           )
eval_dataset = IAMDataset(root_dir='./dataset/trainning_set/',
                          df=test_df,
                          processor=processor,
                          max_target_length=512
                          )


print("Number of training examples:", len(train_dataset))
print("Number of validation examples:", len(eval_dataset))
  • train.py

from helper import *


from transformers import VisionEncoderDecoderModel

model = VisionEncoderDecoderModel.from_pretrained("microsoft/trocr-base-stage1")

# set special tokens used for creating the decoder_input_ids from the labels
model.config.decoder_start_token_id = processor.tokenizer.cls_token_id
model.config.pad_token_id = processor.tokenizer.pad_token_id
# make sure vocab size is set correctly
model.config.vocab_size = model.config.decoder.vocab_size

# set beam search parameters
model.config.eos_token_id = processor.tokenizer.sep_token_id
model.config.max_length = 64
model.config.early_stopping = True
model.config.no_repeat_ngram_size = 3
model.config.length_penalty = 2.0
model.config.num_beams = 4

from transformers import Seq2SeqTrainer, Seq2SeqTrainingArguments

training_args = Seq2SeqTrainingArguments(
    predict_with_generate=True,
    evaluation_strategy="steps",
    per_device_train_batch_size=8,
    per_device_eval_batch_size=8,
    fp16=True,
    output_dir="./",
    logging_steps=2,
    save_steps=1000,
    eval_steps=200,
)


from datasets import load_metric

cer_metric = load_metric("cer")

def compute_metrics(pred):
    labels_ids = pred.label_ids
    pred_ids = pred.predictions

    pred_str = processor.batch_decode(pred_ids, skip_special_tokens=True)
    labels_ids[labels_ids == -100] = processor.tokenizer.pad_token_id
    label_str = processor.batch_decode(labels_ids, skip_special_tokens=True)

    cer = cer_metric.compute(predictinotallow=pred_str, references=label_str)

    return {"cer": cer}

from transformers import default_data_collator

# instantiate trainer
trainer = Seq2SeqTrainer(
    model=model,
    tokenizer=processor.feature_extractor,
    args=training_args,
    compute_metrics=compute_metrics,
    train_dataset=train_dataset,
    eval_dataset=eval_dataset,
    data_collator=default_data_collator,
)
trainer.train()

應用思路

1.文字識別在表格識別中的角色

表格識別主要包含三個模型

  • 單行文本檢測-DB
  • 單行文本識別-CRNN
  • 表格結構和cell坐標預測-SLANet

文本文字識別、公式識別、表格文字識別核心算法及思路及實踐-DBNet、CRNN、TrOCR-AI.x社區

流程說明:

  • 圖片由單行文字檢測模型檢測到單行文字的坐標,然后送入識別模型拿到識別結果。
  • 圖片由SLANet模型拿到表格的結構信息和單元格的坐標信息。
  • 由單行文字的坐標、識別結果和單元格的坐標一起組合出單元格的識別結果。
  • 單元格的識別結果和表格結構一起構造表格的html字符串。

2.TrOCR公式識別微調后效果 通過微調TrOCR模型,端到端的得到公式latex格式字符串。

文本文字識別、公式識別、表格文字識別核心算法及思路及實踐-DBNet、CRNN、TrOCR-AI.x社區

文本文字識別、公式識別、表格文字識別核心算法及思路及實踐-DBNet、CRNN、TrOCR-AI.x社區

參考文獻

  • Real-time Scene Text Detection with Differentiable Binarization,https://arxiv.org/pdf/1911.08947
  • An End-to-End Trainable Neural Network for Image-based Sequence Recognition and Its Application to Scene Text Recognition,https://arxiv.org/pdf/1507.05717
  • TrOCR: Transformer-based Optical Character Recognition with Pre-trained Models,https://arxiv.org/pdf/2109.10282
  • ??https://github.com/PaddlePaddle/PaddleOCR??


本文轉載自公眾號大模型自然語言處理  作者:余俊暉

原文鏈接:??https://mp.weixin.qq.com/s/F67wKhbYbPNVkc8Bg-ZsZA??


?著作權歸作者所有,如需轉載,請注明出處,否則將追究法律責任
已于2024-11-28 18:50:02修改
收藏
回復
舉報
回復
相關推薦
亚洲黄页网在线观看| 亚洲欧美一区二区久久| 国产999在线| 久久日免费视频| 96视频在线观看欧美| 一区二区三区四区蜜桃| 国产欧美日韩伦理| 在线观看亚洲黄色| 欧美精品91| 亚洲老司机av| 在线免费黄色网| 国产理论在线| 国产欧美精品一区二区色综合| 91精品国产综合久久久久久久久| 久久久久97国产| 国产一区二区精品福利地址| 91精品国产欧美日韩| 男女激情无遮挡| 快射av在线播放一区| 97国产一区二区| 91欧美精品午夜性色福利在线 | 亚洲黄色免费网站| 欧美日韩精品免费看| a在线观看免费| 肉丝袜脚交视频一区二区| 欧美成在线观看| 非洲一级黄色片| 美国成人xxx| 337p亚洲精品色噜噜狠狠| 色综合av综合无码综合网站| 在线观看中文字幕的网站| 国产亚洲短视频| 国产无套精品一区二区| 国产裸体永久免费无遮挡| 三级在线观看一区二区| 国内成人精品视频| 天堂网avav| 第一会所sis001亚洲| 日韩视频在线一区| 日韩欧美猛交xxxxx无码| 欧美美女色图| 成人av免费在线观看| 成人精品一区二区三区| 好吊色在线视频| 亚洲区第一页| 欧美日本高清视频| 911国产在线| 欧美午夜精品一区二区三区电影| 日韩精品免费在线播放| 成年女人免费视频| 麻豆精品一区| 91精品欧美久久久久久动漫| 亚洲视频一二三四| 国产精品第一国产精品| 在线一区二区三区| 欧美少妇性生活视频| 亚洲精品福利电影| 日韩欧亚中文在线| 无码人妻h动漫| 欧美黑人一区| 在线观看日韩高清av| www.国产区| 国产精品亚洲一区二区三区在线观看 | 精品少妇一区二区三区免费观| 成人看片黄a免费看视频| 日韩欧美一级片| 动漫av在线免费观看| 亚洲精品影片| 欧美变态口味重另类| 人妻精油按摩bd高清中文字幕| 日韩视频在线直播| 精品国产亚洲在线| 玖草视频在线观看| 国产欧美日韩在线观看视频| 中文字幕综合一区| 黄色片在线观看网站| 国产精品xvideos88| 亚洲91精品在线观看| 五月天综合激情| 日韩国产成人精品| 成人免费在线视频网址| 精品国产av鲁一鲁一区| av爱爱亚洲一区| 青娱乐一区二区| 免费在线观看黄| 亚洲妇女屁股眼交7| 国产一区二区视频免费在线观看| 福利视频亚洲| 精品久久久久久亚洲综合网| 亚洲中文字幕一区| 成人羞羞动漫| 久久久久久久久久久久av| 青青青国产在线| 理论片日本一区| 国产精品美女黄网| 成人在线观看黄色| 亚洲一区免费观看| 中文字幕在线导航| 91嫩草精品| 一区二区三区无码高清视频| 欧美日韩在线国产| 久久精品一区| 99porn视频在线| 国产在线视频网| 亚洲永久精品大片| 999在线免费视频| 91综合久久爱com| 一夜七次郎国产精品亚洲| 久久久久久久国产精品毛片| 日韩制服丝袜av| 国产乱码精品一区二区三区不卡| av中文字幕一区二区三区| 亚洲愉拍自拍另类高清精品| av污在线观看| 亚洲色图丝袜| 欧美激情亚洲精品| 亚洲最大成人av| 久久综合久久鬼色| www.xxx麻豆| 伊人久久一区| 亚洲一区999| www..com国产| 国产精品自产自拍| 一区二区成人国产精品| 电影一区二区三| 亚洲二区在线播放视频| 青青草精品在线视频| 日韩vs国产vs欧美| 久久综合一区| 深夜福利视频一区二区| 欧美一区二区精品| 亚洲AV成人无码网站天堂久久| 久久精品伊人| 欧美一区二区三区四区在线观看地址| 美女尤物在线视频| 欧美一区二区三区影视| 激情无码人妻又粗又大| 肉肉av福利一精品导航| 久久av一区二区三区漫画| 乱插在线www| 日韩无一区二区| 午夜精品一区二区三级视频| 精品制服美女久久| 亚洲亚洲精品三区日韩精品在线视频 | 欧美男男freegayvideosroom| 久久久久国色av免费观看性色 | 亚洲一区二区三区免费看| 范冰冰一级做a爰片久久毛片| 亚洲国内精品视频| 日本熟妇乱子伦xxxx| 粉嫩绯色av一区二区在线观看| 黄色一级视频播放| 精品一区二区三区视频在线播放 | 欧美理论一区二区| 日韩pacopacomama| 国产一区二区成人| 美女黄页在线观看| 欧美激情综合网| 日本超碰在线观看| 亚洲澳门在线| 懂色av一区二区三区在线播放| 欧美精品videosex| 亚洲第一中文字幕在线观看| 久久夜色精品亚洲| 91热门视频在线观看| 六月丁香婷婷在线| 欧美呦呦网站| 91久久精品美女高潮| 亚洲无线看天堂av| 亚洲第一网站免费视频| 亚洲 欧美 中文字幕| 国产精品日韩成人| 一级黄色高清视频| 一区精品久久| 欧洲精品一区色| www 久久久| 久久久欧美精品| 免费在线毛片| 9191国产精品| 日韩美女一级片| 久久久午夜精品| 热久久久久久久久| 亚洲国产二区| 亚洲v国产v| 亚洲伊人影院| 国产成人精品免费久久久久| 欧美极品另类| 亚洲激情在线观看| 久草热在线观看| 亚洲曰韩产成在线| 免费视频91蜜桃| 国产精品一区不卡| 国产男女激情视频| 欧美暴力喷水在线| 日韩高清专区| 国产一区二区三区亚洲| 国产精品久久久久久久久久新婚| a在线免费观看| 精品无码久久久久久国产| 在线视频1卡二卡三卡| 午夜精品久久久久影视| 2017亚洲天堂| 99国产精品视频免费观看| 少妇一级淫免费播放| 亚洲精品激情| 警花观音坐莲激情销魂小说| 亚洲人成网站77777在线观看| 亚洲jizzjizz日本少妇| 黑人巨大精品| 国产69精品久久久| 黄色片免费在线观看| 亚洲美女av在线| 亚洲欧美激情国产综合久久久| 欧美揉bbbbb揉bbbbb| 国产精品成人久久| 中文字幕亚洲视频| 亚洲午夜福利在线观看| 波波电影院一区二区三区| www,av在线| 蜜桃精品视频在线| 中文字幕乱码人妻综合二区三区| 欧美午夜在线视频| 正在播放一区| 精品日产免费二区日产免费二区| 国模精品一区二区三区| 日韩中文字幕一区二区高清99| 国产精品主播视频| 性欧美1819sex性高清| 8x海外华人永久免费日韩内陆视频| a级片国产精品自在拍在线播放| 在线a欧美视频| 精品乱码一区二区三四区视频 | 老牛影视av老牛影视av| 国产99久久久国产精品| 中文字幕第三区| 久久精品国产一区二区三区免费看| 国内外免费激情视频| 美女尤物久久精品| 国产精品97在线| 亚洲免费在线| 久久精品免费一区二区| 国产精品一卡| 成人免费观看毛片| 国产精品亚洲产品| 人妻熟女一二三区夜夜爱| 性一交一乱一区二区洋洋av| 成人在线免费观看av| 国产欧美日韩一级| 91视频最新入口| 另类av一区二区| 91看片在线免费观看| 日韩精品91亚洲二区在线观看| 校园春色 亚洲色图| 欧美a级一区二区| 久久这里只精品| 精品一区免费av| 日本泡妞xxxx免费视频软件| 成人午夜私人影院| 日韩av无码一区二区三区不卡| 成人久久视频在线观看| 欧美xxxxx精品| 久久久天堂av| 免费成人深夜蜜桃视频| 亚洲日本中文字幕区| 久久人人爽人人爽人人| 五月综合激情婷婷六月色窝| 久久久久久久极品| 欧洲国内综合视频| 国产精品一区二区人人爽| 日韩久久免费av| 五月婷婷综合久久| 亚洲天堂日韩电影| 精品孕妇一区二区三区| 欧美激情一区二区三区高清视频| 国产夫妻在线播放| 国产成人精品久久久| 国产aⅴ精品一区二区四区| 99免费在线视频观看| 粉嫩av一区二区| 欧洲国产精品| 在线精品小视频| 日韩少妇内射免费播放| 日韩电影免费在线| 日本中文字幕在线不卡| 99精品视频在线免费观看| 亚洲黄色网址大全| 亚洲一级二级在线| 怡红院av久久久久久久| 欧美一区二区三区色| 日本黄色大片视频| 中文字幕日韩精品在线观看| 丁香花视频在线观看| 国产精品成人国产乱一区| 日韩精品一区二区三区中文字幕| 欧美日韩天天操| 午夜精品久久| 老头吃奶性行交视频| 国产精品18久久久久| 99久久精品免费视频| 亚洲国产一区二区视频| 亚洲在线免费观看视频| 亚洲国产精品va在看黑人| 欧美精品电影| 国产精品678| 国产在线播放精品| 日本特级黄色大片| 久久精品电影| 国产国语老龄妇女a片| 国产精品视频免费看| 国产又黄又粗又爽| 日韩欧美激情在线| 日本在线免费看| 国产成人a亚洲精品| 98视频精品全部国产| 中文字幕在线亚洲三区| 天堂精品中文字幕在线| aaa黄色大片| 亚洲色图视频网站| 日韩欧美一级大片| 亚洲激情视频在线| 超碰97免费在线| www.成人三级视频| 亚洲破处大片| 午夜精品免费看| 国产亚洲综合色| 久久久精品福利| 亚洲激情视频在线| 国内在线视频| 国产二区不卡| 欧美日韩国产成人精品| 在线观看免费视频污| 国产精品看片你懂得| 久久久久精彩视频| 亚洲欧美日韩视频一区| 蜜桃视频m3u8在线观看| 国产美女精品在线观看| 欧美日本在线| caopor在线| 一区二区高清视频在线观看| 99久久精品国产一区二区成人| 色偷偷噜噜噜亚洲男人| 黄色精品视频网站| 亚洲国产一区在线| 欧美aⅴ一区二区三区视频| 少妇无套高潮一二三区| 日本福利一区二区| 国产福利免费在线观看| 国产精品都在这里| 久久99国产精一区二区三区| 日韩av资源在线| 中文幕一区二区三区久久蜜桃| 国产精品久久久久久久久夜色| 亚洲天堂男人天堂| 久久久精品一区二区毛片免费看| 亚州欧美一区三区三区在线 | 影音先锋在线一区| 日本一级片在线播放| 一道本成人在线| yjizz视频网站在线播放| 国产精品久久久久av免费| 久久精品国产www456c0m| 亚洲图片 自拍偷拍| 亚洲最大色网站| 三级在线电影| 国产精品久久久久久久av电影 | 国产欧美自拍一区| 日本不卡在线观看视频| 国产日韩欧美综合一区| 亚洲午夜精品久久久| 久久91精品国产91久久跳| 久久99精品国产自在现线| 男女av免费观看| 亚洲视频一区在线观看| 黄色av网站免费在线观看| 欧美亚洲激情在线| 日韩成人精品一区| 日本成人在线免费| 欧美日韩另类字幕中文| av福利在线播放| 鬼打鬼之黄金道士1992林正英| 亚洲美女视频在线免费观看| 99精品欧美一区二区| 制服丝袜激情欧洲亚洲| 天堂网在线最新版www中文网| 亚洲国产午夜伦理片大全在线观看网站 | 亚洲摸摸操操av| 日韩av资源| 91久久国产婷婷一区二区| 国产九九精品| 日本爱爱小视频| 国产丝袜视频一区| 国产激情精品一区二区三区| 国产淫片免费看| 最新日韩在线视频| 无码h黄肉3d动漫在线观看| 国产有码一区二区| 国产婷婷精品| 99久久婷婷国产综合| 国产丝袜一区视频在线观看| 国产精品麻豆|