def missingVideo(scModel): import copy """ :param scModel: :return: @type scModel: ImageProjectModel """ for edge in scModel.getGraph().get_edges(): currentLink = scModel.getGraph().get_edge(edge[0], edge[1]) successors = scModel.getGraph().successors(edge[1]) predecessors = scModel.getGraph().predecessors(edge[1]) if currentLink['op'] == 'AddAudioSample': sourceim, source = scModel.getGraph().get_image(edge[0]) im, dest = scModel.getGraph().get_image(edge[1]) sourcemetadata = ffmpeg_api.get_meta_from_video(source, show_streams=True)[0] destmetadata = ffmpeg_api.get_meta_from_video(dest, show_streams=True)[0] if len(sourcemetadata) > 0: sourcevidcount = len([idx for idx, val in enumerate(sourcemetadata) if val['codec_type'] != 'audio']) if len(destmetadata) > 0: destvidcount = len([x for x in (idx for idx, val in enumerate(destmetadata) if val['codec_type'] != 'audio')]) if sourcevidcount != destvidcount: if not isSuccessor(scModel, successors, edge[1], ['AntiForensicCopyExif', 'OutputMP4', 'Donor']): raise ValueError('Cannot correct AddAudioSample for edge {} to {} due to successor node'.format( edge[0], edge[1] )) predecessors = [pred for pred in predecessors if pred != edge[0]] if len(predecessors) == 0: donor = scModel.getBaseNode(edge[1]) else: donor = predecessors[0] args= dict() if 'arguments' not in currentLink else copy.copy(currentLink['arguments']) args['donor'] = donor plugins.callPlugin('OverwriteAudioStream',sourceim,source,dest,donor=donor)
def rerunexif(project): """ Save error report, project properties, composites, and donors :param sm: scenario model """ sm = scenario_model.ImageProjectModel(project) plugin_map = { 'AntiForensicExifQuantizationTable': 'CompressAs', 'AntiForensicCopyExif': 'ExifMetaCopy', 'AntiForensicEditExif': 'ExifGPSChange', 'OutputTif': 'TIFF' } for edge_id in sm.getGraph().get_edges(): edge = sm.getGraph().get_edge(edge_id[0], edge_id[1]) # if a compression type operation if edge['op'] in [ 'AntiForensicExifQuantizationTable', 'AntiForensicCopyExif', 'AntiForensicEditExif', 'OutputTif' ]: # has donor preds = [ pred for pred in sm.getGraph().predecessors(edge_id[1]) if pred != edge_id[0] ] if len(preds) > 0: donor_node = sm.getGraph().get_node(preds[0]) target_node = sm.getGraph().get_node(edge_id[1]) im, source_filename = sm.getImageAndName(edge_id[0]) target_filenanme = os.path.join(sm.get_dir(), target_node['file']) plugin_name = plugin_map[edge['op']] kwargs = { 'donor': os.path.join(sm.get_dir(), donor_node['file']), 'rotate': 'yes' } doc = getValue(edge, 'arguments.degrees of change') if doc is not None: kwargs['degrees of change'] = doc if plugin_name == 'TIFF': exif.runexif([ '-P', '-q', '-m', '-TagsFromFile', donor_node['file'], '-all:all', '-unsafe', target_filenanme ]) createtime = exif.getexif( target_filenanme, args=['-args', '-System:FileCreateDate'], separator='=') if createtime is not None and '-FileCreateDate' in createtime: exif.runexif([ '-overwrite_original', '-P', '-q', '-m', '-System:fileModifyDate=' + createtime['-FileCreateDate'], target_filenanme ]) else: plugins.callPlugin(plugin_name, im, source_filename, target_filenanme, **kwargs) sm.reproduceMask(edge_id=edge_id) sm.save()
def test_drop_then_add(self): filename = self.locateFile('tests/videos/sample1.mov') filename_output1 = os.path.join( os.path.dirname(os.path.abspath(filename)), 'sample_out1a.avi') kwargs = { 'Start Time': 100, 'seconds to drop': 2, 'codec': 'XVID', 'save histograms': 'yes' } args, error = plugins.callPlugin('FlowDrivenVideoFrameDrop', None, filename, filename_output1, **kwargs) self.filesToKill.append(filename_output1) self.assertTrue(error is None) frames1 = int( get_channel_data( ffmpeg_api.get_meta_from_video(filename, show_streams=True)[0], 'video')[0]['nb_frames']) frames2 = int( get_channel_data( ffmpeg_api.get_meta_from_video(filename_output1, show_streams=True)[0], 'video')[0]['nb_frames']) diff = frames1 - frames2 self.assertTrue(diff > 0) diff_time = int(args['End Time']) - int(args['Start Time']) + 1 self.assertEqual(diff, diff_time) filename_output2 = os.path.join( os.path.dirname(os.path.abspath(filename)), 'sample_out2a.avi') args['codec'] = 'XVID' if getValue(args, 'Frames to Add', 0) < 1: args['Frames to Add'] = 1 print str(args) args, error = plugins.callPlugin('FlowDrivenVideoTimeWarp', None, filename_output1, filename_output2, **args) self.filesToKill.append(filename_output2) self.assertTrue(error is None) frames1 = int( get_channel_data( ffmpeg_api.get_meta_from_video(filename_output1, show_streams=True)[0], 'video')[0]['nb_frames']) frames2 = int( get_channel_data( ffmpeg_api.get_meta_from_video(filename_output2, show_streams=True)[0], 'video')[0]['nb_frames']) diff = frames2 - frames1 self.assertTrue(diff > 0) diff_time = int(args['End Time']) - int(args['Start Time']) + 1 print str(args) self.assertEqual(diff, diff_time)
def main(): import argparse parser = argparse.ArgumentParser() parser.add_argument('--plugin', required=True, help='JSON File') parser.add_argument('--args', required=True, help='number of projects to build') args = parser.parse_args() arguments_list = args.args.split(',') arguments = {a.split(':')[0]: a.split(':')[1] for a in arguments_list} img = image_wrap.openImageFile(arguments['inputimage']) plugins.loadPlugins() plugins.callPlugin(args.plugin, img, arguments['inputimage'], arguments['outputimage'], **arguments)
def test_seam_carve(self): img_wrapper = image_wrap.openImageFile(self.locateFile('tests/images/test_project5.jpg')) img = img_wrapper.to_array() mask = np.zeros(img.shape).astype('uint8') cv2.circle(mask, (img.shape[0]/8,img.shape[1]/8), img.shape[0]/16, (255, 0, 0), -1) cv2.circle(mask, (img.shape[0] *5/ 8, img.shape[1] *5/ 8), img.shape[0] / 16, (0, 255, 0), -1) mask_wrapper = image_wrap.ImageWrapper(mask) mask_output = tempfile.mktemp(prefix='mstcr', suffix='.png', dir='.') self.addFileToRemove(mask_output) mask_wrapper.save(mask_output) target_wrapper = image_wrap.ImageWrapper(img) filename = self.locateFile('tests/images/test_project5.jpg') filename_output = tempfile.mktemp(prefix='mstcr', suffix='.jpg', dir='.') self.addFileToRemove(filename_output) target_wrapper.save(filename_output) args,error = plugins.callPlugin('SeamCarve', img_wrapper, filename, filename_output, inputmaskname=os.path.abspath(mask_output), percentage_height=0.95, percentage_width=0.95) output_files = args['output_files'] self.assertTrue('column adjuster' in output_files and os.path.exists(output_files['column adjuster'])) self.assertTrue('row adjuster' in output_files and os.path.exists(output_files['row adjuster'])) self.assertTrue('plugin mask' in output_files and os.path.exists(output_files['plugin mask'])) self.assertTrue('neighbor mask' in output_files and os.path.exists(output_files['neighbor mask'])) for v in output_files.values(): os.remove(v)
def run_plugin(argv=None): import argparse import itertools parser = argparse.ArgumentParser(description='') parser.add_argument('--plugin', help='name of plugin', required=True) parser.add_argument('--input', help='base image or video', required=True) parser.add_argument('--output', help='result image or video', required=True) parser.add_argument( '--arguments', nargs='+', default={}, help='Additional operation/plugin arguments e.g. rotation 60') args = parser.parse_args() op = software_loader.getOperation(getOperation(args.plugin)['name']) parsedArgs = dict( itertools.izip_longest(*[iter(args.arguments)] * 2, fillvalue="")) for key in parsedArgs: parsedArgs[key] = validateAndConvertTypedValue( key, parsedArgs[key], op, skipFileValidation=False) loadPlugins() args, msg = callPlugin(args.plugin, openImageFile(args.input), args.input, args.output, **parsedArgs) if msg is not None: print(msg) if args is not None: print('Results:') print(str(args))
def test_rgb(self): filename = self.locateFile('tests/images/test_project5.jpg') img_wrapper = image_wrap.openImageFile(filename) img = img_wrapper.to_array() target_wrapper = image_wrap.ImageWrapper(img) filename_output = tempfile.mktemp(prefix='mstcr', suffix='.png', dir='.') self.filesToKill.extend([filename_output]) target_wrapper.save(filename_output) args, error = plugins.callPlugin('SelectRegion', img_wrapper, filename, filename_output, alpha='yes') wrapper = image_wrap.openImageFile(filename_output) output = wrapper.to_array() self.assertTrue(sum(sum(output[:, :, 3])) > 255) x, y, w, h = widthandheight(output[:, :, 3]) if x > 1: self.assertTrue(sum(sum(output[:, 0:x - 1, 3])) == 0) if y > 1: self.assertTrue(sum(sum(output[0:y - 1, :, 3])) == 0) self.assertTrue(sum(sum(output[y + h + 1:, x + w + 1:, 3])) == 0) self.assertEqual(output.shape[0], img.shape[0]) self.assertEqual(output.shape[1], img.shape[1]) self.assertTrue('paste_x' in args and args['paste_x'] > 0) self.assertTrue('paste_y' in args and args['paste_y'] > 0)
def test_something(self): img = numpy.random.randint(0, 255, (500, 500, 3), dtype='uint8') mask = numpy.zeros((500, 500), dtype='uint8') mask[30:50, 30:50] = 255 self.assertTrue( sum(sum(sum(img[30:50, 30:50] - img[400:420, 300:320]))) > 0) img_wrapper = image_wrap.ImageWrapper(img) target_wrapper = image_wrap.ImageWrapper(mask) mask_wrapper = image_wrap.ImageWrapper(mask) filename = tempfile.mktemp(prefix='mstc', suffix='.png', dir='.') filename_mask = tempfile.mktemp(prefix='mstcm', suffix='.png', dir='.') filename_output = tempfile.mktemp(prefix='mstcr', suffix='.png', dir='.') self.filesToKill.extend([filename, filename_mask, filename_output]) img_wrapper.save(filename) mask_wrapper.save(filename_mask) target_wrapper.save(filename_output) args, error = plugins.callPlugin('DesignPasteClone', img_wrapper, filename, filename_output, inputmaskname=filename_mask, paste_x=300, paste_y=400) wrapper = image_wrap.openImageFile(filename_output) output = wrapper.to_array() self.assertTrue( sum(sum(sum(img[30:50, 30:50] - output[400:420, 300:320]))) == 0)
def test_typical(self): img_wrapper = image_wrap.openImageFile( self.locateFile('tests/images/test.png')) img = img_wrapper.to_array() img_wrapper = image_wrap.ImageWrapper(img) target_wrapper = image_wrap.ImageWrapper(img) filename = self.locateFile('tests/images/test.png') filename_output = tempfile.mktemp(prefix='mstcr', suffix='.png', dir='.') self.filesToKill.extend([filename_output]) target_wrapper.save(filename_output) args, error = plugins.callPlugin('SmartMaskSelector', img_wrapper, filename, filename_output, smallw=100, smallh=100, mediumw=150, mediumh=150, largew=200, largeh=200, size=2, op=2) wrapper = image_wrap.openImageFile(filename_output) output = wrapper.to_array() self.assertTrue(img_wrapper.size[1] == wrapper.size[1]) self.assertTrue(img_wrapper.size[0] == wrapper.size[0]) self.assertTrue(len(output.shape) == 2) totalsize = sum(sum(output / 255)) print totalsize self.assertTrue(totalsize <= (1.5 * 22500)) self.assertTrue(totalsize >= (22500 * 0.5)) self.assertTrue('paste_x' in args and args['paste_x'] > 0) self.assertTrue('paste_y' in args and args['paste_y'] > 0)
def test_something(self): filename = self.locateFile('tests/images/test_project1.jpg') wrapper = image_wrap.openImageFile(filename) filename_output = tempfile.mktemp(prefix='mstcr', suffix='.png', dir='.') self.addFileToRemove(filename_output) img = numpy.asarray(wrapper) image_wrap.ImageWrapper(img).save(filename_output) args, error = plugins.callPlugin('WienerFilter', wrapper, filename, filename_output, percentageChange=0.5) wrapper = image_wrap.openImageFile(filename_output) output = wrapper.to_array() self.assertEqual(output.shape, img.shape) diff = abs(output - img) finaldiff = numpy.zeros((diff.shape[0], diff.shape[1])) for i in range(3): finaldiff = finaldiff + diff[:, :, i] finaldiff[finaldiff > 0] = 1 self.assertTrue( sum(sum(finaldiff)) / (finaldiff.shape[0] * finaldiff.shape[1]) > 0.8)
def test_snap(self): img = numpy.zeros((500, 500), dtype='uint8') wrapper = image_wrap.ImageWrapper(img) filename = tempfile.mktemp(prefix='mstc', suffix='.png', dir='.') filename_output = tempfile.mktemp(prefix='mstcr', suffix='.png', dir='.') self.filesToKill.append(filename) wrapper.save(filename) self.filesToKill.append(filename_output) image_wrap.ImageWrapper(img).save(filename_output) args, error = plugins.callPlugin('CropSelector', wrapper, filename, filename_output, percentage_width=0.1, percentage_height=0.1, eightbit_boundary='yes') wrapper = image_wrap.openImageFile(filename_output) output = wrapper.to_array() self.assertEqual(output.shape, img.shape) self.assertTrue('crop_x' in args and args['crop_x'] <= 56) self.assertTrue('crop_y' in args and args['crop_y'] <= 56) self.assertTrue('crop_width' in args and args['crop_width'] == 56) self.assertTrue('crop_height' in args and args['crop_height'] == 56) self.assertTrue(args['crop_y'] % 8 == 0) self.assertTrue(args['crop_x'] % 8 == 0) self.assertTrue( output[-(args['crop_height'] - args['crop_y'] + 1), -(args['crop_width'] - args['crop_x'] + 1)] == 255) self.assertTrue( output[-(args['crop_height'] - args['crop_y'] - 1), -(args['crop_width'] - args['crop_x'] - 1)] == 0)
def test_something(self): img = numpy.random.randint(0, 255, (500, 500, 3), dtype='uint8') wrapper = image_wrap.ImageWrapper(img) filename = tempfile.mktemp(prefix='mstc', suffix='.png', dir='.') filename_output = tempfile.mktemp(prefix='mstcr', suffix='.png', dir='.') self.filesToKill.append(filename) wrapper.save(filename) self.filesToKill.append(filename_output) image_wrap.ImageWrapper(img).save(filename_output) args, error = plugins.callPlugin('MedianBlur', wrapper, filename, filename_output, kernelSize=25, percentageChange=0.5) wrapper = image_wrap.openImageFile(filename_output) output = wrapper.to_array() self.assertEqual(output.shape, img.shape) diff = abs(output - img) finaldiff = numpy.zeros((500, 500)) for i in range(3): finaldiff = finaldiff + diff[:, :, i] finaldiff[finaldiff > 0] = 1 self.assertTrue(abs(sum(sum(finaldiff)) - 62500) < 100)
def test_all(self): filename = self.locateFile("tests/videos/sample1.mov") filename_output = filename.replace('.mov', '_ds.mov') self.filesToKill.append(filename_output) args, error = plugins.callPlugin('ApplyLensDistortion', None, filename, filename_output, threshold=0.8) self.assertEqual(None, error)
def test_plugin(self): filename= self.locateFile('tests/videos/sample1.mov') filename_output = os.path.join(os.path.dirname(os.path.abspath(filename)), 'sample_out1a.avi') self.filesToKill.append(filename_output) args, error = plugins.callPlugin('FrameDuplicateDrop',None,filename,filename_output,Threshold=3) capin = video_tools.cv2api_delegate.videoCapture(filename) capout = video_tools.cv2api_delegate.videoCapture(filename_output) self.assertEqual(None, error) lenin = capin.get(video_tools.cv2api_delegate.prop_frame_count) lenout = capout.get(video_tools.cv2api_delegate.prop_frame_count) self.assertGreater(lenin,lenout)
def test_boundary(self): img = numpy.zeros((500, 540), dtype='uint8') wrapper = image_wrap.ImageWrapper(img) filename = tempfile.mktemp(prefix='mstc', suffix='.png', dir='.') filename_output = tempfile.mktemp(prefix='mstcr', suffix='.png', dir='.') self.filesToKill.append(filename) wrapper.save(filename) self.filesToKill.append(filename_output) image_wrap.ImageWrapper(img).save(filename_output) args, error = plugins.callPlugin('CropSelector', wrapper, filename, filename_output, percentage_width=0.001, percentage_height=0.0001, eightbit_boundary='yes') wrapper = image_wrap.openImageFile(filename_output) output = wrapper.to_array() img = numpy.zeros((500, 540), dtype='uint8') wrapper = image_wrap.ImageWrapper(img) filename = tempfile.mktemp(prefix='mstc', suffix='.png', dir='.') filename_output = tempfile.mktemp(prefix='mstcr', suffix='.png', dir='.') self.filesToKill.append(filename) wrapper.save(filename) self.filesToKill.append(filename_output) image_wrap.ImageWrapper(img).save(filename_output) args, error = plugins.callPlugin('CropSelector', wrapper, filename, filename_output, percentage_width=1, percentage_height=0.0001, eightbit_boundary='yes') wrapper = image_wrap.openImageFile(filename_output) output = wrapper.to_array()
def snap_no_division(self, wrapper, filename, filename_output): args, error = plugins.callPlugin('CropPermutations', wrapper, filename, filename_output, percentage_width=0.1, percentage_height=0.1, eightbit_boundary='yes') self.assertTrue('crop_x' in args and args['crop_x']['values'] == [8, 16, 24, 32, 40]) self.assertTrue('crop_y' in args and args['crop_y']['values'] == [8, 16, 24, 32, 40]) self.assertTrue('crop_width' in args and args['crop_width'] == 48) self.assertTrue('crop_height' in args and args['crop_height'] == 48)
def test_noise(self): img_wrapper = image_wrap.openImageFile( self.locateFile('tests/images/test_project1.jpg')) filename_output = tempfile.mktemp(prefix='cstcr', suffix='.png', dir='.') self.filesToKill.extend([filename_output]) img_wrapper.save(filename_output) args, error = plugins.callPlugin( 'MagickAddNoise', img_wrapper, self.locateFile('tests/images/test_project1.jpg'), filename_output, **{"Noise Type": "salt-pepper"}) wrapper = image_wrap.openImageFile(filename_output) output = wrapper.to_array() self.assertTrue(output.shape == img_wrapper.to_array().shape)
def no_snap_division(self, wrapper, filename, filename_output): args, error = plugins.callPlugin('CropPermutations', wrapper, filename, filename_output, percentage_width=0.1, percentage_height=0.1, divisions_width=3, divisions_height=2) wrapper = image_wrap.openImageFile(filename_output) output = wrapper.to_array() self.assertEqual(output.shape, wrapper.image_array.shape) self.assertTrue('crop_x' in args and args['crop_x']['values'] == [16, 32, 48]) self.assertTrue('crop_y' in args and args['crop_y']['values'] == [25]) self.assertTrue('crop_width' in args and args['crop_width'] == 50) self.assertTrue('crop_height' in args and args['crop_height'] == 50)
def test_contrast(self): img_wrapper = image_wrap.openImageFile( self.locateFile('tests/images/test_project1.jpg')) filename_output = tempfile.mktemp(prefix='cstcr', suffix='_c.png', dir='.') self.filesToKill.extend([filename_output]) img_wrapper.save(filename_output) args, error = plugins.callPlugin( 'Constrast', img_wrapper, self.locateFile('tests/images/test_project1.jpg'), filename_output, direction="increase") wrapper = image_wrap.openImageFile(filename_output) output = wrapper.to_array() self.assertTrue(output.shape == img_wrapper.to_array().shape)
def test_gamma(self): img_wrapper = image_wrap.openImageFile( self.locateFile('tests/images/test_project1.jpg')) filename_output = tempfile.mktemp(prefix='cstcr', suffix='.png', dir='.') self.filesToKill.extend([filename_output]) img_wrapper.save(filename_output) args, error = plugins.callPlugin( 'ManualGammaCorrection', img_wrapper, self.locateFile('tests/images/test_project1.jpg'), filename_output, gamma=2.0) wrapper = image_wrap.openImageFile(filename_output) output = wrapper.to_array() self.assertTrue(output.shape == img_wrapper.to_array().shape)
def test_something(self): img = numpy.random.randint(0, 255, (500, 500, 3), dtype='uint8') img_wrapper = image_wrap.ImageWrapper(img) target_wrapper = image_wrap.ImageWrapper( numpy.zeros((500, 500, 3), dtype=numpy.uint8)) filename = tempfile.mktemp(prefix='cstc', suffix='.png', dir='.') filename_output = tempfile.mktemp(prefix='cstcr', suffix='.png', dir='.') self.filesToKill.extend([filename, filename_output]) img_wrapper.save(filename) target_wrapper.save(filename_output) op = plugins.getOperation('OutputPNG::Foo') self.assertEqual('OutputPng::Foo', op['name']) args, error = plugins.callPlugin('OutputPNG::Foo', img_wrapper, filename, filename_output) wrapper = image_wrap.openImageFile(filename_output) output = wrapper.to_array() self.assertTrue(numpy.all(img == output))
def test_modulate(self): img_wrapper = image_wrap.openImageFile( self.locateFile('tests/images/test_project1.jpg')) filename_output = tempfile.mktemp(prefix='cstcr', suffix='.png', dir='.') self.filesToKill.extend([filename_output]) img_wrapper.save(filename_output) args, error = plugins.callPlugin( 'MagickModulate', img_wrapper, self.locateFile('tests/images/test_project1.jpg'), filename_output, saturation=130, brightness=130) wrapper = image_wrap.openImageFile(filename_output) output = wrapper.to_array() self.assertTrue(output.shape == img_wrapper.to_array().shape)
def test_snap(self): img = numpy.zeros((500,540),dtype='uint8') wrapper = image_wrap.ImageWrapper(img) filename = tempfile.mktemp(prefix='mstc',suffix='.png',dir='.') filename_output = tempfile.mktemp(prefix='mstcr', suffix='.png', dir='.') self.filesToKill.append(filename) wrapper.save(filename) self.filesToKill.append(filename_output) image_wrap.ImageWrapper(img).save(filename_output) args,error = plugins.callPlugin('CV2ResizeByPercent', wrapper, filename, filename_output, percentage_width = 0.9, percentage_height=0.9, interpolation='other' ) wrapper = image_wrap.openImageFile(filename_output) output = wrapper.to_array() self.assertEqual((448,480),output.shape)
def test_levels(self): img_wrapper = image_wrap.openImageFile( self.locateFile('tests/images/test_project1.jpg')) filename_output = tempfile.mktemp(prefix='cstcr', suffix='_l.png', dir='.') #self.filesToKill.extend([filename_output]) img_wrapper.save(filename_output) args, error = plugins.callPlugin( 'LevelCorrectionNoMask', img_wrapper, self.locateFile('tests/images/test_project1.jpg'), filename_output, blackpoint=25, whitepoint=75, gamma=1.5) wrapper = image_wrap.openImageFile(filename_output) output = wrapper.to_array() self.assertTrue(output.shape == img_wrapper.to_array().shape)
def test_gray(self): img_wrapper = image_wrap.openImageFile( self.locateFile('tests/images/test_project5.jpg')) img = img_wrapper.to_array() img_wrapper = image_wrap.ImageWrapper(img) target_wrapper = image_wrap.ImageWrapper(img) filename = self.locateFile('tests/images/test_project5.jpg') filename_output = tempfile.mktemp(prefix='mstcr', suffix='.jpg', dir='.') self.filesToKill.extend([filename_output]) target_wrapper.save(filename_output, format='JPEG') args, error = plugins.callPlugin('ExifGPSChange', img_wrapper, filename, filename_output) self.assertEqual(error, None) data = exif.getexif(filename) data_output = exif.getexif(filename_output) self.assertTrue(data['GPS Latitude'] != data_output['GPS Latitude']) self.assertTrue(data['GPS Longitude'] != data_output['GPS Longitude'])
def test_something(self): img = numpy.random.randint(0, 255, (500, 500, 3), dtype='uint8') img_wrapper = image_wrap.ImageWrapper(img) target_wrapper = image_wrap.ImageWrapper(img) filename = tempfile.mktemp(prefix='cstc', suffix='.png', dir='.') filename_output = tempfile.mktemp(prefix='cstcr', suffix='.png', dir='.') self.filesToKill.extend([filename, filename_output]) img_wrapper.save(filename) target_wrapper.save(filename_output) args, error = plugins.callPlugin('Crop', img_wrapper, filename, filename_output, pixel_width=50, pixel_height=50, crop_x=7, crop_y=15) wrapper = image_wrap.openImageFile(filename_output) output = wrapper.to_array() self.assertTrue(output.shape == (450,450,3)) self.assertTrue(numpy.all(output[0:10,0:10]== img[15:25,7:17]))
def test_something(self): img = numpy.random.randint(0, 255, (500, 400, 3), dtype='uint8') img_wrapper = image_wrap.ImageWrapper(img) target_wrapper = image_wrap.ImageWrapper(img) filename = tempfile.mktemp(prefix='cstc', suffix='.png', dir='.') filename_output = tempfile.mktemp(prefix='cstcr', suffix='.png', dir='.') self.filesToKill.extend([filename, filename_output]) img_wrapper.save(filename) target_wrapper.save(filename_output) args, error = plugins.callPlugin('CV2Resize', img_wrapper, filename, filename_output, width=550, height=450, interpolation='cubic') wrapper = image_wrap.openImageFile(filename_output) output = wrapper.to_array() self.assertTrue(output.shape == (450, 550, 3))
def test_something(self): img = numpy.zeros((500,500),dtype='uint8') wrapper = image_wrap.ImageWrapper(img) filename = tempfile.mktemp(prefix='mstc',suffix='.png',dir='.') filename_output = tempfile.mktemp(prefix='mstcr', suffix='.png', dir='.') self.filesToKill.append(filename) wrapper.save(filename) self.filesToKill.append(filename_output) wrapper.save(filename_output) args,error = plugins.callPlugin('MaskSelector', wrapper, filename, filename_output, percentage_width = 0.1, percentage_height=0.1) wrapper = image_wrap.openImageFile(filename_output) output = wrapper.to_array() self.assertTrue(sum(sum(output))>255) self.assertTrue(sum(sum(output)) < numpy.prod(output.shape)) self.assertEqual(output.shape, img.shape) self.assertTrue('paste_x' in args and args['paste_x'] > 0) self.assertTrue('paste_y' in args and args['paste_y'] > 0)
def test_plugin(self): plugins.loadPlugins() filename = self.locateFile("tests/videos/sample1.mov") filename_output = os.path.join(os.path.split(filename)[0], "sample1_out.avi") self.filesToKill.append(filename_output) file = os.path.join(os.path.split(filename)[0], "sample1.csv") self.filesToKill.append(file) args, errors = plugins.callPlugin('DroneShake', None, #image would go here for image manipulations filename, filename_output, fps=13.53, height=360, width=480) # checking to make sure there are no errors self.assertEqual(errors, None) # Get the output video to compare the height and width video = cv2api_delegate.videoCapture(filename_output) width = int(video.get(cv2api_delegate.prop_frame_width)) height = int(video.get(cv2api_delegate.prop_frame_height)) self.assertTrue(int(width) == 480) self.assertTrue(int(height) == 360)
def test_something(self): img_wrapper = image_wrap.openImageFile( self.locateFile('tests/images/test.tif')) img = img_wrapper.to_array() img_wrapper = image_wrap.ImageWrapper(img) target_wrapper = image_wrap.ImageWrapper(img) filename = self.locateFile('tests/images/test.tif') filename_output = tempfile.mktemp(prefix='mstcr', suffix='.png', dir='.') self.filesToKill.extend([filename_output]) target_wrapper.save(filename_output) args, error = plugins.callPlugin( 'ImageSizeSelector', img_wrapper, filename, filename_output, cameraDataFile=self.locateFile('data/camera_sizes.json'), pickOne='yes', ) self.assertTrue('height' in args and args['height'] == 3264) self.assertTrue('width' in args and args['width'] == 4928)