你的涂鴉活了,CMU中國本科生讓畫成真丨有代碼有Demo
本文經AI新媒體量子位(公眾號ID:QbitAI)授權轉載,轉載請聯系出處。
凡人的世界,繪畫就是靜態的。但在一個神秘的計算機世界,一切都不一樣,不信你看。
畫一個獨角獸,然后輕輕一點。
獨角獸就“活了”,奔跑跳動、躍然紙上。
給它取個名,再輕輕一點——擁有姓名的獨角獸,就從紙面進入一個三維世界,開始不知疲倦的翻越,一座座山丘……
這個世界里,還生活著各種奇奇怪怪的生物。
比方藏在人群中扭秧歌的蝸牛。
看,長了四只腳的怪物:
在天上行走的漁夫,怕不是個仙人:
帶著帽子的鬼怪紳士
連一草一木都能成精:
卡通人物也可以,你看有哆啦A夢:
黃皮耗子皮卡丘,這次沒長毛:
還有神奇的大方臉:
這些小家伙,都是吃瓜群眾們畫出來的。
在這個虛擬世界里,只要寥寥幾筆涂鴉,所繪之物盡成真,堪稱真神筆馬良。它們在同一片天地間奔跑,魑魅魍魎糾纏,宛如百鬼夜行。
這個,就是正在CMU就讀的中國小哥Lingdong Huang同學創造的涂鴉世界,在這個世界里,任何人都能像神筆馬良一樣,隨便一畫,即刻成真。
不少吃瓜群眾看到之后紛紛驚嘆:
這特么簡直是魔法:
好喜歡這些涂鴉,我能連著看好幾天,哈哈。
簡直像詩一樣,都是有血有肉的形象,在一個自然隨性的地方飄蕩。
怎么做到的
明明是隨意的涂畫,竟然能自動分辨出小鬼怪們的“胳膊”和“腿兒”,還能有節奏的活動,這些涂鴉是怎么“活”過來的?
“造物主”黃同學用了三個步驟來完成這個世界的構建。
給涂鴉加上骨架
就像人體關鍵點檢測一樣,隨手畫出的涂鴉也需要關鍵點,確定骨骼位置,才能描繪出它的精氣神。
這里,黃同學用了OpenCV的骨架化工具,借助Zhang-Suen的C++代碼實現。不過,這套實現遍歷了圖像中的所有效果,所以在web端實現的效果又卡又慢。
黃同學不得不重新借助gpu.js,用WebGL shaders的javascript分支重寫了代碼。
重寫之后要快得多了。比如我們放一張寡姐持槍的照片,它就能自動把畫面的重點,寡姐的軀干和兩條拿槍的胳膊就可以自動勾勒出來。
讓機器看懂骨架
但是,現在問題來了,看到這樣一張圖,人類可以判斷出來是一個人和TA的兩條胳膊,可是機器好像不行啊。
于是,黃同學決定用8×8窗口掃描整個圖像,找到那些有筆畫的部分馬克出來,作為根補?。╮oot patch),然后,看根補丁小方塊的四個邊,哪邊有線就往哪邊延伸,這樣就能找出整個骨架,之后用中值模糊濾波器(aggressive median-blur filter)降噪。
現在,機器終于能理解你畫的涂鴉的形狀,和它內部的骨架結構。
讓涂鴉動起來
下面就得想辦法讓涂鴉動起來了。
這里,黃同學確定了五大物種:哺乳動物、人、鳥、魚、植物,根據涂鴉形象骨架,確定畫出來的小怪物屬于哪一類物種,然后給骨架的不同部分分配身體器官:這是頭,這是胳膊,這是腿……
之后,他為不同物種設定了單獨的“走路”姿勢,比如植物應該是在一個固定的地方蹦蹦跳跳,哺乳動物和人類應該是在地上跑,鳥應該放在天上呼扇翅膀,魚應該是在水里擺尾游動。
這樣一套流程下來,涂鴉就能動起來了。
對了,涂鴉小怪物們所生活世界的“天、地、水”也需要定義。
黃同學用2D高斯函數乘以Perlin噪聲,生成了一個類似海里的小島的地圖,中間高,周圍低,最外層是水,這樣,花鳥魚蟲們就能夠各得其所了。
AI搞怪愛好者
黃同學即將在明年從CMU畢業,此前他還是迪士尼的實習生。這位97年出生的少年,創造過很多神奇的項目。
比如,自動生成山水畫:
還有Emoji小人大戰:
自動書法生成器:
相當有趣的內容,大家可以戳進傳送門體驗。
專業“馬良”公司已面世
涂鴉動起來,這種像神筆馬良一樣的功能其實已經被一家公司商業化了。
前微軟人機交互專家曹翔博士創立的小小??萍季褪沁@樣一家公司,他們用自研的Wonder Painter技術,可以把各種物體變成會動的角色。
比如,在繪畫界面里畫一個穿裙子的姑娘:
接下來,姑娘就可以直接開始熱舞了:
小小牛的這項技術已經以游戲的形式,應用在了一些線上營銷活動中。未來,這類技術或許還能在藝術創作、兒童教育等領域大放異彩,會大大降低藝術創造的門檻。
所以“神筆馬良”,不止是前沿技術,未來商業前景也隱隱轟鳴。
傳送門
Demo體驗:
https://doodle-place.glitch.me/
差點忘了說,因為這個項目太受歡迎,有時候需要像滴滴一樣排隊才能進入,開頭的皮卡丘和哆啦A夢在第二個Demo服務器里:
https://doodle-place-server-2.glitch.me/
原作博客:
http://golancourses.net/2019/ngdon/03/05/ngdon-drawingsoftware/
骨架化代碼:
https://skeletonization-js.glitch.me/