精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

國外程序員真會玩,他用這個技術整蠱了全公司的人…

譯文
新聞 移動開發
我喜歡用Photoshop修改各種東西,再把結果在Slack公司內發布,每次都能帶來新的想法我享受在其中。不過重復打開Photoshop再復制/粘貼面部圖像確實相當乏味。

【51CTO.com快譯】我喜歡用Photoshop修改各種東西,再把結果在Slack公司內發布,每次都能帶來新的想法我享受在其中。

不過重復打開Photoshop再復制/粘貼面部圖像確實相當乏味。

程序員

[[185213]]

在最初產生這個想法時,我就意識到這個項目將主要包含三大組成部分:

1. 簡單圖像修改

2. Slack集成

3. 面部檢測

以往我曾經使用過Go中的image與image/draw軟件包,并閱讀過與之相關的幾篇文章,因此我對于完成這項任務很有信心。組成部分1就此搞定。

我還曾經在Go中構建過一款玩具性質的Slack機器人,其中用到了查找自谷歌的幾條指令。雖然缺少Go Slack官方整體客戶端會讓問題變得更為復雜,但出于最基本的需求,我相信自己能夠完成通過Slack下載及上傳圖像這樣一項工作。組成部分2也就不是問題了。

我唯一不確定的是面部檢測工作到底是否易于實現。我在谷歌上查找golang面部檢測內容,并點開***條結果,其內容指向StackOverflow上關于go-opencv計算機視覺庫的一條問題。在查閱了該庫中的面部檢測示例項目后,我了解到了自己需要掌握的一切。組成部分3也同樣得到了解決。

面部檢測

由于熟悉度***,所以我決定首先從面部檢測入手。這是項目中***的難題,因此我打算先看看自己能否搞定,如果不行那其它的工作都將毫無意義。

我決定盡可能對go-opencv庫進行封裝。可以肯定的是,opencv數據類型與Go標準庫有所區別,至少在其定義Image與Rectangle兩項接口方面存在差異,因此必須作出一些調整。

我在其中發現一項對opencv.FromImage方法的引用,其負責將Go的image.Image轉換為opencv庫的形式。這意味著我不再需要將文件路徑傳遞至opencv.LoadImage方法以進行轉換,而可以直接處理存儲在內存中的鏡像。這能夠節約從Slack接收圖像后將其保存在文件系統中的步驟。

遺憾的是,我無法利用同樣的轉換方式加載Haar面部識別XML文件,不過這樣的結果我還可以接受,所以暫時先這樣吧。

以此為基礎,我編寫出了以下facefinder包:

  1. package facefinder import ( "image""github.com/lazywei/go-opencv/opencv" ) var faceCascade *opencv.HaarCascade type Finder struct { cascade *opencv.HaarCascade } func NewFinder(xml string) *Finder { return &Finder{ cascade: opencv.LoadHaarClassifierCascade(xml), } } func (f *Finder) Detect(i image.Image) []image.Rectangle { var output []image.Rectangle faces :f.cascade.DetectObjects(opencv.FromImage(i)) for _, face :range faces { output = append(output, image.Rectangle{ image.Point{face.X(), face.Y()}, image.Point{face.X() + face.Width(), face.Y() + face.Height()}, }) } return output } 

而后,我能夠輕松找到圖像中的面部區域:

  1. imageReader, _ :os.Open(imageFile) baseImage, _, _ :image.Decode(imageReader) finder :facefinder.NewFinder(haarCascadeFilepath) faces :finder.Detect(baseImage) for _, face :range faces { // [...] } 

我從谷歌上復制了幾段“繪制矩形”代碼以進行功能檢查,并確定以上代碼確實能夠正常工作。有了位置信息,我又鼓搗出一條圖像加載轉換函數(其中更關注錯誤內容,而非急于將一切塞進)。

  1. func loadImage(file string) image.Image { reader, err :os.Open(file) if err != nil { log.Fatalf("error loading %s: %s", file, err) } img, _, err :image.Decode(reader) if err != nil { log.Fatalf("error loading %s: %s", file, err) } return img } 

圖像修改

接下來,我的新循環如下所示:

  1. baseImage :loadImage(imageFile) chrisFace :loadImage(chrisFaceFile) bounds :baseImage.Bounds() finder :facefinder.NewFinder(haarCascadeFilepath) faces :finder.Detect(baseImage) // Convert image.Image to a mutable image.ImageRGBA canvas :image.NewRGBA(bounds) draw.Draw(canvas, bounds, baseImage, bounds.Min, draw.Src) for _, face :range faces { draw.Draw( canvas, face, chrisFace, bounds.Min, draw.Src, ) } 

令人振奮,測試結果一切順利。

[[185214]]

言歸正傳,其***實際效果就遠超我的預期。矩形繪制算法真棒!

在圖像修改方面,我首先得想辦法去掉黑色背景。我以前曾使用過PNG配合透明背景的方法,因此確信其一定有效。在谷歌了幾下后,我偶然發現了draw.Draw函數中的draw.Over。我將其塞進正在使用的draw.Src,確實有效!

[[185215]]

雖然也可以用羽毛筆慢慢繪邊,但腦袋里的一個聲音告訴我,差不多就可以了。

好的,接下來我需要把面部圖像縮小一點。可以肯定的是,如果將面部圖像放進尺寸完全相同的矩形,那么二者肯定無法匹配。這只是一款面部檢測工具,而非頭部檢測工具,這意味著我獲得的矩形并不適用于替換整個頭部。我編寫了一條快速函數以為image.Rectangle增加特定空白邊緣,最終將具體值設定為30%。

完成后,我開始對圖像進行大小/匹配調整。最終,我選擇了disintegration/imaging,其擁有一條簡單的imaging.Fit函數且提供水平鏡像等其它轉換操作。我的面部源圖像不多,所以我想這種鏡像功能可以提供多一種圖像選擇。

在導入后,我的新循環如下所示:

  1. for _, face :range faces { // Pad the rectangle by 30 percent rect :rectMargin(30.0, face) // Grab a random face (also 50/50 chance it's mirrored) newFace :chrisFaces.Random() chrisFace :imaging.Fit(newFace, rect.Dx(), rect.Dy(), imaging.Lanczos) draw.Draw( canvas, rect, chrisFace, bounds.Min, draw.Over, ) } 

我又進行了一輪新的測試,效果相當不錯!

[[185216]]

[[185217]]

到這里,我意識到自己做出了一些真正有價值的東西。

Slack集成

我把面部修改代碼轉化為一個可運行的二進制文件,并打算將其打包成一個Slack機器人。之所以先轉換為二進制形式,是為了方便測試并在確定一切無誤后再行打包。現在時機已經成熟,我將把它變成Slack機器人。

當然,由于個人水平的限制,我又轉向了谷歌。

***條結果就是我所需要的內容。我花了大量時間閱讀Slack的API說明文檔并加以實踐,最終我得到了以下結果:

程序員

不錯

***套迭代使用了Slack上傳,但其作為自由Slack層意味著其不夠理想。我轉而將輸出結果以本地方式存儲在自己的服務器上,而后再將其鏈至Slack。由于Slack會自動擴展大部分圖像鏈接,因此這種作法對大多數人來說并不會影響到用戶體驗,也不會引來頂頭上司的注意。

由于訪問過程更為輕松,現在我能夠快速獲得大量實驗性面部圖像。我意識到,如果其找不到任何面部圖像,則會全程回復同樣的原有圖像——這就不好玩了。所以我將循環調整為:

  1. iflen(faces) == 0 { // Grab a specific face and resize it to 1/3 the width// of the base image face :imaging.Resize( chrisFaces[0], bounds.Dx()/3, 0, imaging.Lanczos, ) face_bounds :face.Bounds() draw.Draw( canvas, bounds, face, // I'll be honest, I was a couple beers in when I came up with this and I// have no idea how it works exactly, but it puts the face at the bottom of// the image, centered horizontally with the lower half of the face cut off bounds.Min.Add(image.Pt( -bounds.Max/2+face_bounds.Max.X/2, -bounds.Max.Y+int(float64(face_bounds.Max.Y)/1.9), )), draw.Over, ) } 

現在的結果是:

[[185218]]

我個人對這套解決方案非常滿意。

到這里全部工作已經就緒,就等同事們的反應了。我只用了一個晚上就完全了從概念到原型的全部工作,沒人知道我為他們準備了怎樣的驚喜。

程序員

截至目前,我的經理是最為積極的Chrisbot手動配置用戶。

程序員

抱歉了Mat,看來自動化方案最終一定會取代人類的職位。

[[185219]]

但這家伙自己則非常開心。

不久之后,整個辦公室都在向@Chrisbot發送圖片。

我驚喜地發現,它確實能夠正確地處理面部重疊情況,即首先繪制最遠處的面孔。雖然這純粹屬于go-opencv庫返回矩形時實際順序帶來的副作用,但我對結果非常滿意。

不過雖然自動化面部替換大大增加了Slack當中Chris的亮相次數,但仍有一些人認為,人為操作的結果更有靈性一些。

不得不承認,他們的觀點確實站得住腳——至少在某些情況之下。

程序員

【51CTO譯稿,合作站點轉載請注明原文譯者和出處為51CTO.com】

責任編輯:陳琳 來源: 51cto
相關推薦

2019-04-26 13:26:00

預測股票深度學習股票

2020-09-25 15:43:25

程序員網站技術

2021-02-15 16:30:35

AI人工智能人臉識別

2012-11-22 14:00:26

程序員

2020-10-12 08:45:25

程序員技術開發

2011-06-11 20:59:12

程序員

2020-05-08 10:28:29

Node.js程序員JavaScript

2016-11-29 07:53:57

科技新聞早報計算機

2018-06-14 09:59:48

程序員代碼大公司

2017-01-17 12:15:14

互聯網 機器

2017-06-12 11:14:52

程序員技術停滯

2012-06-27 09:29:49

程序員

2009-03-13 10:27:25

女程序員天才人生

2012-07-20 11:16:26

程序員

2019-03-04 15:09:49

程序員互聯網思維模式

2020-10-28 09:43:40

前端開發Vue

2020-06-15 09:32:59

程序員大公司小公司

2022-08-01 09:43:19

程序員Googlefacebook

2015-09-24 09:04:36

程序員

2014-07-16 09:34:44

點贊
收藏

51CTO技術棧公眾號

欧美午夜无遮挡| 国产日本欧美一区二区| 久久久久久久爱| 日韩一级视频在线观看| 成人av集中营| 亚洲国产视频直播| 亚洲日本精品国产第一区| 性网爆门事件集合av| 性欧美精品高清| 久久这里只有精品视频首页| 黄色工厂在线观看| 精品视频一二| 在线观看精品一区| 男女猛烈激情xx00免费视频| 69视频在线| 不卡av在线网| 91最新国产视频| 国产又粗又猛又爽又| 欧美日韩午夜| 日韩在线观看视频免费| 国产精品久久久免费观看| 91精品国产一区二区在线观看| 精品人伦一区二区三区蜜桃免费| 国产麻豆电影在线观看| 欧美捆绑视频| 不卡一区中文字幕| 91一区二区三区| 中文字幕免费在线看| 免费亚洲婷婷| 97精品视频在线观看| 欧美国产日韩在线观看成人| 国产一区二区在线| 日韩电影在线观看中文字幕| 伊人av在线播放| 国产精品亚洲四区在线观看 | 免费毛片一区二区三区| 久久国产电影| 一本色道久久88亚洲综合88| 国产精品1000部啪视频| caoporn成人| 欧美一区二区三区四区久久| 少妇一级淫免费播放| 日本在线视频一区二区| 色婷婷精品久久二区二区蜜臂av| 你懂的av在线| 一区二区乱码| 欧美性猛交xxxx富婆| 缅甸午夜性猛交xxxx| 黑人精品视频| 亚洲国产cao| 日韩欧美国产综合在线| 国产羞羞视频在线播放| 一区二区三区日韩精品| 欧美一级中文字幕| 日韩影视在线| 午夜电影网一区| 免费国产a级片| 中文字幕在线高清| 在线观看成人小视频| 久久久精品三级| 另类一区二区三区| 欧美一区二区三区视频| 色婷婷狠狠18禁久久| 白白在线精品| 日韩电影在线观看永久视频免费网站| 波多野结衣一本| 欧美男gay| 色婷婷综合久久久久中文字幕1| 日本污视频网站| 亚洲精品电影| 国内精品模特av私拍在线观看| 日本天堂网在线观看| 久久成人一区| 成人h视频在线| 亚洲国产精品无码久久| av午夜一区麻豆| 欧美一级片免费观看| av电影在线观看| 悠悠色在线精品| 日本韩国欧美在线观看| se69色成人网wwwsex| 欧美精品在线视频| 日韩综合第一页| 精品国产精品| 欧美夫妻性生活视频| 国产精品国产三级国产专区52| 麻豆精品网站| 91大片在线观看| 台湾av在线二三区观看| 国产精品女上位| 污污污污污污www网站免费| 高潮在线视频| 欧美日韩国产综合一区二区三区| 折磨小男生性器羞耻的故事| 免费欧美视频| 欧美多人爱爱视频网站| 99久久久久久久久| 国产毛片精品一区| 欧美黑人3p| 日本欧美电影在线观看| 91福利精品视频| 日本在线不卡一区二区| 日韩大片在线播放| 8050国产精品久久久久久| 亚洲综合免费视频| 久久久久青草大香线综合精品| 2021狠狠干| 美女色狠狠久久| 亚洲国产免费av| 国产精品三区在线观看| 久久精品麻豆| 国产女人水真多18毛片18精品 | 日本精品久久久| 国产免费黄色大片| 国产亚洲精久久久久久| 日韩一级性生活片| 国产一区二区av在线| 亚洲人成网站在线播| 国产无遮挡裸体免费视频| 激情综合网av| 四虎永久国产精品| 日韩伦理在线| 亚洲成人av在线| 欧产日产国产v| 麻豆成人91精品二区三区| 蜜桃视频日韩| 在线最新版中文在线| 精品少妇一区二区三区日产乱码 | 熟女丰满老熟女熟妇| 你懂的一区二区| 成人黄色免费在线观看| 国产二区视频在线观看| 色婷婷精品久久二区二区蜜臂av | 日韩免费观看在线观看| 网站黄在线观看| 亚洲国产日韩a在线播放| 午夜影院免费版| 亚洲欧洲美洲一区二区三区| 国产精品亚洲第一区| 黄色影院在线播放| 欧美性猛交丰臀xxxxx网站| 四虎永久免费影院| 久久久精品网| 日本电影一区二区三区| 成人av免费电影网站| 亚洲男人天堂古典| 欧美人一级淫片a免费播放| 久久青草欧美一区二区三区| 91视频 -- 69xx| 蜜桃成人av| 国产成人激情视频| yw视频在线观看| 欧美日韩国产中文| 真实国产乱子伦对白在线| 国产精品综合视频| 国产欧美精品aaaaaa片| 国产福利一区二区精品秒拍| 午夜伦理精品一区| 免费黄色在线视频网站| 欧美综合亚洲图片综合区| www.日本高清视频| 九九视频精品免费| 99久久免费观看| 天堂网av成人| 国产精品视频色| 成人在线观看亚洲| 亚洲精品一区二区三区香蕉| 一级黄色免费网站| 国产三级欧美三级日产三级99 | 国产成人午夜精品影院观看视频| 欧美极品少妇无套实战| 狼人精品一区二区三区在线| 日韩av免费一区| 日本www在线| 日韩精品一区二| 国产免费av一区| 国产精品人人做人人爽人人添| 日本一本在线视频| 一区二区三区高清视频在线观看| 色噜噜狠狠一区二区三区| av成人在线网站| 4k岛国日韩精品**专区| 在线观看免费黄视频| 亚洲精品在线观看网站| 国产精品无码粉嫩小泬| 亚洲蜜桃精久久久久久久| 国产乱了高清露脸对白| 理论电影国产精品| 人人妻人人做人人爽| 欧美日韩在线二区| 亚洲自拍小视频| 综合在线影院| 久久露脸国产精品| 日本免费在线视频| 日韩av在线免费播放| 一区二区国产欧美| 懂色aⅴ精品一区二区三区蜜月| 天天干天天操天天拍| 99久久精品一区| 亚洲成人手机在线观看| 久久av最新网址| 岛国大片在线播放 | 国产片侵犯亲女视频播放| 久久av导航| 岛国视频一区免费观看| 欧美日韩免费看片| 久久久女人电视剧免费播放下载| 永久免费av在线| 日韩精品中文字幕在线播放| 国产黄色av网站| 欧美日韩一区国产| 精品国产午夜福利| 亚洲精品视频免费看| 亚洲午夜精品久久久久久高潮| 成人免费高清视频在线观看| 污污的视频免费观看| 日本中文字幕一区| 又粗又黑又大的吊av| 欧美a级一区| 性做爰过程免费播放| 欧美自拍偷拍| 欧美日韩一区二区视频在线 | 在线观看国产精品91| 无码精品在线观看| 日韩精品一区二区三区在线观看 | 秋霞午夜一区二区三区视频| 国产精品久久久久久久久| 桃色av一区二区| 午夜精品久久久99热福利| 欧美日韩经典丝袜| 色综合视频网站| 在线h片观看| 欧美美女15p| av网站网址在线观看| 久久久精品日本| 黄网站在线免费看| 久久久精品国产亚洲| 日本欧美在线视频免费观看| 日韩在线www| 国产原创在线观看| 久久久成人精品| 3d玉蒲团在线观看| 精品综合久久久久久97| 亚洲精品一线| 欧美人在线观看| 爱看av在线| 97视频在线观看免费| 黄在线观看免费网站ktv| 97av在线播放| 偷拍视频一区二区三区| 国产精品久久久久久婷婷天堂| 欧美aaa大片视频一二区| 国产精品一区=区| 亚洲二区av| 91一区二区三区| 欧美一级色片| 色综合久久av| 在线成人激情| www.av片| 石原莉奈在线亚洲三区| 亚洲欧美自偷自拍另类| 韩国欧美国产一区| 精品国产aⅴ一区二区三区东京热 久久久久99人妻一区二区三区 | 久久久精品一区二区| 羞羞的网站在线观看| 97精品视频在线| 一二区成人影院电影网| 国产日韩欧美在线观看| 亚洲精品一区二区三区中文字幕 | 综合久久99| 成人性免费视频| 日韩精品电影在线| 国产资源中文字幕| 99国内精品久久| 亚洲高潮女人毛茸茸| 亚洲人成精品久久久久| 亚洲综合一二三| 欧美网站一区二区| 亚洲av少妇一区二区在线观看| 国产视频精品一区二区三区| 在线日本中文字幕| 国产+人+亚洲| 国产精品原创视频| 国产日韩久久| 欧美hd在线| 国产伦精品一区二区三区四区视频_| 久久字幕精品一区| 少妇欧美激情一区二区三区| 91视频观看视频| 亚洲av无码一区二区三区在线| 欧美日韩亚洲91| 国产老妇伦国产熟女老妇视频| 亚洲国产精品热久久| 日本暖暖在线视频| 日本a级片电影一区二区| 国产精品毛片aⅴ一区二区三区| 久久精品99久久| 欧美成人日韩| 色婷婷成人在线| 91视频.com| 九九九国产视频| 91麻豆精品国产91久久久资源速度| 婷婷丁香一区二区三区| 久久精品国产99国产精品澳门| 在线观看福利电影| 国产a一区二区| 欧美成免费一区二区视频| 国产精品va无码一区二区| 国产一区二区91| 国产探花视频在线| 欧美丝袜第一区| 欧美一级淫片免费视频魅影视频| 中文欧美日本在线资源| 日韩伦理在线一区| 国内精品久久久久久久果冻传媒| 婷婷综合社区| 日韩一级免费片| 国产日韩精品久久久| www成人在线| 欧美成人三级电影在线| 超碰在线观看免费版| 国产精品一区二区性色av| 在线看成人短视频| 欧美a v在线播放| 懂色av噜噜一区二区三区av| 天海翼在线视频| 欧美日韩国产片| 日本视频在线观看| 国产精品成熟老女人| 美女久久久久| 成人午夜视频免费在线观看| 91在线精品一区二区三区| 日韩精品一区三区| 亚洲成人黄色在线| rebdb初裸写真在线观看| 粉嫩精品一区二区三区在线观看 | 欧美大奶子在线| 日韩欧洲国产| 国产精品视频网站在线观看| 国产一区二区精品久久99| 夫妻性生活毛片| 欧美一区二区三区小说| 在线xxxx| 国产一区二区免费在线观看| 亚洲人成人一区二区三区| 蜜臀aⅴ国产精品久久久国产老师| 亚洲精品欧美二区三区中文字幕| 中国精品一区二区| yellow中文字幕久久| 91国产精品| 99er在线视频| 91在线视频官网| 午夜精品久久久久久久蜜桃| 在线精品视频视频中文字幕| 九七影院97影院理论片久久 | 国产亚洲福利| 88久久精品无码一区二区毛片| 色婷婷亚洲综合| 一本一道波多野毛片中文在线| 成人观看高清在线观看免费| 亚洲先锋影音| 黄色激情在线观看| 日韩欧美国产中文字幕| 在线播放日本| 国产激情一区二区三区在线观看| 亚洲黄色一区| 亚洲精品国产精品国自产网站| 欧美男男青年gay1069videost| av小次郎在线| 久草精品电影| 另类欧美日韩国产在线| 久久久久亚洲AV| 亚洲乱码一区av黑人高潮| 黄色成人小视频| 国产在线观看欧美| 国产亚洲一本大道中文在线| 91精品国产色综合久久不8| 久久久久久久av| 成人a'v在线播放| 欧洲熟妇的性久久久久久| 在线日韩国产精品| av网站网址在线观看| 欧美韩国日本精品一区二区三区| 韩国av一区二区三区在线观看| 亚洲一区 视频| xx视频.9999.com| 亚洲人挤奶视频| 韩国三级hd中文字幕有哪些| 在线影院国内精品| 国产精品186在线观看在线播放| 欧美午夜精品理论片a级大开眼界| 国产一区二区视频在线| 国产又大又粗又爽| 久久6精品影院| 日韩一区电影| 欧美大片免费播放器| 制服视频三区第一页精品| 户外露出一区二区三区| 成人在线视频一区二区三区| 国产精品网友自拍|