工業設計研究生,

入坑人工智慧半年有餘

,致力於用人工智慧來減輕設計師們的工作負擔。寫文章記錄分享下日常研究。

題圖是我用GAN做的一個汽車線稿自動上色程式,左邊是輸入的線稿,右邊是程式自己畫出來的效果圖。目前試玩版釋出在 47。106。155。146上,以下是網站素顏截圖:

[設計師的AI自學之路] 設計線稿AI上色

選擇一張本地汽車手繪線稿圖,JPG的比較穩妥,其他的可能會報錯

[設計師的AI自學之路] 設計線稿AI上色

右邊就是上色效果了,目前側檢視上色效果還行,其他角度的不太穩定

實在沒精力做介面和互動設計了,精力都花在最佳化演算法和製作資料集上,愧對學了6年設計,有人願意合作開發,強烈歡迎。

不過本期重點不是這個,因為整個專案坑有點多,大大小小都有,我先一個一個填,填得差不多了再寫篇綜合整理,爭取讓更多的設計師明白人工智慧可以為設計做什麼。我儘量用設計師們能看懂的語言,來介紹下其中一小塊內容:

如何獲取線稿

線稿的來源大致有以下幾種方法:

用常規影象處理中的邊緣提取 難度☆☆☆

利用神經網路的的邊緣提取 難度☆☆☆☆

利用PS相關濾鏡、動作做邊緣提取 難度☆

利用三維模型匯出線稿 難度☆☆☆☆☆☆

直接網上搜現成的線稿 難度☆ 心煩指數☆☆☆☆☆☆☆☆☆

常規影象處理中的邊緣提取做法

原理來自圖片邊緣處畫素值變化比較劇烈,那麼可以用某種濾波器(可以理解為某種判斷條件)去檢測這些變化劇烈的區域,從而獲得邊緣所在位置。不同的濾波器(不同的判斷條件)提取出來的效果會有略微的不同。比較好用的有canny演算法。

換作設計師熟悉的方法,那就是PS的濾鏡,有的是查詢邊緣濾鏡,有的是高反差保留濾鏡,有的是最小值濾鏡,都能做到提取邊緣的效果,但效果又有些許不同。

下面是我用python 和opencv庫做的一個簡單的canny演算法提取線稿

import

cv2

def

CannyThreshold

lowThreshold

):

#先上個畫素3的高斯模糊,過濾掉小噪點

detected_edges_B

=

cv2

GaussianBlur

grayB

,(

3

3

),

0

detected_edges_G

=

cv2

GaussianBlur

grayG

,(

3

3

),

0

detected_edges_R

=

cv2

GaussianBlur

grayR

,(

3

3

),

0

#呼叫opencv自帶的canny演算法

detected_edges_B

=

cv2

Canny

detected_edges_B

lowThreshold

lowThreshold

*

ratio

apertureSize

=

kernel_size

detected_edges_G

=

cv2

Canny

detected_edges_G

lowThreshold

lowThreshold

*

ratio

apertureSize

=

kernel_size

detected_edges_R

=

cv2

Canny

detected_edges_R

lowThreshold

lowThreshold

*

ratio

apertureSize

=

kernel_size

#預設生成的是黑底白線的線稿,我先把生成的3張線稿融合到一塊

dst

=

cv2

bitwise_or

detected_edges_B

detected_edges_G

dst

=

cv2

bitwise_or

dst

detected_edges_R

#黑白反轉,使得背景為白色

dst

=

255

-

dst

cv2

imshow

‘canny demo’

dst

lowThreshold

=

0

#canny演算法中的一個閾值引數

max_lowThreshold

=

300

#canny演算法中的另一個閾值引數

ratio

=

3

kernel_size

=

3

#canny演算法中的一個引數,這個預設選3就行

img

=

cv2

imread

‘test/shoes (1)。jpg’

#輸入測試圖片的路徑

‘’‘

傳統方式是gray = cv2。cvtColor(img,cv2。COLOR_BGR2GRAY)

直接把圖片轉成灰度圖,這會導致對明度接近,但顏色不同的區域邊界檢測效果不好

我對這裡三通道分別做邊緣檢測,使得不同顏色相同明度的區域也能被分割出來

對於直接轉灰度圖的影象,test/redblue。jpg在滑塊閾值3時就檢測不出交界線

三通道分別做邊緣檢測,test/redblue。jpg在滑塊閾值94時依然能檢測出交界線

’‘’

grayB

=

img

[:,:,

0

grayG

=

img

[:,:,

1

grayR

=

img

[:,:,

2

cv2

namedWindow

‘canny demo’

cv2

createTrackbar

‘Min threshold’

‘canny demo’

lowThreshold

max_lowThreshold

CannyThreshold

CannyThreshold

0

# initialization

if

cv2

waitKey

0

==

27

#按q關閉顯示介面

cv2

destroyAllWindows

()

[設計師的AI自學之路] 設計線稿AI上色

不同閾值的提取效果不同

[設計師的AI自學之路] 設計線稿AI上色

不同閾值的提取效果不同

利用神經網路來提取邊緣

神經網路是個好東西——魯迅

這幾年大火的深度神經網路最大的應用之一就是影象識別,例如如何評價 Kaiming He 最新的 Mask R-CNN? 但物體識別更多的是在識別外輪廓,內部的邊緣線就直接忽略了。

在提取輪廓線方面效果較好的還有HED演算法,github地址在這裡:傳送門

原作者是老caffe框架寫的,我還沒試過caffe,試了用tensorflow版本的程式碼,搞了快一禮拜,還是沒跑起來,裝環境真的是大坑啊,作業系統、python版本、tensorflow版本、CUDA版本,cudnn版本,以及各種相關支援包版本,實在是心累,等下次心情平靜後再從頭試試。

[設計師的AI自學之路] 設計線稿AI上色

HED邊緣提取效果

利用photoshop來提取邊緣

PS提取線稿的方法有很多,作為以前吃飯的工具,再熟悉不過了。用PS提取線稿優點是很直觀不用寫程式碼,可以順勢做點圖片操作,增強明暗對比之類的。缺點是處理速度有點慢,儘管有自帶的批處理工具,但相比於用python+opencv庫,速度實在有點慢,處理幾千張圖片,用python需要30秒,用PS批處理就要半小時了。對於動則10W+圖片的深度學習資料集,PS顯得力不從心。

主要有以下幾種方式:

查詢邊緣

照亮邊緣

最小值

高反差保留

photoshop 2018cc 19。1。1版一鍵摳圖黑科技

前4種方法網上有很多教程了,PS提取線稿傳送門

第5種方法是今年新版本PS推出的黑科技

具體在 選擇-主體

[設計師的AI自學之路] 設計線稿AI上色

然後自動識別當前圖片的主體,並形成選區,如上圖所示。

背後的原理肯定和深度學習有一腿

從三維模型中匯出線稿

原理很簡單,搞來一批三維模型,寫個指令碼,用三維軟體匯出一堆角度不同的線稿和渲染稿。

我試過從產品模型中匯出線稿和效果圖來,但實操發現存在這些困難

模型類別有要求。基於工程引數類建模軟體(如proe,SW,CATIA)的模型和nurbs型別(如Alias,rhino)的模型,是可以匯出線稿的,但這類模型網上主要以橫平豎直的工程器械為主,缺乏產品外觀類模型。而基於網格建模的模型很多,品類也豐富,但似乎沒法匯出接近手繪的線稿,這方面我不是很懂,我用的一直是rhino,歡迎3DMAX大佬指點下能否從mesh模型匯出線稿。

會匯出許多並實際看不見的結構線,例如倒圓角處,就算模型做到G2連續,也依然會匯出兩條分面線。

有渲染軟體能渲染出二次元風格的圖,常見於動畫製作,聽說漫畫上色有人試過這方法,但效果不佳,原因不明。

三維模型不如圖片好處理,牽扯到建模軟體的指令碼,渲染的指令碼,一個人精力有限,沒深入挖掘下去。歡迎這方面大佬提供些指導意見。

直接網上搜現成的線稿

這個看似搞笑的方法,卻是做汽車線稿上色的重要方法之一。

原因很簡單,無論用傳統影象處理方法,還是基於神經網路的高大上方法,還是PS自帶的方法,都無法100%還原設計師手稿。以汽車設計為例,汽車設計的線稿線條變化豐富,重要的結構線粗,次要的結構線細,層次分明,還有一些習慣畫法,如翼子板上的高光,會透過排幾根線條來表示。而用上述所有方法,暫時都做不到還原出手繪真實畫法。若拿著機器提取的線稿給神經網路訓練,神經網路學會的是怎麼給這些提取的線稿上色,如果實際使用者輸入的線稿和提取的線稿差異過大,神經網路就蒙了,不認識了。

那麼怎麼搜這些現成呢?具體情況具體分析——列寧

對於漫畫線稿上色,直接用演算法提取出來的線稿和實際線稿差異不大,直接能用了。推薦一下大佬做的漫畫上色專案,實在太強了,我就是去年看了大佬做的才入坑人工智慧

對於汽車線稿上色,我用小工具在pinterest蒐集了幾萬張汽車設計手繪圖,上色不上色的都有,從中人工挑選出能用的約2000張線稿。同時也在netcarshow手動儲存了2010年之後各主機廠的官方優質效果圖。也用前面提取線稿的方法提取了一批假線稿來增強資料集。

這篇就先寫到這裡吧

差點忘了這個汽車上色的github:可以在本機搭起來自娛自樂

找合作開發小夥伴

以及顯示卡贊助商(滑稽)

我的個人公眾號:人工智慧與設計