生成 3D 验证码 [图片]
I would like to write a Python script that would generate a 3D CAPTCHA like this one:
Which graphics libraries can I use?
Source: ocr-research.org.ua
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
有很多方法。 我个人会使用 ImageDraw 在 Python 图像库中创建图像draw.text,转换为 NumPy 数组(使用 NumPy 的 asarray),然后使用 Matplotlib。 (需要 Matplotlib 维护包)。
完整代码(2.5 中):
显然还有一些工作要做,消除轴、改变视角等。
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):
Obviously there's a little work to be done, eliminating axes, changing view angle, etc..
使用 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.
我不确定我是否会为您上面所拥有的完整 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.
使用 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.