Merhaba,
Video ile OCR uygulaması yapan bir kod kullandım ve bunu arayüzde 2 adet butona atayarak kullanmayı denemek istiyorum. Program webcam açılıyor ve klavyeden s ve q tuşlarına basarak ocr işlemini gerçekleştiriyorum. Bu s’e basma işlemini de butona atamak istiyorum.
from PyQt5 import QtCore, QtGui, QtWidgets
import algorithm
class Ui_MainWindow ( object ) :
def setupUi (self, MainWindow) :
MainWindow.setObjectName ( "MainWindow" )
MainWindow.resize ( 519, 354 )
self.centralwidget = QtWidgets.QWidget ( MainWindow )
self.centralwidget.setObjectName ( "centralwidget" )
self.pushButton = QtWidgets.QPushButton ( self.centralwidget )
self.pushButton.setGeometry ( QtCore.QRect ( 210, 140, 75, 23 ) )
self.pushButton.setObjectName ( "pushButton" )
self.pushButton_2 = QtWidgets.QPushButton ( self.centralwidget )
self.pushButton_2.setObjectName ( "pushButton_2" )
MainWindow.setCentralWidget ( self.centralwidget )
self.retranslateUi ( MainWindow )
QtCore.QMetaObject.connectSlotsByName ( MainWindow )
def retranslateUi (self, MainWindow) :
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle ( _translate ( "MainWindow", "MainWindow" ) )
self.pushButton.setText ( _translate ( "MainWindow", "Open" ) )
self.pushButton_2.setText ( _translate ( "MainWindow", "Get" ) )
self.pushButton.clicked.connect ( self.OpenClick )
self.pushButton_2.clicked.connect ( self.OpenClick_2 )
def OpenClick (self) :
algorithm.FunctionAlgo ()
def OpenClick_2 (self) :
cf = 1
algorithm.tessfunc ()
if __name__ == "__main__" :
import sys
app = QtWidgets.QApplication ( sys.argv )
MainWindow = QtWidgets.QMainWindow ()
ui = Ui_MainWindow ()
ui.setupUi ( MainWindow )
MainWindow.show ()
sys.exit ( app.exec_ () )
buradaki main.py’den arayüzü çağırıyorum. Ocr işlemini:
def FunctionAlgo():
import cv2
from PIL import Image
import numpy as np
import sys
import glob
import os
from subprocess import call
from urllib.request import urlopen
from collections import Counter
import json
from pathlib import Path
import re
import webbrowser
cf = 0
ResultStr = [ '' ]
def LogicOpStrings ( ) :
l = len ( ResultStr )
newArr = [ ]
for i in range ( 0, l ) :
if not ResultStr[ i ] == "" :
newArr.append ( ResultStr[ i ].replace ( "\n", "" ).strip () )
newArrSet = set ( newArr )
url = ("https://raw.githubusercontent.com/dwyl/english-words/master/words_dictionary.json")
print ( "Loading english dictionary from internet..." )
wordDic = get_jsonparsed_data ( url )
print ( "English word vocabulary has been successfully loaded!" )
validWordCountMap = [ ]
l = len ( newArr )
for i in range ( 0, l ) :
count = 0
wordChunks = newArr[ i ].split ( ' ' )
for j in range ( 0, len ( wordChunks ) ) :
if wordChunks[ j ].lower () in wordDic :
count = count + 1
else :
print ( wordChunks[ j ], " is not a valid word!" )
validWordCountMap.append ( count )
print ( "-----Overall result:-----" )
print ( newArr[ validWordCountMap.index ( most_Common ( validWordCountMap ) ) ] )
print ( "-------------------------" )
def get_jsonparsed_data (url) :
response = urlopen ( url )
data = response.read ().decode ( "utf-8" )
return json.loads ( data )
def most_Common (lst) :
data = Counter ( lst )
return data.most_common ( 1 )[ 0 ][ 0 ]
def tessfunc ( ) :
os.system ( "tesseract file.png data" )
clearTesseractExecNote ()
with open ( 'data.txt', 'r' ) as mf :
try :
content = mf.read ()
if (not content.isspace ()) :
ResultStr.append ( content )
print ( "\nResult:\n********************************************\n",
re.sub ( '[^0-9\r\n]+', ' ', content ), "\n********************************************" )
except UnicodeDecodeError :
print ( "Unicode character found which cant be decoded" )
def removechunk ( ) :
for i in glob.glob ( 'file*.png' ) :
print ( "Unlinked %s" % i )
os.unlink ( i )
def clearTesseractExecNote ( ) :
print ( "\033[A \033[A" )
print ( "\033[A \033[A" )
print ( "Accessing device's camera..." )
cap = cv2.VideoCapture ( 0 )
print ( "\033[A \033[A" )
print ( "Camera ready!" )
print ( "Activated command mode!\nPress 's' to start text recognition" )
count = 0
while (True) :
ret, frame = cap.read ()
gray = cv2.cvtColor ( frame, cv2.COLOR_BGR2GRAY )
cv2.imshow ( 'Frame', gray )
ret, thresh = cv2.threshold ( gray, 0, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU )
cv2.imwrite ( 'file.png', thresh )
if cf == 1 :
tessfunc ()
if cv2.waitKey ( 1 ) & 0xFF == ord ( 'q' ) :
cf = 0
if cv2.waitKey ( 1 ) & 0xFF == ord ( 's' ) :
cf = 1
text = f = open ( "data.txt", "r" )
url = "url"
url2 = "url2"
url3 = url + "J" + "text" + url2
print ( url3 )
webbrowser.open ( url3, new=0, autoraise=True )
if cv2.waitKey ( 1 ) & 0xFF == ord ( 'e' ) :
print ( "Terminating the program" )
break
cap.release ()
exit ()
ile yapıyorum. Burada en yukarıda tanımlanmış olan cf değeri tessfunc olarak tanımlı. Bunu da push buttonlara openclick1 ve openclick2 tuşları ile tanımladım. Ancak pushbutton_2 yi def olarak tessfunc() çağıramıyorum. Tuşa basılı değilse cf=0 ve s tuşu cf değerini 1 yapıyor ve ocr işlemi gerçekleşiyor.
Bunu yapabilmek mümkünse nasıl yapabilirim?