Skip to content

Commit 2455d83

Browse files
authored
v2.5.18
1 parent ddcabee commit 2455d83

File tree

1 file changed

+76
-26
lines changed

1 file changed

+76
-26
lines changed

Diff for: komga_cover_extractor.py

+76-26
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@
4646
import settings as settings_file
4747

4848
# Version of the script
49-
script_version = (2, 5, 17)
49+
script_version = (2, 5, 18)
5050
script_version_text = "v{}.{}.{}".format(*script_version)
5151

5252
# Paths = existing library
@@ -3063,6 +3063,11 @@ def clean_series_name(name):
30633063
)
30643064
if len(multi_numbers) == 1:
30653065
is_multi_volume = False
3066+
results = (
3067+
int(results[0])
3068+
if float(results[0]).is_integer()
3069+
else float(results[0])
3070+
)
30663071
else:
30673072
# Remove trailing ".0" so conversion doesn't fail
30683073
if file.endswith("0") and ".0" in file:
@@ -3113,7 +3118,7 @@ def get_release_year(name, metadata=None):
31133118

31143119
if release_year_from_file and release_year_from_file.isdigit():
31153120
result = int(release_year_from_file)
3116-
if result < 1000:
3121+
if result < 1950:
31173122
result = None
31183123

31193124
return result
@@ -3132,7 +3137,9 @@ def get_release_year(name, metadata=None):
31323137

31333138

31343139
# Retrieves the release_group on the file name
3135-
def get_extra_from_group(name, groups, publisher_m=False, release_group_m=False):
3140+
def get_extra_from_group(
3141+
name, groups, publisher_m=False, release_group_m=False, series_name=None
3142+
):
31363143
if (
31373144
not groups
31383145
or (publisher_m and not publishers_joined)
@@ -3148,7 +3155,18 @@ def get_extra_from_group(name, groups, publisher_m=False, release_group_m=False)
31483155
search = search.group()
31493156

31503157
elif release_group_m:
3151-
search = release_group_end_regex.search(name) if "-" in name else ""
3158+
# remove series name from the file name, re.escape it
3159+
series_free_name = ""
3160+
if series_name:
3161+
series_free_name = re.sub(
3162+
re.escape(series_name), "", name, flags=re.IGNORECASE
3163+
).strip()
3164+
3165+
search = (
3166+
release_group_end_regex.search(series_free_name or name)
3167+
if "-" in name
3168+
else ""
3169+
)
31523170

31533171
if search:
31543172
search = search.group(1)
@@ -3294,7 +3312,12 @@ def upgrade_to_volume_class(
32943312
"",
32953313
"",
32963314
(
3297-
get_extra_from_group(file.name, release_groups, release_group_m=True)
3315+
get_extra_from_group(
3316+
file.name,
3317+
release_groups,
3318+
release_group_m=True,
3319+
series_name=file.basename,
3320+
)
32983321
if not skip_release_group
32993322
else ""
33003323
),
@@ -10823,6 +10846,47 @@ def __init__(self, ssim_score, image_source):
1082310846
self.image_source = image_source
1082410847

1082510848

10849+
# Preps the image for comparison
10850+
def preprocess_image(image):
10851+
# Check if the image is already grayscale
10852+
if len(image.shape) == 2 or (len(image.shape) == 3 and image.shape[2] == 1):
10853+
gray_image = image
10854+
else:
10855+
# Convert to grayscale if it's a color image
10856+
gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
10857+
10858+
# Apply histogram equalization
10859+
gray_image = cv2.equalizeHist(gray_image)
10860+
10861+
# Normalize the image
10862+
gray_image = gray_image / 255.0
10863+
10864+
return gray_image
10865+
10866+
10867+
# Comapres two images using SSIM
10868+
def compare_images(imageA, imageB, silent=False):
10869+
try:
10870+
if not silent:
10871+
print(f"\t\t\tBlank Image Size: {imageA.shape}")
10872+
print(f"\t\t\tInternal Cover Size: {imageB.shape}")
10873+
10874+
# Preprocess images
10875+
grayA = preprocess_image(imageA)
10876+
grayB = preprocess_image(imageB)
10877+
10878+
# Compute SSIM between the two images
10879+
ssim_score = ssim(grayA, grayB, data_range=1.0)
10880+
10881+
if not silent:
10882+
print(f"\t\t\t\tSSIM: {ssim_score}")
10883+
10884+
return ssim_score
10885+
except Exception as e:
10886+
send_message(str(e), error=True)
10887+
return 0
10888+
10889+
1082610890
# Compares two images and returns the ssim score of the two images similarity.
1082710891
def prep_images_for_similarity(
1082810892
blank_image_path, internal_cover_data, both_cover_data=False, silent=False
@@ -10871,33 +10935,19 @@ def prep_images_for_similarity(
1087110935
elif len(blank_image.shape) == 2 and len(internal_cover.shape) == 3:
1087210936
internal_cover = internal_cover[:, :, 0]
1087310937

10938+
# Ensure both images are in the same format (grayscale or color)
10939+
if len(blank_image.shape) != len(internal_cover.shape):
10940+
if len(blank_image.shape) == 3:
10941+
blank_image = cv2.cvtColor(blank_image, cv2.COLOR_BGR2GRAY)
10942+
else:
10943+
internal_cover = cv2.cvtColor(internal_cover, cv2.COLOR_BGR2GRAY)
10944+
1087410945
# Compare images and return similarity score
1087510946
score = compare_images(blank_image, internal_cover, silent=silent)
1087610947

1087710948
return score
1087810949

1087910950

10880-
# compares our two images likness and returns the ssim score
10881-
def compare_images(imageA, imageB, silent=False):
10882-
ssim_score = None
10883-
try:
10884-
if not silent:
10885-
print(f"\t\t\tBlank Image Size: {imageA.shape}")
10886-
print(f"\t\t\tInternal Cover Size: {imageB.shape}")
10887-
10888-
if len(imageA.shape) == 3 and len(imageB.shape) == 3:
10889-
grayA = cv2.cvtColor(imageA, cv2.COLOR_BGR2GRAY)
10890-
grayB = cv2.cvtColor(imageB, cv2.COLOR_BGR2GRAY)
10891-
ssim_score = ssim(grayA, grayB)
10892-
else:
10893-
ssim_score = ssim(imageA, imageB)
10894-
if not silent:
10895-
print(f"\t\t\t\tSSIM: {ssim_score}")
10896-
except Exception as e:
10897-
send_message(str(e), error=True)
10898-
return ssim_score
10899-
10900-
1090110951
# Extracts a supported archive to a temporary directory.
1090210952
def extract(file_path, temp_dir, extension):
1090310953
successfull = False

0 commit comments

Comments
 (0)