巷では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