Revision: 30062 http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=30062 Author: leifandersen Date: 2010-07-07 01:28:23 +0200 (Wed, 07 Jul 2010)
Log Message: ----------- 1. Am about 75% of the way through implementing animations in the image diff class, I think. 2. Realized that the image diffs that the physics render tests relied on didn't have the needed images in the working copy, so I added the tests. Modified Paths: -------------- branches/soc-2010-leifandersen/tests/render/run.py Added Paths: ----------- branches/soc-2010-leifandersen/tests/pyunit/ops/physics/render/cube_hair_group.png branches/soc-2010-leifandersen/tests/pyunit/ops/physics/render/cube_hair_object.png Added: branches/soc-2010-leifandersen/tests/pyunit/ops/physics/render/cube_hair_group.png =================================================================== (Binary files differ) Property changes on: branches/soc-2010-leifandersen/tests/pyunit/ops/physics/render/cube_hair_group.png ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: branches/soc-2010-leifandersen/tests/pyunit/ops/physics/render/cube_hair_object.png =================================================================== (Binary files differ) Property changes on: branches/soc-2010-leifandersen/tests/pyunit/ops/physics/render/cube_hair_object.png ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Modified: branches/soc-2010-leifandersen/tests/render/run.py =================================================================== --- branches/soc-2010-leifandersen/tests/render/run.py 2010-07-06 21:19:01 UTC (rev 30061) +++ branches/soc-2010-leifandersen/tests/render/run.py 2010-07-06 23:28:23 UTC (rev 30062) @@ -40,6 +40,9 @@ difference = None message = "" ID = None + + def __init__(self, blend_path, good_path, test_path): + self.__init(self, ID, blend_path, good_path, test_path) def __init__(self, ID, blend_path, good_path, test_path): '''Sets up a test case, with the blend_path, the known good path, and the test path @@ -49,12 +52,33 @@ self.ID = ID else: self.ID = 'FAIL' - self.blend_path = blend_path - self.good_path = good_path self.name = os.path.split(blend_path)[1] - self.good_image = Image.open(good_path) - self.test_path = test_path + if self.ID == 'Image': + self.good_image = Image.open(good_path) + self.blend_path = blend_path + self.good_path = good_path + self.test_path = test_path + if self.ID == 'Animation': + self.good_path = [] + self.good_image = [] + self.test_path = [] + (good_directory, good_file) = os.path.split(blend_path) + (test_directroy, test_file) = os.path.split(blend_path) + i=1 + for imagename in os.listdir(good_directory): + self.good_path.append(os.path.join(good_directory, string.replace(self.name, '.blend', '_' + self.format_frame(i) + '.blend') + im = Image.open(imagename) + self.good_image.append(im) + self.test_path.append(os.path.join(test_directory, string.replace(self.name, '.blend', '_' + self.format_frame(i) + 'blend')) + i+=1 + + def format_frame(self, num) + frame_num = str(num) + while len(frame_num) < 4: + frame_num+='0' + return frame_num + def render_image(self): '''Renders a single image of the first frame of the blend file. Also changes output_path slightly''' @@ -62,7 +86,7 @@ os.system(command) self.test_path += '_0001.png' try: - self.test_image = Image.open(self.test_path) + self.test_image = Image.open(self.test_path) except IOError: self.ID = 'Fail' self.test_image = None @@ -75,11 +99,15 @@ self.message = "Failed to render" def render_anim(self): - command = BLENDER_BIN + " -b " + self.blend_path + " -o " + self.test_path + "_#### -F PNG -x 1 -a" + '''''' + command = BLENDER_BIN + " -b " + self.blend_path + " -o " + string.replace(self.test_path[0], '_0001.png', '') + "_#### -F PNG -x 1 -a" os.system(command) try: - self.test_image = Image.open(self.test_path) + self.test_image = [] + for imagename in self.test_path: + im = Image.open(imagename) + self.test_image.append(im) except IOError: self.test_image = None self.passed = False @@ -93,23 +121,32 @@ def setup_test(self): '''Runs the test, filling in all of the usefull fields''' if self.test_image != None: - self.diff_sum = 0 - self.diff_image = ImageChops.difference(self.good_image, self.test_image) - self.bad_pixels = 0 - self.pixel_range = len(self.diff_image.histogram()) - self.pixel_count = self.diff_image.size[0] * self.diff_image.size[1] - for i in range(0,self.diff_image.size[0]): - for j in range(0, self.diff_image.size[1]): - p = self.diff_image.getpixel((i,j)) - self.diff_sum+= p[0] + p[1] + p[2] - if p[0] + p[1] + p[2] > 10: - self.bad_pixels+=1 - self.difference = float(self.diff_sum)/float(self.pixel_range*self.pixel_count) - if self.bad_pixels < self.pixel_count/5 and self.difference < 0.01: - self.passed = True - else: - self.passed = False - return self.passed + if ID == 'Image': + self.diff_sum = 0 + self.diff_image = ImageChops.difference(self.good_image, self.test_image) + self.bad_pixels = 0 + self.pixel_range = len(self.diff_image.histogram()) + self.pixel_count = self.diff_image.size[0] * self.diff_image.size[1] + for i in range(0,self.diff_image.size[0]): + for j in range(0, self.diff_image.size[1]): + p = self.diff_image.getpixel((i,j)) + self.diff_sum+= p[0] + p[1] + p[2] + if p[0] + p[1] + p[2] > 10: + self.bad_pixels+=1 + self.difference = float(self.diff_sum)/float(self.pixel_range*self.pixel_count) + if self.bad_pixels < self.pixel_count/5 and self.difference < 0.01: + self.passed = True + else: + self.passed = False + return self.passed + if ID == 'Animation': + self.diff_sum = [] + self.bad_pixels = [] + + self.diff_image = [] + i= 0 + for diff_image in self.good_image: + self.diff_image.append(ImageChops.difference(self.good_image, self.test_image)) def save_diff(self, output_path): '''Saves the diff image to output_path''' @@ -118,7 +155,8 @@ self.diff_path = output_path self.diff_image.save(output_path) if self.ID == 'Animation': - self.diff_path = output_path + self.diff_path [] + (diff_directory, diff_file) = os.path.split(output_path) i = 1 for image in self.diff_image: self.diff_image.save(output_path + '_diff_' + i + '.png') @@ -237,9 +275,9 @@ for frame in animation.test_image: file.write('<tr>\n') file.write('<td>' + i + '</td>\n') - file.write('<td><a href="' + os.path.join('render', string.replace(image.name, '.blend', '.png')) + '"><img src="' + os.path.join('render', string.replace(image.name, '.blend', '.png')) + '" alt="Good Image" width="200" height="150"></a></td>\n') - file.write('<td><a href="' + os.path.join('output', string.replace(image.name, '.blend', '_0001.png')) + '"><img src="' + os.path.join('output', string.replace(image.name, '.blend', '_0001.png')) + '" alt="Latest Render" width="200" height="150"></a></td>\n') - file.write('<td><a href="' + os.path.join('output', string.replace(image.name, '.blend', '_diff.png')) + '"><img src="' + os.path.join('output', string.replace(image.name, '.blend', '_diff.png')) + '" alt="Image Diff" width="200" height="150"></a></td>\n') + file.write('<td><a href="' + os.path.join('render', string.replace(animation.name, '.blend', '_000' + i + '.png')) + '"><img src="' + os.path.join('render', string.replace(animation.name, '.blend', '_000' + i + '.png')) + '" alt="Good Image" width="200" height="150"></a></td>\n') + file.write('<td><a href="' + os.path.join('output', string.replace(animation.name, '.blend', '_000' + i + '.png')) + '"><img src="' + os.path.join('output', string.replace(animation.name, '.blend', '_000' + i + '.png')) + '" alt="Latest Render" width="200" height="150"></a></td>\n') + file.write('<td><a href="' + os.path.join('output', string.replace(animation.name, '.blend', '_diff_000' + i + '.png')) + '"><img src="' + os.path.join('output', string.replace(animation.name, '.blend', '_diff_000' + i + '.png')) + '" alt="Image Diff" width="200" height="150"></a></td>\n') file.write('</tr>\n') i+=1 _______________________________________________ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org http://lists.blender.org/mailman/listinfo/bf-blender-cvs