0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

搭建了一款GIF動圖生成器,其中使用的是OpenCV

zhKF_jqr_AI ? 來源:未知 ? 作者:李倩 ? 2018-11-10 09:27 ? 次閱讀

編者按:今天的介紹的教程輕松有趣,作者Adrian Rosebrock搭建了一款GIF動圖生成器,其中使用的是OpenCV,這一過程中會提到以下幾點技術(shù):

如何用基于深度學(xué)習(xí)的方法進(jìn)行人臉檢測

如何用dlib庫進(jìn)行人臉標(biāo)記檢測并提取眼睛部分(因為動圖會在眼睛區(qū)域添加眼鏡)

如何計算旋轉(zhuǎn)角度,讓動圖眼鏡調(diào)整到合適位置

最后,如何用OpenCV生成動態(tài)GIF

想了解更多細(xì)節(jié),就繼續(xù)讀下去吧!

準(zhǔn)備工作和依賴環(huán)境

OpenCV和dlib

OpenCV是常用的人臉識別和基礎(chǔ)圖像處理工具,論智君此前也介紹過OpenCV,感興趣的同學(xué)可以閱讀:

當(dāng)Node.js遇上OpenCV深度神經(jīng)網(wǎng)絡(luò);

用OpenCV實現(xiàn)八種不同的目標(biāo)跟蹤算法

此外,Dlib是用來檢測面部標(biāo)志的工具,可以讓我們定位眼睛在臉部的位置,并且讓“眼鏡”的圖標(biāo)下降到這一位置。dlib的安裝教程:www.pyimagesearch.com/2018/01/22/install-dlib-easy-complete-guide/

ImageMagick

ImageMagick是一個跨平臺的、基于命令行的工具,能提供多種圖片處理功能,例如只用一行指令就能將PNG/JPG圖像轉(zhuǎn)換成PDF;多張圖片可以集合在一份PDF中;還可以繪制多邊形、線條或其他形狀。利用ImageMagick,我們還可以用一系列輸入圖像生成GIF圖片。

在Ununtu(或Raspbian)上用apt安裝ImageMagick的指令如下:

$ sudo apt-get install imagemagick

如果你用的是macOS,可能會用到HomeBrew:

$ brew install imagemagick

imutils

Imutils是一些列基礎(chǔ)圖像處理功能,包括轉(zhuǎn)換、旋轉(zhuǎn)、縮放等等。安裝指令:

$ pip install imutils

項目架構(gòu)

我們的項目分為兩個目錄:

images/:也就是想要對其處理的原始圖像。

assets/:這一文件夾包含了我們的人臉探測器、面部標(biāo)志檢測器和所有圖像以及相關(guān)掩碼。利用這些工具,我們會將“墨鏡”和“Deal With It”的文字添加到輸入圖像中。

由于配置參數(shù)較多,我決定創(chuàng)建一個JSON配置文件,不僅能在編輯參數(shù)時更容易,命令行的參數(shù)也更少。在這一任務(wù)中我們所需的所有配置參數(shù)都包含在config.json中。

用OpenCV生成GIFs

了解JSON配置文件

首先,我們從JSON配置文件開始。打開config.json,插入以下命令:

第2行和第3行是OpenCV深度學(xué)習(xí)人臉探測器的模型文件,第四行是dlib的面部標(biāo)志探測器的路徑。

接下來我們打開一些圖片文件路徑:

5—8行是“墨鏡”和文字“Deal With It”以及相關(guān)掩碼的路徑,如下所示:

墨鏡

墨鏡的掩碼

文字

文字的掩碼

掩碼的作用是在照片上覆蓋對應(yīng)的圖像?,F(xiàn)在我們要對這個GIF生成器設(shè)置參數(shù):

min_confidence表示人臉識別結(jié)果為正的最低概率。

steps表示生成的GIF所需要的幀數(shù)。每一個step我們都會將墨鏡從上至下逐幀移動,直到達(dá)到目標(biāo)位置(眼睛)。

delay表示各幀之間的時間延遲。

final_delay表示最后一針的時間延遲。

loop表示GIF是否循環(huán)播放。

temp_dir表示臨時輸出的目錄,每一幀都會先存儲在這個文件夾中,再創(chuàng)建最終的GIF圖像。

開始創(chuàng)建

創(chuàng)建一個新文件夾,將其命名為create_gif.py,插入以下代碼,載入imutils、dlib、OpenCV:

接著,定義overlay_image函數(shù):

overlay_image函數(shù)是將前景圖像(fg)覆蓋在背景圖像(bg)上,坐標(biāo)coords通過(x, y)的坐標(biāo)點表示。

之后,進(jìn)行alpha合成完成重疊結(jié)果:

46—48行中,我們將前景、背景和alpha層轉(zhuǎn)換為[0,1]之間的浮點。接著,我們在51和52行執(zhí)行alpha合成。最后,添加前景和背景,得出輸出,返回函數(shù)(37—40行)。

接著創(chuàng)建一個幫助函數(shù),可以用ImageMagick從一系列圖片路徑中生成一個GIF:

create_gif函數(shù)可以處理一系列圖片,將它們組合成一張GIF動圖,并且還能在幀和幀之間設(shè)置一定的延遲或循環(huán)。具體來說,在這一函數(shù)中我們可以:

提取imagePaths(63行)

提取最后一張圖像的路徑,因為可能有分離的延遲(66行)

重新分配imagePaths,刪除最后一張圖片的路徑(67行)

組合命令行,開始執(zhí)行convert創(chuàng)建GIF(72—75行)

創(chuàng)建自己腳本的命令行參數(shù):

下載配置文件和“墨鏡”及其掩碼:

將OpenCV深度學(xué)習(xí)人臉檢測器載入內(nèi)存中:

為了下載OpenCV的深度學(xué)習(xí)人臉檢測,我們會調(diào)用cv2.dnn.readNetFromCaffe(101和102行)。dnn模塊只能在OpenCV3.3及之后的版本中使用。人臉識別器會呈現(xiàn)出如下結(jié)果:

在103行,我們下載了dlib的人臉標(biāo)志預(yù)測器,可以定位臉部以及各器官,例如眼睛、眉毛、鼻子、嘴巴、下巴等等:

接著,讓我們開始檢測臉部:

在這一部分,我們會:

下載輸入的照片image(106行)

創(chuàng)建一個blob,輸入進(jìn)人臉檢測神經(jīng)網(wǎng)絡(luò)(108和109行)

執(zhí)行人臉檢測(113和114行)

確定人臉檢測的概率,檢查置信區(qū)間(119—124行)。如果標(biāo)準(zhǔn)不符合,我們就簡單地推出腳本(125行),反之則繼續(xù)。

提取面部并計算人臉的標(biāo)記:

得到眼睛的坐標(biāo)后,我們就能計算將“墨鏡”放置在哪里、應(yīng)該怎樣放置:

首先,計算每只眼睛的中心以及二者之間的角度(145—151行)。之后對“墨鏡”進(jìn)行旋轉(zhuǎn)(155行)和尺寸縮放(161和162行)。

之后,還要對掩碼進(jìn)行移動,但是首先,我們需要將掩碼轉(zhuǎn)換成灰度并進(jìn)行二值化運(yùn)算(170和171行)。之后在進(jìn)行旋轉(zhuǎn)和縮放(172和173行)。

創(chuàng)建GIF的幀:

動圖中,“墨鏡”會從上至下落到圖片中,所以每一幀都呈現(xiàn)的是墨鏡逐漸靠近人臉的過程。利用JSON配置變量steps對墨鏡位置進(jìn)行調(diào)整。

最后一步是添加“DEAL WITH IT”的文字,這需要用另一個掩碼逐幀操作:

生成結(jié)果

現(xiàn)在可以看看我們的表情包生成器結(jié)果怎樣了,保證你已經(jīng)下載了源代碼(原文地址見文末),打開終端,執(zhí)行以下命令:

$ python create_gif.py --config config.json --image images/adrian.jpg

--output adrian_out.gif

[INFO] loading models...

[INFO] computing object detections...

[INFO] creating GIF...

[INFO] cleaning up...

可以看到,生成器能在不同角度檢測到眼睛的位置,結(jié)果比較理想!

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 圖像處理
    +關(guān)注

    關(guān)注

    27

    文章

    1272

    瀏覽量

    56494
  • 生成器
    +關(guān)注

    關(guān)注

    7

    文章

    313

    瀏覽量

    20919
  • 深度學(xué)習(xí)
    +關(guān)注

    關(guān)注

    73

    文章

    5431

    瀏覽量

    120787

原文標(biāo)題:用OpenCV創(chuàng)建GIFs,給你的照片戴上墨鏡

文章出處:【微信號:jqr_AI,微信公眾號:論智】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    82 Gi Hub上一款寶藏開源項目----美女生成器

    編程語言生成器
    小凡
    發(fā)布于 :2022年08月28日 18:34:02

    懶人C51代碼生成器

    懶人C51代碼生成器,一款小軟件
    發(fā)表于 11-30 00:18

    AllJoyn C++代碼生成器

    AllJoyn 團(tuán)隊非常激動地向廣大開發(fā)商宣布,一款新工具已經(jīng)問世——代碼生成器。如果您擁有定義的 AllJoyn 服務(wù)接口規(guī)范,即可通過運(yùn)行此代碼生成器,為您的服務(wù)端和客戶端生成工作
    發(fā)表于 09-19 18:11

    為什么我無法從ip core向?qū)?b class='flag-5'>生成器生成我的項目中使用的原理

    你好我正在嘗試使用內(nèi)存接口生成器(MIG)來控制開發(fā)板sp601的DDR3外部RAM問題是我無法從ip core向?qū)?b class='flag-5'>生成器生成我的項目中使用的原理
    發(fā)表于 11-07 06:09

    推薦一款:【靈生】單片機(jī)代碼自動生成器(自動編程工具)

    推薦一款:【靈生】單片機(jī)代碼自動生成器(自動編程工具)以往編寫單片機(jī)程序全靠程序員敲代碼,門檻高,學(xué)習(xí)困難,不容易入門,而且編程繁瑣,本軟件只需要鼠標(biāo)拖拽模塊,再模塊間功能連線下,再點生成
    發(fā)表于 12-21 16:53

    介紹下ABOV提供的代碼生成器

    的開發(fā),下面介紹下ABOV提供的代碼生成器,絲毫不輸CUBEMX,且ABOV單片機(jī)基本都支持keil開發(fā)環(huán)境。。2. ABOV的代碼生成器ABOV代碼生成器的風(fēng)格非常適合國內(nèi)軟件工
    發(fā)表于 11-19 08:06

    python生成器

    python生成器1. 什么是生成器生成器(英文名 Generator ),是個可以像迭代器那樣使用for循環(huán)來獲取元素的函數(shù)。生成器
    發(fā)表于 02-24 15:56

    自制酸奶生成器

    自制酸奶生成器
    發(fā)表于 04-23 11:48 ?917次閱讀
    自制酸奶<b class='flag-5'>生成器</b>

    c語言流程生成器下載

    本內(nèi)容提供了c語言流程生成器下載,歡迎大家下載學(xué)習(xí)
    發(fā)表于 05-10 11:10 ?178次下載

    C語言流程生成器

    電子發(fā)燒友網(wǎng)站提供《C語言流程生成器.rar》資料免費(fèi)下載
    發(fā)表于 07-06 16:54 ?7次下載

    代碼生成器的應(yīng)用

    jeesite框架代碼生成器,可以很方便的生成代碼,挺不錯的。
    發(fā)表于 01-14 15:19 ?0次下載

    python生成器是什么

    python生成器 1. 什么是生成器生成器(英文名 Generator ),是個可以像迭代器那樣使用for循環(huán)來獲取元素的函數(shù)。 生成器
    的頭像 發(fā)表于 02-24 15:53 ?3534次閱讀

    Arduino贊美生成器

    電子發(fā)燒友網(wǎng)站提供《Arduino贊美生成器.zip》資料免費(fèi)下載
    發(fā)表于 11-09 14:22 ?1次下載
    Arduino贊美<b class='flag-5'>生成器</b>

    通用RFID生成器

    通用RFID生成器資料分享
    發(fā)表于 02-10 15:35 ?1次下載

    Versal GTY/GTYP:使用PRBS生成器和檢查器

    本文涵蓋了在 Versal GTY 和 GTYP 中使用模式生成器和檢查器時對以下操作的限制
    的頭像 發(fā)表于 07-10 17:18 ?1016次閱讀