Я хотел бы написать Python script, который будет генерировать 3D CAPTCHA, как этот:
Какие графические библиотеки я могу использовать?
Источник: ocr-research.org.ua
Я хотел бы написать Python script, который будет генерировать 3D CAPTCHA, как этот:
Какие графические библиотеки я могу использовать?
Источник: ocr-research.org.ua
Существует много подходов. Я лично создал бы изображение в Python Imaging Library, используя ImageDraw draw.text, конвертировать в NumPy array (usint NumPy 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')
Очевидно, что предстоит небольшая работа, устранение осей, изменение угла обзора и т.д.
Другим обязательным условием для рендеринга с opengl является pyglet. Его лучшая особенность заключается в том, что это всего лишь одна загрузка. Я думаю, он содержит все, что вам нужно, чтобы реализовать то, что говорит Анураг.
Я предупреждаю вас, что то, что вы пытаетесь сделать, - это не совсем простой первый проект в 3d-графике. Если это ваша первая публикация OpenGL, рассмотрите серию обучающих программ, таких как NeHe Tutorials и другую помощь сайт OpenGL.
Я не уверен, что буду разбираться в полной 3D-библиотеке за то, что у вас есть выше. Просто сгенерируйте матрицу трехмерных точек, сгенерируйте текст с чем-то вроде PIL, просмотрите его, чтобы найти, какие точки на сетке подняты, выберите случайный угол камеры, а затем проецируйте точки в 2D-изображение и нарисуйте их с PIL на окончательное изображение.
Как говорится... вы можете использовать VPython, если вы не хотите делать 3D-математику самостоятельно.
Используйте привязки Python для OpenGL, http://pyopengl.sourceforge.net/.
Создайте 2D-изображение белого цвета на черной поверхности с помощью PIL. Сделайте из этого 3D-сетку, увеличьте z точки, где цвет белый, возможно, установить z = значение цвета, поэтому, размывая изображение, вы можете получить реальные кривые в направлении z.
Создайте треугольник OpenGL из этих точек, используйте режим wireframe во время рендеринга.
Возьмите буфер OpenGL в изображение, например, http://python-opengl-examples.blogspot.com/2009/04/render-to-texture.html.