{"nbformat":4,"nbformat_minor":0,"metadata":{"colab":{"provenance":[],"authorship_tag":"ABX9TyMXvmJvgpEqwVmSZ/YGK5XS"},"kernelspec":{"name":"python3","display_name":"Python 3"},"language_info":{"name":"python"}},"cells":[{"cell_type":"code","execution_count":null,"metadata":{"id":"jtsAO5QeeBcb"},"outputs":[],"source":["% segmentation and spectrogram\n","\n","data = load('your data here');\n","signal = data.your data name;\n","file_name='your data';\n","Fs = 128;\n","segment_length = 30;\n","num_segments = floor(length(signal) / (segment_length * Fs));\n","window = hamming(segment_length * Fs);\n","noverlap = floor(0.5 * length(window));\n","nfft = 2^nextpow2(length(window));\n","save_directory = 'your directory here';\n","for i = 1:num_segments\n","        start_index = (i - 1) * segment_length * Fs + 1;\n","    end_index = min(i * segment_length * Fs, length(signal));\n","        segment = signal(start_index:end_index);\n","        [S, F, T] = spectrogram(segment, window, noverlap, nfft, Fs);\n","       h = figure('Visible', 'off');\n","    imagesc(T, F, 10*log10(abs(S)));\n","    axis xy;\n","    xlabel('Time (s)');\n","    ylabel('Frequency (Hz)');\n","    title(sprintf('Segment %d Spectrogram', i));\n","    colorbar;\n","        file_name = sprintf('%s_spectrogram_%d.png',file_name,i);\n","        full_file_dir = fullfile(save_directory, file_name);\n","        saveas(h, full_file_dir);\n","end\n","    close(h);\n","\n","\n","% train/val/test separation\n","\n","import os\n","import random\n","import shutil\n","\n","dataset_dir = \"/your directory here\"\n","\n","folders= [\"your spectrogram folders here\"]\n","\n","train_ratio = 0.7\n","val_ratio = 0.15\n","test_ratio = 0.15\n","\n","for folder in folders:\n","    folder_dir = os.path.join(dataset_dir, folder)\n","\n","    for k in [\"train\", \"val\", \"test\"]:\n","        os.makedirs(os.path.join(folder_dir, k), exist_ok=True)\n","\n","   features = os.listdir(folder_dir)\n","    for feature in features:\n","        feature_dir = os.path.join(folder_dir, feature)\n","        pictures = os.listdir(feature_dir)\n","        random.shuffle(pictures)\n","\n","        train_number = int(len(pictures) * train_ratio)\n","        val_number = int(len(pictures) * val_ratio)\n","% ResNet64 Classifier\n","!pip list | grep -e fastai -e torch -e torchvision\n","!pip install roboflow\n","\n","from roboflow import Roboflow\n","rf = Roboflow(api_key=\"YOUR API KEY HERE\")\n","project = rf.workspace(\"your workspace name here\").project(\"your Project name here\")\n","dataset = project.version(2).download(\"folder\")\n","import os\n","\n","labels = os.listdir(\"Your directory here\")\n","print(\"No. of labels: {}\".format(len(labels)))\n","print(\"-----------------\")\n","\n","for label in labels:\n","    print(\"{}, {} files\".format(label, len(os.listdir(\"your directory here\"+label))))\n","import numpy as np\n","import matplotlib.pyplot as plt\n","from PIL import Image\n","\n","fig, ax = plt.subplots(nrows=2, ncols=2)\n","fig.tight_layout()\n","cnt = 0\n","for row in ax:\n","    for col in row:\n","        image_name = np.random.choice(os.listdir(\"your directory here\"+ labels[cnt]))\n","        im = Image.open(\"your directory here{}/{}\".format(labels[cnt],image_name))\n","        col.imshow(im)\n","        col.set_title(labels[cnt])\n","        col.axis('off')\n","        cnt += 1\n","plt.show()\n","\n","from fastai.vision import *\n","from fastai.metrics import accuracy\n","\n","import torchvision.transforms as transforms\n","from torchvision import datasets\n","from torch.utils.data import DataLoader\n","\n","path = \"your data directory here\"\n","\n","mean = [0.485, 0.456, 0.406]\n","std = [0.229, 0.224, 0.225]\n","\n","normalize = transforms.Normalize(mean=mean, std=std)\n","\n","transform = transforms.Compose([\n","    transforms.Resize(size),\n","    transforms.ToTensor(),\n","    normalize,\n","])\n","\n","dataset = datasets.ImageFolder(root=path, transform=transform)\n","\n","batch_size = bs\n","data_loader = DataLoader(dataset, batch_size=batch_size, shuffle=True, num_workers=4)\n","\n","for batch in data_loader:\n","    images, labels = batch\n","from fastai.vision.all import *\n","\n","data = DataBlock(blocks=(ImageBlock, CategoryBlock),\n","                 get_items=get_image_files,\n","                 splitter=RandomSplitter(valid_pct=0.2, seed=42),\n","                 get_y=parent_label,\n","                 item_tfms=Resize(460),\n","                 batch_tfms=[*aug_transforms(size=224), Normalize.from_stats(*imagenet_stats)])\n","\n","dls = data.dataloaders(path)\n","\n","learner = cnn_learner(dls, models.resnet34, metrics=[accuracy, Precision(average='macro'), Recall(average='macro'), F1Score(average='macro')])\n","learner.fine_tune(20)\n","\n","interp = ClassificationInterpretation.from_learner(learner)\n","interp.plot_confusion_matrix()\n","\n","import torch\n","import torch.nn as nn\n","from torchsummary import summary\n","from torchvision.models import resnet50  # ya da diğer ResNet modellerini seçebilirsiniz\n","\n","class ResNet64(nn.Module):\n","    def __init__(self):\n","        super(ResNet64, self).__init__()\n","        self.resnet = resnet50()\n","\n","    def forward(self, x):\n","        return self.resnet(x)\n","\n","model = ResNet64()\n","print(model)\n","input_channels, height, width = 3, 224, 224\n","summary(model, input_size=(input_channels, height, width))\n","\n","\n","\n","\n","\n","\n","% YOLOv5 Classifier\n","\n","!git clone https://github.com/ultralytics/yolov5  # clone\n","%cd yolov5\n","%pip install -qr requirements.txt  # install\n","\n","import torch\n","import utils\n","display = utils.notebook_init()  # checks\n","from utils.downloads import attempt_download\n","\n","p5 = ['n', 's', 'm', 'l', 'x']  # P5 models\n","cls = [f'{x}-cls' for x in p5]  # classification models\n","\n","for x in cls:\n","    attempt_download(f'weights/yolov5{x}.pt')\n","\n","#Infer using classify/predict.py\n","!python classify/predict.py --weights ./weigths/yolov5s-cls.pt --source bananas.jpg\n","\n","# Ensure we're in the right directory to download our custom dataset\n","import os\n","os.makedirs(\"../datasets/\", exist_ok=True)\n","%cd ../datasets/\n","\n","# REPLACE the below with your exported code snippet from above\n","!pip install roboflow\n","\n","from roboflow import Roboflow\n","rf = Roboflow(api_key=\"YOUR API KEY\")\n","project = rf.workspace(\"yolov5-classification\").project(\"banana-ripeness-classification\")\n","dataset = project.version(1).download(\"folder\")\n","\n","#Save the dataset name to the environment so we can use it in a system call later\n","dataset_name = dataset.location.split(os.sep)[-1]\n","os.environ[\"DATASET_NAME\"] = dataset_name\n","%cd ../yolov5\n","\n","!python classify/train.py --model yolov5s-cls.pt --data $DATASET_NAME --epochs 20 --img 128 --pretrained weights/yolov5s-cls.pt\n","\n","!python classify/val.py --weights runs/train-cls/exp/weights/best.pt --data ../datasets/$DATASET_NAME\n","\n","#Get the path of an image from the test or validation set\n","if os.path.exists(os.path.join(dataset.location, \"test\")):\n","  split_path = os.path.join(dataset.location, \"test\")\n","else:\n","  os.path.join(dataset.location, \"valid\")\n","example_class = os.listdir(split_path)[0]\n","example_image_name = os.listdir(os.path.join(split_path, example_class))[0]\n","example_image_path = os.path.join(split_path, example_class, example_image_name)\n","os.environ[\"TEST_IMAGE_PATH\"] = example_image_path\n","\n","print(f\"Inferring on an example of the class '{example_class}'\")\n","\n","#Infer\n","!python classify/predict.py --weights runs/train-cls/exp/weights/best.pt --source $TEST_IMAGE_PATH\n","\n","#Directory infer\n","os.environ[\"TEST_CLASS_PATH\"] = test_class_path = os.path.join(*os.environ[\"TEST_IMAGE_PATH\"].split(os.sep)[:-1])\n","print(f\"Infering on all images from the directory {os.environ['TEST_CLASS_PATH']}\")\n","!python classify/predict.py --weights runs/train-cls/exp/weights/best.pt --source /$TEST_CLASS_PATH/\n","\n","% YOLOv8 Classifier\n","import os\n","HOME = os.getcwd()\n","print(HOME)\n","\n","# Pip install method (recommended)\n","\n","!pip install ultralytics\n","\n","from IPython import display\n","display.clear_output()\n","\n","import ultralytics\n","ultralytics.checks()\n","\n","from ultralytics import YOLO\n","%cd {HOME}\n","\n","%cd {HOME}\n","Image(filename='runs/classify/predict/dog.jpeg', height=600)\n","!yolo task=classify mode=predict model=yolov8n-cls.pt conf=0.25 source='https://media.roboflow.com/notebooks/examples/dog.jpeg'\n","from IPython.display import display, Image\n","\n","model = YOLO(f'{HOME}/yolov8n-cls.pt')\n","results = model.predict(source='https://media.roboflow.com/notebooks/examples/dog.jpeg', conf=0.25)\n","\n","!mkdir {HOME}/datasets\n","%cd {HOME}/datasets\n","\n","!pip install roboflow --quiet\n","\n","from roboflow import Roboflow\n","rf = Roboflow(api_key=\"YOUR_API_KEY\")\n","project = rf.workspace(\"roboflow-universe-projects\").project(\"banana-ripeness-classification\")\n","dataset = project.version(4).download(\"folder\")\n","\n","%cd {HOME}\n","\n","!yolo task=classify mode=train model=yolov8n-cls.pt data={dataset.location} epochs=20 imgsz=128\n","!ls -la {HOME}/runs/classify/train/\n","!cat {HOME}/runs/classify/train/results.csv | head -10\n","%cd {HOME}\n","\n","!yolo task=classify mode=val model={HOME}/runs/classify/train/weights/best.pt data={dataset.location}\n","%cd {HOME}\n","!yolo task=classify mode=predict model={HOME}/runs/classify/train/weights/best.pt conf=0.25 source={dataset.location}/test/overripe\n","import glob\n","from IPython.display import Image, display\n","\n","for image_path in glob.glob(f'{HOME}/runs/classify/predict/*.jpg')[:3]:\n","      display(Image(filename=image_path, width=600))\n","      print(\"\\n\")\n","project.version(dataset.version).deploy(model_type=\"yolov8-cls\", model_path=f\"{HOME}/runs/classify/train/\")\n","\n","\n","\n"]}]}