摘要:將圖片的處理方法放到視頻中的每一幀,再加上彈幕飛過的效果,就完成了版的智能防擋彈幕。不知道站的實現方法是怎樣,是否有人工干預,是否有預計算。
某天代碼寫得老眼昏花,去B站上摸魚,突然發現奇怪的現象:
喲呵,B站竟然做了 視頻前景提取 ,把彈幕藏到畫面人物的后面。識別效果還意外地不錯呢。
然后又翻了下,發現這是個叫做“ 智能防擋彈幕 ”的功能,我只在部分舞蹈區的視頻里找到了開關。
我不知道B站是怎么實現的,但我腦中閃過一個想法:能不能用 Python 實現?簡單搜索了一下“ python 前景提取 ”,發現 OpenCV 的 GrabCut 提供了這樣的功能。
那么剩下的就好辦了。
先放最終實現效果(完整代碼見文末):
之前我們的“ 每周一坑 ”里有講過怎么在圖片上加文字:【解答】用代碼給圖片配上文字。用這個方法,可以模擬彈幕的效果:
再用 GrabCut,提取出圖片上的前景部分。核心代碼:
import numpy as npimport cv2 mask = np.zeros(img.shape[:2],np.uint8) bgdModel = np.zeros((1,65),np.float64) fgdModel = np.zeros((1,65),np.float64) rect = (10, 10, img.shape[1]-10, img.shape[0]-10) cv2.grabCut(img,mask,rect,bgdModel,fgdModel,5,cv2.GC_INIT_WITH_RECT)
img 是輸入圖像,mask 是輸出圖像,是一個二值化的蒙版(mask),rect 是待檢測區域,后面的數字 5 是迭代次數,其他的參數照搬例子即可。輸出結果:
有了蒙版之后,就可以對圖像進行運算。分別取出 帶彈幕圖像的背景部分 ,和 原圖像的前景部分 ,兩個加一起,就是我們最終需要的效果:
核心代碼:
img = img * (1-mask)[:,:,np.newaxis] + img * mask[:,:,np.newaxis]
基本功能這樣就完成了。將圖片的處理方法放到視頻中的每一幀,再加上彈幕飛過的效果,就完成了 Python 版的智能防擋彈幕。
更多的一些細節:
1、前景提取的速度比較慢,為了能達到實時效果,我在 提取前景時,將圖片縮小,獲取蒙版之后,再將其放大至原尺寸 。蒙版本身的分辨率幾乎不影響最終效果,但通過這個方法就可以做到實時。
2、每一幀的處理速度有快有慢,為了穩定幀率,我加入了每幀時間的計算, 如果時間不足設定時長,就 sleep 剩下的時間 。
3、一些過渡幀的識別效果會比較差,導致中間少數蒙版出現類似“跳幀”的效果。為了平滑這些幀,我在程序里記錄每一幀蒙版中前景像素的數量, 如果當前幀與之前 20 幀的平均值差距超過 50%,那就認為這一幀的前景提取不合格,直接使用之前的蒙版 。
4、為了模擬實際效果,我還去B站抓了下視頻相關的彈幕,它是在一個 xml 文件中:
https:// api.bilibili.com/x/v1/dm/list.so?oid=9931722
因為只有一個文件,我就直接通過 SublimeText 的正則替換功能 對數據進行了整理,沒額外再寫爬蟲和處理的代碼。這是個很實用的小技巧。
代碼中我只使用了 彈幕內容 和 時間 兩個值。當到達某條彈幕時間,就把它放入激活列表, 添加到圖像右側,隨機高度和顏色,然后每一幀將橫向位置向左移動 。直到圖像左側外部后,從激活列表中移除。
最終效果演示視頻:
https://www.zhihu.com/video/1066336643396620288
作為一個 demo,效果勉強可以接受吧。對這種沒有預設背景信息,完全靠圖像層面計算的話,準確率是不會太高的。所以只有這種背景單一、前景明顯的視頻效果還不錯。而且很明顯,白色衣服的效果就不太行。不知道B站的實現方法是怎樣,是否有人工干預,是否有預計算。我覺得有的可能性還是很大的,因為畢竟只有少量視頻開啟了“智能防擋”。如果有了解情況的,歡迎留言。
*
PS:說來我以前的論文,和這個也算是相關領域。
獲取“Python智能防擋彈幕”完整代碼,請在公眾號(Crossin的編程教室)里回復關鍵字 彈幕
════
其他文章及回答:
如何自學Python | 新手引導 | 精選Python問答 | Python單詞表 | 人工智能 | 爬蟲 | 我用Python | requests | 計算機視覺 | 字符播放器 | 一圖學Python
歡迎搜索及關注公眾號: Crossin的編程教室
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/45034.html
摘要:于是就有機智的程序員開發出了親戚關系計算器,可以通過指定關系的疊加,計算出互相之間的關系稱謂,有的還可以通過稱呼來倒推關系。這個版本的算法是網上相對最完善的,并且被自帶親戚計算器功能所采用。 春節到了,免不了要去七大姑八大姨家拜年,順便接受長輩們的關懷。有時偶然遇到許久沒見過的遠房親戚,叫不出合適的稱謂就尷尬了;或者即便被家人提示了叫法,但依然不知道和自己是什么關系。 于是就有機智的程...
摘要:某寶一年一度的集五福活動更是成為每年的必備活動。今年再來對福字做文章,演示下如何用的圖像處理功能,把一幅福字圖片轉出種不同的效果最圖像處理最常用的兩個模塊是和,這里我們選擇。輪廓福使用了自帶的圖像輪廓提取功能。 快過年了,各種互聯網產品都出來撒紅包。某寶一年一度的集五福(shua hou)活動更是成為每年的必備活動。雖然到最后每人大概也就分個兩塊錢,但作為一個全民話題,大多數人還是愿意...
摘要:又到了一年一度的情人節大家都準備送什么給自己心儀的對象呢鮮花巧克力都太俗套了,今天給大家帶來一個抖音上看到的表白神器用寫一個告白程序,讓她看到你滿滿的愛意。 又到了一年一度的情人節!大家都準備送什么給自己心儀的對象呢? 鮮花、巧克力都太俗套了,今天給大家帶來一個抖音上看到的表白神器 — 用Python寫一個告白程序,讓她看到你滿滿的愛(tao)意(lu)。 先上效果: showImg(...
摘要:先來看下效果實際使用不需要打開手機,此處為演示需要實現代碼主要有兩個部分接收紅包消息直接從手機端微信獲取數據比較麻煩,主流的方法都是通過微信網頁版來獲取。這里我用的是,通過即可安裝,之前我也寫過文章介紹微信機器人進化指南。 又到了辭舊迎新的時候,群里的紅包也多起來了。然而大佬們總是喜歡趁我不在的時候發紅包,經常打開手機,發現紅包已被搶完,感覺錯過了一個億。 安卓上有不少紅包助手工具,但...
摘要:組件提供了一系列的操作接口以方便用戶對彈幕的相關特性進行定制。對于這種類型的圖像,我們可以使用色鍵的方式進行摳圖生成蒙版。其中,用于更新蒙版的接口為。 導讀:本文內容是筆者最近實現的 web 端彈幕組件—— Barrage UI 的一個延伸。在閱讀本文的實例和相關代碼之前,不妨先瀏覽項目文檔,對組件的使用方式和相關接口進行了解。 各位童鞋如果經常上 B 站(bilibili.com) ...
閱讀 2732·2023-04-25 14:21
閱讀 1167·2021-11-23 09:51
閱讀 4000·2021-09-22 15:43
閱讀 605·2019-08-30 15:55
閱讀 1550·2019-08-29 11:28
閱讀 2439·2019-08-26 11:44
閱讀 1675·2019-08-23 18:15
閱讀 2874·2019-08-23 16:42