我們經常會遇到這樣的問題,報名參加考某種考試, 需要提交符合指定背景、尺寸要求的照片,但是手上只有生活中,或者照片尺寸符合要求,但是背景不符合要求的情況, 今天我教大家基于人臉識別和影像分割技術制作證件照,其關鍵代碼不足10行,

1. 讀取影像節點,使用PIL庫的Image物件的Open方法打開圖片
Image.open(fp)
2. 修改尺寸節點,使用if……else判斷陳述句 3. 人臉輪廓檢測節點,使用paddlepaddle深度學習框架,呼叫模face_landmark_localization推理
face_landmark = hub.Module(name="face_landmark_localization")
result = face_landmark.keypoint_detection(images=[np.array(raw_img)])
face = np.array(result[0]['data'][0], dtype=np.int64)
4. 裁剪尺寸節點,依據步驟3人臉輪廓,根據人臉裁剪一定大小的圖片
face[:, 0].min()
right = face[:, 0].max()
w = right - left
cw = (right+left) // 2
upper = face[:, 1].min()
lower = face[:, 1].max()
# h = lower - upper
ch = (lower + upper) // 2
h = crop_size[1] * w // crop_size[0]
box = (cw - rate * w, ch-rate * h, cw + rate * w, ch + rate * h)
cropped_img = raw_img.crop(box)
5. 人物分割節點,使用tensorflow深度學習框架,呼叫模型DeepLab推理
resized_image, seg_map = model.run(img) # model為DeepLabV3
6. 修改背景節點,使用opencv庫,對非人物區域進行膨脹操作,然后修改非人物區間rgb值
person = []
mask = np.array((mask < 180), dtype=np.uint8)
mask = cv.dilate(mask, None, iterations=2)
mask = np.array(mask, dtype=np.bool)
for i in range(3):
a = img[i]
a[mask] = rgb[i]
person.append(a)
img = np.array(person).transpose((1, 2, 0))
new_image = Image.fromarray(img)
std_new_img = new_image.resize(std_size, Image.ANTIALIAS)
7. 保存影像節點,使用PIL庫的Image物件的save方法保存圖片
img2.save(out_path + file_name)
完整代碼參考地址:https://github.com/actboy/ai-id-photo/blob/master/src/algo/precision_id_photo.py 應用示例 該功能十分有用,我把該功能開發成了一個web小應用,分享出來免費使用, 訪問地址:在線證件照 todo 1. 訓練face_landmark_localization模型 2. 訓練DeepLabV3模型
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/377237.html
標籤:其他
上一篇:DeepLabV2網路簡析
下一篇:vs2015配置vcpkg
