精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

久久不射2019中文字幕| 亚洲wwww| 99久久伊人网影院| 国产精品99久久久久久久久久久久| 成人网站免费观看| 欧美激情三区| 亚洲小说欧美激情另类| 免费在线成人av| 91精品国产乱码久久| 国产精品草草| 亚洲午夜精品久久久久久久久久久久 | 宇都宫紫苑在线播放| 成年女人在线看片| 国产精品久久久久天堂| 精品久久蜜桃| 99国产成人精品| 欧美一区=区| 欧美日韩不卡合集视频| 国产精品免费无码| 久久超级碰碰| 欧美一区二区成人| 日韩精品你懂的| 高清在线视频不卡| 国产精品久久久久久久久图文区| 国严精品久久久久久亚洲影视 | 亚洲第一男人天堂| 亚洲最大天堂网| 韩国美女久久| 午夜精品123| 免费极品av一视觉盛宴| 99视频在线观看地址| www精品美女久久久tv| 99国产在线视频| 91片黄在线观看喷潮| 日韩av午夜在线观看| 2020国产精品视频| 国产黄色片视频| 欧美大片一区| 美女福利视频一区| 污污的视频在线免费观看| 国产成人ay| 亚洲精品日韩久久久| 中文字幕人妻一区二区三区| 国产精品一区二区精品视频观看 | 日本伊人精品一区二区三区观看方式| 日韩一级欧美一级| 香蕉视频999| 成人av集中营| 欧美在线色视频| www.超碰com| 欧美日韩不卡| 欧美日韩一区二区三区不卡| 99久久国产宗和精品1上映| 92国产精品| 色综合天天综合狠狠| 久久无码高潮喷水| 亚洲人成在线网站| 日韩欧美精品网址| www.日日操| 91p九色成人| 欧美男生操女生| 91在线第一页| 9l视频自拍蝌蚪9l视频成人| 欧美成人在线直播| 国产熟女高潮一区二区三区| 欧美18免费视频| 亚洲精品久久久久国产| 我和岳m愉情xxxⅹ视频| 国产探花在线精品一区二区| 中文字幕国内精品| 手机在线免费看片| 伊人久久大香线蕉av超碰演员| 欧美激情第1页| 狠狠人妻久久久久久综合| 天堂精品中文字幕在线| 国产日韩欧美在线视频观看| 国产尤物在线观看| 国产91色综合久久免费分享| 国产精品日韩一区二区免费视频| 十九岁完整版在线观看好看云免费| 91视频国产观看| 亚洲午夜精品久久久中文影院av | 成功精品影院| 亚洲精品日韩丝袜精品| 亚洲精品天堂网| 午夜久久一区| 日韩美女在线观看| 国产日韩欧美视频在线观看| 波波电影院一区二区三区| 欧美一进一出视频| 99在线播放| 日韩欧美国产骚| 深爱五月综合网| 人人精品亚洲| 不卡av电影院| 亚洲成熟少妇视频在线观看| 国产做a爰片久久毛片| 九九九九九精品| 自拍视频在线网| 亚洲v精品v日韩v欧美v专区| 爱情岛论坛成人| japanese色系久久精品| 这里只有精品视频| 欧美福利视频一区二区| 久久国产精品色| 久久精品人成| a视频在线观看| 日本精品一区二区三区高清| 久久精品aⅴ无码中文字字幕重口| 国产精品免费99久久久| 久久久久久香蕉网| 91尤物国产福利在线观看| 久久综合色婷婷| 青青草视频国产| 巨大黑人极品videos精品| 亚洲激情中文字幕| 精品国产乱码久久久久久鸭王1| 免费在线播放第一区高清av| 91手机在线播放| 一区二区高清不卡| 91久久精品一区二区| 艳妇乳肉亭妇荡乳av| 午夜精品久久| 91久久精品国产91久久性色| 国产剧情在线观看| 欧美视频中文在线看| 亚洲av无码一区东京热久久| 国产精品久久久久无码av| 日本乱人伦a精品| 亚洲色图21p| 亚洲高清免费观看| 性感美女一区二区三区| 午夜久久99| 亚洲一区亚洲二区| 老司机午夜在线| 欧美日韩大陆一区二区| 三区四区在线观看| 日本伊人精品一区二区三区观看方式 | 欧美激情视频网站| a天堂中文在线观看| 亚洲人妖av一区二区| 亚洲美女性囗交| 图片区亚洲欧美小说区| 国产综合福利在线| 久cao在线| 日韩欧美中文字幕制服| 精品国产欧美日韩不卡在线观看 | 91亚洲精品久久久| 激情视频在线观看| 欧美一区二区三区系列电影| 九九精品视频免费| 成人性生交大合| 91成人在线观看喷潮教学| 加勒比久久高清| 欧美一区在线直播| 成人午夜影视| 欧美猛男超大videosgay| 亚洲色偷偷综合亚洲av伊人| 国产一区二区在线免费观看| 中文字幕色呦呦| 国产成人av毛片| 欧美综合第一页| www.视频在线.com| 在线观看91av| 国产一级理论片| 91亚洲午夜精品久久久久久| 久久精品一区二| 欧美gay男男猛男无套| 91午夜在线播放| tube8在线hd| 亚洲欧美日韩中文在线制服| 亚洲在线观看av| 一区二区三区日韩在线观看| 婷婷五月精品中文字幕| 视频一区视频二区中文| 在线国产精品网| 亚洲欧洲国产精品一区| 57pao国产成人免费| 超碰免费在线观看| 欧美成人伊人久久综合网| 日韩特级黄色片| 中文字幕一区二区5566日韩| 91成人在线观看喷潮蘑菇| 久久午夜电影| 国产精品久久久影院| 中文字幕亚洲影视| 91手机视频在线观看| 中文字幕这里只有精品| 欧美成人h版在线观看| 婷婷国产在线| 91精品国产综合久久福利 | 国产又色又爽又黄刺激在线视频| 日韩av资源在线播放| 91麻豆视频在线观看| 欧美日韩一区二区免费在线观看 | 国产精品麻豆入口| 久久精品国产色蜜蜜麻豆| 久操网在线观看| 999国产精品999久久久久久| 国内成+人亚洲| 国产精品日本一区二区三区在线| 清纯唯美亚洲激情| 不卡av免费观看| www欧美日韩| 国产专区在线| 亚洲福利在线视频| 国产精品无码天天爽视频| 欧美午夜片在线免费观看| 91日韩中文字幕| 国产日韩欧美激情| 污污内射在线观看一区二区少妇| 狠狠网亚洲精品| 妓院一钑片免看黄大片| 一本久道综合久久精品| 亚洲成人动漫在线| 欧美理论电影大全| 久久久久网址| 欧美jizz19性欧美| 97视频中文字幕| 综合久草视频| 国产日韩欧美日韩大片| 精品视频一区二区三区四区五区| 97视频在线观看成人| 国产乱妇乱子在线播视频播放网站| 色噜噜狠狠狠综合曰曰曰| 免费福利在线视频| 日韩电影中文字幕av| 亚洲国产视频一区二区三区| 制服.丝袜.亚洲.中文.综合| 亚洲一级特黄毛片| 欧美写真视频网站| 国产精品51麻豆cm传媒 | 999精品网站| 国产精品毛片一区二区三区| 精品少妇人妻av免费久久洗澡| 欧美黄色大片网站| 成人在线观看www| 亚洲国产精品久久久天堂| 中日韩在线视频| 欧美国产一级| 影音先锋男人的网站| 外国成人免费视频| 黄色一级片网址| 中文字幕一区二区av | 午夜一级久久| 亚洲精品无码久久久久久| 国产日韩欧美在线播放不卡| 久久久久久久久久久福利| 久久高清国产| 日韩欧美黄色大片| 日本在线不卡视频| 午夜精品久久久久久久99热影院| 精品一区二区三区久久久| 在线一区二区不卡| 国产乱码精品一区二区三| 人妻巨大乳一二三区| 成人性色生活片| 一区二区免费在线观看视频| 久久久久久一二三区| 懂色av蜜桃av| 亚洲免费在线观看视频| 久久免费视频6| 欧美性xxxxxxxxx| 中日韩av在线| 欧美一区二区美女| 欧美一区二区在线观看视频| 日韩精品中文字| 大片免费播放在线视频| 久久精品视频在线观看| 青青草视频在线免费直播| 97久久国产精品| free欧美| 亚洲aⅴ男人的天堂在线观看| 风间由美一区二区av101| 欧美精品v日韩精品v国产精品| 欧美精品乱码| 国产精品va在线观看无码| 午夜在线视频一区二区区别| 国内外成人免费在线视频| 国产成人鲁色资源国产91色综| 国产成人精品无码片区在线| 国产精品日产欧美久久久久| 欧美三级 欧美一级| 色婷婷综合五月| 国产白浆在线观看| 亚洲精品视频在线播放| 黄色一级大片在线免费看产| 77777少妇光屁股久久一区| 99精品女人在线观看免费视频| 国产欧美日韩伦理| 欧美激情电影| 黄色动漫在线免费看| 国产综合一区二区| 天堂久久精品忘忧草| 亚洲老司机在线| 中文字幕免费高清网站| 欧美va亚洲va国产综合| 成人精品一区二区三区免费| 国模叶桐国产精品一区| 国产精品成人3p一区二区三区| 欧美一区二区视频在线| 欧美日一区二区三区在线观看国产免| 久久久久久久久久福利| 成人免费黄色大片| 国产探花在线视频| 在线区一区二视频| 人妻va精品va欧美va| 久久精品一区中文字幕| 亚洲成av在线| 精品视频一区在线| 亚洲视频电影在线| 日本免费观看网站| 99re这里只有精品首页| 91精品国产高清一区二区三蜜臀| 欧美影院一区二区三区| 天天射,天天干| 欧美交受高潮1| 久久一级大片| 一区二区三区四区五区精品| 久久婷婷一区| 日韩av在线看免费观看| 婷婷综合在线观看| 亚洲国产精品无码久久| 精品中文字幕在线观看| 日韩亚洲国产免费| 亚洲资源在线网| 日韩精品1区2区3区| 欧美多人猛交狂配| 欧美日韩一二三四五区| 偷拍自拍在线| 欧美中文字幕视频| 欧洲精品一区| 1024av视频| 91美女片黄在线观看91美女| 国产精品黄色网| 精品视频中文字幕| 欧美日韩国产观看视频| 精品欧美国产一区二区三区不卡| 亚洲茄子视频| 日本免费福利视频| 欧美视频在线观看免费| 欧美日韩影视| 国产精品成人av在线| 精品久久久久久久久久久aⅴ| 欧美亚洲日本在线观看| 国产欧美日韩另类一区| 免费黄色一级大片| 日韩网站免费观看高清| 国产精品xnxxcom| 黄色激情在线视频| 99在线热播精品免费| 中文字幕一区二区人妻电影| 亚洲欧美一区二区激情| 日韩一区二区三区在线免费观看 | 欧美视频你懂的| 欧美日韩欧美| 999国产在线| 日韩视频免费| 久久久久久久久久久久| 欧美精品日韩一区| 黑人精品视频| 秋霞久久久久久一区二区| 久久99精品国产麻豆不卡| 玖玖爱这里只有精品| 亚洲国产黄色片| 免费成人动漫| 欧美性视频在线播放| 不卡大黄网站免费看| 久久久精品视频网站| www.亚洲人.com| 第四色中文综合网| 成人精品视频一区二区| 亚洲伦理在线精品| 网站黄在线观看| 国产精品免费视频久久久| 欧美激情91| 国产伦理片在线观看| 欧美一二三四区在线| 自由日本语热亚洲人| 日本黄色播放器| 91在线国产观看| 国产精品高潮呻吟av| 国内自拍欧美激情| 日韩一区三区| 又黄又爽的网站| 欧美高清视频在线高清观看mv色露露十八| 手机av免费在线| 日韩精品欧美一区二区三区| 国产精品白丝jk黑袜喷水| 五月天婷婷导航| 欧美大片第1页| 日韩在线中文| www.免费av| 91精品国产综合久久精品麻豆| 欧美久久天堂| 欧美交换配乱吟粗大25p| 国产三级欧美三级| 黄色片一区二区| 成人天堂噜噜噜| 日日夜夜免费精品|