Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # -*- encoding: utf-8 -*-
- import sysimpPyQt4 import QtCore, QtGuiPyQt4.QtCore import QObject, SIGNALengine= ''trUtf8(Instance, SourceText):QObject.trUtf8(Instance, SourceTextprocessCaptcha(path,qobj):= engine.captcha().decode(path).main_w.label_3.clear().main_w.textEdit.append( '==================').main_w.textEdit.append( trUtf8(qobj,'Начинаем распознавание...'))probability,letter in res:.main_w.textEdit.append( trUtf8(qobj,'%s - с вероятностью %s'%(letter,probability))).main_w.label_3.setText(qobj.main_w.label_3.text() + letter.upper())
- #print "",letter.main_w.textEdit.append( '==================').main_w.textEdit.append( trUtf8(qobj,'Распознавание успешно завершено!'))
- .main_w.label_4.setPixmap( QtGui.QPixmap('tmp/0.gif') ).main_w.label_5.setPixmap( QtGui.QPixmap('tmp/1.gif') ).main_w.label_6.setPixmap( QtGui.QPixmap('tmp/2.gif') ).main_w.label_7.setPixmap( QtGui.QPixmap('tmp/3.gif') ).main_w.label_8.setPixmap( QtGui.QPixmap('tmp/4.gif') ).main_w.label_9.setPixmap( QtGui.QPixmap('tmp/5.gif') )Ui(QtGui.QMainWindow):
- #sg = signals()__init__(self, parent=None):(Ui,self).__init__(parent).main_w = imp.load_source('main_frm', 'UI/main_frm.py').Ui_MainWindow().main_w.setupUi(self)_frm = self.main_w
- #QObject.connect(self.main_w.pushButton, QtCore.SIGNAL("clicked()"), sg.on_pushButton_click).main_w.pushButton.clicked.connect(self.on_pushButton_click).main_w.pushButton_2.clicked.connect(self.on_pushButton2_click)on_pushButton_click(self):fname= QtGui.QFileDialog.getOpenFileName(self,u"Веберите капчу")fname:.main_w.textEdit.append(trUtf8(self,'Открытие капчи: ')+fname).main_w.label.setPixmap(QtGui.QPixmap(fname))
- #processCaptcha(fname,self)on_pushButton2_click(self):fname != '' : processCaptcha(fname,self)__name__=='__main__':= QtGui.QApplication(sys.argv)= Ui().show().exit(app.exec_())PIL import Imagehashlibtimeosmatplotlib import pylabmatplotlib.pyplot as pltPIL import Image, ImageOps, ImageEnhance
- #from opencv import cv, highgui, adaptorscvmathoperator import itemgetter
- class VectorCompare:magnitude(self,concordance):= 0word,count in concordance.iteritems():+= count ** 2math.sqrt(total)
- relation(self,concordance1, concordance2):= 0= 0word, count in concordance1.iteritems():concordance2.has_key(word):+= count * concordance2[word]topvalue / (self.magnitude(concordance1) * self.magnitude(concordance2))
- class captcha:buildvector(self,im):= {}
- = 0i in im.getdata():[count] = i+= 1
- return d1 decode(parent,path):= VectorCompare()
- iconset = ['0','1','2','3','4','5','6','7','8','9','0','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z']
- imageset = []
- letter in iconset:img in os.listdir('./iconset/%s/'%(letter)):= []img != "Thumbs.db": .append(parent.buildvector(Image.open("./iconset/%s/%s"%(letter,img)))).append({letter:temp})
- = Image.open('%s'%path)= ImageOps.invert(img)= ImageEnhance.Contrast(img).enhance(1.9)= [0 for x in range (0,255)]= img.convert("P")
- = img.histogram()
- = {}
- for i in range(256):[i] = his[i]
- = []j,k in sorted(clrs.items(), key=itemgetter(1), reverse=True)[:15]:j != 0 and k > ( (img.size[0] * img.size[1])/100*5) :.append(j)
- #print filt
- #print "max = %d,max_ind = %d"%(max,max_ind)
- = Image.new("P",img.size,255)x in range(img.size[1]):y in range(img.size[0]):= img.getpixel((y,x))pix in range(filt[0]-3,filt[0]+3): .putpixel((y,x),255):.putpixel((y,x),0)
- = parent.RemoveLines(im)
- #im = parent.Morphology(im)
- #im.save('tmp.bmp')= parent.FindDividingCols(im)
- '''
- im2 = Image.new("P",im.size,255)= im.convert("P")_im = Image.new("P",im.size,255) = {}
- for x in range(im.size[1]):y in range(im.size[0]):= im.getpixel((y,x))[pix] = pixpix == 220 or pix == 227: .putpixel((y,x),0)_im.putpixel((y,x),1)
- #else: graph_im.putpixel((y,x),0)
- = False=False= 0= 0
- #graph_im = Image.new("P",im.size,255)
- #im2.Copy(graph_im).FindDividingCols(graph_im,im2)= []
- y in range(im2.size[0]): # slice acrossx in range(im2.size[1]): # slice down= im2.getpixel((y,x))pix != 255:= True
- foundletter == False and inletter == True:= True= y
- foundletter == True and inletter == False:= False= y.append((start,end))
- inletter=False
- = 0= []letters'''= 0= []img in os.listdir('tmp'):.remove('tmp/%s'%img)letter in letters:= hashlib.md5()= im.crop(( letter[0] , 0, letter[1],im.size[1] ))
- #im3 = parent.Morphology(im3)
- y in range(im3.size[0]): # slice acrossx in range(im3.size[1]): # slice down= im3.getpixel((y,x))pix == 0:.putpixel((y,x),255):.putpixel((y,x),0)
- .save('tmp/%d.gif'%count)= []
- image in imageset:x,y in image.iteritems():len(y) != 0:.append( ( v.relation(y[0],parent.buildvector(im3)),x) ).sort(reverse=True).append(guess[0])+= 1result result
- FindDividingCols(self,img):= []
- i in range(img.size[0]):.append(sum(1 for j in range(img.size[1]) if img.getpixel((i, j)) != 0))
- = 0= 0= 1.5= []= False
- i in range (len(lst)):inLetter == False:(lst[i] > porog):= True= i:(lst[i] < porog):= False= i(sum( lst[x] for x in range(st,end)) > 3):.append((st,end))
- #print cols
- ax1 = pylab.subplot(212).imshow(img, cmap=pylab.cm.gray, shape=(img.size[0], img.size[1]), interpolation='bilinear').subplot(211, sharex=ax1)
- .plot(lst)
- #print cols.show()
- cols
- cropMe(self,img):= []= Image.new("P",img.size,255)
- i in range(img.size[1]):.append(sum(1 for j in range(img.size[0]) if img.getpixel((j, i)) != 0))
- #print lstx in range(len(lst)):(lst[x] != 0):= img.crop( ( 0 , lst[x], img.size[0],img.size[1] ) )
- #for x in range(len(lst),0,-1):
- # if (lst[x] != 0):
- # res = img.crop( ( 0 , lst[x], img.size[0],img.size[1] ) )
- # break
- #im3 = im.crop(( letter[0] , 0, letter[1],im.size[1] ))res
- RemoveLines(self,img):= cv.CreateImage( img.size, cv.IPL_DEPTH_8U, 1 ).SetData(dst, img.tostring())= cv.CreateMemStorage(0)= cv.HoughLines2( dst, storage, cv.CV_HOUGH_PROBABILISTIC, 1, cv.CV_PI/180, 35, 35, 3 )line in lines:.Line( dst, line[0], line[1], 0, 2, 0 )_im = Image.fromstring("L", cv.GetSize(dst), dst.tostring())pil_im
- def Morphology(self,img):= 1= cv.CreateImage( img.size, cv.IPL_DEPTH_8U, 1 )= cv.CreateImage( img.size, cv.IPL_DEPTH_8U, 1 ).SetData(src, img.tostring())
- = cv.CreateStructuringElementEx(pos*2+1, pos*2+1, pos, pos, cv.CV_SHAPE_RECT).Dilate(src, dst, element, 1)= dst= 1= cv.CreateStructuringElementEx(pos*2+1, pos*2+1, pos, pos, cv.CV_SHAPE_RECT).Erode(src, dst, element, 1)_im = Image.fromstring("L", cv.GetSize(dst), dst.tostring())pil_im
- # -*- coding: utf-8 -*-
- # Form implementation generated from reading ui file 'main_frm.ui'
- #
- # Created: Sun Jan 13 23:49:59 2013
- # by: PyQt4 UI code generator 4.9.6
- #
- # WARNING! All changes made in this file will be lost!
- PyQt4 import QtCore, QtGui
- :
- _fromUtf8 = QtCore.QString.fromUtf8AttributeError:_fromUtf8(s):s
- :
- _encoding = QtGui.QApplication.UnicodeUTF8_translate(context, text, disambig):QtGui.QApplication.translate(context, text, disambig, _encoding)AttributeError:_translate(context, text, disambig):QtGui.QApplication.translate(context, text, disambig)
- Ui_MainWindow(object):setupUi(self, MainWindow):.setObjectName(_fromUtf8("MainWindow")).setWindowModality(QtCore.Qt.ApplicationModal).resize(597, 370).centralwidget = QtGui.QWidget(MainWindow).centralwidget.setObjectName(_fromUtf8("centralwidget")).groupBox = QtGui.QGroupBox(self.centralwidget).groupBox.setGeometry(QtCore.QRect(0, 0, 211, 181)).groupBox.setObjectName(_fromUtf8("groupBox")).label = QtGui.QLabel(self.groupBox).label.setGeometry(QtCore.QRect(10, 20, 181, 61)).label.setLayoutDirection(QtCore.Qt.LeftToRight).label.setText(_fromUtf8("")).label.setScaledContents(False).label.setAlignment(QtCore.Qt.AlignCenter).label.setObjectName(_fromUtf8("label")).pushButton = QtGui.QPushButton(self.groupBox).pushButton.setGeometry(QtCore.QRect(40, 140, 75, 23)).pushButton.setObjectName(_fromUtf8("pushButton")).pushButton_2 = QtGui.QPushButton(self.groupBox).pushButton_2.setGeometry(QtCore.QRect(120, 140, 75, 23)).pushButton_2.setObjectName(_fromUtf8("pushButton_2")).groupBox_2 = QtGui.QGroupBox(self.centralwidget).groupBox_2.setGeometry(QtCore.QRect(210, 0, 381, 181)).groupBox_2.setObjectName(_fromUtf8("groupBox_2")).label_3 = QtGui.QLabel(self.groupBox_2).label_3.setGeometry(QtCore.QRect(20, 30, 351, 61))= QtGui.QFont().setFamily(_fromUtf8("Times New Roman")).setPointSize(36).setBold(True).setWeight(75).label_3.setFont(font).label_3.setText(_fromUtf8("")).label_3.setObjectName(_fromUtf8("label_3")).label_9 = QtGui.QLabel(self.groupBox_2).label_9.setGeometry(QtCore.QRect(190, 120, 21, 31)).label_9.setText(_fromUtf8("")).label_9.setObjectName(_fromUtf8("label_9")).label_4 = QtGui.QLabel(self.groupBox_2).label_4.setGeometry(QtCore.QRect(60, 120, 21, 31)).label_4.setText(_fromUtf8("")).label_4.setObjectName(_fromUtf8("label_4")).label_5 = QtGui.QLabel(self.groupBox_2).label_5.setGeometry(QtCore.QRect(90, 120, 21, 31)).label_5.setText(_fromUtf8("")).label_5.setObjectName(_fromUtf8("label_5")).label_6 = QtGui.QLabel(self.groupBox_2).label_6.setGeometry(QtCore.QRect(120, 120, 21, 31)).label_6.setText(_fromUtf8("")).label_6.setObjectName(_fromUtf8("label_6")).label_7 = QtGui.QLabel(self.groupBox_2).label_7.setGeometry(QtCore.QRect(150, 120, 21, 31)).label_7.setText(_fromUtf8("")).label_7.setObjectName(_fromUtf8("label_7")).label_8 = QtGui.QLabel(self.groupBox_2).label_8.setGeometry(QtCore.QRect(170, 120, 21, 31)).label_8.setText(_fromUtf8("")).label_8.setObjectName(_fromUtf8("label_8")).groupBox_3 = QtGui.QGroupBox(self.centralwidget).groupBox_3.setGeometry(QtCore.QRect(0, 180, 591, 151)).groupBox_3.setObjectName(_fromUtf8("groupBox_3")).textEdit = QtGui.QTextEdit(self.groupBox_3).textEdit.setGeometry(QtCore.QRect(10, 20, 571, 121)).textEdit.setReadOnly(True).textEdit.setObjectName(_fromUtf8("textEdit")).setCentralWidget(self.centralwidget).menubar = QtGui.QMenuBar(MainWindow).menubar.setGeometry(QtCore.QRect(0, 0, 597, 21)).menubar.setObjectName(_fromUtf8("menubar")).setMenuBar(self.menubar).statusbar = QtGui.QStatusBar(MainWindow).statusbar.setObjectName(_fromUtf8("statusbar")).setStatusBar(self.statusbar)
- .retranslateUi(MainWindow).QMetaObject.connectSlotsByName(MainWindow)
- retranslateUi(self, MainWindow):.setWindowTitle(_translate("MainWindow", "Captcha Crack", None)).groupBox.setTitle(_translate("MainWindow", "Captcha", None)).pushButton.setText(_translate("MainWindow", "Открыть", None)).pushButton_2.setText(_translate("MainWindow", "Распознать", None)).groupBox_2.setTitle(_translate("MainWindow", "Результат", None)).groupBox_3.setTitle(_translate("MainWindow", "Лог", None))
Advertisement
Add Comment
Please, Sign In to add comment