2009-06-20 14 views
11

मैं Python स्क्रिप्ट है जो एक 3 डी CAPTCHA की तरह इस एक उत्पन्न होगा लिखने के लिए करना चाहते हैं: teabag captchaजनरेट कर रहा है एक 3 डी कॅप्चा [pic]

कौन सा ग्राफिक्स पुस्तकालयों मैं उपयोग कर सकते हैं?

स्रोत: ocr-research.org.ua

+1

बस एक और सवाल है: है 3 डी कैप्चा ओसीआर के लिए कड़ी मेहनत? – RMAAlmeida

+0

बहुत कठिन है। अधिक जानकारी के लिए 'स्रोत' पढ़ें। –

+0

ओह नहीं, क्या किसी ने वास्तव में इसे teabag कहा था ?? –

उत्तर

2

मुझे यकीन है कि मैं क्या आप ऊपर है के लिए एक पूर्ण 3 डी पुस्तकालय के साथ परेशान करेगा नहीं हूँ। बस 3 डी पॉइंट्स का मैट्रिक्स जेनरेट करें, पीआईएल जैसे कुछ के साथ टेक्स्ट जेनरेट करें, यह पता लगाने के लिए कि ग्रिड पर कौन से अंक उठाए गए हैं, एक यादृच्छिक कैमरा कोण चुनें और फिर अंक को 2 डी छवि में प्रोजेक्ट करें और उन्हें पीआईएल के साथ खींचें अंतिम छवि

कहा जा रहा है ... यदि आप 3 डी गणित स्वयं नहीं करना चाहते हैं तो आप VPython का उपयोग करने में सक्षम हो सकते हैं।

+0

मैं "3 डी पोंट का मैट्रिक्स कैसे उत्पन्न करूं"? –

+0

यह सिर्फ टुपल्स की एक सूची होगी - प्रत्येक ट्यूपल में 3 संख्याएं होंगी - एक्स, वाई और जेड का प्रतिनिधित्व करें। –

+1

रॉबर्ट डब्ल्यू: 3 डी ग्राफिक्स के किसी भी पूर्व ज्ञान के बिना यह सब कुछ कॉल करने के पहले कॉल करने से पहले आप मुझे कोशिश कर सकते हैं, मुझे लगता है। – Joey

1

ओपनजीएल, http://pyopengl.sourceforge.net/ के लिए पायथन बाइंडिंग का उपयोग करें।

PIL का उपयोग कर काले रंग की सतह पर सफेद रंग टेक्स्ट की 2 डी छवि बनाएं। इससे 3 डी ग्रिड बनाएं, उस बिंदु के जेड को बढ़ाएं जहां रंग सफेद है, शायद z = रंग मान सेट करें, इसलिए छवि को धुंधला करके आप जेड दिशा में वास्तविक वक्र प्राप्त कर सकते हैं।

इन बिंदुओं से ओपनजीएल त्रिभुज बनाएं, प्रतिपादन करते समय वायरफ्रेम मोड का उपयोग करें।

ओपनजीएल बफर को एक छवि में पकड़ें, उदाहरण के लिए, http://python-opengl-examples.blogspot.com/2009/04/render-to-texture.html

+0

मुझे पर्याप्त प्रेरणा देने के बाद इसे स्वयं करना अच्छा लगेगा;) –

4

ओपनग्ल के साथ प्रतिपादन के लिए विचार करने के लिए एक और बाध्यकारी pyglet है। इसकी सबसे अच्छी विशेषता यह है कि यह सिर्फ एक डाउनलोड है। मुझे लगता है कि अनुराग मंत्रमुग्ध करने के लिए आपको जो कुछ भी चाहिए, उसे लागू करने के लिए इसमें सब कुछ शामिल है।

मैं आपको चेतावनी दूंगा कि आप जो करने की कोशिश कर रहे हैं वह 3 डी ग्राफिक्स में बिल्कुल सरल परियोजना नहीं है। यदि यह ओपनजीएल का पहला एक्सपोजर है, तो NeHe Tutorials जैसे ट्यूटोरियल की श्रृंखला और OpenGL website से अन्य सहायता पर विचार करें।

33

कई दृष्टिकोण हैं। मैं व्यक्तिगत रूप से ImageDraw के draw.text का उपयोग कर पायथन इमेजिंग लाइब्रेरी में छवि बनाउंगा, NumPy सरणी (usint NumPy's 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

जाहिर है एक छोटे से किया जाना है, कुल्हाड़ियों को नष्ट करने का काम, बदलते दृश्य कोण, आदि ..

+0

नमूना कोड के लिए +1, यह वास्तव में एक अच्छी शुरुआत की तरह दिखता है। – Kiv

+3

+1 शानदार फ़्लिपिंग। आप इसे किसी न किसी! –

+0

बहुत बहुत अच्छा है। वास्तव में मैं क्या चाहता था। आपका बहुत बहुत धन्यवाद! (मैं लॉग आउट हो गया, इसलिए मैं आपको उत्तर के लिए वोट नहीं दे सकता :() – quilby

संबंधित मुद्दे