def from_text(cls, text, language='en-US', rate=0.4, videopath=None): """ Create a video from a text. """ speaker = GoogleSpeaker() audio_filepath = speaker.speak(text, language=language, rate=rate) if not videopath: basename = os.path.splitext(os.path.basename(audio_filepath))[0] filename = f'{basename}{cls.TARGET_EXTENSION}' video_path = path_in_medialib(filename) analyst = AudioAnalyst(audio_filepath, text) analysis = analyst.analyse() image_maker = ImageMaker(analysis) pattern = image_maker.save_images() outdict = {'vcodec': 'h264', 'shortest': None} image = ffmpeg.input(pattern) audio = ffmpeg.input(audio_filepath) try: ffmpeg.output(image, audio, video_path, **outdict).run(capture_stdout=True, capture_stderr=True) return videopath except ffmpeg.Error as e: print('stdout:', e.stdout.decode('utf8')) print('stderr:', e.stderr.decode('utf8')) raise e return None
def from_audio(filename, text=None): wav_file = path_in_medialib(filename) analyst = AudioAnalyst(wav_file, text) analysis = analyst.analyse() image_maker = ImageMaker(analysis) pattern = image_maker.save_images() outdict = {'vcodec': 'h264', 'shortest': None} image = ffmpeg.input(pattern) audio = ffmpeg.input(wav_file) video_path = f"{wav_file}.mp4" try: ffmpeg.output(image, audio, video_path, **outdict).run(capture_stdout=True, capture_stderr=True) except ffmpeg.Error as e: print('stdout:', e.stdout.decode('utf8')) print('stderr:', e.stderr.decode('utf8')) raise e
parser.add_argument("-upload_loc", type=str, default="jacob.stanford.edu:/u/apache/htdocs/mkayser/reports/", help="Location to publish HTML doc to") parser.add_argument("-url_loc", type=str, default="http://nlp.stanford.edu/mkayser/reports/", help="URL location where report will appear") args = parser.parse_args() output_file = "report.html" workers = {} worker_counts = {} html_lines = [] work_times = [] total_work_time = 0 nrows = 0 imgmaker = ImageMaker(args.block_px, args.padding_px) bmpmaker = BitmapMaker(args.bitmap_dim, args.bitmap_dim) try: os.mkdir(args.output_dir) except OSError: pass with open(args.csv) as fin: reader = csv.reader(fin) header = next(reader) image_index = header.index(args.image_field) commands_index = header.index(args.commands_field) draw_events_index = header.index(args.draw_events_field) worker_id_index = header.index(args.worker_id_field)
def test_cairo_save_images(self): """ Test the frame generation to be used by the Video Maker """ generator = ImageMaker(self.analysis) generator.cairo_save_images()
help="Dimensionality of grid") parser.add_argument("-csv", type=str, required=True, help="input CSV file with drawing task results") parser.add_argument("-field", type=str, default="Answer.WritingTexts", help="Name of CSV field containing draw events") parser.add_argument("-output_dir", type=str, default="output/make_images_from_drawing_task_results", help="output directory for images") args = parser.parse_args() imgmaker = ImageMaker(args.width, args.padding) bmpmaker = BitmapMaker(args.width, args.width) np.random.seed(0) if not os.path.exists(args.output_dir): os.makedirs(args.output_dir) with open(args.csv) as fin: reader = csv.reader(fin) header = next(reader) colindex = header.index(args.field) for i, row in enumerate(reader): commands_str = row[colindex] bmpmaker.clear() event_sequence = AbsoluteEventSequence.from_mturk_string( commands_str)
def test_make_images(self): generator = ImageMaker(self.analysis) images = generator.make_images() images[0].write_to_png(path_in_medialib('test_cairo_frame_0.jpg')) images[4].write_to_png(path_in_medialib('test_cairo_frame_4.jpg'))
from image import ImageMaker from bitmap import BitmapMaker from events import AbsoluteEventSequence, RelativeEventSequence if __name__ == "__main__": parser = argparse.ArgumentParser() parser.add_argument("-width", type=int, default=32, help="Width of blocks in pixels") parser.add_argument("-padding", type=int, default=2, help="Padding of blocks in pixels") parser.add_argument("-dim", type=int, default=5, help="Dimensionality of grid") parser.add_argument("-csv", type=str, required=True, help="input CSV file with drawing task results") parser.add_argument("-field", type=str, default="Answer.WritingTexts", help="Name of CSV field containing draw events") parser.add_argument("-output_dir", type=str, default="output/make_images_from_drawing_task_results", help="output directory for images") args = parser.parse_args() imgmaker = ImageMaker(args.width, args.padding) bmpmaker = BitmapMaker(args.width, args.width) np.random.seed(0) if not os.path.exists(args.output_dir): os.makedirs(args.output_dir) with open(args.csv) as fin: reader = csv.reader(fin) header = next(reader) colindex = header.index(args.field) for i,row in enumerate(reader): commands_str = row[colindex] bmpmaker.clear() event_sequence = AbsoluteEventSequence.from_mturk_string(commands_str)
default="http://nlp.stanford.edu/mkayser/reports/", help="URL location where report will appear") args = parser.parse_args() output_file = "report.html" workers = {} worker_counts = {} html_lines = [] work_times = [] total_work_time = 0 nrows = 0 imgmaker = ImageMaker(args.block_px, args.padding_px) bmpmaker = BitmapMaker(args.bitmap_dim, args.bitmap_dim) try: os.mkdir(args.output_dir) except OSError: pass with open(args.csv) as fin: reader = csv.reader(fin) header = next(reader) image_index = header.index(args.image_field) commands_index = header.index(args.commands_field) draw_events_index = header.index(args.draw_events_field) worker_id_index = header.index(args.worker_id_field)
type=int, default=16, help="Block width in pixels") parser.add_argument("-padding_px", type=int, default=1, help="Padding in pixels") parser.add_argument("-bitmap_dim", type=int, default=25, help="Width of bitmap in blocks (assumed square)") # Output location parser.add_argument("-output_dir", type=str, required=True, help="Directory to write output to") args = parser.parse_args() output_file = "report.html" imgmaker = ImageMaker(args.block_px, args.padding_px) bmpmaker = BitmapMaker(args.bitmap_dim, args.bitmap_dim) make_dir_unless_exists(args.output_dir) convert_commands_to_image_sequence(bmpmaker, imgmaker, args.commands, "{}/img_".format(args.output_dir), args.mode)
parser.add_argument("-gridpadding", type=int, default=0, help="How many empty blocks to place on outside of bitmap") parser.add_argument("-bc", type=int, default=32, help="Block color") parser.add_argument("-nbc", type=int, default=255, help="Non block color") parser.add_argument("-gc", type=int, default=128, help="Grid color") parser.add_argument("-random_seed", type=int, default=0, help="Random seed") parser.add_argument("-output_parent_dir", type=str, default="output", help="parent of output directory for images") parser.add_argument("-batch_name", type=str, default=None, help="name of this batch") parser.add_argument("-url_prefix", type=str, default="http://nlp.stanford.edu/mkayser/images", help="URL prefix for Mturk HIT's") parser.add_argument("-html_folder", type=str, default="jacob.stanford.edu:/u/apache/htdocs/mkayser/images", help="Local name for folder containing HIT's") parser.add_argument("-upload", action="store_true", default=False, help="Upload images to HTML folder") args = parser.parse_args() if not args.batch_name: args.batch_name = get_unique_directory_name(args.output_parent_dir,"generate_images") imgmaker = ImageMaker(args.width, args.padding, [args.nbc,args.bc,args.gc]) np.random.seed(args.random_seed) output_dir = os.path.join(args.output_parent_dir, args.batch_name) if not os.path.exists(output_dir): os.makedirs(output_dir) write_text_to_file(str(args), os.path.join(output_dir,"args")) url_file = os.path.join(output_dir,"image_urls.csv") print("Output directory: {}".format(output_dir)) print("Output CSV file: {}".format(url_file)) bitmaps = set()