Python, OpenCV görüntü işleme ve Tensorflow yapay zeka derin öğrenme kütüphaneleri kullanılarak ekrana el yazısı ile çizilen bir numaranın ne olduğunu tahmin eden bir uygulama yapıyoruz. Ekrana çizdiğimiz sayının ne olduğunu öngören sistem temel derin öğrenme süreci konularında giriş yapabileceğiniz örnek bir uygulama olması amacıyla paylaşılmıştır.
Uygulama hakkında sorularınızı yorumlarda belirtebilirsiniz.
İçerik Tablosu
KERAS İle Derin Öğrenme Modeli Oluşturma
Bu projede, keras kullanarak el yazısı sayıyı tahmin etmek için derin bir öğrenme modeli oluşturulur. Numarayı keras dosyasını kullanarak tanımlarken, modeli eğitmek için MNIST El Yazısı görüntüleri Veri Kümelerini kullanıldı, modeli eğittikten sonra eğitilen modeli kaydedebiliriz, böylece programı her çalıştırdığımızda modeli eğitmemiz gerekmez.
Modeli eğitmek için “number recognize using keras.py” dosyasını bir kere çalıştırmanız yeterli olacaktır.
Python ve OpenCV Kullanarak Çizim Penceresi Oluşturma
Daha sonra opencv kullanarak project.py dosyasında, bir numara çizip ‘s’ veya ‘S’ tuşuna basarak kaydedebileceğiniz bir GUI oluşturdum, fonksiyon daha sonra kaydedilen görüntüyü okur ve ardından ana programa döner. Görüntü daha sonra modelin sayıyı tahmin etmesi için gereken boyuta dönüştürülür. Görüntü daha sonra modele beslenir ve öngörülen sayıyı döndürür. Numara daha sonra Öngörülen numaraya yazılır.
Çalışma Videosu
Alttaki videoda nasıl çalıştığını görebilirsiniz.
Python ve OpenCV Kodlarımız:
project.py dosyası
import numpy as np import cv2 from tensorflow import keras windowName = 'Bir Numara Cizin' img = np.zeros((512, 512, 3), np.uint8) cv2.namedWindow(windowName) # true if mouse is pressed drawing = False # if True, draw rectangle. Press 'm' to toggle to curve mode = True (ix, iy) = (-1, -1) # mouse callback function # brush function def draw_shape(event, x, y, flags, param): global ix, iy, drawing, mode if event == cv2.EVENT_LBUTTONDOWN: drawing = True (ix, iy) = x, y elif event == cv2.EVENT_MOUSEMOVE: if drawing: if mode: cv2.circle(img, (x, y), 15, (0, 0, 255), -1) elif event == cv2.EVENT_LBUTTONUP: drawing = False if mode: cv2.circle(img, (x, y), 15, (0, 0, 255), -1) cv2.setMouseCallback(windowName, draw_shape) def main(): global mode while(True): cv2.imshow(windowName, img) k = cv2.waitKey(1) if k == ord('m') or k == ord('M'): mode = not mode # 's' is used to save the image you have drawn in Window elif k == ord('s') or k == ord('S'): cv2.imwrite('num.png', img) elif k == 27: break cv2.destroyAllWindows() img2 = cv2.imread('num.png') return img2 if __name__ == "__main__": img = main() img2 = img # converting Color of the image to gray img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # resize the image img = cv2.resize(img, (28, 28), interpolation=cv2.INTER_AREA) # convert img to float32 type img = img.astype('float32') img /= 255 img = np.reshape(img, (1, 28, 28, 1)) # loading the previously saved model model1 = keras.models.load_model('model.h5') # predicting the number in the image num = model1.predict_classes(img)[0] # prints the number predicted print('number = ', num) f = np.zeros((500, 500, 3), dtype='uint8') font = cv2.FONT_HERSHEY_SIMPLEX org = (20, 20) fontScale = 1 color = (255, 255, 0) thickness = 2 print(num) # shows the predicted number in the image img2 = cv2.putText(img2, f'Tespit Edilen Sayı = {num}', org, font, fontScale, color, thickness, cv2.LINE_AA) cv2.imshow('Predicted', img2) cv2.waitKey(0) cv2.destroyAllWindows()
Keras ile Sayı Tanımlama İçin Kullandığımız kodlarımız:
Bu kodları çalıştırdıktan sonra bir süre öğrenme modellerinin oluşturulması için beklemelisiniz. İsterseniz model dosyasını sayfanın altındaki kodları indir bölümünden indirebilirsiniz.
# importing keras from tensorflow import keras # dividing MNIST datasets to training and test datasets (x_train, y_train), (x_test, y_test) = keras.datasets.mnist.load_data() x_train = x_train.reshape(x_train.shape[0], 28, 28, 1) x_test = x_test.reshape(x_test.shape[0], 28, 28, 1) # converting dataset to float32 type x_train = x_train.astype('float32') x_test = x_test.astype('float32') x_train /= 255 x_test /= 255 # preparing the model model = keras.models.Sequential([ keras.layers.Conv2D(64, (2, 2), padding='same', activation='elu', input_shape=[28, 28, 1]), keras.layers.MaxPooling2D(2), keras.layers.Conv2D(128, (3, 3), padding="same", activation="elu"), keras.layers.Conv2D(256, (4, 4), padding="same", activation="elu"), keras.layers.Dropout(0.5), keras.layers.MaxPooling2D(2), keras.layers.Flatten(), keras.layers.Dense(128, activation="elu"), keras.layers.Dropout(0.25), keras.layers.Dense(10, activation="softmax") ]) # compiling the model model.compile(loss="sparse_categorical_crossentropy", metrics=[ "accuracy"], optimizer=keras.optimizers.SGD(lr=0.08)) print(model.summary()) # train the model model.fit(x_train, y_train, epochs=5) # Evaluate the model model.evaluate(x_test, y_test) # saving the model model.save('model.h5') print('Model Saved')
Uygulamayı İndirme:
Tüm kodları ve öğrenme modelini github linkinden indirebilirsiniz. –> https://github.com/jagadishb1409/Digit-recognition
Diğer OpenCV Örnekleri
Python ve OpenCv görüntü işleme kütüphanesi kullanarak hazırladığımız diğer örneklerimizin listesi:
- OpenCV Nedir?
- Python ve OpenCV ile Video Oynatma
- Python ve OpenCV ile Videoyu Renklerine Ayırma
- Python ve OpenCV İle Video Kaydetme
- Python ve OpenCV ile Resim İşlemlerine Giriş
- Python ve OpenCV Kullanarak Yüz Tanıma Uygulaması
- Python ve OpenCV Kullanarak Bilgisayar Kamerasından Görüntü Almak
- Pyton ve OpenCV Kullanarak Kenar Algılama Uygulaması
- Python ve OpenCV Kullanarak Resimlere Elastik Efekti Verme
- Python ve OpenCV Kullanarak SuperPixel İşlemi Uygulaması
- Python Ve OpenCv İle WebCam’den Aldığınız Görüntüyü İşlemek
- Python Ve OpenCV Ile Resimlerinizi JSON Formatına Çevirin
- Python Ve OpenCV Ile Youtube Videolarını Stream Yapma
- Python Ve OpenCV Kullanarak Bir Resmin Tüm Piksellerine Ulaşmak
- Python ve OpenCV kullanarak komik aynalar uygulaması