microsoft/AI-For-Beginners

Public

mirrored fromhttps://github.com/microsoft/AI-For-BeginnersAvailable

CodeCommitsIssuesPull requestsActionsInsightsSecurity
main

Branches

Tags

  • No tags available.
0Branches0Tags
Go to file
Add file
Code

Clone

HTTPS

Download ZIP

translations/cs/examples/03-image-classifier.ipynb

395lines · modecode

1{
2 "cells": [
3 {
4 "cell_type": "markdown",
5 "metadata": {},
6 "source": [
7 "# Jednoduchý klasifikátor obrázků\n",
8 "\n",
9 "Tento notebook vám ukáže, jak klasifikovat obrázky pomocí předem natrénované neuronové sítě.\n",
10 "\n",
11 "**Co se naučíte:**\n",
12 "- Jak načíst a použít předem natrénovaný model\n",
13 "- Předzpracování obrázků\n",
14 "- Provádění predikcí na obrázcích\n",
15 "- Porozumění skóre důvěryhodnosti\n",
16 "\n",
17 "**Použití:** Identifikace objektů na obrázcích (například \"kočka\", \"pes\", \"auto\" atd.)\n",
18 "\n",
19 "---\n"
20 ]
21 },
22 {
23 "cell_type": "markdown",
24 "metadata": {},
25 "source": [
26 "## Krok 1: Importujte potřebné knihovny\n",
27 "\n",
28 "Importujeme nástroje, které budeme potřebovat. Nemějte obavy, pokud zatím všemu nerozumíte!\n"
29 ]
30 },
31 {
32 "cell_type": "code",
33 "execution_count": null,
34 "metadata": {},
35 "outputs": [],
36 "source": [
37 "# Core libraries\n",
38 "import numpy as np\n",
39 "from PIL import Image\n",
40 "import requests\n",
41 "from io import BytesIO\n",
42 "\n",
43 "# TensorFlow for deep learning\n",
44 "try:\n",
45 " import tensorflow as tf\n",
46 " from tensorflow.keras.applications import MobileNetV2\n",
47 " from tensorflow.keras.applications.mobilenet_v2 import preprocess_input, decode_predictions\n",
48 " print(\"✅ TensorFlow loaded successfully!\")\n",
49 " print(f\" Version: {tf.__version__}\")\n",
50 "except ImportError:\n",
51 " print(\"❌ Please install TensorFlow: pip install tensorflow\")"
52 ]
53 },
54 {
55 "cell_type": "markdown",
56 "metadata": {},
57 "source": [
58 "## Krok 2: Načtení předem natrénovaného modelu\n",
59 "\n",
60 "Použijeme **MobileNetV2**, neuronovou síť, která byla již natrénována na milionech obrázků.\n",
61 "\n",
62 "Tomu se říká **Transfer Learning** - využití modelu, který natrénoval někdo jiný!\n"
63 ]
64 },
65 {
66 "cell_type": "code",
67 "execution_count": null,
68 "metadata": {},
69 "outputs": [],
70 "source": [
71 "print(\"📦 Loading pre-trained MobileNetV2 model...\")\n",
72 "print(\" This may take a minute on first run (downloading weights)...\")\n",
73 "\n",
74 "# Load the model\n",
75 "# include_top=True means we use the classification layer\n",
76 "# weights='imagenet' means it was trained on ImageNet dataset\n",
77 "model = MobileNetV2(weights='imagenet', include_top=True)\n",
78 "\n",
79 "print(\"✅ Model loaded!\")\n",
80 "print(f\" The model can recognize 1000 different object categories\")"
81 ]
82 },
83 {
84 "cell_type": "markdown",
85 "metadata": {},
86 "source": [
87 "## Krok 3: Pomocné funkce\n",
88 "\n",
89 "Vytvořme funkce pro načítání a přípravu obrázků pro náš model.\n"
90 ]
91 },
92 {
93 "cell_type": "code",
94 "execution_count": null,
95 "metadata": {},
96 "outputs": [],
97 "source": [
98 "def load_image_from_url(url):\n",
99 " \"\"\"\n",
100 " Load an image from a URL.\n",
101 " \n",
102 " Args:\n",
103 " url: Web address of the image\n",
104 " \n",
105 " Returns:\n",
106 " PIL Image object\n",
107 " \"\"\"\n",
108 " response = requests.get(url)\n",
109 " img = Image.open(BytesIO(response.content))\n",
110 " return img\n",
111 "\n",
112 "\n",
113 "def prepare_image(img):\n",
114 " \"\"\"\n",
115 " Prepare an image for the model.\n",
116 " \n",
117 " Steps:\n",
118 " 1. Resize to 224x224 (model's expected size)\n",
119 " 2. Convert to array\n",
120 " 3. Add batch dimension\n",
121 " 4. Preprocess for MobileNetV2\n",
122 " \n",
123 " Args:\n",
124 " img: PIL Image\n",
125 " \n",
126 " Returns:\n",
127 " Preprocessed image array\n",
128 " \"\"\"\n",
129 " # Resize to 224x224 pixels\n",
130 " img = img.resize((224, 224))\n",
131 " \n",
132 " # Convert to numpy array\n",
133 " img_array = np.array(img)\n",
134 " \n",
135 " # Add batch dimension (model expects multiple images)\n",
136 " img_array = np.expand_dims(img_array, axis=0)\n",
137 " \n",
138 " # Preprocess for MobileNetV2\n",
139 " img_array = preprocess_input(img_array)\n",
140 " \n",
141 " return img_array\n",
142 "\n",
143 "\n",
144 "def classify_image(img):\n",
145 " \"\"\"\n",
146 " Classify an image and return top predictions.\n",
147 " \n",
148 " Args:\n",
149 " img: PIL Image\n",
150 " \n",
151 " Returns:\n",
152 " List of (class_name, confidence) tuples\n",
153 " \"\"\"\n",
154 " # Prepare the image\n",
155 " img_array = prepare_image(img)\n",
156 " \n",
157 " # Make prediction\n",
158 " predictions = model.predict(img_array, verbose=0)\n",
159 " \n",
160 " # Decode predictions to human-readable labels\n",
161 " # top=5 means we get the top 5 most likely classes\n",
162 " decoded = decode_predictions(predictions, top=5)[0]\n",
163 " \n",
164 " # Convert to simpler format\n",
165 " results = [(label, float(confidence)) for (_, label, confidence) in decoded]\n",
166 " \n",
167 " return results\n",
168 "\n",
169 "\n",
170 "print(\"✅ Helper functions ready!\")"
171 ]
172 },
173 {
174 "cell_type": "markdown",
175 "metadata": {},
176 "source": [
177 "## Krok 4: Testování na vzorových obrázcích\n",
178 "\n",
179 "Zkusme klasifikovat některé obrázky z internetu!\n"
180 ]
181 },
182 {
183 "cell_type": "code",
184 "execution_count": null,
185 "metadata": {},
186 "outputs": [],
187 "source": [
188 "# Sample images to classify\n",
189 "# These are from Unsplash (free stock photos)\n",
190 "test_images = [\n",
191 " {\n",
192 " \"url\": \"https://images.unsplash.com/photo-1514888286974-6c03e2ca1dba?w=400\",\n",
193 " \"description\": \"A cat\"\n",
194 " },\n",
195 " {\n",
196 " \"url\": \"https://images.unsplash.com/photo-1552053831-71594a27632d?w=400\",\n",
197 " \"description\": \"A dog\"\n",
198 " },\n",
199 " {\n",
200 " \"url\": \"https://images.unsplash.com/photo-1511919884226-fd3cad34687c?w=400\",\n",
201 " \"description\": \"A car\"\n",
202 " },\n",
203 "]\n",
204 "\n",
205 "print(f\"🧪 Testing on {len(test_images)} images...\")\n",
206 "print(\"=\" * 70)"
207 ]
208 },
209 {
210 "cell_type": "markdown",
211 "metadata": {},
212 "source": [
213 "### Klasifikujte každý obrázek\n"
214 ]
215 },
216 {
217 "cell_type": "code",
218 "execution_count": null,
219 "metadata": {},
220 "outputs": [],
221 "source": [
222 "for i, img_data in enumerate(test_images, 1):\n",
223 " print(f\"\\n📸 Image {i}: {img_data['description']}\")\n",
224 " print(\"-\" * 70)\n",
225 " \n",
226 " try:\n",
227 " # Load image\n",
228 " img = load_image_from_url(img_data['url'])\n",
229 " \n",
230 " # Display image\n",
231 " display(img.resize((200, 200))) # Show smaller version\n",
232 " \n",
233 " # Classify\n",
234 " results = classify_image(img)\n",
235 " \n",
236 " # Show predictions\n",
237 " print(\"\\n🎯 Top 5 Predictions:\")\n",
238 " for rank, (label, confidence) in enumerate(results, 1):\n",
239 " # Create a visual bar\n",
240 " bar_length = int(confidence * 50)\n",
241 " bar = \"█\" * bar_length\n",
242 " \n",
243 " print(f\" {rank}. {label:20s} {confidence*100:5.2f}% {bar}\")\n",
244 " \n",
245 " except Exception as e:\n",
246 " print(f\"❌ Error: {e}\")\n",
247 "\n",
248 "print(\"\\n\" + \"=\" * 70)"
249 ]
250 },
251 {
252 "cell_type": "markdown",
253 "metadata": {},
254 "source": [
255 "## Krok 5: Vyzkoušejte své vlastní obrázky!\n",
256 "\n",
257 "Nahraďte níže uvedenou URL libovolnou URL obrázku, který chcete klasifikovat.\n"
258 ]
259 },
260 {
261 "cell_type": "code",
262 "execution_count": null,
263 "metadata": {},
264 "outputs": [],
265 "source": [
266 "# Try your own image!\n",
267 "# Replace this URL with any image URL\n",
268 "custom_image_url = \"https://images.unsplash.com/photo-1472491235688-bdc81a63246e?w=400\" # A flower\n",
269 "\n",
270 "print(\"🖼️ Classifying your custom image...\")\n",
271 "print(\"=\" * 70)\n",
272 "\n",
273 "try:\n",
274 " # Load and show image\n",
275 " img = load_image_from_url(custom_image_url)\n",
276 " display(img.resize((300, 300)))\n",
277 " \n",
278 " # Classify\n",
279 " results = classify_image(img)\n",
280 " \n",
281 " # Show results\n",
282 " print(\"\\n🎯 Top 5 Predictions:\")\n",
283 " print(\"-\" * 70)\n",
284 " for rank, (label, confidence) in enumerate(results, 1):\n",
285 " bar_length = int(confidence * 50)\n",
286 " bar = \"█\" * bar_length\n",
287 " print(f\" {rank}. {label:20s} {confidence*100:5.2f}% {bar}\")\n",
288 " \n",
289 " # Highlight top prediction\n",
290 " top_label, top_confidence = results[0]\n",
291 " print(\"\\n\" + \"=\" * 70)\n",
292 " print(f\"\\n🏆 Best guess: {top_label} ({top_confidence*100:.2f}% confident)\")\n",
293 " \n",
294 "except Exception as e:\n",
295 " print(f\"❌ Error: {e}\")\n",
296 " print(\" Make sure the URL points to a valid image!\")"
297 ]
298 },
299 {
300 "cell_type": "markdown",
301 "metadata": {},
302 "source": [
303 "## 💡 Co se právě stalo?\n",
304 "\n",
305 "1. **Načetli jsme předtrénovaný model** - MobileNetV2 byl natrénován na milionech obrázků \n",
306 "2. **Předzpracovali jsme obrázky** - Změnili jsme jejich velikost a formát pro model \n",
307 "3. **Model provedl predikce** - Vygeneroval pravděpodobnosti pro 1000 kategorií objektů \n",
308 "4. **Dekódovali jsme výsledky** - Převedli čísla na čitelné popisky \n",
309 "\n",
310 "### Porozumění skóre jistoty\n",
311 "\n",
312 "- **90-100 %**: Velmi jisté (téměř určitě správné) \n",
313 "- **70-90 %**: Jisté (pravděpodobně správné) \n",
314 "- **50-70 %**: Částečně jisté (může být správné) \n",
315 "- **Pod 50 %**: Málo jisté (nejisté) \n",
316 "\n",
317 "### Proč mohou být predikce chybné?\n",
318 "\n",
319 "- **Neobvyklý úhel nebo osvětlení** - Model byl trénován na běžných fotografiích \n",
320 "- **Více objektů** - Model očekává jeden hlavní objekt \n",
321 "- **Vzácné objekty** - Model zná pouze 1000 kategorií \n",
322 "- **Nízká kvalita obrázku** - Rozmazané nebo pixelované obrázky jsou obtížnější \n"
323 ]
324 },
325 {
326 "cell_type": "markdown",
327 "metadata": {},
328 "source": [
329 "## 🚀 Další kroky\n",
330 "\n",
331 "1. **Vyzkoušejte různé obrázky:**\n",
332 " - Najděte obrázky na [Unsplash](https://unsplash.com)\n",
333 " - Klikněte pravým tlačítkem → „Kopírovat adresu obrázku“ pro získání URL\n",
334 "\n",
335 "2. **Experimentujte:**\n",
336 " - Co se stane s abstraktním uměním?\n",
337 " - Dokáže rozpoznat objekty z různých úhlů?\n",
338 " - Jak si poradí s více objekty?\n",
339 "\n",
340 "3. **Zjistěte více:**\n",
341 " - Prozkoumejte [lekce o počítačovém vidění](../lessons/4-ComputerVision/README.md)\n",
342 " - Naučte se trénovat vlastní klasifikátor obrázků\n",
343 " - Pochopte, jak fungují CNNs (Konvoluční neuronové sítě)\n",
344 "\n",
345 "---\n",
346 "\n",
347 "## 🎉 Gratulujeme!\n",
348 "\n",
349 "Právě jste vytvořili klasifikátor obrázků pomocí špičkové neuronové sítě!\n",
350 "\n",
351 "Tato stejná technika pohání:\n",
352 "- Google Photos (organizace vašich fotografií)\n",
353 "- Autonomní auta (rozpoznávání objektů)\n",
354 "- Lékařskou diagnostiku (analýza rentgenových snímků)\n",
355 "- Kontrolu kvality (detekce vad)\n",
356 "\n",
357 "Pokračujte v objevování a učení! 🚀\n"
358 ]
359 },
360 {
361 "cell_type": "markdown",
362 "metadata": {},
363 "source": [
364 "\n---\n\n**Prohlášení**: \nTento dokument byl přeložen pomocí služby AI pro překlady [Co-op Translator](https://github.com/Azure/co-op-translator). I když se snažíme o přesnost, mějte prosím na paměti, že automatizované překlady mohou obsahovat chyby nebo nepřesnosti. Původní dokument v jeho původním jazyce by měl být považován za autoritativní zdroj. Pro důležité informace doporučujeme profesionální lidský překlad. Neodpovídáme za žádná nedorozumění nebo nesprávné interpretace vyplývající z použití tohoto překladu.\n"
365 ]
366 }
367 ],
368 "metadata": {
369 "kernelspec": {
370 "display_name": "Python 3",
371 "language": "python",
372 "name": "python3"
373 },
374 "language_info": {
375 "codemirror_mode": {
376 "name": "ipython",
377 "version": 3
378 },
379 "file_extension": ".py",
380 "mimetype": "text/x-python",
381 "name": "python",
382 "nbconvert_exporter": "python",
383 "pygments_lexer": "ipython3",
384 "version": "3.8.0"
385 },
386 "coopTranslator": {
387 "original_hash": "1d472141d9df46b751542b3c29f88677",
388 "translation_date": "2025-10-03T11:52:07+00:00",
389 "source_file": "examples/03-image-classifier.ipynb",
390 "language_code": "cs"
391 }
392 },
393 "nbformat": 4,
394 "nbformat_minor": 4
395}