本文基于http://python.jobbole.com/82546/ 。
在使用文中的python代码时,需要准备好一个face_landmarks的特征库,这个特征库属于dlib的一部分,可以在这里下载
开始前需要先将依赖库将好,我使用的是fedora+python2,可以直接使用dnf来安装。
1 | dnf install python2-numpy |
示例中的图片谷歌了一个,也使用了同样的人物头像,如下
然后直接输入face_landmark_detection的路径,以及两位主角的图片路径作为参数,启动python脚本即可。
过程中可能会遇到以下的几个问题:
Traceback (most recent call last):
File “./face_change.py”, line 156, in
im1, landmarks1 = read_im_and_landmarks(sys.argv[1])
IndexError: list index out of range
这是没有正确地传入参数。
Traceback (most recent call last):
File “./face_change.py”, line 168, in
warped_corrected_im2 = correct_colours(im1, warped_im2, landmarks1)
File “./face_change.py”, line 151, in correct_colours
im2_blur += 128 * (im2_blur <= 1.0)
TypeError: Cannot cast ufunc add output from dtype(‘int64’) to dtype(‘uint8’) with casting rule ‘same_kind’
由于我使用的是64位系统,所以显示”dtype(‘int64’) to dtype(‘uint8’)”,如果是32位的可能会显示“dtype(‘int32’) to dtype(‘uint8’)”,这是类型转换的问题,需要将
1 | ..... |
修改为
1 | ..... |
修改后的完整代码如下:
1 | #!/usr/bin/python |
输入命令:
./xxx.py {landmarks} {pic1} {pic2}
最终会在同目录生成一个output.jpg,上述pic1与pic2的位置可换,使用pic2的脸,使用pic1的其他,生成的两张图片如下: