Example #1
0
    def analyze_file(self, an_uri):
        """Returns a FileDescription

        :param an_uri: the URI pointing to the file to be analyzed
        :rtype: :py:class:`damn_at.FileDescription`
        :raises: AnalyzerException, AnalyzerFileException, AnalyzerUnknownTypeException
        """
        if not is_existing_file(an_uri):
            raise AnalyzerFileException('E: Analyzer: No such file "%s"!' %
                                        (an_uri))
        mimetype = mimetypes.guess_type(an_uri, False)[0]
        if mimetype in self.analyzers:
            try:
                file_descr = self.analyzers[mimetype].plugin_object.analyze(
                    an_uri)
                file_descr.mimetype = mimetype
                self._file_metadata(an_uri, file_descr)
                return file_descr
            except Exception as ex:
                import traceback
                traceback.print_exc()
                raise AnalyzerException(
                    "E: Failed to analyze %s because of %s" %
                    (an_uri, str(ex)))
        else:
            raise AnalyzerUnknownTypeException(
                "E: Analyzer: No analyzer for %s (file: %s)" %
                (mimetype, an_uri))
Example #2
0
    def analyze(self, an_uri):
        fileid = FileId(filename=os.path.abspath(an_uri))
        file_descr = FileDescription(file=fileid)
        file_descr.assets = []

        text_mimetype = mimetypes.guess_type(an_uri)[0]

        asset_descr = AssetDescription(asset=AssetId(
            subname='content',
            mimetype=text_mimetype,
            file=fileid
        ))

        num_lines = sum(1 for line in open(an_uri))

        with magic.Magic(flags=magic.MAGIC_MIME_ENCODING) as mm:
            charset = mm.id_filename(an_uri)

        asset_descr.metadata = {}

        asset_descr.metadata['lines'] = MetaDataValue(
            type=MetaDataType.INT,
            int_value=num_lines
        )
        asset_descr.metadata['charset'] = MetaDataValue(
            type=MetaDataType.STRING,
            string_value=charset
        )

        file_descr.assets.append(asset_descr)

        return file_descr
Example #3
0
    def analyze(self, an_uri):
        fileid = FileId(filename=os.path.abspath(an_uri))
        file_descr = FileDescription(file=fileid)
        file_descr.assets = []

        image_mimetype = mimetypes.guess_type(an_uri)[0]

        asset_descr = AssetDescription(asset=AssetId(
            subname='main layer', mimetype=image_mimetype, file=fileid))

        try:
            pro = subprocess.Popen(['exiftool', an_uri],
                                   stdout=subprocess.PIPE,
                                   stderr=subprocess.PIPE)
            out, err = pro.communicate()
            if pro.returncode != 0:
                msg = 'ImageAnalyzer failed %s with error code %d!:\n%s' % (
                    an_uri, pro.returncode, str(err))
                LOG.error(msg)
                raise AnalyzerException(msg)
        except OSError as e:
            msg = 'ImageAnalyzer failed %s:\n%s' % (an_uri, e)
            LOG.error(msg)
            raise e(msg)
        meta = {}
        flag = 0
        lines = str(out).strip().split('\n')
        for line in lines:
            line = line.split(':', 1)
            if len(line) == 1:
                line = line[0].split('=')
            line = [l.strip() for l in line]
            if line[0] == 'MIME Type':
                flag = 1
            if flag == 1 and line[0] not in ['MIME Type', 'Image Size']:
                meta[line[0].lower().replace(' ', '_')] = line[1]

        from damn_at.analyzers.image import metadata

        extractor_map = {
            'image/png': metadata.MetaDataPNG,
            'image/jpeg': metadata.MetaDataJPG,
            'image/x-ms-bmp': metadata.MetaDataBMP,
            'image/x-photoshop': metadata.MetaDataPSD,
            'application/x-xcf': metadata.MetaDataXCF,
        }

        if image_mimetype in extractor_map:
            asset_descr.metadata = extractor_map[image_mimetype].extract(meta)
        else:
            asset_descr.metadata = {}

        for key, value in meta.items():
            if key not in asset_descr.metadata:
                asset_descr.metadata['exif-' + key] = MetaDataValue(
                    type=MetaDataType.STRING, string_value=value)

        file_descr.assets.append(asset_descr)

        return file_descr
    def analyze(self, an_uri):
        fileid = FileId(filename=os.path.abspath(an_uri))
        file_descr = FileDescription(file=fileid)
        file_descr.assets = []

        image_mimetype = mimetypes.guess_type(an_uri)[0]

        asset_descr = AssetDescription(asset=AssetId(
            subname='main layer',
            mimetype=image_mimetype,
            file=fileid
        ))

        im = Image.open(an_uri)

        meta = {'format': im.format, 'size': im.size, 'mode': im.mode}
        meta.update(im.info)

        from damn_at.analyzers.image.metadata import MetaDataTGA

        asset_descr.metadata = MetaDataTGA.extract(meta)

        file_descr.assets.append(asset_descr)

        return file_descr
Example #5
0
def get_assimp_types():
    """Extract all possible formats and store their mime types"""
    # TODO: not exactly reliable, a lot of unknown mimetypes
    # for those extensions :/
    try:
        pro = subprocess.Popen(
            ['assimp', 'listext'],
            stdout=subprocess.PIPE,
            stderr=subprocess.PIPE
        )
        out, err = pro.communicate()
        if pro.returncode != 0:
            LOG.debug("'assimp listext' failed with error code %d! "
                      % pro.returncode,
                      out,
                      err
                      )
            return []
    except OSError as oserror:
        LOG.debug("'assimp listext' failed! %s", oserror)
        return []

    extensions = out.split(';')
    mimes = []
    for ext in extensions:
        mime = mimetypes.guess_type('file.' + ext, False)[0]
        LOG.info('Mimetype Info:\n\tExtension: %s\n\tMime: %s', ext, mime)
        mimes.append(mime)
    return mimes
def get_assimp_types():
    """
    Extract all possible formats and store their mime types
    """
    # TODO: not exactly reliable, a lot of unknown mimetypes
    # for those extensions :/
    try:
        pro = subprocess.Popen(
            ['assimp', 'listext'],
            stdout=subprocess.PIPE,
            stderr=subprocess.PIPE
        )
        out, err = pro.communicate()
        if pro.returncode != 0:
            LOG.debug("'assimp listext' failed with error code %d!\n%s\n%s" % (
                pro.returncode,
                out,
                err
            ))
            return []
    except OSError as oserror:
        LOG.debug("'assimp listext' failed! %s", oserror)
        return []

    extensions = out.split(';')
    mimes = []
    for ext in extensions:
        mime = mimetypes.guess_type('file.' + ext, False)[0]
        LOG.info('Mimetype Info:\n\tExtension: %s\n\tMime: %s' % (ext, mime))
        mimes.append(mime)
    return mimes
Example #7
0
    def analyze(self, an_uri):
        fileid = FileId(filename = os.path.abspath(an_uri))
        file_descr = FileDescription(file = fileid)
        file_descr.assets = []

        image_mimetype = mimetypes.guess_type(an_uri)[0]

        asset_descr = AssetDescription(asset = AssetId(subname = 'main layer', mimetype = image_mimetype, file = fileid))

        try:
            pro = subprocess.Popen(['exiftool',an_uri], stdout=subprocess.PIPE,
                    stderr=subprocess.PIPE)
            out, err = pro.communicate()
            if pro.returncode != 0:
                print("E: ImageAnalyzer failed %s with error code %d! "
                        %(an_uri, pro.returncode), out, err)
                raise AnalyzerException("ImageAnalyzer failed %s with error code %d! "%(an_uri, pro.returncode))
        except OSError as e:
            print("E: ImageAnalyzer failed %s (%s)" %(an_uri, e))
            raise e

        meta = {}
        flag = 0
        lines = out.strip().split('\n')
        for line in lines:
            line = line.split(':', 1)
            if len(line) == 1:
                line = line[0].split('=')
            line = [l.strip() for l in line]
            if line[0] == 'MIME Type' : flag = 1
            if flag == 1 and line[0] not in ['MIME Type', 'Image Size']:
                meta[line[0].lower().replace(' ','_')] = line[1]

        from damn_at.analyzers.image import metadata

        extractor_mapping = {'image/png' : metadata.MetaDataPNG,
                'image/jpeg' : metadata.MetaDataJPG,
                'image/x-ms-bmp' : metadata.MetaDataBMP,
                'image/x-photoshop' : metadata.MetaDataPSD,
                'application/x-xcf' : metadata.MetaDataXCF,}

        if image_mimetype in extractor_mapping:
            asset_descr.metadata = extractor_mapping[image_mimetype].extract(meta)
        else:
            asset_descr.metadata = {}

        for key, value in meta.items():
            if key not in asset_descr.metadata:
                asset_descr.metadata['exif-'+key] = MetaDataValue(type=MetaDataType.STRING, string_value = value)

        file_descr.assets.append(asset_descr)

        return file_descr
 def test_analyzer(self):
     keys = ['duration', 'fingerprint_uuid', 'fingerprint']
     analyzer = acoustid_analyzer.SoundAnalyzer()
     uri = os.path.join(os.path.dirname(__file__),
                        '../../peragro-test-files/audio')
     for root, dirs, files in os.walk(uri):
         for file_name in files:
             path = os.path.join(root, file_name)
             mime = mimetypes.guess_type(path, False)[0]
             if mime.startswith('audio/'):
                 file_descr = analyzer.analyze(path)
                 if file_descr:
                     for asset in file_descr.assets:
                         for key, value in asset.metadata.items():
                             assert key in keys, \
                                 "Unknown key(feature):%s detected" % key
                 else:
                     assert False, \
                         "AcoustID analyzer failed with some error"
Example #9
0
def get_assimp_types():
    """
    Extract all possible formats and store their mime types
    """
    try:
        pro = subprocess.Popen(['assimp', 'listext'], stdout=subprocess.PIPE,stderr=subprocess.PIPE)
        out, err = pro.communicate()
        if pro.returncode != 0:
            logger.debug("'assimp listext' failed with error code %d! "%(pro.returncode),
                    out, err)
            return []
    except OSError as oserror:
        logger.debug("'assimp listext' failed! %s", oserror)
        return []

    extensions = out.split(';')
    mimes = []
    for ext in extensions:
        mime = mimetypes.guess_type('file.'+ext, False)[0]
        print ext, mime
        mimes.append(mime)
    return mimes
Example #10
0
    def analyze_file(self, an_uri):
        """Returns a FileDescription

        :param an_uri: the URI pointing to the file to be analyzed
        :rtype: :py:class:`damn_at.FileDescription`
        :raises: AnalyzerException, AnalyzerFileException, AnalyzerUnknownTypeException
        """
        if not is_existing_file(an_uri):
            raise AnalyzerFileException('E: Analyzer: No such file "%s"!' % (an_uri))
        mimetype = mimetypes.guess_type(an_uri, False)[0]
        if mimetype in self.analyzers:
            try:
                file_descr = self.analyzers[mimetype].plugin_object.analyze(an_uri)
                file_descr.mimetype = mimetype
                self._file_metadata(an_uri, file_descr)
                return file_descr
            except Exception as ex:
                import traceback
                traceback.print_exc()
                raise AnalyzerException("E: Failed to analyze %s because of %s" % (an_uri, str(ex)))
        else:
            raise AnalyzerUnknownTypeException("E: Analyzer: No analyzer for %s (file: %s)" % (mimetype, an_uri))
 def test_analyzer(self):
     keys = ['bpm', 'beats_count', 'chord', 'key', 'average_loudness',
             'lossless', 'mood_party', 'genre_electronic', 'voice_instrumental',
             'mood_aggressive', 'ismir04_rhythm', 'mood_electronic', 'timbre',
             'danceability', 'genre_rosamerica', 'mood_relaxed', 'mood_acoustic',
             'moods_mirex', 'mood_happy', 'genre_tzanetakis', 'genre_dortmund',
             'mood_sad', 'gender', 'tonal_atonal']
     analyzer = feature_extraction.SoundAnalyzer()
     uri = os.path.join(os.path.dirname(__file__),
                        '../../peragro-test-files/audio')
     for root, dirs, files in os.walk(uri):
         for file_name in files:
             path = os.path.join(root, file_name)
             mime = mimetypes.guess_type(path, False)[0]
             if mime.startswith('audio/'):
                 file_descr = analyzer.analyze(path)
                 if file_descr:
                     for asset in file_descr.assets:
                         for key, value in asset.metadata.items():
                             assert key in keys, \
                                 "Unknown key(feature):%s detected" % key
                 else:
                     assert False, \
                         "Feature extractor failed with some error"
Example #12
0
def project_page(request, author_name, project_slug):
	user = request.user
	user_profile = Profile.objects.get(pk=user)
	user_membership = Membership.objects.filter(member=user)
	project_list=[]
	for x in user_membership:
		project_list.append(x.project)
	author_ob = User.objects.get(username = author_name)
	project_ob = Project.objects.filter(author = author_ob, slug = project_slug)[0]
	members_list = project_ob.members.all()
	project_media = MediaUpload.objects.filter(project=project_ob)
	roles = Role.objects.filter(project = project_ob)
	task_list = TaskUI.objects.filter(project=project_ob)
	relation_list = AssignedResource_Relation.objects.filter(project = project_ob)
	priority_list = Priority.objects.filter(project=project_ob)
	type_list = TaskType.objects.filter(project=project_ob)



	profile_list = []	
	for x in members_list:
		p = Profile.objects.get(pk = x)
		profile_list.append(p)
	context={
		'project_ob':project_ob,
		'profile_list':profile_list,
		'user_profile' : user_profile,
		'user' : user,
		'user_project_list':project_list,
		'project_media':project_media,
		'roles':roles,
		'members_list':members_list,
		'task_list':task_list,
		'relation_list':relation_list,
		'type_list':type_list,
		'priority_list':priority_list,
	}
	if request.method == 'POST':
		# for x in 
		if request.POST.get('update-role'):
			role = Role.objects.get(id = int(request.POST['id']))
			role.name = request.POST['name']
			role.save()
			return HttpResponseRedirect('.')

		elif request.POST.get('delete-role'):
			role = Role.objects.get(id = int(request.POST['id']))
			role.delete()
			return HttpResponseRedirect('.')

		elif request.POST.get('new-role'):
			role = Role()
			role.name = request.POST['name']
			role.project = project_ob
			role.save()
			return HttpResponseRedirect('.')
		
		elif request.POST.get('update-rel'):
			rel = AssignedResource_Relation.objects.get(id = int(request.POST['id']))
			rel.task = TaskUI.objects.get(id = int(request.POST['task']))
			rel.user = User.objects.get(id = int(request.POST['user']))
			rel.role = Role.objects.get(id = int(request.POST['role']))
			rel.effort = request.POST['effort'] 
			rel.save()
			return HttpResponseRedirect('.')

		elif request.POST.get('delete-rel'):
			rel = AssignedResource_Relation.objects.get(id = int(request.POST['id']))
			rel.delete()
			return HttpResponseRedirect('.')

		elif request.POST.get('new-rel'):
			rel = AssignedResource_Relation.objects.get(id = int(request.POST['id']))
			rel.task = TaskUI.objects.get(id = int(request.POST['task']))
			rel.user = User.objects.get(id = int(request.POST['user']))
			rel.role = Role.objects.get(id = int(request.POST['role']))
			rel.effort = request.POST['effort'] 
			rel.project = project_ob
			rel.save()
			return HttpResponseRedirect('.')
	
		elif request.POST.get('update-task'):	
			task = TaskUI.objects.get(id = int(request.POST['id']))
			task.name = request.POST['name']
			task.short_name = request.POST['short-name']
			task.level = request.POST['level']
			task.summary = request.POST['summary']
			task.description = request.POST['description']
			task.status = request.POST['status']
			task.priority = Priority.objects.get(id = int(request.POST['priority']))
			task.type = TaskType.objects.get(id = int(request.POST['type']))
			if request.POST.get('start-is-milestone'):
				task.start_is_milestone = True
			else:
				pass
			if request.POST.get('end-is-milestone'):
				task.end_is_milestone = True
			else:
				pass
			if request.POST.get('has-child'):
				task.start_is_milestone = True
			else:
				pass
			if request.POST.get('can-write'):
				task.start_is_milestone = True
			else:
				pass
			task.depends = request.POST['depends']
			task.save()
			return HttpResponseRedirect('.')

		elif request.POST.get('del-task'):	
			task = TaskUI.objects.get(id = int(request.POST['id']))
			task.delete()
			return HttpResponseRedirect('.')

		elif request.POST.get('update-task'):	
			task = TaskUI.objects.get(id = int(request.POST['id']))
			task.name = request.POST['name']
			task.short_name = request.POST['short-name']
			task.level = request.POST['level']
			task.summary = request.POST['summary']
			task.description = request.POST['description']
			task.status = request.POST['status']
			task.priority = Priority.objects.get(id = int(request.POST['priority']))
			task.type = TaskType.objects.get(id = int(request.POST['type']))
			if request.POST.get('start-is-milestone'):
				task.start_is_milestone = True
			else:
				pass
			if request.POST.get('end-is-milestone'):
				task.end_is_milestone = True
			else:
				pass
			if request.POST.get('has-child'):
				task.start_is_milestone = True
			else:
				pass
			if request.POST.get('can-write'):
				task.start_is_milestone = True
			else:
				pass
			task.depends = request.POST['depends']
			task.save()
			return HttpResponseRedirect('.')

		elif request.POST.get('del-task'):	
			task = TaskUI.objects.get(id = int(request.POST['id']))
			task.delete()
			return HttpResponseRedirect('.')

		elif request.POST.get('new-task'):	
			task = TaskUI()
			task.name = request.POST['name']
			task.short_name = request.POST['short-name']
			task.project = request.POST['project']
			task.author = request.POST['author']
			task.level = request.POST['level']
			task.summary = request.POST['summary']
			task.description = request.POST['description']
			task.status = request.POST['status']
			task.priority = Priority.objects.get(id = int(request.POST['priority']))
			task.type = TaskType.objects.get(id = int(request.POST['type']))
			task.project = project_ob
			task.author = request.user
			if request.POST.get('start-is-milestone'):
				task.start_is_milestone = True
			else:
				pass
			if request.POST.get('end-is-milestone'):
				task.end_is_milestone = True
			else:
				pass
			if request.POST.get('has-child'):
				task.start_is_milestone = True
			else:
				pass
			if request.POST.get('can-write'):
				task.start_is_milestone = True
			else:
				pass
			task.depends = request.POST['depends']
			task.save()
			return HttpResponseRedirect('.')

		# elif request.POST.get() 
			# for key in request.POST.iterkeys():
			# 	v
			# 	if key == 'new_role':
			# 		if request.POST[key] != "":
			# 			role = Role()
			# 			role.name = request.POST[key]
			# 			role.project = project_ob
			# 			role.save()
			# 		else:
			# 			pass
			# 	elif key == 'save_role':
			# 		pass
			# 	else:
			# 		role.name = request.POST[key]
			# 		role.save()
		
		# elif request.POST.get('save_relation'):
		# 	flag = 0
		# 	for key in request.POST.iterkeys():
		# 		if key in ['new_task','new_role','new_effort','new_user']:
		# 			if flag == 0:
		# 				if request.POST.get('add_new_relation'):	
		# 					flag = 1
		# 					rel = AssignedResource_Relation()
		# 					rel.project = project_ob
		# 					rel.task = TaskUI.objects.get(id = int(request.POST['new_task']))
		# 					rel.user = User.objects.get(id = int(request.POST['new_user']))
		# 					rel.role = Role.objects.get(id = int(request.POST['new_role']))
		# 					rel.effort = request.POST['new_effort'] 
		# 					action.send(rel.user, verb='assigned', action_object=rel.role, target=rel.task)
		# 					rel.save()
		# 				else:
		# 					pass
		# 		elif key == 'save_relaltion':
		# 			pass
		# 		else:
		# 			for rel in relation_list:
		# 				if str(rel.id) == key:
		# 					rel.task = TaskUI.objects.get(id = int(request.POST[key]))
		# 					rel.role = Role.objects.get(id = int(request.POST[key+'_role']))
		# 					rel.user = User.objects.get(id = int(request.POST[key+'_user']))
		# 					rel.effort = int(request.POST[key+'_effort'])
							# rel.save()

			# if request.POST.get('save_reelaltion'):
								# for x in roles:
			# 	try:
			# 		role = Role.objects.get(id = int(request.POST[x.id]))
			# 		role.name = 
			# 	role.	
		
		else:
			media_ob = MediaUpload.objects.create(project=project_ob)
			media_ob.media = request.FILES['file']
		# media_ob.project = project_ob
			media_ob.save()
			if media_ob.media.url:
				analyzer = Analyzer()
				path = os.path.join(MEDIA_ROOT, media_ob.media.name)
				media_ob.mimetype = mimetypes.guess_type(path, False)[0]
				file_descr = analyzer.analyze_file(path)
				print(file_descr)
				file_descr.hash = calculate_hash_for_file(path)
				media_ob.file_description = file_descr
				media_ob.hash = file_descr.hash
				media_ob.save()
				action.send(request.user, verb='uploaded', action_object=media_ob, target=project_ob)
				if 'video' in media_ob.mimetype:	
					transcdoer_path = MEDIA_ROOT
					transcoder = Transcoder(transcdoer_path)
					asset_name = get_asset_names_in_file_descr(file_descr)
					asset_name = asset_name[0]
					asset_id = find_asset_ids_in_file_descr(file_descr, asset_name)
					asset_id = asset_id[0]
					target_mimetype = transcoder.get_target_mimetype(media_ob.mimetype, 'image/jpeg')	
					height = file_descr.assets[0].metadata['height'].int_value
					width = file_descr.assets[0].metadata['width'].int_value
					print('height', height)
					print('height', width)					
					duration = file_descr.assets[0].metadata['duration'].string_value					
					# new_width = 200
					# new_height = 200*(height/width)
					try:
						time = duration.split(':')
						time = eval(time[0])*3600 + eval(time[1])*60 + eval(time[2])
					except:
						time = duration.split('.')
						time = eval(time[0])
					if time < 10:
						options = {'second':-1,'size':(width, height)}
					else:
						options = {'second':5,'size':(width, height)}
					get_image = transcoder.transcode(file_descr, asset_id, target_mimetype, **options)
					media_ob.resource_link = get_image[0]
					media_ob.save()				 

		return HttpResponse('done')
	else:
		return render(request, 'project_page.html', context)