Создание 3D-капчи [рис.] - PullRequest
12 голосов
/ 20 июня 2009

Я хотел бы написать скрипт на Python, который будет генерировать 3D CAPTCHA , как этот: teabag captcha

Какие графические библиотеки я могу использовать?

Источник: ocr-research.org.ua

Ответы [ 4 ]

33 голосов
/ 20 июня 2009

Есть много подходов. Я лично создал бы изображение в Python Imaging Library, используя ImageDraw , draw.text, конвертировал в массив NumPy (usint NumPy's asarray ) и затем рендерил с помощью Matplotlib . (Требуется пакет обслуживания Matplotlib ).

Полный код (в 2.5):

import numpy, pylab
from PIL import Image, ImageDraw, ImageFont
import matplotlib.axes3d as axes3d

sz = (50,30)

img = Image.new('L', sz, 255)
drw = ImageDraw.Draw(img)
font = ImageFont.truetype("arial.ttf", 20)

drw.text((5,3), 'text', font=font)
img.save('c:/test.png')

X , Y = numpy.meshgrid(range(sz[0]),range(sz[1]))
Z = 1-numpy.asarray(img)/255

fig = pylab.figure()
ax = axes3d.Axes3D(fig)
ax.plot_wireframe(X, -Y, Z, rstride=1, cstride=1)
ax.set_zlim((0,50))
fig.savefig('c:/test2.png')

alt text

Очевидно, что предстоит проделать небольшую работу: устранить оси, изменить угол обзора и т. Д.

4 голосов
/ 20 июня 2009

Другая привязка для рендеринга с opengl - pyglet . Его лучшая особенность в том, что это всего лишь одна загрузка. Я думаю, что в нем есть все, что вам нужно для реализации того, что говорит Анураг.

Я предупреждаю вас, что то, что вы пытаетесь сделать, не совсем простой первый проект в 3d графике. Если вы впервые знакомитесь с OpenGL, рассмотрите серию учебных пособий, таких как NeHe Tutorials и другую помощь с OpenGL .

.
2 голосов
/ 20 июня 2009

Я не уверен, что возился бы с полной библиотекой 3D для того, что у вас есть выше. Просто сгенерируйте матрицу из трехмерных точек, сгенерируйте текст с помощью чего-нибудь вроде PIL, отсканируйте его, чтобы найти точки на сетке, выберите случайный угол камеры, затем спроецируйте точки в двухмерное изображение и нарисуйте их с помощью PIL в окончательное изображение.

При этом ... вы можете использовать VPython , если вы не хотите выполнять 3D математику самостоятельно.

1 голос
/ 20 июня 2009

Использовать привязки Python для OpenGL, http://pyopengl.sourceforge.net/.

Создайте 2D-изображение текста белого цвета на черной поверхности, используя PIL . Сделайте из этого трехмерную сетку, увеличьте z точки, где цвет белый, возможно, установите z = значение цвета, поэтому, размывая изображение, вы можете получить реальные кривые в направлении z.

Создайте треугольник OpenGL из этих точек, используйте режим каркаса при визуализации.

Захватите буфер OpenGL в изображение, например, http://python -opengl-examples.blogspot.com / 2009/04 / рендер-к-texture.html .

...