ACFUN上经常有一些考验暂停党的图集视频,内含各种哔哔和◯◯,但是对于反射弧比较长,暂停苦手的人们来说,只得反复折腾得肉牛满面。而我这种暂停四级考试完全不合格的人更是鸭梨很大。于是想到求助perl , imgseek 和mplayer ,把视频中的所有图片提取出来。思路很简单,就是首先用mplayer将视频内容转为一帧一帧的png或jpg图片(视频分帧 ),再用Image::Seek来通过图片内容的相似度比较去除重复图片 。写了一段简单的perl代码(wapauser.pl):
#!/usr/bin/perl
use strict;
use constant SCORE => -30;
use File::Temp qw(tempfile tempdir);
use Image::Imlib2;
use Image::Seek qw(loaddb cleardb add_image query_id remove_id);
use POSIX ':sys_wait_h';
our ($id, $db, $dir);
sub init {
$id = 0;
$dir = tempdir('wapauserXXXX', CLEANUP => 1, DIR => '.');
$db = tempfile('wapauserXXXX', DIE => $dir, SUFFIX => 'db');
loaddb($db);
cleardb();
}
sub gao {
my $file = shift;
my $img = Image::Imlib2->load($file);
add_image($img, $id);
my @result = query_id($id, 2);
if (!$id || $result[1]->[1] > SCORE) {
++$id;
link $file, sprintf './output/%04d.png', $id; # or `cp`
} else {
remove_id($id); # important
}
}
sub wapauser {
my ($file, @args) = @_;
init();
if (my $pid = fork) {
wait;
opendir(my $dh, $dir);
my @pngs = grep {/\.png/} readdir($dh);
closedir($dh);
for my $png (sort @pngs) {
gao("$dir/$png");
}
} else {
chomp(my $path = `which mplayer`);
unshift @args, '-vo', "png:outdir=$dir", '-nosound';
print STDERR "path = $path\nfile = $file\n", join(" ", @args), "\n";
close STDOUT;
close STDERR;
exec $path, $file, @args;
}
}
wapauser(@ARGV);
拿某个长度4min的flv视频测试了一下,第一步和第二部分别花了4min的时间,最后从6000多帧中提取了70多张不同的图片。实验表明,SCORE的阀值大概取到-25~-30比较合适,具体的值还是要反复尝试。大多数相同的图结果都在-35以上,但也有可能只有-31。不同的图通常区别都在-15以内,但是只有一些小区别的几张图(你们懂的)之间的区别可能有负的二十多。总的来说还有以下问题:
视频分帧结束后才开始图片去重,实际上两步可以同时进行,分步的结果就是得先消耗很大的临时空间来存储成千上万帧的图片,上面的测试就吃掉了4G的硬盘;
生成的图片是非常大png,这也是为什么会吃掉那么多磁盘的原因,当然这可以通过设置参数z=<0-9> 改成压缩较高的png,或者用参数-vo jpeg ,并设置参数quality=<0-100> 改成较小的jpg;
这种方法只能处理完全静态的图集视频,对其它视频要么无能为力,要么作用很有限;
生成的图片质量取决的视频质量,所有除非是高清视频,否则图片质量不会太好;
SCORE阀值的设置……凡是涉及到阀值的问题总是很头疼的,稍微高点低点,效果可能就差很多,这就像调试蓝田的热水一般(典故见附件)。
附件:我刚进浙大不久时的一篇文章《走进浙大—揭开蓝田浴室之谜》,想起来当时我们一看见校医院的救护车从蓝田方向开来就会说“又有人洗澡被烫伤了”……
发信人: botanyh (botany), 信区: Joke
标 题: 走进浙大—揭开蓝田浴室之谜ZZ
发信站: 缥缈水云间 (Mon Oct 30 11:33:02 2006), 站内
Continue reading “暂停党什么的最讨厌了” »
8 Comments »
标题是照着vls的《我出过的题目》 取的,确切的说是我出过的以東方Project为背景的,已经公开的题目。因为今年Summer2010暑期集训新手上路选拔和七月校队选拔中,我又出了11道东方系列的题目,以在这个月办好一场东方专场ZOJ月赛(详情:acm_x_touhou ),用把力,把去年暑假的yy变成现实。去年出的这三题当然离办一场Monthly还有无限远,不过今年提前准备,再加上vout和猛犸的强力支持,现在已经有了充足的各种难度,各种类型的东方系列备选题目能够支援ZOJ八月的月赛了。届时希望广大acmer和touhou fans捧场
source code (ZOJ3229.cpp) [FlowNetwork, 上下界最大流]
在未来的n天中,文文要强拍幻想乡的mm们为《文々。新闻》增加8g素材。但是每天她只能对某些mm拍照,并且所拍照片数不能过多或过少,每天总的照相数也有上限,而n天内她所拍某个mm的相片也有最低要求。在满足所有这些要求的前提下,希望最后拍的照要尽量多,求任意一个最优方案。
很裸的上下界最大流,构图算法都没什么需要多说的了,有模块就直接秒杀了。ZOJ上就这题的AC数到了三位数,不知道有没有人用来测模块。
source code (ZOJ3227.cpp) [DP, SegmentTree]
暖和的季节结束了,边境被银白色的幻想所封闭。
人们在这不知道什么时候结束的漫长冬天中,也变得安分起来了。
Continue reading “我出过的东方系列题目” »
5 Comments »
Andrew Stankevich’s Contest #6
ZOJ2595
Ackerman’s Function
14.93% (99/663)
ZOJ2596
The Minimal Angle
11.07% (65/587)
ZOJ2597
Yellow Code
38.21% (146/382)
ZOJ2598
Yet Another Digit
23.79% (138/580)
ZOJ2599
Graduated Lexicographical Ordering
20.99% (80/381)
ZOJ2600
GSM
20.00% (55/275)
ZOJ2601
Warehouse Keeper
14.69% (117/796)
ZOJ2602
Don’t Go Left
24.13% (49/203)
ZOJ2603
Railroad Sort
46.76% (123/263)
拖搞稿好久,趁着集训间隙前来填坑。大妈题就是好啊就是好,于是顺便广告一下,8月14日,ZOJ将办一场Andrew Stankevich’s Contest, Warmup 的Practice,用的题目是Andrew Stankevich’s Contest #11,年代有点久远,不过对绝大多数人来讲应该应该是一套非常不错的新题,去年我们也拿来组队训练过,欢迎捧场。
source code (ZOJ2595.cpp) [recursion, number theory, Euler's theorem]
求Ackerman函数A(n, m)模t的值。
n\m
1
2
3
4
5
1
2
4
6
8
10
… (2m) …
2
2
4
8
16
32
… (2m ) …
3
2
4
16
22 2 2
22 2 2 2
… (m 2) …
4
2
4
overflow
.. …
5
2
4
overflow
.. ..
上表中用到了Knuth’s up-arrow notation 。从上面的表中可以看出n=1, n=2, m=1, m=2的时候问题都很简单,而事实上n和m只要稍稍大一点,这个数就大得不得了,而它关于t的余数就是定值。证明就是利用欧拉定理 ,可以参考在Andrew Stankevich’s Contest #8解题报告 中,ZOJ2674 Strange Limit 这题的解题报告。对于n=3&&m<32和n==4&&m==3的时候,结果未必收敛到了ZOJ2674中定义的那个极限,所以也要特殊处理,方法类似求那个极限的递归。
Continue reading “Andrew Stankevich’s Contest #6解题报告” »
3 Comments »
由于原定明天的 Contest 17 by Group S 因题数不足取消了,随着的今天 Contest 16 by CC98 的结束,今年7月的暑期集训也顺利结束了。整个7月都同asmn借宿在vout寝室,三个人每天一同早起去218参加集训,如果谁遇到自己组出题,可能就得彻夜不归,留在218验题了。整个月一共4轮16场比赛下来,很辛苦,也很欢乐。
4号的火车回家,10天后再回到学校的时候,就要组好校队,开始分组训练了,似乎 Regional 前能够训练时间也很紧张了。今年集训参加的12场比赛,在 Contest 3 by BoMb 排在第二,其余都是第一,其中8场有题数优势,最后两个rating都是360+,不知道理论上rating最大能升到多少-,-
最后的Ranklist After Round 4 (官方山寨版) :
算罚时
Ranklist After Round 4
Rank ID Rating
--------------------------------
1 anotherpeg 368.293909
2 dd_engi 320.433879
3 moondy 318.681716
4 t__nt 316.503848
5 navi 306.962851
6 oldjunyi 297.957195
7 asmn 294.495900
8 Fanazhe 230.525902
9 czy 228.785346
10 sxstar 211.344396
11 quark 201.799062
...
不算罚时
Ranklist After Round 4
Rank ID Rating
--------------------------------
1 anotherpeg 363.515919
2 dd_engi 316.707688
3 t__nt 315.771751
4 moondy 312.302907
5 asmn 298.339357
6 oldjunyi 293.780154
7 navi 287.420962
8 Fanazhe 231.832573
9 czy 230.991767
10 sxstar 200.022544
...
组队的事情还很头痛,几天前就开始拿不定主意了,回家好好考虑一下吧。
晚上集训队集体到王子酒楼fb,美中不足的是彩票哥没能赶来,momo彩票哥。
(席间聊到保研直博)
灿哥:现在直博很难了……
衆人:直博很容易啊,想直博就直博
灿哥:……毕业很难
衆人:(同情地看着王博)……
最后贴一下今天最新更新的Rank,仰慕帖数超过其它三组总和,甚至超越了Summer 2010的Doraemon。不过四个组里我们ACFun的主题数是最多的,哈哈。
Summer Camp 2010
222 Topics
4744 Posts
ACFun
110 Topics
1838 Posts
BoMb
67 Topics
1113 Posts
CC98
45 Topics
333 Posts
Doraemon
77 Topics
5709 Posts
7 Comments »
通宵验题,结果还是各种悲剧。同navi和dd一起夜宵归后,发现满打满算只有五道题,于是只好临时yy一个idea,出了个以东方为背景的图论题,顺便补了一下目前预定中的Touhou-specific ZOJ Monthly 还没有图论题的空白。出好题已经是早饭时间了,于是干脆和navi走到食堂吃了个早饭,顺便到银行取了个钱,这几天荷包空空,四处欠债。
回到218,离比赛还有1个小时,实在扛不牢,躺下睡了。比赛开始的时候醒来,拿到了范叔替我买的回家火车票,范叔是好人(不过学生证好像忘记还我了……)。然后继续睡,比赛过了90分钟后,被navi叫醒,回答Clarification,结果悲剧的发现全场只有三个AC,其中两个是我临时出的那题。虽然题目有点小自然,没有水题,不过主要原因似乎是集体跳错坑了……最后ranklist惨不忍睹 我错了
下午困了,所以不打算呆在218,回了vout的寝室,打开电脑后悲剧的发现201卡过期了。无奈的通过范叔在Summer2010版上发贴求空网卡。首先不管为什么,感谢郭嘉;然后感谢给了我经常求空网卡机会的,正在跑步奔向世界一流大学的三墩大学;最后还是要感谢提供空网卡的frozen童鞋和yaac童鞋(顺带感谢上回在编程答疑求空网卡的时候,慷慨应求的小tp童鞋)。无力去羡慕那些有免费公网或是廉价高速公网的学校,但连接入校内的4M局域网都得花钱买容易过期的201卡的,恐怕只有我生活四年的紫金港了。
10 Comments »