精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

厲害!小 200 行 Python 代碼就可以做一個換臉程序

開發 后端
在這篇文章中我將介紹如何寫一個簡短(200行)的 Python 腳本,來自動地將一幅圖片的臉替換為另一幅圖片的臉。

厲害!小 200 行 Python 代碼就可以做一個換臉程序

簡介

在這篇文章中我將介紹如何寫一個簡短(200行)的 Python 腳本,來自動地將一幅圖片的臉替換為另一幅圖片的臉。

這個過程分四步:

  • 檢測臉部標記。
  • 旋轉、縮放、平移和第二張圖片,以配合第一步。
  • 調整第二張圖片的色彩平衡,以適配第一張圖片。
  • 把第二張圖像的特性混合在第一張圖像中。

1.使用 dlib 提取面部標記

該腳本使用 dlib 的 Python 綁定來提取面部標記:

 

厲害!小 200 行 Python 代碼就可以做一個換臉程序

Dlib 實現了 Vahid Kazemi 和 Josephine Sullivan 的《使用回歸樹一毫秒臉部對準》論文中的算法。算法本身非常復雜,但dlib接口使用起來非常簡單:

  1. PREDICTOR_PATH = "/home/matt/dlib-18.16/shape_predictor_68_face_landmarks.dat" 
  2.  
  3. detector = dlib.get_frontal_face_detector() 
  4.  
  5. predictor = dlib.shape_predictor(PREDICTOR_PATH) 
  6.  
  7. def get_landmarks(im): 
  8.  
  9.     rects = detector(im, 1) 
  10.  
  11.     if len(rects) > 1: 
  12.  
  13.         raise TooManyFaces 
  14.  
  15.     if len(rects) == 0: 
  16.  
  17.         raise NoFaces 
  18.  
  19.     return numpy.matrix([[p.x, p.y] for p in predictor(im, rects[0]).parts()]) 

get_landmarks()函數將一個圖像轉化成numpy數組,并返回一個68×2元素矩陣,輸入圖像的每個特征點對應每行的一個x,y坐標。

特征提取器(predictor)需要一個粗糙的邊界框作為算法輸入,由一個傳統的能返回一個矩形列表的人臉檢測器(detector)提供,其每個矩形列表在圖像中對應一個臉。

2.用 Procrustes 分析調整臉部

現在我們已經有了兩個標記矩陣,每行有一組坐標對應一個特定的面部特征(如第30行的坐標對應于鼻頭)。我們現在要解決如何旋轉、翻譯和縮放第一個向量,使它們盡可能適配第二個向量的點。一個想法是可以用相同的變換在第一個圖像上覆蓋第二個圖像。

將這個問題數學化,尋找T,s 和 R,使得下面這個表達式:

 

厲害!小 200 行 Python 代碼就可以做一個換臉程序

結果最小,其中R是個2×2正交矩陣,s是標量,T是二維向量,pi和qi是上面標記矩陣的行。

事實證明,這類問題可以用“常規 Procrustes 分析法”解決:

  1. def transformation_from_points(points1, points2): 
  2.  
  3.     points1 = points1.astype(numpy.float64) 
  4.  
  5.     points2 = points2.astype(numpy.float64) 
  6.  
  7.     c1 = numpy.mean(points1, axis=0) 
  8.  
  9.     c2 = numpy.mean(points2, axis=0) 
  10.  
  11.     points1 -= c1 
  12.  
  13.     points2 -= c 
  14.   
  15.  
  16.     s1 = numpy.std(points1) 
  17.  
  18.     s2 = numpy.std(points2) 
  19.  
  20.     points1 /= s1 
  21.  
  22.     points2 /= s2 
  23.  
  24.   
  25.  
  26.     U, S, Vt = numpy.linalg.svd(points1.T * points2) 
  27.  
  28.     R = (U * Vt).T 
  29.  
  30.   
  31.  
  32.     return numpy.vstack([numpy.hstack(((s2 / s1) * R, 
  33.  
  34.                                        c2.T - (s2 / s1) * R * c1.T)), 
  35.  
  36.                          numpy.matrix([0., 0., 1.])]) 

代碼實現了這幾步:

  1. 將輸入矩陣轉換為浮點數。這是后續操作的基礎。
  2. 每一個點集減去它的矩心。一旦為點集找到了一個最佳的縮放和旋轉方法,這兩個矩心 c1 和 c2 就可以用來找到完整的解決方案。
  3. 同樣,每一個點集除以它的標準偏差。這會消除組件縮放偏差的問題。
  4. 使用奇異值分解計算旋轉部分。可以在維基百科上看到關于解決正交 Procrustes 問題的細節。
  5. 利用仿射變換矩陣返回完整的轉化。

其結果可以插入 OpenCV 的 cv2.warpAffine 函數,將圖像二映射到圖像一:

  1. def warp_im(im, M, dshape): 
  2.  
  3.     output_im = numpy.zeros(dshape, dtype=im.dtype) 
  4.  
  5.     cv2.warpAffine(im, 
  6.  
  7.                    M[:2], 
  8.  
  9.                    (dshape[1], dshape[0]), 
  10.  
  11.                    dst=output_im, 
  12.  
  13.                    borderMode=cv2.BORDER_TRANSPARENT, 
  14.  
  15.                    flags=cv2.WARP_INVERSE_MAP) 
  16.  
  17.     return output_im 

對齊結果如下:

 

厲害!小 200 行 Python 代碼就可以做一個換臉程序

3.校正第二張圖像的顏色

如果我們試圖直接覆蓋面部特征,很快會看到這個問題:

 

厲害!小 200 行 Python 代碼就可以做一個換臉程序

這個問題是兩幅圖像之間不同的膚色和光線造成了覆蓋區域的邊緣不連續。我們試著修正:

  1. COLOUR_CORRECT_BLUR_FRAC = 0.6 
  2.  
  3. LEFT_EYE_POINTS = list(range(42, 48)) 
  4.  
  5. RIGHT_EYE_POINTS = list(range(36, 42)) 
  6.  
  7. def correct_colours(im1, im2, landmarks1): 
  8.  
  9.     blur_amount = COLOUR_CORRECT_BLUR_FRAC * numpy.linalg.norm( 
  10.  
  11.                               numpy.mean(landmarks1[LEFT_EYE_POINTS], axis=0) - 
  12.  
  13.                               numpy.mean(landmarks1[RIGHT_EYE_POINTS], axis=0)) 
  14.  
  15.     blur_amount = int(blur_amount) 
  16.  
  17.     if blur_amount % 2 == 0: 
  18.  
  19.         blur_amount += 1 
  20.  
  21.     im1_blur = cv2.GaussianBlur(im1, (blur_amount, blur_amount), 0) 
  22.  
  23.     im2_blur = cv2.GaussianBlur(im2, (blur_amount, blur_amount), 0) 
  24.  
  25.     # Avoid divide-by-zero errors. 
  26.  
  27.     im2_blur += 128 * (im2_blur <= 1.0) 
  28.  
  29.     return (im2.astype(numpy.float64) * im1_blur.astype(numpy.float64) / 
  30.  
  31.                                                 im2_blur.astype(numpy.float64)) 

結果如下:

 

厲害!小 200 行 Python 代碼就可以做一個換臉程序

此函數試圖改變 im2 的顏色來適配 im1。它通過用 im2 除以 im2 的高斯模糊值,然后乘以im1的高斯模糊值。這里的想法是用RGB縮放校色,但并不是用所有圖像的整體常數比例因子,每個像素都有自己的局部比例因子。

用這種方法兩圖像之間光線的差異只能在某種程度上被修正。例如,如果圖像1是從一側照亮,但圖像2是被均勻照亮的,色彩校正后圖像2也會出現未照亮一側暗一些的問題。

也就是說,這是一個相當簡陋的辦法,而且解決問題的關鍵是一個適當的高斯核函數大小。如果太小,第一個圖像的面部特征將顯示在第二個圖像中。過大,內核之外區域像素被覆蓋,并發生變色。這里的內核用了一個0.6 *的瞳孔距離。

4.把第二張圖像的特征混合在第一張圖像中

用一個遮罩來選擇圖像2和圖像1的哪些部分應該是最終顯示的圖像:

 

厲害!小 200 行 Python 代碼就可以做一個換臉程序

值為1(顯示為白色)的地方為圖像2應該顯示出的區域,值為0(顯示為黑色)的地方為圖像1應該顯示出的區域。值在0和1之間為圖像1和圖像2的混合區域。

我們把上述過程分解:

  • get_face_mask()的定義是為一張圖像和一個標記矩陣生成一個遮罩,它畫出了兩個白色的凸多邊形:一個是眼睛周圍的區域,一個是鼻子和嘴部周圍的區域。之后它由11個像素向遮罩的邊緣外部羽化擴展,可以幫助隱藏任何不連續的區域。
  • 這樣一個遮罩同時為這兩個圖像生成,使用與步驟2中相同的轉換,可以使圖像2的遮罩轉化為圖像1的坐標空間。
  • 之后,通過一個element-wise最大值,這兩個遮罩結合成一個。結合這兩個遮罩是為了確保圖像1被掩蓋,而顯現出圖像2的特性。

最后,使用遮罩得到最終的圖像:

  1. output_im = im1 * (1.0 - combined_mask) + warped_corrected_im2 * combined_mask 

 

厲害!小 200 行 Python 代碼就可以做一個換臉程序

 

 

責任編輯:未麗燕 來源: 今日頭條
相關推薦

2018-03-22 13:58:06

Python換臉程序

2015-08-10 11:09:09

Python代碼Python

2022-07-14 10:54:15

Python代碼Matplotlib

2024-01-07 16:56:59

Python人工智能神經網絡

2009-12-17 09:09:48

Windows 7系統分區

2024-09-18 05:15:00

OpenCV樹莓派目標檢測

2014-05-15 09:45:58

Python解析器

2022-07-06 08:32:35

Python代碼Matplotlib

2023-04-26 07:32:04

python代碼文字信息

2015-12-21 13:11:02

開源A-FrameWebGL

2022-08-14 16:15:52

Python機器學習大數據

2020-12-22 10:15:00

Windows 10Windows微軟

2023-03-27 23:45:39

ChatGPT人工智能Python

2017-08-01 09:07:17

筆記本指紋識別

2020-09-26 21:41:30

進度條Python代碼

2021-02-23 07:01:24

js小游戲技術

2020-07-06 10:55:38

CIO首席信息官IT

2022-10-17 07:16:08

SQL機器學習AI

2016-11-23 18:13:44

javascriptrxjsreactivex

2018-09-05 19:34:58

程序員需求設計產品經理
點贊
收藏

51CTO技術棧公眾號

国产亚洲二区| 亚洲午夜精品视频| 无码 制服 丝袜 国产 另类| 天堂中文在线看| 日本不卡免费在线视频| 超碰精品一区二区三区乱码| 波多野结衣视频播放| 国产日韩另类视频一区| 亚洲精品国久久99热| 蜜桃精品久久久久久久免费影院| 中文字幕欧美在线观看| 欧美日韩综合| 这里精品视频免费| 国产精品久久AV无码| 亚洲欧洲日韩精品在线| 欧美日韩国产综合新一区| 一区二区视频国产| 你懂的在线免费观看| 国产一区二区美女诱惑| 亚洲v国产v在线观看| 少妇被狂c下部羞羞漫画| 怡红院成人在线| 一区二区三区日韩欧美| 日本在线观看一区二区三区| www国产在线| 蜜臀va亚洲va欧美va天堂| 久久久久久成人精品| 欧美乱大交做爰xxxⅹ小说| 麻豆国产欧美一区二区三区r| 欧美日韩在线综合| 欧美 日韩精品| 超碰97国产精品人人cao| 国产清纯美女被跳蛋高潮一区二区久久w| 97人人模人人爽人人少妇| 一区二区三区在线免费观看视频| 亚洲一区图片| 久久久亚洲福利精品午夜| 大地资源高清在线视频观看| 久久av资源| 亚洲精品一区av在线播放| 亚洲精品无码一区二区| 国产一区二区三区视频在线| 欧美日韩三级一区| 十八禁视频网站在线观看| 欧美另类老肥妇| 亚洲国产成人va在线观看天堂| 中文字幕一区二区三区精彩视频| 成人av毛片| 国产拍欧美日韩视频二区| 欧美极品色图| 青青青草原在线| 97精品久久久午夜一区二区三区| www.成人三级视频| www.国产视频| 国产成人亚洲综合a∨猫咪| 亚洲自拍偷拍区| 99国产精品久久久久99打野战| 韩国精品久久久| 成人网欧美在线视频| 国产精品爽爽久久| 狠狠色丁香久久婷婷综| 亚洲精品免费在线视频| 国产黄a三级三级三级| 国产成人av影院| 高清视频一区二区三区| 无码精品在线观看| 久久综合色之久久综合| 日本视频精品一区| 欧美黄色激情| 亚洲蜜臀av乱码久久精品 | 精品国产123区| 国产亚洲精品美女久久久久| 欧美亚洲色综久久精品国产| 欧美wwwww| 久精品免费视频| 黄色小说在线观看视频| 亚洲深夜福利| 国产精品高清在线| av av片在线看| 北岛玲一区二区三区四区| 女人一区二区三区| 日韩在线资源| 亚洲成av人片一区二区三区| 玩弄japan白嫩少妇hd| 青青久久精品| 亚洲国产日韩精品在线| 欧美丰满老妇熟乱xxxxyyy| 天天天综合网| 57pao国产成人免费| 中国a一片一级一片| 国产成人午夜电影网| 牛人盗摄一区二区三区视频| 国产cdts系列另类在线观看| 五月激情综合婷婷| 色18美女社区| 欧洲亚洲视频| 精品国产一区二区三区久久狼5月| 欧美黑人一级片| 老司机精品视频网站| 亚洲qvod图片区电影| 免费在线性爱视频| 亚洲免费毛片网站| 黄色国产小视频| av成人资源网| 精品国产欧美一区二区五十路| 日本一区二区不卡在线| 久久黄色级2电影| 久久大片网站| av香蕉成人| 欧美写真视频网站| 中文字幕一区二区人妻电影丶| 日韩欧美伦理| 日韩免费高清在线观看| 性中国古装videossex| 国产精品久久久久久久久免费樱桃| 日本欧美视频在线观看| 国产精品一区二区精品视频观看| 日韩精品电影网| 欧美黑吊大战白妞| 久久99精品国产麻豆婷婷洗澡| 久久大片网站| 182在线视频观看| 欧美精品v国产精品v日韩精品| 小毛片在线观看| 欧美三级免费| 97久草视频| 91精品久久| 欧美精品自拍偷拍动漫精品| 国产日韩视频一区| 欧美理论在线| 亚洲精品日产aⅴ| 免费高清在线观看| 欧美日韩亚洲国产综合| www.狠狠爱| 久久久噜噜噜久久狠狠50岁| 狠狠色综合色区| 国产啊啊啊视频在线观看| 91精品免费观看| a资源在线观看| 日韩在线a电影| 日本婷婷久久久久久久久一区二区| segui88久久综合9999| 精品毛片乱码1区2区3区| 久久精品第一页| 国产成人无遮挡在线视频| 成年丰满熟妇午夜免费视频 | 日韩精品影音先锋| 日本a级片视频| 国产九色精品成人porny | 午夜日韩福利| 91原创国产| 欧美亚洲系列| 亚洲电影免费观看高清完整版在线观看| 国产精品久久久久久久精| 国模无码大尺度一区二区三区| 亚洲一区二区三区四区中文| 国产精品久久久久久吹潮| 中文字幕国产精品| 国产免费av观看| 一区二区三区四区av| 精品人妻人人做人人爽夜夜爽| 欧美~级网站不卡| 超碰在线97av| 精精国产xxxx视频在线野外| 亚洲美女av在线| 中文字幕人妻精品一区| 亚洲人成影院在线观看| 亚洲精品成人无码毛片| 亚洲激情欧美| 日本成人看片网址| 欧美性生活一级| 欧美激情乱人伦一区| 日产精品久久久久久久性色| 欧美在线色视频| 精品国产精品国产精品| 岛国一区二区三区| 粗暴91大变态调教| 国产精品毛片一区二区在线看| 999热视频在线观看| 三级中文字幕在线观看| 亚洲午夜色婷婷在线| 国产女主播福利| 懂色av一区二区三区| 免费看污黄网站在线观看| 美女一区二区三区在线观看| 韩国无码av片在线观看网站| 欧美重口另类| 亚洲tv在线观看| 日韩欧美一中文字暮专区| 日韩在线视频网| 黄色片一区二区| 欧美性大战久久久久久久| 久久久久香蕉视频| 国产欧美日韩中文久久| xxxx国产视频| 日日夜夜免费精品视频| 18禁裸男晨勃露j毛免费观看| 国产精品美女久久久久久不卡| 成人午夜两性视频| 亚洲色图官网| 欧美黑人一级爽快片淫片高清| 九色视频网站在线观看| 欧美成人在线直播| 在线免费观看视频网站| 欧美日韩国产在线播放| 国产少妇在线观看| 国产日产亚洲精品系列| 亚洲一区二区三区综合| 国内一区二区在线| 国产理论在线播放| 国产欧美短视频| 国产免费xxx| 欧美综合另类| 久久精精品视频| 亚洲91网站| 成人精品一区二区三区| 日韩三级影视| 97在线观看免费高清| 嫩草香蕉在线91一二三区| 亚洲欧美一区二区三区四区 | 国产99精品视频| jizz欧美性11| 丝袜美腿亚洲综合| 能在线观看的av| 亚洲久久视频| 男人添女人下部视频免费| 91精品推荐| 亚洲一二三区精品| 不卡中文字幕| 色视频一区二区三区| 伊甸园亚洲一区| 久久精品成人一区二区三区蜜臀| av毛片精品| 国产精选一区二区| 岛国成人av| 国产高清精品一区| 99re8这里有精品热视频8在线| 亚洲va电影大全| 久久的色偷偷| 91嫩草在线| 亚洲精品在线a| 99精品国产一区二区| 日本一区影院| 成人午夜电影免费在线观看| 日本99精品| 国产精品久久久一区二区三区| 亚洲午夜免费| 国产中文一区二区| 日韩高清在线免费观看| 狠狠色综合欧美激情| 自拍偷拍欧美一区| 日韩精品资源| 欧美好骚综合网| 韩国黄色一级大片| 你懂的视频一区二区| 日韩黄色片在线| 亚洲国产高清一区二区三区| 国产一区二区网| 视频一区免费在线观看| 精品999在线| 韩国成人福利片在线播放| 乳色吐息在线观看| 成人国产精品免费观看动漫| 风间由美一二三区av片| 久久综合九色综合97_久久久| 麻豆精品免费视频| 国产精品久久久久毛片软件| 肉色超薄丝袜脚交69xx图片| 亚洲黄色免费网站| 日本一本高清视频| 在线视频一区二区三| 一级黄色大片免费| 日韩免费观看高清完整版在线观看| 亚洲国产精品久久久久爰性色 | 免费av毛片在线看| 色综合久综合久久综合久鬼88| 超碰中文在线| 国产精品高潮视频| 91精品尤物| 欧美最大成人综合网| 天天综合网91| 亚洲熟妇无码另类久久久| 蜜臀av性久久久久av蜜臀妖精| 91在线第一页| 91蜜桃免费观看视频| 国产jizz18女人高潮| 亚洲国产精品久久久久婷婷884| 免费又黄又爽又猛大片午夜| 在线不卡欧美精品一区二区三区| 六月丁香色婷婷| 中日韩午夜理伦电影免费| 蜜乳av一区| 国产精品永久免费| 老牛精品亚洲成av人片| 亚洲精品一区国产精品| 韩国亚洲精品| 日韩高清第一页| wwwwxxxxx欧美| www.xxxx日本| 91传媒视频在线播放| 亚洲精品久久久久avwww潮水| 亚洲色图av在线| 丁香影院在线| 成人高清视频观看www| 亚洲精品国产动漫| 精品久久久无码人妻字幂| 奇米888四色在线精品| www.17c.com喷水少妇| 最新热久久免费视频| 无码人妻av免费一区二区三区| 日韩一区二区免费在线电影| 可以直接在线观看的av| 97色在线观看| 欧州一区二区三区| 亚洲精品一区国产精品| 美女网站久久| 亚洲第一黄色网址| 亚洲午夜日本在线观看| 国产又粗又猛又爽又黄的视频一| 亚洲片国产一区一级在线观看| 日本在线视频中文有码| 91夜夜未满十八勿入爽爽影院 | 一级久久久久久| 亚洲激情国产精品| 伊人福利在线| 亚洲曰本av电影| 天天综合精品| 亚洲高清视频免费| 国产精品看片你懂得| 成人免费毛片男人用品| 日韩精品电影网| 在线免费日韩片| 精品国产一区二区三区麻豆免费观看完整版| 欧美韩日高清| www.色就是色.com| 国产精品久久久久久久第一福利| wwwwww在线观看| 亚洲欧美中文字幕在线一区| 天堂av中文在线观看| 久久99精品久久久久久秒播放器| 亚洲香蕉网站| 国产清纯白嫩初高中在线观看性色| 亚洲女人****多毛耸耸8| 国产影视一区二区| www.xxxx精品| 99tv成人影院| 男插女免费视频| 国产麻豆精品一区二区| 国产大学生自拍| 欧美不卡在线视频| 超碰在线97国产| 久久久福利视频| 国产一区二区三区久久久久久久久 | 国产一区二区三区四区五区美女| 日本精品在线免费观看| 欧美一区二区在线看| 午夜av在线播放| 成人国产一区二区| 亚洲精选成人| 永久免费成人代码| 欧美亚洲国产一区二区三区| 137大胆人体在线观看| 国产一区二区丝袜| 欧美一区二区三区另类| 激情小说欧美色图| 狠狠躁夜夜躁人人爽天天天天97| 日本一二三区在线视频| 国产精品天天狠天天看| 99国产**精品****| 制服丝袜在线第一页| 欧美午夜激情视频| 成人免费在线电影| 亚洲www视频| 亚洲第一黄网| 中文字幕有码在线播放| 欧美高清dvd| av岛国在线| 亚洲国产一区二区在线| 国产另类ts人妖一区二区| 久久久国产精品成人免费| 色999日韩欧美国产| 一区二区在线免费播放| 久久无码高潮喷水| 日韩美女视频19| 五月婷婷综合久久| 国产成人福利视频| 亚洲美女视频| 野外性满足hd| 91精品国产91久久久久久一区二区 | 国产在线视频你懂得| 91免费精品视频| 日韩午夜av| 性欧美videos| 亚洲免费福利视频| 日本一区二区三区电影免费观看| 亚洲人成色77777| 亚洲福利电影网| 秋霞成人影院| 精品视频免费观看| 激情欧美一区二区三区在线观看|