Python, OpenCV ve Tensorflow İle El Yazısı Tanıma Uygulaması

0 2.181

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.

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:

  1. OpenCV Nedir?
  2. Python ve OpenCV ile Video Oynatma
  3. Python ve OpenCV ile Videoyu Renklerine Ayırma
  4. Python ve OpenCV İle Video Kaydetme
  5. Python ve OpenCV ile Resim İşlemlerine Giriş
  6. Python ve OpenCV Kullanarak Yüz Tanıma Uygulaması
  7. Python ve OpenCV Kullanarak Bilgisayar Kamerasından Görüntü Almak
  8. Pyton ve OpenCV Kullanarak Kenar Algılama Uygulaması
  9. Python ve OpenCV Kullanarak Resimlere Elastik Efekti Verme
  10. Python ve OpenCV Kullanarak SuperPixel İşlemi Uygulaması
  11. Python Ve OpenCv İle WebCam’den Aldığınız Görüntüyü İşlemek
  12. Python Ve OpenCV Ile Resimlerinizi JSON Formatına Çevirin
  13. Python Ve OpenCV Ile Youtube Videolarını Stream Yapma
  14. Python Ve OpenCV Kullanarak Bir Resmin Tüm Piksellerine Ulaşmak
  15. Python ve OpenCV kullanarak komik aynalar uygulaması
Cevap bırakın

E-posta hesabınız yayımlanmayacak.

Bu web sitesi deneyiminizi geliştirmek için çerezleri kullanır. Bununla iyi olduğunuzu varsayacağız, ancak isterseniz vazgeçebilirsiniz. Kabul etmek Mesajları Oku