From: yomguy Date: Wed, 11 May 2011 23:17:08 +0000 (+0000) Subject: fix dc and mean_level analyzers, add watermarking to graphers X-Git-Tag: 0.3.2~34 X-Git-Url: https://git.parisson.com/?a=commitdiff_plain;h=14d2de388780360986b6bfee4b9762dc3130f087;p=timeside.git fix dc and mean_level analyzers, add watermarking to graphers --- diff --git a/timeside/analyzer/dc.py b/timeside/analyzer/dc.py index d293d76..5b4ef04 100644 --- a/timeside/analyzer/dc.py +++ b/timeside/analyzer/dc.py @@ -30,7 +30,7 @@ class MeanDCShift(Processor): @interfacedoc def setup(self, channels=None, samplerate=None, nframes=None): super(MeanDCShift, self).setup(channels, samplerate, nframes) - self.value = 0 + self.values = numpy.array([0]) @staticmethod @interfacedoc @@ -51,9 +51,9 @@ class MeanDCShift(Processor): return "%s %s" % (str(self.value), unit()) def process(self, frames, eod=False): - self.value = numpy.round(100*numpy.mean(frames),3) + self.values = numpy.append(self.values, numpy.mean(frames)) return frames, eod def result(self): - return self.value + return numpy.round(100*numpy.mean(self.values),3) diff --git a/timeside/analyzer/mean_level.py b/timeside/analyzer/mean_level.py index 6d47b86..4cdd0d6 100644 --- a/timeside/analyzer/mean_level.py +++ b/timeside/analyzer/mean_level.py @@ -31,7 +31,7 @@ class MeanLevel(Processor): @interfacedoc def setup(self, channels=None, samplerate=None, nframes=None): super(MeanLevel, self).setup(channels, samplerate, nframes) - self.value = -140 + self.values = numpy.array([0]) @staticmethod @interfacedoc @@ -52,10 +52,8 @@ class MeanLevel(Processor): return "%s %s" % (str(self.value), unit()) def process(self, frames, eod=False): - value = numpy.round(20*numpy.log10(numpy.mean(numpy.sqrt(numpy.square(frames)))), 2) - if value > self.value: - self.value = value + self.values = numpy.append(self.values, numpy.mean(numpy.sqrt(numpy.square(frames)))) return frames, eod def result(self): - return self.value + return numpy.round(20*numpy.log10(numpy.mean(self.values)), 2) diff --git a/timeside/grapher/core.py b/timeside/grapher/core.py index e79ecb7..7cb954a 100644 --- a/timeside/grapher/core.py +++ b/timeside/grapher/core.py @@ -24,7 +24,7 @@ import optparse, math, sys -import ImageFilter, ImageChops, Image, ImageDraw, ImageColor +import ImageFilter, ImageChops, Image, ImageDraw, ImageColor, ImageEnhance import numpy from timeside.core import FixedSizeInputAdapter @@ -245,6 +245,9 @@ class WaveformImage(object): self.draw_peaks(self.pixel_cursor, peaks, spectral_centroid) self.pixel_cursor += 1 + def watermark(self, text, color=None, opacity=.6, margin=(10,10)): + self.image = im_watermark(self.image, text, color=color, opacity=opacity, margin=margin) + def save(self, filename): """ Apply last 2D transforms and write all pixels to the file. """ @@ -358,6 +361,9 @@ class WaveformImageJoyContour(WaveformImage): if eod: self.draw_peaks_contour() + def watermark(self, text, color=None, opacity=.6, margin=(10,10)): + self.image = im_watermark(self.image, text, color=color, opacity=opacity, margin=margin) + def save(self, filename): """ Apply last 2D transforms and write all pixels to the file. """ # middle line (0 for none) @@ -456,6 +462,9 @@ class WaveformImageSimple(object): self.draw_peaks(self.pixel_cursor, (0, 0)) self.pixel_cursor += 1 + def watermark(self, text, color=None, opacity=.6, margin=(10,10)): + self.image = im_watermark(self.image, text, color=color, opacity=opacity, margin=margin) + def save(self, filename): """ Apply last 2D transforms and write all pixels to the file. """ @@ -536,6 +545,9 @@ class SpectrogramImage(object): (spectral_centroid, db_spectrum) = self.spectrum.process(samples, True) self.draw_spectrum(self.pixel_cursor, db_spectrum) self.pixel_cursor += 1 + + def watermark(self, text, color=None, opacity=.6, margin=(10,10)): + self.image = im_watermark(self.image, text, color=color, opacity=opacity, margin=margin) def save(self, filename): """ Apply last 2D transforms and write all pixels to the file. """ @@ -648,3 +660,29 @@ def smooth(x, window_len=10, window='hanning'): y = numpy.convolve(w/w.sum(), s, mode='same') return y[window_len-1:-window_len+1] +def reduce_opacity(im, opacity): + """Returns an image with reduced opacity.""" + assert opacity >= 0 and opacity <= 1 + if im.mode != 'RGBA': + im = im.convert('RGBA') + else: + im = im.copy() + alpha = im.split()[3] + alpha = ImageEnhance.Brightness(alpha).enhance(opacity) + im.putalpha(alpha) + return im + +def im_watermark(im, inputtext, font=None, color=None, opacity=.6, margin=(30,30)): + """ + imprints a PIL image with the indicated text in lower-right corner + """ + if im.mode != "RGBA": + im = im.convert("RGBA") + textlayer = Image.new("RGBA", im.size, (0,0,0,0)) + textdraw = ImageDraw.Draw(textlayer) + textsize = textdraw.textsize(inputtext, font=font) + textpos = [im.size[i]-textsize[i]-margin[i] for i in [0,1]] + textdraw.text(textpos, inputtext, font=font, fill=color) + if opacity != 1: + textlayer = reduce_opacity(textlayer,opacity) + return Image.composite(textlayer, im, textlayer) diff --git a/timeside/grapher/spectrogram.py b/timeside/grapher/spectrogram.py index 0d98a0d..fa80a92 100644 --- a/timeside/grapher/spectrogram.py +++ b/timeside/grapher/spectrogram.py @@ -68,4 +68,7 @@ class Spectrogram(Processor): if output: self.graph.save(output) return self.graph.image - + + def watermark(self, text, font=None, color=(255, 255, 255), opacity=.6, margin=(5,5)): + self.graph.watermark(text, color=color, opacity=opacity, margin=margin) + diff --git a/timeside/grapher/waveform.py b/timeside/grapher/waveform.py index 3077d09..7249f46 100644 --- a/timeside/grapher/waveform.py +++ b/timeside/grapher/waveform.py @@ -62,10 +62,12 @@ class Waveform(Processor): def process(self, frames, eod=False): self.graph.process(frames, eod) return frames, eod - + @interfacedoc def render(self, output=None): if output: self.graph.save(output) return self.graph.image + def watermark(self, text, font=None, color=(255, 255, 255), opacity=.6, margin=(5,5)): + self.graph.watermark(text, color=color, opacity=opacity, margin=margin) diff --git a/timeside/grapher/waveform_awdio.py b/timeside/grapher/waveform_awdio.py index 49c848f..26eae20 100644 --- a/timeside/grapher/waveform_awdio.py +++ b/timeside/grapher/waveform_awdio.py @@ -68,3 +68,5 @@ class WaveformAwdio(Processor): self.graph.save(output) return self.graph.image + def watermark(self, text, font=None, color=(255, 255, 255), opacity=.6, margin=(5,5)): + self.graph.watermark(text, color=color, opacity=opacity, margin=margin) diff --git a/timeside/grapher/waveform_joydiv.py b/timeside/grapher/waveform_joydiv.py index 526541c..9af9828 100644 --- a/timeside/grapher/waveform_joydiv.py +++ b/timeside/grapher/waveform_joydiv.py @@ -57,8 +57,6 @@ class WaveformJoyDiv(Processor): @interfacedoc def setup(self, channels=None, samplerate=None, nframes=None): super(WaveformJoyDiv, self).setup(channels, samplerate, nframes) -# if self.graph: -# self.graph = None self.graph = WaveformImageJoyContour(self.width, self.height, self.nframes(), self.samplerate(), self.FFT_SIZE, bg_color=self.bg_color, color_scheme=self.color_scheme, ndiv=self.ndiv, symetry=self.symetry) @@ -75,3 +73,6 @@ class WaveformJoyDiv(Processor): def release(self): self.graph.release() + + def watermark(self, text, font=None, color=(255, 255, 255), opacity=.6, margin=(5,5)): + self.graph.watermark(text, color=color, opacity=opacity, margin=margin)