在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線(xiàn)課程
  • 觀(guān)看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

用Go語(yǔ)言實(shí)現(xiàn)人臉識(shí)別,怎么做到的

8g3K_AI_Thinker ? 來(lái)源:未知 ? 作者:工程師曾玲 ? 2018-08-26 09:56 ? 次閱讀

做人臉識(shí)別用 Python 比較多,但是今天碰上一個(gè)另類(lèi),他就跟別人不一樣,就不用 Python 用 Go。其實(shí)不管是 P 還是 G,能認(rèn)出臉來(lái)就是好樣的。

光說(shuō)不練假把式,我們來(lái)看看這哥們到底是怎么做到的。

這篇文章將教會(huì)你如何運(yùn)用 Go 語(yǔ)言實(shí)現(xiàn)人臉識(shí)別

▌前言

如今,神經(jīng)網(wǎng)絡(luò)已經(jīng)非常流行,人們將它用于各種任務(wù),特別是人臉識(shí)別應(yīng)用。

最近,我用一個(gè)以 Go 語(yǔ)言為后端的軟件,實(shí)現(xiàn)了一個(gè)人臉識(shí)別項(xiàng)目。它能夠識(shí)別出上傳照片中的人像 (如流行歌手)是誰(shuí)。這聽(tīng)起來(lái)不錯(cuò),我決定試一下也給你們介紹一下項(xiàng)目的整個(gè)過(guò)程。

需要說(shuō)明的是,我盡可能地將所需的系統(tǒng)配置控制在較低水平,以便更多用戶(hù)可以通過(guò)使用便宜的服務(wù)器來(lái)進(jìn)行安裝,而這也是為什么實(shí)現(xiàn)過(guò)程不使用 CUDA 或 GPU 的原因——雖然你現(xiàn)在可以很容易地租用這樣的服務(wù)器,但它需要很高的成本,從而也會(huì)將很多潛在的使用者拒之門(mén)外。如果它只需要 CPU 而不需要外部依賴(lài)就能工作,情況會(huì)好很多。

▌選擇合適的語(yǔ)言

如果你詢(xún)問(wèn)數(shù)據(jù)科學(xué)家或者那些有神經(jīng)網(wǎng)絡(luò)實(shí)踐經(jīng)驗(yàn)的工作者,幾乎所有人都會(huì)建議你使用 Python 語(yǔ)言來(lái)解決機(jī)器學(xué)習(xí)任務(wù)??紤]到語(yǔ)言社區(qū),可用庫(kù)的數(shù)量,語(yǔ)言的簡(jiǎn)單性等,Python 語(yǔ)言確實(shí)是一個(gè)明智的選擇。此外,在 Python 中,你還可以通過(guò)一些精彩的實(shí)例說(shuō)明和文檔來(lái)找到一些受歡迎的人臉識(shí)別庫(kù)。

然而,這一次,我決定選用 Go 語(yǔ)言,主要有幾以下幾個(gè)原因:

我的論壇是用 Go 語(yǔ)言編寫(xiě)的,我個(gè)人也真的很喜歡以 single-binary 為后端所帶來(lái)的便捷性。因此,在后端部署并整合人臉識(shí)別過(guò)程,而不需要 Python 實(shí)現(xiàn)的一些依賴(lài)和 IPC,這是很棒的。

Go 語(yǔ)言通常比 Python 更快,消耗的內(nèi)存更少。任何高性能 Python 庫(kù)的關(guān)鍵部分都是用 C / C++ 語(yǔ)言編寫(xiě)的,因此,無(wú)論如何你都會(huì)有 Python VM 的開(kāi)銷(xiāo)。我偏愛(ài)于更快的語(yǔ)言,除非這種語(yǔ)言會(huì)嚴(yán)重影響開(kāi)發(fā)時(shí)間。我不會(huì)用 C或C++ 作為 Web 應(yīng)用程序編寫(xiě)的主要語(yǔ)言,但 Go語(yǔ)言很好,它幾乎和 Python 一樣簡(jiǎn)單。

我沒(méi)有在 Go 語(yǔ)言中找到人臉識(shí)別的有關(guān)庫(kù),因此用 Go 語(yǔ)言實(shí)現(xiàn)這樣一個(gè)應(yīng)用,對(duì)于整個(gè)社區(qū)而言,都是一件有趣又有幫助的事。

▌選擇合適的框架

如前所述,神經(jīng)網(wǎng)絡(luò)以及相應(yīng)的實(shí)現(xiàn)框架如今正被廣泛地使用。僅在計(jì)算機(jī)視覺(jué)領(lǐng)域,可用的框架就有 Caffe,Torch,TensorFlow 等。

但是,有一個(gè)非??岬臋C(jī)器學(xué)習(xí)庫(kù) —— dlib 庫(kù),一下就吸引了我的注意力。首先,它是用 C ++ 語(yǔ)言編寫(xiě)的,因此你可以使用 cgo 輕松地創(chuàng)建 Go 語(yǔ)言綁定。其次,在 Wild benchmarks 基準(zhǔn)的人臉識(shí)別任務(wù)上,據(jù)說(shuō)它能實(shí)現(xiàn) 99.38% 的準(zhǔn)確性,這聽(tīng)起來(lái)是很不可思議的。再者,現(xiàn)在一些流行的人臉識(shí)別庫(kù) face_recognition 和 openface 在底層都使用 dlib 庫(kù),因此它在該任務(wù)上會(huì)是一個(gè)非常好的選擇。

▌安裝依賴(lài)項(xiàng)

一旦框架確定下來(lái),那么我們要如何在機(jī)器上開(kāi)發(fā)并部署這個(gè)項(xiàng)目呢?首先,C++ 依賴(lài)項(xiàng)的安裝將會(huì)有很大的困難,因?yàn)槟銦o(wú)法通過(guò)簡(jiǎn)便的“go get”或“pip install”命令來(lái)實(shí)現(xiàn)。要么只能希望你的操作系統(tǒng)存儲(chǔ)庫(kù)中提供這些依賴(lài)庫(kù),要么你只能通過(guò)繁瑣的編譯過(guò)程來(lái)安裝,這樣的話(huà),這個(gè)問(wèn)題就更加令人討厭,因?yàn)橛性S多人都在 dlib 編譯過(guò)程碰到問(wèn)題。

如果你不得不通過(guò)編譯過(guò)程來(lái)安裝,那么可以參考一下下面的教程,也許會(huì)有幫助

https://gist.github.com/ageitgey/629d75c1baac34dfa5ca2a1928a7aeaf

幸運(yùn)的是,我們有更好的選擇:如果用戶(hù)的目標(biāo)系統(tǒng)已知,我們可以構(gòu)建 dlib 庫(kù)的二進(jìn)制安裝包來(lái)大大簡(jiǎn)化整個(gè)過(guò)程。說(shuō)到服務(wù)器軟件,Ubuntu 幾乎是系統(tǒng)標(biāo)配,因此首先要保證你能支持這個(gè)系統(tǒng)。

Ubuntu的標(biāo)準(zhǔn)倉(cāng)庫(kù)中自帶有 dlib庫(kù),但其版本太舊了:人臉識(shí)別僅支持 dlib19.3 版本,所以我們需要構(gòu)建自己的包。我為 Ubuntu 16.04 和 18.04 創(chuàng)建了 PPA (自定義存儲(chǔ)庫(kù)),安裝過(guò)程非常簡(jiǎn)單,如下:

sudoadd-apt-repositoryppa:kagamih/dlibsudoapt-getupdatesudoapt-getinstalllibdlib-dev

以上命令將安裝最新的 dlib19.15 版本及 Intel 的數(shù)學(xué)核心庫(kù),對(duì)于 Intel 處理器而言,這似乎是標(biāo)準(zhǔn) BLAS 和 LAPACK 接口的最快實(shí)現(xiàn)。

對(duì)于 Debian sid 和 Ubuntu 18.10 (尚未發(fā)布) 而言,標(biāo)準(zhǔn)倉(cāng)庫(kù)中同樣提供了 dlib 的安裝過(guò)程,你只需要如下命令:

sudoapt-getinstalllibdlib-devlibopenblas-dev

這將使用 OpenBLAS 來(lái)代替 MKL,實(shí)現(xiàn)的速度同樣非????;蛘撸阋部梢酝ㄟ^(guò) enable non-free package 并安裝 libmkl-dev 來(lái)實(shí)現(xiàn)。

我們還需要 libjpeg 來(lái)加載 JPEG 圖像:在 Ubuntu 上安裝 libjpeg-turbo8-dev 包,或在 Debian 上安裝 libjpeg62-turbo-dev。

到目前為止,我沒(méi)有給出其他系統(tǒng)的安裝說(shuō)明,如果你在安裝 dlib 過(guò)程中碰到問(wèn)題,可以訪(fǎng)問(wèn)我的 github 希望能為你提供合理有效的安裝建議。

GitHub 地址:

https://github.com/Kagami/go-face

此外,我還考慮為 dlib 庫(kù)提供 Docker 鏡像 (其中有少部分內(nèi)容已存在),許多具有復(fù)雜依賴(lài)關(guān)系的項(xiàng)目都傾向于使用這種分布式方法。但在我看來(lái),一個(gè)本機(jī)包能夠?yàn)橛脩?hù)提供更好的體驗(yàn),你不需要在控制臺(tái)編寫(xiě)長(zhǎng)命令,也不需要處理 sandbox 環(huán)境中的內(nèi)容。

▌寫(xiě)入依賴(lài)庫(kù)

當(dāng)前人臉識(shí)別庫(kù)地工作原理通常是:通過(guò)為照片上的每張人臉?lè)祷匾唤M數(shù)字 (矢量嵌入或描述符) 來(lái)比較區(qū)分它們,并通過(guò)比較這些數(shù)字來(lái)找到圖像中人的名字 (通常是通過(guò)計(jì)算歐幾里德距離向量,得到屬于同一個(gè)人的兩張人臉的最小距離)。這個(gè)概念這次就不在這里贅述了。

創(chuàng)建圖像中人臉的原始代碼并不是個(gè)重要的問(wèn)題,這個(gè)過(guò)程幾乎是遵循官方的例子就可以了。你可以查看 facerec.cc 及其相應(yīng)的頭文件 facerec.h,其中定義了 5 個(gè)函數(shù)和幾個(gè)在 Go 語(yǔ)言和 dlib 庫(kù)之間的交互結(jié)構(gòu)。

在這里,雖然 dlib 庫(kù)支持所有流行的圖像格式,但它只能從文件中加載它們。這將導(dǎo)致混亂,因?yàn)槲覀兺ǔV粫?huì)將圖像保存在內(nèi)存中并將其寫(xiě)入臨時(shí)文件。因此,在這里我使用 libjpeg 來(lái)編寫(xiě)自己的圖像加載器。由于大多數(shù)照片都以該格式存儲(chǔ)的,因此這種格式的加載器足以勝任大部分的需要,以后有需要我還會(huì)添加其他格式的圖像加載器。

我把 C++ 和 Go 語(yǔ)言的連接層放在 face.go 中。它提供了 Face 結(jié)構(gòu),用于保存圖像中人臉的坐標(biāo)及其描述符,并通過(guò) Recognizer 為所有操作提供接口,如初始化和實(shí)際識(shí)別。

一旦我們有了描述符,我們能做什么呢?在最簡(jiǎn)單的情況下,你可以通過(guò)比較未知描述符與所有已知描述符之間的歐幾里德距離。但這并不完美,即使是當(dāng)前最先進(jìn)的人臉識(shí)別技術(shù)也會(huì)得到錯(cuò)誤的答案。如果想稍微改善一下結(jié)果,我們需要使用每個(gè)人的許多圖像,并檢查這些圖像中是否有非常接近于所提供的人臉。

這也正是分類(lèi)器 classify.cc 所做的工作。首先,計(jì)算距離,然后對(duì)這些距離進(jìn)行排序,計(jì)算同一個(gè)人在前 10 個(gè)最小距離中的點(diǎn)擊數(shù)。)

諸如支持向量機(jī),將會(huì)在這個(gè)任務(wù)上提供更好的算法性能。 dlib 甚至為訓(xùn)練此類(lèi)模型提供了便捷的 API。很少有文章會(huì)提到 SVM 在大型數(shù)據(jù)集上的性能,因此我打算先在大型集合上測(cè)試它。

▌使用

下面得到的結(jié)果你可以在 github 中查看:

import"github.com/Kagami/go-face"

GitHub 地址:

https://github.com/Kagami/go-face

相關(guān)的所有結(jié)構(gòu)和方法概述,請(qǐng)參閱 GoDoc 文檔,主要包括以下幾個(gè)內(nèi)容:

初始化識(shí)別器

識(shí)別所有的已知圖像并收集描述符

將具有相應(yīng)類(lèi)別的已知描述符傳遞給識(shí)別器

獲取未知圖像的描述符

對(duì)其類(lèi)別進(jìn)行分類(lèi)

以下是一個(gè)工作示例,來(lái)說(shuō)明了上述的所有步驟:

packagemainimport("fmt""log""path/filepath""github.com/Kagami/go-face")//Pathtodirectorywithmodelsandtestimages.Hereit's//assumeditpointstothe//clone.constdataDir="testdata"http://Thisexampleshowsthebasicusageofthepackage:createan//recognizer,recognizefaces,classifythemusingfewknown//ones.funcmain(){//Inittherecognizer.rec,err:=face.NewRecognizer(dataDir)iferr!=nil{log.Fatalf("Can'tinitfacerecognizer:%v",err)}//Freetheresourceswhenyou'refinished.deferrec.Close()//Testimagewith10faces.testImagePristin:=filepath.Join(dataDir,"pristin.jpg")//Recognizefacesonthatimage.faces,err:=rec.RecognizeFile(testImagePristin)iferr!=nil{log.Fatalf("Can'trecognize:%v",err)}iflen(faces)!=10{log.Fatalf("Wrongnumberoffaces")}//Fillknownsamples.Intherealworldyouwouldusealotof//imagesforeachpersontogetbetterclassificationresults//butinourexamplewejustgetthemfromonebigimage.varsamples[]face.Descriptorvarcats[]int32fori,f:=rangefaces{samples=append(samples,f.Descriptor)//Eachfaceisuniqueonthatimagesogoestoitsown//category.cats=append(cats,int32(i))}//Namethecategories,i.e.peopleontheimage.labels:=[]string{"Sungyeon","Yehana","Roa","Eunwoo","Xiyeon","Kyulkyung","Nayoung","Rena","Kyla","Yuha",}//Passsamplestotherecognizer.rec.SetSamples(samples,cats)//Nowlet'strytoclassifysomenotyetknownimage.testImageNayoung:=filepath.Join(dataDir,"nayoung.jpg")nayoungFace,err:=rec.RecognizeSingleFile(testImageNayoung)iferr!=nil{log.Fatalf("Can'trecognize:%v",err)}ifnayoungFace==nil{log.Fatalf("Notasinglefaceontheimage")}catID:=rec.Classify(nayoungFace.Descriptor)ifcatID

運(yùn)行下面命令:

mkdir-p~/go&&cd~/go#Orcdtoyour$GOPATHmkdir-psrc/go-face-example&&cdsrc/go-face-examplegitclonehttps://github.com/Kagami/go-face-testdatatestdataeditmain.go#Pasteexamplecodegoget.../../bin/go-face-example

由于在 dlib 的代碼中大量使用了 C++ 模板,因此需要一些時(shí)間來(lái)編譯 go-face (在我的 i7 上大約需要運(yùn)行 1 分鐘)。 幸運(yùn)的是,Go 語(yǔ)言能夠構(gòu)建輸出緩存,這樣可以在今后構(gòu)建的時(shí)候速度更快。

上面的示例輸出應(yīng)打印“Nayoung”,表示能夠正確識(shí)別出未知圖像。

▌模型

go-face 需要 shape_predictor_5_face_landmarks.dat 和

dlib_face_recognition_resnet_model_v1.dat 模型才能開(kāi)始工作。你可以從 dlib-models 倉(cāng)庫(kù)中下載它們:

mkdirmodels&&cdmodelswgethttps://github.com/davisking/dlib-models/raw/master/shape_predictor_5_face_landmarks.dat.bz2bunzip2shape_predictor_5_face_landmarks.dat.bz2wgethttps://github.com/davisking/dlib-models/raw/master/dlib_face_recognition_resnet_model_v1.dat.bz2bunzip2dlib_face_recognition_resnet_model_v1.dat.bz2

此外,當(dāng)你要運(yùn)行示例代碼時(shí),還可以通過(guò) go-face-testdata 倉(cāng)庫(kù)來(lái)訪(fǎng)問(wèn)這些模型。

▌未來(lái)的工作

我對(duì)結(jié)果非常滿(mǎn)意,通過(guò)簡(jiǎn)單的 API,得到不錯(cuò)的識(shí)別結(jié)果,還可以輕松嵌入到 Go 的應(yīng)用程序中。當(dāng)然,還有需要改進(jìn)的地方:

為了追求簡(jiǎn)單性和速度,在創(chuàng)建描述符時(shí),go-face 無(wú)法對(duì)圖像進(jìn)行一些預(yù)處理,如抖動(dòng)。但是,增加圖像預(yù)處理操作是很有必要的,因?yàn)樗赡軙?huì)提高識(shí)別的性能。

Dlib 庫(kù)支持很多圖像格式 (如 JPEG,PNG,GIF,BMP,DNG),但是 go-face 目前只能實(shí)現(xiàn) JPEG 格式,未來(lái)的工作我們希望可以支持更多的格式。

正如 dlib 的作者 Davis 所建議的,相比于搜索最小距離,采用多類(lèi) SVM 可能會(huì)得到更好的分類(lèi)結(jié)果,因此還需要進(jìn)行額外的測(cè)試驗(yàn)證。

在 go-face 中,除非真的需要,不然我盡量不復(fù)制值,但實(shí)際上它還測(cè)試過(guò)大樣本 (10,000+人臉數(shù)據(jù)集) 的測(cè)試性能,可能存在一些瓶頸,有待日后完善。

從人臉提取特征向量是一個(gè)強(qiáng)大的概念,因?yàn)槟悴恍枰占约旱挠?xùn)練數(shù)據(jù),這也是一項(xiàng)非常艱巨的任務(wù) (Davis 曾提到創(chuàng)建 dlib 中 ResNet 模型所用到的 300 萬(wàn)張人臉數(shù)據(jù)集),但為了獲得更高的識(shí)別性能這可能也是無(wú)法避免的,因此值得為自己模型的訓(xùn)練提供相應(yīng)的工具。

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀(guān)點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 人臉識(shí)別
    +關(guān)注

    關(guān)注

    76

    文章

    4021

    瀏覽量

    82377
  • python
    +關(guān)注

    關(guān)注

    56

    文章

    4809

    瀏覽量

    85074

原文標(biāo)題:你們都用 Python 做人臉識(shí)別,我就偏要用 Go!

文章出處:【微信號(hào):AI_Thinker,微信公眾號(hào):人工智能頭條】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    如何運(yùn)用Go語(yǔ)言實(shí)現(xiàn)人臉識(shí)別

    但是,有一個(gè)非??岬臋C(jī)器學(xué)習(xí)庫(kù) —— dlib 庫(kù),一下就吸引了我的注意力。首先,它是 C ++ 語(yǔ)言編寫(xiě)的,因此你可以使用 cgo 輕松地創(chuàng)建 Go 語(yǔ)言綁定。其次,在 Wild
    的頭像 發(fā)表于 08-23 09:41 ?1.3w次閱讀

    C語(yǔ)言實(shí)現(xiàn):見(jiàn)縫插針游戲!代碼思路+源碼分享

    見(jiàn)縫插圓我們昨天已經(jīng)C語(yǔ)言實(shí)現(xiàn)了,今天將實(shí)現(xiàn)一個(gè)見(jiàn)縫插針的游戲。
    發(fā)表于 12-05 11:02 ?797次閱讀

    verilog語(yǔ)言實(shí)現(xiàn)電子鐘

    各位大神求救啊verilog語(yǔ)言實(shí)現(xiàn)電子鐘
    發(fā)表于 05-04 16:37

    基于FPGA的圖像邊緣檢測(cè)系統(tǒng)設(shè)計(jì),VHDL語(yǔ)言實(shí)現(xiàn)怎么做

    不知道有沒(méi)有大神做過(guò):基于FPGA的圖像邊緣檢測(cè)系統(tǒng)設(shè)計(jì),VHDL語(yǔ)言實(shí)現(xiàn)
    發(fā)表于 05-10 00:22

    如何用C語(yǔ)言實(shí)現(xiàn)OOP編程?

    老大看到OOP編程很好,就讓我學(xué),怎么C語(yǔ)言實(shí)現(xiàn)OOP編程的,請(qǐng)大俠指點(diǎn)
    發(fā)表于 10-30 03:45

    【AI技能解析】人臉識(shí)別怎么做到的?

    識(shí)別支付場(chǎng)景】人臉識(shí)別這么火,那么它到底是怎么實(shí)現(xiàn)的呢?看大牛為您解鎖人臉識(shí)別技術(shù)中的黑科技!中
    發(fā)表于 03-16 11:25

    JAVA語(yǔ)言實(shí)現(xiàn)RSA公鑰密碼算法

    JAVA語(yǔ)言實(shí)現(xiàn)RSA公鑰密碼算法:本文闡述了公開(kāi)密鑰密碼體制RSA算法的原理及實(shí)現(xiàn)技術(shù)。并在此基礎(chǔ)上,給出了JAVA語(yǔ)言實(shí)現(xiàn)的RSA算法源代碼。關(guān)鍵詞:ILSA體制;公鑰;密鑰
    發(fā)表于 02-10 10:27 ?58次下載

    VHDL語(yǔ)言實(shí)現(xiàn)3分頻電路

    VHDL語(yǔ)言實(shí)現(xiàn)3分頻電路 標(biāo)簽/分類(lèi): 眾所周知,分頻器是FPGA設(shè)計(jì)中使用頻率非常高的基本設(shè)計(jì)之一,盡管在目前大部分設(shè)計(jì)中,廣泛使用芯片廠(chǎng)家集成的鎖相
    發(fā)表于 08-21 15:28 ?5729次閱讀

    C語(yǔ)言實(shí)現(xiàn)DES算法

    C語(yǔ)言實(shí)現(xiàn)DES算法 本DES算法,使用了效率很高的C完成。目前,國(guó)內(nèi)知名企業(yè)的POS終端中,單DES算法,均是采用這個(gè)函數(shù)完成。函數(shù)經(jīng)本站驗(yàn)證過(guò),可以
    發(fā)表于 01-16 10:09 ?3277次閱讀

    C語(yǔ)言實(shí)現(xiàn)FFT算法

    C語(yǔ)言實(shí)現(xiàn)FFT算法 /*****************fft programe*********************/#include "typedef.h" #include "math.h" struct compx EE(struct compx
    發(fā)表于 10-30 13:39 ?6366次閱讀

    C語(yǔ)言實(shí)現(xiàn)數(shù)字濾波

    C語(yǔ)言實(shí)現(xiàn)數(shù)字濾波 。對(duì)數(shù)值進(jìn)行精度調(diào)整,下面給出幾種常用的數(shù)字濾波方法的C語(yǔ)言函數(shù),這些函數(shù)有一定的通用性,Turbo C 2.0編制而成,在研華IPC-610/386機(jī)上均編譯
    發(fā)表于 07-26 15:44 ?10次下載

    go語(yǔ)言枚舉類(lèi)型怎么

    go 語(yǔ)言枚舉類(lèi)型是這么的?在什么場(chǎng)景下會(huì)用到枚舉?本文對(duì) go 語(yǔ)言枚舉做了詳細(xì)講解。 枚舉,是一種重要的數(shù)據(jù)類(lèi)型,由一組鍵值對(duì)組成,通
    的頭像 發(fā)表于 09-02 09:43 ?5244次閱讀

    go語(yǔ)言實(shí)現(xiàn)的簡(jiǎn)單im即時(shí)通信系統(tǒng)

    ? 本文介紹了一個(gè) go 語(yǔ)言實(shí)現(xiàn)的簡(jiǎn)單 im 即時(shí)通信系統(tǒng)。 簡(jiǎn)介 純go實(shí)現(xiàn)的im即時(shí)通訊系統(tǒng),各層可單獨(dú)部署,之間通過(guò)rpc通訊,支持集群,github地址 https
    的頭像 發(fā)表于 10-20 16:02 ?3695次閱讀

    累加校驗(yàn)和C語(yǔ)言實(shí)現(xiàn)

    累加校驗(yàn)和C語(yǔ)言實(shí)現(xiàn)
    發(fā)表于 11-29 18:06 ?10次下載
    累加校驗(yàn)和C<b class='flag-5'>語(yǔ)言實(shí)現(xiàn)</b>

    怎么C語(yǔ)言實(shí)現(xiàn)多態(tài)

    這里我想主要介紹下在C語(yǔ)言中是如何實(shí)現(xiàn)的面向?qū)ο蟆V懒薈語(yǔ)言實(shí)現(xiàn)面向?qū)ο蟮姆绞剑覀冊(cè)俾?lián)想下,C++中的class的運(yùn)行原理是什么?
    的頭像 發(fā)表于 10-12 09:12 ?2112次閱讀
    主站蜘蛛池模板: 二级特黄绝大片免费视频大片 | 日韩美女奶水喂男人在线观看 | 91午夜剧场 | 男女激情做爰叫床声视频偷拍 | 伊人玖玖 | 女人大毛片一级毛片一 | 一区二区免费 | 噜噜噜色 | 婷婷激情综合网 | 天堂网在线视频 | 大尺度视频网站久久久久久久久 | 黑人黄色片 | 欧美性猛交xxxx乱大交 | 韩日毛片| 午夜在线视频网站 | 久热操 | 亚洲欧美婷婷 | 亚洲 欧洲 日产 韩国在线 | 亚洲成在| 狠狠色丁香久久综合网 | 在线免费看黄的网站 | 午夜在线观看视频在线播放版 | 色婷婷色综合激情国产日韩 | 国产黄色片在线观看 | 四虎精品久久 | 手机看片自拍自拍自拍 | 久久国产高清视频 | 伊人伊成久久人综合网777 | 一级欧美视频 | 68日本xxxxxxx18| 久碰香蕉精品视频在线观看 | 国产综合精品久久亚洲 | 俺去啦五月| 开心丁香婷婷深爱五月 | 真实偷清晰对白在线视频 | 天天躁夜夜躁狠狠躁躁88 | 午夜爱爱免费视频 | 欧美freesex10一|3 | 91久久另类重口变态 | 欧美视频不卡一区二区三区 | 激情久久久久久久久久 |