2009-06-20 15 views
11

を生成する私はこの1つのような3D CAPTCHAを生成するPythonスクリプトを書きたいと思います: グラフィックスライブラリは、私が使用することができますteabag captchaは、3D CAPTCHA [PIC]

出典:ocr-research.org.ua

+1

があります。です3次元captcha ocrに難しい? – RMAAlmeida

+0

はるかに難しい。詳細は「ソース」をお読みください。 –

+0

ああ、誰かが本当にティーバッグと呼んだのですか? –

答えて

2

私は、私はあなたが上記の持っているもののためにフル3Dライブラリとわざわざわかりません。 3D点の行列を生成し、PILのようなテキストを生成し、グリッド上のどの点を上げているかを調べ、ランダムなカメラアングルを選択してポイントを2D画像に投影し、PILで描画します最終的な画像。

言われているとおり、あなたは自分で3D数学をしたくない場合は、VPythonを使用することができます。

+0

"どのようにして" 3d pontsの行列を生成するのですか? –

+0

それは単にタプルのリストになります - 各タプルはx、y、zを表す3つの数字を持ちます。 –

+1

RobertW:3Dグラフィックスに関する事前知識がなくても、これを試すことができる前に、かなり多くのreadnigが必要です。 – Joey

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)。

+0

私は十分なモチベーションを与えて、これを自分自身でやってみたいと思っています;) –

4

OpenGLを使用してレンダリングする際に考慮すべき別のバインディングはpygletです。その最高の機能は、ただ1つのダウンロードです。私はそれがあなたがAnuragの綴りを実装するために必要なものすべてを含んでいると思う。

私は、あなたがしようとしていることは、まさに3Dグラフィックスの最初の単純なプロジェクトではないことに注意してください。これがOpenGLへの最初の公開であれば、NeHe Tutorialsなどの一連のチュートリアルと、OpenGL websiteのその他のヘルプを検討してください。

33

多くのアプローチがあります。私は個人的にImageDrawのdraw.textを使用して、NumPy配列(usint NumPyのasarray)に変換してMatplotlibでレンダリングして、Python Imaging Libraryで画像を作成します。 (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

は明らかに軸を排除し、行うことに少し仕事、変化する画角、など。ただ、別の質問

+0

+1サンプルコードでは、これは本当に素晴らしいスタートです。 – Kiv

+3

+1素晴らしいフリップ。あなたはそれを釘付け! –

+0

非常に非常に良い。まさに私が望んでいたもの。どうもありがとう! (私はログアウトしているので、答えに投票できません:() – quilby