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

397 lines
13 KiB
Plaintext

{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Simpleng Tagapag-uri ng Imahe\n",
"\n",
"Ipinapakita ng notebook na ito kung paano mag-uri ng mga imahe gamit ang isang pre-trained neural network.\n",
"\n",
"**Ano ang matututunan mo:**\n",
"- Paano mag-load at gumamit ng pre-trained na modelo\n",
"- Pagproseso ng imahe\n",
"- Paggawa ng prediksyon sa mga imahe\n",
"- Pag-unawa sa mga confidence score\n",
"\n",
"**Gamit:** Tukuyin ang mga bagay sa mga imahe (tulad ng \"pusa\", \"aso\", \"kotse\", atbp.)\n",
"\n",
"---\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Hakbang 1: I-import ang Mga Kinakailangang Library\n",
"\n",
"I-import natin ang mga tool na kailangan natin. Huwag mag-alala kung hindi mo pa naiintindihan ang lahat ng ito!\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": [
"## Hakbang 2: I-load ang Pre-trained Model\n",
"\n",
"Gagamitin natin ang **MobileNetV2**, isang neural network na na-train na sa milyon-milyong mga imahe.\n",
"\n",
"Ito ay tinatawag na **Transfer Learning** - paggamit ng model na na-train na ng iba!\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": [
"## Hakbang 3: Mga Helper Function\n",
"\n",
"Gumawa tayo ng mga function para mag-load at maghanda ng mga imahe para sa ating modelo.\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": [
"## Hakbang 4: Subukan sa Mga Sample na Larawan\n",
"\n",
"Subukan nating i-classify ang ilang mga larawan mula sa internet!\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": [
"### Iklasipika ang Bawat Imahe\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": [
"## Hakbang 5: Subukan ang Sarili Mong Mga Imahe!\n",
"\n",
"Palitan ang URL sa ibaba ng anumang URL ng imahe na nais mong i-klasipika.\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": [
"## 💡 Ano ang Nangyari?\n",
"\n",
"1. **Nag-load tayo ng pre-trained na modelo** - Ang MobileNetV2 ay sinanay gamit ang milyon-milyong larawan\n",
"2. **Pinroseso natin ang mga larawan** - Iniresize at inayos para sa modelo\n",
"3. **Gumawa ng prediksyon ang modelo** - Nagbigay ito ng mga probabilidad para sa 1000 klase ng mga bagay\n",
"4. **Ikinonvert natin ang resulta** - Ginawang mas madaling maunawaan ang mga numero sa pamamagitan ng mga label\n",
"\n",
"### Pag-unawa sa Confidence Scores\n",
"\n",
"- **90-100%**: Napakataas na kumpiyansa (halos tiyak na tama)\n",
"- **70-90%**: Mataas na kumpiyansa (malamang tama)\n",
"- **50-70%**: Katamtamang kumpiyansa (maaaring tama)\n",
"- **Mas mababa sa 50%**: Mababa ang kumpiyansa (hindi tiyak)\n",
"\n",
"### Bakit maaaring mali ang mga prediksyon?\n",
"\n",
"- **Hindi karaniwang anggulo o ilaw** - Ang modelo ay sinanay gamit ang mga tipikal na larawan\n",
"- **Maraming bagay sa larawan** - Inaasahan ng modelo na may isang pangunahing bagay\n",
"- **Bihirang bagay** - Ang modelo ay may kaalaman lamang sa 1000 kategorya\n",
"- **Mababang kalidad ng larawan** - Mas mahirap basahin ang malabo o pixelated na mga larawan\n",
"\n",
"---\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 🚀 Mga Susunod na Hakbang\n",
"\n",
"1. **Subukan ang iba't ibang larawan:**\n",
" - Maghanap ng mga larawan sa [Unsplash](https://unsplash.com)\n",
" - I-right-click → \"Copy image address\" para makuha ang URL\n",
"\n",
"2. **Mag-eksperimento:**\n",
" - Ano ang mangyayari sa abstract art?\n",
" - Kaya bang kilalanin ang mga bagay mula sa iba't ibang anggulo?\n",
" - Paano nito hinahandle ang maraming bagay sa isang larawan?\n",
"\n",
"3. **Matuto pa:**\n",
" - Tuklasin ang [mga aralin sa Computer Vision](../lessons/4-ComputerVision/README.md)\n",
" - Matutong mag-train ng sarili mong image classifier\n",
" - Unawain kung paano gumagana ang CNNs (Convolutional Neural Networks)\n",
"\n",
"---\n",
"\n",
"## 🎉 Binabati Kita!\n",
"\n",
"Kakagawa mo lang ng isang image classifier gamit ang makabagong neural network!\n",
"\n",
"Ang parehong teknik na ito ang ginagamit sa:\n",
"- Google Photos (pag-aayos ng iyong mga larawan)\n",
"- Mga self-driving na kotse (pagkilala sa mga bagay)\n",
"- Medikal na pagsusuri (pag-analyze ng X-rays)\n",
"- Quality control (pag-detect ng mga depekto)\n",
"\n",
"Patuloy na mag-eksplora at matuto! 🚀\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\n---\n\n**Paunawa**: \nAng dokumentong ito ay isinalin gamit ang AI translation service na [Co-op Translator](https://github.com/Azure/co-op-translator). Bagama't sinisikap naming maging tumpak, pakitandaan na ang mga awtomatikong pagsasalin ay maaaring maglaman ng mga pagkakamali o hindi pagkakatugma. Ang orihinal na dokumento sa kanyang katutubong wika ang dapat ituring na opisyal na sanggunian. Para sa mahalagang impormasyon, inirerekomenda ang propesyonal na pagsasalin ng tao. Hindi kami mananagot sa anumang hindi pagkakaunawaan o maling interpretasyon na dulot ng paggamit ng pagsasaling ito.\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:50:52+00:00",
"source_file": "examples/03-image-classifier.ipynb",
"language_code": "tl"
}
},
"nbformat": 4,
"nbformat_minor": 4
}