尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

从零实现一个简单的OCR识别工具:Python + Tesseract深度实践

从零实现一个简单的OCR识别工具:Python + Tesseract深度实践 就在上个月的时候, 有一位客户找上了我, 寻求我的帮助, 他们财务部门每日都得处理数量多达上百张的发票, 单单手工录入那些信息, 便占用了数量极为可观的时间。我耗费了长达一周的时间, 运用某种工具搭建了一个具备自动化识别功能的工具, 该工具的准确率能够达到超过85%的水平, 在批量处理方面, 效率提升得相当显著。在今日之中, 将整个实现的过程予以整理得出, 从其原理起始, 直至代码部分, 从遭遇的阻碍, 再到进行的优化改进, 一次性清清楚楚地讲述明白。OCR技术原理让机器看懂文字OCR, 也就是光学字符识别, 简单来讲呢, 是要把图片当中的文字给“抠”出来, 并将其转换成为计算机能够进行编辑的文本。可就此将其想象成一个具备超强能力的“抄写员”, 给予它一张图片, 它能够识别出其中的每一个字, 认清每一个标点, 接着会原封不动地抄写下来, 然而这个抄写员并非依靠眼睛去看, 而是借助算法进行分析, 它会把图片拆分成数目众多的小像素点, 对这些像素点的排列规律予以分析, 判断得知哪些属于“字”, 判断得知哪些属于“背景”, 随后和它曾经学过的字库展开比对, 最终识别出文字的具体内容。它是用于维护的一个开源的OCR引擎, 它之中支持100多种不同的语言, 它是当下最为流行的享有免费性质的OCR方案当中的一种。在理想的状况之下它的准确率能够达到80 - 90%, 对于清晰度较高的那种称得上印刷体的文字作出的识别效果是挺好的。环境搭建三步搞定第一步安装引擎用户径直前往去下载安装包, 全程一路仅仅只需不断点击下一步便可。其安装路径乃是默认设定为C:\ Files\-OCR这般的情况, 将这个路径记录下来, 后续的时候是会用到的。macOS用户用安装brew install tesseractLinux用户以为例sudo apt-get install tesseract-ocr第二步安装库打开终端执行pip install pytesseract pillow opencv-python这三个库的作用分别是第三步配置环境变量对于用户而言, 需完成这样的操作, 即把安装路径添加进系统环境变量PATH里, 像C:\ Files\-OCR这般的路径。之后重启命令行窗口才会生效。macOS用户, 一般不必要进行额外配置, 安装包会自动去做出处理。Linux用户, 通常不需要额外去做配置, 安装包能自动予以处理。验证是否安装成功import pytesseract print(pytesseract.get_tesseract_version())如果输出版本号说明环境搭建完成。我的踩坑经历: 首次为客户开展部署工作之际, 遗漏了环境变量的配置操作, 导致程序持续抛出报错信息“not found”, 经过长达半小时的排查方才发觉此项问题在该情境下极为常见, 务必要记好执行配置PATH的操作。图像预处理为什么识别前要洗图片直直地将原始照片丢给识别, 精准度常常是偏低的。恰似人去看书, 字迹是潦草不齐的, 纸张呈现泛黄之色, 光线处于昏暗状态, 这些均会对阅读成效造成影响。机器亦是如此, 得先把图片“洗”得干干净净。灰度化去掉颜色干扰带有色彩的图片, 存在着RGB这三个通道, 每一个像素点, 都有着三个对应数值。而将其灰度化所为的就是把这三个通道给合并成为唯一一个, 仅仅是保留住亮度方面的相关信息。import cv2 img cv2.imread(invoice.jpg) # 读取图片 gray cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 转灰度 cv2.imwrite(gray.jpg, gray)为何得进行灰度化, 是由于文字识别着重看的是明暗之间的对比, 而颜色方面的信息反倒会对判断起到干扰作用。在经过灰度化之后, 图片的体积同样会变小, 其处理的速度也会变得更快。二值化黑白分明文字凸显把灰度图变为纯黑白的操作被称作二值化, 像素点的取值情况, 只有两种可能, 要么是代表黑色的0, 要么是代表白色的255。如此一来, 文字与背景之间所呈现出的对比度会达到最大值, 进而在进行识别时, 会让人感觉最为轻松。# 自适应阈值二值化 binary cv2.adaptiveThreshold( gray, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 11, 2 ) cv2.imwrite(binary.jpg, binary)相比于固定阈值, 自适应阈值要更加智能些, 而是它能按照图片存在的不等区域的亮度状况, 自行进行调整, 这种情况适合那种光照并非均匀的图片。降噪去掉杂点只留文字存在于图片之上的, 有可能是噪点、划痕以及污渍, 而这些情况每一种都会对识别造成影响, 降噪所做的事情就是将这些干扰予以去掉。# 中值滤波去噪 denoised cv2.medianBlur(binary, 3) cv2.imwrite(denoised.jpg, denoised)能有效去除犹如撒了形似盐粒般白点的椒盐噪声的中值滤波, 可同时保留文字边缘, 将核大小设定为 3 较为适宜, 倘若太大就会使文字模糊起来。曾有一批扫描件, 我处理时, 图片带有从所经扫描仪遗留的横纹, 当时得以识别的精准比率仅此60%。随后增添高斯模糊予以预先处理, 此精准比率增高至85%。预先处理并非具备无所不能的特性, 然而却能够化解大部分质量方面的问题。基础识别从图片到文本预处理完成后就可以调用识别了。import pytesseract # 指定Tesseract路径Windows需要macOS/Linux一般不需要 pytesseract.pytesseract.tesseract_cmd rC:\Program Files\Tesseract-OCR\tesseract.exe # 识别图片 text pytesseract.image_to_string(denoised, langchi_sim) # chi_sim是简体中文 print(text)当lang被设定为“”时, 其指定用于识别简体中文, 若识别英文则使用eng, 要是遇到中英混合的情况可加上eng。在首次使用的时候, 会自动进行语言包的下载操作, 此时只需耐心等待便可。识别结果是一个字符串你可以直接保存到文件with open(result.txt, w, encodingutf-8) as f: f.write(text)真实案例发票、身份证、表格识别案例一发票信息提取需求是源自某些客户的, 要从发票图片里, 提取诸如发票号码、金额、日期等这般的关键字段。与之对应的我的做法就是:先进行整张图片的识别, 从中获取全部的文本信息, 采用正则表达式去匹配关键字段, 进而提取到结构化的数据。import re text pytesseract.image_to_string(denoised, langchi_simeng) # 提取发票号码假设格式是发票号码12345678 invoice_no re.search(r发票号码[:]\s*(\d), text) if invoice_no: print(f发票号码{invoice_no.group(1)}) # 提取金额假设格式是123.45 amount re.search(r\s*(\d\.?\d*), text) if amount: print(f金额{amount.group(1)})成果呈现得出这样的情况, 在针对 100 张清晰的发票展开测试之时, 发票号码识别得以达到的准确比率为 92%, 而涉及金额识别所达到的准确比率则是 88%。要是面对模糊或者处于倾斜状态的发票, 那么其准确比率就会降低至 60%到 70%之间。案例二身份证识别身份证识别的难点是字段多、格式固定。我的策略是单独裁剪出关键区域, 也就是姓名、身份证号, 对每个区域运用正则表达式校验格式。标点符号。# 裁剪姓名区域假设在图片上方 name_region denoised[50:100, 100:300] name_text pytesseract.image_to_string(name_region, langchi_sim) # 裁剪身份证号区域假设在图片下方 id_region denoised[200:250, 100:500] id_text pytesseract.image_to_string(id_region, langeng) # 校验身份证号格式18位数字 if re.match(r\d{17}[\dXx], id_text.strip()): print(f身份证号{id_text.strip()})呈现出的效果为, 针对50张身份证展开测试, 其中姓名识别拥有着85%的准确率, 身份证号识别有着90%的准确率。那些主要的错误集中在了生僻字, 以及模糊照片方面。案例三表格识别仅仅因为要保留行列关系, 表格识别才成为OCR的难点, 原生当中并不支持表格结构识别, 不过却能够识别出单元格内的文字。我的做法是先识别全部文字根据文字坐标推断表格结构手动调整行列对齐# 获取文字坐标信息 data pytesseract.image_to_data(denoised, langchi_simeng, output_typepytesseract.Output.DICT) # 打印每个文字块的位置和内容 for i in range(len(data[text])): if int(data[conf][i]) 60: # 只保留置信度大于60的 x, y, w, h data[left][i], data[top][i], data[width][i], data[height][i] text data[text][i] print(f位置:({x},{y}), 大小:{w}x{h}, 内容:{text})结果呈现为, 于20张简易表格之上展开测试, 文字识别的准确率为80%, 可这种情况下却需要通过人工来对行列关系予以调整。针对复杂表格涵盖合并单元格以及嵌套表格的那种而言, 其效果欠佳, 因而建议斟酌采用专业的表格识别工具。性能优化批量处理提速5倍识别单张图片, 有可能仅仅只需花费几秒, 然而要是对成百张图片进行批量处理, 那么时间成本就会变得非常高了。我尝试了两种进行优化的方案。方案一多线程处理import concurrent.futures import os def process_image(img_path): img cv2.imread(img_path) # ... 预处理步骤 ... text pytesseract.image_to_string(denoised, langchi_sim) return text # 获取所有图片路径 image_paths [fimages/{f} for f in os.listdir(images) if f.endswith(.jpg)] # 多线程处理4个线程 with concurrent.futures.ThreadPoolExecutor(max_workers4) as executor: results list(executor.map(process_image, image_paths))测试得出的结果是, 处理100张图片时, 单线程所耗费的时间为180秒, 4线程所耗费的时间为45秒, 速度提升了4倍。然而, 线程数并非是越多就越好, 我进行过测试, 8线程的情况反而比4线程更慢, 这是由于线程切换存在开销。方案二批量处理缓存import hashlib def get_image_hash(img_path): 计算图片哈希值用于去重 with open(img_path, rb) as f: return hashlib.md5(f.read()).hexdigest() # 缓存已处理图片 processed_cache {} def batch_process(image_paths): results [] for img_path in image_paths: img_hash get_image_hash(img_path) if img_hash in processed_cache: results.append(processed_cache[img_hash]) continue text process_image(img_path) processed_cache[img_hash] text results.append(text) return results试测结果呈现, 于存有百分之三十重复图片的数据集范围内, 缓存机制致使处理时间由一百八十秒降至一百三十秒。若重复率更高, 其效果更为显著。我曾经历的状况是, 起初选用的是多进程而非多线程, 进而致使内存占用急剧攀升, 最终程序出现崩溃现象。随后才了解到原本它自身就是多线程的, 此时使用多进程反倒会引发资源竞争。由此可见, 多线程才是更为优越的选择。局限性讨论OCR不是万能的用了几个月我总结出它不擅长的情况1. 手写文字识别对于印刷体而言, 其效果挺好, 然而手写文字识别的准确率仅仅在百分之五十至百分之六十之间。我尝试过对手写签名、手填表格进行识别, 基本上没办法使用。针对这种场景, 建议考虑专门的手写识别模型。2. 复杂背景文字文字跟背景对比度低, 背景存在花纹, 文字颜色与背景相近, 这些情形都会对识别造成严重影响, 我曾处理过一张图片, 其背景是红色、文字也是红色, 该图片的准确率未达到百分之三十, 对此有过亲身操作经历。3. 倾斜、变形的图片图片若倾斜超出5度, 那么文字识别的准确率便会显著降低。对于如此的图片能够用来实施倾斜校正, 然而校正的效果却较为有限。严重变形的图片, 像是拍照角度存在偏差的那种, 基本上是无法被识别的。4. 特殊字体和艺术字它所具备的默认字库是专门针对平常常见的印刷体予以训练的, 然而一旦碰到特殊字体、艺术字以及古文字, 这个时候识别的准确率可以说是极度低下的。可以进行依据自身需求来定制训练字库, 只是这需要数量庞大的样本, 并且成本也是比较高昂的。5. 表格结构识别先前已经提及过, 仅仅能够识别文字, 而无法识别表格结构。要是有保留行列关系的需求, 那么建议结合专业的表格识别工具, 或者进行人工调整。人工校验的必要性基于以上局限性我建议在OCR后加入人工校验环节def validate_result(text, confidence_threshold60): 校验识别结果低置信度标记为待人工确认 data pytesseract.image_to_data(denoised, langchi_sim, output_typepytesseract.Output.DICT) low_conf_words [] for i in range(len(data[text])): if int(data[conf][i]) confidence_threshold: low_conf_words.append(data[text][i]) if low_conf_words: print(f警告以下词语置信度低请人工确认{low_conf_words}) return text实际应用中的平衡在客户项目中我采用了OCR 人工抽检的模式OCR自动处理全部图片置信度低于70%的标记为待确认人工只确认标记的部分节省时间这么做不但使得效率得以提升, 而且还确保了准确率。客户反馈称, 在以纯手工录入转变到这一模式的过程中, 整体效率提升了3倍。总结用 实现OCR核心就是三步运用自动化来处理OCR, 其核心主要涵盖三步, 那便是预处理, 识别以及后处理。预处理对准确率起着决定性作用, 识别属于其中的核心部分, 而后处理则对可用性起到决定作用。然而它并非是无所不能的, 其准确率会受到图片质量的显著影响, 也会受文字类型的极大干扰, 还会被背景复杂度深深制约。在实际开展项目的时候, 建议要结合人工校验这种方式, 或者更进一步去考虑更为高级的OCR方案, 例如基于深度学习的商业OCR API这种情况。适用场景清晰印刷体文字、简单文档、批量处理需求、预算有限不适用的场景有使用手写的文字, 呈现复杂的表格, 运用特殊的字体, 针对要求准确率极高的场景。问, 于工作期间碰到过哪些OCR识别方面的难题? 是借助何种方式予以解决的, 还是另外换成别的方案。于评论区展开交流探讨, 瞧瞧大家有过哪些踩坑经历。收藏起来下次需要搭建OCR工具的时候用得上。Www.xiaoqiyx.com/Article/details/4001739.sHtMLWww.xiaoqiyx.com/Article/details/4892115.sHtMLWww.xiaoqiyx.com/Article/details/5474049.sHtMLWww.xiaoqiyx.com/Article/details/6369819.sHtMLWww.xiaoqiyx.com/Article/details/6931992.sHtMLWww.xiaoqiyx.com/Article/details/8363840.sHtMLWww.xiaoqiyx.com/Article/details/5609934.sHtMLWww.xiaoqiyx.com/Article/details/4924000.sHtMLWww.xiaoqiyx.com/Article/details/8691075.sHtMLWww.xiaoqiyx.com/Article/details/6679887.sHtMLWww.xiaoqiyx.com/Article/details/9794673.sHtMLWww.xiaoqiyx.com/Article/details/3022938.sHtMLWww.xiaoqiyx.com/Article/details/1444379.sHtMLWww.xiaoqiyx.com/Article/details/2727802.sHtMLWww.xiaoqiyx.com/Article/details/7048033.sHtMLWww.xiaoqiyx.com/Article/details/4150240.sHtMLWww.xiaoqiyx.com/Article/details/7512278.sHtMLWww.xiaoqiyx.com/Article/details/5575100.sHtMLWww.xiaoqiyx.com/Article/details/1739343.sHtMLWww.xiaoqiyx.com/Article/details/2516180.sHtMLWww.xiaoqiyx.com/Article/details/6705713.sHtMLWww.xiaoqiyx.com/Article/details/2728474.sHtMLWww.xiaoqiyx.com/Article/details/2966324.sHtMLWww.xiaoqiyx.com/Article/details/3482273.sHtMLWww.xiaoqiyx.com/Article/details/1738501.sHtMLWww.xiaoqiyx.com/Article/details/3808056.sHtMLWww.xiaoqiyx.com/Article/details/7734111.sHtMLWww.xiaoqiyx.com/Article/details/7460742.sHtMLWww.xiaoqiyx.com/Article/details/8799886.sHtMLWww.xiaoqiyx.com/Article/details/6099640.sHtMLWww.xiaoqiyx.com/Article/details/5745199.sHtMLWww.xiaoqiyx.com/Article/details/7818081.sHtMLWww.xiaoqiyx.com/Article/details/1628640.sHtMLWww.xiaoqiyx.com/Article/details/5085392.sHtMLWww.xiaoqiyx.com/Article/details/2987608.sHtMLWww.xiaoqiyx.com/Article/details/1411143.sHtMLWww.xiaoqiyx.com/Article/details/4242728.sHtMLWww.xiaoqiyx.com/Article/details/8984713.sHtMLWww.xiaoqiyx.com/Article/details/2371263.sHtMLWww.xiaoqiyx.com/Article/details/9582187.sHtMLWww.xiaoqiyx.com/Article/details/6310700.sHtMLWww.xiaoqiyx.com/Article/details/3277915.sHtMLWww.xiaoqiyx.com/Article/details/7038275.sHtMLWww.xiaoqiyx.com/Article/details/9673527.sHtMLWww.xiaoqiyx.com/Article/details/5302685.sHtMLWww.xiaoqiyx.com/Article/details/5936812.sHtMLWww.xiaoqiyx.com/Article/details/8346875.sHtMLWww.xiaoqiyx.com/Article/details/5391612.sHtMLWww.xiaoqiyx.com/Article/details/4301739.sHtMLWww.xiaoqiyx.com/Article/details/9431292.sHtMLWww.xiaoqiyx.com/Article/details/5232653.sHtMLWww.xiaoqiyx.com/Article/details/5627687.sHtMLWww.xiaoqiyx.com/Article/details/1806115.sHtMLWww.xiaoqiyx.com/Article/details/8804037.sHtMLWww.xiaoqiyx.com/Article/details/6415621.sHtMLWww.xiaoqiyx.com/Article/details/6190071.sHtMLWww.xiaoqiyx.com/Article/details/6841521.sHtMLWww.xiaoqiyx.com/Article/details/6783920.sHtMLWww.xiaoqiyx.com/Article/details/8883789.sHtMLWww.xiaoqiyx.com/Article/details/5264744.sHtMLWww.xiaoqiyx.com/Article/details/5286293.sHtMLWww.xiaoqiyx.com/Article/details/9600428.sHtMLWww.xiaoqiyx.com/Article/details/9701165.sHtMLWww.xiaoqiyx.com/Article/details/7822554.sHtMLWww.xiaoqiyx.com/Article/details/2144749.sHtMLWww.xiaoqiyx.com/Article/details/3445478.sHtMLWww.xiaoqiyx.com/Article/details/4681181.sHtMLWww.xiaoqiyx.com/Article/details/1889803.sHtMLWww.xiaoqiyx.com/Article/details/8108748.sHtMLWww.xiaoqiyx.com/Article/details/9934469.sHtMLWww.xiaoqiyx.com/Article/details/4180704.sHtMLWww.xiaoqiyx.com/Article/details/9483402.sHtMLWww.xiaoqiyx.com/Article/details/5046402.sHtMLWww.xiaoqiyx.com/Article/details/1508535.sHtMLWww.xiaoqiyx.com/Article/details/7193860.sHtMLWww.xiaoqiyx.com/Article/details/5007545.sHtMLWww.xiaoqiyx.com/Article/details/5785055.sHtMLWww.xiaoqiyx.com/Article/details/8769839.sHtMLWww.xiaoqiyx.com/Article/details/2084995.sHtMLWww.xiaoqiyx.com/Article/details/4646521.sHtMLWww.xiaoqiyx.com/Article/details/2906523.sHtMLWww.xiaoqiyx.com/Article/details/6066067.sHtMLWww.xiaoqiyx.com/Article/details/9297872.sHtMLWww.xiaoqiyx.com/Article/details/7719093.sHtMLWww.xiaoqiyx.com/Article/details/7403130.sHtMLWww.xiaoqiyx.com/Article/details/3797206.sHtMLWww.xiaoqiyx.com/Article/details/5518604.sHtMLWww.xiaoqiyx.com/Article/details/9325833.sHtMLWww.xiaoqiyx.com/Article/details/6719590.sHtMLWww.xiaoqiyx.com/Article/details/4908759.sHtMLWww.xiaoqiyx.com/Article/details/9154730.sHtMLWww.xiaoqiyx.com/Article/details/5980429.sHtMLWww.xiaoqiyx.com/Article/details/2533739.sHtMLWww.xiaoqiyx.com/Article/details/1725792.sHtMLWww.xiaoqiyx.com/Article/details/4978984.sHtMLWww.xiaoqiyx.com/Article/details/4898600.sHtMLWww.xiaoqiyx.com/Article/details/5204792.sHtMLWww.xiaoqiyx.com/Article/details/1003768.sHtMLWww.xiaoqiyx.com/Article/details/6772656.sHtMLWww.xiaoqiyx.com/Article/details/7418088.sHtMLWww.xiaoqiyx.com/Article/details/6606284.sHtMLWww.xiaoqiyx.com/Article/details/6062889.sHtMLWww.xiaoqiyx.com/Article/details/8457753.sHtMLWww.xiaoqiyx.com/Article/details/4407485.sHtMLWww.xiaoqiyx.com/Article/details/5940046.sHtMLWww.xiaoqiyx.com/Article/details/4470897.sHtMLWww.xiaoqiyx.com/Article/details/1831929.sHtMLWww.xiaoqiyx.com/Article/details/6327549.sHtMLWww.xiaoqiyx.com/Article/details/8106552.sHtMLWww.xiaoqiyx.com/Article/details/9422104.sHtMLWww.xiaoqiyx.com/Article/details/2916138.sHtMLWww.xiaoqiyx.com/Article/details/7436891.sHtMLWww.xiaoqiyx.com/Article/details/5469669.sHtMLWww.xiaoqiyx.com/Article/details/3565453.sHtMLWww.xiaoqiyx.com/Article/details/8412334.sHtMLWww.xiaoqiyx.com/Article/details/8679032.sHtMLWww.xiaoqiyx.com/Article/details/8077224.sHtMLWww.xiaoqiyx.com/Article/details/7996737.sHtMLWww.xiaoqiyx.com/Article/details/9149434.sHtMLWww.xiaoqiyx.com/Article/details/3354409.sHtMLWww.xiaoqiyx.com/Article/details/5687929.sHtMLWww.xiaoqiyx.com/Article/details/4441593.sHtMLWww.xiaoqiyx.com/Article/details/2784343.sHtMLWww.xiaoqiyx.com/Article/details/6918194.sHtMLWww.xiaoqiyx.com/Article/details/2016529.sHtMLWww.xiaoqiyx.com/Article/details/4805372.sHtMLWww.xiaoqiyx.com/Article/details/5597479.sHtMLWww.xiaoqiyx.com/Article/details/1883325.sHtMLWww.xiaoqiyx.com/Article/details/4295823.sHtMLWww.xiaoqiyx.com/Article/details/3301989.sHtMLWww.xiaoqiyx.com/Article/details/5635123.sHtMLWww.xiaoqiyx.com/Article/details/7923608.sHtMLWww.xiaoqiyx.com/Article/details/3811915.sHtMLWww.xiaoqiyx.com/Article/details/5385728.sHtMLWww.xiaoqiyx.com/Article/details/4787415.sHtMLWww.xiaoqiyx.com/Article/details/3865574.sHtMLWww.xiaoqiyx.com/Article/details/1204080.sHtMLWww.xiaoqiyx.com/Article/details/4123994.sHtMLWww.xiaoqiyx.com/Article/details/2133514.sHtMLWww.xiaoqiyx.com/Article/details/5632112.sHtMLWww.xiaoqiyx.com/Article/details/4956222.sHtMLWww.xiaoqiyx.com/Article/details/3676739.sHtMLWww.xiaoqiyx.com/Article/details/3688284.sHtMLWww.xiaoqiyx.com/Article/details/7870891.sHtMLWww.xiaoqiyx.com/Article/details/6968035.sHtMLWww.xiaoqiyx.com/Article/details/8131354.sHtMLWww.xiaoqiyx.com/Article/details/3608916.sHtMLWww.xiaoqiyx.com/Article/details/5183076.sHtMLWww.xiaoqiyx.com/Article/details/3269993.sHtMLWww.xiaoqiyx.com/Article/details/9519878.sHtMLWww.xiaoqiyx.com/Article/details/2269442.sHtMLWww.xiaoqiyx.com/Article/details/3710367.sHtMLWww.xiaoqiyx.com/Article/details/8416699.sHtMLWww.xiaoqiyx.com/Article/details/3203119.sHtMLWww.xiaoqiyx.com/Article/details/9383339.sHtMLWww.xiaoqiyx.com/Article/details/7070843.sHtMLWww.xiaoqiyx.com/Article/details/1527847.sHtMLWww.xiaoqiyx.com/Article/details/2766936.sHtMLWww.xiaoqiyx.com/Article/details/7837970.sHtMLWww.xiaoqiyx.com/Article/details/3655814.sHtMLWww.xiaoqiyx.com/Article/details/3115170.sHtMLWww.xiaoqiyx.com/Article/details/7998617.sHtMLWww.xiaoqiyx.com/Article/details/4044512.sHtMLWww.xiaoqiyx.com/Article/details/8691145.sHtMLWww.xiaoqiyx.com/Article/details/9477421.sHtMLWww.xiaoqiyx.com/Article/details/1568903.sHtMLWww.xiaoqiyx.com/Article/details/9700123.sHtMLWww.xiaoqiyx.com/Article/details/4264353.sHtMLWww.xiaoqiyx.com/Article/details/5830669.sHtMLWww.xiaoqiyx.com/Article/details/4487679.sHtMLWww.xiaoqiyx.com/Article/details/1302297.sHtMLWww.xiaoqiyx.com/Article/details/8232956.sHtMLWww.xiaoqiyx.com/Article/details/7564894.sHtMLWww.xiaoqiyx.com/Article/details/9841416.sHtMLWww.xiaoqiyx.com/Article/details/9659776.sHtMLWww.xiaoqiyx.com/Article/details/8761158.sHtMLWww.xiaoqiyx.com/Article/details/1071980.sHtMLWww.xiaoqiyx.com/Article/details/3419476.sHtMLWww.xiaoqiyx.com/Article/details/7697013.sHtMLWww.xiaoqiyx.com/Article/details/6285050.sHtMLWww.xiaoqiyx.com/Article/details/1627745.sHtMLWww.xiaoqiyx.com/Article/details/8722470.sHtMLWww.xiaoqiyx.com/Article/details/2475909.sHtMLWww.xiaoqiyx.com/Article/details/8911438.sHtMLWww.xiaoqiyx.com/Article/details/9134670.sHtMLWww.xiaoqiyx.com/Article/details/2099421.sHtMLWww.xiaoqiyx.com/Article/details/8451312.sHtMLWww.xiaoqiyx.com/Article/details/8436663.sHtMLWww.xiaoqiyx.com/Article/details/8497286.sHtMLWww.xiaoqiyx.com/Article/details/4820767.sHtMLWww.xiaoqiyx.com/Article/details/1205512.sHtMLWww.xiaoqiyx.com/Article/details/2472681.sHtMLWww.xiaoqiyx.com/Article/details/3889765.sHtMLWww.xiaoqiyx.com/Article/details/7912355.sHtMLWww.xiaoqiyx.com/Article/details/3334364.sHtMLWww.xiaoqiyx.com/Article/details/6718906.sHtMLWww.xiaoqiyx.com/Article/details/6682631.sHtMLWww.xiaoqiyx.com/Article/details/3428120.sHtMLWww.xiaoqiyx.com/Article/details/1712774.sHtMLWww.xiaoqiyx.com/Article/details/7662199.sHtMLWww.xiaoqiyx.com/Article/details/8380862.sHtMLWww.xiaoqiyx.com/Article/details/8621185.sHtMLWww.xiaoqiyx.com/Article/details/1669905.sHtMLWww.xiaoqiyx.com/Article/details/8096882.sHtMLWww.xiaoqiyx.com/Article/details/2359274.sHtMLWww.xiaoqiyx.com/Article/details/7645835.sHtMLWww.xiaoqiyx.com/Article/details/9506664.sHtMLWww.xiaoqiyx.com/Article/details/2144779.sHtMLWww.xiaoqiyx.com/Article/details/5047830.sHtMLWww.xiaoqiyx.com/Article/details/1048774.sHtMLWww.xiaoqiyx.com/Article/details/6877564.sHtMLWww.xiaoqiyx.com/Article/details/9519252.sHtMLWww.xiaoqiyx.com/Article/details/1735380.sHtMLWww.xiaoqiyx.com/Article/details/5034394.sHtMLWww.xiaoqiyx.com/Article/details/4366384.sHtMLWww.xiaoqiyx.com/Article/details/9962191.sHtMLWww.xiaoqiyx.com/Article/details/5242153.sHtMLWww.xiaoqiyx.com/Article/details/8377062.sHtMLWww.xiaoqiyx.com/Article/details/7391547.sHtMLWww.xiaoqiyx.com/Article/details/4079285.sHtMLWww.xiaoqiyx.com/Article/details/8091563.sHtMLWww.xiaoqiyx.com/Article/details/3941297.sHtMLWww.xiaoqiyx.com/Article/details/5295112.sHtMLWww.xiaoqiyx.com/Article/details/6683551.sHtMLWww.xiaoqiyx.com/Article/details/8985613.sHtMLWww.xiaoqiyx.com/Article/details/2957049.sHtMLWww.xiaoqiyx.com/Article/details/9670064.sHtMLWww.xiaoqiyx.com/Article/details/3879164.sHtMLWww.xiaoqiyx.com/Article/details/6119870.sHtMLWww.xiaoqiyx.com/Article/details/7016282.sHtMLWww.xiaoqiyx.com/Article/details/2822119.sHtMLWww.xiaoqiyx.com/Article/details/6769467.sHtMLWww.xiaoqiyx.com/Article/details/7935578.sHtMLWww.xiaoqiyx.com/Article/details/9635989.sHtMLWww.xiaoqiyx.com/Article/details/8288469.sHtMLWww.xiaoqiyx.com/Article/details/9430447.sHtMLWww.xiaoqiyx.com/Article/details/7882389.sHtMLWww.xiaoqiyx.com/Article/details/8789263.sHtMLWww.xiaoqiyx.com/Article/details/2143707.sHtMLWww.xiaoqiyx.com/Article/details/8466972.sHtMLWww.xiaoqiyx.com/Article/details/2365622.sHtMLWww.xiaoqiyx.com/Article/details/3745656.sHtMLWww.xiaoqiyx.com/Article/details/1187218.sHtMLWww.xiaoqiyx.com/Article/details/4906834.sHtMLWww.xiaoqiyx.com/Article/details/3544960.sHtMLWww.xiaoqiyx.com/Article/details/3758072.sHtMLWww.xiaoqiyx.com/Article/details/3893895.sHtMLWww.xiaoqiyx.com/Article/details/4682218.sHtMLWww.xiaoqiyx.com/Article/details/4204509.sHtMLWww.xiaoqiyx.com/Article/details/6066575.sHtMLWww.xiaoqiyx.com/Article/details/1230741.sHtMLWww.xiaoqiyx.com/Article/details/1551106.sHtMLWww.xiaoqiyx.com/Article/details/3460122.sHtMLWww.xiaoqiyx.com/Article/details/7848569.sHtMLWww.xiaoqiyx.com/Article/details/4574107.sHtMLWww.xiaoqiyx.com/Article/details/6436314.sHtMLWww.xiaoqiyx.com/Article/details/9112181.sHtMLWww.xiaoqiyx.com/Article/details/5440936.sHtMLWww.xiaoqiyx.com/Article/details/4899286.sHtMLWww.xiaoqiyx.com/Article/details/8615064.sHtMLWww.xiaoqiyx.com/Article/details/9935794.sHtMLWww.xiaoqiyx.com/Article/details/1598698.sHtMLWww.xiaoqiyx.com/Article/details/2989741.sHtMLWww.xiaoqiyx.com/Article/details/3736424.sHtMLWww.xiaoqiyx.com/Article/details/9668771.sHtMLWww.xiaoqiyx.com/Article/details/1135687.sHtMLWww.xiaoqiyx.com/Article/details/9815154.sHtMLWww.xiaoqiyx.com/Article/details/8047988.sHtMLWww.xiaoqiyx.com/Article/details/5506408.sHtMLWww.xiaoqiyx.com/Article/details/1509732.sHtMLWww.xiaoqiyx.com/Article/details/2895811.sHtMLWww.xiaoqiyx.com/Article/details/4446708.sHtMLWww.xiaoqiyx.com/Article/details/3836023.sHtMLWww.xiaoqiyx.com/Article/details/3628903.sHtMLWww.xiaoqiyx.com/Article/details/5595813.sHtMLWww.xiaoqiyx.com/Article/details/8864055.sHtMLWww.xiaoqiyx.com/Article/details/8330133.sHtMLWww.xiaoqiyx.com/Article/details/4080700.sHtMLWww.xiaoqiyx.com/Article/details/3455292.sHtMLWww.xiaoqiyx.com/Article/details/2104259.sHtMLWww.xiaoqiyx.com/Article/details/1979530.sHtMLWww.xiaoqiyx.com/Article/details/7025497.sHtMLWww.xiaoqiyx.com/Article/details/2152165.sHtMLWww.xiaoqiyx.com/Article/details/1288814.sHtMLWww.xiaoqiyx.com/Article/details/6498720.sHtMLWww.xiaoqiyx.com/Article/details/8248488.sHtMLWww.xiaoqiyx.com/Article/details/2535458.sHtMLWww.xiaoqiyx.com/Article/details/6260918.sHtMLWww.xiaoqiyx.com/Article/details/9183223.sHtMLWww.xiaoqiyx.com/Article/details/8827295.sHtMLWww.xiaoqiyx.com/Article/details/6131542.sHtMLWww.xiaoqiyx.com/Article/details/1010269.sHtMLWww.xiaoqiyx.com/Article/details/7928240.sHtMLWww.xiaoqiyx.com/Article/details/1733138.sHtMLWww.xiaoqiyx.com/Article/details/5722873.sHtMLWww.xiaoqiyx.com/Article/details/1807984.sHtMLWww.xiaoqiyx.com/Article/details/6865701.sHtMLWww.xiaoqiyx.com/Article/details/8428188.sHtMLWww.xiaoqiyx.com/Article/details/3863174.sHtMLWww.xiaoqiyx.com/Article/details/4521008.sHtMLWww.xiaoqiyx.com/Article/details/7747526.sHtMLWww.xiaoqiyx.com/Article/details/4121528.sHtMLWww.xiaoqiyx.com/Article/details/7377061.sHtMLWww.xiaoqiyx.com/Article/details/2225572.sHtMLWww.xiaoqiyx.com/Article/details/2414624.sHtMLWww.xiaoqiyx.com/Article/details/4281278.sHtMLWww.xiaoqiyx.com/Article/details/5251479.sHtMLWww.xiaoqiyx.com/Article/details/4441000.sHtMLWww.xiaoqiyx.com/Article/details/9385386.sHtMLWww.xiaoqiyx.com/Article/details/9200699.sHtMLWww.xiaoqiyx.com/Article/details/6493857.sHtMLWww.xiaoqiyx.com/Article/details/5880710.sHtMLWww.xiaoqiyx.com/Article/details/5021699.sHtMLWww.xiaoqiyx.com/Article/details/6579474.sHtMLWww.xiaoqiyx.com/Article/details/8058301.sHtMLWww.xiaoqiyx.com/Article/details/8330580.sHtMLWww.xiaoqiyx.com/Article/details/8945841.sHtMLWww.xiaoqiyx.com/Article/details/5606409.sHtMLWww.xiaoqiyx.com/Article/details/3056299.sHtMLWww.xiaoqiyx.com/Article/details/6979730.sHtMLWww.xiaoqiyx.com/Article/details/8981612.sHtMLWww.xiaoqiyx.com/Article/details/1935102.sHtMLWww.xiaoqiyx.com/Article/details/7090119.sHtMLWww.xiaoqiyx.com/Article/details/3988122.sHtMLWww.xiaoqiyx.com/Article/details/6470065.sHtMLWww.xiaoqiyx.com/Article/details/8566798.sHtMLWww.xiaoqiyx.com/Article/details/6908287.sHtMLWww.xiaoqiyx.com/Article/details/2386821.sHtMLWww.xiaoqiyx.com/Article/details/7357234.sHtMLWww.xiaoqiyx.com/Article/details/7183461.sHtMLWww.xiaoqiyx.com/Article/details/8676065.sHtMLWww.xiaoqiyx.com/Article/details/8665111.sHtMLWww.xiaoqiyx.com/Article/details/3870776.sHtMLWww.xiaoqiyx.com/Article/details/2757726.sHtMLWww.xiaoqiyx.com/Article/details/4255225.sHtMLWww.xiaoqiyx.com/Article/details/4672151.sHtMLWww.xiaoqiyx.com/Article/details/7822090.sHtMLWww.xiaoqiyx.com/Article/details/6505639.sHtMLWww.xiaoqiyx.com/Article/details/1743991.sHtMLWww.xiaoqiyx.com/Article/details/3979562.sHtMLWww.xiaoqiyx.com/Article/details/9959803.sHtMLWww.xiaoqiyx.com/Article/details/7212260.sHtMLWww.xiaoqiyx.com/Article/details/5392951.sHtMLWww.xiaoqiyx.com/Article/details/5336268.sHtMLWww.xiaoqiyx.com/Article/details/1962770.sHtMLWww.xiaoqiyx.com/Article/details/1645802.sHtMLWww.xiaoqiyx.com/Article/details/7406616.sHtMLWww.xiaoqiyx.com/Article/details/8878308.sHtMLWww.xiaoqiyx.com/Article/details/2895670.sHtMLWww.xiaoqiyx.com/Article/details/6831072.sHtML
返回列表