From 8bdc4fac465aae9f8912d3e464227ab075aa886c Mon Sep 17 00:00:00 2001 From: lededev Date: Sun, 6 Feb 2022 21:28:49 +0800 Subject: [PATCH 1/3] filter 4K --- WebCrawler/javdb.py | 1 - number_parser.py | 3 ++- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/WebCrawler/javdb.py b/WebCrawler/javdb.py index e46cd7f..93698d0 100755 --- a/WebCrawler/javdb.py +++ b/WebCrawler/javdb.py @@ -1,4 +1,3 @@ -import logging import sys sys.path.append('../') import re diff --git a/number_parser.py b/number_parser.py index 1afe5f3..ee166e9 100755 --- a/number_parser.py +++ b/number_parser.py @@ -4,7 +4,8 @@ import sys import config G_spat = re.compile( - "^22-sht\.me|-fhd|_fhd|^fhd_|^fhd-|-hd|_hd|^hd_|^hd-|-sd|_sd|-1080p|_1080p|-720p|_720p|^hhd800\.com@|-uncensored|_uncensored|-leak|_leak", + "^22-sht\.me|-fhd|_fhd|^fhd_|^fhd-|-hd|_hd|^hd_|^hd-|-sd|_sd|-1080p|_1080p|-720p|_720p|" + "^hhd800\.com@|-uncensored|_uncensored|-leak|_leak|-4K|_4K", re.IGNORECASE) From 3814695d889b8c400eec4c321dda6cef95dfd4ba Mon Sep 17 00:00:00 2001 From: hejianjun Date: Thu, 10 Feb 2022 19:27:29 +0800 Subject: [PATCH 2/3] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E9=AB=98=E5=AE=BD?= =?UTF-8?q?=E6=AF=94=E5=A4=A7=E4=BA=8E3/2=E7=9A=84=E5=9B=BE=E7=89=87?= =?UTF-8?q?=E8=A3=81=E5=89=AA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ImageProcessing/__init__.py | 68 +++++++++++++++++++++++++++++++++---- ImageProcessing/baidu.py | 13 ++++--- ImageProcessing/hog.py | 10 +++--- core.py | 27 +-------------- 4 files changed, 77 insertions(+), 41 deletions(-) diff --git a/ImageProcessing/__init__.py b/ImageProcessing/__init__.py index 0f519af..3bf3490 100644 --- a/ImageProcessing/__init__.py +++ b/ImageProcessing/__init__.py @@ -1,14 +1,19 @@ import logging +import os import config import importlib +from PIL import Image +import shutil -def face_crop(filename, width, height): + +def face_crop_width(filename, width, height): # 新宽度是高度的2/3 cropWidthHalf = int(height/3) try: - locations_model = filter(lambda x: x, config.getInstance().face_locations_model().lower().split(',')) + locations_model = config.getInstance().face_locations_model().lower().split(',') + locations_model = filter(lambda x: x, locations_model) for model in locations_model: - center = face_center(filename, model) + center, top = face_center(filename, model) # 如果找到就跳出循环 if center: cropLeft = center-cropWidthHalf @@ -27,12 +32,63 @@ def face_crop(filename, width, height): return (width-cropWidthHalf*2, 0, width, height) +def face_crop_height(filename, width, height): + cropHeight = int(width*3/2) + try: + locations_model = config.getInstance().face_locations_model().lower().split(',') + locations_model = filter(lambda x: x, locations_model) + for model in locations_model: + center, top = face_center(filename, model) + # 如果找到就跳出循环 + if top: + # 头部靠上 + cropTop = top + cropBottom = cropHeight + top + if cropBottom > height: + cropTop = 0 + cropBottom = cropHeight + return (0, cropTop, width, cropBottom) + except: + print('[-]Not found face! ' + filename) + # 默认从顶部向下切割 + return (0, 0, width, cropHeight) + + +def cutImage(imagecut, path, fanart_path, poster_path): + fullpath_fanart = os.path.join(path, fanart_path) + fullpath_poster = os.path.join(path, poster_path) + if imagecut == 1: # 剪裁大封面 + try: + img = Image.open(fullpath_fanart) + width, height = img.size + if width/height > 2/3: # 如果宽度大于2 + # 以人像为中心切取 + img2 = img.crop(face_crop_width(fullpath_fanart, width, height)) + elif width/height < 2/3: # 如果高度大于3 + # 从底部向上切割 + img2 = img.crop(face_crop_height(fullpath_fanart, width, height)) + else: # 如果等于2/3 + img2 = img + img2.save(fullpath_poster) + print('[+]Image Cutted! ' + fullpath_poster) + except Exception as e: + print(e) + print('[-]Cover cut failed!') + elif imagecut == 0: # 复制封面 + shutil.copyfile(fullpath_fanart, fullpath_poster) + print('[+]Image Copyed! ' + fullpath_poster) + + def face_center(filename, model): print('[+]Use model ' + model) try: - mod = importlib.import_module('.' + model,'ImageProcessing') + mod = importlib.import_module('.' + model, 'ImageProcessing') return mod.face_center(filename, model) - except BaseException as e: + except Exception as e: print('[-]Model found face ' + filename) logging.error(e) - return 0 \ No newline at end of file + return (0, 0) + +if __name__ == '__main__': + cutImage(1,'H:\\test\\','12.jpg','test.jpg') + \ No newline at end of file diff --git a/ImageProcessing/baidu.py b/ImageProcessing/baidu.py index 7bbe3ae..156bb8a 100644 --- a/ImageProcessing/baidu.py +++ b/ImageProcessing/baidu.py @@ -11,12 +11,15 @@ def face_center(filename, model): img = fp.read() result = client.bodyAnalysis(img) if 'error_code' in result: - raise result['error_msg'] + raise ValueError(result['error_msg']) print('[+]Found person ' + str(result['person_num'])) # 中心点取鼻子x坐标 - max = 0 + maxRight = 0 + maxTop = 0 for person_info in result["person_info"]: x = int(person_info['body_parts']['nose']['x']) - if x > max: - max = x - return max + top = int(person_info['location']['top']) + if x > maxRight: + maxRight = x + maxTop = top + return maxRight,maxTop diff --git a/ImageProcessing/hog.py b/ImageProcessing/hog.py index 6f0bbb3..4e672b5 100644 --- a/ImageProcessing/hog.py +++ b/ImageProcessing/hog.py @@ -5,11 +5,13 @@ def face_center(filename, model): image = face_recognition.load_image_file(filename) face_locations = face_recognition.face_locations(image, 1, model) print('[+]Found person ' + str(len(face_locations))) - max = 0 + maxRight = 0 + maxTop = 0 for face_location in face_locations: top, right, bottom, left = face_location # 中心点 x = int((right+left)/2) - if x > max: - max = x - return max + if x > maxRight: + maxRight = x + maxTop = top + return maxRight,maxTop diff --git a/core.py b/core.py index adb74e3..7290b21 100644 --- a/core.py +++ b/core.py @@ -14,7 +14,7 @@ from datetime import datetime from ADC_function import * from WebCrawler import get_data_from_json from number_parser import is_uncensored -from ImageProcessing import face_crop +from ImageProcessing import cutImage def escape_path(path, escape_literals: str): # Remove escape literals @@ -371,31 +371,6 @@ def print_files(path, leak_word, c_word, naming_rule, part, cn_sub, json_data, f moveFailedFolder(filepath) return -def cutImage(imagecut, path, fanart_path, poster_path): - fullpath_fanart = os.path.join(path, fanart_path) - fullpath_poster = os.path.join(path, poster_path) - if imagecut == 1: # 剪裁大封面 - try: - img = Image.open(fullpath_fanart) - width, height = img.size - if width/height > 2/3: # 如果宽度大于2 - # 以人像为中心切取 - img2 = img.crop(face_crop(fullpath_fanart, width, height)) - elif width/height < 2/3: # 如果高度大于3 - # 从底部向上切割 - cropBottom = width*3/2 - img2 = img.crop(0, 0, width, cropBottom) - else: # 如果等于2/3 - img2 = img - img2.save(fullpath_poster) - print('[+]Image Cutted! ' + fullpath_poster) - except Exception as e: - print(e) - print('[-]Cover cut failed!') - elif imagecut == 0: # 复制封面 - shutil.copyfile(fullpath_fanart, fullpath_poster) - print('[+]Image Copyed! ' + fullpath_poster) - # 此函数从gui版copy过来用用 # 参数说明 # poster_path From aa0f72edd8582454a8bece187b41a6be51d9c7d2 Mon Sep 17 00:00:00 2001 From: Yoshiko2 Date: Fri, 11 Feb 2022 03:23:32 +0800 Subject: [PATCH 3/3] Update 6.0.2 --- Movie_Data_Capture.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Movie_Data_Capture.py b/Movie_Data_Capture.py index b4f9854..b592c6b 100644 --- a/Movie_Data_Capture.py +++ b/Movie_Data_Capture.py @@ -443,7 +443,7 @@ def create_data_and_move_with_custom_number(file_path: str, custom_number, oCC): def main(): - version = '6.0.1' + version = '6.0.2' urllib3.disable_warnings() #Ignore http proxy warning # Read config.ini first, in argparse_function() need conf.failed_folder()