生成3D验证[图]

时间:2009-06-20 14:30:18

标签: python graphics captcha

我想编写一个Python脚本来生成像这样的3D CAPTCHAteabag captcha

我可以使用哪些图形库?

来源:ocr-research.org.ua

4 个答案:

答案 0 :(得分:33)

有很多方法。我会亲自使用ImageDraw的draw.text在Python Imaging Library中创建图像,转换为NumPy数组(usint NumPy的asarray),然后使用Matplotlib进行渲染。 (需要Matplotlib maintenance package)。

完整代码(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

显然,还有一些工作要做,消除轴,改变视角等。

答案 1 :(得分:4)

使用opengl进行渲染时要考虑的另一个绑定是pyglet。它的最大特点是它只需一次下载。我认为它包含了实现Anurag拼出的所有内容。

我会提醒您,您尝试做的事情并不是3D图形中的简单第一个项目。如果这是您第一次接触OpenGL,请考虑NeHe Tutorials等一系列教程以及OpenGL website的其他帮助。

答案 2 :(得分:2)

我不确定我是否会为完整的3D库而烦恼。只需生成一个3D点矩阵,用PIL之类的东西生成文本,扫描它以找到网格上的哪些点被提升,选择随机摄像机角度然后将点投影到2D图像中并用PIL绘制它们到最终形象。

话虽如此......如果你不想自己做3D数学,你可以使用VPython

答案 3 :(得分:1)

对OpenGL使用Python绑定http://pyopengl.sourceforge.net/

使用PIL在黑色表面上创建白色文本的2D图像。 从这里制作一个3D网格,增加颜色为白色的点的z, 也许设置z =颜色值,所以通过模糊图像,你可以得到z方向的真实曲线。

从这些点创建一个OpenGL三角形,在渲染时使用线框模式。

将OpenGL缓冲区抓取到图像中,例如, http://python-opengl-examples.blogspot.com/2009/04/render-to-texture.html