標籤: 網站設計

  • 我坐了坐王欣的馬桶,覺得太味兒了

    我坐了坐王欣的馬桶,覺得太味兒了

      文/Philex

      來源:科技唆麻(ID:techsuoma)

      不少人自認為欠兩個人電影票,一個是周星馳,另一個是王欣。

      前一位的,大概率在《美人魚》的時候已經還清了,即將沖春節檔的《新喜劇之王》的已經開始显示出頹勢:

      “衝著 XX 也要看”的邏輯已經開始失效了。前兩年屢試不爽的“大 IP+ 流量明星”在全年幾乎全線票房撲街,一度喜劇影響力不遜於周星馳的開心麻花,也在《李茶的姑媽》上結結實實栽了個跟頭。

      “衝著 XX 也要看”不靈了,那“衝著 XX 也要用”呢?

      出獄一年,王欣做了兩件事。去年 9 月拿了貝塔斯曼和 IDG 的 3000 萬美元天使輪,以及今年 1 月宣布以匿名社交產品回歸創業。前者被他視為“拿給團隊看的”,後者則是他口中的“剛需”。

      這款產品就是定於今天早上 10:30 發布的馬桶。

      從 14 日晚間起,便有用戶陸續通過馬桶官方公布的方式提前試用。既然主打匿名,如你們所想馬桶里也的確充滿了馬桶里該有的東西:

      沒了“罪魁禍首”樂視作為發泄對象,作為社交產品老大,騰訊自然成為靶子。一如當年“3Q 大戰”時,被 360 煽動的吃瓜群眾一樣,熱烈非凡。

      王欣自己也加入了戰鬥中,但至於事實是不是如王欣字里行間暗示的“微信怕了”,作為看客的我不知道,但微信認定其“網頁包含不安全內容”,我認為並沒有任何過失。

      當然,新生力量被“打壓”的戲碼永遠是群眾喜聞樂見的。咱不用微信和短信邀請了,咱直接上官網也行。但事實證明,王欣的這隻馬桶完全沒有做好上線的準備。

      從今天上午開始,下載好 App 的,一直處於“驗證碼錯誤”的狀態。而沒還沒下載的,已經沒地兒下載了,iOS 下載鏈接已經被關停,蒲公英應用內測分發平台上,App 也已經被刪除。

      更扎心的在於已經有不少用戶開始質疑“為何一個匿名社交 App 要獲取通訊錄權限?”

      就“發布馬桶”這件事本身來說,已經成為了一場車禍。而一直以“產品經理”的標籤示人的王欣,顯然清楚一款產品在這一階段流失用戶的後果。

      我更想說的是,王欣在抓緊修復問題的同時,可能要開始審視一下自己的人設。

      1

      冷啟動,靠個人品牌靠譜嗎?

      正如開頭那個段子一樣,“欠 XX 一張電影票”從本質上來講,是社交貨幣的一種體現。

      譬如,你自稱“欠星爺一張電影票”,約等於為自己貼上了一個“周星馳影迷”的標籤。

      我來一句“欠王欣一張電影票/會員”,很大程度上為自己貼上的是“關注互聯網行業”或者“我也青春過”的標籤。

      別笑,在中國這個複雜且龐大的市場,整天把段子掛在嘴邊的人,不少就是他所在圈子中的“懂的人”。自詡“懂”的人,是不屑於整天把“雞湯味”更濃的馬雲、任正非掛在嘴邊的;他們更崇拜張小龍……以及王欣。

      而王欣很有可能陷入了一個“大V怪圈”。

      類似的情況經常出現在不少大V身上。社交時代,總有人囿於表達技巧的欠缺,或是懶於表達自己的態度與觀點,而被一個人設鮮明的大V吸粉。粉的人,奉為圭臬;黑的人,棄如敝履。

      王欣的人設是“堅信技術無罪的天才”,滿足了不少人“謝耳朵式幻想”。

      從過往的輿論來看,吹捧王欣,至少已經能聚集起相當一部分人。而這群人表現出的態度很大程度上主要關注的並不是“做了什麼”,而是“誰在做”。王欣目前聚集起的大量用戶,並不像微信早期切入市場時,是瞄準了“移動端即時通訊”這一需求的發芽,而僅僅因為他是王欣做的。

      在所謂的“苦微信久矣”大環境下,少年斗惡龍的戲碼自然是群眾喜聞樂見的。而如果這位少年還是“自帶青春回憶濾鏡”的王欣,戲劇程度顯然就更高了。

      換言之,馬桶是什麼不重要,“王欣的產品”才是重點。

      如果你有留心最近的新聞,王欣的各種採訪想必是刷到了不少。以個人品牌作為產品冷啟動的憑藉,的確是能夠在短時間內聚集起一大批種子用戶。

      那麼,然後呢?是不斷滿足這群快播延續下來的種子用戶的需求,為“拜王欣教”打造一款“圈地自萌”式的產品,還是以傳統邏輯燒錢拉新蹣跚前行?

      畢竟,個人品牌的反噬作用,我們在手機圈已經能找到案例。反觀當年快播做到 3 億用戶,也從未將王欣抬到台前。

      2

      匿名社交真的有戲?那麼多閃呢

      “微信無法撼動”已經成為共識,那麼放棄熟人社交,以“匿名”切入社交賽道的確順理成章。不過,以當下的初步顯露的問題來看,馬桶顯然有不少沒有考慮到問題。

      匿名社交不是什麼新鮮事物,從當年各種聊天室、BBS,到後來一度火爆的無秘、烏鴉、幾度。從 PC 互聯網,到移動互聯網,它的確是一種“剛需”,畢竟窺私慾是人性中天生的一部分。

      匿名是真的在“緩解壓力”嗎?恐怕不是,匿名潛台詞其實是“你不用為你的言論負責”

      互不相識地兩個人會匿名討論最喜歡的作家是誰嗎?顯然不會。

      所以你能看到最“長壽”的匿名社交產品是誰呢?是脈脈。原因無非兩點:一方面相對垂直,多為互聯網相關話題;另一方面是公司認證,好像一定程度上彌補了言論真實性的問題,也出現過翻車問題。

      既不垂直,亦無須為言論負責,顯然難逃一死。

      往輕了說,就像曾經的無秘,早期還是一片豐收的瓜田,最後卻成了造謠攻擊的溫床。而往嚴重了,LBS 配合匿名社交,想象空間不可謂不大。比如銷售某些違禁商品、拉皮條……至少我已經聽到的消息是,不少黑產玩家已經躍躍欲試了。

      以過往的經驗來看,監管的重鎚一旦落下,後續翻身的機會顯然渺茫。

      而最難堪的問題在於那個創投圈最經典的問題“騰訊做了怎麼辦?”

      騰訊的 QQ 和微信牢牢把握住熟人社交的市場,微信不必多說,QQ 至少是目前最大的年輕用戶社交平台,以至於外界會誕生出一種不切實際的看法:既然熟人市場已經結束,那麼陌生人社交呢?

      從陌陌到探探,陌生人社交真的那麼好做嗎?

      當年 Snapchat 與 Facebook 的那一場大戰不少人還記憶猶新。Snapchat 憑藉“閱后即焚”的亮點功能,從學生群體中開始爆紅,一度市值高達 330 億美元。

      而在拒絕 Facebook 的收購之後,前者開始全面將“閱后即焚”作為旗下產品的內建功能。如今 Snapchat 市值僅剩不足 82 億美元。

      和熟人社交以關係鏈作為壁壘不同,匿名社交可以說毫無壁壘可言。

      以王欣瞄準的微信為例,無論是已經作古的“漂流瓶”還是同樣 LBS 社交的“附近的人”,都曾是冷啟動時的殺手鐧。這對於如今的微信來講,並沒有技術壁壘。

      對微信而言,實現起來僅僅是在發現頁加一個按鈕而已,背後則是覆蓋的 10 億的裝機量。

      換言之,需要匿名交流場景,對效率的要求是極高的,這意味着微信/QQ 有着天然優勢。心如火燎地捧着半天沒幾個人的馬桶,和到處都是人的微信/QQ,你選誰呢。

      如果想得更遠一點,如果微信真的有了匿名社交。聊得來的話,隨口一句“加個微信吧”,這可能是殺手級的應用。

      總之,匿名社交可能有戲,但分誰來做。

      3

      最後:如何定義圈子?

      截止到完稿時,今天的第三場社交產品發布會還沒開始。從匿名社交的馬桶、到“專為年輕人打造”的多閃,其實我認為有一個本末倒置的地方。

      做社交,定義圈子的不是產品,而是文化。

      中國是個大市場,有極大的想象力。所以也不賴互聯網公司沒創意,扎堆兒做社交,誰都想複製當年騰訊以社交為根據地的打法。

      但問題是,中國這個市場也足夠複雜。所以“專為年輕人打造”的產品其實完全找不到落腳點、莫說是 90 后與 95 后相差甚遠,哪怕是細化到同一個班級,也是你愛二次元,我看 NBA。

      互聯網降低了獲取信息的難度,也解放了個體的發展方向。

      所以,倒回去看過去一段時間一度表現不錯社交產品,比如一起唱歌的音遇、一起看電影的微光、亦或是以愛好共同點匹配的 soul……無不適將落腳點放在“文化認同”上。

      顯然,打敗微信的,不會是下一個微信。

    本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理【其他文章推薦】

    網頁設計公司推薦更多不同的設計風格,搶佔消費者視覺第一線

    ※廣告預算用在刀口上,網站設計公司幫您達到更多曝光效益

    ※自行創業 缺乏曝光? 下一步"網站設計"幫您第一時間規劃公司的門面形象

  • 塔塔電力擬興建1千座充電站,助印度汰除汽柴油車

    塔塔電力擬興建1千座充電站,助印度汰除汽柴油車

    日經新聞周二報導,印度最大民營電廠塔塔電力(Tata Power)計畫未來五年將於印度首都建造一千座充電站,藉以響應政府2030年禁用汽柴油車的政策。

    塔塔電力目前只有五座充電站在營運,印度全國充電站加總起來也不過100座左右,由此可知印度發展電動車的基礎設施嚴重不足,增加充電站密度勢在必行。

    據塔塔電力執行長Praveer Sinha表示,一千個新充電站都將設置在新德里北部地區,預估將花費10億印度盧比(1,520萬美元),每個充電站有九成服務鉛電池車,一成服務鋰電池車。

    (本文內容由授權使用)

    本站聲明:網站內容來源於EnergyTrend https://www.energytrend.com.tw/ev/,如有侵權,請聯繫我們,我們將及時處理

    【其他文章推薦】

    ※帶您來了解什麼是 USB CONNECTOR  ?

    ※自行創業 缺乏曝光? 下一步"網站設計"幫您第一時間規劃公司的門面形象

    ※如何讓商品強力曝光呢? 網頁設計公司幫您建置最吸引人的網站,提高曝光率!!

    ※綠能、環保無空污,成為電動車最新代名詞,目前市場使用率逐漸普及化

    ※廣告預算用在刀口上,網站設計公司幫您達到更多曝光效益

  • .NET高級特性-Emit(2)類的定義,.NET高級特性-Emit(1)

    .NET高級特性-Emit(2)類的定義,.NET高級特性-Emit(1)

      在上一篇博文發了一天左右的時間,就收到了博客園許多讀者的評論和推薦,非常感謝,我也會及時回復讀者的評論。之後我也將繼續撰寫博文,梳理相關.NET的知識,希望.NET的圈子能越來越大,開發者能了解/深入.NET的本質,將工作做的簡單又高效,拒絕重複勞動,拒絕CRUD。

      ok,咱們開始繼續Emit的探索。在這之前,我先放一下我往期關於Emit的文章,方便讀者閱讀。

      《》

    一、基礎知識

      既然C#作為一門面向對象的語言,所以首當其沖的我們需要讓Emit為我們動態構建類。

      廢話不多說,首先,我們先來回顧一下C#類的內部由什麼東西組成:

      (1) 字段-C#類中保存數據的地方,由訪問修飾符、類型和名稱組成;

      (2) 屬性-C#類中特有的東西,由訪問修飾符、類型、名稱和get/set訪問器組成,屬性的是用來控制類中字段數據的訪問,以實現類的封裝性;在Java當中寫作getXXX()和setXXX(val),C#當中將其變成了屬性這種語法糖;

      (3) 方法-C#類中對邏輯進行操作的基本單元,由訪問修飾符、方法名、泛型參數、入參、出參構成;

      (4) 構造器-C#類中一種特殊的方法,該方法是專門用來創建對象的方法,由訪問修飾符、與類名相同的方法名、入參構成。

      接着,我們再觀察C#類本身又具備哪些東西:

      (1) 訪問修飾符-實現對C#類的訪問控制

      (2) 繼承-C#類可以繼承一個父類,並需要實現父類當中所有抽象的方法以及選擇實現父類的虛方法,還有就是子類需要調用父類的構造器以實現對象的創建

      (3) 實現-C#類可以實現多個接口,並實現接口中的所有方法

      (4) 泛型-C#類可以包含泛型參數,此外,類還可以對泛型實現約束

      以上就是C#類所具備的一些元素,以下為樣例:

    public abstract class Bar
    {
        public abstract void PrintName();
    }
    public interface IFoo<T> { public T Name { get; set; } } //繼承Bar基類,實現IFoo接口,泛型參數T
    public class Foo<T> : Bar, IFoo<T>
      //泛型約束
      where T : struct {
    //構造器 public Foo(T name):base() { _name = name; } //字段 private T _name; //屬性 public T Name { get => _name; set => _name = value; } //方法 public override void PrintName() {
        Console.WriteLine(_name.ToString()); }
    }

      在探索完了C#類及其定義后,我們要來了解C#的項目結構組成。我們知道C#的一個csproj項目最終會對應生成一個dll文件或者exe文件,這一個文件我們稱之為程序集Assembly;而在一個程序集中,我們內部包含和定義了許多命名空間,這些命令空間在C#當中被稱為模塊Module,而模塊正是由一個一個的C#類Type組成。

     

     

     

       所以,當我們需要定義C#類時,就必須首先定義Assembly以及Module,如此才能進行下一步工作。

    二、IL概覽

       由於Emit實質是通過IL來生成C#代碼,故我們可以反向生成,先將寫好的目標代碼寫成cs文件,通過編譯器生成dll,再通過ildasm查看IL代碼,即可依葫蘆畫瓢的編寫出Emit代碼。所以我們來查看以下上節Foo所生成的IL代碼。

      

     

     

       從上圖我們可以很清晰的看到.NET的層級結構,位於樹頂層淺藍色圓點表示一個程序集Assembly,第二層藍色表示模塊Module,在模塊下的均為我們所定義的類,類中包含類的泛型參數、繼承類信息、實現接口信息,類的內部包含構造器、方法、字段、屬性以及它的get/set方法,由此,我們可以開始編寫Emit代碼了

    三、Emit編寫

      有了以上的對C#類的解讀和IL的解讀,我們知道了C#類本身所需要哪些元素,我們就開始根據這些元素來開始編寫Emit代碼了。這裏的代碼量會比較大,請讀者慢慢閱讀,也可以參照以上我寫的類生成il代碼進行比對。

      在Emit當中所有創建類型的幫助類均以Builder結尾,從下錶中我們可以看的非常清楚

    元素中文 元素名稱 對應Emit構建器名稱
    程序集  Assembly AssemblyBuilder
    模塊  Module ModuleBuilder
     Type TypeBuilder
    構造器  Constructor ConstructorBuilder
    屬性  Property PropertyBuilder
    字段  Field FieldBuilder
    方法  Method MethodBuilder

      由於創建類需要從Assembly開始創建,所以我們的入口是AssemblyBuilder

      (1) 首先,我們先引入命名空間,我們以上節Foo類為樣例進行編寫

    using System.Reflection.Emit;

      (2) 獲取基類和接口的類型

    var barType = typeof(Bar);
    var interfaceType = typeof(IFoo<>);

      (3) 定義Foo類型,我們可以看到在定義類之前我們需要創建Assembly和Module

    //定義類
    var assemblyBuilder = AssemblyBuilder.DefineDynamicAssembly(new AssemblyName("Edwin.Blog.Emit"), AssemblyBuilderAccess.Run);
    var moduleBuilder = assemblyBuilder.DefineDynamicModule("Edwin.Blog.Emit");
    var typeBuilder = moduleBuilder.DefineType("Foo", TypeAttributes.Public | TypeAttributes.Class | TypeAttributes.AutoClass | TypeAttributes.AnsiClass | TypeAttributes.BeforeFieldInit);

      (4) 定義泛型參數T,並添加約束

    //定義泛型參數
    var genericTypeBuilder = typeBuilder.DefineGenericParameters("T")[0];
    //設置泛型約束
    genericTypeBuilder.SetGenericParameterAttributes(GenericParameterAttributes.NotNullableValueTypeConstraint);

      (5) 繼承和實現接口,注意當實現類的泛型參數需傳遞給接口時,需要將泛型接口添加泛型參數后再調用AddInterfaceImplementation方法

    //繼承基類
    typeBuilder.SetParent(barType);
    //實現接口
    typeBuilder.AddInterfaceImplementation(interfaceType.MakeGenericType(genericTypeBuilder));

      (6) 定義字段,因為字段在構造器值需要使用,故先創建

    //定義字段
    var fieldBuilder = typeBuilder.DefineField("_name", genericTypeBuilder, FieldAttributes.Private);

      (7) 定義構造器,並編寫內部邏輯

    //定義構造器
    var ctorBuilder = typeBuilder.DefineConstructor(MethodAttributes.Public | MethodAttributes.HideBySig | MethodAttributes.SpecialName | MethodAttributes.RTSpecialName, CallingConventions.Standard, new Type[] { genericTypeBuilder });
    var ctorIL = ctorBuilder.GetILGenerator();
    //Ldarg_0在實例方法中表示this,在靜態方法中表示第一個參數
    ctorIL.Emit(OpCodes.Ldarg_0);
    ctorIL.Emit(OpCodes.Ldarg_1);
    //為field賦值
    ctorIL.Emit(OpCodes.Stfld, fieldBuilder);
    ctorIL.Emit(OpCodes.Ret);

      (8) 定義Name屬性

    //定義屬性
    var propertyBuilder = typeBuilder.DefineProperty("Name", PropertyAttributes.None, genericTypeBuilder, Type.EmptyTypes);

      (9) 編寫Name屬性的get/set訪問器

    //定義get方法
    var getMethodBuilder = typeBuilder.DefineMethod("get_Name", MethodAttributes.Public | MethodAttributes.HideBySig | MethodAttributes.NewSlot | MethodAttributes.SpecialName | MethodAttributes.Virtual, CallingConventions.Standard, genericTypeBuilder, Type.EmptyTypes);
    var getIL = getMethodBuilder.GetILGenerator();
    getIL.Emit(OpCodes.Ldarg_0);
    getIL.Emit(OpCodes.Ldfld, fieldBuilder);
    getIL.Emit(OpCodes.Ret);
    typeBuilder.DefineMethodOverride(getMethodBuilder, interfaceType.GetProperty("Name").GetGetMethod()); //實現對接口方法的重載
    propertyBuilder.SetGetMethod(getMethodBuilder); //設置為屬性的get方法
    //定義set方法
    var setMethodBuilder = typeBuilder.DefineMethod("set_Name", MethodAttributes.Public | MethodAttributes.HideBySig | MethodAttributes.NewSlot | MethodAttributes.SpecialName | MethodAttributes.Virtual, CallingConventions.Standard, null, new Type[] { genericTypeBuilder });
    var setIL = setMethodBuilder.GetILGenerator();
    setIL.Emit(OpCodes.Ldarg_0);
    setIL.Emit(OpCodes.Ldarg_1);
    setIL.Emit(OpCodes.Stfld, fieldBuilder);
    setIL.Emit(OpCodes.Ret);
    typeBuilder.DefineMethodOverride(setMethodBuilder, interfaceType.GetProperty("Name").GetSetMethod()); //實現對接口方法的重載
    propertyBuilder.SetSetMethod(setMethodBuilder); //設置為屬性的set方法

       (10) 定義並實現PrintName方法

    //定義方法
    var printMethodBuilder = typeBuilder.DefineMethod("PrintName", MethodAttributes.Public | MethodAttributes.HideBySig | MethodAttributes.Virtual, CallingConventions.Standard, null, Type.EmptyTypes);
    var printIL = printMethodBuilder.GetILGenerator();
    printIL.Emit(OpCodes.Ldarg_0);
    printIL.Emit(OpCodes.Ldflda, fieldBuilder);
    printIL.Emit(OpCodes.Constrained, genericTypeBuilder);
    printIL.Emit(OpCodes.Callvirt, typeof(object).GetMethod("ToString", Type.EmptyTypes));
    printIL.Emit(OpCodes.Call, typeof(Console).GetMethod("WriteLine", new Type[] { typeof(string) }));
    printIL.Emit(OpCodes.Ret);
    //實現對基類方法的重載
    typeBuilder.DefineMethodOverride(printMethodBuilder, barType.GetMethod("PrintName", Type.EmptyTypes));

      (11) 創建類

    var type = typeBuilder.CreateType(); //netstandard中請使用CreateTypeInfo().AsType()

      (12) 調用

    var obj = Activator.CreateInstance(type.MakeGenericType(typeof(DateTime)), DateTime.Now);
    (obj as Bar).PrintName();
    Console.WriteLine((obj as IFoo<DateTime>).Name);

    四、應用

      上面的樣例僅供學習只用,無法運用在實際項目當中,那麼,Emit構建類在實際項目中我們可以有什麼應用,提高我們的編碼效率

      (1) 動態DTO-當我們需要將實體映射到某個DTO時,可以用動態DTO來代替你手寫的DTO,選擇你需要的字段回傳給前端,或者前端把他想要的字段傳給後端

      (2) DynamicLinq-我的第一篇博文有個讀者提到了表達式樹,而linq使用的正是表達式樹,當表達式樹+Emit時,我們就可以用像SQL或者GraphQL那樣的查詢語句實現動態查詢

      (3) 對象合併-我們可以編寫實現一個像js當中Object.assign()一樣的方法,實現對兩個實體的合併

      (4) AOP動態代理-AOP的核心就是代理模式,但是與其對應的是需要手寫代理類,而Emit就可以幫你動態創建代理類,實現切面編程

      (5) …

    五、小結

      對於Emit,確實初學者會對其感到複雜和難以學習,但是只要搞懂其中的原理,其實最終就是C#和.NET語言的本質所在,在學習Emit的同時,也是在鍛煉你的基本功是否紮實,你是否對這門語言精通,是否有各種簡化代碼的應用。

      保持學習,勇於實踐;Write Less,Do More;作者之後還會繼續.NET高級特性系列,感謝閱讀!

    本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理【其他文章推薦】

    網頁設計公司推薦更多不同的設計風格,搶佔消費者視覺第一線

    ※廣告預算用在刀口上,網站設計公司幫您達到更多曝光效益

    ※自行創業 缺乏曝光? 下一步"網站設計"幫您第一時間規劃公司的門面形象

  • 人臉檢測和人臉識別原理,微調(Fine-tune)原理

    人臉檢測和人臉識別原理,微調(Fine-tune)原理

    一、MTCNN的原理

      搭建人臉識別系統的第一步是人臉檢測,也就是在圖片中找到人臉的位置。在這個過程中,系統的輸入是一張可能含有人臉的圖片,輸出是人臉位置的矩形框,如下圖所示。一般來說,人臉檢測應該可以正確檢測出圖片中存在的所有人臉,不能用遺漏,也不能有錯檢。  

       

      獲得包含人臉的矩形框后,第二步要做的就是人臉對齊(Face Alignment)。原始圖片中人臉的姿態、位置可能較大的區別,為了之後統一處理,要把人臉“擺正”。為此,需要檢測人臉中的關鍵點(Landmark),如眼睛的位置、鼻子的位置、嘴巴的位置、臉的輪廓點等。根據這些關鍵點可以使用仿射變換將人臉統一校準,以盡量消除姿勢不同帶來的誤差,人臉對齊的過程如下圖所示。

       

      這裏介紹一種基於深度卷積神經網絡的人臉檢測和人臉對齊方法—-MTCNN,它是基於卷積神經網絡的一種高精度的實時人臉檢測和對齊技術。MT是英文單詞Multi-task的縮寫,意思就是這種方法可以同時完成人臉檢測的人臉對齊兩項任務。相比於傳統方法,MTCNN的性能更好,可以更精確的定位人臉,此外,MTCNN也可以做到實時的檢測。

      MTCNN由三個神經網絡組成,分別是P-Net、R-Net、O-Net。在使用這些網絡之前,首先要將原始圖片縮放到不同尺度,形成一個“圖像金字塔”,如下圖所示。

       

      接着會對每個尺度的圖片通過神經網絡計算一遍。這樣做的原因在於:原始圖片中的人臉存在不同的尺度,如有的人臉比較大,有的人臉比較小。對於比較小的人臉,可以在放大后的圖片上檢測;對於比較大的人臉,可以在縮小后的圖片上進行檢測。這樣,就可以在統一的尺度下檢測人臉了。

      現在再來討論第一個網絡P-Net的結構,如下圖所示

       

      P-Net的輸入是一個寬和高皆為12像素,同時是3通道的RGB圖像,該網絡要判斷這個12×12的圖像中是否含有人臉,並且給出人臉框和關鍵點的位置。因此對應的輸出應該由3部分組成:

      (1)第一個部分要判斷該圖像是否是人臉(上圖中的face classification),輸出向量的形狀為1x1x2,也就是兩個值,分別為該圖像是人臉的概率,以及該圖像不是人臉的概率。這兩個值加起來應該嚴格等1。之所以使用兩個值來表示,是為了方便定義交叉熵損失。
      (2)第二個部分給出框的精確位置(上圖中的bounding box regression),一般稱之為框回歸。P-Net輸入的12×12的圖像塊可能並不是完美的人臉框的位置,如有的時候人臉並不正好為方形,有的時候12×12的圖像塊可能偏左或偏右,因此需要輸出當前框位置相對於完美的人臉框位置的偏移。這個偏移由四個變量組成。一般地,對於圖像中的框,可以用四個數來表示它的位置:框左上角的橫坐標、框左上角的縱坐標、框的寬度、框的高度。因此,框回歸輸出的值是:框左上角的橫坐標的相對偏移、框左上角的縱坐標的相對偏移、框的寬度的誤差、框的 高度的誤差。輸出向量的形狀就是上圖中的1x1x4。
      (3)第三個部分給出人臉的5個關鍵點的位置。5個關鍵點分別為:左眼的位置、右眼的位置、鼻子的位置、左嘴角的位置、右嘴角的位置。每個關鍵點又需要橫坐標和縱坐標來表示,因此輸出一共是10維(即1x1x10)

      上面的介紹大致就是P-Net的結構了。在實際計算中,通過P-Net中第一層卷積的移動,會對圖像中每一個12×12的區域做一次人臉檢測,得到的結構如下圖所示:

       

      圖中框的大小各有不同,除了框回歸的影響外,主要是因為將圖片金字塔的各個尺度都使用P-Net計算了一遍,因此形成了大小不同的人臉框。P-Net的結果還是比較粗糙的,所以接下來又使用R-Net進一步調優。R-Net的網絡結構如下圖所示。

       

      這個結構與之前的P-Net非常類似,P-Net的輸入是12x12x3的圖像,R-Net是24x24x3的圖像,也就是說,R-Net判斷24x24x3的圖像中是否含有人臉,以及預測關鍵點的位置。R-Net的輸出和P-Net完全一樣,同樣有人臉判別、框回歸、關鍵點位置預測三部分組成。

      在實際應用中,對每個P-Net輸出可能為人臉的區域都放縮到24×24的大小,在輸入到R-Net中,進行進一步的判定。得到的結果如下圖所示:

       

      顯然R-Net消除了P-Net中很多誤判的情況。

      進一步把所有得到的區域縮放成48×48的大小,輸入到最後的O-Net中,O-Net的結構同樣與P-Net類似,不同點在於它的輸入是48x48x3的圖像,網絡的通道數和層數也更多了。O-Net的網絡的結構如下圖所示:

       

      檢測結果如下圖所示:

       

      從P-Net到R-Net,最後再到O-Net,網絡輸入的圖片越來越大,卷積層的通道數越來越多,內部的層數也越來越多,因此它們識別人臉的準確率應該是越來越高的。同時,P-Net的運行速度是最快的,R-Net的速度其次,O-Net的運行速度最慢。之所以要使用三個網絡,是因為如果一開始直接對圖中的每個區域使用O-Net,速度會非常慢慢。實際上P-Net先做了一遍過濾,將過濾后的結果再交給R-Net進行過濾,最後將過濾后的結果交給效果最好但速度較慢的O-Net進行判別。這樣在每一步都提前減少了需要判別的數量,有效降低了處理時間。

      最後介紹MTCNN的損失定義和訓練過程。MTCNN中每個網絡都有三部分輸出,因此損失也由三部分組成。針對人臉判別部分,直接使用交叉熵損失,針對框回歸和關鍵點判定,直接使用L2損失。最後這三部分損失各自乘以自身的權重再加起來,就形成最後的總損失了。在訓練P-Net和R-Net時,更關心框位置的準確性,而較少關注關鍵點判定的損失,因此關鍵點判定損失的權重很小。對於O-Net,關鍵點判定損失的權重較大。

    二、使用深度卷積網絡提取特徵

      經過人臉檢測和人臉對齊兩個步驟,就獲得了包含人臉的區域圖像,接下來就要進行人臉識別了。這一步一般是使用深度卷積網絡,將輸入的人臉圖像轉換為一個向量的表示,也就是所謂的“特徵”。

      如何針對人臉來提取特徵?可以先來回憶VGG16的網絡結構(見),輸入神經網絡的是圖像,經過一系列卷積計算后,全連接分類得到類別概率。

      在通常的圖像應用中,可以去掉全連接層,使用卷積層的最後一層當作圖像的“特徵”。但如果對人臉識別問題同樣採用這種方法,即使用卷積層最後一層做為人臉的“向量表示”,效果其實是不好的。這其中的原因和改進方法是什麼?在後面會談到,這裏先談談希望這種人臉的“向量表示”應該具有哪些性質。

      在理想的狀況下,希望“向量表示”之間的距離可以直接反映人臉的相似度

      對於同一個人的兩張人臉圖像,對應的向量之間的歐幾里得距離應該比較小。對於不同人的兩張人臉圖像,對應的向量之間的歐幾里得距離應該比較大。

      例如,設人臉圖像為$x_{1}$,$x_{2}$,對應的特徵為$f(x_{1})$,$f(x_{2})$,當$x_{1}$,$x_{2}$對應是同一個人的人臉時,$f(x_{1})$,$f(x_{2})$的距離$\left \| f(x_{1}),f(x_{2}) \right \|$2應該很小,而當$x_{1}$,$x_{2}$是不同人的人臉時,$f(x_{1})$,$f(x_{2})$的距離$\left \| f(x_{1}),f(x_{2}) \right \|$2應該很大。

      在原始的CNN模型中,使用的是Softmax損失。Softmax是類別間的損失,對於人臉來說,每一類就是一個人。儘管使用Softmax損失可以區別出每個人,但其本質上沒有對每一類的向量表示之間的距離做出要求。

      舉個例子,使用CNN對MNIST進行分類,設計一個特殊的卷積網絡,讓其最後一層的向量變為2維,此時可以畫出每一類對應的2維向量(圖中一種顏色對應一種類別),如下圖所示:

       

      上圖是我們直接使用softmax訓練得到的結果,它就不符合我們希望特徵具有的特點:

      (1)我們希望同一類對應的向量表示盡可能接近。但這裏同一類(如紫色),可能具有很大的類間距離;
      (2)我們希望不同類對應的向量應該盡可能遠。但在圖中靠中心的位置,各個類別的距離都很近;

      對於人臉圖像同樣會出現類似的情況,對此,有很改進方法。這裏介紹其中兩種:一種是三元組損失函數(Triplet Loss),一種是中心損失函數。 

    三、三元組損失的定義

      三元組損失函數的原理:既然目標是特徵之間的距離應該具備某些性質,那麼我們就圍繞這個距離來設計損失。具體的,我們每次都在訓練數據中抽出三張人臉圖像,第一張圖像記為$x_{i}^{a}$,第二張圖像記為$x_{i}^{p}$,第三張圖像記為$x_{i}^{n}$。在這樣的一個“三元組”中,$x_{i}^{a}$和$x_{i}^{p}$對應的是同一個人的圖像,而$x_{i}^{n}$是另外一個不同的人的人臉圖像。因此,距離$\left \| f(x_{i}^{a})-f(x_{i}^{p}) \right \|_{2}$應該較小,而距離$\left \| f(x_{i}^{a})-f(x_{i}^{n}) \right \|_{2}$應該較大。嚴格來說,三元組損失要求下面的式子成立:

       $\left \| f(x_{i}^{a})- f(x_{i}^{p})\right \|_{2}^{2}+\alpha <\left \| f(x_{i}^{a})- f(x_{i}^{p})\right \|_{2}^{2}$

      然後計算相同人臉之間與不同人臉之間距離的平方

       $\left [ \left \| f(x_{i}^{a})-f(x_{i}^{p}) \right \|_{2}^{2}+\alpha -\left \| f(x_{i}^{a})-f(x_{i}^{n}) \right \|_{2}^{2} \right ]_{+}$

      上式表達相同人臉間的距離平方至少要比不同人臉間的距離平方小α(取平方主要是為了方便求導),據此,上式實際上就是相當於一個損失函數。這樣的話,當三元組的距離滿足 $\left \| f(x_{i}^{a})- f(x_{i}^{p})\right \|_{2}^{2}+\alpha <\left \| f(x_{i}^{a})- f(x_{i}^{p})\right \|_{2}^{2}$時,不產生任何損失,此時$L_{i}=0$。當距離不滿足上述等式時,就會有值為$\left \| f(x_{i}^{a})-f(x_{i}^{p}) \right \|_{2}^{2}+\alpha -\left \| f(x_{i}^{a})-f(x_{i}^{n}) \right \|_{2}^{2}$的損失。此外,在訓練時會固定$\left \| f(x) \right \|_{2}=1$,以保證特徵不會無限地“遠離”。

      三元組損失直接對距離進行優化,因此可以解決人臉的特徵表示問題。但是在訓練過程中,三元組的選擇非常地有技巧性。如果每次都是隨機選擇三元組,雖然模型可以正確的收斂,但是並不能達到最好的性能。如果加入”難例挖掘”,即每次都選擇最難分辨率的三元組進行訓練,模型又往往不能正確的收斂。對此,又提出每次都選擇那些“半難”(Semi-hard)的數據進行訓練,讓模型在可以收斂的同時也保持良好的性能。此外,使用三元組損失訓練人臉模型通常還需要非常大的人臉數據集,才能取得較好的效果。

    四、中心損失的定義

      與三元組損失不同,中心損失(Center Loss)不直接對距離進行優化,它保留了原有的分類模型,但又為每個類(在人臉模型中,一個類就對應一個人)指定了一個類別中心。同一類的圖像對應的特徵都應該盡量靠近自己的類別中心,不同類的類別中心盡量遠離。與三元組損失函數相比,使用中心損失訓練人臉模型不需要使用特別的採樣方法,而且利用較少的圖像就可以達到與單元組損失相似的效果。下面我們一起來學習中心損失的定義:

       還是設輸入的人臉圖像為$x_{i}$,該人臉對應的類別為$y_{i}$,對每個類別都規定一個類別中心,記作$c_{yi}$。希望每個人臉圖像對應的特徵$f(x_{i})$都盡可能接近其中心$c_{yi}$。因此定義中心損失為:

        $L_{i}=\frac{1}{2}\left \| f(x_{i})-c_{yi}\right \|_{2}^{2}$

      多張圖像的中心損失就是將它們的值加在一起:

       $L_{center}=\sum\limits_{i}L_i$

      這是一個非常簡單的定義。不過還有一個問題沒有解決,那就是如何確定每個類別的中心$c_{yi}$呢?從理論上來說,類別$y_{i}$的最佳中心應該是它對應的所有圖片的特徵的平均值。但如果採取這樣的定義,那麼在每一次梯度下降時,都要對所有圖片計算一次$c_{yi}$,計算複雜度就太高了。針對這種情況,不妨近似一處理下,在初始階段,先隨機確定$c_{yi}$,接着在每個batch內,使用$L_i=\|f(x_i)-c_{yi}\|_2^2$對當前batch內的$c_{yi}$ 也計算梯度,並使用該梯度更新$c_{yi}$ 。此外,不能只使用中心損失來訓練分類模型,還需要加入Softmax損失,也就是說,最終的損失由兩部分構成,即$L = L_{softmax}+\lambda L_{center}$,其中$\lambda $是一個超參數。

      最後來總結使用中心損失來訓練人臉模型的過程。首先隨機初始化各个中心$c_{yi}$,接着不斷地取出batch進行訓練,在每個batch中,使用總的損失$L$,除了使用神經網絡模型的參數對模型進行更新外,也對$c_{yi}$進行計算梯度,並更新中心的位置。

      中心損失可以讓訓練處的特徵具有“內聚性”。還是以MNIST的例子來說,在未加入中心損失時,訓練的結果不具有內聚性。再加入中心損失后,得到的特徵如下圖所示。 

       

    從圖中可以看出,當中心損失的權重λ越大時,生成的特徵就會具有越明顯的“內聚性” 。

    五、使用特徵設計應用

    當提取出特徵后,剩下的問題就非常簡單了。因為這種特徵已經具有了相同人對應的向量的距離小,不同人對應的向量距離大的特點,接下來,一般的應用有以下幾類:

    • 人臉驗證(Face Identification)。就是檢測A、B是否屬於同一個人。只需要計算向量之間的距離,設定合適的報警閾值(threshold)即可。
    • 人臉識別(Face Recognition)。這個應用是最多的,給定一張圖片,檢測數據庫中與之最相似的人臉。顯然可以被轉換為一個求距離的最近鄰問題。
    • 人臉聚類(Face Clustering)。在數據庫中對人臉進行聚類,直接用K-means即可。

     

     

    本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理【其他文章推薦】

    ※帶您來了解什麼是 USB CONNECTOR  ?

    ※自行創業 缺乏曝光? 下一步"網站設計"幫您第一時間規劃公司的門面形象

    ※如何讓商品強力曝光呢? 網頁設計公司幫您建置最吸引人的網站,提高曝光率!!

    ※綠能、環保無空污,成為電動車最新代名詞,目前市場使用率逐漸普及化

    ※廣告預算用在刀口上,網站設計公司幫您達到更多曝光效益

  • YAMAHA 與 Gogoro 合作首款電動速克達 EC-05 於 8 月上市,售價 99,800 元

    YAMAHA 與 Gogoro 合作首款電動速克達 EC-05 於 8 月上市,售價 99,800 元

    台灣山葉(YAMAHA)和 Gogoro 在 2018 年宣布展開合作之後,不少消費者都好奇兩家公司會擦出什麼樣的火花。YAMAHA 終於在 6 月 27 日正式發表電動速克達 EC-05,也是雙方合作的第一款機車。

    EC-05 採用 Gogoro 市售車種的平台架構,搭配 YAMAHA 的原創設計,未來也會掛上 YAMAHA 的品牌。EC-05 會以換電為動力來源,支援 Gogoro 旗下的換電站 GoStation,不過車主在購車後需要另行和 Gogoro 簽約購買換電服務。新款的電動速克達由 Gogoro 負責製造,並透過 YAMAHA 的通路進行銷售。

    EC-05 的動力系統是 G2 鋁合金水冷永磁同步馬達(S-Version),配合 MOSFET 水冷馬達控制器。安全極速達到時速 90 公里,靜止加速到時速 50 公里僅需 3.9 秒。空車重量為 106 公斤,加上電池則為 126 公斤,擁有 25L 的置物空間。EC-05 可以連結智慧型手機和 Apple Watch,並使用 NFC 和藍牙進行連結。

    EC-05 的電池位於車身當中,座墊底層結構、置物箱的開口部位與收納空間都和 Gogoro 現有車種相同,不過重塑車身線條的設計風格。里程表則根據 Gogoro 原有的元件進行調整,略為提高並向前方移動,減少騎乘者所需的視線移動。坐墊結構與材質沿用 Gogoro 的現行車種,不過座墊後方略為墊高,提供加速時的止滑和支撐。

    EC-05 的電池位於車身內部,擁有 25L 的置物空間。

    EC-05 的里程表和 Gogoro 的車種類似,不過略為提高並向前方移動。

    EC-05 的頭燈。

    EC-05 的尾燈。

    YAMAHA 表示,EC-05 能夠幫助擴展台灣市場的產品線,不僅回應多樣化顧客的需求,也向電動車領域跨出一步。YAMAHA 指出 EC-05 將為 YAMAHA 未來的電動機車家族打下基礎,似乎暗示未來會推出更多與 Gogoro 合作的車款。YAMAHA 台灣總經理小川真司表示,YAMAHA 日本母公司與其他大廠合作的機車聯盟目前只限於日本國內的市場,因此並不會影響台灣子公司和 Gogoro 的合作。

    小川真司認為雖然 EC-05 內部與 Gogoro 的車種相同,但 YAMAHA 的風格與 Gogoro 不同,而且雙方的消費族群也不一樣,可以給不同生活方式的族群不同的選擇。此外,YAMAHA 在台灣市場已經深耕多年,有更多的經銷商夥伴,無論是銷售或保養都能更貼近消費者。YAMAHA 對 EC-05 頗具信心,喊出了一年 2 萬台的銷售目標。

    EC-05 提供藍灰色、深黑色、深藍灰色和白銀色 4 種顏色讓消費者選擇,定價為台幣 99,800 元,補助最多的桃園市汰換二行程機車換購電動機車補助 33,000 元,因此最低台幣 66,800 元起。預計將在 7 月 1 日開放預購,8 月 1 日正式上市。YAMAHA 將在台北、台中和高雄展開 EC-05 的巡迴賞車活動,活動期間參與的消費者將有機會抽中電動速克達 EC-05。

    EC-05 共推出藍灰色、深黑色、深藍灰色和白銀色四款顏色。

    (合作媒體:。圖片來源:)

    延伸閱讀:

    本站聲明:網站內容來源於EnergyTrend https://www.energytrend.com.tw/ev/,如有侵權,請聯繫我們,我們將及時處理

    【其他文章推薦】

    ※帶您來了解什麼是 USB CONNECTOR  ?

    ※自行創業 缺乏曝光? 下一步"網站設計"幫您第一時間規劃公司的門面形象

    ※如何讓商品強力曝光呢? 網頁設計公司幫您建置最吸引人的網站,提高曝光率!!

    ※綠能、環保無空污,成為電動車最新代名詞,目前市場使用率逐漸普及化

    ※廣告預算用在刀口上,網站設計公司幫您達到更多曝光效益

  • 區塊鏈成重要突破口,與幣圈無關卻與5G有關

    區塊鏈成重要突破口,與幣圈無關卻與5G有關

      幾乎是一夜之間,區塊鏈就成了更熱門的話題,此前,如果我們還在說“物聯網、大數據、雲計算、人工智能和 5G”,那麼,以後這一長串的背後可能就要加上“區塊鏈”。

      誠然,國家將區塊鏈當成戰略來發展,並“要把區塊鏈作為核心技術自主創新的重要突破口,明確主攻方向,加大投入力度,着力攻克一批關鍵核心技術,加快推動區塊鏈技術和產業創新發展”,這對整個區塊鏈產業都是巨大的利好,但是,這種利好卻實實在在與現在網絡上那些頂着區塊鏈帽子實際卻是在搞傳銷的“幣”們,毫無關係。如果有關係,那也一定是負面。

      在國內,區塊鏈技術佔據優勢的公司依然是 BAT,特別是阿里巴巴和螞蟻金服。在 2018 年的世界互聯網大會上,螞蟻金服“自主可控金融級商用區塊鏈平台”與“阿里雲 supET 工業互聯網平台”同時入選 15 項世界互聯網領先科技成果之列。前者的區塊鏈因素顯而易見,後者實際上也在由區塊鏈提供製造生產質量追溯和供應鏈管理服務。

      據全球知名智能信息服務機構科睿唯安公布信息,截至 2019 年 4 月 30 日,阿里巴巴以 290 件區塊鏈專利方案數量穩居全球第一。結合權威知識產權產業媒體 IPRdaily 過去兩年發布的“全球區塊鏈專利企業排行榜”显示,阿里巴巴申請的區塊鏈專利數量已經連續三年全球第一。2019 上半年全球區塊鏈企業發明專利排行榜(TOP100) 中,阿里巴巴以 322 件專利位列第一,中國平安以 274 件專利排名第二,Nchain 以 241 件專利排名第三。此外,百度( 7 名)、騰訊( 13 名)、京東( 14 名)、華為( 28 名)、獵豹( 40 名)、中國移動( 44 名)等均榜上有名。

      從上面的數據可以看出來,真正在區塊鏈的研究上佔據優勢且不斷應用的,沒有一個是“發幣”的,都是實實在在的在落地。

      當然了,也許與幣有關。此前有消息傳言,央行可能將在未來幾個月內正式推出國家支持的数字貨幣“DCEP”,初期將向中國工商銀行、中國建設銀行、中國銀行、中國農業銀行、阿里巴巴、騰訊以及銀聯七家機構發行。如果成行,那將是世界上是首個法定数字貨幣,意義深遠。

      在官方發布的新聞中,將區塊鏈發展方向定位為四個方面:

      1、要探索“區塊鏈+”在民生領域的運用,积極推動區塊鏈技術在教育、就業、養老、精準脫貧、醫療健康、商品防偽、食品安全、公益、社會救助等領域的應用,為人民群眾提供更加智能、更加便捷、更加優質的公共服務。

      2016 年,螞蟻金服聯合中國紅十字基金會等公益機構上線區塊鏈試驗項目,使捐款人可以追蹤善款的完整流轉情況。2017 年 3 月,支付寶愛心捐贈平台全面引入區塊鏈技術,所有捐贈數據上鏈。實現了實時賬目公示,有助於解決公益財務透明的“痛點”。螞蟻金服公益運用區塊鏈技術追蹤籌款,建立起第三方公示體系區塊鏈資金流公示,為公益機構進行數據統計、項目執行跟蹤提供便利。區塊鏈具有不可篡改的特性,任何寫入區塊鏈的記錄均不能更改,可以供公眾監督及審計。而“區塊鏈+公益”正是利用這一特性,發揮公眾賬本的價值,不論用戶是捐十塊、二十塊還是幾百塊,讓用戶所獻出的每一筆都記錄在區塊鏈上,有跡可循,持續追溯。

      2016 年 10 月,阿里與微軟、小蟻、法大大等合作開發“法鏈”,推出基於阿里雲平台的郵箱存證產品,通過法鏈上備份的电子郵件和雲服務,阿里將使中國法院能大規模採用数字證據郵件。

      2017 年 3 月,阿里巴巴與普華永道合作,打造可追溯的跨境食品供應鏈,用於跟蹤產品從生產者到消費者之間的整個流程。

      2017 年 8 月,阿里健康與江蘇常州市合作推出我國首個基於醫療場景的區塊鏈應用――“醫聯體+區塊鏈”試點項目。

      2017 年 10 月 11 日,螞蟻金服 CTO 程立在螞蟻金服金融科技開放峰會上首度披露未來的技術布局――“BASIC”戰略,其中的B對應的就是區塊鏈(Blockchain),同時,技術實驗室宣布開放區塊鏈技術,支持進口食品安全溯源、商品正品溯源等,第一個落地場景將是海外奶粉品牌的追蹤,先是產自澳洲、新西蘭的 26 個品牌的奶粉。2017 年 11 月 24 日,天貓國際宣布升級全球原產地溯源計劃,未來將覆蓋全球 63 個國家和地區,3700 個品類,14500 個海外品牌,也將向全行業開放,賦能整個行業。2018 年 2 月,菜鳥與天貓國際官方消息,已啟用區塊鏈技術跟蹤、上傳、查證跨境進口商品的物流全鏈路信息,涵蓋生產、運輸、通關、報檢、第三方檢驗等商品進口全流程,為每個跨境進口商品打上獨一無二的“身份證”,供消費者查詢驗證。

      騰訊旗下的微眾銀行於 2016 年 6 月開發出面向金融業的聯盟鏈雲服務 BaaS,並在 2017 年 1 月落地了第一個商業場景,即微黃金項目。微黃金是騰訊的一項在線黃金交易服務,用戶可以在微信低門檻靈活購買黃金,其背後正是由騰訊開發底層基礎架構的聯盟鏈。騰訊、工商銀行等多個節點共同參与記帳。2018 年 4 月底,騰訊發布第一款區塊鏈遊戲《一起來捉妖》,試圖通過區塊鏈技術保障了遊戲稀有內容投放的公開公平性,同時用戶可以將稀有妖怪上鏈永久保存。

      2017 年 12 月,沃爾瑪、京東、IBM、清華大學电子商務交易技術國家工程實驗室共同宣布成立安全食品區塊鏈溯源聯盟,運用區塊鏈技術搭建“京東區塊鏈防偽追溯開放平台”。該平台推出之後,用戶只需打開京東 APP 找到購物訂單,通過“一鍵溯源”或直接掃描產品溯源碼,即可獲取溯源信息。

      2018 年 10 月,百度正式發布自主研發的區塊鏈網絡系統——超級鏈。同時,宣布與海南省政府合作,區塊鏈實驗室及度鏈公司落戶海南,並推出“區塊鏈+大閘蟹溯源”應用。

      2、要推動區塊鏈底層技術服務和新型智慧城市建設相結合,探索在信息基礎設施、智慧交通、能源電力等領域的推廣應用,提升城市管理的智能化、精準化水平。

      5 月 22 日,上海、浙江、江蘇、安徽 4 地法院成立全國首個區域司法鏈,實現從起訴到執行全程上鏈,極大提高了訴訟效率和法院公信力,降低訴訟成本。最早引入區塊鏈技術的杭州互聯網法院,上鏈半年,其知識產權糾紛案件的調撤率上升至 95.3%。

      2017 年 5 月,阿里投資 Symbiont,該公司致力於利用區塊鏈技術打造一個發行和交易智能證券的平台。此外,深圳財富文化集團已經打造了一個文化產權交易的區塊鏈平台,並與螞蟻雙鏈打通,解決文化藝術品流通、交易和一系列金融服務。

      2017 年 11 月 8 日,阿里巴巴集團、螞蟻金服集團與雄安新區簽署了戰略合作協議,阿里巴巴與螞蟻金服將承建数字雄安區塊鏈實施平台。

      另外,國網電商公司已建成國家電網公司系統內首個司法級可信區塊鏈公共服務平台,作為唯一央企與北京互聯網法院“天平鏈”互信互通,掛牌工信部區塊鏈重點實驗室電力應用實驗基地,參与首個區塊鏈國家標準制定,實現了區塊鏈技術在電力積分通兌、光伏簽約、票據繳費、电子發票等多場景落地應用。

      3、要利用區塊鏈技術促進城市間在信息、資金、人才、徵信等方面更大規模的互聯互通,保障生產要素在區域內有序高效流動。

      在 9 月末舉行的雲棲大會·螞蟻區塊鏈生態峰會上,螞蟻金服集團副總裁蔣國飛透露,螞蟻區塊鏈已落地 40 多個應用。含括跨境支付、供應鏈金融、通用溯源、电子票據等多個行業領域。並於同期宣布了與全球最大的種子和農藥公司拜耳合作,應用方向進一步擴展。

      螞蟻金服 8 月份宣布,基於區塊鏈技術的供應鏈協作網絡——螞蟻區塊鏈“雙鏈通”全面升級開放。這一服務運用區塊鏈技術可解決供應鏈金融中的信任難題,同時讓小微商家也能享受高效便捷的金融服務。目前,這一模式已在成都率先應用。通過與成都商業銀行、成都中小企業融資擔保公司的合作,“雙鏈通”完成了供應鏈金融的全鏈路覆蓋。上鏈后,整個融資流轉過程清晰留痕、不可篡改,所有參与方都要通過“雙鏈通”進行身份核實和意願確認,数字簽名實時上鏈,杜絕了資金挪用等風險。

      4、要探索利用區塊鏈數據共享模式,實現政務數據跨部門、跨區域共同維護和利用,促進業務協同辦理,深化“最多跑一次”改革,為人民群眾帶來更好的政務服務體驗。

      3 月,杭州地鐵聯合支付寶、螞蟻區塊鏈推出了區塊鏈电子發票。全程手機操作,耗時不到 10 秒,上班族再也不用前往窗口排隊取票了。支付寶聯合雲南省相關部門,在醫療、教育等多個民生服務場景落地區塊鏈电子票據。從地鐵电子發票到法院訴訟案件,再到电子票據平台,螞蟻區塊鏈在過去近 3 年時間里,相繼落地了 40 多個場景。其中長三角佔比超過一半。“上鏈”后長三角人辦事效率大大提升,不少事項可享受“秒級”服務。

      我們看到,在 5G 時代,無差別計算能力的流通成本會大幅下降,無差別計算能力是 AI 最重要的勞動要素,而區塊鏈就是 AI 最重要的勞動要素。阿里巴巴達摩院在《2019 十大科技趨勢》中提到,5G 和區塊鏈是未來十年的發展方向。《福布斯》發布的《2020 十大科技趨勢》也提到,5G 和區塊鏈都將於 2020 年崛起,未來與人們日常生活相關的每一個行業都會被變革。還是那句話,“誰能把當前的技術和資源用到最充分,誰就是這個時代的最強者”,也許 5G 的流量充沛,正是區塊鏈的黃金歲月。

    本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理【其他文章推薦】

    網頁設計公司推薦更多不同的設計風格,搶佔消費者視覺第一線

    ※廣告預算用在刀口上,網站設計公司幫您達到更多曝光效益

    ※自行創業 缺乏曝光? 下一步"網站設計"幫您第一時間規劃公司的門面形象

  • 小白學 Python 爬蟲(4):前置準備(三)Docker基礎入門

    小白學 Python 爬蟲(4):前置準備(三)Docker基礎入門

    人生苦短,我用 Python

    前文傳送門:

    Docker 基礎

    首先說一件事情,就在本文寫作前一天,Mirantis 這家公司宣布收購了 Docker 的企業業務和團隊。並且在官網上也掛出了相關的文字。

    沒別的意思,相關的新聞通告一下。

    Docker 官網地址:

    什麼是 Docker ?

    emmmmm,說實話,Docker 是什麼並不好說,下面通過四點大致解釋下 Docker 到底是個什麼東西。

    1. Docker 是全球領先的軟件容器平台。
    2. Docker使用Google公司推出的Go語言進行開發實現,基於Linux內核的cgroup,namespace,以及AUFS類的UnionFS等技術,對進程進行封裝隔離,屬於操作系統層面的虛擬化技術。
    3. 由於隔離的進程獨立於宿主和其它的隔離的進程,因此也稱其為容器。Docke最初實現是基於LXC。
    4. 用戶可以方便地創建和使用容器,把自己的應用放入容器。

    Docker 容器的特點:

    1. 輕量化:在一台機器上運行的多個Docker容器可以共享這台機器的操作系統內核;它們能夠迅速啟動,只需佔用很少的計算和內存資源。鏡像是通過文件系統層進行構造的,並共享一些公共文件。這樣就能盡量降低磁盤用量,並能更快地下載鏡像。
    2. 標準化:Docker容器基於開放式標準,能夠在所有主流Linux版本、Microsoft Windows以及包括VM、裸機服務器和雲在內的任何基礎設施上運行。
    3. 安全:Docker賦予應用的隔離性不僅限於彼此隔離,還獨立於底層的基礎設施。Docker默認提供最強的隔離,因此應用出現問題,也只是單個容器的問題,而不會波及到整台機器。

    為什麼要用Docker:

    • Docker的鏡像提供了除內核外完整的運行時環境,確保了應用運行環境一致性,從而不會再出現“這段代碼在我機器上沒問題啊”這類問題;——一致的運行環境
    • 可以做到秒級、甚至毫秒級的啟動時間。大大的節約了開發、測試、部署的時間。——更快速的啟動時間
    • 避免公用的服務器,資源會容易受到其他用戶的影響。——隔離性
    • 善於處理集中爆發的服務器使用壓力;——彈性伸縮,快速擴展
    • 可以很輕易的將在一個平台上運行的應用,遷移到另一個平台上,而不用擔心運行環境的變化導致應用無法正常運行的情況。——遷移方便
    • 使用Docker可以通過定製應用鏡像來實現持續集成、持續交付、部署。——持續交付和部署

    說起容器,與虛擬機的比較是一個永恆的話題,因為它做的事情和虛擬機做的事情非常的接近。

    傳統虛擬機技術是虛擬出一套硬件后,在其上運行一個完整操作系統,在該系統上再運行所需應用進程;而容器內的應用進程直接運行於宿主的內核,容器內沒有自己的內核,而且也沒有進行硬件虛擬。因此容器要比傳統虛擬機更為輕便。

    Docker 安裝

    Win10 下的安裝

    首先介紹一下 win 環境下 Docker 的安裝,打開官網,下載最新版的 Docker Desktop 。

    Docker 官方下載地址:

    下載前可能需要先註冊下 Docker Hub ,註冊完成後會直接跳轉下載頁面。

    下載完成后默認配置 next 就好了。

    驗證:

    在 CMD 命令行中執行:

    docker info

    請確保 Docker 正常啟動狀態,否則會報錯的。

    小編本地電腦執行后显示如下:

    Client:
     Debug Mode: false
    
    Server:
     Containers: 26
      Running: 0
      Paused: 0
      Stopped: 26
     Images: 28
     Server Version: 19.03.1
     ...

    內容有些多,我就不全貼出來了,主要會显示一些當前 Docker 相關的信息。

    CentOS 下的安裝

    懶人神器,使用 CentOS 下的包管理工具 yum 進行安裝,直接輸入:

    yum install docker

    然後靜靜等待進度條走完,驗證命令和上面一致,同樣需確保 Docker 服務正常啟動。

    CentOS 中 Docker 基本操作命令:

    # docker 啟動
    systemctl start docker
    # 重啟 docker服務
    systemctl restart docker
    # 關閉 docker 服務
    systemctl stop docker

    驗證結果:

    Docker 基礎

    首先了解兩個概念:

    鏡像:Docker 鏡像是用於創建 Docker 容器的模板。

    容器:容器是獨立運行的一個或一組應用。

    講人話就是鏡像可以是我們自己的程序,也可以是第三方廠商提供的組件,比如數據庫,緩存服務等等,而這個鏡像想要運行的話,就要放在容器裏面運行,它自己是不能單獨運行的,就好比炒菜,光有菜不行,還要有鍋,菜是在鍋里炒出來的。

    因為 Docker 默認的鏡像源是在遙遠的太平洋彼岸,訪問速度會有些慢,建議各位同學配置一個國內的鏡像源。

    國內的鏡像源有很多的,百度一下可以找到很多,小編這裏使用的阿里雲提供的容器鏡像加速服務,大家可以登錄自己的淘寶賬號,在阿里雲上找到容器鏡像服務:

    具體的配置方案阿里雲已經提供出來了,小編這裏不再贅述,大家自己登錄阿里雲查看吧。

    上面這些都配置完成后,我們來講幾個最基礎的 Docker 命令:

    獲取鏡像

    語法:docker pull NAME[:TAG]
    其中,NAME是鏡像倉庫的名稱(用來區分鏡像),TAG是鏡像的標籤(用來表示版本信息)

    查看鏡像

    語法:docker images

    可以看到,小編的機器上目前有一個 mysql5.7 鏡像。

    搜索鏡像

    語法:docker search [image-name]
    從docker倉庫搜索docker鏡像

    刪除鏡像

    語法:docker rmi NAME
    用來刪除指定鏡像,其中後面的參數可以是tag,如果是tag時,實際上是刪除該tag,只要該鏡像還有其他tag,就不會刪除該鏡像。當後面的參數為鏡像ID時,則會徹底刪除整個鏡像,連通所有標籤一同刪除

    實戰 hello-world

    首先輸入 docker pull hello-world 來拉取 hello-world 鏡像:

    拉取成功后,我們使用 docker images 來查看下這個 hello-world 鏡像 :

    好了,我們已經看到這個 hello-world 鏡像了,現在來嘗試一下啟動,使用命令 docker run hello-world

    若是出現了上圖的內容則說明hello-world運行成功,如果沒出現的話,emmmmmmmmmm,你們可能就要想想自己之前的操作了。

    本篇文章到這裏就結束了,希望各位同學能自己動手實踐一下,畢竟實踐出真知嘛。

    參考

    本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理【其他文章推薦】

    ※帶您來了解什麼是 USB CONNECTOR  ?

    ※自行創業 缺乏曝光? 下一步"網站設計"幫您第一時間規劃公司的門面形象

    ※如何讓商品強力曝光呢? 網頁設計公司幫您建置最吸引人的網站,提高曝光率!!

    ※綠能、環保無空污,成為電動車最新代名詞,目前市場使用率逐漸普及化

    ※廣告預算用在刀口上,網站設計公司幫您達到更多曝光效益

  • Python 命令行之旅:深入 click 之子命令篇

    Python 命令行之旅:深入 click 之子命令篇

    作者:HelloGitHub-Prodesire

    HelloGitHub 的《講解開源項目》系列,項目地址:https://github.com/HelloGitHub-Team/Article

    一、前言

    在上兩篇文章中,我們介紹了 click 中的”參數“和“選項”,本文將繼續深入了解 click,着重講解它的“命令”和”組“。

    本系列文章默認使用 Python 3 作為解釋器進行講解。
    若你仍在使用 Python 2,請注意兩者之間語法和庫的使用差異哦~

    二、命令和組

    Click 中非常重要的特性就是任意嵌套命令行工具的概念,通過 和 (實際上是 )來實現。

    所謂命令組就是若干個命令(或叫子命令)的集合,也成為多命令。

    2.1 回調調用

    對於一個普通的命令來說,回調發生在命令被執行的時候。如果這個程序的實現中只有命令,那麼回調總是會被觸發,就像我們在上一篇文章中舉出的所有示例一樣。不過像 --help 這類選項則會阻止進入回調。

    對於組和多個子命令來說,情況略有不同。回調通常發生在子命令被執行的時候:

    @click.group()
    @click.option('--debug/--no-debug', default=False)
    def cli(debug):
        click.echo('Debug mode is %s' % ('on' if debug else 'off'))
    
    @cli.command()  # @cli, not @click!
    def sync():
        click.echo('Syncing')

    執行效果如下:

    Usage: tool.py [OPTIONS] COMMAND [ARGS]...
    
    Options:
      --debug / --no-debug
      --help                Show this message and exit.
    
    Commands:
      sync
    
    $ tool.py --debug sync
    Debug mode is on
    Syncing

    在上面的示例中,我們將函數 cli 定義為一個組,把函數 sync 定義為這個組內的子命令。當我們調用 tool.py --debug sync 命令時,會依次觸發 clisync 的處理邏輯(也就是命令的回調)。

    2.2 嵌套處理和上下文

    從上面的例子可以看到,命令組 cli 接收的參數和子命令 sync 彼此獨立。但是有時我們希望在子命令中能獲取到命令組的參數,這就可以用 來實現。

    每當命令被調用時,click 會創建新的上下文,並鏈接到父上下文。通常,我們是看不到上下文信息的。但我們可以通過 裝飾器來顯式讓 click 傳遞上下文,此變量會作為第一個參數進行傳遞。

    @click.group()
    @click.option('--debug/--no-debug', default=False)
    @click.pass_context
    def cli(ctx, debug):
        # 確保 ctx.obj 存在並且是個 dict。 (以防 `cli()` 指定 obj 為其他類型
        ctx.ensure_object(dict)
    
        ctx.obj['DEBUG'] = debug
    
    @cli.command()
    @click.pass_context
    def sync(ctx):
        click.echo('Debug is %s' % (ctx.obj['DEBUG'] and 'on' or 'off'))
    
    if __name__ == '__main__':
        cli(obj={})

    在上面的示例中:

    • 通過為命令組 cli 和子命令 sync 指定裝飾器 click.pass_context,兩個函數的第一個參數都是 ctx 上下文
    • 在命令組 cli 中,給上下文的 obj 變量(字典)賦值
    • 在子命令 sync 中通過 ctx.obj['DEBUG'] 獲得上一步的參數
    • 通過這種方式完成了從命令組到子命令的參數傳遞

    2.3 不使用命令來調用命令組

    默認情況下,調用子命令的時候才會調用命令組。而有時你可能想直接調用命令組,通過指定 click.groupinvoke_without_command=True 來實現:

    @click.group(invoke_without_command=True)
    @click.pass_context
    def cli(ctx):
        if ctx.invoked_subcommand is None:
            click.echo('I was invoked without subcommand')
        else:
            click.echo('I am about to invoke %s' % ctx.invoked_subcommand)
    
    @cli.command()
    def sync():
        click.echo('The subcommand')

    調用命令有:

    $ tool
    I was invoked without subcommand
    $ tool sync
    I am about to invoke sync
    The subcommand

    在上面的示例中,通過 ctx.invoked_subcommand 來判斷是否由子命令觸發,針對兩種情況打印日誌。

    2.4 自定義命令組/多命令

    除了使用 來定義命令組外,你還可以自定義命令組(也就是多命令),這樣你就可以延遲加載子命令,這會很有用。

    自定義多命令需要實現 list_commandsget_command 方法:

    import click
    import os
    
    plugin_folder = os.path.join(os.path.dirname(__file__), 'commands')
    
    class MyCLI(click.MultiCommand):
    
        def list_commands(self, ctx):
            rv = []  # 命令名稱列表
            for filename in os.listdir(plugin_folder):
                if filename.endswith('.py'):
                    rv.append(filename[:-3])
            rv.sort()
            return rv
    
        def get_command(self, ctx, name):
            ns = {}
            fn = os.path.join(plugin_folder, name + '.py')  # 命令對應的 Python 文件
            with open(fn) as f:
                code = compile(f.read(), fn, 'exec')
                eval(code, ns, ns)
            return ns['cli']
    
    cli = MyCLI(help='This tool\'s subcommands are loaded from a '
                'plugin folder dynamically.')
    
    # 等價方式是通過 click.command 裝飾器,指定 cls=MyCLI
    # @click.command(cls=MyCLI)
    # def cli():
    #     pass
    
    if __name__ == '__main__':
        cli()

    2.5 合併命令組/多命令

    當有多個命令組,每個命令組中有一些命令,你想把所有的命令合併在一個集合中時,click.CommandCollection 就派上了用場:

    
    @click.group()
    def cli1():
        pass
    
    @cli1.command()
    def cmd1():
        """Command on cli1"""
    
    @click.group()
    def cli2():
        pass
    
    @cli2.command()
    def cmd2():
        """Command on cli2"""
    
    cli = click.CommandCollection(sources=[cli1, cli2])
    
    if __name__ == '__main__':
        cli()

    調用命令有:

    $ cli --help
    Usage: cli [OPTIONS] COMMAND [ARGS]...
    
    Options:
      --help  Show this message and exit.
    
    Commands:
      cmd1  Command on cli1
      cmd2  Command on cli2

    從上面的示例可以看出,cmd1cmd2 分別屬於 cli1cli2,通過 click.CommandCollection 可以將這些子命令合併在一起,將其能力提供個同一個命令程序。

    Tips:如果多個命令組中定義了同樣的子命令,那麼取第一個命令組中的子命令。

    2.6 鏈式命令組/多命令

    有時單級子命令可能滿足不了你的需求,你甚至希望能有多級子命令。典型地,setuptools 包中就支持多級/鏈式子命令: setup.py sdist bdist_wheel upload。在 click 3.0 之後,實現鏈式命令組變得非常簡單,只需在 click.group 中指定 chain=True

    @click.group(chain=True)
    def cli():
        pass
    
    
    @cli.command('sdist')
    def sdist():
        click.echo('sdist called')
    
    
    @cli.command('bdist_wheel')
    def bdist_wheel():
        click.echo('bdist_wheel called')

    調用命令則有:

    $ setup.py sdist bdist_wheel
    sdist called
    bdist_wheel called

    2.7 命令組/多命令管道

    鏈式命令組中一個常見的場景就是實現管道,這樣在上一個命令處理好后,可將結果傳給下一個命令處理。

    實現命令組管道的要點是讓每個命令返回一個處理函數,然後編寫一個總的管道調度函數(並由 MultiCommand.resultcallback() 裝飾):

    @click.group(chain=True, invoke_without_command=True)
    @click.option('-i', '--input', type=click.File('r'))
    def cli(input):
        pass
    
    @cli.resultcallback()
    def process_pipeline(processors, input):
        iterator = (x.rstrip('\r\n') for x in input)
        for processor in processors:
            iterator = processor(iterator)
        for item in iterator:
            click.echo(item)
    
    @cli.command('uppercase')
    def make_uppercase():
        def processor(iterator):
            for line in iterator:
                yield line.upper()
        return processor
    
    @cli.command('lowercase')
    def make_lowercase():
        def processor(iterator):
            for line in iterator:
                yield line.lower()
        return processor
    
    @cli.command('strip')
    def make_strip():
        def processor(iterator):
            for line in iterator:
                yield line.strip()
        return processor

    在上面的示例中:

    • cli 定義為了鏈式命令組,並且指定 invoke_without_command=True,也就意味着可以不傳子命令來觸發命令組
    • 定義了三個命令處理函數,分別對應 uppercaselowercasestrip 命令
    • 在管道調度函數 process_pipeline 中,將輸入 input 變成生成器,然後調用處理函數(實際輸入幾個命令,就有幾個處理函數)進行處理

    2.8 覆蓋默認值

    默認情況下,參數的默認值是從通過裝飾器參數 default 定義。我們還可以通過 Context.default_map 上下文字典來覆蓋默認值:

    @click.group()
    def cli():
        pass
    
    @cli.command()
    @click.option('--port', default=8000)
    def runserver(port):
        click.echo('Serving on http://127.0.0.1:%d/' % port)
    
    if __name__ == '__main__':
        cli(default_map={
            'runserver': {
                'port': 5000
            }
        })

    在上面的示例中,通過在 cli 中指定 default_map 變可覆蓋命令(一級鍵)的選項(二級鍵)默認值(二級鍵的值)。

    我們還可以在 click.group 中指定 context_settings 來達到同樣的目的:

    
    CONTEXT_SETTINGS = dict(
        default_map={'runserver': {'port': 5000}}
    )
    
    @click.group(context_settings=CONTEXT_SETTINGS)
    def cli():
        pass
    
    @cli.command()
    @click.option('--port', default=8000)
    def runserver(port):
        click.echo('Serving on http://127.0.0.1:%d/' % port)
    
    if __name__ == '__main__':
        cli()

    調用命令則有:

    $ cli runserver
    Serving on http://127.0.0.1:5000/

    三、總結

    本文首先介紹了命令的回調調用、上下文,再進一步介紹命令組的自定義、合併、鏈接、管道等功能,了解到了 click 的強大。而命令組中更加高階的能力()則可看官方文檔進一步了解。

    我們通過介紹 click 的參數、選項和命令已經能夠完全實現命令行程序的所有功能。而 click 還為我們提供了許多錦上添花的功能,比如實用工具、參數自動補全等,我們將在下節詳細介紹。

    『講解開源項目系列』——讓對開源項目感興趣的人不再畏懼、讓開源項目的發起者不再孤單。跟着我們的文章,你會發現編程的樂趣、使用和發現參与開源項目如此簡單。歡迎留言聯繫我們、加入我們,讓更多人愛上開源、貢獻開源~

    本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理【其他文章推薦】

    ※如何讓商品強力曝光呢? 網頁設計公司幫您建置最吸引人的網站,提高曝光率!!

    網頁設計一頭霧水??該從何著手呢? 找到專業技術的網頁設計公司,幫您輕鬆架站!

    ※想知道最厲害的台北網頁設計公司推薦台中網頁設計公司推薦專業設計師”嚨底家”!!

  • 嚇人!在浴池洗浴竟會感染梅毒?很多人都不知情…

    嚇人!在浴池洗浴竟會感染梅毒?很多人都不知情…

      本文專家:田靖博士,南部戰區疾病預防控制中心,主治醫師

      我們都知道艾滋病很可怕,得了基本上就需要終生抗爭。

      最近,僅次於艾滋病的第二大性接觸疾病——梅毒,突然成了微博上最熱門的話題。

      某知名企業創始人稱自己“在浴池洗浴感染梅毒,打了 6 天針后治癒”。


    微博截圖

      先是洗浴感染梅毒驚呆眾網友,只要在公共中心泡過澡、游過泳的都表示瑟瑟發抖。

      還有對 6 天治癒梅毒表示疑問,畢竟我們所知的梅毒是比較可怕的。

      那泡澡到底會不會感染梅毒?梅毒究竟該如何治癒?我們就網友關心的這些問題科普一下。

      洗浴、游泳真會感染梅毒嗎?

      梅毒螺旋體(Treponema pallidum,TP)又稱為蒼白螺旋體,是造成感染梅毒的“罪魁禍首”。

      目前全球每年約有 1200 萬新發梅毒病例,我國梅毒發病率呈上升趨勢。

      梅毒的感染途徑有——

      1、血液傳播和性接觸傳播

      梅毒螺旋體僅可以感染人類,血液傳播和性接觸傳播是主要途徑。95% 以上的感染者通過危險的無保護的性行為感染,而男同性戀人群中的梅毒感染率近年來急劇上升。

      2、母嬰傳播。梅毒可以通過垂直傳播途徑,由感染梅毒的母親傳染給新生兒。

      梅毒螺旋體病毒感染人類需要具備一定的病毒載量,在某些特殊條件下才能發生,如通過性接觸直接接觸梅毒感染者的創面或者血液傳播,同時也取決於被感染者的身體狀況等。

      因此,常規使用公共設施和出入公共場所,如游泳池游泳、接觸馬桶墊、共用餐具、衣物接觸等情況都不會感染梅毒。

      並且游泳池中的水通常含有漂白粉等消毒劑,不適合淋球菌、梅毒螺旋體等性病病原體存活。所以,去正規的游泳館不存在感染梅毒的可能性。

      梅毒有什麼危害?

      按照《梅毒診斷標準》(WS273-2018),根據梅毒感染的不同階段以及出現癥狀的差異可以將梅毒分為I期、II 期、III 期、胎傳和隱形梅毒。

      I 期~III 期梅毒對於患者的損害是不同的,能造成——

    1. 硬下疳、腹股溝或患部近位淋巴結腫大;
    2. 多個部位的瀰漫性皮損,最終造成頭面部以及四肢產生結節性梅毒疹;
    3. 關節出現結節;
    4. 皮膚、口腔、舌咽出現樹膠腫;
    5. 產生骨梅毒、眼梅毒、心血管梅毒、神經梅毒和其他內臟梅毒等。

      胎傳:所有未經有效治療的梅毒母親所生的嬰兒可能感染胎傳梅毒,根據發病時間分為早期胎傳梅毒、晚期胎傳梅毒和隱性胎傳梅毒。

      隱形梅毒:無臨床癥狀與體征的隱性梅毒患者,仍然具有傳染性,部分病人可以發生晚期損害。

      晚期梅毒可導致不可逆的心血管損傷和中樞系統損害,嚴重者可導致死亡。

      中樞神經系統的梅毒感染可以發生在疾病的任何時期,病程越長、精神癥狀越嚴重。

      此外,梅毒與艾滋病常常是一對“好兄弟”。在感染艾滋病的患者中,大約有 42.8% 的患者都曾感染梅毒。

      梅毒感染會造成皮膚破損,增加體液中 CD4+ 細胞的數量,為 HIV 的感染提供更多的靶細胞,促進 HIV 的傳播,因此從這個意義上來說,感染梅毒是艾滋病的“幫凶”。

      梅毒真能 6 天治癒嗎?

      不一定!

      因為涉及個人體質、治療抗生素的使用方案及青霉素是否過敏等問題,治療周期和結果都會因人而已,最重要是嚴格遵循醫囑和臨床檢查結果。

      因此,治癒的時間根據選擇藥物和患者的病情來確定,不能簡單用時間判斷!

      感染梅毒該如何治療?

      青霉素是治療梅毒的首選藥物之一,對病原菌的細胞壁生成進行抑制 , 從而降低抗原反應素,可短期改善認知功能。青霉素過敏者可採用紅黴素治療。

      多西環素是非青霉素的一種,及早治療血清轉陰率可達 83%-100%,成為當前治療早期梅毒(梅毒螺旋體感染<2 年,II 期早期梅毒)的主要手段。

      頭孢曲松鈉及苄星青霉素聯合治療梅毒比單一用藥效果好。

      不過,抗生素治療僅對免疫系統正常的患者有效。當患者產生梅毒血清抵抗時,單獨使用青霉素,無論增加劑量還是延長治療時間,都對患者無效。

      梅毒治療后,15%~41% 的患者可能形成梅毒血清固定,使用免疫調節劑再治療梅毒血清固定患者有一定的效果,但存在爭議。

      所以,治療梅毒需要嚴格遵循醫囑,才能達到有效治癒。

      此外,還要保持健康良好的生活方式,防止不安全的性行為。

     

    本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理【其他文章推薦】

    ※帶您來了解什麼是 USB CONNECTOR  ?

    ※自行創業 缺乏曝光? 下一步"網站設計"幫您第一時間規劃公司的門面形象

    ※如何讓商品強力曝光呢? 網頁設計公司幫您建置最吸引人的網站,提高曝光率!!

    ※綠能、環保無空污,成為電動車最新代名詞,目前市場使用率逐漸普及化

    ※廣告預算用在刀口上,網站設計公司幫您達到更多曝光效益

  • 國家電網預計將於2020年6月前全面實現即插即沖新技術

    國家電網預計將於2020年6月前全面實現即插即沖新技術

      作者:JoJo

      【TechWeb】10 月 27 日,近日,國網電動汽車服務有限公司發布了充電服務創新模式“車電服務包”。國網電動汽車公司總經理沈建新表示,國網電動汽車公司將加大車聯網的規模,擴大平台充電樁的數量。同時,國網電動汽車公司將在半年內實現“即插即充、無感支付”在公共場站、專用場站、私人充電樁業務場景全覆蓋,加速布局主要城市充電網絡。

      該措施首先是提供主機廠車電包服務範圍內場景全覆蓋、布局更密集的充電設施服務網絡。 國網目前已建成 9 萬自營充電樁,其中高功率直流快充 6.5 萬根。對此,沈建新表示,未來還將引入更多社會資源,擴大充電樁規模,保證主要城市充電站布點半徑不超過 500 米,同一站點充電等候不超過 30 分鐘,確保充電服務套餐用戶實現區域內充電暢行。

      其次,是加快即插即充、無感支付新技術全覆蓋。2020 年 6 月前,通過技術升級及硬件改造,國網電動汽車公司將完成國網系統充電樁全面支持即插即充,新投入車聯網平台的充電樁全部滿足“即插即充、無感支付”要求,實現“充綠色電,比加油更方便”。

      此次發布的“車電服務包”是與四家車企聯合推出與新車綁定銷售的充電產品,用戶一次付費購買“車電服務包”並綁定車輛后,即可在國網充電樁上享受“即插即充、無感支付”。電動汽車插入充電槍后,充電過程不需要人為干預,自動完成認證、充電啟動、充電停止以及訂單生成與結算,實現了車、樁、網、能源的泛在互聯與高效互動,是國家電網公司泛在電力物聯網建設的典型終端。

    本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理【其他文章推薦】

    ※為什麼 USB CONNECTOR 是電子產業重要的元件?

    網頁設計一頭霧水??該從何著手呢? 找到專業技術的網頁設計公司,幫您輕鬆架站!

    ※想要讓你的商品成為最夯、最多人討論的話題?網頁設計公司讓你強力曝光

    ※想知道最厲害的台北網頁設計公司推薦台中網頁設計公司推薦專業設計師”嚨底家”!!