生成 3D 验证码 [图片]

发布于 2024-07-25 05:57:17 字数 317 浏览 1 评论 0原文

我想编写一个Python脚本来生成3D CAPTCHA,如下所示: teabag captcha

我可以使用哪些图形库?

来源:ocr-research.org.ua

I would like to write a Python script that would generate a 3D CAPTCHA like this one:
teabag captcha

Which graphics libraries can I use?

Source: ocr-research.org.ua

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

罗罗贝儿 2024-08-01 05:57:17

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

alt text

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

There are many approaches. I would personally create the image in Python Imaging Library using ImageDraw's draw.text, convert to a NumPy array (usint NumPy's asarray) then render with Matplotlib. (Requires Matplotlib maintenance package).

Full code (in 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

Obviously there's a little work to be done, eliminating axes, changing view angle, etc..

烧了回忆取暖 2024-08-01 05:57:17

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

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

Another binding to consider for rendering with opengl is pyglet. Its best feature is that it is just one download. I think it contains everything you need to implement what Anurag spells out.

I will caution you that what you're trying to do is not exactly a simple first project in 3d graphics. If this is your first exposure to OpenGL, consider a series of tutorials like NeHe Tutorials and other help from the OpenGL website.

春庭雪 2024-08-01 05:57:17

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

话虽这么说...如果您不想自己进行 3D 数学计算,您可以使用 VPython

I'm not sure I would bother with a full 3D library for what you have above. Just generate a matrix of 3D points, generate the text with something like PIL, scan over it to find which points on the grid are raised, pick a random camera angle and then project the points into a 2D image and draw them with PIL to the final image.

That being said... you may be able to use VPython if you don't want to do the 3D math yourself.

世态炎凉 2024-08-01 05:57:17

使用 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

Use Python bindings for OpenGL, http://pyopengl.sourceforge.net/.

Create a 2D image of white color text over a black surface using PIL.
Make a 3D grid from this, increase z of point where color is white,
maybe set z=color value, so by blurring the image you can get real curves in the z direction.

Create an OpenGL triangle from these points, use wireframe mode while rendering.

Grab the OpenGL buffer into an image, for example,
http://python-opengl-examples.blogspot.com/2009/04/render-to-texture.html.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文