CLI QA: Create a diff image highlighting areas of difference in red

This commit is contained in:
Roberto Fernandez Bautista 2023-09-11 22:35:51 +02:00
parent ea648d67e6
commit f48c125c3c
1 changed files with 16 additions and 14 deletions

View File

@ -26,7 +26,7 @@ import logging
import subprocess import subprocess
from typing import Tuple from typing import Tuple
from pathlib import Path from pathlib import Path
from PIL import Image, ImageChops, ImageFilter from PIL import Image, ImageChops, ImageFilter, ImageEnhance
import numpy as np import numpy as np
logger = logging.getLogger("cli_util") logger = logging.getLogger("cli_util")
@ -106,19 +106,20 @@ def images_are_equal( image1_path: str, image2_path: str ) -> bool:
eroded_result_sum = np.sum( np.asarray( eroded_result ) ) eroded_result_sum = np.sum( np.asarray( eroded_result ) )
retval = eroded_result_sum == 0 retval = eroded_result_sum == 0
# Save images, cleanup
#if not retval:
diff_name = image1.filename + ".diff.png"
diff.save( diff_name ) # Note: if the image has alpha, the diff will be mostly transparent
diff.close() diff.close()
diff_name = image1.filename + ".binary_result.png"
binary_result.save( diff_name )
binary_result.close() binary_result.close()
diff_name = image1.filename + ".eroded_result_" + str( eroded_result_sum )+ ".png" # Save diff
eroded_result.save( diff_name ) if not retval:
diff_name = image1.filename + ".DIFF_eroded_" + str( eroded_result_sum )+ ".png"
red = Image.new( "RGB", image1.size, (255,0,0))
imageEnhanced = ImageEnhance.Contrast(image1).enhance(0.3)
imageEnhanced.paste( red,mask=eroded_result)
imageEnhanced.save(diff_name)
logger.error( "Images not equal. Diff stored at '%s'", diff_name )
imageEnhanced.close()
# Cleanup
eroded_result.close() eroded_result.close()
# Cleanup # Cleanup
@ -185,8 +186,8 @@ def gerbers_are_equivalent( gerber_generated_path : str, gerber_source_path : st
for row in range( noTilesRowsCols[0] ): for row in range( noTilesRowsCols[0] ):
for col in range( noTilesRowsCols[1] ): for col in range( noTilesRowsCols[1] ):
tileOrigin=np.array( originInches ) + ( np.array( [row,col] ) * tileSizeInches ) tileOrigin=np.array( originInches ) + ( np.array( [row,col] ) * tileSizeInches )
tile_name=f"R{row}C{col}"
png_generated, png_source = get_png_paths( gerber_generated_path, gerber_source_path, f"R{row}C{col}" ) png_generated, png_source = get_png_paths( gerber_generated_path, gerber_source_path, tile_name )
convert_gerber_to_png( gerber_generated_path, png_generated, comparison_dpi, tileOrigin, tileSizeInches ) convert_gerber_to_png( gerber_generated_path, png_generated, comparison_dpi, tileOrigin, tileSizeInches )
convert_gerber_to_png( gerber_source_path, png_source, comparison_dpi, tileOrigin, tileSizeInches ) convert_gerber_to_png( gerber_source_path, png_source, comparison_dpi, tileOrigin, tileSizeInches )
@ -194,7 +195,8 @@ def gerbers_are_equivalent( gerber_generated_path : str, gerber_source_path : st
gerberGeneratedIsBlank = gerberGeneratedIsBlank and image_is_blank( png_generated ) gerberGeneratedIsBlank = gerberGeneratedIsBlank and image_is_blank( png_generated )
gerberSourceIsBlank = gerberSourceIsBlank and image_is_blank( png_source ) gerberSourceIsBlank = gerberSourceIsBlank and image_is_blank( png_source )
gerbersAreEqual = gerbersAreEqual and images_are_equal( png_generated, png_source ) if( not images_are_equal( png_generated, png_source ) ):
gerbersAreEqual = False
assert( not gerberGeneratedIsBlank ) assert( not gerberGeneratedIsBlank )
assert( not gerberSourceIsBlank ) # make sure test case is generated correctly assert( not gerberSourceIsBlank ) # make sure test case is generated correctly