Skip to content

Instantly share code, notes, and snippets.

@haojian
Created January 20, 2016 15:06
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save haojian/a7ad4a84f02699888cb3 to your computer and use it in GitHub Desktop.
Save haojian/a7ad4a84f02699888cb3 to your computer and use it in GitHub Desktop.
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# elasticplay"
]
},
{
"cell_type": "code",
"execution_count": 196,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"import matplotlib.pyplot as plt\n",
"import numpy as np\n",
"import json\n",
"%matplotlib inline\n",
"\n",
"\n",
"SILENT = 1\n",
"NONSILENT = 0\n",
"float_factor = 100*0.5 # multiply a float_fact to get a rough integer value for dp\n",
"\n",
"# define data structure for elasticplay\n",
"# the global timing is based 0.01 second\n",
"\n",
"class ep_shot(object):\n",
" def __init__(self, idx, start, end, accumulated_score):\n",
" self.idx = idx\n",
" self.start = start\n",
" self.end = end\n",
" self.accumulated_score = accumulated_score\n",
" self.duration = end - start\n",
" \n",
"class audio_ep_shot(ep_shot):\n",
" def setIfSilent(self, ifsilent):\n",
" self.ifsilent = ifsilent\n",
" \n",
" def __repr__(self):\n",
" return \"(start: \" + str(self.start) + \" end: \" + str(self.end) + \" score: \" + str(self.accumulated_score) + \" duration: \" + str(self.duration) + \")\"\n",
"\n",
" def __str__(self):\n",
" return \"(start: \" + str(self.start) + \" end: \" + str(self.end) + \" score: \" + str(self.accumulated_score) + \" duration: \" + str(self.duration) + \")\"\n",
"\n",
"#input should be an array of ep_shot\n",
"def vis_plot_shots_totalscore(shots):\n",
" data_x = []\n",
" data_y = []\n",
" for i, shot in enumerate(shots):\n",
" data_x.append(shot.start)\n",
" data_y.append(0)\n",
" data_x.append(shot.start)\n",
" data_y.append(shot.accumulated_score)\n",
" data_x.append(shot.start+shot.duration) #shot.start + shot.duration may not be equal to shot.end because of the speed up.\n",
" data_y.append(shot.accumulated_score)\n",
" data_x.append(shot.start+shot.duration)\n",
" data_y.append(0)\n",
" plt.ylabel('accumulated_score')\n",
" plt.xlabel('time(sec)')\n",
" plt.plot(data_x, data_y)\n",
"# plt.show()\n",
"\n",
"#input should be an array of ep_shot\n",
"def vis_plot_shots_avgscore(shots):\n",
" data_x = []\n",
" data_y = []\n",
" for i, shot in enumerate(shots):\n",
" data_x.append(shot.start)\n",
" data_y.append(0)\n",
" data_x.append(shot.start)\n",
" data_y.append(float(shot.accumulated_score)/float(shot.end-shot.start))\n",
" data_x.append(shot.start+shot.duration)\n",
" data_y.append(float(shot.accumulated_score)/float(shot.end-shot.start))\n",
" data_x.append(shot.start+shot.duration)\n",
" data_y.append(0)\n",
" plt.ylabel('accumulated_score')\n",
" plt.xlabel('time(sec)')\n",
" plt.plot(data_x, data_y)\n",
" \n",
"# for mm:ss format\n",
"def getSec(s):\n",
" l = s.split(':')\n",
" return int(l[0]) * 60 + int(l[1])\n"
]
},
{
"cell_type": "code",
"execution_count": 197,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Bagged the following items\n",
" apple\n",
" banana\n",
" camera\n",
" cheese\n",
" compass\n",
" glucose\n",
" map\n",
" note-case\n",
" sandwich\n",
" socks\n",
" sunglasses\n",
" suntan cream\n",
" water\n",
" waterproof overclothes\n",
" waterproof trousers\n",
"for a total value of 1130 and a total weight of 490\n",
"Bagged the following items\n",
" apple\n",
" banana\n",
" camera\n",
" cheese\n",
" compass\n",
" glucose\n",
" map\n",
" note-case\n",
" sandwich\n",
" socks\n",
" sunglasses\n",
" suntan cream\n",
" water\n",
" waterproof overclothes\n",
" waterproof trousers\n",
"for a total value of 1130 and a total weight of 490\n"
]
}
],
"source": [
"bagsize = 500\n",
"\n",
"#knapsack algorithm\n",
"\n",
"try:\n",
" xrange\n",
"except:\n",
" xrange = range\n",
" \n",
"def totalvalue(comb):\n",
" ' Totalise a particular combination of items'\n",
" totwt = totval = 0\n",
" for item, wt, val in comb:\n",
" totwt += wt\n",
" totval += val\n",
" return (totval, -totwt)\n",
" \n",
"items = (\n",
" (\"map\", 9, 150), (\"compass\", 13, 35), (\"water\", 153, 200), (\"sandwich\", 50, 160),\n",
" (\"glucose\", 15, 60), (\"tin\", 68, 45), (\"banana\", 27, 60), (\"apple\", 39, 40),\n",
" (\"cheese\", 23, 30), (\"beer\", 52, 10), (\"suntan cream\", 11, 70), (\"camera\", 32, 30),\n",
" (\"t-shirt\", 24, 15), (\"trousers\", 48, 10), (\"umbrella\", 73, 40),\n",
" (\"waterproof trousers\", 42, 70), (\"waterproof overclothes\", 43, 75),\n",
" (\"note-case\", 22, 80), (\"sunglasses\", 7, 20), (\"towel\", 18, 12),\n",
" (\"socks\", 4, 50), (\"book\", 30, 10),\n",
" )\n",
" \n",
"def knapsack01_dp_init(items, max_limit):\n",
" table = [[0 for w in range(max_limit + 1)] for j in xrange(len(items) + 1)]\n",
" \n",
" for j in xrange(1, len(items) + 1):\n",
" item, wt, val = items[j-1]\n",
" for w in xrange(1, max_limit + 1):\n",
" if wt > w:\n",
" table[j][w] = table[j-1][w]\n",
" else:\n",
" table[j][w] = max(table[j-1][w],\n",
" table[j-1][w-wt] + val)\n",
" return table\n",
"\n",
"def knapsack01_dp_getsolution(items, limit, table):\n",
" result = []\n",
" w = limit\n",
" for j in range(len(items), 0, -1):\n",
" was_added = table[j][w] != table[j-1][w]\n",
" \n",
" if was_added:\n",
" item, wt, val = items[j-1]\n",
" result.append(items[j-1])\n",
" w -= wt\n",
" \n",
" return result\n",
" \n",
"def knapsack01_dp(items, limit):\n",
" table = [[0 for w in range(limit + 1)] for j in xrange(len(items) + 1)]\n",
" \n",
" for j in xrange(1, len(items) + 1):\n",
" item, wt, val = items[j-1]\n",
" for w in xrange(1, limit + 1):\n",
" if wt > w:\n",
" table[j][w] = table[j-1][w]\n",
" else:\n",
" table[j][w] = max(table[j-1][w],\n",
" table[j-1][w-wt] + val)\n",
" \n",
" result = []\n",
" w = limit\n",
" for j in range(len(items), 0, -1):\n",
" was_added = table[j][w] != table[j-1][w]\n",
" \n",
" if was_added:\n",
" item, wt, val = items[j-1]\n",
" result.append(items[j-1])\n",
" w -= wt\n",
" \n",
" return result\n",
"\n",
"\n",
"\n",
"bagged = knapsack01_dp(items, bagsize)\n",
"print(\"Bagged the following items\\n \" +\n",
" '\\n '.join(sorted(item for item,_,_ in bagged)))\n",
"val, wt = totalvalue(bagged)\n",
"print(\"for a total value of %i and a total weight of %i\" % (val, -wt))\n",
"\n",
"\n",
"table = knapsack01_dp_init(items, bagsize)\n",
"bagged = knapsack01_dp_getsolution(items, bagsize, table)\n",
"print(\"Bagged the following items\\n \" +\n",
" '\\n '.join(sorted(item for item,_,_ in bagged)))\n",
"val, wt = totalvalue(bagged)\n",
"print(\"for a total value of %i and a total weight of %i\" % (val, -wt))"
]
},
{
"cell_type": "code",
"execution_count": 198,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"# the annotation is per frame.\n",
"dict_anno = {}\n",
"dict_info = {}\n",
"dict_framerate = {}\n",
"\n",
"# load video info\n",
"with open(\"../tvsum/data/ydata-tvsum50-info.tsv\") as finfo:\n",
" for line in finfo:\n",
" if line.startswith('cate'):\n",
" continue\n",
" fields = line.split('\\t')\n",
" # print fields[1], fields[4], getSec(fields[4])\n",
" dict_info[fields[1]] = getSec(fields[4])\n",
" \n",
"# load shot scores\n",
"with open(\"../tvsum/data/ydata-tvsum50-anno.tsv\") as fanno:\n",
" for line in fanno:\n",
" fields = line.split('\\t')\n",
" if fields[0] in dict_anno:\n",
" # print fields[2]\n",
" # dict_anno[fields[0]] += 1\n",
" arr = np.fromstring(fields[2], dtype=int, sep=\",\")\n",
" # print arr[:10]\n",
" dict_anno[fields[0]] = np.vstack((arr, dict_anno[fields[0]]))\n",
" else:\n",
"# print fields[0], len(fields[2].split(',')), dict_info[fields[0]], \"framerate\", float(len(fields[2].split(',')))/dict_info[fields[0]], \"round\", round(float(len(fields[2].split(',')))/dict_info[fields[0]])\n",
" dict_framerate[fields[0]] = round(float(len(fields[2].split(',')))/dict_info[fields[0]])\n",
" arr = np.fromstring(fields[2], dtype=int, sep=\",\")\n",
" dict_anno[fields[0]] = arr"
]
},
{
"cell_type": "code",
"execution_count": 199,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"# select the example video id.\n",
"vid = '-esJrBWj2d8'"
]
},
{
"cell_type": "code",
"execution_count": 200,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"\n",
"# audio segmentation method 1: sphix \n",
"# based on the audio segment to calculate the score for each segment.\n",
"# recommended method for audio segmentation: cmu sphinx -> sphinx_cont_seg\n",
"# library at: http://sourceforge.net/projects/cmusphinx/files/sphinxbase/5prealpha/\n",
"# interface description at: http://www.speech.cs.cmu.edu/sphinx/doc/doxygen/sphinxbase/cont__fileseg_8c-source.html\n",
"# ffmpeg to extract the wmv file: \"ffmpeg -i 3eYKfiOEJNs.mp4 -vn -ar 44100 -ac 2 -ab 192k -f wav test.wav\"\n",
"# segment with sphix: \"sphinx_cont_seg -infile test.wav\" .details at: http://cmusphinx.sourceforge.net/wiki/tutorial\n",
"\n",
"\n",
"# after several experimentations, i think sphix is not really a good choice. it cannot seperate music very well.\n"
]
},
{
"cell_type": "code",
"execution_count": 201,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"[<matplotlib.lines.Line2D at 0x1148b7e90>]"
]
},
"execution_count": 201,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\nIb1eO4E9VXVPVT0GXAWcNVXnJ4Dfr6r7AKrqqwPGI0nqacjkcCxwb2v5vqas7UTgqCSfSnJzkn8+\nYDySpJ4WfZR1f/W558OhjL/I71XAM4EbkvxJVd01YFySpCWGTA73A8e3lo9nfPTQdi/w1ar6K+Cv\nkvwx8L1AJzmsra21lnY1P5KkidFoxGg02pC2UjXMTd2SHAJ8kfFRwQPATcDZU29I/z3Gb1q/Gvg2\n4Ebg9VX1ham2qh1nMn6cFCXj55PHxXH1rzurr3ntzdtmUX99Ypm01W5vuu1l7S1bXlY+a0zTlrXf\nLuvbz6ztZ81HnzmY1c90vT7bTMc2b1+c196i9fN+t33GOG+fW1S2aEyz4lq2XR/rmeP2drMeJ/X7\n1FnWR3ucfV8jFo1rX9oYQhKqasZf7HKDHTlU1eNJzmP8PUw7gMuq6o4k5zbrL62qO5N8HPgc8ATw\n29OJQZK0+QY7cthIHjk8vb3ptpe155HD7H48cvDIYVbf0+3tz7gO5COHIT+tJEk6QJkcJEkdJgdJ\nUofJQZLUYXKQJHWYHCRJHSYHSVKHyUGS1GFykCR1mBwkSR0mB0lSh8lBktRhcpAkdZgcJEkdJgdJ\nUofJQZLUYXKQJHWYHCRJHSYHSVKHyUGS1GFykCR1DJockuxOcmeSu5Kcv6De9yd5PMmPDRmPJKmf\nwZJDkh3A+4HdwIuBs5OcNKfeRcDHgQwVjySpvyGPHHYCe6rqnqp6DLgKOGtGvXcAHwYeHjAWSdI+\nGDI5HAvc21q+ryl7UpJjGSeMS5qiGjAeSVJPhwzYdp8X+vcCv1RVlSQsOK20trbWWtrV/EiSJkaj\nEaPRaEPaStUw/6wneTmwVlW7m+ULgCeq6qJWnS/xVEI4GvhL4C1VdfVUW9WOM80Wk6Jk/HzyuDiu\n/nVn9TWvvXnbLOqvTyxppctJ3em2l7W3bHlZ+awxTVvWfrusbz+ztp81H33mYFY/0/X6bDMd27x9\ncV57i9bP+932GeO8fW5R2aIxzYpr2XZ9rGeO29vNepzU71NnWR/tcfZ9jVg0rn1pYwhJqKp1vZc7\n5JHDzcCJSU4AHgBeD5zdrlBV3zV5nuQK4JrpxCBJ2nyDJYeqejzJecB1wA7gsqq6I8m5zfpLh+pb\nkrR/BjuttJE8rfT09qbbXtaep5Vm9+NpJU8rzep7ur39GdeBfFrJK6QlSR0mB0lSh8lBktRhcpAk\n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\nrkJggg==\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x1148b7350>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# audio segmentation method 2: python version\n",
"# load audio scores\n",
"# pyaudioanalysis scikit-learn==0.16.1\n",
"# for the speedup, we can use fragmented segments. so we should prefer the high configure score threshold.\n",
"# although many long sentences would be splitted into multiple segments, but we can capture the silent segments.\n",
"# set the smooth window seconds = 1 second , svm probability = 0.4\n",
"plot_data_x = []\n",
"plot_data_y = []\n",
"with open(\"../audio_info.json\") as json_file:\n",
" json_data = json.load(json_file)\n",
" vid_data = {float(k):v for k,v in json_data[vid].items()}\n",
"# print vid_data\n",
"\n",
"\n",
"\n",
"audioshots = []\n",
"total_si = 0\n",
"total_nonsi = 0\n",
"# data visualization\n",
"i = 0\n",
"for key, value in sorted( vid_data.iteritems()):\n",
"# print key, value['len'], value, type(value)\n",
" cur_shot = audio_ep_shot(i, float(key), float(value['end']), 0)\n",
" i = i+1\n",
" plot_data_x.append(key)\n",
" plot_data_x.append(value['end'])\n",
" if value['ifsilent'] == 'silent':\n",
" plot_data_y.append(0)\n",
" plot_data_y.append(0)\n",
" total_si += float(value['len'])\n",
" cur_shot.setIfSilent(SILENT)\n",
" else :\n",
" plot_data_y.append(1)\n",
" plot_data_y.append(1)\n",
" total_nonsi += float(value['len'])\n",
" cur_shot.setIfSilent(NONSILENT)\n",
" audioshots.append(cur_shot)\n",
" \n",
"plt.ylim((0,1.5))\n",
"plt.ylabel('IfSilent')\n",
"plt.xlabel('time (sec)')\n",
"plt.plot(plot_data_x, plot_data_y)\n"
]
},
{
"cell_type": "code",
"execution_count": 202,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"# for i, item in enumerate(audioshots):\n",
"# print i, item.idx, item.start, item.end, item.accumulated_score, item.ifsilent, \"avg: \", item.accumulated_score/item.duration"
]
},
{
"cell_type": "code",
"execution_count": 203,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"(6912,) 6900.0\n"
]
}
],
"source": [
"annotations_multiple = dict_anno[vid]\n",
"video_len = dict_info[vid]\n",
"frame_rate = dict_framerate[vid]\n",
"total_frame = dict_info[vid] * dict_framerate[vid]\n",
"avg_annotations = annotations_multiple.mean(axis=0)\n",
"print avg_annotations.shape, total_frame\n",
"\n",
"cur_shot = 0\n",
"#calculate the score for each shot\n",
"for i, val in enumerate(avg_annotations):\n",
" cur_time = float(i)/frame_rate\n",
"# print cur_time\n",
" if cur_time >= audioshots[cur_shot].start and cur_time <= audioshots[cur_shot].end:\n",
" audioshots[cur_shot].accumulated_score += float(val)\n",
" elif cur_time > audioshots[cur_shot].end:\n",
" cur_shot += 1\n",
" if cur_time >= audioshots[cur_shot].start and cur_time <= audioshots[cur_shot].end:\n",
" audioshots[cur_shot].accumulated_score += float(val)\n",
" else:\n",
" print \"error\"\n",
" break\n",
"\n",
"\n",
" \n",
"# for key, value in dict_anno[].iteritems():\n",
"# print key, dict_info[key], dict_framerate[key], dict_info[key] * dict_framerate[key], value.shape,\n",
"# value = value.mean(axis=0) #average the score from multiple label resources (20 people label each video)\n",
"# shot_id\n",
"# for i, val in enumerate(value):\n",
" \n",
" \n",
"\n",
"# # print \"==========start to generate========\"\n",
"# dict_final = {} \n",
"# # dict_final; key is video id, value is the array of scores for each second. the size of the array should be equal to the video duration \n",
"# for key, value in dict_anno.iteritems():\n",
"# # if key != \"AwmHb44_ouw\":\n",
"# # continue\n",
"# # print key, dict_info[key], dict_framerate[key], dict_info[key] * dict_framerate[key], value.shape,\n",
"\n",
"# value = value.mean(axis=0)\n",
"# idx = 0\n",
"# scores = []\n",
"# for i in range(0, value.size, int(dict_framerate[key])):\n",
"# # print np.average(value[i:i+dict_framerate[key]]), value[i]\n",
"# # scores.append(np.average(value[i:i+dict_framerate[key]]))\n",
"# scores.append(np.average(value[i]))\n",
"# dict_final[key] = scores\n",
"# # print len(dict_final[key])\n",
"\n",
"\n",
"# #score visualization\n",
"# plt.plot(dict_final[vid])\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": 204,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x110380190>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"dp_items = [] #item, weight, value, \n",
"for i, value in enumerate(audioshots):\n",
" dp_items.append( (value, int(value.duration*float_factor), value.accumulated_score) ) #multiply by float_factor to elimiate float\n",
"# print value.accumulated_score\n",
"\n",
"cur_ep_shots = [x[0] for x in dp_items]\n",
"vis_plot_shots_totalscore(cur_ep_shots) \n",
"vis_plot_shots_avgscore(cur_ep_shots) \n",
"# print cur_ep_shots"
]
},
{
"cell_type": "code",
"execution_count": 205,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"pre sum: 13638.45 weight, 229.44\n",
"videolen: 230 budget: 207.0 totalvalue: \n",
"for a total value of 13638 and a total weight budget of 229\n",
"[(start: 0.0 end: 2.85 score: 168.95 duration: 2.85), (start: 2.85 end: 3.8 score: 58.0 duration: 0.95), (start: 3.8 end: 6.05 score: 157.85 duration: 2.25), (start: 6.05 end: 7.2 score: 64.75 duration: 1.15), (start: 7.2 end: 14.0 score: 323.4 duration: 6.8), (start: 14.0 end: 15.4 score: 88.2 duration: 1.4), (start: 15.4 end: 15.6 score: 12.6 duration: 0.2), (start: 15.6 end: 23.55 score: 495.0 duration: 7.95), (start: 23.55 end: 23.9 score: 19.8 duration: 0.35), (start: 23.9 end: 29.45 score: 302.6 duration: 5.55), (start: 29.45 end: 33.2 score: 191.2 duration: 3.75), (start: 33.2 end: 33.85 score: 36.1 duration: 0.65), (start: 33.85 end: 35.5 score: 99.5 duration: 1.65), (start: 35.5 end: 36.6 score: 70.5 duration: 1.1), (start: 36.6 end: 40.55 score: 256.3 duration: 3.95), (start: 40.55 end: 41.9 score: 84.05 duration: 1.35), (start: 41.9 end: 46.9 score: 418.65 duration: 5.0), (start: 46.9 end: 48.1 score: 91.5 duration: 1.2), (start: 48.1 end: 48.55 score: 39.0 duration: 0.45), (start: 48.55 end: 50.0 score: 132.0 duration: 1.45), (start: 50.0 end: 50.95 score: 75.6 duration: 0.95), (start: 50.95 end: 52.55 score: 127.2 duration: 1.6), (start: 52.55 end: 55.6 score: 227.4 duration: 3.05), (start: 55.6 end: 56.55 score: 71.2 duration: 0.95), (start: 56.55 end: 59.75 score: 236.2 duration: 3.2), (start: 59.75 end: 62.95 score: 208.8 duration: 3.2), (start: 62.95 end: 67.0 score: 306.1 duration: 4.05), (start: 67.0 end: 72.8 score: 546.9 duration: 5.8), (start: 72.8 end: 73.45 score: 58.9 duration: 0.65), (start: 73.45 end: 74.35 score: 83.7 duration: 0.9), (start: 74.35 end: 75.15 score: 74.4 duration: 0.8), (start: 75.15 end: 76.4 score: 117.2 duration: 1.25), (start: 76.4 end: 76.65 score: 21.35 duration: 0.25), (start: 76.65 end: 78.0 score: 125.05 duration: 1.35), (start: 78.0 end: 80.75 score: 189.9 duration: 2.75), (start: 80.75 end: 84.4 score: 202.5 duration: 3.65), (start: 84.4 end: 86.9 score: 138.15 duration: 2.5), (start: 86.9 end: 92.2 score: 303.15 duration: 5.3), (start: 92.2 end: 93.0 score: 46.8 duration: 0.8), (start: 93.0 end: 96.65 score: 201.65 duration: 3.65), (start: 96.65 end: 97.6 score: 53.65 duration: 0.95), (start: 97.6 end: 97.95 score: 18.5 duration: 0.35), (start: 97.95 end: 98.8 score: 46.9 duration: 0.85), (start: 98.8 end: 99.65 score: 45.0 duration: 0.85), (start: 99.65 end: 100.7 score: 60.75 duration: 1.05), (start: 100.7 end: 104.0 score: 202.05 duration: 3.3), (start: 104.0 end: 105.0 score: 54.0 duration: 1.0), (start: 105.0 end: 111.5 score: 419.25 duration: 6.5), (start: 111.5 end: 112.5 score: 82.5 duration: 1.0), (start: 112.5 end: 114.95 score: 204.45 duration: 2.45), (start: 114.95 end: 115.3 score: 26.4 duration: 0.35), (start: 115.3 end: 120.7 score: 404.7 duration: 5.4), (start: 120.7 end: 121.4 score: 48.3 duration: 0.7), (start: 121.4 end: 122.05 score: 43.55 duration: 0.65), (start: 122.05 end: 124.5 score: 158.35 duration: 2.45), (start: 124.5 end: 125.0 score: 31.5 duration: 0.5), (start: 125.0 end: 125.25 score: 14.7 duration: 0.25), (start: 125.25 end: 128.05 score: 205.95 duration: 2.8), (start: 128.05 end: 129.8 score: 87.45 duration: 1.75), (start: 129.8 end: 133.75 score: 174.5 duration: 3.95), (start: 133.75 end: 136.1 score: 109.9 duration: 2.35), (start: 136.1 end: 136.3 score: 9.0 duration: 0.2), (start: 136.3 end: 138.9 score: 121.05 duration: 2.6), (start: 138.9 end: 139.6 score: 34.65 duration: 0.7), (start: 139.6 end: 141.35 score: 87.8 duration: 1.75), (start: 141.35 end: 143.2 score: 89.8 duration: 1.85), (start: 143.2 end: 146.55 score: 162.2 duration: 3.35), (start: 146.55 end: 147.55 score: 60.0 duration: 1.0), (start: 147.55 end: 149.9 score: 110.65 duration: 2.35), (start: 149.9 end: 150.2 score: 13.65 duration: 0.3), (start: 150.2 end: 150.7 score: 23.25 duration: 0.5), (start: 150.7 end: 152.4 score: 79.65 duration: 1.7), (start: 152.4 end: 153.75 score: 64.0 duration: 1.35), (start: 153.75 end: 154.35 score: 28.8 duration: 0.6), (start: 154.35 end: 154.95 score: 28.8 duration: 0.6), (start: 154.95 end: 156.15 score: 59.4 duration: 1.2), (start: 156.15 end: 157.65 score: 92.25 duration: 1.5), (start: 157.65 end: 158.6 score: 59.45 duration: 0.95), (start: 158.6 end: 160.3 score: 97.8 duration: 1.7), (start: 160.3 end: 161.3 score: 39.0 duration: 1.0), (start: 161.3 end: 164.1 score: 112.5 duration: 2.8), (start: 164.1 end: 167.45 score: 144.3 duration: 3.35), (start: 167.45 end: 167.85 score: 18.0 duration: 0.4), (start: 167.85 end: 168.8 score: 42.3 duration: 0.95), (start: 168.8 end: 169.1 score: 13.05 duration: 0.3), (start: 169.1 end: 171.2 score: 91.35 duration: 2.1), (start: 171.2 end: 171.35 score: 5.8 duration: 0.15), (start: 171.35 end: 171.9 score: 24.65 duration: 0.55), (start: 171.9 end: 181.25 score: 397.0 duration: 9.35), (start: 181.25 end: 187.15 score: 243.75 duration: 5.9), (start: 187.15 end: 187.9 score: 36.8 duration: 0.75), (start: 187.9 end: 191.7 score: 173.1 duration: 3.8), (start: 191.7 end: 193.45 score: 71.9 duration: 1.75), (start: 193.45 end: 195.15 score: 81.6 duration: 1.7), (start: 195.15 end: 196.15 score: 50.6 duration: 1.0), (start: 196.15 end: 197.25 score: 52.8 duration: 1.1), (start: 197.25 end: 198.9 score: 82.7 duration: 1.65), (start: 198.9 end: 200.25 score: 71.15 duration: 1.35), (start: 200.25 end: 201.3 score: 68.8 duration: 1.05), (start: 201.3 end: 203.05 score: 107.15 duration: 1.75), (start: 203.05 end: 203.95 score: 54.0 duration: 0.9), (start: 203.95 end: 206.1 score: 136.75 duration: 2.15), (start: 206.1 end: 206.95 score: 56.25 duration: 0.85), (start: 206.95 end: 210.25 score: 210.05 duration: 3.3), (start: 210.25 end: 211.0 score: 49.45 duration: 0.75), (start: 211.0 end: 212.25 score: 79.2 duration: 1.25), (start: 212.25 end: 212.45 score: 12.6 duration: 0.2), (start: 212.45 end: 213.7 score: 79.8 duration: 1.25), (start: 213.7 end: 221.95 score: 475.0 duration: 8.25), (start: 221.95 end: 226.3 score: 189.95 duration: 4.35), (start: 226.3 end: 230.458 score: 180.45 duration: 4.158)]\n"
]
},
{
"data": {
"image/png": "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\nAAAAAElFTkSuQmCC\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x110b4fad0>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"val, wt = totalvalue(dp_items)\n",
"print \"pre sum: \", val, \" weight, \", -wt/float_factor\n",
"#start to run dp\n",
"print \"videolen: \", video_len, \" budget: \", video_len*0.9, \"totalvalue: \"\n",
"\n",
"bagged = knapsack01_dp(dp_items, int(video_len*float_factor))\n",
"# print(\"Bagged the following items\\n \" +\n",
"# '\\n '.join(sorted(item for item,_,_ in bagged)))\n",
"val, wt = totalvalue(bagged)\n",
"print(\"for a total value of %i and a total weight budget of %i\" % (val, -wt/float_factor))\n",
"bagged_shots = [x[0] for x in bagged[::-1]]\n",
"print bagged_shots\n",
"vis_plot_shots_totalscore(bagged_shots) \n"
]
},
{
"cell_type": "code",
"execution_count": 206,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"[<matplotlib.lines.Line2D at 0x115404890>]"
]
},
"execution_count": 206,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x112a5eed0>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plot_dp_data_x = []\n",
"plot_dp_data_y = []\n",
"\n",
"table = knapsack01_dp_init(dp_items, int(video_len*float_factor))\n",
"# plot importance score performance\n",
"for i in range(int(video_len)):\n",
" bagged = knapsack01_dp_getsolution(dp_items, int(i*float_factor), table) \n",
" val, wt = totalvalue(bagged)\n",
"# print(\"for a total value of %i and a total weight budget of %i\" % (val, -wt/float_factor))\n",
" plot_dp_data_x.append(i)\n",
" plot_dp_data_y.append(val)\n",
"# print i, val\n",
" \n",
"# plt.ylim((plot_dp_data_y.min(), plot_dp_data_y.max())\n",
"plt.ylabel('total score')\n",
"plt.xlabel('time (sec)')\n",
"plt.xlim(max(plot_dp_data_x), min(plot_dp_data_x))\n",
"plt.plot(plot_dp_data_x, plot_dp_data_y)"
]
},
{
"cell_type": "code",
"execution_count": 179,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"99.1596666667\n"
]
}
],
"source": [
"# print \"silent:\", total_si, \"nonsilent:\", total_nonsi, \"total:\", dict_info[vid]\n",
"SILENT_RATIO = 6\n",
"NONSILENT_RATIO = 1.5\n",
"\n",
"tb_noskiptime = total_si/SILENT_RATIO + total_nonsi/NONSILENT_RATIO\n",
"\n",
"print tb_noskiptime\n"
]
},
{
"cell_type": "code",
"execution_count": 180,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"import math\n",
"\n",
"budget = video_len *0.5\n",
"\n",
"# calculate the speedup rate:\n",
"\n",
"def calc_speedup(si, nonsi, budget):\n",
" T1 = total_si\n",
" T2 = total_nonsi\n",
"\n",
" B = budget\n",
" c1 = (math.sqrt( math.pow((9*B - T1 - 10 * T2), 2) + 36 * B * T1 ) - 9*B + T1 + 10*T2)/(2*B)\n",
" c2 = (c1+9)/10\n",
" return c1, c2"
]
},
{
"cell_type": "code",
"execution_count": 181,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"import copy\n",
"#input should be an array of ep_shot\n",
"def get_vis_shot_data(shots):\n",
" data_x = []\n",
" data_y = []\n",
" for i, shot in enumerate(shots):\n",
" data_x.append(shot.start)\n",
" data_y.append(0)\n",
" data_x.append(shot.start)\n",
" data_y.append(shot.accumulated_score)\n",
" data_x.append(shot.start+shot.duration) #shot.start + shot.duration may not be equal to shot.end because of the speed up.\n",
" data_y.append(shot.accumulated_score)\n",
" data_x.append(shot.start+shot.duration)\n",
" data_y.append(0)\n",
" return data_x, data_y\n",
"# plt.ylabel('accumulated_score')\n",
"# plt.xlabel('time(sec)')\n",
"# plt.plot(data_x, data_y)\n",
"\n",
"def vis_strategy_with_speedup(budget):\n",
" tb_noskiptime = total_si/SILENT_RATIO + total_nonsi/NONSILENT_RATIO\n",
" if budget > tb_noskiptime:\n",
" c1, c2 = calc_speedup(total_si, total_nonsi, budget)\n",
" # calculate the speedup rate:\n",
" print c1, c2, budget\n",
" nospeedup_ep_shots = [x[0] for x in dp_items]\n",
" speedup_ep_shots = [] #copy datastructure to hold the content\n",
"# nospeedupx, nospeedupy = get_vis_shot_data(nospeedup_ep_shots) \n",
" print nospeedup_ep_shots[0]\n",
" for i, value in enumerate(nospeedup_ep_shots):\n",
" speedup_ep_shots.append(copy.copy(value))\n",
" if speedup_ep_shots[i].ifsilent == SILENT:\n",
" speedup_ep_shots[i].duration = (speedup_ep_shots[i].end-speedup_ep_shots[i].start)/c1\n",
" else:\n",
" speedup_ep_shots[i].duration = (speedup_ep_shots[i].end-speedup_ep_shots[i].start)/c2\n",
" speedupx, speedupy = get_vis_shot_data(speedup_ep_shots) \n",
"# print speedup_ep_shots[0]\n",
" vis_plot_shots_totalscore(speedup_ep_shots)\n",
" vis_plot_shots_totalscore(nospeedup_ep_shots)\n",
" fig = plt.figure()\n",
" vis_plot_shots_totalscore(speedup_ep_shots)\n",
" "
]
},
{
"cell_type": "code",
"execution_count": 182,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"4.43525967627 1.34352596763 115.0\n",
"(start: 0.0 end: 2.85 score: 168.95 duration: 2.85)\n"
]
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x111eedad0>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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\nXn2jPrKtrAMAAAAASUVORK5CYII=\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x1112c44d0>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"vis_strategy_with_speedup(budget)"
]
},
{
"cell_type": "code",
"execution_count": 195,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"[<matplotlib.lines.Line2D at 0x11185f850>]"
]
},
"execution_count": 195,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x11185fb50>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plot_dp_speedup_data_x = []\n",
"plot_dp_speedup_data_y = []\n",
"\n",
"table = knapsack01_dp_init(dp_items, int(video_len*float_factor))\n",
"# plot importance score performance\n",
"for i in range(1,int(video_len)):\n",
" if(i > tb_noskiptime):\n",
" plot_dp_speedup_data_x.append(i)\n",
" plot_dp_speedup_data_y.append(max(plot_dp_data_y))\n",
" else:\n",
"# print i\n",
" c1, c2 = calc_speedup(total_si, total_nonsi, i)\n",
" \n",
" dp_speedup_items = [] #item, weight, value, \n",
" for j, value in enumerate(audioshots):\n",
" shot_cpy = copy.copy(value)\n",
" if shot_cpy.ifsilent == SILENT:\n",
" shot_cpy.duration = (shot_cpy.end-shot_cpy.start)/c1\n",
" else:\n",
" shot_cpy.duration = (shot_cpy.end-shot_cpy.start)/c2 \n",
" dp_speedup_items.append( (shot_cpy, int(shot_cpy.duration*float_factor), shot_cpy.accumulated_score)) #multiply by 100 to elimiate float\n",
" table = knapsack01_dp_init(dp_items, int(i*float_factor)) \n",
" bagged = knapsack01_dp_getsolution(dp_items, int(i*float_factor), table) \n",
" val, wt = totalvalue(bagged)\n",
"# print(\"for a total value of %i and a total weight budget of %i\" % (val, -wt/float_factor))\n",
" plot_dp_speedup_data_x.append(i)\n",
" plot_dp_speedup_data_y.append(val)\n",
"plt.ylabel('total score')\n",
"plt.xlabel('time (sec)')\n",
"plt.xlim(max(plot_dp_data_x), min(plot_dp_data_x))\n",
"plt.plot(plot_dp_speedup_data_x, plot_dp_speedup_data_y)"
]
},
{
"cell_type": "code",
"execution_count": 190,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"13616.4\n"
]
}
],
"source": [
"print max(plot_dp_data_y)"
]
},
{
"cell_type": "code",
"execution_count": 214,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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\nAElFTkSuQmCC\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x115b2d110>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plt.xlim(max(plot_dp_data_x), min(plot_dp_data_x))\n",
"plt.title('Total weight of different time budget')\n",
"plt.plot(plot_dp_data_x, plot_dp_data_y, 'r', label=\"nospeedup\")\n",
"plt.plot(plot_dp_speedup_data_x, plot_dp_speedup_data_y, 'b', label=\"speedup\")\n",
"legend = plt.legend(loc='upper right', shadow=True)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 2",
"language": "python",
"name": "python2"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 2
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython2",
"version": "2.7.10"
}
},
"nbformat": 4,
"nbformat_minor": 0
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment