Beispiel #1
0
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)
Beispiel #3
0
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)
Beispiel #4
0
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 []
Beispiel #5
0
 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