【问题标题】:Generating a 3D CAPTCHA [pic]生成 3D 验证码 [图片]
【发布时间】:2010-11-04 12:53:05
【问题描述】:

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

我可以使用哪些图形库?

来源:ocr-research.org.ua

【问题讨论】:

  • 还有一个问题:3d 验证码更难识别吗?
  • 困难得多。阅读“来源”了解更多信息。
  • 哦不,真的有人叫它茶包吗??
  • 是的。他们实际上把这个卖给了大公司。

标签: python graphics captcha


【解决方案1】:

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

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

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

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

【讨论】:

  • 如果有足够的动力,我很想自己做这件事;)
【解决方案2】:

有很多方法。我会亲自使用ImageDraw 的draw.text 在Python Imaging Library 中创建图像,转换为NumPy 数组(使用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')

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

【讨论】:

  • 非常非常好。正是我想要的。非常感谢! (我退出了,所以我不能投票给你答案:()。
  • 取决于它在我的浏览器屏幕上的显示位置,图像上的灰色网格线会消失。
【解决方案3】:

使用 opengl 渲染时要考虑的另一个绑定是 pyglet。它的最大特点是只需下载一次。我认为它包含了实现 Anurag 所阐述的一切所需的一切。

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

【讨论】:

    【解决方案4】:

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

    话虽如此...如果您不想自己进行 3D 数学运算,可以使用 VPython

    【讨论】:

    • 如何“生成 3d ponts 矩阵”?
    • 这只是一个元组列表 - 每个元组将有 3 个数字 - 代表 x、y 和 z。
    • RobertW:我认为,如果没有任何 3D 图形方面的先验知识,那么在您尝试之前需要进行相当多的阅读。
    • 是的,我会说你需要实现整个矩阵操作或矢量旋转
    • 我没有 3D 图形知识,但我有很多线性代数知识。
    猜你喜欢
    • 2012-05-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-25
    • 2015-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多