Core ML框架詳細解析(十六) —— 人工智能和IBM Watson Services(一)

版本記錄

版本號 時間
V1.0 2018.10.17 星期三

前言

目前世界上科技界的所有大佬一致認為人工智能是下一代科技革命,蘋果作為科技界的巨頭挠铲,當然也會緊跟新的科技革命的步伐,其中ios API 就新出了一個框架Core ML抑党。ML是Machine Learning的縮寫崎脉,也就是機器學習,這正是現(xiàn)在很火的一個技術图甜,它也是人工智能最核心的內(nèi)容碍粥。感興趣的可以看我寫的下面幾篇。
1. Core ML框架詳細解析(一) —— Core ML基本概覽
2. Core ML框架詳細解析(二) —— 獲取模型并集成到APP中
3. Core ML框架詳細解析(三) —— 利用Vision和Core ML對圖像進行分類
4. Core ML框架詳細解析(四) —— 將訓練模型轉(zhuǎn)化為Core ML
5. Core ML框架詳細解析(五) —— 一個Core ML簡單示例(一)
6. Core ML框架詳細解析(六) —— 一個Core ML簡單示例(二)
7. Core ML框架詳細解析(七) —— 減少Core ML應用程序的大泻谝恪(一)
8. Core ML框架詳細解析(八) —— 在用戶設備上下載和編譯模型(一)
9. Core ML框架詳細解析(九) —— 用一系列輸入進行預測(一)
10. Core ML框架詳細解析(十) —— 集成自定義圖層(一)
11. Core ML框架詳細解析(十一) —— 創(chuàng)建自定義圖層(一)
12. Core ML框架詳細解析(十二) —— 用scikit-learn開始機器學習(一)
13. Core ML框架詳細解析(十三) —— 使用Keras和Core ML開始機器學習(一)
14. Core ML框架詳細解析(十四) —— 使用Keras和Core ML開始機器學習(二)
15. Core ML框架詳細解析(十五) —— 機器學習:分類(一)

開始

首先看一下寫作環(huán)境

Swift 4, iOS 11, Xcode 9

您是否一直在探索使用Apple的Core MLVision框架為您的應用添加機器學習(ML)的令人興奮的可能性嚼摩? 也許您已經(jīng)使用自己的數(shù)據(jù)來擴展Apple的Turi Create模型之一。 歡迎來到該領域的最新玩家: IBM Watson Services, now with Core ML

注意:Core ML模型最初僅用于視覺識別矿瘦,但希望其他服務也將成為支持Core ML的枕面。

在本教程中,您將設置IBM Watson帳戶缚去,訓練自定義視覺識別Watson服務模型潮秘,并設置iOS應用程序以使用導出的Core ML模型。


Watson Services

您將在本教程中使用Watson Studio易结。 它為您的數(shù)據(jù)訓練ML模型提供了一個簡單枕荞,無代碼的環(huán)境。

list of Watson services涵蓋了一系列數(shù)據(jù)搞动,知識躏精,視覺,語音鹦肿,語言ML模型矗烛。 一旦你登錄Watson Studio,你就會仔細看看這些箩溃。

真正令人興奮的可能性是在Apple的IBM Watson Services for Core ML頁面的圖表中顯示您的應用程序的持續(xù)學習:

這越來越接近SiriFaceID所做的事情:在您的應用程序中不斷學習用戶數(shù)據(jù)瞭吃!

這真的是開創(chuàng)性的嗎碌识? 現(xiàn)在,如果在用戶安裝應用程序后Core ML模型發(fā)生變化虱而,您的應用程序可以download and compile a new model筏餐。 該應用程序需要某種通知,以了解該模型的更新牡拇。 一個更大的問題是:為什么模型會改變魁瞪? 也許通過使用更好的訓練算法,但真正的改進通常來自更多的數(shù)據(jù)惠呼。 更好的是导俘,如果實際用戶提供新數(shù)據(jù)。

即使您設法收集用戶數(shù)據(jù)剔蹋,重新訓練模型的工作流程也遠非無縫旅薄。 這可能會有利于Watson服務的平衡:輕松 - 或至少,更容易 - 集成數(shù)據(jù)收集泣崩,再訓練和部署的承諾少梁。 我稍后會告訴你更多相關信息。

1. Turi vs. Watson

你應該用哪個矫付?

  • TuriWatson都允許您擴展視覺和語言的ML模型凯沪,但Watson僅為視覺識別模型導出Core ML。
  • Turi有一個activity classifier买优,Watson沒有妨马。 Watson擁有Discovery,聽起來比Turi更復雜杀赢。
  • 您需要編寫并運行Python才能使用Turi來訓練模型烘跺。 Watson只需要您的數(shù)據(jù)來訓練模型。

2. Um Er … User Privacy?

關于Core ML的重要一點是模型在iOS設備上運行脂崔,可以離線使用并保護用戶的數(shù)據(jù)滤淳。 用戶的數(shù)據(jù)永遠不會離開設備。

但是脱篙,當用戶提供有關Watson模型預測準確性的反饋時娇钱,您的應用程序會將用戶的照片發(fā)送到IBM的服務器伤柄! 嗯绊困,IBM擁有最先進的云端隱私政策(privacy-on-the-cloud policy)。 毫無疑問适刀,Apple將添加新的privacy key要求秤朗,讓用戶選擇向您的模型提供數(shù)據(jù)。


進入正題

1. Carthage

最終笔喉,您需要Carthage依賴管理器來構建Watson Swift SDK取视,其中包含所有Watson Services框架硝皂。

通過從Carthage releases下載最新的Carthage.pkg并運行它來安裝Carthage。

或者作谭,如果您更喜歡使用Homebrew來安裝Carthage稽物,請按照Carthage readme中的說明進行操作。

2. IBM’s Sample Apps - IBM的示例應用程序

從這里開始折欠,路線圖可能會變得有點混亂贝或。我會提供直接鏈接,但也可以在多個頁面上告訴您鏈接的位置锐秦,以便在您以后返回時幫助您找到解決方法咪奖。

從Apple的頁面開始:IBM Watson Services for Core ML。向下滾動到Getting Started酱床,然后按住Command鍵并單擊Begin with Watson Starters下的Start on GitHub羊赵。按住Command鍵單擊可在新選項卡中打開GitHub:您希望打開Apple頁面,以便更輕松地返回GitHub頁面扇谣,以便更輕松地返回Watson Studio登錄頁面 - 相信我昧捷!

下載zip文件,然后打開工作區(qū)QuickstartWorkspace.xcworkspace罐寨。此工作區(qū)包含兩個應用程序:Core ML Vision SimpleCore ML Vision Custom料身。 Simple應用程序使用Core ML模型對常見的DIY工具或工廠進行分類。 Custom應用程序使用從Watson Services下載的Core ML模型衩茸。這是你將在本教程中構建的模型芹血!

向下滾動到自述文件部分Running Core ML Vision CustomSetting up的第一步是登錄Watson Studio。繼續(xù)楞慈,然后單擊鏈接幔烛。

3. Signing Up & Logging In - 注冊和登錄

進入Watson之后,您可以跳到右下角囊蓝,然后登錄饿悬。假設這是您的第一次,您需要創(chuàng)建一個帳戶聚霜。

注意:如果您已擁有IBM Cloud帳戶狡恬,請繼續(xù)sign up for IBM Watson步驟。

單擊確定蝎宇,鍵入電子郵件地址弟劲,選中復選框,然后單擊Next姥芥。 你會看到一個表格:

填寫兔乞。 為避免麻煩,請知道密碼要求是:

密碼必須包含8-31個字符,至少包含一個大寫字母庸追,一個小寫字母霍骄,一個數(shù)字和一個特殊字符( - _。@)

右側帶眼球的圖標顯示密碼淡溯,因此您可以對其進行編輯以包含必要的奇怪信息读整。

選中或取消選中該復選框,然后單擊Create Account咱娶。 您將收到一個頁面绘沉,告訴您檢查您的郵箱,這樣做豺总,打開電子郵件车伞,并確認您的地址。

請勿點擊確認頁面中的任何鏈接喻喳! 他們往往會引導你離開你想去的地方另玖。 返回Watson Studio的登錄頁面,然后單擊鏈接以sign up for IBM Watson表伦。

注意:如果Watson認為您已經(jīng)登錄谦去,它將跳過下一步并繼續(xù)執(zhí)行下一步。

IBMid??? 放心蹦哼,您的IBM Cloud登錄將幫助您進入鳄哭! 輸入您使用的電子郵件地址,然后單擊Continue纲熏。 在下一頁上妆丘,輸入您的密碼,然后Sign in

有趣局劲。 我創(chuàng)建這個帳戶的時候在Vancouver勺拣,而不是在美國南部。 但每個Watson服務僅在某些地區(qū)提供鱼填,而US South則允許您訪問所有這些服務药有。 所以保留那個_us-south附屬物,或者添加它苹丸,如果不存在的話愤惰。

注意:這是關鍵步驟! 如果您的組織中沒有美國南部地區(qū)赘理,您將無法訪問任何Watson服務宦言。 如果您沒有看到這個_us-south附屬項,那么您可能正在使用舊的IBM帳戶感憾。 嘗試使用其他電子郵件地址創(chuàng)建新帳戶蜡励。

單擊Continue令花,等待一小段時間阻桅,同時顯示幾條不同的消息凉倚,然后您就完成了!

單擊Get Started將運行更多消息嫂沉,并在此消息上旋轉(zhuǎn)一段時間:

現(xiàn)在你已經(jīng)登錄進來了

請記谆:將來,您可以直接進入右下方鏈接趟章,然后登錄Watson杏糙。

您已登錄到Services / Watson Services / watson_vision_combined-dsx。 這是因為您單擊了GitHub頁面上的登錄鏈接蚓土,并指定了target = watson_vision_combined宏侍。 稍后您將探索Watson Services,但是現(xiàn)在蜀漆,您將在Watson的對象分類器之上構建自定義對象分類模型谅河。 IBM的示例使用了四種類型的cables,但您可以使用自己的訓練圖像确丢。 當我們到達那一步時绷耍,我會給出詳細的說明。

注意:這是一個重要且有用的頁面鲜侥,但在您瀏覽Watson站點時很容易丟失它褂始。 要返回它,請單擊左上角的IBM Watson主頁按鈕描函,然后向下滾動到Watson Services以查找其鏈接崎苗。


Creating a Custom Object Classifier - 創(chuàng)建自定義對象分類器

回到GitHub page: Training the model。您將會或多或少地遵循這些說明舀寓,我會向您展示您應該看到的內(nèi)容益缠,幫助您找到所有內(nèi)容,并提供您正在做的事情的高級摘要基公。

這是第一個高級摘要幅慌。將自定義Watson對象分類器集成到IBM的示例應用程序中的步驟如下:

  • 1) 創(chuàng)建一個新項目。
  • 2) 上傳訓練數(shù)據(jù)并將其添加到項目中轰豆。
  • 3) 訓練模型胰伍。
  • 4) 將模型的classifierIdapiKey復制到示例應用程序中的String屬性。
  • 5) 在Core ML Vision Custom目錄中酸休,使用Carthage下載并構建Watson Swift SDK骂租。
  • 6) 選擇Core ML Vision Custom方案,構建斑司,運行和測試渗饮。

1. Creating a New Watson Project - 創(chuàng)建一個新的Watson項目

像大多數(shù)IDE一樣,您首先要創(chuàng)建一個項目。這個使用Visual Recognition toolwatson_vision_combined-dsx服務互站。 “dsx”代表Data Science Experience私蕾,Watson Studio的舊名稱。像NS的NextStep一樣胡桃。

單擊Create Mode踩叭,然后等待很短的時間以加載New project頁面。為Name輸入Custom Core ML翠胰,然后單擊Create容贝。

注意:不時有各種Watson人出現(xiàn)。 我不認為他們真的在那里之景,但如果你和他們中的任何一個實際聊天斤富,請告訴我。

過了一會兒锻狗,你會看到這個:

2. Adding Training Data - 添加訓練數(shù)據(jù)

Watson視覺識別模型經(jīng)過預先訓練满力,可識別工具和植物。 您可以上傳自己的訓練數(shù)據(jù)屋谭,以創(chuàng)建一個模型脚囊,對您的應用程序中的重要對象進行分類。 IBM的示例項目使用電纜照片訓練模型桐磁,將新圖像分類為HDMI悔耘,Thunderbolt,VGA或USB我擂。

注意:要上傳您自己的訓練圖像而不是線纜圖像衬以,請將圖像整理到文件夾中:圖像的名稱無關緊要,但每個文件夾的名稱應該是其中圖像所代表的類的標簽校摩。 在本教程結尾的Resources部分中看峻,可以找到IBM的圖像數(shù)據(jù)指南。 如果您希望模型識別不同光照或不同角度的物體衙吩,則提供每種變化的幾個樣本互妓。 然后壓縮文件夾,并上傳它們而不是示例zipfile坤塞。

單擊二進制數(shù)據(jù)圖標以打開側邊欄冯勉,您可以在其中添加訓練圖像的zip文件:

單擊Browse,然后導航到從GitHub下載的visual-recognition-coreml-master文件夾中的Training Images文件夾:

選擇所有四個zip文件摹芙,然后單擊Choose灼狰,然后等待上載文件。

選中所有四個復選框浮禾,然后單擊漢堡菜單圖標以查看Add selected to mode選項交胚。

選擇該項份汗,然后觀察并等待圖像添加到模型中。

注意:當您上傳自己的訓練圖像時蝴簇,您還可以將圖像上傳到negative class:這些圖像與您希望模型識別的任何類都不匹配杯活。 理想情況下,它們具有與您的positive classes相同的功能军熏,例如轩猩,當您訓練模型識別iPod時卷扮,可以使用iTunes卡荡澎。

3. Training the Model - 訓練模型

無論何時添加數(shù)據(jù),模型都可以進行訓練晤锹。 訓練使用創(chuàng)建基本工具和植物分類器的相同機器學習模型摩幔,但將新類添加到它能夠識別的內(nèi)容中。 在Mac上訓練這種尺寸的模型需要很長時間鞭铆。

關閉側欄或衡,然后單擊Train Model

去喝一杯,也許是點心 - 這可能需要至少5分鐘车遂,也許10分鐘:

成功結果如下:

4. Adding the Model to Your App - 將模型添加到您的應用程序

示例應用程序已經(jīng)具有所有VisionRecognition代碼封断,可以下載盈简,編譯和使用您的新模型毫深。 您所要做的就是編輯apiKeyclassifierId屬性,以便應用程序從您的模型中創(chuàng)建VisionRecognition對象灵妨。 查找這些值需要多次點擊衣陶。

注意:對于此步驟和下一步柄瑰,我認為如果您只是按照我的說明操作,并且不查看GitHub頁面會更容易剪况。

單擊here鏈接以查看GitHub頁面調(diào)用the custom model overview page

單擊Associated Service鏈接(GitHub頁面將其稱為your Visual Recognition instance name):您將返回Services / Watson Services / watson_vision_combined-dsx教沾! 但向下滾動到底部:

這就是你剛訓練的模型!

注意:GitHub頁面將其稱為the Visual Recognition instance overview page in Watson Studio译断。

回到Xcode - 還記得Xcode嗎授翻? - 打開Core ML Vision Custom / ImageClassificationViewController.swift,并在outlets下方找到classifierID屬性孙咪。

在Watson頁面上堪唐,單擊Copy model ID鏈接,然后將此值粘貼在classifierID引號之間该贾,如下所示羔杨,但您的值將不同:

let classifierId = "DefaultCustomModel_1752360114"

向上滾動到Watson頁面的頂部,然后選擇Credentials選項卡:

api_key值復制并粘貼到classifierId上方的apiKey屬性中:

let apiKey = "85e5c50b26b16d1e4ba6e5e3930c328ce0ad90cb"

你的值會有所不同杨蛋。

這兩個值將您的應用程序連接到剛剛訓練過的Watson模型兜材。 示例應用程序包含用戶點擊重新加載按鈕時更新模型的代碼理澎。

最后一次編輯:以YYYY-MM-DD格式將version更改為今天的日期:

let version = "2018-03-28"

GitHub頁面沒有提到這一點,但Watson Swift SDK GitHub repository README推薦它曙寡。

5. Building the Watson Swift SDK - 構建Watson Swift SDK

最后的魔術通過在應用程序目錄中構建Watson Swift SDK來實現(xiàn)糠爬。 這為所有Watson Services創(chuàng)建了框架。

打開Terminal并導航到Core ML Vision Custom目錄举庶,該目錄包含Cartfile执隧。 列出文件,只是為了確保:

cd <drag folder from finder>
ls

你應該看到這樣的東西:

Audreys-MacBook-Pro-4:Core ML Vision Custom amt1$ ls
Cartfile            Core ML Vision Custom.xcodeproj
Core ML Vision Custom

在Project導航器中打開Core ML Vision Custom項目:

VisualRecognitionV3.framework是紅色的户侥,這意味著它不存在镀琉。 你即將解決這個問題!

還記得在本教程開始時你是如何安裝Carthage的嗎蕊唐? 現(xiàn)在您可以運行此命令:

carthage bootstrap --platform iOS

這大約需要五分鐘屋摔。 Cloning swift-sdk需要一段時間,然后downloading swift-sdk.framework需要另外一段時間替梨。 它應該看起來像這樣:

$ carthage bootstrap --platform iOS
*** No Cartfile.resolved found, updating dependencies
*** Fetching swift-sdk
*** Fetching Starscream
*** Fetching common-crypto-spm
*** Fetching zlib-spm
*** Checking out zlib-spm at "1.1.0"
*** Checking out Starscream at "3.0.4"
*** Checking out swift-sdk at "v0.23.1"
*** Checking out common-crypto-spm at "1.1.0"
*** xcodebuild output can be found in /var/folders/5k/0l8zvgnj6095_s00jpv6gxj80000gq/T/carthage-xcodebuild.lkW2sE.log
*** Downloading swift-sdk.framework binary at "v0.23.1"
*** Skipped building common-crypto-spm due to the error:
Dependency "common-crypto-spm" has no shared framework schemes for any of the platforms: iOS

If you believe this to be an error, please file an issue with the maintainers at https://github.com/daltoniam/common-crypto-spm/issues/new
*** Skipped building zlib-spm due to the error:
Dependency "zlib-spm" has no shared framework schemes for any of the platforms: iOS

If you believe this to be an error, please file an issue with the maintainers at https://github.com/daltoniam/zlib-spm/issues/new
*** Building scheme "Starscream" in Starscream.xcodeproj

看一下Finder看新加了什么

一個充滿框架的文件夾钓试! 每個Watson Service一個,包括以前缺少的VisualRecognitionV3.framework副瀑。 當然弓熏,它在Project導航器中:

注意:IBM建議您定期下載SDK的更新,以便與此項目的任何更新保持同步糠睡。

6. Build, Run, Test - 構建挽鞠,運行,測試

真相的時刻铜幽!

選擇Core ML Vision Custom方案滞谢,然后在iOS設備上構建并運行(如果可能)。 您需要拍攝電纜照片以測試模型除抛,如果它在同一設備上運行狮杨,則可以更輕松地將它們提供給應用程序。

注意:要在您的設備上運行該應用程序到忽,請打開目標橄教,然后在Bundle Identifier中將com.ibm.watson.developer-cloud替換為您獨有的內(nèi)容。 然后在Signing部分中喘漏,選擇一個Team护蝶。

該應用程序首先編譯模型,這需要一點時間:

然后它會告訴你當前模型的ID:

注意:如果收到有關模型的錯誤消息翩迈,請點擊重新加載按鈕再試一次。

點按camera圖標以添加測試照片堤魁。 然后,應用程序顯示模型的圖像分類:

模型并不總是正確的:它一直堅持我的Thunderbolt電纜是USB妥泉,無論我拍攝照片的角度如何。

注意:在構建Watson Swift SDK之前蝇率,我沒有看到為什么必須添加apiKeyclassifierId的任何明顯原因,所以我嘗試了其他的方法刽沾。 我下載了示例代碼的新副本本慕,并在其Core ML Vision Custom目錄中運行了carthage命令:該命令的輸出與上面相同,并且Carthage文件夾內(nèi)容看起來相同悠轩。 然后我將apiKeyclassifierId添加到應用程序间狂,并構建并運行它:應用程序沒有下載模型攻泼。 viewDidLoad()viewWillAppear(_ :)中的斷點不會觸發(fā)火架! 該應用程序加載,您添加一個雷電電纜的照片忙菠,并將其分類為鋤頭手柄或開蓋器 - 它使用基本的視覺識別模型何鸡。


Show Me the Code!

所以示例應用程序工作。 現(xiàn)在您需要在您的應用中包含哪些代碼才能使用您的模型牛欢?

實際上骡男,IBM在他們的Watson Swift SDK GitHub存儲庫READMEVisual Recognition部分中非常清楚地呈現(xiàn)了所有代碼。 沒有Core ML代碼傍睹! Vision Recognition框架包含了封裝Watson視覺識別模型的Core ML模型隔盛!

我要添加的唯一內(nèi)容就是這個說明:

注意:要自動下載最新模型,請通過在viewDidLoad()viewDidAppear(_ :)中調(diào)用VisualRecognition方法updateLocalModel(classifierID:failure:success)來檢查模型的更新拾稳。 它不會從Watson下載模型吮炕,除非該模型是本地模型的較新版本。


Updating the Model - 更新模型

我想在本節(jié)中做的是向您展示如何在您的應用中實現(xiàn)持續(xù)學習访得。 它沒有在GitHub示例中介紹龙亲,我也沒有得到我的問題的確切答案。 我會盡可能多地告訴你悍抑,或者已經(jīng)猜到了鳄炉。

1. Directly From the App

您可以使用此VisualRecognition方法直接從您的應用程序向您的Watson項目發(fā)送正面和負面示例的新數(shù)據(jù)集:

public func updateClassifier(classifierID: String, positiveExamples: [VisualRecognitionV3.PositiveExample]? = default, negativeExamples: URL? = default, failure: ((Error) -> Swift.Void)? = default, success: @escaping (VisualRecognitionV3.Classifier) -> Swift.Void)

非Swift版本的documentation描述了這些參數(shù)搜骡。

重要提示:您無法使用Lite計劃的API密鑰更新自定義分類器谈竿。 要在Lite計劃上更新自定義分類器榕订,請在標準計劃上創(chuàng)建另一個服務實例贩幻,然后重新創(chuàng)建自定義分類器丛楚。

要使用標準計劃,您必須交出信用卡坏平,并為每次標記舶替,檢測或訓練活動支付0.002美元至0.10美元。

2. Using Moderated User Feedback - 使用審核用戶反饋

但是陈醒,除非您確定數(shù)據(jù)的正確性钉跷,否則不應將數(shù)據(jù)直接從應用程序發(fā)送到模型。 機器學習的最佳實踐是預處理訓練數(shù)據(jù)犬钢,“修復或刪除不正確玷犹,不完整坯屿,格式不正確或重復的數(shù)據(jù)” - 你知道:垃圾輸入领跛,垃圾輸出! 因此胧瓜,將未經(jīng)檢查的數(shù)據(jù)輸入模型的想法是令人厭惡的蒲肋。

相反兜粘,您應該在項目的Settings頁面的Tools部分中啟用Data Preparation工具:

然后,您的應用應將正面和負面示例發(fā)送到存儲位置,您可以將其作為數(shù)據(jù)源連接到項目玄窝。 回到Watson帽氓,您(或您的ML專家)使用Data Refinery工具清理新數(shù)據(jù),然后再使用它來訓練您的模型玉凯。

此信息來自IBM WatsonRefine data文檔捎拯。


Watson Services

想知道Watson Services還有哪些其他產(chǎn)品署照? 讓我們來看看没隘!

找到您的Visual Recognition : watson_vision_combined-dsx頁面:

Command-click Watson Services打開新的標簽頁

單擊Add Service看下面列表

單擊服務的Add鏈接以查看可用的內(nèi)容和數(shù)量,但在此早期階段品嚣,Watson僅為Visual Recognition生成Core ML模型。 對于其他服務眶诈,您的應用必須向Watson服務器上運行的模型發(fā)送請求逝撬。 Watson Swift SDK GitHub repository README包含執(zhí)行此操作的示例代碼狡相。

注意:請記住尽棕,您可以通過單擊左上角的IBM Watson主頁按鈕返回到項目頁面滔悉,然后向下滾動到Watson Services以查找其鏈接回官。

資源

進一步閱讀

后記

本篇主要講述了人工智能和IBM Watson Services,感興趣的給個贊或者關注~~~

?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市络它,隨后出現(xiàn)的幾起案子埋凯,更是在濱河造成了極大的恐慌换怖,老刑警劉巖悦污,帶你破解...
    沈念sama閱讀 219,539評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡躬厌,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,594評論 3 396
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人饥脑,你說我怎么就攤上這事笋颤≮寤海” “怎么了颁糟?”我有些...
    開封第一講書人閱讀 165,871評論 0 356
  • 文/不壞的土叔 我叫張陵键畴,是天一觀的道長起惕。 經(jīng)常有香客問我咏删,道長督函,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,963評論 1 295
  • 正文 為了忘掉前任锋叨,我火速辦了婚禮宛篇,結果婚禮上吆倦,老公的妹妹穿的比我還像新娘晌梨。我一直安慰自己派任,他們只是感情好璧南,可當我...
    茶點故事閱讀 67,984評論 6 393
  • 文/花漫 我一把揭開白布司倚。 她就那樣靜靜地躺著动知,像睡著了一般盒粮。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上妒穴,一...
    開封第一講書人閱讀 51,763評論 1 307
  • 那天讼油,我揣著相機與錄音蛤迎,去河邊找鬼召川。 笑死峰搪,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播肺孤,決...
    沈念sama閱讀 40,468評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼莽囤,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了缅叠?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤灸异,失蹤者是張志新(化名)和其女友劉穎俐巴,沒想到半個月后廷没,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,850評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡仁热,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,002評論 3 338
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了悴势。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,144評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖玻侥,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 35,823評論 5 346
  • 正文 年R本政府宣布滨砍,位于F島的核電站,受9級特大地震影響散罕,放射性物質(zhì)發(fā)生泄漏擅威。R本人自食惡果不足惜熙涤,卻給世界環(huán)境...
    茶點故事閱讀 41,483評論 3 331
  • 文/蒙蒙 一灭袁、第九天 我趴在偏房一處隱蔽的房頂上張望茸歧。 院中可真熱鬧软瞎,春花似錦拉讯、人聲如沸魔慷。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,026評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽纵顾。三九已至施逾,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間曹仗,已是汗流浹背整葡。 一陣腳步聲響...
    開封第一講書人閱讀 33,150評論 1 272
  • 我被黑心中介騙來泰國打工遭居, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留俱萍,地道東北人告丢。 一個月前我還...
    沈念sama閱讀 48,415評論 3 373
  • 正文 我出身青樓岖免,卻偏偏與公主長得像颅湘,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子瞻鹏,可洞房花燭夜當晚...
    茶點故事閱讀 45,092評論 2 355

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