VUE項(xiàng)目-H5端人臉識(shí)別功能實(shí)現(xiàn)

需求:

安卓原生app端接入騰訊人臉核身sdk,采集人臉信息和賬號(hào)綁定袁辈。用戶(hù)使用同一賬號(hào)登錄微信公眾號(hào)h5端菜谣,h5采集人臉信息,調(diào)用騰訊人臉比對(duì)接口吵瞻,和原生app端采集的人臉信息比對(duì)葛菇,是否是同一個(gè)人,然后再進(jìn)行下一步操作橡羞。

H5實(shí)現(xiàn)思路:

1.如何調(diào)用移動(dòng)端設(shè)備攝像頭

2.使用tracking.js捕捉人臉

3.對(duì)人臉進(jìn)行拍照眯停,描繪到canvas畫(huà)布上面

4.將照片轉(zhuǎn)換成base64格式

5.調(diào)用后臺(tái)接口,后臺(tái)調(diào)用騰訊人臉比對(duì)接口進(jìn)行比對(duì)卿泽。(由于調(diào)用騰訊人臉比對(duì)接口需要簽名莺债,簽名在后臺(tái)做比較合適)

代碼以及注釋

1.下載tracking.js 網(wǎng)址:https://trackingjs.com? ?將需要的js文件復(fù)制到靜態(tài)資源文件夾


靜態(tài)資源引入

2.使用video標(biāo)簽調(diào)用手機(jī)攝像頭滋觉,playsinline、webkit-playsinline屬性非常重要齐邦,如果不寫(xiě)會(huì)掉不起來(lái)蘋(píng)果手機(jī)的攝像頭椎侠。微信開(kāi)發(fā)者文檔上面有明確的說(shuō)明,喜歡鉆研的同學(xué)可以到微信開(kāi)發(fā)者文檔中查看文檔措拇。video和canvas的寬高的寫(xiě)法是為了適配手機(jī)屏幕的大小我纪。

```

<template>

? <div id="app">

? ? <div v-show="showContainer" class="face-capture" id="face-capture">

? ? ? <p class="tip">請(qǐng)保持人像在取景框內(nèi)</p>

? ? ? <video

? ? ? ? id="video"

? ? ? ? :width="vwidth"

? ? ? ? :height="vheight"

? ? ? ? playsinline

? ? ? ? webkit-playsinline

? ? ? ></video>

? ? ? <canvas id="refCanvas" :width="cwidth" :height="cheight"></canvas>

? ? ? <img

? ? ? ? class="img-cover"

? ? ? ? src="@/assets/img/face/yuanxingtouming.png"

? ? ? ? alt=""

? ? ? />

? ? ? <p class="contentp">{{ scanTip }}</p>

? ? </div>

? ? <div v-if="!showContainer" class="img-face">

? ? ? <img class="imgurl" :src="imgUrl" />

? ? </div>

? </div>

</template>

```

3.獲取媒體設(shè)備,video開(kāi)始播放

```

import tracking from "@/assets/js/tracking-min.js";

import "@/assets/js/data/face-min.js";

import "@/assets/js/data/eye-min.js";

import "@/assets/js/data/mouth-min.js";

import { faceInfo, conFace } from "@/request/api/my.js";

export default {

? data() {

? ? return {

? ? ? screenSize: {

? ? ? ? width: window.screen.width,

? ? ? ? height: window.screen.height,

? ? ? },

? ? ? URL: null,

? ? ? streamIns: null, // 視頻流

? ? ? showContainer: true, // 顯示

? ? ? tracker: null,

? ? ? tipFlag: false, // 提示用戶(hù)已經(jīng)檢測(cè)到

? ? ? flag: false, // 判斷是否已經(jīng)拍照

? ? ? context: null, // canvas上下文

? ? ? profile: [], // 輪廓

? ? ? removePhotoID: null, // 停止轉(zhuǎn)換圖片

? ? ? scanTip: "人臉識(shí)別中...", // 提示文字

? ? ? imgUrl: "",

? ? ? canvas: null,

? ? ? trackertask: null,

? ? ? vwidth: "266",

? ? ? vheight: "266",

? ? ? cwidth: "266",

? ? ? cheight: "266",

? ? ? userInfo: {},

? ? ? orderData: {},

? ? };

? },

mounted() {

? ? //設(shè)置video canvas寬高

? ? const scale = this.screenSize.width / 375;

? ? this.vwidth = 266 * scale;

? ? this.vheight = 266 * scale;

? ? this.cwidth = 266 * scale;

? ? this.cheight = 266 * scale;

? ? this.playVideo();

? },

methods: {

playVideo() {

? ? ? this.getUserMedia(

? ? ? ? {

? ? ? ? ? //攝像頭拍攝的區(qū)域

? ? ? ? ? video: {

? ? ? ? ? ? width: 500,

? ? ? ? ? ? height: 500,

? ? ? ? ? ? facingMode: "user",

? ? ? ? ? } /* 前置優(yōu)先 */,

? ? ? ? },

? ? ? ? this.success,

? ? ? ? this.error

? ? ? );

? ? },

? ? // 訪(fǎng)問(wèn)用戶(hù)媒體設(shè)備

? ? getUserMedia(constrains, success, error) {

? ? ? if (navigator.mediaDevices.getUserMedia) {

? ? ? ? //最新標(biāo)準(zhǔn)API

? ? ? ? navigator.mediaDevices

? ? ? ? ? .getUserMedia(constrains)

? ? ? ? ? .then(success)

? ? ? ? ? .catch(error);

? ? ? } else if (navigator.webkitGetUserMedia) {

? ? ? ? //webkit內(nèi)核瀏覽器

? ? ? ? navigator.webkitGetUserMedia(constrains).then(success).catch(error);

? ? ? } else if (navigator.mozGetUserMedia) {

? ? ? ? //Firefox瀏覽器

? ? ? ? navagator.mozGetUserMedia(constrains).then(success).catch(error);

? ? ? } else if (navigator.getUserMedia) {

? ? ? ? //舊版API

? ? ? ? navigator.getUserMedia(constrains).then(success).catch(error);

? ? ? } else {

? ? ? ? this.scanTip = "你的瀏覽器不支持訪(fǎng)問(wèn)用戶(hù)媒體設(shè)備";

? ? ? }

? ? },

}

```

4.安卓手機(jī)在允許調(diào)用攝像頭之后正常調(diào)用和播放丐吓,蘋(píng)果手機(jī)第一次允許之后調(diào)不出來(lái)攝像頭浅悉,返回到上個(gè)頁(yè)面再次進(jìn)入人臉識(shí)別頁(yè)面,可以正常調(diào)用券犁。這個(gè)問(wèn)題想了很多方向术健,使用了微信api里面的一些監(jiān)聽(tīng)方法,依然無(wú)效粘衬。想了一些策略荞估,在前一個(gè)頁(yè)面獲取媒體設(shè)備等,都不是完美方案稚新。 耽誤了兩天時(shí)間勘伺,這天中午午休,我做夢(mèng)夢(mèng)到一個(gè)美女褂删。那美女竟然穿著女仆裝娇昙,超短的蕾絲花邊裙,修長(zhǎng)光溜溜的美腿笤妙,潔白秀美的臉蛋,烏黑發(fā)亮的發(fā)絲噪裕,圓潤(rùn)豐滿(mǎn)的胸脯蹲盘,簡(jiǎn)直是夢(mèng)想中的女朋友。我對(duì)著那個(gè)美女拋了一個(gè)媚眼膳音,那美女便婀娜多姿地眨著眼睛回應(yīng)我召衔。我咽了一口口水,忍不住便問(wèn):你如何才能做我女朋友祭陷。那美女張開(kāi)櫻桃小口苍凛,突出幾個(gè)調(diào)皮的字來(lái):你抓到我,我便以身相許兵志。此話(huà)一聽(tīng)醇蝴,我哪能安奈住自己激動(dòng)的內(nèi)心。迅速向她撲去想罕,可是我向她跑去悠栓,她就轉(zhuǎn)身向后跑,我停下來(lái),她就停下來(lái)對(duì)我拋飛吻惭适。我追呀追笙瑟,她跑呀跑,她始終跟我保持著一定的距離癞志,我是怎么都追不上她往枷,氣的我吐血。突然凄杯,我心想错洁,上次做夢(mèng),我得到了一件短暫時(shí)間穿越能力盾舌。只要我集中精力發(fā)功墓臭,我就能穿越到未來(lái)1秒以后的時(shí)間。想到此我就開(kāi)始集中精力妖谴,我一追她便跑窿锉,我一停她便停。突然這個(gè)世界相對(duì)與我靜止了1秒鐘膝舅,我利用這1秒的時(shí)間嗡载,迅速接近女仆裝美女。1秒1秒又1秒仍稀,我終于抱住了女仆裝美女洼滚,那美女對(duì)我眉開(kāi)眼笑,還用櫻桃小口往我臉上親......突然技潘,音樂(lè)響起遥巴,午休時(shí)間結(jié)束,我意猶未盡的醒來(lái)享幽,發(fā)現(xiàn)抱枕上面都是口水铲掐,趕快趁人不注意用紙擦掉。又是突然值桩,我想到了是否可以在調(diào)用video.play方法的時(shí)候摆霉,給它加一個(gè)定時(shí)器,讓它1秒鐘之后再執(zhí)行奔坟。? 沒(méi)想到加上之后携栋,蘋(píng)果手機(jī)上面的問(wèn)題解決了。自此咳秉,我猜想:當(dāng)我們?cè)儐?wèn)是否可以調(diào)用手機(jī)攝像頭的時(shí)候婉支,蘋(píng)果的系統(tǒng)彈框阻礙了js的執(zhí)行,在那一刻js代碼停止執(zhí)行澜建,但是當(dāng)我們點(diǎn)擊允許之后磅摹,js代碼沒(méi)有繼續(xù)執(zhí)行滋迈,因?yàn)橄到y(tǒng)沒(méi)有手段或者說(shuō)事件去觸發(fā)代碼繼續(xù)走。我們加上setTimeout函數(shù)之后户誓,系統(tǒng)有了可以讓代碼繼續(xù)執(zhí)行的觸發(fā)手段饼灿,所以js代碼繼續(xù)執(zhí)行,我們就可以進(jìn)行下一步人臉捕捉了帝美。如果同學(xué)們有更好的解釋?zhuān)瑲g迎留言碍彭。


點(diǎn)擊允許





點(diǎn)擊允許蘋(píng)果手機(jī)并不掉起攝像頭

代碼

```

success(stream) {

? ? ? this.streamIns = stream;

? ? ? const video = document.getElementById("video");

? ? ? // webkit內(nèi)核瀏覽器

? ? ? this.URL = window.URL || window.webkitURL;

? ? ? if ("srcObject" in video) {

? ? ? ? video.srcObject = stream;

? ? ? } else {

? ? ? ? video.src = this.URL.createObjectURL(stream);

? ? ? }

? ? ? // 蘋(píng)果手機(jī)的系統(tǒng)彈框會(huì)阻止js的線(xiàn)程的繼續(xù)執(zhí)行 手動(dòng)0.1秒之后自動(dòng)執(zhí)行代碼

? ? ? setTimeout(() => {

? ? ? ? video.play();

? ? ? ? this.initTracker();// 人臉捕捉

? ? ? }, 100);

? ? },

? ? error(e) {

? ? ? this.scanTip = "訪(fǎng)問(wèn)用戶(hù)媒體失敗";

? ? },

```

5.設(shè)置各種參數(shù) 實(shí)例化人臉捕捉實(shí)例對(duì)象


識(shí)別中

```

// 人臉捕捉 設(shè)置各種參數(shù) 實(shí)例化人臉捕捉實(shí)例對(duì)象,注意canvas上面的動(dòng)畫(huà)效果。

? ? initTracker() {

? ? ? this.context = document.getElementById("refCanvas").getContext("2d"); // 畫(huà)布

? ? ? this.canvas = document.getElementById("refCanvas");

? ? ? this.tracker = new window.tracking.ObjectTracker("face"); // tracker實(shí)例

? ? ? this.tracker.setInitialScale(4);

? ? ? this.tracker.setStepSize(2); // 設(shè)置步長(zhǎng)

? ? ? this.tracker.setEdgesDensity(0.1);

? ? ? try {

? ? ? ? this.trackertask = window.tracking.track("#video", this.tracker); // 開(kāi)始追蹤

? ? ? } catch (e) {

? ? ? ? this.scanTip = "訪(fǎng)問(wèn)用戶(hù)媒體失敗悼潭,請(qǐng)重試";

? ? ? }

? ? ? //開(kāi)始捕捉方法 一直不停的檢測(cè)人臉直到檢測(cè)到人臉

? ? ? this.tracker.on("track", (e) => {

? ? ? ? //畫(huà)布描繪之前清空畫(huà)布

? ? ? ? this.context.clearRect(0, 0, this.canvas.width, this.canvas.height);

? ? ? ? if (e.data.length === 0) {

? ? ? ? ? this.scanTip = "未檢測(cè)到人臉";

? ? ? ? } else {

? ? ? ? ? e.data.forEach((rect) => {

? ? ? ? ? ? //設(shè)置canvas 方框的顏色大小

? ? ? ? ? ? this.context.strokeStyle = "#42e365";

? ? ? ? ? ? this.context.lineWidth = 2;

? ? ? ? ? ? this.context.strokeRect(rect.x, rect.y, rect.width, rect.height);

? ? ? ? ? });

? ? ? ? ? if (!this.tipFlag) {

? ? ? ? ? ? this.scanTip = "檢測(cè)成功庇忌,正在拍照,請(qǐng)保持不動(dòng)2秒";

? ? ? ? ? }

? ? ? ? ? // 1.5秒后拍照舰褪,僅拍一次 給用戶(hù)一個(gè)準(zhǔn)備時(shí)間

? ? ? ? ? // falg 限制一直捕捉人臉皆疹,只要拍照之后就停止檢測(cè)

? ? ? ? ? if (!this.flag) {

? ? ? ? ? ? this.scanTip = "拍照中...";

? ? ? ? ? ? this.flag = true;

? ? ? ? ? ? this.removePhotoID = setTimeout(() => {

? ? ? ? ? ? ? this.tackPhoto();

? ? ? ? ? ? ? document.getElementById("video").pause();

? ? ? ? ? ? ? this.tipFlag = true;

? ? ? ? ? ? }, 1500);

? ? ? ? ? }

? ? ? ? }

? ? ? });

? ? },

```

6.拍照 繪制照片,計(jì)算照片大小占拍,騰訊人臉比對(duì)接口對(duì)照片大小和格式有要求略就。


```

// 拍照

? ? tackPhoto() {

? ? ? // 在畫(huà)布上面繪制拍到的照片

? ? ? this.context.drawImage(

? ? ? ? document.getElementById("video"),

? ? ? ? 0,

? ? ? ? 0,

? ? ? ? this.vwidth,

? ? ? ? this.vwidth

? ? ? );

? ? ? // 保存為base64格式

? ? ? this.imgUrl = this.saveAsPNG(document.getElementById("refCanvas"));

? ? ? /** 拿到base64格式圖片之后就可以在this.compare方法中去調(diào)用后端接口比較了,也可以調(diào)用getBlobBydataURI方法轉(zhuǎn)化成文件再去比較

? ? ? ?* 我們項(xiàng)目里有一個(gè)設(shè)置個(gè)人頭像的地方晃酒,先保存一下用戶(hù)的圖片表牢,然后去拿這個(gè)圖片的地址和當(dāng)前拍照?qǐng)D片給后端接口去比較。

? ? ? ?* */

? ? ? // this.compare(imgUrl)

? ? ? //判斷圖片大小

? ? ? this.imgSize();

? ? ? this.faceToTengXun(); // 人臉比對(duì)

? ? ? this.close();

? ? },

? ? imgSize() {

? ? ? if (this.imgUrl) {

? ? ? ? // 獲取base64圖片byte大小

? ? ? ? const equalIndex = this.imgUrl.indexOf("="); // 獲取=號(hào)下標(biāo)

? ? ? ? let size;

? ? ? ? if (equalIndex > 0) {

? ? ? ? ? const str = this.imgUrl.substring(0, equalIndex); // 去除=號(hào)

? ? ? ? ? const strLength = str.length;

? ? ? ? ? const fileLength = strLength - (strLength / 8) * 2; // 真實(shí)的圖片byte大小

? ? ? ? ? size = Math.floor(fileLength / 1024); // 向下取整

? ? ? ? ? console.log("size", size + "KB");

? ? ? ? } else {

? ? ? ? ? const strLength = this.imgUrl.length;

? ? ? ? ? const fileLength = strLength - (strLength / 8) * 2;

? ? ? ? ? size = Math.floor(fileLength / 1024); // 向下取整

? ? ? ? ? console.log("size", size + "KB");

? ? ? ? }

? ? ? ? if (size > 1024) {

? ? ? ? ? // 圖片超過(guò)1M 按比例壓縮

? ? ? ? ? this.imgUrl = document

? ? ? ? ? ? .getElementById("refCanvas")

? ? ? ? ? ? .toDataURL("image/png", 1024 / size);

? ? ? ? }

? ? ? }

? ? },

? ? // Base64轉(zhuǎn)文件

? ? getBlobBydataURI(dataURI, type) {

? ? ? var binary = window.atob(dataURI.split(",")[1]);

? ? ? var array = [];

? ? ? for (var i = 0; i < binary.length; i++) {

? ? ? ? array.push(binary.charCodeAt(i));

? ? ? }

? ? ? return new Blob([new Uint8Array(array)], {

? ? ? ? type: type,

? ? ? });

? ? },

? ? // compare(url) {

? ? // ? ? let blob = this.getBlobBydataURI(url, 'image/png')

? ? // ? ? let formData = new FormData()

? ? // ? ? formData.append("file", blob, "file_" + Date.parse(new Date()) + ".png")

? ? // ? ? // TODO 得到文件后進(jìn)行人臉識(shí)別

? ? // },

? ? // 保存為png,base64格式圖片

? ? saveAsPNG(c) {

? ? ? return c.toDataURL("image/png", 0.4);

? ? },

```

7. 人臉采集之后贝次,移除實(shí)例化對(duì)象崔兴,初始化參數(shù)和css樣式部分代碼

```

close() {

? ? ? this.flag = false;

? ? ? this.tipFlag = false;

? ? ? this.showContainer = false;

? ? ? this.context = null;

? ? ? this.scanTip = "人臉識(shí)別中...";

? ? ? clearTimeout(this.removePhotoID);

? ? ? if (this.streamIns) {

? ? ? ? this.streamIns.enabled = false;

? ? ? ? this.streamIns.getTracks()[0].stop();

? ? ? ? this.streamIns.getVideoTracks()[0].stop();

? ? ? }

? ? ? this.streamIns = null;

? ? ? this.trackertask.stop();

? ? ? this.tracker = null;

? ? }

<style>

.face-capture {

? display: flex;

? flex-direction: column;

? align-items: center;

? justify-content: center;

}

.tip {

? position: fixed;

? top: 48px;

? z-index: 5;

? font-size: 18px;

? font-family: PingFangSC-Medium, PingFang SC;

? font-weight: 500;

? color: #333333;

? line-height: 25px;

}

.face-capture video,

.face-capture canvas {

? position: fixed;

? top: 117.5px;

? object-fit: cover;

? z-index: 2;

? background-repeat: no-repeat;

? background-size: 100% 100%;

}

.face-capture .img-cover {

? position: fixed;

? top: 63px;

? width: 375px;

? height: 375px;

? object-fit: cover;

? z-index: 3;

? background-repeat: no-repeat;

? background-size: 100% 100%;

}

.face-capture .contentp {

? position: fixed;

? top: 438px;

? font-size: 18px;

? font-weight: 500;

? color: #333333;

}

.face-capture .rect {

? border: 2px solid #0aeb08;

? position: fixed;

? z-index: 4;

}

.img-face {

? display: flex;

? flex-direction: column;

? align-items: center;

? justify-content: center;

}

.img-face .imgurl {

? position: fixed;

? top: 117.5px;

? width: 266px;

? height: 266px;

? border-radius: 133px;

}

</style>

```

總結(jié):

1.人臉捕捉技術(shù)使用的tracking.js,關(guān)鍵是要理解它的運(yùn)作原理和一下參數(shù)配置蛔翅。

2.因?yàn)橐{(diào)用手機(jī)媒體設(shè)備敲茄,兼容性問(wèn)題是大問(wèn)題,特別是蘋(píng)果手機(jī)的問(wèn)題山析,往往不知道如何下手折汞,需要有豐富的開(kāi)發(fā)經(jīng)驗(yàn)和各種曲線(xiàn)救國(guó)的開(kāi)發(fā)思想。

3.那個(gè)夢(mèng)真的很重要盖腿。

4.對(duì),美女更重要损同。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末翩腐,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子膏燃,更是在濱河造成了極大的恐慌茂卦,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,482評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件组哩,死亡現(xiàn)場(chǎng)離奇詭異等龙,居然都是意外死亡处渣,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,377評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén)蛛砰,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)罐栈,“玉大人,你說(shuō)我怎么就攤上這事泥畅≤埽” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,762評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵位仁,是天一觀(guān)的道長(zhǎng)柑贞。 經(jīng)常有香客問(wèn)我,道長(zhǎng)聂抢,這世上最難降的妖魔是什么钧嘶? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,273評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮琳疏,結(jié)果婚禮上有决,老公的妹妹穿的比我還像新娘。我一直安慰自己轿亮,他們只是感情好疮薇,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,289評(píng)論 5 373
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著我注,像睡著了一般按咒。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上但骨,一...
    開(kāi)封第一講書(shū)人閱讀 49,046評(píng)論 1 285
  • 那天励七,我揣著相機(jī)與錄音,去河邊找鬼奔缠。 笑死掠抬,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的校哎。 我是一名探鬼主播两波,決...
    沈念sama閱讀 38,351評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼闷哆!你這毒婦竟也來(lái)了腰奋?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 36,988評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤抱怔,失蹤者是張志新(化名)和其女友劉穎劣坊,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體屈留,經(jīng)...
    沈念sama閱讀 43,476評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡局冰,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,948評(píng)論 2 324
  • 正文 我和宋清朗相戀三年测蘑,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片康二。...
    茶點(diǎn)故事閱讀 38,064評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡碳胳,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出赠摇,到底是詐尸還是另有隱情固逗,我是刑警寧澤,帶...
    沈念sama閱讀 33,712評(píng)論 4 323
  • 正文 年R本政府宣布藕帜,位于F島的核電站烫罩,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏洽故。R本人自食惡果不足惜贝攒,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,261評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望时甚。 院中可真熱鬧隘弊,春花似錦、人聲如沸荒适。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,264評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)刀诬。三九已至咽扇,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間陕壹,已是汗流浹背质欲。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,486評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留糠馆,地道東北人嘶伟。 一個(gè)月前我還...
    沈念sama閱讀 45,511評(píng)論 2 354
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像又碌,于是被迫代替她去往敵國(guó)和親九昧。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,802評(píng)論 2 345

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