模块化裁剪

This commit is contained in:
hejianjun
2022-01-30 22:26:52 +08:00
parent a84452ba1c
commit e1b5d17b05
5 changed files with 53 additions and 50 deletions

View File

@@ -0,0 +1,38 @@
import logging
import config
import importlib
def face_crop(filename, width, height):
# 新宽度是高度的2/3
cropWidthHalf = int(height/3)
try:
locations_model = filter(lambda x: x, config.getInstance().face_locations_model().lower().split(','))
for model in locations_model:
center = face_center(filename, model)
# 如果找到就跳出循环
if center:
cropLeft = center-cropWidthHalf
cropRight = center+cropWidthHalf
# 越界处理
if cropLeft < 0:
cropLeft = 0
cropRight = cropWidthHalf*2
elif cropRight > width:
cropLeft = width-cropWidthHalf*2
cropRight = width
return (cropLeft, 0, cropRight, height)
except:
print('[-]Not found face! ' + filename)
# 默认靠右切
return (width-cropWidthHalf*2, 0, width, height)
def face_center(filename, model):
print('[+]Use model ' + model)
try:
mod = importlib.import_module('.' + model,'ImageProcessing')
return mod.face_center(filename, model)
except BaseException as e:
print('[-]Model found face ' + filename)
logging.error(e)
return 0

4
ImageProcessing/cnn.py Normal file
View File

@@ -0,0 +1,4 @@
import hog
def face_center(filename, model):
return hog.face_center(filename, model)

10
ImageProcessing/hog.py Normal file
View File

@@ -0,0 +1,10 @@
import face_recognition
def face_center(filename, model):
image = face_recognition.load_image_file(filename)
face_locations = face_recognition.face_locations(image, 0, model)
if face_locations:
top, right, bottom, left = face_locations[0]
# 中心点
return int((right+left)/2)
return 0

View File

@@ -320,15 +320,6 @@ class Config:
except:
return "hog"
def face_app_id(self) -> str:
return self.conf.get("face", "appid")
def face_api_key(self) -> str:
return self.conf.get("face", "key")
def face_app_secret(self) -> str:
return self.conf.get("face", "secret")
@staticmethod
def _exit(sec: str) -> None:

42
core.py
View File

@@ -14,6 +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
def escape_path(path, escape_literals: str): # Remove escape literals
@@ -370,47 +371,6 @@ def print_files(path, leak_word, c_word, naming_rule, part, cn_sub, json_data, f
moveFailedFolder(filepath)
return
def face_center(filename, model):
print('[+]Image found face ' + model)
try:
import face_recognition
image = face_recognition.load_image_file(filename)
face_locations = face_recognition.face_locations(image, 0, model)
if face_locations:
top, right, bottom, left = face_locations[0]
# 中心点
return int((right+left)/2)
except Exception as e:
print("[-]", e)
return 0
def face_crop(filename, width, height):
# 新宽度是高度的2/3
cropWidthHalf = int(height/3)
try:
locations_model = filter(lambda x : x,config.getInstance().face_locations_model().lower().split(','))
for model in locations_model:
center = face_center(filename, model)
# 如果找到就跳出循环
if center:
cropLeft = center-cropWidthHalf
cropRight = center+cropWidthHalf
# 越界处理
if cropLeft < 0:
cropLeft = 0
cropRight = cropWidthHalf*2
elif cropRight > width:
cropLeft = width-cropWidthHalf*2
cropRight = width
return (cropLeft, 0, cropRight, height)
except:
print('[-]Not found face! ' + filename)
# 默认靠右切
return (width-cropWidthHalf*2, 0, width, height)
def cutImage(imagecut, path, fanart_path, poster_path):
fullpath_fanart = os.path.join(path, fanart_path)
fullpath_poster = os.path.join(path, poster_path)