AI-For-Beginners/translations/tr/examples/03-image-classifier.ipynb

395 lines
13 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Basit Görüntü Sınıflandırıcı\n",
"\n",
"Bu not defteri, önceden eğitilmiş bir sinir ağı kullanarak görüntüleri nasıl sınıflandıracağınızı gösterir.\n",
"\n",
"**Öğrenecekleriniz:**\n",
"- Önceden eğitilmiş bir modeli nasıl yükleyip kullanacağınızı\n",
"- Görüntü ön işleme\n",
"- Görüntüler üzerinde tahmin yapma\n",
"- Güven skorlarını anlama\n",
"\n",
"**Kullanım durumu:** Görüntülerdeki nesneleri tanımlama (örneğin \"kedi\", \"köpek\", \"araba\" gibi)\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Adım 1: Gerekli Kütüphaneleri İçe Aktarma\n",
"\n",
"İhtiyacımız olan araçları içe aktaralım. Henüz hepsini anlamıyorsanız endişelenmeyin!\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# Core libraries\n",
"import numpy as np\n",
"from PIL import Image\n",
"import requests\n",
"from io import BytesIO\n",
"\n",
"# TensorFlow for deep learning\n",
"try:\n",
" import tensorflow as tf\n",
" from tensorflow.keras.applications import MobileNetV2\n",
" from tensorflow.keras.applications.mobilenet_v2 import preprocess_input, decode_predictions\n",
" print(\"✅ TensorFlow loaded successfully!\")\n",
" print(f\" Version: {tf.__version__}\")\n",
"except ImportError:\n",
" print(\"❌ Please install TensorFlow: pip install tensorflow\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Adım 2: Önceden Eğitilmiş Modeli Yükleme\n",
"\n",
"**MobileNetV2** adlı, milyonlarca görüntü üzerinde önceden eğitilmiş bir sinir ağını kullanacağız.\n",
"\n",
"Bu yönteme **Transfer Öğrenme** denir - başkası tarafından eğitilmiş bir modeli kullanmak!\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"print(\"📦 Loading pre-trained MobileNetV2 model...\")\n",
"print(\" This may take a minute on first run (downloading weights)...\")\n",
"\n",
"# Load the model\n",
"# include_top=True means we use the classification layer\n",
"# weights='imagenet' means it was trained on ImageNet dataset\n",
"model = MobileNetV2(weights='imagenet', include_top=True)\n",
"\n",
"print(\"✅ Model loaded!\")\n",
"print(f\" The model can recognize 1000 different object categories\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Adım 3: Yardımcı Fonksiyonlar\n",
"\n",
"Modelimiz için görüntüleri yüklemek ve hazırlamak üzere fonksiyonlar oluşturalım.\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"def load_image_from_url(url):\n",
" \"\"\"\n",
" Load an image from a URL.\n",
" \n",
" Args:\n",
" url: Web address of the image\n",
" \n",
" Returns:\n",
" PIL Image object\n",
" \"\"\"\n",
" response = requests.get(url)\n",
" img = Image.open(BytesIO(response.content))\n",
" return img\n",
"\n",
"\n",
"def prepare_image(img):\n",
" \"\"\"\n",
" Prepare an image for the model.\n",
" \n",
" Steps:\n",
" 1. Resize to 224x224 (model's expected size)\n",
" 2. Convert to array\n",
" 3. Add batch dimension\n",
" 4. Preprocess for MobileNetV2\n",
" \n",
" Args:\n",
" img: PIL Image\n",
" \n",
" Returns:\n",
" Preprocessed image array\n",
" \"\"\"\n",
" # Resize to 224x224 pixels\n",
" img = img.resize((224, 224))\n",
" \n",
" # Convert to numpy array\n",
" img_array = np.array(img)\n",
" \n",
" # Add batch dimension (model expects multiple images)\n",
" img_array = np.expand_dims(img_array, axis=0)\n",
" \n",
" # Preprocess for MobileNetV2\n",
" img_array = preprocess_input(img_array)\n",
" \n",
" return img_array\n",
"\n",
"\n",
"def classify_image(img):\n",
" \"\"\"\n",
" Classify an image and return top predictions.\n",
" \n",
" Args:\n",
" img: PIL Image\n",
" \n",
" Returns:\n",
" List of (class_name, confidence) tuples\n",
" \"\"\"\n",
" # Prepare the image\n",
" img_array = prepare_image(img)\n",
" \n",
" # Make prediction\n",
" predictions = model.predict(img_array, verbose=0)\n",
" \n",
" # Decode predictions to human-readable labels\n",
" # top=5 means we get the top 5 most likely classes\n",
" decoded = decode_predictions(predictions, top=5)[0]\n",
" \n",
" # Convert to simpler format\n",
" results = [(label, float(confidence)) for (_, label, confidence) in decoded]\n",
" \n",
" return results\n",
"\n",
"\n",
"print(\"✅ Helper functions ready!\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Adım 4: Örnek Görselleri Test Et\n",
"\n",
"İnternetten bazı görselleri sınıflandırmayı deneyelim!\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# Sample images to classify\n",
"# These are from Unsplash (free stock photos)\n",
"test_images = [\n",
" {\n",
" \"url\": \"https://images.unsplash.com/photo-1514888286974-6c03e2ca1dba?w=400\",\n",
" \"description\": \"A cat\"\n",
" },\n",
" {\n",
" \"url\": \"https://images.unsplash.com/photo-1552053831-71594a27632d?w=400\",\n",
" \"description\": \"A dog\"\n",
" },\n",
" {\n",
" \"url\": \"https://images.unsplash.com/photo-1511919884226-fd3cad34687c?w=400\",\n",
" \"description\": \"A car\"\n",
" },\n",
"]\n",
"\n",
"print(f\"🧪 Testing on {len(test_images)} images...\")\n",
"print(\"=\" * 70)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Her Görseli Sınıflandır\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"for i, img_data in enumerate(test_images, 1):\n",
" print(f\"\\n📸 Image {i}: {img_data['description']}\")\n",
" print(\"-\" * 70)\n",
" \n",
" try:\n",
" # Load image\n",
" img = load_image_from_url(img_data['url'])\n",
" \n",
" # Display image\n",
" display(img.resize((200, 200))) # Show smaller version\n",
" \n",
" # Classify\n",
" results = classify_image(img)\n",
" \n",
" # Show predictions\n",
" print(\"\\n🎯 Top 5 Predictions:\")\n",
" for rank, (label, confidence) in enumerate(results, 1):\n",
" # Create a visual bar\n",
" bar_length = int(confidence * 50)\n",
" bar = \"█\" * bar_length\n",
" \n",
" print(f\" {rank}. {label:20s} {confidence*100:5.2f}% {bar}\")\n",
" \n",
" except Exception as e:\n",
" print(f\"❌ Error: {e}\")\n",
"\n",
"print(\"\\n\" + \"=\" * 70)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Adım 5: Kendi Görsellerinizi Deneyin!\n",
"\n",
"Aşağıdaki URL'yi sınıflandırmak istediğiniz herhangi bir görsel URL'siyle değiştirin.\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# Try your own image!\n",
"# Replace this URL with any image URL\n",
"custom_image_url = \"https://images.unsplash.com/photo-1472491235688-bdc81a63246e?w=400\" # A flower\n",
"\n",
"print(\"🖼️ Classifying your custom image...\")\n",
"print(\"=\" * 70)\n",
"\n",
"try:\n",
" # Load and show image\n",
" img = load_image_from_url(custom_image_url)\n",
" display(img.resize((300, 300)))\n",
" \n",
" # Classify\n",
" results = classify_image(img)\n",
" \n",
" # Show results\n",
" print(\"\\n🎯 Top 5 Predictions:\")\n",
" print(\"-\" * 70)\n",
" for rank, (label, confidence) in enumerate(results, 1):\n",
" bar_length = int(confidence * 50)\n",
" bar = \"█\" * bar_length\n",
" print(f\" {rank}. {label:20s} {confidence*100:5.2f}% {bar}\")\n",
" \n",
" # Highlight top prediction\n",
" top_label, top_confidence = results[0]\n",
" print(\"\\n\" + \"=\" * 70)\n",
" print(f\"\\n🏆 Best guess: {top_label} ({top_confidence*100:.2f}% confident)\")\n",
" \n",
"except Exception as e:\n",
" print(f\"❌ Error: {e}\")\n",
" print(\" Make sure the URL points to a valid image!\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 💡 Ne Oldu?\n",
"\n",
"1. **Önceden eğitilmiş bir modeli yükledik** - MobileNetV2 milyonlarca görüntü üzerinde eğitildi\n",
"2. **Görüntüleri ön işleme tabi tuttuk** - Model için yeniden boyutlandırdık ve formatladık\n",
"3. **Model tahminler yaptı** - 1000 nesne sınıfı için olasılık değerleri verdi\n",
"4. **Sonuçları çözdük** - Sayıları insan tarafından okunabilir etiketlere dönüştürdük\n",
"\n",
"### Güven Skorlarını Anlamak\n",
"\n",
"- **%90-100**: Çok güvenilir (neredeyse kesin doğru)\n",
"- **%70-90**: Güvenilir (muhtemelen doğru)\n",
"- **%50-70**: Biraz güvenilir (doğru olabilir)\n",
"- **%50'nin altında**: Pek güvenilir değil (belirsiz)\n",
"\n",
"### Tahminler neden yanlış olabilir?\n",
"\n",
"- **Alışılmadık açı veya ışıklandırma** - Model tipik fotoğraflar üzerinde eğitildi\n",
"- **Birden fazla nesne** - Model bir ana nesne bekler\n",
"- **Nadir nesneler** - Model yalnızca 1000 kategoriyi tanır\n",
"- **Düşük kaliteli görüntü** - Bulanık veya pikselli görüntüler daha zordur\n",
"\n",
"---\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 🚀 Sonraki Adımlar\n",
"\n",
"1. **Farklı görseller deneyin:**\n",
" - Görselleri [Unsplash](https://unsplash.com) üzerinden bulun\n",
" - Sağ tıklayın → \"Resim adresini kopyala\" ile URL alın\n",
"\n",
"2. **Deney yapın:**\n",
" - Soyut sanatla ne oluyor?\n",
" - Farklıılardan nesneleri tanıyabilir mi?\n",
" - Birden fazla nesneyi nasıl algılıyor?\n",
"\n",
"3. **Daha fazlasını öğrenin:**\n",
" - [Bilgisayarlı Görüntüleme derslerini](../lessons/4-ComputerVision/README.md) keşfedin\n",
" - Kendi görüntü sınıflandırıcınızı eğitmeyi öğrenin\n",
" - CNN'lerin (Evrişimli Sinir Ağları) nasıl çalıştığını anlayın\n",
"\n",
"---\n",
"\n",
"## 🎉 Tebrikler!\n",
"\n",
"Son teknoloji bir sinir ağı kullanarak bir görüntü sınıflandırıcı oluşturdunuz!\n",
"\n",
"Bu teknik şu alanlarda kullanılıyor:\n",
"- Google Fotoğraflar (fotoğraflarınızı düzenleme)\n",
"- Otonom araçlar (nesneleri tanıma)\n",
"- Tıbbi teşhis (röntgenleri analiz etme)\n",
"- Kalite kontrol (kusurları tespit etme)\n",
"\n",
"Keşfetmeye ve öğrenmeye devam edin! 🚀\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\n---\n\n**Feragatname**: \nBu belge, AI çeviri hizmeti [Co-op Translator](https://github.com/Azure/co-op-translator) kullanılarak çevrilmiştir. Doğruluk için çaba göstersek de, otomatik çevirilerin hata veya yanlışlık içerebileceğini lütfen unutmayın. Belgenin orijinal dili, yetkili kaynak olarak kabul edilmelidir. Kritik bilgiler için profesyonel insan çevirisi önerilir. Bu çevirinin kullanımından kaynaklanan yanlış anlamalar veya yanlış yorumlamalar için sorumluluk kabul etmiyoruz.\n"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.8.0"
},
"coopTranslator": {
"original_hash": "1d472141d9df46b751542b3c29f88677",
"translation_date": "2025-10-03T11:45:37+00:00",
"source_file": "examples/03-image-classifier.ipynb",
"language_code": "tr"
}
},
"nbformat": 4,
"nbformat_minor": 4
}