畢慧敏,金鑫,周子寅,李忠蘭
(北京電子科技學(xué)院,北京 100070)
近年來(lái),利用計(jì)算機(jī)神經(jīng)網(wǎng)絡(luò)進(jìn)行深度學(xué)習(xí),將歷史灰度圖像和視頻進(jìn)行著色還原,成為當(dāng)下人工智能和神經(jīng)網(wǎng)絡(luò)領(lǐng)域研究的熱點(diǎn)之一。國(guó)內(nèi)外有關(guān)自動(dòng)著色的研究和應(yīng)用發(fā)展迅速。例如,Richard Zhang等[1]提出采用卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Networks,CNN),把著色的回歸任務(wù)變成一個(gè)分類任務(wù)以處理著色時(shí)顏色空間的對(duì)應(yīng)關(guān)系;Patricia Vitoria等[2]提出了采用生成對(duì)抗網(wǎng)絡(luò)(GAN)模型并結(jié)合圖像的語(yǔ)義信息對(duì)抗學(xué)習(xí)著色方法;2018年新華社聯(lián)合百度AI人工智能團(tuán)隊(duì)開(kāi)發(fā)了“給舊時(shí)光上色”的應(yīng)用程序,用戶上傳灰度圖像可返回智能著色后的結(jié)果。2020年,百度AI開(kāi)放平臺(tái)整合了圖像特效技術(shù),將圖像著色以C++、Python、PHP等編程語(yǔ)言接口的形式向開(kāi)發(fā)者提供,將各類圖像處理技術(shù)如灰度圖像著色、圖像風(fēng)格轉(zhuǎn)換、圖像增強(qiáng)等以接口調(diào)用形式免費(fèi)提供給用戶使用。但該程序?qū)τ谏蟼鲌D像的分辨率、大小和格式有著嚴(yán)格限制,在用戶使用時(shí)仍存在局限性。
針對(duì)灰度圖像和灰度視頻在當(dāng)下的實(shí)際應(yīng)用需求,本文采用了HistoryNet網(wǎng)絡(luò)結(jié)構(gòu)進(jìn)行進(jìn)一步設(shè)計(jì),實(shí)現(xiàn)了圖像與視頻智能著色模型的微信小程序前端,后端數(shù)據(jù)庫(kù)和接口編程,利用后端進(jìn)行算法遠(yuǎn)程調(diào)用,并將后端數(shù)據(jù)庫(kù)進(jìn)行遠(yuǎn)程部署,最終制作出基于深度學(xué)習(xí)的歷史灰度圖像、視頻自動(dòng)著色系統(tǒng),前端、后端與算法分別部署,有效降低系統(tǒng)耦合,提高各個(gè)部分的內(nèi)聚度,便于之后系統(tǒng)的擴(kuò)展。該系統(tǒng)在灰度圖像、灰度視頻著色領(lǐng)域,歷史檔案研究和管理領(lǐng)域和藝術(shù)與審美等領(lǐng)域有較大價(jià)值。
著色是將合理、正確的顏色信息添加到灰度圖像或灰度視頻的過(guò)程。以前的黑白圖像著色方法依賴于人的手工注釋,并且經(jīng)常產(chǎn)生不可稱為真正著色的去飽和結(jié)果。深度學(xué)習(xí)的著色方法是利用網(wǎng)絡(luò)中的生成器網(wǎng)絡(luò)和判別器網(wǎng)絡(luò)進(jìn)行圖像著色的“博弈”。生成器用于生成著色圖像,判別器用于判定該著色圖像是否真實(shí),即是否符合人的一般認(rèn)識(shí)。最終生成器進(jìn)行著色生成的圖像使得判別器無(wú)法區(qū)分其真實(shí)性時(shí),即獲得了一個(gè)圖像著色的模型,使用該著色模型即可完成圖像著色。對(duì)于灰度視頻來(lái)說(shuō),可以看作是對(duì)多張連續(xù)的灰度圖像著色過(guò)程,即多次灰度圖像著色,因此掌握了灰度圖像的著色原理,利用視頻分幀和幀合成技術(shù),就能實(shí)現(xiàn)灰度視頻的著色。如何讓計(jì)算機(jī)根據(jù)輸入灰度圖像對(duì)不同區(qū)域著色并返回正確結(jié)果,是深度學(xué)習(xí)自動(dòng)著色領(lǐng)域研究的重點(diǎn)之一。
在過(guò)去的十多年中,根據(jù)對(duì)神經(jīng)網(wǎng)絡(luò)的研究和改進(jìn),人們提出了幾種著色技術(shù),可分為以下三類:基于涂鴉的方法、基于參考的方法和基于深度學(xué)習(xí)的方法。其中,前兩類基于用戶指導(dǎo),第三個(gè)基于機(jī)器學(xué)習(xí)。對(duì)于基于涂鴉的方法,需要在待著色的灰度圖像上通過(guò)手工提供大量的涂鴉,費(fèi)時(shí)費(fèi)力;對(duì)于基于參考的方法來(lái)說(shuō),Deep Exemplar-based Colorization[3]論文第一次提出該方法,對(duì)比基于涂鴉的方法,該方法減少了人為干預(yù)的工作量,可以根據(jù)選擇的不同參考圖像對(duì)灰度圖像進(jìn)行著色。然而著色質(zhì)量很大程度上受到參考圖像影響,著色的結(jié)構(gòu)一致性和可控性[4]把握度不強(qiáng),因此在選擇一幅質(zhì)量較差的參考圖像作為樣例的時(shí)候,著色效果明顯不好。若需要提高著色正確率,則需要列出參考樣例可能的所有結(jié)果,必須使用海量的樣例數(shù)據(jù),這樣就限制了該方法的著色效果。隨著深度學(xué)習(xí)的進(jìn)步,許多研究使用CNN或GAN[5]來(lái)提取灰度圖片的信息以用于著色,這些方法往往實(shí)現(xiàn)了自然顏色匹配,但忽略了顏色分布的客觀事實(shí)。
本設(shè)計(jì)以HistoryNet神經(jīng)網(wǎng)絡(luò)架構(gòu)[6]實(shí)現(xiàn)圖像和視頻的著色功能,該網(wǎng)絡(luò)包含分類、細(xì)粒度語(yǔ)義解析和著色三個(gè)子網(wǎng)絡(luò),其中分類子網(wǎng)絡(luò)負(fù)責(zé)將圖像按照年代、民族、服裝類型等進(jìn)行分類;語(yǔ)義解析子網(wǎng)絡(luò)負(fù)責(zé)解析圖像中的人物輪廓、服裝和背景,生成語(yǔ)義分割幫助服裝和人物更準(zhǔn)確地著色,并有效防止顏色溢出;在訓(xùn)練過(guò)程中,將分類和語(yǔ)義解析融入到顏色生成網(wǎng)絡(luò)中,以此改善著色效果。結(jié)果顯示了該方法能夠?qū)崿F(xiàn)逼真的圖像著色,尤其在一些語(yǔ)義信息比較明確的圖像,特別是軍裝和歷史圖像上,該網(wǎng)絡(luò)的處理效果是比較好的,顏色更加接近人們的常規(guī)認(rèn)知。通過(guò)相關(guān)的定性和定量實(shí)驗(yàn)比較,本文方法在PSNR、SSIM等方面都是效果最先進(jìn)的著色網(wǎng)絡(luò)。
對(duì)于一幅圖像的著色來(lái)說(shuō),評(píng)價(jià)其著色好壞的標(biāo)準(zhǔn)可以分為定性評(píng)價(jià)和定量評(píng)價(jià)兩方面。
定性評(píng)價(jià),可以看作一種主觀評(píng)價(jià),是一種從人的認(rèn)知角度對(duì)彩色圖像的評(píng)價(jià)。定量評(píng)價(jià)[7],指的是利用著色領(lǐng)域內(nèi)常用的指標(biāo)對(duì)圖像進(jìn)行打分評(píng)價(jià),主要通過(guò)PSNR(Peak Signal to Noise Ratio,峰值信噪比)和SSIM(Structural Similarity Index Measure,結(jié)構(gòu)相似性)判斷著色效果的好壞。
(1)PSNR是一個(gè)工程術(shù)語(yǔ),表示信號(hào)最大可能功率(峰值信號(hào))與影響其表示精度的破壞性噪聲功率之比。由于許多信號(hào)都有非常廣的動(dòng)態(tài)范圍,計(jì)算數(shù)值很大。故峰值信噪比通常取對(duì)數(shù),用分貝(dB)來(lái)表示。
計(jì)算方法如下:
MAXI表示單個(gè)圖像點(diǎn)顏色數(shù)量的最大值。MSE是真實(shí)值與預(yù)測(cè)值之差的平方再求算術(shù)平均值,根據(jù)上式,MSE越小,則表示預(yù)測(cè)值與真實(shí)值越接近,此時(shí)PSNR值越大;MSE越大則表示預(yù)測(cè)值與真實(shí)值差距越大,此時(shí)PSNR值越小。故判斷著色方法的好壞時(shí),可以將原有的彩色圖像經(jīng)過(guò)灰度化之后對(duì)其進(jìn)行著色,著色圖與原彩色圖計(jì)算PSNR值,值越大表示效果越好,著色更理想。根據(jù)統(tǒng)計(jì)分析列出PSNR值對(duì)應(yīng)的圖像著色好壞的判斷指標(biāo),如表1所示:
表1 PSNR值與圖像質(zhì)量評(píng)價(jià)對(duì)應(yīng)關(guān)系
(2)SSIM:SSIM[8]是一種衡量?jī)煞鶊D像相似度的指標(biāo)。SSIM的度量方式:從亮度(Luminous)、對(duì)比度(Contrast)和結(jié)構(gòu)(Structure)三方面度量圖像相似性。
在圖像對(duì)(X,Y)中,μX和μY分別表示圖像X和Y的均值,σX和σY分別表示圖像X和Y的方差,σXY表示圖像X和Y的協(xié)方差(圖像的數(shù)字特征計(jì)算以全圖像素點(diǎn)為對(duì)象整體進(jìn)行計(jì)算)。
SSIM值越接近1,表示圖像相似程度越高,即著色圖像跟原圖之間的差距越小,相應(yīng)的著色效果也越好,反之則越差。
結(jié)合上述著色評(píng)價(jià)指標(biāo),對(duì)于歷史人物照進(jìn)行著色評(píng)價(jià),圖1中人物圖像是算法測(cè)試樣例中綜合PSNR值和SSIM值,評(píng)價(jià)最高的一組圖像。直覺(jué)上看出右邊的著色圖和左邊原圖差距非常小,本文算法對(duì)人物軍裝和皮膚的著色非常逼真,符合歷史時(shí)期的真實(shí)狀況。
圖1 著色示意圖
如圖2所示,前端為用戶操作的微信小程序,設(shè)計(jì)常用的按鈕、界面;后端為用戶“不可見(jiàn)”的數(shù)據(jù)庫(kù)管理和路由管理部分,需要設(shè)計(jì)與前端以及著色算法處理相關(guān)的路由API和控制器方法,設(shè)計(jì)數(shù)據(jù)庫(kù)并能夠?qū)?shù)據(jù)通過(guò)接口以json格式返回并顯示;算法部分除了需要完成相應(yīng)的圖像著色,還需要根據(jù)視頻著色需求做出適當(dāng)調(diào)整,完成資源下載、上傳等。
圖2 系統(tǒng)示意圖
如圖3所示,前端部分主要采用首頁(yè)歡迎頁(yè)面、圖像著色頁(yè)面、視頻著色頁(yè)面,其中包括圖像、文字、按鈕等編排設(shè)計(jì)和顯示。
圖3 前端小程序頁(yè)面示意圖
歡迎頁(yè)面做出適當(dāng)設(shè)計(jì),以輪播圖展示作為小特效,同時(shí)在下方作為上傳圖像的顯示頁(yè)面。輪播圖部分采用圖像滾動(dòng)播放,間隔為2s一張,其中的圖像左右拼接而成,左邊為灰度圖像,右邊為彩色圖像。
該部分使用GET方法,需要后端提供接口從數(shù)據(jù)庫(kù)中以json格式讀出作為圖像路徑地址在前端進(jìn)行顯示。顯示時(shí)候?qū)⒒貍鞯膉son格式數(shù)據(jù)中url字段單獨(dú)提取出來(lái),可以通過(guò)IP地址、端口號(hào)和該url字段拼接為完整的圖像訪問(wèn)地址,在界面部分即可顯示出來(lái)。同時(shí)顯示的圖像加入點(diǎn)擊跳轉(zhuǎn)功能,即點(diǎn)擊上傳的灰度圖像后,進(jìn)入新頁(yè)面展示。在其中g(shù)o(image_id)方法中增加了參數(shù)傳遞功能。將圖像id作為參數(shù)傳遞給跳轉(zhuǎn)到的頁(yè)面,即跳轉(zhuǎn)到的頁(yè)面是固定的,在跳轉(zhuǎn)頁(yè)面上顯示的內(nèi)容需要根據(jù)點(diǎn)擊的圖像不同進(jìn)行不同的顯示。在跳轉(zhuǎn)到的頁(yè)面中使用uni.request方法向數(shù)據(jù)庫(kù)發(fā)送get請(qǐng)求,得到圖像url并顯示,方法中的data部分對(duì)應(yīng)的是上述go方法中傳遞參數(shù)的接收端,接收點(diǎn)擊跳轉(zhuǎn)傳遞的參數(shù)供顯示上傳的原圖和著色圖像。
其中,封裝好的uni.request方法參數(shù)設(shè)置如下表2所示:
表2 uni.request方法參數(shù)名及類型設(shè)置
3.3.1 數(shù)據(jù)庫(kù)設(shè)計(jì)
根據(jù)實(shí)際需求,設(shè)計(jì)中采用了MySQL數(shù)據(jù)庫(kù),現(xiàn)階段暫時(shí)只需要兩張表分別存儲(chǔ)圖像和視頻信息,兩張表字段類似,在這里選擇圖像表image_info進(jìn)行闡述,具體字段設(shè)置如表3所示:
表3 圖像著色數(shù)據(jù)庫(kù)字段設(shè)置
其中,上傳圖像后在數(shù)據(jù)庫(kù)中新建一行,圖像ID作為主碼定義一個(gè)圖像在數(shù)據(jù)庫(kù)中作為一行信息保存,存儲(chǔ)其上傳路徑供Python算法調(diào)用著色,同時(shí)設(shè)置圖像Is_color字段為“0”表示此時(shí)未著色,著色完成后需要將著色圖像保存,其路徑保存在據(jù)庫(kù),路徑根據(jù)原圖像的主碼定位到數(shù)據(jù)庫(kù)其中一行,執(zhí)行插入操作將著色完成的圖像路徑插入到Image_color_url字段中。其余字段可以根據(jù)需求添加。
3.3.2 前端?后端接口設(shè)計(jì)
后端接口主要包括路由設(shè)計(jì)和控制器設(shè)計(jì)。在使用PHP的Laravel框架設(shè)計(jì)中,路由文件在routes目錄下給出,以PHP類的形式呈現(xiàn)給用戶,包括api、channels、console和web四類路由。后端過(guò)程中,web的路由由于需要進(jìn)行CSRF保護(hù)檢查,對(duì)于前端連接和算法的連接非常不友好,甚至無(wú)法傳遞數(shù)據(jù)。故最后選擇api路由實(shí)現(xiàn)路由編寫。
如圖4所示,共設(shè)計(jì)8個(gè)路由,圖像視頻各4個(gè),對(duì)應(yīng)每一個(gè)操作分為圖像(Image)和視頻(Video)兩類,根據(jù)上傳資源是圖像還是視頻對(duì)應(yīng)不同的路由,其中每一類路由完成操作基本相同??刂破魍酚膳涮资褂?,使用控制器類函數(shù)方法作為路由請(qǐng)求、路由處理和路由控制等行為??刂破髂軌?qū)⑾嚓P(guān)邏輯組成一個(gè)單獨(dú)的類??刂破鞅淮娣旁赼pp/Http/Controllers目錄下。下面將以圖像對(duì)應(yīng)的路由和控制器為例說(shuō)明各路由設(shè)計(jì)思路:
圖4 后端接口API設(shè)計(jì)示意圖
(1)ImageUpload路由:小程序端實(shí)現(xiàn)灰度圖像的上傳功能,使用POST請(qǐng)求,POST請(qǐng)求用于將數(shù)據(jù)發(fā)送到服務(wù)器來(lái)創(chuàng)建或更新資源,由于POST請(qǐng)求對(duì)數(shù)據(jù)長(zhǎng)度和數(shù)據(jù)類型無(wú)限制,參數(shù)不會(huì)被保存在瀏覽器歷史或web服務(wù)器日志中,數(shù)據(jù)也不會(huì)顯示在URL中,因此POST適用于作為資源的上傳。路由為http://IP:port//api/uploadimage??刂破鞔a分為兩部分,一是獲取上傳文件,二是根據(jù)上傳的操作需要將獲取文件的相關(guān)字段存入數(shù)據(jù)庫(kù)中。利用PHP自帶的預(yù)定義數(shù)組$_FILES獲取通過(guò)POST方法上傳的文件并設(shè)定了存入數(shù)據(jù)庫(kù)的相關(guān)字段。例如圖像主碼為上傳名字和時(shí)間戳的MD5算法加密值,時(shí)間戳精確到秒。確保了每一次進(jìn)行MD5算法加密后的字符串完全不同,確保了主碼的唯一性。
(2)ImageListController路由:顯示所有上傳的圖像使用GET請(qǐng)求實(shí)現(xiàn)將所有上傳圖像顯示的操作,GET請(qǐng)求是用于從指定資源請(qǐng)求數(shù)據(jù),即請(qǐng)求指定的頁(yè)面信息,并返回實(shí)體主體。路由地址為http://IP:port/api/imagelist。控制器部分為簡(jiǎn)單的數(shù)據(jù)庫(kù)查詢操作,將內(nèi)容以json格式顯示在頁(yè)面上供前端查詢使用即可。
(3)ImageListUncolorController路由:顯示所有未著色圖像,使用GET請(qǐng)求實(shí)現(xiàn)查詢尚未著色圖像操作,路由地址為http://IP:port/api/imagelist/uncolor,這里只需要使用is_color字段,查詢其中值為0部分即可。
3.3.3 后端算法交互
使用Python語(yǔ)言編寫同后端數(shù)據(jù)庫(kù)交互的請(qǐng)求函數(shù),然后從后端獲取圖像路徑,將圖像下載到指定文件夾,調(diào)用著色函數(shù)完成圖像著色,著色完成后將著色圖像上傳回服務(wù)器。
(1)獲取圖像路徑:后端已經(jīng)編寫好負(fù)責(zé)傳遞未著色圖像的API接口,此時(shí)若存在未著色的圖像,應(yīng)該是剛剛上傳上來(lái)的一張新圖像。利用Python中request包下面的request.get方法訪問(wèn)上面的API接口,將request.get返回的json數(shù)據(jù)解碼為Python對(duì)應(yīng)的utf-8格式。
(2)圖像下載:利用寫入文件函數(shù)file.write(),將圖像在服務(wù)器中的路徑、圖像名和后綴名提取出并寫入著色函數(shù)取得圖像的路徑。
(3)調(diào)用著色函數(shù)完成著色:調(diào)用Python與操作系統(tǒng)相關(guān)的庫(kù)os.system,將所給的字符串轉(zhuǎn)換為指令形式在機(jī)器上運(yùn)行,即可以觸發(fā)指定位置的文件執(zhí)行。
(4)圖像上傳:上傳操作利用Python.request庫(kù)中包含的POST方法。給出上傳文件結(jié)構(gòu),包括文件路徑和打開(kāi)方式(以二進(jìn)制只讀方式打開(kāi)),后端給出上傳接口即可完成上傳,并在后端接收到上傳文件。
算法感知后端動(dòng)態(tài)變化:算法部分需要自動(dòng)判斷是否有新的圖像上傳,采用最基本也是最簡(jiǎn)單的輪詢(Polling)操作實(shí)現(xiàn)。即使用一個(gè)“死循環(huán)”while操作不斷判斷后端接口是否有新圖像上傳,若存在則進(jìn)入上述的下載—著色—上傳操作,若無(wú)新圖像則一直等待即可。
3.4.1 圖像著色流程
如圖5所示,著色算法設(shè)計(jì)結(jié)構(gòu)中,輸入和輸出部分設(shè)計(jì)為讀取文件夾中形式。在程序中,設(shè)算法讀取DATA文件夾下所有圖像,并將其作為輸入進(jìn)行著色完成后輸出至OUT文件夾。因此設(shè)計(jì)自動(dòng)著色方案時(shí),特別增加了對(duì)文件和文件夾的操作,每一次下載一張圖像,著色完成后立即將其移動(dòng)到TEMP文件夾下,確保每一次著色的時(shí)候,DATA文件夾里面有且只有此時(shí)上傳的圖像。若不進(jìn)行移動(dòng)操作,程序?qū)?huì)對(duì)DATA文件夾下所有文件進(jìn)行著色,此操作可避免浪費(fèi)系統(tǒng)資源。
圖5 圖像著色算法流程圖
3.4.2 視頻著色流程
如圖6所示,視頻著色原理[9]同圖像著色大同小異,即視頻著色相當(dāng)于連續(xù)的圖像著色。通過(guò)對(duì)視頻進(jìn)行分幀后再進(jìn)行圖像的著色,隨后再將這些著色后圖像進(jìn)行合成,本文合成視頻的時(shí)候進(jìn)行了視頻幀之間顏色和內(nèi)容的一致性處理,同時(shí)添加原音軌,確保音頻和視頻同步播放。
圖6 視頻著色算法流程圖
在圖像上傳頁(yè)面,選擇需要著色的圖片進(jìn)行上傳,如圖7所示,上圖古代女子演奏樂(lè)器時(shí)的圖像,下圖為勞動(dòng)人民工作后的休息場(chǎng)面,通過(guò)對(duì)真實(shí)歷史影像的著色對(duì)比后可以看出,本設(shè)計(jì)對(duì)歷史人物著色效果理想,能夠很好的還原人物皮膚和衣物、建筑的顏色。
圖7 圖像著色測(cè)試樣例(左:著色前,右:著色后)
(1)視頻分幀操作:讀取視頻并獲取視頻幀數(shù),按照一幀截圖一張的操作,將每一張圖像保存重命名并利用cv2.write函數(shù)寫入指定文件夾。根據(jù)視頻時(shí)長(zhǎng)進(jìn)行循環(huán)操作,需要將圖像按照數(shù)字順序保存,同時(shí)為了便于后面著色以及合成處理,圖像命名時(shí)統(tǒng)一按照6位數(shù)字命名,不足補(bǔ)零。即000001.jpg,000002.jpg……以此類推。根據(jù)計(jì)算機(jī)性能不同,處理一份24幀,時(shí)長(zhǎng)3分鐘左右的視頻需要裁剪大概4000~5000張圖像,裁剪時(shí)間在3分鐘左右。
(2)控制臺(tái)顯示著色過(guò)程:調(diào)用模塊、計(jì)算本次著色圖像數(shù)量之后開(kāi)始著色。如圖8所示,將視頻切分為連續(xù)幀進(jìn)行著色,可以看到連續(xù)著色效果較穩(wěn)定,能夠較好還原歷史影像的狀態(tài)。
圖8 視頻連續(xù)幀著色測(cè)試樣例(上:著色前,下:著色后)
(3)視頻合成操作:由于分幀、著色過(guò)程對(duì)所有圖像不改變其長(zhǎng)寬,故上述處理后所有圖像大小完全相同且在文件夾中圖像按照命名格式以序號(hào)排序,確保合成后的前后幀同原來(lái)相同。首先讀取第一張圖像作為第一幀,獲取圖像的長(zhǎng)寬信息作為視頻的長(zhǎng)寬,指定編碼格式(一般指定為mp4即可),根據(jù)分幀前原視頻的幀數(shù)確定合成時(shí)的幀數(shù),最后讀取文件夾下所有圖像,按照先后順序?qū)D像寫入創(chuàng)建好的視頻文件中即完成視頻合成。
分幀著色過(guò)程中,若不考慮幀與幀之間的關(guān)系,只對(duì)單幀進(jìn)行著色,合成視頻后可能會(huì)出現(xiàn)由于丟失運(yùn)動(dòng)信息造成一定的閃爍情況,影響視頻的連貫性和一致性。為此,我們?cè)谝曨l合成時(shí)進(jìn)行幀間一致性處理[10],優(yōu)化合成視頻,使得著色后視頻在時(shí)間穩(wěn)定性和與處理幀的感知相似性之間取得平衡,提高著色后視頻的連貫性和完整性。
(4)視頻編碼與格式轉(zhuǎn)換:測(cè)試中,調(diào)用的視頻編碼模塊,編碼為內(nèi)置的mpeg4文件,屬性如圖9所示:
圖9 mpeg4編碼結(jié)果
由于小程序調(diào)用HTML5頁(yè)面的video插件,該內(nèi)置解碼器解碼得到的.mp4盡管可以在本地使用播放器播放,但是不支持HTML5頁(yè)面播放,故在小程序端無(wú)法播放視頻。經(jīng)過(guò)詳細(xì)研究之后,使用Linux服務(wù)器端的FFmpeg函數(shù)操作對(duì)文件進(jìn)行重新編碼[11],即生成的.mp4文件重新編碼,結(jié)果仍然為mp4文件,但是由于使用的編碼器不同,輸出的新文件可以在HTML頁(yè)面播放。編碼轉(zhuǎn)換后屬性如圖10所示。
圖10 H264編碼轉(zhuǎn)換后結(jié)果
(5)視頻與音頻合成:在分幀后,原視頻只留下單幀的若干張圖像,音頻部分(音軌)丟失。進(jìn)行幀合成[12]的時(shí)候需要拼接出視頻音軌。方法是在分幀前將原視頻的音頻部分保存,合成幀的時(shí)候按照等幀率合成為著色后的視頻并將原來(lái)保存下來(lái)的音頻與合成后的視頻拼接成為完整的視頻文件,最后根據(jù)需要再調(diào)用視頻與音頻合成:在分幀后,原視頻只留下單幀的若干張圖像,音頻部分(音軌)丟失。進(jìn)行幀合成的時(shí)候需要拼接出視頻音軌。方法是在分幀前將原視頻的音頻部分保存,合成幀的時(shí)候按照等幀率合成為著色后的視頻并將原來(lái)保存下來(lái)的音頻與合成后的視頻拼接成為完整的視頻文件,最后根據(jù)需要再調(diào)用。
本文利用HistoryNet算法作為歷史灰度圖像和視頻的著色算法,在此基礎(chǔ)上進(jìn)一步設(shè)計(jì)了歷史圖像視頻著色的系統(tǒng),完成了一次全棧式開(kāi)發(fā)。前端利用uni-app和微信小程序編寫顯示頁(yè)面供用戶交互,后端進(jìn)行接口路由和API的編寫、后端數(shù)據(jù)庫(kù)設(shè)置和完善,再到前后端和算法之間利用接口進(jìn)行通信連接,形成了前端、后端、算法之間接口的封裝。對(duì)前端、后端、算法分別進(jìn)行部署,前端和后端運(yùn)行在本機(jī),算法部署在局域網(wǎng)下的服務(wù)器,利用網(wǎng)絡(luò)進(jìn)行有效快速的通信以完成整個(gè)著色過(guò)程。實(shí)驗(yàn)測(cè)試結(jié)果表明,本文系統(tǒng)實(shí)現(xiàn)了圖像和視頻的自動(dòng)著色功能,前端界面設(shè)計(jì)對(duì)用戶操作要求低,使用便捷;前后端及算法的部署方式有利于降低系統(tǒng)耦合,提高各個(gè)部分的內(nèi)聚度,有利于后續(xù)系統(tǒng)的擴(kuò)展。