91av视频/亚洲h视频/操亚洲美女/外国一级黄色毛片 - 国产三级三级三级三级

  • 大小: 68.91MB
    文件類型: .zip
    金幣: 2
    下載: 2 次
    發布日期: 2022-01-03
  • 語言: Python
  • 標簽: Python??人臉合成??

資源簡介

如今,隨著技術的不斷進步,“變臉”技術不再是四川喜劇的“獨門武功”。運用機器學習的方法,我們同樣可以實現人臉“融合”。當然這里說的人臉融合指的是將兩個人的人臉照片進行融合,至于融合的比例,要按照自己的喜好來定。代碼說明見:https://blog.csdn.net/m0_38106923/article/details/88856471

資源截圖

代碼片段和文件信息

import?numpy?as?np
import?cv2
import?dlib
from?scipy.spatial?import?Delaunay


predictor_model?=?‘shape_predictor_68_face_landmarks.dat‘


def?get_points(image):??#?用?dlib?來得到人臉的特征點

????face_detector?=?dlib.get_frontal_face_detector()??#?正向人臉檢測器,進行人臉檢測,提取人臉外部矩形框
????face_pose_predictor?=?dlib.shape_predictor(predictor_model)
????try:
????????detected_face?=?face_detector(image?1)[0]
????except:
????????print(‘No?face?detected?in?image?{}‘.format(image))
????pose_landmarks?=?face_pose_predictor(image?detected_face)??#?獲取landmark
????points?=?[]
????for?p?in?pose_landmarks.parts():
????????points.append([p.x?p.y])

????#?加入四個頂點和四條邊的中點
????x?=?image.shape[1]?-?1
????y?=?image.shape[0]?-?1
????points.append([0?0])
????points.append([x?//?2?0])
????points.append([x?0])
????points.append([x?y?//?2])
????points.append([x?y])
????points.append([x?//?2?y])
????points.append([0?y])
????points.append([0?y?//?2])

????return?np.array(points)


def?get_triangles(points):??#??在特征點上使用?Delaunay?三角剖分,將點集連接成一定大小的三角形,且分配要相對合理,才能呈現出漂亮的三角化
????return?Delaunay(points).simplices


def?affine_transform(input_image?input_triangle?output_triangle?size):??#?對人臉進行仿射變換,確定位置
????warp_matrix?=?cv2.getAffineTransform(
????????np.float32(input_triangle)?np.float32(output_triangle))
????output_image?=?cv2.warpAffine(input_image?warp_matrix?(size[0]?size[1])?None
??????????????????????????????????flags=cv2.INTER_LINEAR?borderMode=cv2.BORDER_REFLECT_101)
????return?output_image


def?morph_triangle(img1?img2?img?tri1?tri2?tri?alpha):??#?三角形變形,Alpha?混合
????#?計算三角形的邊界框
????rect1?=?cv2.boundingRect(np.float32([tri1]))??#?尋找tri1的左上角坐標,和tri1的長和寬
????rect2?=?cv2.boundingRect(np.float32([tri2]))
????rect?=?cv2.boundingRect(np.float32([tri]))

????tri_rect1?=?[]
????tri_rect2?=?[]
????tri_rect_warped?=?[]

????for?i?in?range(0?3):
????????tri_rect_warped.append(
????????????((tri[i][0]?-?rect[0])?(tri[i][1]?-?rect[1])))
????????tri_rect1.append(
????????????((tri1[i][0]?-?rect1[0])?(tri1[i][1]?-?rect1[1])))
????????tri_rect2.append(
????????????((tri2[i][0]?-?rect2[0])?(tri2[i][1]?-?rect2[1])))

????#?在邊界框內進行仿射變換
????img1_rect?=?img1[rect1[1]:rect1[1]?+
?????????????????????rect1[3]?rect1[0]:rect1[0]?+?rect1[2]]
????img2_rect?=?img2[rect2[1]:rect2[1]?+
?????????????????????rect2[3]?rect2[0]:rect2[0]?+?rect2[2]]

????size?=?(rect[2]?rect[3])
????warped_img1?=?affine_transform(
????????img1_rect?tri_rect1?tri_rect_warped?size)
????warped_img2?=?affine_transform(
????????img2_rect?tri_rect2?tri_rect_warped?size)

????#?加權求和
????img_rect?=?(1.0?-?alpha)?*?warped_img1?+?alpha?*?warped_img2

????#?生成模板
????mask?=?np.zeros((rect[3]?rect[2]?3)?dtype=np.float32)
????cv2.fillConvexPoly(mask?np.int32(tri_rect_warped)?(1.0?1.0?1.0)?16?0)

????#?應用模板
????img[rect[1]:rect[1]?+?rect[3]?rect[0]:rect[0]?+?rect[2]]?=?\
????????img[rect[1]:rect[1]?+?rect[3]?rect[0]:rect[0]?+
????????????rect[2]]?*?(1?-?mask)?+?img_rect?*?mask


def?morph_faces(filename1?fi

?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????目錄???????????0??2019-04-02?14:31??Python+Dlib庫實現人臉合成\
?????文件??????220262??2019-03-27?14:14??Python+Dlib庫實現人臉合成\bg.png
?????文件????????4726??2019-03-27?14:06??Python+Dlib庫實現人臉合成\face_morhper.py
?????文件???????37479??2019-03-26?19:33??Python+Dlib庫實現人臉合成\im1.jpg
?????文件???????44083??2019-03-27?14:12??Python+Dlib庫實現人臉合成\im2.jpg
?????文件????????3359??2019-03-27?13:48??Python+Dlib庫實現人臉合成\interface.py
?????文件???????57224??2019-03-28?14:46??Python+Dlib庫實現人臉合成\m1_2_0.5.jpg
?????文件????99693937??2018-05-20?11:29??Python+Dlib庫實現人臉合成\shape_predictor_68_face_landmarks.dat

評論

共有 條評論