深度學(xué)習(xí)網(wǎng)絡(luò)模型部署——人臉關(guān)鍵點檢測問題

實現(xiàn)從項目調(diào)研膏斤、數(shù)據(jù)收集徐绑、數(shù)據(jù)預(yù)處理、深度卷積神經(jīng)網(wǎng)絡(luò)訓(xùn)練再到服務(wù)器部署的人臉表情識別小項目

1莫辨、背景

人臉關(guān)鍵點檢測是人臉識別任務(wù)中重要的基礎(chǔ)環(huán)節(jié)傲茄,人臉關(guān)鍵點精確檢測對眾多科研和應(yīng)用課題具有關(guān)鍵作用,例如沮榜,人臉姿態(tài)矯正盘榨、姿態(tài)識別、表情識別蟆融、疲勞監(jiān)測草巡、嘴型識別等。因此型酥,如何獲取高精度人臉關(guān)鍵點山憨,一直以來都是計算機(jī)視覺、模式識別冕末、圖像處理等領(lǐng)域的熱點研究問題萍歉。

目前github上開源的算法有很多,效果也不錯档桃,包括ERT枪孩,3000FPS,SDM,TCDCN等蔑舞。ERT拒担,3000FPS模型太大,不適合移動端攻询,并且效果不是很好从撼。SDM效果不錯,模型10MB左右钧栖,具有一定商業(yè)價值低零。目前基于深度學(xué)習(xí)的算法取得了較好的效果,github也有一些開源的代碼實現(xiàn)拯杠,zeusees/HyperLandmark 這個git包含了SDM算法和基于深度學(xué)習(xí)的106點face landmark掏婶。效果能夠比得上商業(yè)級的代碼,只不過只提供了SDK潭陪,底層算法沒有開源雄妥。

2、人臉關(guān)鍵點檢測方法

人臉關(guān)鍵點檢測方法根據(jù)是否需要參數(shù)化模型可分為以下兩類依溯,基于參數(shù)化形狀模型的方法和基于非參數(shù)形狀模型的方法老厌。目前,最為常用的是基于非參數(shù)形狀模型的深度學(xué)習(xí)方法黎炉。

傳統(tǒng)人臉關(guān)鍵點檢測##數(shù)據(jù)庫##為室內(nèi)環(huán)境下采集的數(shù)據(jù)庫枝秤,比如 Multi-pie、Feret慷嗜、Frgc宿百、AR、BioID 等人臉數(shù)據(jù)庫洪添。而現(xiàn)階段人臉關(guān)鍵點檢測數(shù)據(jù)庫通常為復(fù)雜環(huán)境下采集的數(shù)據(jù)庫.LFPW 人臉數(shù)據(jù)庫有 1132 幅訓(xùn)練人臉圖像和 300 幅測試人臉圖像垦页,大部分為正面人臉圖像,每個人臉標(biāo)定 29 個關(guān)鍵點干奢。AFLW 人臉數(shù)據(jù)庫包含 25993 幅從 Flickr 采集的人臉圖像痊焊,每個人臉標(biāo)定 21 個關(guān)鍵點。COFW 人臉數(shù)據(jù)庫包含 LFPW 人臉數(shù)據(jù)庫訓(xùn)練集中的 845 幅人臉圖像以及其他 500 幅遮擋人臉圖像忿峻,而測試集為 507 幅嚴(yán)重遮擋(同時包含姿態(tài)和表情的變化)的人臉圖像薄啥,每個人臉標(biāo)定 29 個關(guān)鍵點。MVFW 人臉數(shù)據(jù)庫為多視角人臉數(shù)據(jù)集逛尚,包括 2050 幅訓(xùn)練人臉圖像和 450 幅測試人臉圖像垄惧,每個人臉標(biāo)定 68 個關(guān)鍵點。OCFW 人臉數(shù)據(jù)庫包含 2951 幅訓(xùn)練人臉圖像(均為未遮擋人臉)和 1246 幅測試人臉圖像(均為遮擋人臉)绰寞,每個人臉標(biāo)定 68 個關(guān)鍵點到逊。
人臉輪廓提取常用實驗圖像庫.png

2.1 ASM (Active Shape Models)

ASM 主要分為兩步:第一步:訓(xùn)練铣口。首先,構(gòu)建形狀模型:搜集 n 個訓(xùn)練樣本(n=400);手動標(biāo)記臉部關(guān)鍵點;將訓(xùn)練集中關(guān)鍵點的坐標(biāo)串成特征向量;對形狀進(jìn)行歸一化和對齊(對齊采用 Procrustes 方法);對對齊后的形狀特征做 PCA 處理觉壶。接著脑题,為每個關(guān)鍵點構(gòu)建局部特征。目的是在每次迭代搜索過程中每個關(guān)鍵點可以尋找新的位置铜靶。局部特征一般用梯度特征叔遂,以防光照變化。有的方法沿著邊緣的法線方向提取争剿,有的方法在關(guān)鍵點附近的矩形區(qū)域提取已艰。第二步:搜索。首先:計算眼睛(或者眼睛和嘴巴)的位置蚕苇,做簡單的尺度和旋轉(zhuǎn)變化旗芬,對齊人臉;接著,在對齊后的各個點附近搜索捆蜀,匹配每個局部關(guān)鍵點(常采用馬氏距離),得到初步形狀;再用平均人臉(形狀模型)修正匹配結(jié)果;迭代直到收斂幔嫂。
image.png

2.2 AAM(Active Appearance Models)

1998 年辆它,Cootes 對 ASM 進(jìn)行改進(jìn),不僅采用形狀約束履恩,而且又加入整個臉部區(qū)域的紋理特征锰茉,提出了 AAM 算法。AAM 于 ASM 一樣切心,主要分為兩個階段飒筑,模型建立階段和模型匹配階段。其中模型建立階段包括對訓(xùn)練樣本分別建立形狀模型 (Shape Model) 和紋理模型 (Texture Model)绽昏,然后將兩個模型進(jìn)行結(jié)合协屡,形成 AAM 模型。
image.png

2.3 CPR(Cascaded pose regression)

2010 年全谤,Dollar 提出 CPR(Cascaded Pose Regression, 級聯(lián)姿勢回歸)肤晓,CPR 通過一系列回歸器將一個指定的初始預(yù)測值逐步細(xì)化,每一個回歸器都依靠前一個回歸器的輸出來執(zhí)行簡單的圖像操作认然,整個系統(tǒng)可自動的從訓(xùn)練樣本中學(xué)習(xí)补憾。

人臉關(guān)鍵點檢測的目的是估計向量,其中 K 表示關(guān)鍵點的個數(shù)卷员,由于每個關(guān)鍵點有橫縱兩個坐標(biāo)盈匾,所以 S 得長度為 2K。CPR 檢測流程如圖所示毕骡,一共有 T 個階段削饵,在每個階段中首先進(jìn)行特征提取岩瘦,得到ft, 這里使用的是 shape-indexed features,也可以使用諸如 HOG葵孤、SIFT 等人工設(shè)計的特征担钮,或者其他可學(xué)習(xí)特征(learning based features),然后通過訓(xùn)練得到的回歸器 R 來估計增量ΔS( update vector)尤仍,把ΔS 加到前一個階段的 S 上得到新的 S箫津,這樣通過不斷的迭代即可以得到最終的 S(shape)。
image.png

2.4 DCNN (Deep Convolutional Network Cascade for Facial Point Detection)

2013 年宰啦,Sun 等人首次將 CNN 應(yīng)用到人臉關(guān)鍵點檢測苏遥,提出一種級聯(lián)的 CNN(擁有三個層級)——DCNN(Deep Convolutional Network),此種方法屬于級聯(lián)回歸方法赡模。作者通過精心設(shè)計擁有三個層級的級聯(lián)卷積神經(jīng)網(wǎng)絡(luò)编检,不僅改善初始不當(dāng)導(dǎo)致陷入局部最優(yōu)的問題环形,而且借助于 CNN 強(qiáng)大的特征提取能力,獲得更為精準(zhǔn)的關(guān)鍵點檢測。

如圖所示递雀,DCNN 由三個 Level 構(gòu)成。Level-1 由 3 個 CNN 組成;Level-2 由 10 個 CNN 組成(每個關(guān)鍵點采用兩個 CNN);Level-3 同樣由 10 個 CNN 組成丘侠。
image.png

2.5 Face++版 DCNN (Extensive Facial Landmark Localization with Coarse-to-fine Convolutional Network Cascade)

2013 年评也,F(xiàn)ace++在 DCNN 模型上進(jìn)行改進(jìn),提出從粗到精的人臉關(guān)鍵點檢測算法锋玲,實現(xiàn)了 68 個人臉關(guān)鍵點的高精度定位景用。該算法將人臉關(guān)鍵點分為內(nèi)部關(guān)鍵點和輪廓關(guān)鍵點,內(nèi)部關(guān)鍵點包含眉毛惭蹂、眼睛伞插、鼻子、嘴巴共計 51 個關(guān)鍵點盾碗,輪廓關(guān)鍵點包含 17 個關(guān)鍵點媚污。

針對內(nèi)部關(guān)鍵點和外部關(guān)鍵點,該算法并行的采用兩個級聯(lián)的 CNN 進(jìn)行關(guān)鍵點檢測廷雅,網(wǎng)絡(luò)結(jié)構(gòu)如圖所示杠步。
image.png

針對內(nèi)部 51 個關(guān)鍵點,采用四個層級的級聯(lián)網(wǎng)絡(luò)進(jìn)行檢測榜轿。其中幽歼,Level-1 主要作用是獲得面部器官的邊界框;Level-2 的輸出是 51 個關(guān)鍵點預(yù)測位置,這里起到一個粗定位作用谬盐,目的是為了給 Level-3 進(jìn)行初始化;Level-3 會依據(jù)不同器官進(jìn)行從粗到精的定位;Level-4 的輸入是將 Level-3 的輸出進(jìn)行一定的旋轉(zhuǎn)甸私,最終將 51 個關(guān)鍵點的位置進(jìn)行輸出。針對外部 17 個關(guān)鍵點飞傀,僅采用兩個層級的級聯(lián)網(wǎng)絡(luò)進(jìn)行檢測皇型。Level-1 與內(nèi)部關(guān)鍵點檢測的作用一樣诬烹,主要是獲得輪廓的 bounding box;Level-2 直接預(yù)測 17 個關(guān)鍵點,沒有從粗到精定位的過程弃鸦,因為輪廓關(guān)鍵點的區(qū)域較大绞吁,若加上 Level-3 和 Level-4,會比較耗時間唬格。最終面部 68 個關(guān)鍵點由兩個級聯(lián) CNN 的輸出進(jìn)行疊加得到家破。

算法主要創(chuàng)新點由以下三點:(1)把人臉的關(guān)鍵點定位問題,劃分為內(nèi)部關(guān)鍵點和輪廓關(guān)鍵點分開預(yù)測购岗,有效的避免了 loss 不均衡問題;(2)在內(nèi)部關(guān)鍵點檢測部分汰聋,并未像 DCNN 那樣每個關(guān)鍵點采用兩個 CNN 進(jìn)行預(yù)測,而是每個器官采用一個 CNN 進(jìn)行預(yù)測喊积,從而減少計算量;(3)相比于 DCNN烹困,沒有直接采用人臉檢測器返回的結(jié)果作為輸入,而是增加一個邊界框檢測層(Level-1)乾吻,可以大大提高關(guān)鍵點粗定位網(wǎng)絡(luò)的精度髓梅。

2.6 TCDCN(TCDCN-Facial Landmark Detection by Deep Multi-task Learning)

2014 年,Zhang 等人將 MTL(Multi-Task Learning)應(yīng)用到人臉關(guān)鍵點檢測中绎签,提出 TCDCN(Tasks-Constrained Deep Convolutional Network)[7]枯饿。作者認(rèn)為,在進(jìn)行人臉關(guān)鍵點檢測任務(wù)時辜御,結(jié)合一些輔助信息可以幫助更好的定位關(guān)鍵點,這些信息如屈张,性別擒权、是否帶眼鏡、是否微笑和臉部的姿勢等等阁谆。作者將人臉關(guān)鍵點檢測(5 個關(guān)鍵點)與性別碳抄、是否帶眼鏡、是否微笑及臉部的姿勢這四個子任務(wù)結(jié)合起來構(gòu)成一個多任務(wù)學(xué)習(xí)模型场绿,模型框架如圖所示剖效。

image

網(wǎng)絡(luò)輸出為 4040 的灰度圖,經(jīng)過 CNN 最終得到 22*64 的特征圖璧尸,再通過一層含 100 個神經(jīng)元的全連接層輸出最終提取得到的共享特征。該特征為所有任務(wù)共同享用熬拒,對于關(guān)鍵點檢測問題爷光,就采用線性回歸模型;對于分類問題澎粟,就采用邏輯回歸蛀序。

2.7 MTCNN(Joint Face Detection and Alignment using Multi-task Cascaded Convolutional Networks)

2016 年欢瞪,Zhang 等人提出一種多任務(wù)級聯(lián)卷積神經(jīng)網(wǎng)絡(luò)(MTCNN, Multi-task Cascaded Convolutional Networks)[9] 用以同時處理人臉檢測和人臉關(guān)鍵點定位問題。作者認(rèn)為人臉檢測和人臉關(guān)鍵點檢測兩個任務(wù)之間往往存在著潛在的聯(lián)系徐裸,然而大多數(shù)方法都未將兩個任務(wù)有效的結(jié)合起來遣鼓,本文為了充分利用兩任務(wù)之間潛在的聯(lián)系,提出一種多任務(wù)級聯(lián)的人臉檢測框架重贺,將人臉檢測和人臉關(guān)鍵點檢測同時進(jìn)行骑祟。

MTCNN 包含三個級聯(lián)的多任務(wù)卷積神經(jīng)網(wǎng)絡(luò),分別是 Proposal Network (P-Net)檬姥、Refine Network (R-Net)曾我、Output Network (O-Net),每個多任務(wù)卷積神經(jīng)網(wǎng)絡(luò)均有三個學(xué)習(xí)任務(wù)健民,分別是人臉分類抒巢、邊框回歸和關(guān)鍵點定位。網(wǎng)絡(luò)結(jié)構(gòu)如圖所示:

image
image

MTCNN 實現(xiàn)人臉檢測和關(guān)鍵點定位分為三個階段秉犹。首先由 P-Net 獲得了人臉區(qū)域的候選窗口和邊界框的回歸向量蛉谜,并用該邊界框做回歸,對候選窗口進(jìn)行校準(zhǔn)崇堵,然后通過非極大值抑制(NMS)來合并高度重疊的候選框型诚。然后將 P-Net 得出的候選框作為輸入,輸入到 R-Net鸳劳,R-Net 同樣通過邊界框回歸和 NMS 來去掉那些 false-positive 區(qū)域狰贯,得到更為準(zhǔn)確的候選框;最后赏廓,利用 O-Net 輸出 5 個關(guān)鍵點的位置涵紊。

2.8 TCNN(Tweaked Convolutional Neural Networks)

2016 年,Wu 等人研究了 CNN 在人臉關(guān)鍵點定位任務(wù)中到底學(xué)習(xí)到的是什么樣的特征幔摸,在采用 GMM(Gaussian Mixture Model, 混合高斯模型)對不同層的特征進(jìn)行聚類分析摸柄,發(fā)現(xiàn)網(wǎng)絡(luò)進(jìn)行的是層次的,由粗到精的特征定位既忆,越深層提取到的特征越能反應(yīng)出人臉關(guān)鍵點的位置驱负。針對這一發(fā)現(xiàn),提出了 TCNN(Tweaked Convolutional Neural Networks)[8]患雇,其網(wǎng)絡(luò)結(jié)構(gòu)如圖所示:

image
image

上圖為 Vanilla CNN跃脊,針對 FC5 得到的特征進(jìn)行 K 個類別聚類,將訓(xùn)練圖像按照所分類別進(jìn)行劃分苛吱,用以訓(xùn)練所對應(yīng)的 FC6K匾乓。測試時,圖片首先經(jīng)過 Vanilla CNN 提取特征又谋,即 FC5 的輸出拼缝。將 FC5 輸出的特征與 K 個聚類中心進(jìn)行比較娱局,將 FC5 輸出的特征劃分至相應(yīng)的類別中,然后選擇與之相應(yīng)的 FC6 進(jìn)行連接咧七,最終得到輸出衰齐。

2.9 DAN(Deep Alignment Networks)

2017 年,Kowalski 等人提出一種新的級聯(lián)深度神經(jīng)網(wǎng)絡(luò)——DAN(Deep Alignment Network)[10]继阻,以往級聯(lián)神經(jīng)網(wǎng)絡(luò)輸入的是圖像的某一部分耻涛,與以往不同,DAN 各階段網(wǎng)絡(luò)的輸入均為整張圖片瘟檩。當(dāng)網(wǎng)絡(luò)均采用整張圖片作為輸入時抹缕,DAN 可以有效的克服頭部姿態(tài)以及初始化帶來的問題,從而得到更好的檢測效果墨辛。之所以 DAN 能將整張圖片作為輸入卓研,是因為其加入了關(guān)鍵點熱圖(Landmark Heatmaps),關(guān)鍵點熱圖的使用是本文的主要創(chuàng)新點睹簇。DAN 基本框架如圖所示:

image

DAN 包含多個階段奏赘,每一個階段含三個輸入和一個輸出,輸入分別是被矯正過的圖片太惠、關(guān)鍵點熱圖和由全連接層生成的特征圖磨淌,輸出是面部形狀(Face Shape)。其中凿渊,CONNECTION LAYER 的作用是將本階段得輸出進(jìn)行一系列變換梁只,生成下一階段所需要的三個輸入,具體操作如下圖所示:

image

從第一階段開始講起埃脏,第一階段的輸入僅有原始圖片和 S0搪锣。面部關(guān)鍵點的初始化即為 S0,S0 是由所有關(guān)鍵點取平均得到剂癌,第一階段輸出 S1淤翔。對于第二階段翰绊,首先佩谷,S1 經(jīng)第一階段的 CONNECTION LAYERS 進(jìn)行轉(zhuǎn)換,分別得到轉(zhuǎn)換后圖片 T2(I)监嗜、S1 所對應(yīng)的熱圖 H2 和第一階段 fc1 層輸出谐檀,這三個正是第二階段的輸入。如此周而復(fù)始裁奇,直到最后一個階段輸出 SN桐猬。文中給出在數(shù)據(jù)集 IBUG 上,經(jīng)過第一階段后的 T2(I)刽肠、T2(S1)和特征圖溃肪,如圖所示:

image

從圖中發(fā)現(xiàn)免胃,DAN 要做的「變換」,就是把圖片給矯正了惫撰,第一行數(shù)據(jù)尤為明顯羔沙,那么 DAN 對姿態(tài)變換具有很好的適應(yīng)能力,或許就得益于這個「變換」厨钻。至于 DAN 采用何種「變換」扼雏,需要到代碼中具體探究。

3夯膀、我們項目采用那種人臉關(guān)鍵點檢測問題

在閱讀許多其它論文后發(fā)現(xiàn)诗充,現(xiàn)在應(yīng)用成熟最常用的是68個關(guān)鍵點檢測。如下圖所示:

68個關(guān)鍵點

但也有許多不同數(shù)量關(guān)鍵點诱建,比如:在FaceSDK 6.2當(dāng)中蝴蜓,改進(jìn)了面部特征檢測和跟蹤引擎現(xiàn)在基于面部特征的70點檢測(從上一發(fā)行版的66個面部特征開始),改進(jìn)了張開嘴的追蹤并顯著提高了主要移動平臺上的速度涂佃。
70個關(guān)鍵點

目前励翼,本次實驗運(yùn)用開源庫Dlib。利用Dlib官方訓(xùn)練好的模型“shape_predictor_68_face_landmarks.dat”進(jìn)行68點標(biāo)定辜荠,利用OpenCv進(jìn)行圖像化處理汽抚,在人臉上畫出68個點,并標(biāo)明序號伯病;Dlib中為我們提供了關(guān)于人臉檢測標(biāo)注訓(xùn)練好的文件可在http://dlib.net/files/shape_predictor_68_face_landmarks.dat.bz2下載 (下載完成后解壓到工程目錄下)
image.png

關(guān)鍵點檢測主要流程:
  1. 調(diào)用dlib庫來進(jìn)行人臉識別造烁,調(diào)用預(yù)測器“shape_predictor_68_face_landmarks.dat”進(jìn)行68點標(biāo)定
  2. 存入68個點坐標(biāo)
  3. 利用 cv2.circle 來畫68個點
  4. 利用 cv2.putText() 函數(shù)來畫數(shù)字1-68

與人臉關(guān)鍵點檢測相關(guān)方面文章:

——python+OpenCv+dlib實現(xiàn)人臉68個關(guān)鍵點檢測并標(biāo)注過程代碼
——Dlib人臉Landmark檢測速度優(yōu)化
——人臉關(guān)鍵點對齊
——人臉檢測關(guān)鍵點新增至81個,比Dlib更精準(zhǔn)午笛、更貼邊

81個點惭蟋,額頭區(qū)域增加了13個點

后續(xù)會添加詳細(xì)代碼,不斷改進(jìn)文章內(nèi)容药磺。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末告组,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子癌佩,更是在濱河造成了極大的恐慌木缝,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,718評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件围辙,死亡現(xiàn)場離奇詭異我碟,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)姚建,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,683評論 3 385
  • 文/潘曉璐 我一進(jìn)店門矫俺,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事厘托∮仰ǎ” “怎么了?”我有些...
    開封第一講書人閱讀 158,207評論 0 348
  • 文/不壞的土叔 我叫張陵铅匹,是天一觀的道長沥阱。 經(jīng)常有香客問我,道長伊群,這世上最難降的妖魔是什么考杉? 我笑而不...
    開封第一講書人閱讀 56,755評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮舰始,結(jié)果婚禮上崇棠,老公的妹妹穿的比我還像新娘。我一直安慰自己丸卷,他們只是感情好枕稀,可當(dāng)我...
    茶點故事閱讀 65,862評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著谜嫉,像睡著了一般萎坷。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上沐兰,一...
    開封第一講書人閱讀 50,050評論 1 291
  • 那天哆档,我揣著相機(jī)與錄音,去河邊找鬼住闯。 笑死瓜浸,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的比原。 我是一名探鬼主播插佛,決...
    沈念sama閱讀 39,136評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼量窘!你這毒婦竟也來了雇寇?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,882評論 0 268
  • 序言:老撾萬榮一對情侶失蹤蚌铜,失蹤者是張志新(化名)和其女友劉穎锨侯,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體厘线,經(jīng)...
    沈念sama閱讀 44,330評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡识腿,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,651評論 2 327
  • 正文 我和宋清朗相戀三年出革,在試婚紗的時候發(fā)現(xiàn)自己被綠了造壮。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,789評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖耳璧,靈堂內(nèi)的尸體忽然破棺而出成箫,到底是詐尸還是另有隱情,我是刑警寧澤旨枯,帶...
    沈念sama閱讀 34,477評論 4 333
  • 正文 年R本政府宣布蹬昌,位于F島的核電站,受9級特大地震影響攀隔,放射性物質(zhì)發(fā)生泄漏皂贩。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 40,135評論 3 317
  • 文/蒙蒙 一昆汹、第九天 我趴在偏房一處隱蔽的房頂上張望明刷。 院中可真熱鬧,春花似錦满粗、人聲如沸辈末。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,864評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽挤聘。三九已至,卻和暖如春捅彻,著一層夾襖步出監(jiān)牢的瞬間组去,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,099評論 1 267
  • 我被黑心中介騙來泰國打工步淹, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留添怔,地道東北人。 一個月前我還...
    沈念sama閱讀 46,598評論 2 362
  • 正文 我出身青樓贤旷,卻偏偏與公主長得像广料,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子幼驶,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,697評論 2 351

推薦閱讀更多精彩內(nèi)容