一個簡單的OCR識別工具:Python + Tesseract深度實踐)
就在上個月的時候, 有一位客戶找上了我, 尋求我的幫助, 他們財務(wù)部門每日都得處理數(shù)量多達上百張的發(fā)票, 單單手工錄入那些信息, 便占用了數(shù)量極為可觀的時間。我耗費了長達一周的時間, 運用某種工具搭建了一個具備自動化識別功能的工具, 該工具的準(zhǔn)確率能夠達到超過85%的水平, 在批量處理方面, 效率提升得相當(dāng)顯著。在今日之中, 將整個實現(xiàn)的過程予以整理得出, 從其原理起始, 直至代碼部分, 從遭遇的阻礙, 再到進行的優(yōu)化改進, 一次性清清楚楚地講述明白。OCR技術(shù)原理讓機器看懂文字OCR, 也就是光學(xué)字符識別, 簡單來講呢, 是要把圖片當(dāng)中的文字給“摳”出來, 并將其轉(zhuǎn)換成為計算機能夠進行編輯的文本??删痛藢⑵湎胂蟪梢粋€具備超強能力的“抄寫員”, 給予它一張圖片, 它能夠識別出其中的每一個字, 認(rèn)清每一個標(biāo)點, 接著會原封不動地抄寫下來, 然而這個抄寫員并非依靠眼睛去看, 而是借助算法進行分析, 它會把圖片拆分成數(shù)目眾多的小像素點, 對這些像素點的排列規(guī)律予以分析, 判斷得知哪些屬于“字”, 判斷得知哪些屬于“背景”, 隨后和它曾經(jīng)學(xué)過的字庫展開比對, 最終識別出文字的具體內(nèi)容。它是用于維護的一個開源的OCR引擎, 它之中支持100多種不同的語言, 它是當(dāng)下最為流行的享有免費性質(zhì)的OCR方案當(dāng)中的一種。在理想的狀況之下它的準(zhǔn)確率能夠達到80 - 90%, 對于清晰度較高的那種稱得上印刷體的文字作出的識別效果是挺好的。環(huán)境搭建三步搞定第一步安裝引擎用戶徑直前往去下載安裝包, 全程一路僅僅只需不斷點擊下一步便可。其安裝路徑乃是默認(rèn)設(shè)定為C:\ Files\-OCR這般的情況, 將這個路徑記錄下來, 后續(xù)的時候是會用到的。macOS用戶用安裝brew install tesseractLinux用戶以為例sudo apt-get install tesseract-ocr第二步安裝庫打開終端執(zhí)行pip install pytesseract pillow opencv-python這三個庫的作用分別是第三步配置環(huán)境變量對于用戶而言, 需完成這樣的操作, 即把安裝路徑添加進系統(tǒng)環(huán)境變量PATH里, 像C:\ Files\-OCR這般的路徑。之后重啟命令行窗口才會生效。macOS用戶, 一般不必要進行額外配置, 安裝包會自動去做出處理。Linux用戶, 通常不需要額外去做配置, 安裝包能自動予以處理。驗證是否安裝成功import pytesseract print(pytesseract.get_tesseract_version())如果輸出版本號說明環(huán)境搭建完成。我的踩坑經(jīng)歷: 首次為客戶開展部署工作之際, 遺漏了環(huán)境變量的配置操作, 導(dǎo)致程序持續(xù)拋出報錯信息“not found”, 經(jīng)過長達半小時的排查方才發(fā)覺此項問題在該情境下極為常見, 務(wù)必要記好執(zhí)行配置PATH的操作。圖像預(yù)處理為什么識別前要洗圖片直直地將原始照片丟給識別, 精準(zhǔn)度常常是偏低的。恰似人去看書, 字跡是潦草不齊的, 紙張呈現(xiàn)泛黃之色, 光線處于昏暗狀態(tài), 這些均會對閱讀成效造成影響。機器亦是如此, 得先把圖片“洗”得干干凈凈?;叶然サ纛伾蓴_帶有色彩的圖片, 存在著RGB這三個通道, 每一個像素點, 都有著三個對應(yīng)數(shù)值。而將其灰度化所為的就是把這三個通道給合并成為唯一一個, 僅僅是保留住亮度方面的相關(guān)信息。import cv2 img cv2.imread(invoice.jpg) # 讀取圖片 gray cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 轉(zhuǎn)灰度 cv2.imwrite(gray.jpg, gray)為何得進行灰度化, 是由于文字識別著重看的是明暗之間的對比, 而顏色方面的信息反倒會對判斷起到干擾作用。在經(jīng)過灰度化之后, 圖片的體積同樣會變小, 其處理的速度也會變得更快。二值化黑白分明文字凸顯把灰度圖變?yōu)榧兒诎椎牟僮鞅环Q作二值化, 像素點的取值情況, 只有兩種可能, 要么是代表黑色的0, 要么是代表白色的255。如此一來, 文字與背景之間所呈現(xiàn)出的對比度會達到最大值, 進而在進行識別時, 會讓人感覺最為輕松。# 自適應(yīng)閾值二值化 binary cv2.adaptiveThreshold( gray, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 11, 2 ) cv2.imwrite(binary.jpg, binary)相比于固定閾值, 自適應(yīng)閾值要更加智能些, 而是它能按照圖片存在的不等區(qū)域的亮度狀況, 自行進行調(diào)整, 這種情況適合那種光照并非均勻的圖片。降噪去掉雜點只留文字存在于圖片之上的, 有可能是噪點、劃痕以及污漬, 而這些情況每一種都會對識別造成影響, 降噪所做的事情就是將這些干擾予以去掉。# 中值濾波去噪 denoised cv2.medianBlur(binary, 3) cv2.imwrite(denoised.jpg, denoised)能有效去除猶如撒了形似鹽粒般白點的椒鹽噪聲的中值濾波, 可同時保留文字邊緣, 將核大小設(shè)定為 3 較為適宜, 倘若太大就會使文字模糊起來。曾有一批掃描件, 我處理時, 圖片帶有從所經(jīng)掃描儀遺留的橫紋, 當(dāng)時得以識別的精準(zhǔn)比率僅此60%。隨后增添高斯模糊予以預(yù)先處理, 此精準(zhǔn)比率增高至85%。預(yù)先處理并非具備無所不能的特性, 然而卻能夠化解大部分質(zhì)量方面的問題?;A(chǔ)識別從圖片到文本預(yù)處理完成后就可以調(diào)用識別了。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)當(dāng)lang被設(shè)定為“”時, 其指定用于識別簡體中文, 若識別英文則使用eng, 要是遇到中英混合的情況可加上eng。在首次使用的時候, 會自動進行語言包的下載操作, 此時只需耐心等待便可。識別結(jié)果是一個字符串你可以直接保存到文件with open(result.txt, w, encodingutf-8) as f: f.write(text)真實案例發(fā)票、身份證、表格識別案例一發(fā)票信息提取需求是源自某些客戶的, 要從發(fā)票圖片里, 提取諸如發(fā)票號碼、金額、日期等這般的關(guān)鍵字段。與之對應(yīng)的我的做法就是:先進行整張圖片的識別, 從中獲取全部的文本信息, 采用正則表達式去匹配關(guān)鍵字段, 進而提取到結(jié)構(gòu)化的數(shù)據(jù)。import re text pytesseract.image_to_string(denoised, langchi_simeng) # 提取發(fā)票號碼假設(shè)格式是發(fā)票號碼12345678 invoice_no re.search(r發(fā)票號碼[:]\s*(\d), text) if invoice_no: print(f發(fā)票號碼{invoice_no.group(1)}) # 提取金額假設(shè)格式是123.45 amount re.search(r\s*(\d\.?\d*), text) if amount: print(f金額{amount.group(1)})成果呈現(xiàn)得出這樣的情況, 在針對 100 張清晰的發(fā)票展開測試之時, 發(fā)票號碼識別得以達到的準(zhǔn)確比率為 92%, 而涉及金額識別所達到的準(zhǔn)確比率則是 88%。要是面對模糊或者處于傾斜狀態(tài)的發(fā)票, 那么其準(zhǔn)確比率就會降低至 60%到 70%之間。案例二身份證識別身份證識別的難點是字段多、格式固定。我的策略是單獨裁剪出關(guān)鍵區(qū)域, 也就是姓名、身份證號, 對每個區(qū)域運用正則表達式校驗格式。標(biāo)點符號。# 裁剪姓名區(qū)域假設(shè)在圖片上方 name_region denoised[50:100, 100:300] name_text pytesseract.image_to_string(name_region, langchi_sim) # 裁剪身份證號區(qū)域假設(shè)在圖片下方 id_region denoised[200:250, 100:500] id_text pytesseract.image_to_string(id_region, langeng) # 校驗身份證號格式18位數(shù)字 if re.match(r\d{17}[\dXx], id_text.strip()): print(f身份證號{id_text.strip()})呈現(xiàn)出的效果為, 針對50張身份證展開測試, 其中姓名識別擁有著85%的準(zhǔn)確率, 身份證號識別有著90%的準(zhǔn)確率。那些主要的錯誤集中在了生僻字, 以及模糊照片方面。案例三表格識別僅僅因為要保留行列關(guān)系, 表格識別才成為OCR的難點, 原生當(dāng)中并不支持表格結(jié)構(gòu)識別, 不過卻能夠識別出單元格內(nèi)的文字。我的做法是先識別全部文字根據(jù)文字坐標(biāo)推斷表格結(jié)構(gòu)手動調(diào)整行列對齊# 獲取文字坐標(biāo)信息 data pytesseract.image_to_data(denoised, langchi_simeng, output_typepytesseract.Output.DICT) # 打印每個文字塊的位置和內(nèi)容 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}, 內(nèi)容:{text})結(jié)果呈現(xiàn)為, 于20張簡易表格之上展開測試, 文字識別的準(zhǔn)確率為80%, 可這種情況下卻需要通過人工來對行列關(guān)系予以調(diào)整。針對復(fù)雜表格涵蓋合并單元格以及嵌套表格的那種而言, 其效果欠佳, 因而建議斟酌采用專業(yè)的表格識別工具。性能優(yōu)化批量處理提速5倍識別單張圖片, 有可能僅僅只需花費幾秒, 然而要是對成百張圖片進行批量處理, 那么時間成本就會變得非常高了。我嘗試了兩種進行優(yōu)化的方案。方案一多線程處理import concurrent.futures import os def process_image(img_path): img cv2.imread(img_path) # ... 預(yù)處理步驟 ... 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))測試得出的結(jié)果是, 處理100張圖片時, 單線程所耗費的時間為180秒, 4線程所耗費的時間為45秒, 速度提升了4倍。然而, 線程數(shù)并非是越多就越好, 我進行過測試, 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試測結(jié)果呈現(xiàn), 于存有百分之三十重復(fù)圖片的數(shù)據(jù)集范圍內(nèi), 緩存機制致使處理時間由一百八十秒降至一百三十秒。若重復(fù)率更高, 其效果更為顯著。我曾經(jīng)歷的狀況是, 起初選用的是多進程而非多線程, 進而致使內(nèi)存占用急劇攀升, 最終程序出現(xiàn)崩潰現(xiàn)象。隨后才了解到原本它自身就是多線程的, 此時使用多進程反倒會引發(fā)資源競爭。由此可見, 多線程才是更為優(yōu)越的選擇。局限性討論OCR不是萬能的用了幾個月我總結(jié)出它不擅長的情況1. 手寫文字識別對于印刷體而言, 其效果挺好, 然而手寫文字識別的準(zhǔn)確率僅僅在百分之五十至百分之六十之間。我嘗試過對手寫簽名、手填表格進行識別, 基本上沒辦法使用。針對這種場景, 建議考慮專門的手寫識別模型。2. 復(fù)雜背景文字文字跟背景對比度低, 背景存在花紋, 文字顏色與背景相近, 這些情形都會對識別造成嚴(yán)重影響, 我曾處理過一張圖片, 其背景是紅色、文字也是紅色, 該圖片的準(zhǔn)確率未達到百分之三十, 對此有過親身操作經(jīng)歷。3. 傾斜、變形的圖片圖片若傾斜超出5度, 那么文字識別的準(zhǔn)確率便會顯著降低。對于如此的圖片能夠用來實施傾斜校正, 然而校正的效果卻較為有限。嚴(yán)重變形的圖片, 像是拍照角度存在偏差的那種, 基本上是無法被識別的。4. 特殊字體和藝術(shù)字它所具備的默認(rèn)字庫是專門針對平常常見的印刷體予以訓(xùn)練的, 然而一旦碰到特殊字體、藝術(shù)字以及古文字, 這個時候識別的準(zhǔn)確率可以說是極度低下的。可以進行依據(jù)自身需求來定制訓(xùn)練字庫, 只是這需要數(shù)量龐大的樣本, 并且成本也是比較高昂的。5. 表格結(jié)構(gòu)識別先前已經(jīng)提及過, 僅僅能夠識別文字, 而無法識別表格結(jié)構(gòu)。要是有保留行列關(guān)系的需求, 那么建議結(jié)合專業(yè)的表格識別工具, 或者進行人工調(diào)整。人工校驗的必要性基于以上局限性我建議在OCR后加入人工校驗環(huán)節(jié)def validate_result(text, confidence_threshold60): 校驗識別結(jié)果低置信度標(biāo)記為待人工確認(rèn) 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警告以下詞語置信度低請人工確認(rèn){low_conf_words}) return text實際應(yīng)用中的平衡在客戶項目中我采用了OCR 人工抽檢的模式OCR自動處理全部圖片置信度低于70%的標(biāo)記為待確認(rèn)人工只確認(rèn)標(biāo)記的部分節(jié)省時間這么做不但使得效率得以提升, 而且還確保了準(zhǔn)確率??蛻舴答伔Q, 在以純手工錄入轉(zhuǎn)變到這一模式的過程中, 整體效率提升了3倍??偨Y(jié)用 實現(xiàn)OCR核心就是三步運用自動化來處理OCR, 其核心主要涵蓋三步, 那便是預(yù)處理, 識別以及后處理。預(yù)處理對準(zhǔn)確率起著決定性作用, 識別屬于其中的核心部分, 而后處理則對可用性起到?jīng)Q定作用。然而它并非是無所不能的, 其準(zhǔn)確率會受到圖片質(zhì)量的顯著影響, 也會受文字類型的極大干擾, 還會被背景復(fù)雜度深深制約。在實際開展項目的時候, 建議要結(jié)合人工校驗這種方式, 或者更進一步去考慮更為高級的OCR方案, 例如基于深度學(xué)習(xí)的商業(yè)OCR API這種情況。適用場景清晰印刷體文字、簡單文檔、批量處理需求、預(yù)算有限不適用的場景有使用手寫的文字, 呈現(xiàn)復(fù)雜的表格, 運用特殊的字體, 針對要求準(zhǔn)確率極高的場景。問, 于工作期間碰到過哪些OCR識別方面的難題? 是借助何種方式予以解決的, 還是另外換成別的方案。于評論區(qū)展開交流探討, 瞧瞧大家有過哪些踩坑經(jīng)歷。收藏起來下次需要搭建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