日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 人工智能 > pytorch >内容正文

pytorch

创意赛第二季又来了,PaddleHub人脸关键点检测实现猫脸人嘴特效

發(fā)布時間:2025/1/21 pytorch 109 豆豆
生活随笔 收集整理的這篇文章主要介紹了 创意赛第二季又来了,PaddleHub人脸关键点检测实现猫脸人嘴特效 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

前段時間,下班后閑來無事,參加了百度PaddleHub的AI人像摳圖創(chuàng)意賽,憑借著大家的閱讀量,獲得了一個第三名,得了一個小度音響,真香啊!

對,說的是我小獎品

PaddleHub創(chuàng)意賽第二期又出來了,這次要做什么呢?

「人臉檢測主題創(chuàng)意賽」,愛搞事的我肯定是少不了搞一波事情的,想想這能玩出什么花樣來?

下班路上刷知乎,看見有人用dlib + 貓臉檢測器 + 泊松融合實現(xiàn)了抖音貓臉人嘴的特效,瞬間……

程序主要結(jié)合PaddleHub的人臉關(guān)鍵點模型截取人嘴位置,opencv貓臉檢測器定位貓臉(沒找到貓臉關(guān)鍵點檢測模型)和opencv泊松融合函數(shù)實現(xiàn)圖像的融合,共三部分。貓臉人嘴視頻效果,一睹為快。

人臉關(guān)鍵點檢測

PaddleHub關(guān)鍵點檢測模型face_landmark_localization,該模型轉(zhuǎn)換自 https://github.com/lsy17096535/face-landmark ,支持同一張圖中的多個人臉檢測。它可以識別人臉中的68個關(guān)鍵點。

「NOTE:」 如果您在本地運行該項目示例,需要首先安裝PaddleHub。如果您在線運行,可以去底部閱讀原文的百度AI Studio fork該項目。之后按照該示例操作即可。


用《青春有你2》的小姐姐們測試一下。

import cv2 import paddlehub as hub import matplotlib.pyplot as plt import matplotlib.image as mpimg import numpy as np import math %matplotlib inlinesrc_img = cv2.imread('images/youngni2.jpg')module = hub.Module(name="face_landmark_localization") result = module.keypoint_detection(images=[src_img])tmp_img = src_img.copy() for face in result[0]['data']:for index, point in enumerate(face):# print(point)# cv2.putText(img, str(index), (int(point[0]), int(point[1])), cv2.FONT_HERSHEY_COMPLEX, 3, (0,0,255), -1)cv2.circle(tmp_img, (int(point[0]), int(point[1])), 2, (0, 0, 255), -1)res_img_path = 'face_landmark.jpg' cv2.imwrite(res_img_path, tmp_img)img = mpimg.imread(res_img_path) # 展示預(yù)測68個關(guān)鍵點結(jié)果 plt.figure(figsize=(10,10)) plt.imshow(img) plt.axis('off') plt.show() 人臉關(guān)鍵點檢測結(jié)果

貓臉檢測

貓臉檢測使用OpenCV自帶的貓臉檢測器(感覺喵星人真的是要統(tǒng)治世界了????),主要通過detectMultiScale函數(shù)對圖像金字塔進(jìn)行多尺度檢測。

import cv2 import numpy as np# 貓臉檢測器 cat_path = "haarcascade_frontalcatface_extended.xml" facecascade = cv2.CascadeClassifier(cat_path)cat = cv2.imread('cat3.jpg')cat_gray = cv2.cvtColor(cat, cv2.COLOR_BGR2GRAY) cat_face_loc = facecascade.detectMultiScale(cat_gray,scaleFactor = 1.1,minNeighbors=3,minSize=(100,100),flags=cv2.CASCADE_SCALE_IMAGE) cat_face_loc = np.array(cat_face_loc[0]) # 貓嘴中心位置 center = (int(cat_face_loc[0] + cat_face_loc[2] / 2), int(cat_face_loc[1] + cat_face_loc[3]*0.8))cv2.rectangle(cat, (cat_face_loc[0], cat_face_loc[1]), (cat_face_loc[0] + cat_face_loc[2], cat_face_loc[1] + cat_face_loc[3]), (0, 255, 0), 2, 8) cv2.circle(cat, center, 2, (0, 0, 255), 3) cv2.imwrite('cat_face.jpg', cat) cv2.imshow('result', cat) cv2.waitKey(0) 貓臉檢測結(jié)果

泊松融合

泊松融合是2004年論文《Poisson Image Editing》提出的方法,已經(jīng)集成在OpenCV中,函數(shù)名為:seamlessClone()

泊松融合是將一個源圖融合到目標(biāo)圖像中,放置位置根據(jù)目標(biāo)圖像中P點為中心的一個前景mask大小范圍內(nèi)。融合過程會改變源圖像中顏色以及梯度,實現(xiàn)無縫融合效果,具體算法可以去看論文或者文末參考文獻(xiàn)。

論文截圖

話不多說,下面用代碼實現(xiàn)將人眼貼到手心上,人眼mask沒有很精準(zhǔn),效果一般,膽小勿看????

import cv2 import numpy as nphand = cv2.imread('hand.jpg') eye = cv2.imread('eye.jpg') h, w, c = eye.shape mask = np.ones((h, w, c)) * 255center = (hand.shape[1] // 2 + 50, hand.shape[0] // 2 + 250) normal_clone = cv2.seamlessClone(eye, hand, mask.astype(eye.dtype), center, cv2.NORMAL_CLONE) cv2.imwrite('res.jpg', normal_clone) cv2.imshow('res', normal_clone) cv2.waitKey(0)

綜合上面三部分,我們可以將人嘴定位并截取融合到貓臉嘴巴位置,由于檢測視頻中貓臉會出現(xiàn)漏檢情況,效果不是很好(找一只不愛動的貓片實在太難了),于是我用了一張靜態(tài)的圖片進(jìn)行替換,另外唱歌視頻也來自網(wǎng)絡(luò)。

import cv2 import numpy as np import paddlehub as hub# 人臉關(guān)鍵點檢測器 module = hub.Module(name="face_landmark_localization") # 貓臉檢測器 cat_path = "data/model/haarcascade_frontalcatface_extended.xml" facecascade = cv2.CascadeClassifier(cat_path)cat = cv2.imread('data/images/cat3.jpg') cat_gray = cv2.cvtColor(cat, cv2.COLOR_BGR2GRAY) cat_face_loc = facecascade.detectMultiScale(cat_gray, scaleFactor=1.1, minNeighbors=3, minSize=(100, 100),flags=cv2.CASCADE_SCALE_IMAGE) cat_face_loc = np.array(cat_face_loc[0]) # 貓嘴中心位置 center = (int(cat_face_loc[0] + cat_face_loc[2] / 2), int(cat_face_loc[1] + cat_face_loc[3] * 0.8))def human_mouth_paste_to_cat(human_frame, cat_frame):result = module.keypoint_detection(images=[human_frame])landmarks = result[0]['data'][0]landmarks = np.array(landmarks, dtype=np.int)mouth_landmark = landmarks[48:, :]# 擴(kuò)個邊border = 8mouth = human_frame[int(np.min(mouth_landmark[:, 1])) - border: int(np.max(mouth_landmark[:, 1]) + border),int(np.min(mouth_landmark[:, 0])) - border: int(np.max(mouth_landmark[:, 0])) + border, :]mouth_landmark[:, 0] -= (np.min(mouth_landmark[:, 0]) - border)mouth_landmark[:, 1] -= (np.min(mouth_landmark[:, 1]) - border)# 制作用于泊松融合的maskmask = np.zeros((mouth.shape[0], mouth.shape[1], 3)).astype(np.float32)for i in range(mouth_landmark.shape[0]): # 先畫線cv2.line(mask, (mouth_landmark[i, 0], mouth_landmark[i, 1]), (mouth_landmark[(i + 1) % mouth_landmark.shape[0], 0], mouth_landmark[(i + 1) % mouth_landmark.shape[0], 1]),(255, 255, 255), 10)mask_tmp = mask.copy()for i in range(6, mask.shape[0] - 6): # 將線內(nèi)部的范圍都算作mask=255for j in range(6, mask.shape[1] - 6):if (np.max(mask_tmp[:i, :j, :]) == 0 or np.max(mask_tmp[i:, :j, :]) == 0 or np.max(mask_tmp[:i, j:, :]) == 0 or np.max(mask_tmp[i:, j:, :]) == 0):mask[i, j, :] = 0else:mask[i, j, :] = 255normal_clone = cv2.seamlessClone(mouth, cat_frame, mask.astype(mouth.dtype), center, cv2.NORMAL_CLONE)return normal_clone# 合成視頻 human_video_cap = cv2.VideoCapture("data/video/human2.mp4") fourcc = cv2.VideoWriter_fourcc('m', 'p', '4', 'v') video_writer = cv2.VideoWriter('cat_with_humanmouth2.MP4', fourcc, 25, (1080, 2340))index = 0 while True:index += 1human_ret, human_frame = human_video_cap.read()if human_ret:human_frame = cv2.resize(human_frame, dsize=None, fx=2, fy=2)cat_with_human_mouth = human_mouth_paste_to_cat(human_frame, cat)video_writer.write(cat_with_human_mouth.astype(np.uint8))# cv2.imwrite("frame/%d.jpg" % index, cat_with_human_mouth)else:breakvideo_writer.release()

輸出效果看文章最前面視頻,音頻是后來自己加上的。

?

參考:

  • 貓臉人嘴:https://zhuanlan.zhihu.com/p/61590075

  • Seamless cloning泊松克隆: https://blog.csdn.net/hjimce/article/details/45716603

  • opencv貓臉檢測器:

    https://github.com/opencv/opencv/tree/master/data/haarcascades

  • ?

    往期閱讀

    • PaddleHub人像分割模型:AI人像摳圖及圖像合成

    • 【推薦】一下令人驚艷的的網(wǎng)站,絕對會讓你愛上歷史

    • 蹭一波熱度,對《青春有你2》109位漂亮小姐姐下手了

    • Scrapy爬取姓名大全,看看那個名字最受父母青睞

    • PyTorch模型微調(diào):汽車圖片分類

    長按二維碼關(guān)注我們

    有趣的靈魂在等你

    戳“閱讀原文”看AI Studio原項目,為我增加人氣!!!

    總結(jié)

    以上是生活随笔為你收集整理的创意赛第二季又来了,PaddleHub人脸关键点检测实现猫脸人嘴特效的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。