[Mediawiki-l] about captcha.py image generator

FxParlant f-x.p at laposte.net
Tue Feb 7 19:44:36 UTC 2006


Don't expect too much from a guide for dummies made by a dummy.
For windows.

About the captcha.py generator.

TABLE OF CONTENT
- what it does ?
- where to find it ?
- how it works ?
- The image generator
- "No module named image" error
- "empty range" error
- credits


1) WHAT IT DOES ?

The captcha system written by Brion Vibber and published under GNU
licence (unlike most of the captcha system to be found in php on the net
which are copyrighted) doesn't build the captcha images on the fly.
Instead, you have to produce a bunch of images.

The generator take a word in a wordlist.
Creates an image with the word on it.
It encrypts the word using a key.
Stores the image in a directory, with the encrypted as filename (png image)


2)WHERE TO FIND IT ?

in the ConfirmEdit extension:

http://cvs.sourceforge.net/viewcvs.py/wikipedia/extensions/ConfirmEdit/
(for the html access)

http://www.mediawiki.org/wiki/Download_from_CVS
(for indications on the cvs access, I intend to create a tutorial on
using CVS with Eclipse)

Download the three files:
ConfirmEdit.php
FancyCaptcha.php
captcha.py


3)HOW IT WORKS ?
(only as much as I understand)

Apart from the explanations provided in the php files itself, you can
find some indications in the post from Brion:
http://article.gmane.org/gmane.org.wikimedia.mediawiki/10179/match=fancycaptcha

Mainly, you have to fill some of the variables in the fancycaptha.php
file, with :

$wgCaptchaClass = 'SimpleCaptcha'
becomes
$wgCaptchaClass = 'FancyCaptcha';

$wgCaptchaDirectory the directory where the images are stored at your
webhost (NO EXAMPLE yet)

$wgCaptchaSecret by the key used to encrypt the words of your list
ex:
$wgCaptchaSecret='turtle';



4)THE IMAGE GENERATOR

The file captcha.py is a file written in python to produce the images,
encrypt them and store them with the encrypted filename.

As it is written in python, you will need a python interpreter. You
might already have one installed with some Apache-Mysql-php kits. Check
your Apache folder, and your c:\ folder. Search your computer for the
file python.exe

If not found, download and install a brand new one from:
http://www.python.org/download/

You might use this opportunity to get a newer one if yours is too old,
because we will have to add some "plugin" which can't use python
versions prior to 2.1

The command line I used is (can be used as .bat):

c:\python24\python.exe C:\pytest\captcha.py --wordlist C:\pytest\w.txt
--output C:\pytest\ --key turtle --count 10 --fill 2 --font Arial

Where:
c:\python24\python.exe is the newer interpreter I installed (there is an
older one attached to my apache, and if I just call python.exe on
command line, the old one comes up. To check which one you are using,
type: python -v )

C:\pytest\captcha.py is the path to the captcha.py file I downloaded
from the ConfirmEdit extension. As you can notice, to avoid problems
with space in windows paths like "my document", I created a filed called
"pytest" (less than 8 letters) directly at the root of my system.

--wordlist C:\pytest\w.txt is the path to a text file I created with a
list of words. Each word on a line, which means: I type a word, and I
hit Enter. On my first attempt, I created only five of them. This might
be too short. Use a longer list: 10 to 20

--output C:\pytest\ path to the directory I want the images to be
stored. Not sure if the ending \ is necessary. It worked with it.

--key turtle  this is the key used to encrypt the words. It has to be
the same as the $wgCaptchaSecret variable in the fancycaptcha.php file,
otherwise it won't be able to decrypt it. Just use a secret word: be
creative.

--count 10 really, I haven't got a clue what it is, and how it must be
set up. I tried 3, it didn't work. Hopefully, someone will tell us if
there is a minimum and a max for this

--fill 2 same as before, no idea what it is for and what the inferior
and superior limits are

--font Arial At first I didn't use this parameter. I tried this, and
maybe it helped this working...



5) NO MODULE NAMED IMAGE error

At first, you might get this error:

Traceback (most recent call last):
  File "C:\pytest\captcha.py", line 26, in ?
    import Image
ImportError: No module named Image

DIAGNOSIS: you don't have the image module, which can be found in a
library for python.

SOLUTION
Download and install PIL from the middle of this page:
http://www.pythonware.com/products/pil/

Beware, you have to choose the PIL corresponding to your version of python


6) EMPTY RANGE error

After you have installed the PIL, something can again be wrong:

Traceback (most recent call last):
  File "C:\pytest\captcha.py", line 145, in ?
    word1 = words[random.randint(0,len(words)-1)]
  File "c:\python24\lib\random.py", line 216, in randint
    return self.randrange(a, b+1)
  File "c:\python24\lib\random.py", line 192, in randrange
    raise ValueError, "empty range for randrange() (%d,%d, %d)" % (istart,
, width)
ValueError: empty range for randrange() (0,0, 0)


As long as I tried, I believe this is due to an error in the --fill or
--count parameters of the command line.

And in the end: IT WORKED FOR ME

image_e920d182_6ea824a00198ed4f.png
image_b18fd5f0_bb1e8e848697c902.png
image_0206469a_889d0b2dab698f4d.png
image_d360bf03_ab8400fd4dfc4b9d.png
image_7ae15d3e_aca3a3ea9d4c36a4.png
image_ccc4294b_e9db09ebf2dd58d7.png
image_b00e56fb_bd1657b6488424dc.png

7) CREDITS

Thank you very much to Brion Vibber for developing extensions for
"advanced dummies" like me, only able of rewarding him by grinning about
having to understand python and finding out by themselves what on earth
the parameters for command line might be. Ingratitude has no depth :-)

Hope this will help. please do tell me what is missing. Hopefully, there
will soon be a page created in mediawiki for this extension (no search
on meta.mediawiki came up with something like fancycaptha). As soon as
the creator puts it on, I might add this participation to it. Be free to
add what I omitted, and correct where I was wrong or unclear.

François




More information about the MediaWiki-l mailing list