裁剪封面宽高比可配置
This commit is contained in:
@@ -7,9 +7,9 @@ from PIL import Image
|
|||||||
import shutil
|
import shutil
|
||||||
from ADC_function import file_not_exist_or_empty
|
from ADC_function import file_not_exist_or_empty
|
||||||
|
|
||||||
g_width_half_ratio = 2.12
|
|
||||||
|
|
||||||
def face_crop_width(filename, width, height):
|
def face_crop_width(filename, width, height):
|
||||||
|
aspect_ratio = config.getInstance().face_aspect_ratio()
|
||||||
# 新宽度是高度的2/3
|
# 新宽度是高度的2/3
|
||||||
cropWidthHalf = int(height/3)
|
cropWidthHalf = int(height/3)
|
||||||
try:
|
try:
|
||||||
@@ -24,15 +24,15 @@ def face_crop_width(filename, width, height):
|
|||||||
# 越界处理
|
# 越界处理
|
||||||
if cropLeft < 0:
|
if cropLeft < 0:
|
||||||
cropLeft = 0
|
cropLeft = 0
|
||||||
cropRight = cropWidthHalf*g_width_half_ratio
|
cropRight = cropWidthHalf * aspect_ratio
|
||||||
elif cropRight > width:
|
elif cropRight > width:
|
||||||
cropLeft = width-cropWidthHalf*g_width_half_ratio
|
cropLeft = width - cropWidthHalf * aspect_ratio
|
||||||
cropRight = width
|
cropRight = width
|
||||||
return (cropLeft, 0, cropRight, height)
|
return (cropLeft, 0, cropRight, height)
|
||||||
except:
|
except:
|
||||||
print('[-]Not found face! ' + filename)
|
print('[-]Not found face! ' + filename)
|
||||||
# 默认靠右切
|
# 默认靠右切
|
||||||
return (width-cropWidthHalf * g_width_half_ratio, 0, width, height)
|
return (width-cropWidthHalf * aspect_ratio, 0, width, height)
|
||||||
|
|
||||||
|
|
||||||
def face_crop_height(filename, width, height):
|
def face_crop_height(filename, width, height):
|
||||||
@@ -58,11 +58,13 @@ def face_crop_height(filename, width, height):
|
|||||||
|
|
||||||
|
|
||||||
def cutImage(imagecut, path, fanart_path, poster_path, skip_facerec=False):
|
def cutImage(imagecut, path, fanart_path, poster_path, skip_facerec=False):
|
||||||
|
conf = config.getInstance()
|
||||||
fullpath_fanart = os.path.join(path, fanart_path)
|
fullpath_fanart = os.path.join(path, fanart_path)
|
||||||
fullpath_poster = os.path.join(path, poster_path)
|
fullpath_poster = os.path.join(path, poster_path)
|
||||||
if config.getInstance().face_aways_imagecut():
|
aspect_ratio = conf.face_aspect_ratio()
|
||||||
|
if conf.face_aways_imagecut():
|
||||||
imagecut = 1
|
imagecut = 1
|
||||||
elif config.getInstance().download_only_missing_images() and not file_not_exist_or_empty(fullpath_poster):
|
elif conf.download_only_missing_images() and not file_not_exist_or_empty(fullpath_poster):
|
||||||
return
|
return
|
||||||
if imagecut == 1: # 剪裁大封面
|
if imagecut == 1: # 剪裁大封面
|
||||||
try:
|
try:
|
||||||
@@ -71,7 +73,7 @@ def cutImage(imagecut, path, fanart_path, poster_path, skip_facerec=False):
|
|||||||
if width/height > 2/3: # 如果宽度大于2
|
if width/height > 2/3: # 如果宽度大于2
|
||||||
if skip_facerec:
|
if skip_facerec:
|
||||||
# 有码封面默认靠右切
|
# 有码封面默认靠右切
|
||||||
img2 = img.crop((width - int(height/3) * g_width_half_ratio, 0, width, height))
|
img2 = img.crop((width - int(height/3) * aspect_ratio, 0, width, height))
|
||||||
else:
|
else:
|
||||||
# 以人像为中心切取
|
# 以人像为中心切取
|
||||||
img2 = img.crop(face_crop_width(fullpath_fanart, width, height))
|
img2 = img.crop(face_crop_width(fullpath_fanart, width, height))
|
||||||
|
|||||||
@@ -101,9 +101,10 @@ is performed. It may help you correct wrong numbers before real job.""")
|
|||||||
no_net_op = False
|
no_net_op = False
|
||||||
if conf.main_mode() == 3:
|
if conf.main_mode() == 3:
|
||||||
no_net_op = args.no_network_operation
|
no_net_op = args.no_network_operation
|
||||||
config.G_conf_override["common:stop_counter"] = 0
|
if no_net_op:
|
||||||
config.G_conf_override["common:rerun_delay"] = '0s'
|
config.G_conf_override["common:stop_counter"] = 0
|
||||||
config.G_conf_override["face:aways_imagecut"] = True
|
config.G_conf_override["common:rerun_delay"] = '0s'
|
||||||
|
config.G_conf_override["face:aways_imagecut"] = True
|
||||||
|
|
||||||
return args.file, args.number, args.logdir, args.regexstr, args.zero_op, no_net_op
|
return args.file, args.number, args.logdir, args.regexstr, args.zero_op, no_net_op
|
||||||
|
|
||||||
|
|||||||
@@ -122,7 +122,9 @@ sites=38,39
|
|||||||
; 人脸识别 locations_model=hog:方向梯度直方图(不太准确,速度快) cnn:深度学习模型(准确,需要GPU/CUDA,速度慢)
|
; 人脸识别 locations_model=hog:方向梯度直方图(不太准确,速度快) cnn:深度学习模型(准确,需要GPU/CUDA,速度慢)
|
||||||
; uncensored_only=0:对全部封面进行人脸识别 1:只识别无码封面,有码封面直接切右半部分
|
; uncensored_only=0:对全部封面进行人脸识别 1:只识别无码封面,有码封面直接切右半部分
|
||||||
; aways_imagecut=0:按各网站默认行为 1:总是裁剪封面,开启此项将无视[common]download_only_missing_images=1总是覆盖封面
|
; aways_imagecut=0:按各网站默认行为 1:总是裁剪封面,开启此项将无视[common]download_only_missing_images=1总是覆盖封面
|
||||||
|
; 封面裁剪的宽高比可配置,公式为aspect_ratio/3。默认aspect_ratio=2.12: 适配大部分有码影片封面,前一版本默认为2/3即aspect_ratio=2
|
||||||
[face]
|
[face]
|
||||||
locations_model=hog
|
locations_model=hog
|
||||||
uncensored_only=1
|
uncensored_only=1
|
||||||
aways_imagecut=0
|
aways_imagecut=0
|
||||||
|
aspect_ratio=2.12
|
||||||
|
|||||||
@@ -365,6 +365,9 @@ class Config:
|
|||||||
def face_aways_imagecut(self) -> bool:
|
def face_aways_imagecut(self) -> bool:
|
||||||
return self.getboolean_override("face", "aways_imagecut", fallback=False)
|
return self.getboolean_override("face", "aways_imagecut", fallback=False)
|
||||||
|
|
||||||
|
def face_aspect_ratio(self) -> float:
|
||||||
|
return self.conf.getfloat("face", "aspect_ratio", fallback=2.12)
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def _exit(sec: str) -> None:
|
def _exit(sec: str) -> None:
|
||||||
print("[-] Read config error! Please check the {} section in config.ini", sec)
|
print("[-] Read config error! Please check the {} section in config.ini", sec)
|
||||||
|
|||||||
Reference in New Issue
Block a user