王柳濤 李家敏 陳興松 郭鴻偉 歐武略
(廣東技術師范大學 廣東省廣州市 510665)
隨著信息技術及網絡社交興起、深度學習和圖像處理技術的技術的成熟以及智能手機的普及,人們對圖像處理類軟件產品的需求也日益增加。微信小程序搭配數字圖像處理技術和深度神經網絡,開發圖像處理平臺,解決用戶在圖像處理上的多樣化需求具有很大的研究價值。
前端框架分為三部分:邏輯層、視圖層和系統層,采用vue.js框架開發,為用戶使用小程序提供了登錄頁面、注冊頁面、圖像處理頁面。
2.2.1 云開發控制臺
云開發控制臺提供數據庫和云儲存兩大功能,數據庫管理用戶的個人數據;云存儲為存放用戶的個人圖像文件。
2.2.2 Django 服務端
Django 服務器端存放圖像處理視圖函數,用戶通過小程序向服務器發起一個http 請求(request),不同的請求對應不同的視圖函數。函數在語言上基于python 開發,在算法的設計上基于opencv 的圖像處理庫和深度神經網絡,實現了負責接收前端的不同post 請求,并根據不同的請求地址調用相應的圖像處理算法的功能,對post 請求的圖像數據進行處理并返回結果。
不同于市面的大多數圖像處理軟件,本平臺開發了多種圖像特效處理功能(圖1)+人臉識別的功能。平臺的特點:簡潔美觀的界面、實用多樣的功能、簡單方便的操作等,因此能基本滿足不同類型的人群的需求,具有廣闊的前景。
小程序用戶在前端注冊頁面進行個人信息注冊時,需進行個人頭像照的上傳并被存儲到云儲存中。小程序在用戶登陸時調用攝像頭模塊獲取用戶實時照片并轉成base64 碼,再將注冊所用頭像圖像轉成base64 碼,兩個base64 碼上傳到Django 服務器。Django 服務器則調用opencv 運行人臉識別算法,對兩個64 編碼進行對比匹配,并將匹配結果返回前端[1]。人臉識別算法實現過程如下:
(1)獲取每個圖像中人臉的位置。將post 請求中兩個不同的64 編碼轉成numpy 圖像矩陣,再調用face_recognition 庫對圖像矩陣進行處理,求出每個圖像的人臉位置location=[(top,right,bottom,le ft)]。

圖1:功能圖

圖2:GAN 網絡結構

圖3:animeGAN 效果(原圖:左;效果圖:右)
(2)求出兩張圖像的臉部編碼列表face_encoding。調用face_recognition 庫的臉部編碼函數,以兩個圖像的人臉位置location 為參數,轉換得到兩個圖像的臉部編碼列表。
(3)對兩個臉部編碼列表進行比較。調用face_recognition 的compare_faces 函數,對兩個臉部編碼列表進行對比,將對比結果返回前端,前端根據對比結果進行登錄認證。
4.2.1 GAN
GAN(生成對抗網絡)被廣泛應用于圖像風格轉移和高質量圖像合成,尤其在圖像動漫化的領域,已經取得了很好的成果[2]。GAN 由兩大部分組成,一是圖像生成器Generator,二是判定器Discriminator。GAN 網絡結構如圖2 所示。Generator 和Dicriminator 均由深度神經網絡CNN 組成,Generator 負責接收程序生成的高斯噪音,并將噪音轉換到另一特征空間,即生成假圖像fake,Dicriminator 負責鑒定fake 的真偽,兩者不斷對抗博弈,最終達到納什均衡[3]。在數學上,GAN 最終要達到的狀態可以由目標函數表示:

4.2.2 animeGAN
animeGAN 是以DCGAN 為基本模型,以動漫圖像為訓練集的GAN 的變種[4]。DCGAN 在網絡架構上用CNN 代替了原始GAN 的全連接層,保留了圖像在多層次下的特征;在每一層中加入了Batch Normalization(BN)層,提高了模型的穩定性;在Generator 中的各層中(除了輸出層使用tanh 函數)使用relu 函數,在Discriminator 各層中使用LeakyReLU 激活函數,有效防止了模型在訓練過程中出現梯度消失或爆炸。
當用戶發起請求并將待處理圖像的base64 編碼上傳到django時,后端使用animeGAN 模型進行圖像處理并將處理后的圖像返回到小程序前端。
animeGAN 效果如圖3 所示。
后端接收前端傳輸的圖像數據,通過調用darknet-ocr 算法模型將圖像文本區域的文字提取出來。該算法模型基于darknet 開源深度網絡,基于圖像識別以及自然語言模型的核心技術,達到了CNN+CTCOCR 文字識別的目的。
(1)對前端傳輸過來的圖像進行灰度處理,得到灰度圖片;
(2)雙邊濾波;
(3)將圖像矩陣轉回3 通道彩色圖像并返回前端。
(1)引入paddlehub 庫加載圖像模型module;
(2)module 調用segmentation 函數切割圖像;
(3)將切割過后的圖像返回前端。
(1)用戶通過手劃的方式引起觸發事件,將要進行馬賽克的圖片局域矩陣locations(x1,x2,y1,y2)和圖像base64 編碼傳輸到后端;
(2)將前端傳輸過來的圖像轉成灰度圖像;
(3)中值濾波;
(4)遍歷圖像locations 位置的所有像素(i,j),并將點(i,j)的像素值賦給距離點(i,j)為10 的其他像素點;
(5)將圖像數據返回前端。
不同于傳統圖像處理方法,平臺后端調用雙分支GAN 算法模型[5],對前端傳輸過來的圖像進行高質量的素描圖像生成,將生成的圖像以base64 碼的格式返回前端。
后端程序調用opencv 庫的內部函數stylization()對圖像進行水彩風格化處理,并返回前端。
圖像修復即圖像去噪,后端算法使用殘差網絡(ResNet)模型進行圖像的去噪操作,ResNet 在圖像特征表達能力方面效果較好,尤其能充分提取淺層次的特征,在圖像去噪方面被廣泛應用。
采用數字圖像處理和深度神經網絡開發的微信小程序平臺,前端UI 簡約大方,后端使用云開發控制臺以及Django 搭建,算法上使用基于python語言的opencv圖像處理庫以及深度神經網絡模型,使用方法簡單,效果上能滿足用戶的多樣化需求,在商業推廣和技術上都具有很高的可行性。