cough detectionGörüntü i?lemeMachine Learningöksürük tespitiYaz?l?m

Makine ö?renmesi ile öksürük tespiti

Merhaba makine ö?renmesi yöntemlerini kullanarak öksürük tespitini yapaca??z. Yaz?m? Türkçe yaz?yorum çünkü bu konuda Türkçe kaynak yok. Örnekler vererek detayl?ca aç?klayarak size nas?l yap?ld???n? sunaca??m iyi okumalar.

https://github.com/flavves/oksurukTespit

spektrum görüntülerini bu yaz?mda anlatt???m ?ekilde elde edebilirsiniz

veri setine buradan ula?abilirsiniz : https://wetransfer.com/downloads/d731d25849ca25f7f6bd0349392d8c2920210103141036/fd98e1


import numpy as np 
import pandas as pd
import os
import tensorflow as tf
from tensorflow import keras
from tensorflow.keras.applications import MobileNetV2
from tensorflow.keras.layers import Dense, Conv2D, MaxPool2D, Flatten, Dropout
import time
import matplotlib.pyplot as plt
from tensorflow.keras.preprocessing.image import ImageDataGenerator, load_img, img_to_array

Bu k?s?mda bizim elimizdeki spektrum png dosyalar?m?z? belirlenen parametreler filtrelemesi sayesinde belirli tan?mlara at?yoruz

data_generator = ImageDataGenerator(rescale=1./255.,validation_split=0.2,
                                   featurewise_center=True,
        samplewise_center=True,
        featurewise_std_normalization=True,
        samplewise_std_normalization=True,
        rotation_range=20,
        width_shift_range=0.2,
        height_shift_range=0.2,
        shear_range=0.15,
        zoom_range=0.15,
        fill_mode="nearest",
        horizontal_flip=True,
        vertical_flip=True
                        )
train_generator = data_generator.flow_from_directory(directory= 'D:/masaüstü/yaz?l?mileilgilihersey/onluk/sestospectrum/we/dataset/training/',             
                                                     target_size=(224, 224),
                                                     class_mode='binary',
                                                     subset='training',
                                                     shuffle=True,
                                                     seed=2,
                                                     batch_size=32,
                                                     color_mode='rgb'
                                                     )
valid_generator = data_generator.flow_from_directory(directory= 'D:/masaüstü/yaz?l?mileilgilihersey/onluk/sestospectrum/we/dataset/testing/',
                                                     target_size=(224, 224),
                                                     class_mode='binary',
                                                     subset='validation',
                                                     shuffle=True,
                                                     batch_size=32,
                                                     color_mode='rgb'
                                                    )
classes = ['oksuruk_degil', 'oksuruk']
sonuç

sample_training_images, _ = next(train_generator)
def plotImages(images_arr):
    fig, axes = plt.subplots(1, 5, figsize=(20,20))
    labels = sample_training_images
    axes = axes.flatten()
    for img, ax in zip(images_arr, axes):
        ax.imshow(img)
        ax.axis('off')
    plt.tight_layout()
    plt.show()
plotImages(sample_training_images[:5])
örnekler
model = tf.keras.models.Sequential()
model.add(MobileNetV2(include_top=False, pooling='avg', weights='imagenet', input_shape=(224, 224, 3), classes=2))
model.add(Dense(2, activation='softmax'))
model.layers[0].trainable = False
model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])
callbacks = tf.keras.callbacks.EarlyStopping(monitor = 'val_accuracy', patience = 2)
history = model.fit_generator(train_generator,
                              steps_per_epoch = len(train_generator),
                              epochs=15,
                              validation_steps = len(valid_generator),
                              validation_data=valid_generator,
                              callbacks = [callbacks]
                              )

def visualize_training(history, lw = 3):
    plt.figure(figsize=(10,6))
    plt.plot(history.history['accuracy'], label = 'training', marker = '*', linewidth = lw)
    plt.plot(history.history['val_accuracy'], label = 'validation', marker = 'o', linewidth = lw)
    plt.title('Training Accuracy vs Validation Accuracy')
    plt.xlabel('Epochs')
    plt.ylabel('Accuracy')
    plt.legend(fontsize = 'x-large')
    plt.show()
    plt.figure(figsize=(10,6))
    plt.plot(history.history['loss'], label = 'training', marker = '*', linewidth = lw)
    plt.plot(history.history['val_loss'], label = 'validation', marker = 'o', linewidth = lw)
    plt.title('Training Loss vs Validation Loss')
    plt.xlabel('Epochs')
    plt.ylabel('Loss')
    plt.legend(fontsize = 'x-large')
    plt.show()
visualize_training(history)

preds = model.predict_generator(valid_generator,steps=15)
label = valid_generator.classes
pred= model.predict(valid_generator)
predicted_class_indices=np.argmax(pred,axis=1)
labels = (valid_generator.class_indices)
labels2 = dict((v,k) for k,v in labels.items())
predictions = [labels2[k] for k in predicted_class_indices]
print(predicted_class_indices)
print (labels)
print (predictions)

Haydi sizinle beraber ?imdi tahmin yapal?m

image_path = 'D:/masaüstü/yaz?l?mileilgilihersey/onluk/sestospectrum/we/dataset/testing/oksuruk/a48.png'
image = tf.keras.preprocessing.image.load_img(image_path)
input_arr = tf.keras.preprocessing.image.img_to_array(image)
input_arr = np.array([input_arr])  # Convert single image to a batch.
predictions = model.predict(input_arr)
predictions

from sklearn.metrics import confusion_matrix, classification_report, roc_curve
rc = roc_curve(predicted_class_indices,label)
cf_matrix = confusion_matrix(predicted_class_indices,label)
cf_report = classification_report(predicted_class_indices,label)
print('Confusion matrix report of the model : \n{}'.format(cf_matrix))
exp_series = pd.Series(label)
pred_series = pd.Series(predicted_class_indices)
pd.crosstab(exp_series, pred_series, rownames=['Actual'], colnames=['Predicted'],margins=True)
print('Classification report of the model : \n{}'.format(cf_report))
save_path = '.'
from tensorflow.keras.models import load_model
model2 = load_model(os.path.join(save_path,"D:/masaüstü/yaz?l?mileilgilihersey/onluk/sestospectrum/bionluk.h5"))
pred = model2.predict(input_arr)
pred

Tahminimce hadi nerede sonuç diyebilirsiniz. Kendi üretti?iniz model sonucunda test datan?zdaki öksürük ve öksürük de?il kararlar?n? kar??la?t?r?n gelen arraylerin aral???n? veya yüksekli?ine göre tahmin yap?n

save_path = '.'
model2 = load_model(os.path.join(save_path,"bionluk.h5"))
pred = model2.predict(giris)
pred
for a in pred:
    print(a[1])
    sonuc=a[0]
    sonuc1=a[1]
    
if sonuc >0.50:
    print("SONUÇ ÖKSÜRÜK")
else:
    print("NEGAT?F")

Tarz?nda yapabilirsiniz sizin terci?inize kalm??.

Te?ekkür ederim e?er bir sorunuz olursa

batuhanokmen@gmail.com üzerinden sorular?n?z? iletebilirsiniz.

Bir yanıt yazın