巷ではcaptchaと呼んでいるらしい(Wikipedia:Captcha, Google:captcha)。
completely automated public Turing test to tell computers and humans apartの略なんだって。 こんなところでチューリングテストの話題が。へー。
OpenBSD-cvs:ports/graphics/p5-GDとAPIが違うみたいなのでいじってみた。 このバージョンだとアルファブレンドできないっぽいな。
--- captcha.pl.orig Sun Sep 25 09:36:47 2005 +++ captcha.pl Sun Sep 25 09:48:12 2005 @@ -23,8 +23,9 @@ my $im = new GD::Image($width, $height); # 背景色と文字色 - my $bg = $im->colorAllocateAlpha(255, 255, 255, 127); + my $bg = $im->colorAllocate(255,255,255); my $fg = $im->colorAllocate(0, 0, 0); + $im->transparent($bg); # TrueType fontで文字を描画 my @bounds = $im->stringFT($fg, $font, 9, 0, 0, 14, $string); @@ -37,11 +38,11 @@ # 出力用画像を別に作り、元画像から文字の部分のみをコピー my $outim = new GD::Image($owidth + 2, $oheight + 2); - $outim->colorAllocateAlpha(255, 255, 255, 127); + $outim->colorAllocate(255, 255, 255); $outim->copy($im, 1, 1, $srcx, $srcy, $owidth, $oheight); # 画像をファイルへ出力 - my $png_data = $outim->png(9); + my $png_data = $outim->png; open (OUT, ">$png_file") or die; binmode OUT; print OUT $png_data;
sf:jocrの腕試し。 昔MSが配っていたcour.ttf(今はsf:corefontsとして再配布中)で試してみた。
$ ls test?.png | xargs -L 1 gocr -m 124 -C ".0123456789@abcdefghijklmnopqrstuvwxyz" t l___d i nt _ __ n_t __tc_0n0_.dcyt . 0c_0 intec_estin0_.dsit.c0m rle6__e_.dm0c_e .inf0 tc_0utle_.di__ .my.ti_
さすがに字が小さ過ぎてダメ。 14pointにすると、
$ ls test?.png | xargs -L 1 gocr -m 124 -C ".0123456789@abcdefghijklmnopqrstuvwxyz" ...
お、全部認識した。
しかし、絵で認証すると著しくアクセシビリティが落ちそうだ。 本家captcha版なんてもっとクネクネしてるし、 画像自体もdpi固定なので、閲覧者にページの見栄えを強制することになりそう。 最低でも音声サポートと人力ヘルプセンターは必須か。
あ、画像関連はSVGで、という手もありか。
人間が認識できて、機械に認識できないことがある、 という仮定がそもそも微妙な気がする。
参考:
- http://japan.cnet.com/news/media/story/0,2000047715,20059708,00.htm
- http://www.memb.jp/~deq/voice/captcha/guideline.html