整合營銷服務(wù)商

          電腦端+手機(jī)端+微信端=數(shù)據(jù)同步管理

          免費(fèi)咨詢熱線:

          關(guān)于 CSS margin,一些讓你模糊的點(diǎn)

          關(guān)于 CSS margin,一些讓你模糊的點(diǎn)

          文:https://www.smashingmagazine.com/2019/07/margins-in-css/

          譯者:前端小智

          為了保證的可讀性,本文采用意譯而非直譯。

          為了回饋?zhàn)x者,《大遷世界》不定期舉行(每個(gè)月一到三次),現(xiàn)金抽獎(jiǎng)活動(dòng),保底200,外加用戶贊賞,希望你能成為大遷世界的小錦鯉,快來試試吧

          當(dāng)我們學(xué)習(xí)CSS時(shí),我們大多數(shù)人學(xué)到的第一件事是CSS中盒子的各個(gè)部分的細(xì)節(jié),這部分通過叫做 CSS盒、模型。“盒模型”中的元素之一是margin,即盒子周圍的透明區(qū)域,它會(huì)將其他元素從盒子內(nèi)容中推開。

          CSS1中描述了 margin-top、margin-right、margin-bottom和margin-left屬性,以及一次設(shè)置所有四個(gè)屬性的簡寫 margin。

          margin看起來是一個(gè)相當(dāng)簡單的事情,但是,在本文中,咱們將看一些在使用margin一些讓人迷惑有有趣的事情。 特別是,margin之間如何相互作用,以及 margin 重疊效果。

          想閱讀更多優(yōu)質(zhì)文章請猛戳GitHub博客,一年百來篇優(yōu)質(zhì)文章等著你!

          CSS 盒模型

          CSS 盒模型指的是一個(gè)盒子的各個(gè)部分——content、padding、border和margin,它們各自之前是如何布局及相互作用的, 如下所示:

          盒子的的四個(gè)margin屬性和maring縮寫都在CSS1中定義。

          CSS2.1規(guī)范有一個(gè)演示盒模型的插圖,還定義了用來描述各種盒子的術(shù)語,其中包括 content box、填padding box、border box和 margin box。

          現(xiàn)在有一個(gè) Level 3 Box Model specification 的草案。這個(gè)規(guī)范引用了CSS2作為盒模型和margin的定義,因此我們將在本文的大部分內(nèi)容中使用CSS2定義。

          margin 重疊

          CSS1 規(guī)范定義了margin,也定義了垂直 margin 重疊。如果考慮到在早期,CSS被用作文檔格式語言,那么 margin 重疊是有意義的。 margin 重疊意味著,當(dāng)一個(gè)有底部margin的標(biāo)題后面跟著一個(gè)有頂部 margin 的段落時(shí),它們之間就不會(huì)出現(xiàn)較大的空白。

          當(dāng)兩個(gè) margin 發(fā)生重疊時(shí),它們將組合在一起,兩個(gè)元素之間的空間取較大的一個(gè)。 較小的 margin 在較大的里面。

          在以下情況下,margin 會(huì)重疊:

          • 相鄰的兄弟姐妹
          • 完全空盒子
          • 父元素和第一個(gè)或最后一個(gè)子元素

          依次來看看這些場景。

          相鄰的兄弟姐妹

          對 margin 重疊的最初描述是演示相鄰兄弟姐妹之間的 margin 是如何重疊的。除了下面提到的情況之外,如果有兩個(gè)元素在正常流中依次顯示,那么第一個(gè)元素的底部 margin 將與下面元素的頂部 margin 一起重疊。

          在下面示例中,有三個(gè)div元素。第一個(gè) div 的頂部和底部的margin都是50px。第二個(gè) div 的頂部和底部 margin 都是20px。第三個(gè) div 的頂部和底部 margin 都是3em。前兩個(gè)元素之間的 margin 是50px,因?yàn)檩^小的頂部 margin 與較大的底部 margin 相結(jié)合。第二個(gè)元素與第三個(gè)元素之間的 margin 是 3em,因?yàn)?em大于第二個(gè)元素底部margin 20px。

          html

          <div class="wrapper">
          <div class="box example1">
           margin-top: 50px; margin-bottom: 50px;
          </div>
          <div class="box example2">
           margin-top: 20px; margin-bottom: 20px;
          </div>
          <div class="box example3">
           margin-top: 3em; margin-bottom: 3em;
          </div>
          </div>
          

          css

          .wrapper {
           border: 5px dotted black;
          }
          .example1 {
           margin: 50px 0 50px 0;
          }
          .example2 {
           margin: 20px 0 20px 0;
          }
          .example3 {
           margin: 3em 0 3em 0;
          }
          body {
           font: 1.4em/1.3 "Gill Sans", "Gill Sans MT", Calibri, sans-serif;
           margin: 2em 3em;
          }
          .box {
           background-color: rgb(55,55,110);
           color: white;
           padding: 20px;
           border-radius: .5em;
          }
          

          運(yùn)行效果:

          完全空盒子

          如果一個(gè)盒子是空的,那么它的頂部和底部 margin 可能會(huì)相互重疊。在下面的示例中,class為empty的元素的頂部和底部 margin 各為50px,但是,第一項(xiàng)和第三項(xiàng)之間的 margin不是100px,而是50px。這是由于兩個(gè) margin 重疊造成的。如果向空盒子中放入內(nèi)容就會(huì)阻止 margin 合并。

          html

          div class="wrapper">
          <div class="box">
           A box
          </div>
          <div class="box empty"></div>
          <div class="box">
           Another box
          </div>
          </div>
          

          css

          .wrapper {
           border: 5px dotted black;
          }
          body {
           font: 1.4em/1.3 "Gill Sans", "Gill Sans MT", Calibri, sans-serif;
           margin: 2em 3em;
          }
          .box {
           background-color: rgb(55,55,110);
           color: white;
           border-radius: .5em;
          }
          .empty {
           margin: 50px 0 50px 0;
          }
          

          運(yùn)行效果:

          父元素和第一個(gè)或最后一個(gè)子元素

          margin 重疊讓人猝不及防,因?yàn)樗袝r(shí)候不是很直觀。在下面的示例中,有一個(gè)類名為 wrapper 的div,給這個(gè)div一個(gè)紅色的outline,這樣就可以看到它在哪里了。

          這個(gè)div里面的三個(gè)子元素的 margin 都是50px。但是你會(huì)發(fā)現(xiàn)實(shí)際的效果是第一項(xiàng)和最后一項(xiàng)與父元素的的margin齊平,好像子元素和父元素之間沒有50px的margin一樣。

          html

          <div class="wrapper">
          <div class="box">
           Item 1
          </div>
          <div class="box">
           Item 2
          </div>
          <div class="box">
           Item 3
          </div>
          </div>
          

          css

          .wrapper {
           outline: 1px solid red;
          }
          .box {
           margin: 50px;
          }
          body {
           font: 1.4em/1.3 "Gill Sans", "Gill Sans MT", Calibri, sans-serif;
           margin: 2em 3em;
          }
          .box {
           background-color: rgb(55,55,110);
           color: white;
           padding: 20px;
           border-radius: .5em;
          }
          

          運(yùn)行效果:

          這是因?yàn)樽庸?jié)點(diǎn)上的margin會(huì)隨著父節(jié)點(diǎn)上的任何一邊的margin相互重疊,從而最終位于父節(jié)點(diǎn)的外部。如果使用DevTools檢查第一個(gè)子元素,就可以看到這一點(diǎn),顯示的黃色區(qū)域就是是 margin。

          僅塊元素 margin 重疊

          在CSS2中,只指定垂直方向的 margin 重疊,即元素的頂部和底部 margin。因此,上面的左右邊距不會(huì)重疊。

          值得注意的,margin 只在塊的方向上重疊,比如段落之間。

          阻止 margin 重疊

          如果一個(gè)元素是絕對的定位,或者是浮動(dòng)的,那么它的margin永遠(yuǎn)不會(huì)重疊。然而,假設(shè)你遇到了上面示例中的幾種情況,那么如何才能阻止 margin 重疊呢?

          例如,一個(gè)完全空的盒子,如果它有border或padding,它的上下 margin就不會(huì)重疊。在下面的例子中,給這個(gè)空盒子添加了1px的padding。現(xiàn)在這個(gè)空盒子的的上方和下方都有一個(gè)50px的 margin。

          html

          <div class="wrapper">
          <div class="box">
           A box
          </div>
          <div class="box empty"></div>
          <div class="box">
           Another box
          </div>
          </div>
          

          css

          .wrapper {
           border: 5px dotted black;
          }
          body {
           font: 1.4em/1.3 "Gill Sans", "Gill Sans MT", Calibri, sans-serif;
           margin: 2em 3em;
          }
          .box {
           background-color: rgb(55,55,110);
           color: white;
           border-radius: .5em;
          }
          .empty {
           margin: 50px 0 50px 0;
           padding: 1px;
          }
          

          運(yùn)行效果:

          這背后是有邏輯,如果盒子是完全空的,沒有border或padding,它基本上是不可見的。 它可能是CMS中標(biāo)記為空的段落元素。 如果你的CMS添加了多余的段落元素,你可能不希望它們在其他段落之間造成較大的空白,這時(shí) margin 重疊就有一定的意義。

          對于父元素和第一個(gè)或最后一個(gè)子元素 margin 重疊,如果我們向父級添加border,則子級上的margin會(huì)保留在內(nèi)部。

          ...
          .wrapper {
           border: 5px dotted black;
          }
          ...
          

          同樣,這種行為也有一定的邏輯。如果出于語義目的而對元素進(jìn)行包裝,但這些元素不顯示在屏幕上,那么你可能不希望它們在顯示中引入大的 margin。當(dāng)web主要是文本時(shí),這很有意義。當(dāng)我們使用元素來布局設(shè)計(jì)時(shí),它的重疊行為就沒有多大的意義了。

          創(chuàng)建格式化上下文(BFC)

          BFC(Block Formatting Context)格式化上下文,是Web頁面中盒模型布局的CSS渲染模式,指一個(gè)獨(dú)立的渲染區(qū)域或者說是一個(gè)隔離的獨(dú)立容器。

          BFC 可以阻止邊距的重疊。 如果我們再看父元素和第一個(gè)或最后一個(gè)子元素的示例,可以在 wrapper 元素加上 display: flow-root就會(huì)創(chuàng)建一個(gè)新的BFC,從而阻止 margin 合并

          ...
          .wrapper {
           outline: 1px solid red;
           display: flow-root;
          }
          ...
          

          display: flow-root 是CSS3新出來的一個(gè)屬性,用來創(chuàng)建一個(gè)無副作用的 BFC。將overflow屬性的值設(shè)為auto也會(huì)產(chǎn)生同樣的效果,因?yàn)檫@也創(chuàng)建了一個(gè)新的BFC,盡管它也可能創(chuàng)建一些在某些場景中不需要的滾動(dòng)條。

          flex 和 grid 容器

          flex 和 grid 容器為其子元素建立flex和grid格式化上下文,因此它們也能阻止 margin 的重疊。

          還是以上面的例子為例,將 wrapper 改用 flex 布局:

          ...
          .wrapper {
           outline: 1px solid red;
           display: flex;
           flex-direction: column;
          }
          ...
          

          網(wǎng)站 margin 策略

          由于margin 會(huì)重疊,最好能找到一種一致的方法來處理網(wǎng)站的 margin。最簡單的方法是只在元素的頂部或底部定義 margin。這樣,就很少會(huì)遇到 margin 重疊的問題,因?yàn)橛衜argin的邊總是與沒有margin的邊相鄰。

          這個(gè)解決方案并不能解決你可能遇到的問題,因?yàn)樽釉氐膍argin會(huì)與父元素相互重疊。這個(gè)特定的問題往往不那么常見,但知道它為什么會(huì)發(fā)生可以幫助你想出一個(gè)解決方案。

          對此,一個(gè)理想的解決方案是給元素設(shè)置 display: flow-root,但有的瀏覽器并不支持,可以使用overflow創(chuàng)建BFC、或?qū)⒏冈卦O(shè)置成flex容器,當(dāng)然還可以設(shè)置padding來解決。

          百分比 margin

          當(dāng)你在CSS中使用百分比的時(shí)候,它必須是某個(gè)元素的百分比。使用百分比設(shè)置的 margin(或 padding)始終是父元素內(nèi)聯(lián)大小(水平寫入模式下的寬度)的百分比。這意味著在使用百分比時(shí),元素周圍的padding大小都是相同的。

          在下面的示例中,有一個(gè)200px 寬的 d當(dāng),里面是一個(gè)類名為 box 的div,它的 margin值為10%,也就是 20px (200*10%)。

          html

           <div class="wrapper">
           <div class="box">
           I have a margin of 10%.
           </div>
          </div>
          

          css

           * {
           box-sizing: border-box;
          }
          .wrapper {
           border: 5px dotted black;
           width: 200px;
          }
          .box {
           background-color: rgb(55,55,110);
           color: white;
           padding: 20px;
           border-radius: .5em;
           margin: 10%;
          }
          body {
           font: 1.4em/1.3 "Gill Sans", "Gill Sans MT", Calibri, sans-serif;
           margin: 2em 3em;
          }
          

          我們在本文中一直在討論垂直 margin ,然而,現(xiàn)代CSS傾向于以相對于流的方式而不是物理方式來考慮事情。因此,當(dāng)我們討論垂直邊距時(shí),我們實(shí)際上是在討論塊維度的邊距。如果我們在水平寫作模式下,這些 margin 將是頂部和底部,但在垂直寫作模式下,這些 margin 將是右側(cè)和左側(cè)。

          一旦使用邏輯的、流相關(guān)的方向,就更容易討論塊的開始和結(jié)束,而不是塊的頂部和底部。為了簡化這一過程,CSS引入了邏輯屬性和值規(guī)范。這將流的相關(guān)屬性映射到物理屬性上。

          • margin-top=margin-block-start
          • margin-right=margin-inline-end
          • margin-bottom=margin-block-end
          • margin-left=margin-inline-start

          還有兩個(gè)新的快捷鍵,可以同時(shí)設(shè)置兩個(gè)塊或者兩個(gè)內(nèi)嵌塊。

          • margin-block
          • margin-inline

          在下面示例中,使用了這些流相關(guān)關(guān)鍵字,然后更改了盒子的編寫模式,你可以看到 margin 是如何遵循文本方向的:

          html

          <div class="wrapper horizontal-tb">
           <div class="box">
           A box with a horizontal-tb writing mode.
           </div>
          </div>
          <div class="wrapper vertical-rl">
           <div class="box">
           A box with a vertical-rl writing mode.
           </div>
          </div>
          

          css

          * {
           box-sizing: border-box;
          }
          .wrapper {
           border: 5px dotted black;
           inline-size: 200px;
          }
          .horizontal-tb {
           writing-mode: horizontal-tb;
           margin-bottom: 1em;
          }
          .vertical-rl {
           writing-mode: vertical-rl;
          }
          .box {
           background-color: rgb(55,55,110);
           color: white;
           padding: 20px;
           border-radius: .5em;
           margin-block-start: 30px;
           margin-block-end: 10px;
           margin-inline-start: 2em;
           margin-inline-end: 5%;
          }
          body {
           font: 1.4em/1.3 "Gill Sans", "Gill Sans MT", Calibri, sans-serif;
           margin: 2em 3em;
          }
          

          需要了解更多,可以閱讀有關(guān)MDN上的邏輯屬性和值的更多信息。

          代碼部署后可能存在的BUG沒法實(shí)時(shí)知道,事后為了解決這些BUG,花了大量的時(shí)間進(jìn)行l(wèi)og 調(diào)試,這邊順便給大家推薦一個(gè)好用的BUG監(jiān)控工具 Fundebug。

          交流

          干貨系列文章匯總?cè)缦拢X得不錯(cuò)點(diǎn)個(gè)Star,歡迎 加群 互相學(xué)習(xí)。

          https://github.com/qq449245884/xiaozhi

          我是小智,公眾號「大遷世界」作者,對前端技術(shù)保持學(xué)習(xí)愛好者。我會(huì)經(jīng)常分享自己所學(xué)所看的干貨,在進(jìn)階的路上,共勉!

          關(guān)注公眾號,后臺回復(fù)福利,即可看到福利,你懂的。

          山河依舊,網(wǎng)站、App 從此再無灰色、黑色情況!!!

          前言

          夢中清醒,哦,又是一個(gè)陽光明媚的早上。

          致敬英雄,市面上 App、網(wǎng)站等都已置灰。

          緬懷的同時(shí),突然冒出一個(gè)問題,怎么做到的?難不成一個(gè)個(gè)調(diào)整圖片,調(diào)整對應(yīng)的控件色值?

          顯然不應(yīng)該。想來想去還不如直接調(diào)試一番,找找感覺。

          探尋日記 - 翻翻別人家

          Chrome 打開 B 站,直接打開開發(fā)者模式,html 根節(jié)點(diǎn)有個(gè) class=“gray”,好奇點(diǎn)點(diǎn)看看有什么反映:

          一個(gè) class 搞定嗎?抱著懷疑的心態(tài)找了掘金:

          共同點(diǎn),都是使用了 filter:grayscale。

          探尋日記 - 官網(wǎng)看看真是個(gè)啥

          filter CSS屬性將模糊或顏色偏移等圖形效果應(yīng)用于元素。濾鏡通常用于調(diào)整圖像,背景和邊框的渲染。

          官方給出一個(gè)小例子:

          找到對應(yīng)將圖像轉(zhuǎn)為灰色圖像屬性:

          探尋日記 - 實(shí)踐

          俗話說得好,好記性不如爛筆頭,自己親自動(dòng)手才是最實(shí)際的。

          效果很明顯,如果想讓整個(gè)頁面圖片灰度發(fā)生變化,只需要按照前輩們的方案,直接在 html 設(shè)置 class 即可,方案采用掘金:

          附上對應(yīng) CSS 樣式:

          .mourning {
          	-webkit-filter: grayscale(100%);  /* 兼容 Chrome、Safari 瀏覽器 */
          	-moz-filter: grayscale(100%); /* 兼容 FireFox 火狐瀏覽器 */
          	-ms-filter: grayscale(100%); /* 兼容 IE 瀏覽器 */
          	-o-filter: grayscale(100%); /* 兼容 Opera 瀏覽器 */
          	filter: grayscale(100%);
          	filter: #808080;
          }

          篇后語

          哪有什么歲月靜好,不過是有人替你負(fù)重前行。

          心懷感恩。

          最后,再次希望所有的網(wǎng)站再也不要有變成灰色、黑色的情況!!!

          永遠(yuǎn)也不要有了!!!

          參考資料

          • Web 開發(fā)技術(shù) > CSS(層疊樣式表) > filter


          /
          Google研究院軟件工程師,Tingbo Hou & Tyler Mullen

          譯者 / Alpha

          技術(shù)審校:斗魚前端專家,王興偉

          原文 /https://ai.googleblog.com/2020/10/background-features-in-google-meet.html


          在人們的工作和生活中,視頻會(huì)議變得越來越重要。我們可以通過增強(qiáng)隱私保護(hù),或者添加有趣的視覺效果來改善視頻體驗(yàn),同時(shí)幫助人們將注意力集中在會(huì)議內(nèi)容上。我們最近宣布的在Google Meet中模糊和替換背景的方法,就是為了實(shí)現(xiàn)這一目標(biāo)而邁出的一小步。

          我們利用機(jī)器學(xué)習(xí)(ML)來更好地突出參與者,從而忽略他們周圍的背景環(huán)境。盡管其他的解決方案需要安裝額外的軟件,但Meet的功能是由尖端的Web ML技術(shù)提供支持的,這些技術(shù)是用MediaPipe構(gòu)建的,可以直接在你的瀏覽器中工作——不需要額外的步驟。

          開發(fā)這些功能,有一個(gè)關(guān)鍵目標(biāo),即它可以給幾乎所有現(xiàn)代設(shè)備提供實(shí)時(shí)的瀏覽器內(nèi)性能,通過XNNPACK和TFLite,我們將高效的設(shè)備上ML模型、基于WebGL的效果渲染,還有基于Web的ML推理結(jié)合起來,進(jìn)而實(shí)現(xiàn)了這一目標(biāo)。

          背景模糊和背景替換,由網(wǎng)頁端的 MediaPipe 提供支持。



          網(wǎng)絡(luò)Web ML方案概述

          Meet中的新功能是與MediaPipe一起開發(fā)的,MediaPipe是谷歌的開源框架,用于為直播和流媒體提供跨平臺的,可定制的ML解決方案,它還支持設(shè)備上實(shí)時(shí)性的手、虹膜和身體姿勢追蹤等ML解決方案。

          任何設(shè)備上解決方案的核心需求,都是實(shí)現(xiàn)高性能。為了實(shí)現(xiàn)這一點(diǎn),MediaPipe的Web工作流利用了WebAssembly,這是一種專為網(wǎng)絡(luò)瀏覽器設(shè)計(jì)的底層二進(jìn)制代碼格式,可以提高計(jì)算繁重任務(wù)的速度。在運(yùn)行時(shí),瀏覽器將WebAssembly指令轉(zhuǎn)換為本機(jī)代碼,執(zhí)行速度比傳統(tǒng)JavaScript代碼快很多。此外,Chrome84最近引入了對WebAssembly SIMD的支持,每條指令可以處理多個(gè)數(shù)據(jù)點(diǎn),性能提升了2倍以上。

          首先,我們的解決方案通過將用戶,和他們的背景進(jìn)行分割(稍后將詳細(xì)介紹我們的分割模型),來處理每個(gè)視頻幀,使用ML推理來計(jì)算出一個(gè)低分辨率的蒙版。或者,我們還可以進(jìn)一步細(xì)化蒙版,以使其與圖像邊界對齊。然后通過WebGL2使用蒙版來渲染視頻,實(shí)現(xiàn)背景的模糊或替換。

          WebML Pipeline:所有計(jì)算繁重的操作都是用C++/OpenGL實(shí)現(xiàn)的,并通過WebAssembly在瀏覽器中運(yùn)行。


          在當(dāng)前版本中,模型推理在客戶端的CPU上執(zhí)行,以實(shí)現(xiàn)低功耗和最大的設(shè)備覆蓋范圍。為了達(dá)到實(shí)時(shí)性能,我們設(shè)計(jì)了高效的ML模型,通過XNNPACK庫加速推理,XNNPACK庫是第一個(gè)專門為新的WebAssembly SIMD規(guī)范設(shè)計(jì)的推理引擎。在XNNPACK和SIMD的加速下,該分割模型可以在Web上以實(shí)時(shí)速度運(yùn)行。

          在MediaPipe靈活配置的支持下,背景模糊/替換解決方案可根據(jù)設(shè)備能力,調(diào)整其處理過程。在高端設(shè)備上,它運(yùn)行完整的工作流,以提供最佳的視覺質(zhì)量,而在低端設(shè)備上,通過使用輕量級的ML模型進(jìn)行計(jì)算,并且繞過蒙版細(xì)化,它仍然可以保持較高的性能。



          分割模型細(xì)分

          設(shè)備上的機(jī)器學(xué)習(xí)模型必須是超輕量級的,以實(shí)現(xiàn)快速推理、低功耗和較小的下載大小。對于在瀏覽器中運(yùn)行的模型,輸入分辨率會(huì)極大地影響處理的每一幀所需的浮點(diǎn)運(yùn)算(FLOP)的數(shù)量,由此也必須很小。我們將圖像下采樣,得到較小的尺寸,然后再將其提供給模型。從低分辨率圖像中,盡可能精確地恢復(fù)分割蒙版,這增加了模型設(shè)計(jì)的挑戰(zhàn)。

          整個(gè)分割網(wǎng)絡(luò)具有關(guān)于編碼和解碼的對稱結(jié)構(gòu),而解碼器塊(淺綠色),也與編碼塊(淺藍(lán)色)共享對稱層結(jié)構(gòu)。具體地說,在編碼器和解碼器模塊中,都采用了應(yīng)用有全局池化層技術(shù)的通道注意力機(jī)制,這有利于高效的CPU推理。


          采用MobileNetV3編碼器(淺藍(lán)色)和對稱解碼器(淺綠色)的模型架構(gòu)。


          我們修改MobileNetV3-Small為編碼器,經(jīng)過網(wǎng)絡(luò)結(jié)構(gòu)搜索的優(yōu)化,以最低的資源需求,獲得最佳的性能。為了減少50%的模型尺寸,我們使用Float16量化技術(shù)將模型導(dǎo)出到TFLite,僅權(quán)重精度略有下降,但對質(zhì)量沒有明顯的影響。得到的模型有193K參數(shù),大小只有400KB。


          效果渲染

          分割完成后,我們使用OpenGL著色器進(jìn)行視頻處理和效果渲染,其中的挑戰(zhàn)就是在不引入偽影的情況下進(jìn)行高效渲染。在細(xì)化階段,我們采用聯(lián)合雙邊濾波器對低分辨率蒙版進(jìn)行平滑處理


          渲染效果時(shí)會(huì)減少瑕疵減少的渲染效果。左:聯(lián)合雙邊過濾器平滑分段分割蒙版。中:可分離濾鏡移除背景模糊中的光暈瑕疵。右:替換背景中的燈光包裹包裝(light wrapping)。


          模糊著色器通過與分割蒙版值成比例的方式,調(diào)整每個(gè)像素的模糊強(qiáng)度,來模擬波克(bokeh)效果,類似于光學(xué)中的混淆圓(CoC)。像素按其CoC半徑加權(quán),因此前景像素不會(huì)滲入背景。我們?yōu)榧訖?quán)模糊實(shí)現(xiàn)了可分離的過濾器,而不是流行的高斯金字塔,因?yàn)樗コ巳酥車墓鈺瀭斡啊榱颂岣咝剩:缘头直媛蕡?zhí)行,并以原始分辨率與輸入幀混合

          背景模糊示例


          對于背景替換,我們采用了一種稱為燈光包裹(Light wrapping)的合成技術(shù),用于混合分割的人物和定制的背景圖像。光線包裹允許背景光溢出到前景元素上,從而使合成更具沉浸感,這有助于柔化分割邊緣。當(dāng)前景和替換的背景之間,存在較大的對比度時(shí),它還有助于最大限度地減少光暈偽影

          背景替換示例



          性能

          為了優(yōu)化不同設(shè)備的體驗(yàn),我們提供多種輸入尺寸(即當(dāng)前版本中的256x144和160x96)的模型變體,根據(jù)可用的硬件資源自動(dòng)選擇最佳模型。

          我們在兩款常見設(shè)備上評估了模型推理和端到端傳遞的速度:搭載2.2 GHz 6核英特爾酷睿i7的MacBook Pro 2018和搭載英特爾賽揚(yáng)N3060的宏碁Chromebook 11。對于720p的輸入,MacBook Pro可以以120 FPS的速度,運(yùn)行較高質(zhì)量的模型,以70 FPS的速度運(yùn)行端到端的傳遞途徑;而Chromebook則以62 FPS的速度運(yùn)行推理,使用較低質(zhì)量的模型,端到端運(yùn)行在33 FPS。

          高端(MacBook Pro)和低端(Chromebook)筆記本電腦上的模型型號推斷速度和端到端管線傳遞。


          為了定量評估模型的精度,我們采用了目前流行的交集-并集(IOU)和邊界F-度量。這兩種型號都有不俗的表現(xiàn),而且還是在這樣一個(gè)輕量級網(wǎng)絡(luò)的情況下

          模型準(zhǔn)確性的評估,通過 IOU 借條和邊界 F-分?jǐn)?shù)來衡量。


          我們還為我們的分割模型發(fā)布了隨附的模型卡,其中詳細(xì)介紹了我們的公平性評估。我們的評估數(shù)據(jù)包含來自全球17個(gè)地理分區(qū)的圖像,并附有膚色和性別的注釋。我們的分析表明,該模型在不同地區(qū)、膚色和性別上的表現(xiàn)是一致的,只有很小的IOU指標(biāo)偏差。



          結(jié)論

          我們推出了一個(gè)全新的瀏覽器端的機(jī)器學(xué)習(xí)解決方案,用于模糊和替換你在Google Meet中的背景。使用這個(gè)方案,機(jī)器學(xué)習(xí)模型和OpenGL著色器就可以在Web上高效運(yùn)行。所開發(fā)的功能即使在低功耗設(shè)備上也能以低功耗實(shí)現(xiàn)實(shí)時(shí)性能


          致謝:特別感謝Meet團(tuán)隊(duì)的成員和參與此項(xiàng)目的其他人員,特別是Sebastian Jansson,Rikard Lundmark,Stephan Reiter,F(xiàn)abian Bergmark,Ben Wagner,Stefan Holmer,Dan Gunnarson,Stéphane Hulaud以及所有與我們一起從事技術(shù)工作的團(tuán)隊(duì)成員:Siargey Pisarchyk,Karthik Raveendran,Chris McClanahan, Marat Dukhan,F(xiàn)rank Barchard,Ming Guang Yong,Chuo-Ling Chang,Michael Hays,Camillo Lugaresi,Gregory Karpiak,Siarhei Kazakou,Matsvei Zhdanovich,Matthias Grundmann。


          主站蜘蛛池模板: 国产一区二区三区91| 国产日韩一区二区三区在线播放| 波多野结衣中文字幕一区| 中文字幕一区二区三匹| 亚州日本乱码一区二区三区| 国产一区二区三区91| 精品一区二区三区四区在线| 亚洲日本中文字幕一区二区三区 | 亚洲人成网站18禁止一区| 能在线观看的一区二区三区| 无码精品人妻一区二区三区影院 | 无码精品人妻一区二区三区人妻斩| 精品久久国产一区二区三区香蕉| 一区二区三区波多野结衣| 国产精品视频一区二区三区不卡| 韩日午夜在线资源一区二区| 日本一区午夜艳熟免费| 亚洲国产精品一区二区久久hs| 秋霞无码一区二区| 国产午夜精品片一区二区三区| 色窝窝免费一区二区三区| 精品一区二区三区在线观看l| 精品日韩一区二区三区视频 | 亚洲AV无码一区二区三区国产| 亚州国产AV一区二区三区伊在| 久久久久国产一区二区| 久久国产精品最新一区| 大香伊人久久精品一区二区| 波多野结衣在线观看一区| 中文字幕日韩人妻不卡一区| 久久无码人妻一区二区三区午夜| 2021国产精品视频一区| 日本精品一区二区三区在线视频一| 国产午夜精品一区二区| 中文字幕一区视频| 国产精品一区二区在线观看| 日本一区二区三区高清| 日韩中文字幕一区| 亚洲国产专区一区| 亚洲视频在线一区二区三区| 又紧又大又爽精品一区二区|