From d25cdda238bd9708c5a6cb9b82308e141a2466aa Mon Sep 17 00:00:00 2001 From: Ze-Yi LIN <58305964+Zeyi-Lin@users.noreply.github.com> Date: Thu, 12 Sep 2024 14:31:24 +0800 Subject: [PATCH] feat: whitening-beauty-plugin (#111) --- .gitignore | 1 + demo/locals.py | 16 ++ demo/processor.py | 12 +- demo/ui.py | 26 ++ hivision/creator/__init__.py | 19 +- hivision/creator/context.py | 6 + hivision/plugin/beauty/__init__.py | 1 + hivision/plugin/beauty/beauty_tools.py | 49 ++++ hivision/plugin/beauty/grind_skin.py | 44 ++++ hivision/plugin/beauty/lut/lut_origin.png | Bin 0 -> 105798 bytes hivision/plugin/beauty/thin_face.py | 304 ++++++++++++++++++++++ hivision/plugin/beauty/whitening.py | 83 ++++++ 12 files changed, 556 insertions(+), 5 deletions(-) create mode 100644 hivision/plugin/beauty/__init__.py create mode 100644 hivision/plugin/beauty/beauty_tools.py create mode 100644 hivision/plugin/beauty/grind_skin.py create mode 100644 hivision/plugin/beauty/lut/lut_origin.png create mode 100644 hivision/plugin/beauty/thin_face.py create mode 100644 hivision/plugin/beauty/whitening.py diff --git a/.gitignore b/.gitignore index 7ed2541..a13d7b9 100644 --- a/.gitignore +++ b/.gitignore @@ -7,6 +7,7 @@ .env demo/kb_output/*.jpg demo/kb_output/*.png +**/flagged/ # build outputs dist build diff --git a/demo/locals.py b/demo/locals.py index aa26848..03c2334 100644 --- a/demo/locals.py +++ b/demo/locals.py @@ -292,4 +292,20 @@ LOCALES = { "label": "抠图图像", }, }, + "beauty_tab": { + "en": { + "label": "Beauty", + }, + "zh": { + "label": "美颜", + }, + }, + "whitening_strength": { + "en": { + "label": "whitening strength", + }, + "zh": { + "label": "美白强度", + }, + }, } diff --git a/demo/processor.py b/demo/processor.py index afc5f81..28b979e 100644 --- a/demo/processor.py +++ b/demo/processor.py @@ -41,7 +41,7 @@ class IDPhotoProcessor: face_detect_option, head_measure_ratio=0.2, top_distance_max=0.12, - top_distance_min=0.10, + whitening_strength=0, ): top_distance_min = top_distance_max - 0.02 @@ -115,6 +115,7 @@ class IDPhotoProcessor: idphoto_json["size_mode"] in LOCALES["size_mode"][language]["choices"][1] ) + # 生成证件照 try: result = creator( input_image, @@ -122,7 +123,9 @@ class IDPhotoProcessor: size=idphoto_json["size"], head_measure_ratio=head_measure_ratio, head_top_range=(top_distance_max, top_distance_min), + whitening_strength=whitening_strength, ) + # 如果检测到人脸数量不等于1 except FaceError: return [ gr.update(value=None), # img_output_standard @@ -136,7 +139,7 @@ class IDPhotoProcessor: ), None, # file_download (assuming it should be None or have no update) ] - + # 如果 API 错误 except APIError as e: return [ gr.update(value=None), # img_output_standard @@ -150,13 +153,14 @@ class IDPhotoProcessor: ), None, # file_download (assuming it should be None or have no update) ] - + # 证件照生成正常 else: (result_image_standard, result_image_hd, _, _, _, _) = result result_image_standard_png = np.uint8(result_image_standard) result_image_hd_png = np.uint8(result_image_hd) + # 纯色渲染 if ( idphoto_json["render_mode"] == LOCALES["render_mode"][language]["choices"][0] @@ -167,6 +171,7 @@ class IDPhotoProcessor: result_image_hd = np.uint8( add_background(result_image_hd, bgr=idphoto_json["color_bgr"]) ) + # 上下渐变渲染 elif ( idphoto_json["render_mode"] == LOCALES["render_mode"][language]["choices"][1] @@ -185,6 +190,7 @@ class IDPhotoProcessor: mode="updown_gradient", ) ) + # 中心渐变渲染 else: result_image_standard = np.uint8( add_background( diff --git a/demo/ui.py b/demo/ui.py index 7c50394..6c70b6c 100644 --- a/demo/ui.py +++ b/demo/ui.py @@ -63,6 +63,7 @@ def create_ui( value=human_matting_models[0], ) + # TAB1 - 关键参数 with gr.Tab( LOCALES["key_param"][DEFAULT_LANG]["label"] ) as key_parameter_tab: @@ -105,6 +106,7 @@ def create_ui( value=LOCALES["render_mode"][DEFAULT_LANG]["choices"][0], ) + # TAB2 - 高级参数 with gr.Tab( LOCALES["advance_param"][DEFAULT_LANG]["label"] ) as advance_parameter_tab: @@ -140,6 +142,20 @@ def create_ui( interactive=True, ) + # TAB3 - 美颜 + with gr.Tab( + LOCALES["beauty_tab"][DEFAULT_LANG]["label"] + ) as beauty_parameter_tab: + whitening_option = gr.Slider( + label=LOCALES["whitening_strength"][DEFAULT_LANG]["label"], + minimum=0, + maximum=10, + value=2, + step=1, + interactive=True, + ) + + # TAB4 - 水印 with gr.Tab( LOCALES["watermark_tab"][DEFAULT_LANG]["label"] ) as watermark_parameter_tab: @@ -387,6 +403,12 @@ def create_ui( matting_image_accordion: gr.update( label=LOCALES["matting_image"][language]["label"] ), + beauty_parameter_tab: gr.update( + label=LOCALES["beauty_tab"][language]["label"] + ), + whitening_option: gr.update( + label=LOCALES["whitening_strength"][language]["label"] + ), } def change_color(colors): @@ -425,6 +447,7 @@ def create_ui( return {custom_image_kb: gr.update(visible=False)} # ---------------- 绑定事件 ---------------- + # 语言切换 language_options.input( change_language, inputs=[language_options], @@ -458,6 +481,8 @@ def create_ui( watermark_text_space, watermark_options, matting_image_accordion, + beauty_parameter_tab, + whitening_option, ], ) @@ -502,6 +527,7 @@ def create_ui( face_detect_model_options, head_measure_ratio_option, top_distance_option, + whitening_option, ], outputs=[ img_output_standard, diff --git a/hivision/creator/__init__.py b/hivision/creator/__init__.py index 378e1d2..90de7a0 100644 --- a/hivision/creator/__init__.py +++ b/hivision/creator/__init__.py @@ -12,7 +12,8 @@ from typing import Tuple import hivision.creator.utils as U from .context import Context, ContextHandler, Params, Result from .human_matting import extract_human -from .face_detector import detect_face_mtcnn, detect_face_face_plusplus +from .face_detector import detect_face_mtcnn +from hivision.plugin.beauty.whitening import make_whitening from .photo_adjuster import adjust_photo @@ -56,15 +57,19 @@ class IDCreator: head_height_ratio: float = 0.45, head_top_range: float = (0.12, 0.1), face: Tuple[int, int, int, int] = None, + whitening_strength: int = 0, ) -> Result: """ 证件照处理函数 :param image: 输入图像 - :param change_bg_only: 是否只需要换底 + :param change_bg_only: 是否只需要抠图 + :param crop_only: 是否只需要裁剪 :param size: 输出的图像大小(h,w) :param head_measure_ratio: 人脸面积与全图面积的期望比值 :param head_height_ratio: 人脸中心处在全图高度的比例期望值 :param head_top_range: 头距离顶部的比例(max,min) + :param face: 人脸坐标 + :param whitening_strength: 美白强度 :return: 返回处理后的证件照和一系列参数 """ @@ -77,6 +82,7 @@ class IDCreator: head_top_range=head_top_range, crop_only=crop_only, face=face, + whitening_strength=whitening_strength, ) self.ctx = Context(params) ctx = self.ctx @@ -87,8 +93,15 @@ class IDCreator: ctx.origin_image = ctx.processing_image.copy() self.before_all and self.before_all(ctx) + # 美白 + if ctx.params.whitening_strength > 0: + ctx.processing_image = make_whitening( + ctx.processing_image, ctx.params.whitening_strength + ) + # 1. 人像抠图 if not ctx.params.crop_only: + # 调用抠图工作流 self.matting_handler(ctx) self.after_matting and self.after_matting(ctx) else: @@ -115,6 +128,8 @@ class IDCreator: result_image_hd, result_image_standard, clothing_params, typography_params = ( adjust_photo(ctx) ) + + # 4. 返回结果 ctx.result = Result( standard=result_image_standard, hd=result_image_hd, diff --git a/hivision/creator/context.py b/hivision/creator/context.py index 58c8e4d..f59cae3 100644 --- a/hivision/creator/context.py +++ b/hivision/creator/context.py @@ -21,6 +21,7 @@ class Params: head_height_ratio: float = 0.45, head_top_range: float = (0.12, 0.1), face: Tuple[int, int, int, int] = None, + whitening_strength: int = 0, ): self.__size = size self.__change_bg_only = change_bg_only @@ -29,6 +30,7 @@ class Params: self.__head_height_ratio = head_height_ratio self.__head_top_range = head_top_range self.__face = face + self.__whitening_strength = whitening_strength @property def size(self): @@ -58,6 +60,10 @@ class Params: def face(self): return self.__face + @property + def whitening_strength(self): + return self.__whitening_strength + class Result: def __init__( diff --git a/hivision/plugin/beauty/__init__.py b/hivision/plugin/beauty/__init__.py new file mode 100644 index 0000000..3cfb398 --- /dev/null +++ b/hivision/plugin/beauty/__init__.py @@ -0,0 +1 @@ +from .beauty_tools import BeautyTools diff --git a/hivision/plugin/beauty/beauty_tools.py b/hivision/plugin/beauty/beauty_tools.py new file mode 100644 index 0000000..758f3c7 --- /dev/null +++ b/hivision/plugin/beauty/beauty_tools.py @@ -0,0 +1,49 @@ +""" +@author: cuny +@file: MakeBeautiful.py +@time: 2022/7/7 20:23 +@description: +美颜工具集合文件,作为暴露在外的插件接口 +""" + +from .grind_skin import grindSkin +from .whitening import MakeWhiter +from .thin_face import thinFace +import numpy as np + + +def BeautyTools( + input_image: np.ndarray, + landmark, + thinStrength: int, + thinPlace: int, + grindStrength: int, + whiterStrength: int, +) -> np.ndarray: + """ + 美颜工具的接口函数,用于实现美颜效果 + Args: + input_image: 输入的图像 + landmark: 瘦脸需要的人脸关键点信息,为fd68返回的第二个参数 + thinStrength: 瘦脸强度,为0-10(如果更高其实也没什么问题),当强度为0或者更低时,则不瘦脸 + thinPlace: 选择瘦脸区域,为0-2之间的值,越大瘦脸的点越靠下 + grindStrength: 磨皮强度,为0-10(如果更高其实也没什么问题),当强度为0或者更低时,则不磨皮 + whiterStrength: 美白强度,为0-10(如果更高其实也没什么问题),当强度为0或者更低时,则不美白 + Returns: + output_image 输出图像 + """ + try: + _, _, _ = input_image.shape + except ValueError: + raise TypeError("输入图像必须为3通道或者4通道!") + # 三通道或者四通道图像 + # 首先进行瘦脸 + input_image = thinFace( + input_image, landmark, place=thinPlace, strength=thinStrength + ) + # 其次进行磨皮 + input_image = grindSkin(src=input_image, strength=grindStrength) + # 最后进行美白 + makeWhiter = MakeWhiter() + input_image = makeWhiter.run(input_image, strength=whiterStrength) + return input_image diff --git a/hivision/plugin/beauty/grind_skin.py b/hivision/plugin/beauty/grind_skin.py new file mode 100644 index 0000000..3040284 --- /dev/null +++ b/hivision/plugin/beauty/grind_skin.py @@ -0,0 +1,44 @@ +""" +@author: cuny +@file: GrindSkin.py +@time: 2022/7/2 14:44 +@description: +磨皮算法 +""" + +import cv2 +import numpy as np + + +def grindSkin(src, grindDegree: int = 3, detailDegree: int = 1, strength: int = 9): + """ + Dest =(Src * (100 - Opacity) + (Src + 2 * GaussBlur(EPFFilter(Src) - Src)) * Opacity) /100 + 人像磨皮方案,后续会考虑使用一些皮肤区域检测算法来实现仅皮肤区域磨皮,增加算法的精细程度——或者使用人脸关键点 + https://www.cnblogs.com/Imageshop/p/4709710.html + Args: + src: 原图 + grindDegree: 磨皮程度调节参数 + detailDegree: 细节程度调节参数 + strength: 融合程度,作为磨皮强度(0 - 10) + + Returns: + 磨皮后的图像 + """ + if strength <= 0: + return src + dst = src.copy() + opacity = min(10.0, strength) / 10.0 + dx = grindDegree * 5 # 双边滤波参数之一 + fc = grindDegree * 12.5 # 双边滤波参数之一 + temp1 = cv2.bilateralFilter(src[:, :, :3], dx, fc, fc) + temp2 = cv2.subtract(temp1, src[:, :, :3]) + temp3 = cv2.GaussianBlur(temp2, (2 * detailDegree - 1, 2 * detailDegree - 1), 0) + temp4 = cv2.add(cv2.add(temp3, temp3), src[:, :, :3]) + dst[:, :, :3] = cv2.addWeighted(temp4, opacity, src[:, :, :3], 1 - opacity, 0.0) + return dst + + +if __name__ == "__main__": + input_image = cv2.imread("test_image/7.jpg") + output_image = grindSkin(src=input_image) + cv2.imwrite("grindSkinCompare.png", np.hstack((input_image, output_image))) diff --git a/hivision/plugin/beauty/lut/lut_origin.png b/hivision/plugin/beauty/lut/lut_origin.png new file mode 100644 index 0000000000000000000000000000000000000000..743fc12be388fab214c416b888b5abff892e9218 GIT binary patch literal 105798 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 literal 0 HcmV?d00001 diff --git a/hivision/plugin/beauty/thin_face.py b/hivision/plugin/beauty/thin_face.py new file mode 100644 index 0000000..6e92133 --- /dev/null +++ b/hivision/plugin/beauty/thin_face.py @@ -0,0 +1,304 @@ +""" +@author: cuny +@file: ThinFace.py +@time: 2022/7/2 15:50 +@description: +瘦脸算法,用到了图像局部平移法 +先使用人脸关键点检测,然后再使用图像局部平移法 +需要注意的是,这部分不会包含dlib人脸关键点检测,因为考虑到模型载入的问题 +""" + +import cv2 +import math +import numpy as np + + +class TranslationWarp(object): + """ + 本类包含瘦脸算法,由于瘦脸算法包含了很多个版本,所以以类的方式呈现 + 前两个算法没什么好讲的,网上资料很多 + 第三个采用numpy内部的自定义函数处理,在处理速度上有一些提升 + 最后采用cv2.map算法,处理速度大幅度提升 + """ + + # 瘦脸 + @staticmethod + def localTranslationWarp(srcImg, startX, startY, endX, endY, radius): + # 双线性插值法 + def BilinearInsert(src, ux, uy): + w, h, c = src.shape + if c == 3: + x1 = int(ux) + x2 = x1 + 1 + y1 = int(uy) + y2 = y1 + 1 + part1 = ( + src[y1, x1].astype(np.float64) * (float(x2) - ux) * (float(y2) - uy) + ) + part2 = ( + src[y1, x2].astype(np.float64) * (ux - float(x1)) * (float(y2) - uy) + ) + part3 = ( + src[y2, x1].astype(np.float64) * (float(x2) - ux) * (uy - float(y1)) + ) + part4 = ( + src[y2, x2].astype(np.float64) * (ux - float(x1)) * (uy - float(y1)) + ) + insertValue = part1 + part2 + part3 + part4 + return insertValue.astype(np.int8) + + ddradius = float(radius * radius) # 圆的半径 + copyImg = srcImg.copy() # copy后的图像矩阵 + # 计算公式中的|m-c|^2 + ddmc = (endX - startX) * (endX - startX) + (endY - startY) * (endY - startY) + H, W, C = srcImg.shape # 获取图像的形状 + for i in range(W): + for j in range(H): + # # 计算该点是否在形变圆的范围之内 + # # 优化,第一步,直接判断是会在(startX,startY)的矩阵框中 + if math.fabs(i - startX) > radius and math.fabs(j - startY) > radius: + continue + distance = (i - startX) * (i - startX) + (j - startY) * (j - startY) + if distance < ddradius: + # 计算出(i,j)坐标的原坐标 + # 计算公式中右边平方号里的部分 + ratio = (ddradius - distance) / (ddradius - distance + ddmc) + ratio = ratio * ratio + # 映射原位置 + UX = i - ratio * (endX - startX) + UY = j - ratio * (endY - startY) + + # 根据双线性插值法得到UX,UY的值 + # start_ = time.time() + value = BilinearInsert(srcImg, UX, UY) + # print(f"双线性插值耗时;{time.time() - start_}") + # 改变当前 i ,j的值 + copyImg[j, i] = value + return copyImg + + # 瘦脸pro1, 限制了for循环的遍历次数 + @staticmethod + def localTranslationWarpLimitFor( + srcImg, startP: np.matrix, endP: np.matrix, radius: float + ): + startX, startY = startP[0, 0], startP[0, 1] + endX, endY = endP[0, 0], endP[0, 1] + + # 双线性插值法 + def BilinearInsert(src, ux, uy): + w, h, c = src.shape + if c == 3: + x1 = int(ux) + x2 = x1 + 1 + y1 = int(uy) + y2 = y1 + 1 + part1 = ( + src[y1, x1].astype(np.float64) * (float(x2) - ux) * (float(y2) - uy) + ) + part2 = ( + src[y1, x2].astype(np.float64) * (ux - float(x1)) * (float(y2) - uy) + ) + part3 = ( + src[y2, x1].astype(np.float64) * (float(x2) - ux) * (uy - float(y1)) + ) + part4 = ( + src[y2, x2].astype(np.float64) * (ux - float(x1)) * (uy - float(y1)) + ) + insertValue = part1 + part2 + part3 + part4 + return insertValue.astype(np.int8) + + ddradius = float(radius * radius) # 圆的半径 + copyImg = srcImg.copy() # copy后的图像矩阵 + # 计算公式中的|m-c|^2 + ddmc = (endX - startX) ** 2 + (endY - startY) ** 2 + # 计算正方形的左上角起始点 + startTX, startTY = ( + startX - math.floor(radius + 1), + startY - math.floor((radius + 1)), + ) + # 计算正方形的右下角的结束点 + endTX, endTY = ( + startX + math.floor(radius + 1), + startY + math.floor((radius + 1)), + ) + # 剪切srcImg + srcImg = srcImg[startTY : endTY + 1, startTX : endTX + 1, :] + # db.cv_show(srcImg) + # 裁剪后的图像相当于在x,y都减少了startX - math.floor(radius + 1) + # 原本的endX, endY在切后的坐标点 + endX, endY = ( + endX - startX + math.floor(radius + 1), + endY - startY + math.floor(radius + 1), + ) + # 原本的startX, startY剪切后的坐标点 + startX, startY = (math.floor(radius + 1), math.floor(radius + 1)) + H, W, C = srcImg.shape # 获取图像的形状 + for i in range(W): + for j in range(H): + # 计算该点是否在形变圆的范围之内 + # 优化,第一步,直接判断是会在(startX,startY)的矩阵框中 + # if math.fabs(i - startX) > radius and math.fabs(j - startY) > radius: + # continue + distance = (i - startX) * (i - startX) + (j - startY) * (j - startY) + if distance < ddradius: + # 计算出(i,j)坐标的原坐标 + # 计算公式中右边平方号里的部分 + ratio = (ddradius - distance) / (ddradius - distance + ddmc) + ratio = ratio * ratio + # 映射原位置 + UX = i - ratio * (endX - startX) + UY = j - ratio * (endY - startY) + + # 根据双线性插值法得到UX,UY的值 + # start_ = time.time() + value = BilinearInsert(srcImg, UX, UY) + # print(f"双线性插值耗时;{time.time() - start_}") + # 改变当前 i ,j的值 + copyImg[j + startTY, i + startTX] = value + return copyImg + + # # 瘦脸pro2,采用了numpy自定义函数做处理 + # def localTranslationWarpNumpy(self, srcImg, startP: np.matrix, endP: np.matrix, radius: float): + # startX , startY = startP[0, 0], startP[0, 1] + # endX, endY = endP[0, 0], endP[0, 1] + # ddradius = float(radius * radius) # 圆的半径 + # copyImg = srcImg.copy() # copy后的图像矩阵 + # # 计算公式中的|m-c|^2 + # ddmc = (endX - startX)**2 + (endY - startY)**2 + # # 计算正方形的左上角起始点 + # startTX, startTY = (startX - math.floor(radius + 1), startY - math.floor((radius + 1))) + # # 计算正方形的右下角的结束点 + # endTX, endTY = (startX + math.floor(radius + 1), startY + math.floor((radius + 1))) + # # 剪切srcImg + # self.thinImage = srcImg[startTY : endTY + 1, startTX : endTX + 1, :] + # # s = self.thinImage + # # db.cv_show(srcImg) + # # 裁剪后的图像相当于在x,y都减少了startX - math.floor(radius + 1) + # # 原本的endX, endY在切后的坐标点 + # endX, endY = (endX - startX + math.floor(radius + 1), endY - startY + math.floor(radius + 1)) + # # 原本的startX, startY剪切后的坐标点 + # startX ,startY = (math.floor(radius + 1), math.floor(radius + 1)) + # H, W, C = self.thinImage.shape # 获取图像的形状 + # index_m = np.arange(H * W).reshape((H, W)) + # triangle_ufunc = np.frompyfunc(self.process, 9, 3) + # # start_ = time.time() + # finalImgB, finalImgG, finalImgR = triangle_ufunc(index_m, self, W, ddradius, ddmc, startX, startY, endX, endY) + # finaleImg = np.dstack((finalImgB, finalImgG, finalImgR)).astype(np.uint8) + # finaleImg = np.fliplr(np.rot90(finaleImg, -1)) + # copyImg[startTY: endTY + 1, startTX: endTX + 1, :] = finaleImg + # # print(f"图像处理耗时;{time.time() - start_}") + # # db.cv_show(copyImg) + # return copyImg + + # 瘦脸pro3,采用opencv内置函数 + @staticmethod + def localTranslationWarpFastWithStrength( + srcImg, startP: np.matrix, endP: np.matrix, radius, strength: float = 100.0 + ): + """ + 采用opencv内置函数 + Args: + srcImg: 源图像 + startP: 起点位置 + endP: 终点位置 + radius: 处理半径 + strength: 瘦脸强度,一般取100以上 + + Returns: + + """ + startX, startY = startP[0, 0], startP[0, 1] + endX, endY = endP[0, 0], endP[0, 1] + ddradius = float(radius * radius) + # copyImg = np.zeros(srcImg.shape, np.uint8) + # copyImg = srcImg.copy() + + maskImg = np.zeros(srcImg.shape[:2], np.uint8) + cv2.circle(maskImg, (startX, startY), math.ceil(radius), (255, 255, 255), -1) + + K0 = 100 / strength + + # 计算公式中的|m-c|^2 + ddmc_x = (endX - startX) * (endX - startX) + ddmc_y = (endY - startY) * (endY - startY) + H, W, C = srcImg.shape + + mapX = np.vstack([np.arange(W).astype(np.float32).reshape(1, -1)] * H) + mapY = np.hstack([np.arange(H).astype(np.float32).reshape(-1, 1)] * W) + + distance_x = (mapX - startX) * (mapX - startX) + distance_y = (mapY - startY) * (mapY - startY) + distance = distance_x + distance_y + K1 = np.sqrt(distance) + ratio_x = (ddradius - distance_x) / (ddradius - distance_x + K0 * ddmc_x) + ratio_y = (ddradius - distance_y) / (ddradius - distance_y + K0 * ddmc_y) + ratio_x = ratio_x * ratio_x + ratio_y = ratio_y * ratio_y + + UX = mapX - ratio_x * (endX - startX) * (1 - K1 / radius) + UY = mapY - ratio_y * (endY - startY) * (1 - K1 / radius) + + np.copyto(UX, mapX, where=maskImg == 0) + np.copyto(UY, mapY, where=maskImg == 0) + UX = UX.astype(np.float32) + UY = UY.astype(np.float32) + copyImg = cv2.remap(srcImg, UX, UY, interpolation=cv2.INTER_LINEAR) + return copyImg + + +def thinFace(src, landmark, place: int = 0, strength=30.0): + """ + 瘦脸程序接口,输入人脸关键点信息和强度,即可实现瘦脸 + 注意处理四通道图像 + Args: + src: 原图 + landmark: 关键点信息 + place: 选择瘦脸区域,为0-4之间的值 + strength: 瘦脸强度,输入值在0-10之间,如果小于或者等于0,则不瘦脸 + + Returns: + 瘦脸后的图像 + """ + strength = min(100.0, strength * 10.0) + if strength <= 0.0: + return src + # 也可以设置瘦脸区域 + place = max(0, min(4, int(place))) + left_landmark = landmark[4 + place] + left_landmark_down = landmark[6 + place] + right_landmark = landmark[13 + place] + right_landmark_down = landmark[15 + place] + endPt = landmark[58] + # 计算第4个点到第6个点的距离作为瘦脸距离 + r_left = math.sqrt( + (left_landmark[0, 0] - left_landmark_down[0, 0]) ** 2 + + (left_landmark[0, 1] - left_landmark_down[0, 1]) ** 2 + ) + + # 计算第14个点到第16个点的距离作为瘦脸距离 + r_right = math.sqrt( + (right_landmark[0, 0] - right_landmark_down[0, 0]) ** 2 + + (right_landmark[0, 1] - right_landmark_down[0, 1]) ** 2 + ) + # 瘦左边脸 + thin_image = TranslationWarp.localTranslationWarpFastWithStrength( + src, left_landmark[0], endPt[0], r_left, strength + ) + # 瘦右边脸 + thin_image = TranslationWarp.localTranslationWarpFastWithStrength( + thin_image, right_landmark[0], endPt[0], r_right, strength + ) + return thin_image + + +# if __name__ == "__main__": +# import os +# from hycv.FaceDetection68.faceDetection68 import FaceDetection68 + +# local_file = os.path.dirname(__file__) +# PREDICTOR_PATH = f"{local_file}/weights/shape_predictor_68_face_landmarks.dat" # 关键点检测模型路径 +# fd68 = FaceDetection68(model_path=PREDICTOR_PATH) +# input_image = cv2.imread("test_image/4.jpg", -1) +# _, landmark_, _ = fd68.facePoints(input_image) +# output_image = thinFace(input_image, landmark_, strength=30.2) +# cv2.imwrite("thinFaceCompare.png", np.hstack((input_image, output_image))) diff --git a/hivision/plugin/beauty/whitening.py b/hivision/plugin/beauty/whitening.py new file mode 100644 index 0000000..562c56c --- /dev/null +++ b/hivision/plugin/beauty/whitening.py @@ -0,0 +1,83 @@ +import cv2 +import numpy as np +import os +import gradio as gr + + +class LutWhite: + CUBE64_ROWS = 8 + CUBE64_SIZE = 64 + CUBE256_SIZE = 256 + CUBE_SCALE = CUBE256_SIZE // CUBE64_SIZE + + def __init__(self, lut_image): + self.lut = self._create_lut(lut_image) + + def _create_lut(self, lut_image): + reshape_lut = np.zeros( + (self.CUBE256_SIZE, self.CUBE256_SIZE, self.CUBE256_SIZE, 3), dtype=np.uint8 + ) + for i in range(self.CUBE64_SIZE): + tmp = i // self.CUBE64_ROWS + cx = (i % self.CUBE64_ROWS) * self.CUBE64_SIZE + cy = tmp * self.CUBE64_SIZE + cube64 = lut_image[cy : cy + self.CUBE64_SIZE, cx : cx + self.CUBE64_SIZE] + if cube64.size == 0: + continue + cube256 = cv2.resize(cube64, (self.CUBE256_SIZE, self.CUBE256_SIZE)) + reshape_lut[i * self.CUBE_SCALE : (i + 1) * self.CUBE_SCALE] = cube256 + return reshape_lut + + def apply(self, src): + b, g, r = src[:, :, 0], src[:, :, 1], src[:, :, 2] + return self.lut[b, g, r] + + +class MakeWhiter: + def __init__(self, lut_image): + self.lut_white = LutWhite(lut_image) + + def run(self, src: np.ndarray, strength: int) -> np.ndarray: + strength = np.clip(strength / 10.0, 0, 1) + if strength <= 0: + return src + img = self.lut_white.apply(src[:, :, :3]) + return cv2.addWeighted(src[:, :, :3], 1 - strength, img, strength, 0) + + +base_dir = os.path.dirname(os.path.abspath(__file__)) +default_lut = cv2.imread(os.path.join(base_dir, "lut/lut_origin.png")) +make_whiter = MakeWhiter(default_lut) + + +def make_whitening(image, strength): + image = cv2.cvtColor(np.array(image), cv2.COLOR_RGB2BGR) + output_image = make_whiter.run(image, strength) + return cv2.cvtColor(output_image, cv2.COLOR_BGR2RGB) + + +def make_whitening_png(image, strength): + image = cv2.cvtColor(np.array(image), cv2.COLOR_RGBA2BGRA) + + b, g, r, a = cv2.split(image) + bgr_image = cv2.merge((b, g, r)) + + b_w, g_w, r_w = cv2.split(make_whiter.run(bgr_image, strength)) + output_image = cv2.merge((b_w, g_w, r_w, a)) + + return cv2.cvtColor(output_image, cv2.COLOR_RGBA2BGRA) + + +# 启动Gradio应用 +if __name__ == "__main__": + demo = gr.Interface( + fn=make_whitening_png, + inputs=[ + gr.Image(type="pil", image_mode="RGBA", label="Input Image"), + gr.Slider(0, 10, step=1, label="Whitening Strength"), + ], + outputs=gr.Image(type="pil"), + title="Image Whitening Demo", + description="Upload an image and adjust the whitening strength to see the effect.", + ) + demo.launch()