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_composite(self): scModel = ImageProjectModel(self.locateFile('images/sample.json')) processProjectProperties(scModel) scModel.assignColors() generator = ProbeGenerator(scModel=scModel, processors=[ProbeSetBuilder(scModel=scModel, compositeBuilders=[Jpeg2000CompositeBuilder, ColorCompositeBuilder]), DetermineTaskDesignation(scModel, inputFunction=fetch_qaData_designation)]) probeSet = generator() self.assertTrue(len(probeSet) == 2) self.assertTrue(len([x for x in probeSet if x.edgeId == ('input_mod_2','input_mod_2_3')]) == 1) scModel.toCSV('test_composite.csv',additionalpaths=[getPathValuesFunc('linkcolor'), 'basenode']) self.addFileToRemove('test_composite.csv') with open('test_composite.csv','rb') as fp: reader = csv.reader(fp) for row in reader: self.assertEqual(6, len(row)) self.assertTrue(getOperation(row[3]) is not None) self.assertTrue(len(probeSet) == 2) self.assertTrue('jp2' in probeSet[0].composites) self.assertTrue('color' in probeSet[0].composites) self.assertTrue('bit number' in probeSet[0].composites['jp2']) self.assertTrue('file name' in probeSet[0].composites['jp2']) self.assertTrue('color' in probeSet[0].composites['color']) self.assertTrue('file name' in probeSet[0].composites['color']) self.assertTrue('spatial' in probeSet[0].taskDesignation) full_set = ExtendProbesForDetectEdges(scModel, lambda x: True).apply(probeSet) self.assertTrue(len(full_set) == 6) for i in range(2,6): self.assertEqual('detect',full_set[i].taskDesignation)
def to_operations_md(place='.'): with open(os.path.join(place, 'operations.md'), 'w') as fp: for category, operations in operations_by_category().iteritems(): write_header(fp, category, 1) for operation_name in operations: logging.getLogger('maskgen').info('Generating %s' % operation_name) operation = getOperation(operation_name) write_header( fp, operation_name, 2, status='deprecated' if operation.deprecated else None) write_text(fp, operation.description) default_inc_mask = getValue(operation.includeInMask, 'default') mask_included = { file_type: getValue(operation.includeInMask, file_type, default_inc_mask) for file_type in ['video', 'audio', 'image'] } mask_included = [x for x, y in mask_included.iteritems() if y] fp.write('\nInclude as Probe Mask for [%s]\n' % ', '.join(mask_included)) write_header(fp, 'Mandatory Paramaters', 3) for key, definition in operation.mandatoryparameters.iteritems( ): write_parameter(fp, key, definition) write_header(fp, 'Optional Paramaters', 3) for key, definition in operation.optionalparameters.iteritems( ): write_parameter(fp, key, definition) write_header(fp, 'Validation Rules', 3) for rule in operation.rules: write_graph_rule(fp, rule) write_header(fp, 'Allowed Transitions', 3) for rule in operation.transitions: write_bullet(fp, rule) write_header(fp, 'Probe Generation Rules', 3) if operation.maskTransformFunction is None: write_text( fp, "*Default*: resize, rotate, crop, and transform where applicable" ) else: for media, rule in operation.maskTransformFunction.iteritems( ): write_mask_rule(fp, media, rule) write_header(fp, 'QA Questions', 3) if operation.qaList is not None: for rule in operation.qaList: write_bullet(fp, rule) write_header(fp, 'Analysis Rules', 3) for rule in operation.analysisOperations: write_analysis(fp, rule)
def fix_projects(args, projectNAme): """ """ project = maskgen.scenario_model.loadProject(projectNAme) finalNodes = [] # check for disconnected nodes # check to see if predecessors > 1 consist of donors graph = project.getGraph() finalfiles = set() for edge_id in graph.get_edges(): edge = graph.get_edge(edge_id[0], edge_id[1]) if edge is None: continue op = getOperation(edge['op']) if getValue(edge, 'empty mask') == 'yes' and 'checkEmpty' in op.rules: project.select((edge_id[0], edge_id[1])) project.remove(children=True) for node in graph.get_nodes(): successors = graph.successors(node) if len(successors) == 0: finalNodes.append(node) duplicates = dict() for node in finalNodes: filename = graph.get_node(node)['file'] if filename in finalfiles and filename not in duplicates: duplicates[filename] = node finalfiles.add(filename) for k, v in duplicates.iteritems(): project.selectImage(v) project.remove() print('delete ' + v) project.save() #summary_file = os.path.join(graph.dir, '_overview_.png') #ImageGraphPainter(graph).output(summary_file) return []
def _convertEdge(self, edge): """ :param edge: :return: new for edge """ new_operation_node = {} if 'plugin_name' in edge: new_operation_node['op_type'] = 'PluginOperation' new_operation_node['id'] = self.toID(edge['plugin_name']) new_operation_node['plugin'] = edge['plugin_name'] else: new_operation_node['op_type'] = 'PreProcessedMediaOperation' new_operation_node['id'] = self.toID(edge['op']) op = getOperation(edge['op'], fake=True) new_operation_node['category'] = op.category new_operation_node['op'] = op.name new_operation_node['software'] = edge['softwareName'] new_operation_node['software version'] = edge['softwareVersion'] new_operation_node['description'] = edge['description'] semanticGroups = getValue(edge, 'semanticGroups', None) if semanticGroups is not None and len(semanticGroups) > 0: new_operation_node['semanticGroups'] = semanticGroups new_operation_node[ 'directory'] = "{" + new_operation_node['id'] + "}".replace( ' ', '_') if 'recordMaskInComposite' in edge: new_operation_node['recordMaskInComposite'] = edge[ 'recordMaskInComposite'] arguments = {} for k, v in getValue(edge, 'arguments', {}).iteritems(): if k in ['function', 'video_function', 'audio_function']: continue value = self._convertArgument(v) if value is not None: arguments[k] = value new_operation_node['arguments'] = arguments return new_operation_node