Cyfroteka.pl

klikaj i czytaj online

Cyfro
Czytomierz
00341 008986 7432621 na godz. na dobę w sumie
Python. 14 twórczych projektów dla dociekliwych programistów - ebook/pdf
Python. 14 twórczych projektów dla dociekliwych programistów - ebook/pdf
Autor: Liczba stron: 368
Wydawca: Helion Język publikacji: polski
ISBN: 978-83-283-2598-2 Data wydania:
Lektor:
Kategoria: ebooki >> komputery i informatyka >> programowanie >> python - programowanie
Porównaj ceny (książka, ebook (-20%), audiobook).
Python jest ciekawym językiem programowania o dużych możliwościach. Dzięki niemu w prosty sposób można rozwiązać złożone problemy tego świata. Umożliwia przy tym pisanie czytelnego i łatwego w konserwacji kodu. Opanowanie składni i podstawowych koncepcji programistycznych w Pythonie nie jest trudne, jednak potem przychodzi moment, aby wypróbować go w prawdziwym programowaniu.

Niniejsza książka nauczy Cię wykorzystywać ten język do rozwiązywania nietrywialnych problemów, z którymi muszą się mierzyć programiści. Książka składa się z czternastu zabawnych i inspirujących projektów, dzięki którym odkryjesz niuanse programowania i nauczysz się pracy z kilkoma bibliotekami Pythona. Co ważniejsze, nauczysz się analizy problemu, dowiesz się, jak opracować algorytm do jego rozwiązania, a następnie jak zaimplementować rozwiązanie. Wykorzystasz Pythona do tworzenia muzyki, symulacji rzeczywistych zjawisk, a także zmusisz do współpracy z płytkami Arduino i Raspberry Pi — a wszystko w ramach świetnej, wciągającej zabawy!

Sprawdź, jak wykorzystać Pythona do:

Python? Spróbuj się z nim pobawić!


Mahesh Venkitachalam jest inżynierem oprogramowania z dwudziestoletnim doświadczeniem w programowaniu. Od lat rozwija aplikacje służące naukowcom do wizualizacji 3D. Pracuje również nad podzespołami elektronicznymi, które udostępnia amatorom elektroniki na zasadach open source. Jest pasjonatem technologii, prowadzi popularny blog o elektronice i programowaniu — electronut.in. Mieszka w Indiach, w Bangalore.
Znajdź podobne książki

Darmowy fragment publikacji:

Tytuł oryginału: Python Playground: Geeky Projects for the Curious Programmer Tłumaczenie: Lech Lachowski ISBN: 978-83-283-2597-5 Copyright © 2016 by Mahesh Venkitachalam Title of English-language original: Python Playground, ISBN 978-1-59327-604-1, published by No Starch Press. Polish-language edition copyright © 2016 by Helion SA All rights reserved. All rights reserved. No part of this book may be reproduced or transmitted in any form or by any means, electronic or mechanical, including photocopying, recording or by any information storage retrieval system, without permission from the Publisher. Wszelkie prawa zastrzeżone. Nieautoryzowane rozpowszechnianie całości lub fragmentu niniejszej publikacji w jakiejkolwiek postaci jest zabronione. Wykonywanie kopii metodą kserograficzną, fotograficzną, a także kopiowanie książki na nośniku filmowym, magnetycznym lub innym powoduje naruszenie praw autorskich niniejszej publikacji. Wszystkie znaki występujące w tekście są zastrzeżonymi znakami firmowymi bądź towarowymi ich właścicieli. Autor oraz Wydawnictwo HELION dołożyli wszelkich starań, by zawarte w tej książce informacje były kompletne i rzetelne. Nie biorą jednak żadnej odpowiedzialności ani za ich wykorzystanie, ani za związane z tym ewentualne naruszenie praw patentowych lub autorskich. Autor oraz Wydawnictwo HELION nie ponoszą również żadnej odpowiedzialności za ewentualne szkody wynikłe z wykorzystania informacji zawartych w książce. Wydawnictwo HELION ul. Kościuszki 1c, 44-100 GLIWICE tel. 32 231 22 19, 32 230 98 63 e-mail: helion@helion.pl WWW: http://helion.pl (księgarnia internetowa, katalog książek) Drogi Czytelniku! Jeżeli chcesz ocenić tę książkę, zajrzyj pod adres http://helion.pl/user/opinie/pythtp Możesz tam wpisać swoje uwagi, spostrzeżenia, recenzję. Printed in Poland. • Kup książkę • Poleć książkę • Oceń książkę • Księgarnia internetowa • Lubię to! » Nasza społeczność Spis tre(cid:258)ci PODZI(cid:125)KOWANIA ................................................................................... 15 WPROWADZENIE ..................................................................................... 17 Dla kogo jest ta ksi(cid:200)(cid:285)ka? .........................................................................................................17 Jaka jest zawarto(cid:258)(cid:202) ksi(cid:200)(cid:285)ki? ....................................................................................................18 Cz(cid:218)(cid:258)(cid:202) I. Rozgrzewka ..........................................................................................................18 Cz(cid:218)(cid:258)(cid:202) II. Symulacja (cid:285)ycia ....................................................................................................18 Cz(cid:218)(cid:258)(cid:202) III. Zabawy z obrazami ............................................................................................18 Cz(cid:218)(cid:258)(cid:202) IV. Grafika 3D ..........................................................................................................18 Cz(cid:218)(cid:258)(cid:202) V. Projekty z wykorzystaniem sprz(cid:218)tu ....................................................................19 Dlaczego Python? ...................................................................................................................19 Wersje Pythona ..................................................................................................................20 Kod zamieszczony w ksi(cid:200)(cid:285)ce .............................................................................................20 Cz(cid:218)(cid:258)(cid:202) I. Rozgrzewka 1 PARSOWANIE LIST ODTWARZANIA PROGRAMU ITUNES ...................... 25 Anatomia pliku listy odtwarzania iTunes ................................................................................26 Wymagania .............................................................................................................................27 Kod .........................................................................................................................................27 Znajdowanie duplikatów ....................................................................................................28 Wyodr(cid:218)bnianie duplikatów ................................................................................................29 Wyszukiwanie utworów wspólnych dla wielu list odtwarzania .........................................30 Gromadzenie danych statystycznych .................................................................................31 Prezentowanie danych .......................................................................................................31 Opcje wiersza polece(cid:241) .......................................................................................................32 Kompletny kod .......................................................................................................................34 Uruchamianie programu ........................................................................................................37 Podsumowanie .......................................................................................................................38 Eksperymenty! .......................................................................................................................38 Poleć książkęKup książkę 2 SPIROGRAFY ............................................................................................ 39 Równania parametryczne ...................................................................................................... 40 Równania spirografu .......................................................................................................... 41 (cid:191)ó(cid:239)wia grafika .................................................................................................................... 44 Wymagania ............................................................................................................................ 45 Kod ........................................................................................................................................ 45 Konstruktor Spiro .............................................................................................................. 45 Funkcje konfiguracyjne ...................................................................................................... 46 Metoda restart() ................................................................................................................ 47 Metoda draw() ................................................................................................................... 47 Tworzenie animacji ........................................................................................................... 48 Klasa SpiroAnimator .......................................................................................................... 48 Metoda genRandomParams() ............................................................................................ 49 Ponowne uruchamianie programu .................................................................................... 50 Metoda update() ................................................................................................................ 50 Wy(cid:258)wietlanie lub ukrywanie kursora ................................................................................. 51 Zapisywanie krzywych ...................................................................................................... 51 Parsowanie argumentów wiersza polece(cid:241) i inicjowanie ................................................... 52 Kompletny kod ...................................................................................................................... 54 Uruchomienie animacji spirografu ......................................................................................... 58 Podsumowanie ...................................................................................................................... 60 Eksperymenty! ....................................................................................................................... 60 Cz(cid:218)(cid:258)(cid:202) II. Symulacja (cid:285)ycia 3 GRA W (cid:191)YCIE ........................................................................................... 63 Jak to dzia(cid:239)a? .......................................................................................................................... 64 Wymagania ............................................................................................................................ 66 Kod ........................................................................................................................................ 66 Reprezentacja planszy ....................................................................................................... 66 Warunki pocz(cid:200)tkowe ........................................................................................................ 67 Warunki brzegowe ............................................................................................................ 68 Implementacja regu(cid:239) .......................................................................................................... 69 Wysy(cid:239)anie do programu argumentów wiersza polece(cid:241) .................................................... 70 Inicjowanie symulacji ......................................................................................................... 70 Kompletny kod ...................................................................................................................... 71 Uruchamianie symulacji „Gry w (cid:285)ycie” .................................................................................. 73 Podsumowanie ...................................................................................................................... 75 Eksperymenty! ....................................................................................................................... 75 6 S p i s t r e (cid:258) c i Poleć książkęKup książkę 4 GENEROWANIE TONÓW HARMONICZNYCH ZA POMOC(cid:107) ALGORYTMU KARPLUSA-STRONGA ................................. 77 Jak to dzia(cid:239)a? ...........................................................................................................................79 Symulacja ............................................................................................................................79 Tworzenie plików WAV .....................................................................................................81 Pentatonika molowa ..........................................................................................................82 Wymagania .............................................................................................................................83 Kod .........................................................................................................................................83 Implementacja bufora pier(cid:258)cieniowego za pomoc(cid:200) klasy deque .......................................83 Implementacja algorytmu Karplusa-Stronga .......................................................................84 Zapisywanie pliku WAV .....................................................................................................85 Odtwarzanie plików WAV za pomoc(cid:200) modu(cid:239)u pygame ....................................................85 Metoda main() ....................................................................................................................86 Kompletny kod .......................................................................................................................88 Uruchamianie symulacji szarpanej struny ...............................................................................91 Podsumowanie .......................................................................................................................92 Eksperymenty! .......................................................................................................................92 5 BOIDY: SYMULACJA STADA .................................................................... 93 Jak to dzia(cid:239)a? ...........................................................................................................................94 Wymagania .............................................................................................................................94 Kod .........................................................................................................................................95 Obliczanie pozycji i pr(cid:218)dko(cid:258)ci boidów ...............................................................................95 Ustawianie warunków brzegowych ...................................................................................96 Rysowanie boida ................................................................................................................97 Zastosowanie regu(cid:239) algorytmu stada ..................................................................................99 Dodawanie boida .............................................................................................................101 Rozpraszanie boidów .......................................................................................................102 Argumenty wiersza polece(cid:241) .............................................................................................102 Klasa Boids .......................................................................................................................103 Kompletny kod .....................................................................................................................104 Uruchamianie symulacji algorytmu stada .............................................................................107 Podsumowanie .....................................................................................................................108 Eksperymenty! .....................................................................................................................108 Cz(cid:218)(cid:258)(cid:202) III. Zabawy z obrazami 6 SZTUKA ASCII ....................................................................................... 111 Jak to dzia(cid:239)a? .........................................................................................................................112 Wymagania ...........................................................................................................................114 S p i s t r e (cid:258) c i 7 Poleć książkęKup książkę Kod ...................................................................................................................................... 114 Definiowanie poziomów skali szaro(cid:258)ci oraz siatki ........................................................... 114 Obliczanie (cid:258)redniej jasno(cid:258)ci ............................................................................................. 115 Generowanie zawarto(cid:258)ci ASCII na podstawie obrazu .................................................... 116 Opcje wiersza polece(cid:241) .................................................................................................... 117 Zapisywanie (cid:239)a(cid:241)cuchów znaków obrazu ASCII w pliku tekstowym ............................... 117 Kompletny kod .................................................................................................................... 118 Uruchamianie generatora sztuki ASCII ................................................................................ 120 Podsumowanie .................................................................................................................... 121 Eksperymenty! ..................................................................................................................... 121 7 FOTOMOZAIKI ....................................................................................... 123 Jak to dzia(cid:239)a? ........................................................................................................................ 124 Dzielenie obrazu docelowego ......................................................................................... 125 U(cid:258)rednianie warto(cid:258)ci kolorów ........................................................................................ 125 Dopasowywanie obrazów ............................................................................................... 126 Wymagania .......................................................................................................................... 126 Kod ...................................................................................................................................... 126 Wczytywanie obrazów kafelków .................................................................................... 127 Obliczanie (cid:258)redniej warto(cid:258)ci koloru obrazów wej(cid:258)ciowych ........................................... 128 Dzielenie obrazu docelowego na siatk(cid:218) .......................................................................... 128 Wyszukiwanie najlepszego dopasowania dla kafelka ....................................................... 129 Tworzenie siatki obrazu .................................................................................................. 130 Tworzenie fotomozaiki ................................................................................................... 131 Dodawanie opcji wiersza polece(cid:241) ................................................................................... 132 Kontrolowanie rozmiaru fotomozaiki ............................................................................. 133 Kompletny kod .................................................................................................................... 133 Uruchamianie generatora fotomozaiki ................................................................................ 138 Podsumowanie .................................................................................................................... 138 Eksperymenty! ..................................................................................................................... 139 8 AUTOSTEREOGRAMY ............................................................................ 141 Jak to dzia(cid:239)a? ........................................................................................................................ 142 Postrzeganie g(cid:239)(cid:218)bi w autostereogramie .......................................................................... 142 Mapy g(cid:239)(cid:218)bi ....................................................................................................................... 143 Wymagania .......................................................................................................................... 145 Kod ...................................................................................................................................... 145 Powtarzanie danego kafelka ............................................................................................ 145 Tworzenie kafelka z losowych kó(cid:239)eczek ......................................................................... 146 Tworzenie autostereogramu ........................................................................................... 148 Opcje wiersza polece(cid:241) .................................................................................................... 149 Kompletny kod .................................................................................................................... 150 8 S p i s t r e (cid:258) c i Poleć książkęKup książkę Uruchamianie generatora autostereogramu ........................................................................152 Podsumowanie .....................................................................................................................153 Eksperymenty! .....................................................................................................................154 Cz(cid:218)(cid:258)(cid:202) IV. Grafika 3D 9 ZROZUMIE(cid:109) OPENGL ............................................................................ 157 Tradycyjny OpenGL .............................................................................................................159 Nowoczesny OpenGL: potok grafiki 3D .............................................................................160 Prymitywy geometryczne ................................................................................................161 Transformacje 3D ............................................................................................................161 Shadery ............................................................................................................................163 Bufory wierzcho(cid:239)ków .......................................................................................................165 Mapowanie tekstury .........................................................................................................166 Wy(cid:258)wietlanie OpenGL .....................................................................................................167 Wymagania ...........................................................................................................................167 Kod .......................................................................................................................................167 Tworzenie okna OpenGL ................................................................................................167 Ustawianie wywo(cid:239)a(cid:241) zwrotnych ......................................................................................168 Klasa Scene .......................................................................................................................171 Kompletny kod .....................................................................................................................176 Uruchamianie aplikacji OpenGL ...........................................................................................181 Podsumowanie .....................................................................................................................182 Eksperymenty! .....................................................................................................................182 10 SYSTEMY CZ(cid:107)STECZEK ......................................................................... 185 Jak to dzia(cid:239)a? .........................................................................................................................187 Modelowanie ruchu cz(cid:200)steczki ........................................................................................188 Ustawianie maksymalnej rozpi(cid:218)to(cid:258)ci ...............................................................................188 Renderowanie cz(cid:200)stek .....................................................................................................189 U(cid:285)ycie blendowania OpenGL do tworzenia bardziej realistycznych iskier .....................190 Korzystanie z billboardingu ..............................................................................................191 Animowanie iskier ............................................................................................................192 Wymagania ...........................................................................................................................192 Kod dla systemu cz(cid:200)steczek .................................................................................................193 Definiowanie geometrii cz(cid:200)steczek .................................................................................193 Definiowanie tablicy opó(cid:283)nie(cid:241) czasowych dla cz(cid:200)steczek ...............................................194 Ustawianie pocz(cid:200)tkowych pr(cid:218)dko(cid:258)ci cz(cid:200)steczek .............................................................194 Tworzenie cieniowania wierzcho(cid:239)kowego ......................................................................195 Tworzenie cieniowania pikseli .........................................................................................197 Renderowanie ..................................................................................................................198 Klasa Camera ...................................................................................................................200 S p i s t r e (cid:258) c i 9 Poleć książkęKup książkę Kompletny kod systemu cz(cid:200)steczek .................................................................................... 201 Kod pude(cid:239)ka ........................................................................................................................ 207 Kod dla programu g(cid:239)ównego ............................................................................................... 209 Aktualizacja cz(cid:200)steczek w ka(cid:285)dym kroku czasowym ...................................................... 210 Procedura obs(cid:239)ugi klawiatury .......................................................................................... 211 Zarz(cid:200)dzanie g(cid:239)ówn(cid:200) p(cid:218)tl(cid:200) programu ............................................................................... 211 Kompletny g(cid:239)ówny kod programu ....................................................................................... 212 Uruchamianie programu ...................................................................................................... 215 Podsumowanie .................................................................................................................... 215 Eksperymenty! ..................................................................................................................... 216 11 RENDERING OBJ(cid:125)TO(cid:165)CIOWY ................................................................. 217 Jak to dzia(cid:239)a? ........................................................................................................................ 218 Format danych ................................................................................................................. 219 Generowanie promieni .................................................................................................... 219 Wy(cid:258)wietlanie okna OpenGL ............................................................................................ 222 Wymagania .......................................................................................................................... 222 Przegl(cid:200)d kodu projektu ....................................................................................................... 223 Generowanie tekstury 3D ................................................................................................... 223 Kompletny kod tekstury 3D ................................................................................................ 225 Generowanie promieni ........................................................................................................ 226 Definiowanie geometrii sze(cid:258)cianu kolorów ..................................................................... 227 Tworzenie obiektu bufora ramek ................................................................................... 230 Renderowanie tylnych (cid:258)cian sze(cid:258)cianu ............................................................................ 231 Renderowanie przednich (cid:258)cian sze(cid:258)cianu ........................................................................ 231 Renderowanie ca(cid:239)ego sze(cid:258)cianu ...................................................................................... 232 Procedura obs(cid:239)ugi zmiany rozmiaru okna ....................................................................... 233 Kompletny kod generowania promieni ............................................................................... 233 Volume ray casting .............................................................................................................. 238 Cieniowanie wierzcho(cid:239)kowe ........................................................................................... 240 Cieniowanie pikseli .......................................................................................................... 241 Kompletny kod volume ray casting ..................................................................................... 243 Tworzenie wycinków 2D .................................................................................................... 246 Cieniowanie wierzcho(cid:239)kowe ........................................................................................... 248 Cieniowanie pikseli .......................................................................................................... 249 Interfejs u(cid:285)ytkownika dla tworzenia wycinków 2D ........................................................ 249 Kompletny kod tworzenia wycinków 2D ............................................................................ 250 Zebranie kodu w ca(cid:239)o(cid:258)(cid:202) ...................................................................................................... 253 Kompletny kod pliku g(cid:239)ównego ........................................................................................... 255 Uruchamianie programu ...................................................................................................... 257 Podsumowanie .................................................................................................................... 257 Eksperymenty! ..................................................................................................................... 258 10 S p i s t r e (cid:258) c i Poleć książkęKup książkę Cz(cid:218)(cid:258)(cid:202) V. Projekty z wykorzystaniem sprz(cid:218)tu 12 WPROWADZENIE DO ARDUINO ............................................................ 263 Arduino ................................................................................................................................264 Ekosystem Arduino ..............................................................................................................266 J(cid:218)zyk .................................................................................................................................266 IDE ...................................................................................................................................266 Spo(cid:239)eczno(cid:258)(cid:202) ......................................................................................................................266 Peryferia ...........................................................................................................................266 Wymagania ...........................................................................................................................267 Budowa obwodu czujnika nat(cid:218)(cid:285)enia (cid:258)wiat(cid:239)a ........................................................................267 Jak dzia(cid:239)a obwód ..............................................................................................................268 Szkic Arduino ...................................................................................................................269 Tworzenie wykresu w czasie rzeczywistym ....................................................................270 Kod Pythona .........................................................................................................................270 Kompletny kod Pythona .......................................................................................................273 Uruchamianie programu ......................................................................................................275 Podsumowanie .....................................................................................................................276 Eksperymenty! .....................................................................................................................277 13 LASEROWY WY(cid:165)WIETLACZ AUDIO ........................................................ 279 Generowanie wzorów za pomoc(cid:200) lasera .............................................................................280 Sterowanie silniczkiem .....................................................................................................281 Szybka transformata Fouriera ..........................................................................................282 Wymagania ...........................................................................................................................284 Konstruowanie wy(cid:258)wietlacza laserowego .......................................................................285 Pod(cid:239)(cid:200)czanie sterownika silniczków ..................................................................................287 Szkic Arduino .......................................................................................................................288 Konfigurowanie cyfrowych pinów wyj(cid:258)cia Arduino .........................................................288 P(cid:218)tla g(cid:239)ówna .....................................................................................................................289 Zatrzymywanie silniczków ...............................................................................................291 Kod Pythona .........................................................................................................................292 Wybór urz(cid:200)dzenia audio ..................................................................................................292 Odczyt danych z urz(cid:200)dzenia wej(cid:258)ciowego .......................................................................293 Obliczanie FFT strumienia danych ...................................................................................294 Uzyskiwanie informacji o cz(cid:218)stotliwo(cid:258)ci z warto(cid:258)ci FFT .................................................294 Konwersja cz(cid:218)stotliwo(cid:258)ci na pr(cid:218)dko(cid:258)ci i kierunki obracania si(cid:218) silniczków .....................295 Testowanie ustawie(cid:241) silniczków ......................................................................................296 Opcje wiersza polece(cid:241) .....................................................................................................297 R(cid:218)czne testowanie ...........................................................................................................298 Kompletny kod Pythona .......................................................................................................298 Uruchamianie programu ......................................................................................................302 S p i s t r e (cid:258) c i 11 Poleć książkęKup książkę Podsumowanie .................................................................................................................... 302 Eksperymenty! ..................................................................................................................... 303 14 MONITOR POGODY OPARTY NA RASPBERRY PI ................................. 305 Sprz(cid:218)t .................................................................................................................................. 306 Czujnik temperatury i wilgotno(cid:258)ci DHT11 ..................................................................... 306 Raspberry Pi .................................................................................................................... 307 Konfigurowanie Raspberry Pi .......................................................................................... 308 Instalacja i konfiguracja oprogramowania ............................................................................ 309 System operacyjny ........................................................................................................... 309 Wst(cid:218)pna konfiguracja ...................................................................................................... 309 Konfiguracja Wi-Fi ........................................................................................................... 309 Konfigurowanie (cid:258)rodowiska programistycznego ............................................................. 310 Pod(cid:239)(cid:200)czenie poprzez SSH ................................................................................................ 311 Framework WWW Bottle ............................................................................................... 312 Tworzenie wykresów za pomoc(cid:200) biblioteki flot ............................................................. 312 Wy(cid:239)(cid:200)czanie Raspberry Pi ................................................................................................. 315 Budowanie sprz(cid:218)tu .............................................................................................................. 315 Kod ...................................................................................................................................... 317 Obs(cid:239)uga (cid:285)(cid:200)da(cid:241) danych z czujnika .................................................................................... 317 Tworzenie wykresu danych ............................................................................................ 318 Metoda update() .............................................................................................................. 321 Procedura obs(cid:239)ugi JavaScript dla diody LED .................................................................... 322 Dodawanie interaktywno(cid:258)ci ............................................................................................ 322 Kompletny kod .................................................................................................................... 323 Uruchamianie programu ...................................................................................................... 327 Podsumowanie .................................................................................................................... 328 Eksperymenty! ..................................................................................................................... 328 Dodatki A INSTALACJA OPROGRAMOWANIA ....................................................... 331 Instalacja kodu (cid:283)ród(cid:239)owego dla projektów z ksi(cid:200)(cid:285)ki .......................................................... 331 Instalacja w systemie Windows ........................................................................................... 332 Instalacja biblioteki GLFW ............................................................................................... 332 Instalacja prekompilowanych plików binarnych dla ka(cid:285)dego modu(cid:239)u ............................ 332 Inne opcje ........................................................................................................................ 333 Instalacja w systemie OS X .................................................................................................. 334 Instalacja Xcode i MacPorts ............................................................................................. 334 Instalacja modu(cid:239)ów .......................................................................................................... 334 Instalacja w systemie Linux .................................................................................................. 335 12 S p i s t r e (cid:258) c i Poleć książkęKup książkę B PRAKTYCZNE PODSTAWY ELEKTRONIKI ............................................. 337 Typowe komponenty ...........................................................................................................338 Podstawowe narz(cid:218)dzia ........................................................................................................340 Budowanie obwodów ..........................................................................................................342 Id(cid:200)c dalej ..............................................................................................................................344 C RASPBERRY PI: PORADY I WSKAZÓWKI ............................................. 347 Konfigurowanie Wi-Fi ..........................................................................................................347 Sprawdzanie po(cid:239)(cid:200)czenia Raspberry Pi z sieci(cid:200) lokaln(cid:200) .........................................................348 Zapobieganie wprowadzaniu adaptera Wi-Fi w tryb u(cid:258)pienia .............................................348 Tworzenie kopii zapasowej kodu i danych z Raspberry Pi .................................................349 Tworzenie kopii zapasowej ca(cid:239)ego systemu operacyjnego Raspberry Pi ...........................350 Logowanie do Raspberry Pi poprzez SSH ............................................................................350 Korzystanie z kamery Raspberry Pi ......................................................................................352 W(cid:239)(cid:200)czanie obs(cid:239)ugi d(cid:283)wi(cid:218)ku na Raspberry Pi ........................................................................352 Zmuszenie Raspberry Pi do mówienia .................................................................................352 W(cid:239)(cid:200)czanie obs(cid:239)ugi HDMI ......................................................................................................353 Mobilny Raspberry Pi ...........................................................................................................353 Sprawdzanie wersji sprz(cid:218)towej Raspberry Pi ......................................................................354 SKOROWIDZ .......................................................................................... 355 S p i s t r e (cid:258) c i 13 Poleć książkęKup książkę 14 S p i s t r e (cid:258) c i Poleć książkęKup książkę 7 Fotomozaiki KIEDY BY(cid:146)EM W SZÓSTEJ KLASIE, ZOBACZY(cid:146)EM PEWIEN OBRA- ZEK, TAKI JAK TEN POKAZANY NA RYSUNKU 7.1, ALE NIE POTRA- FI(cid:146)EM SI(cid:125) ZORIENTOWA(cid:109), CO NA NIM JEST. PRZYPATRUJ(cid:107)C MU si(cid:218) przez chwil(cid:218), w ko(cid:241)cu zrozumia(cid:239)em. (Obró(cid:202) ksi(cid:200)(cid:285)k(cid:218) do góry nogami i przyjrzyj si(cid:218) obrazkowi z drugiego ko(cid:241)ca pokoju. Nikomu nie powiem). Fotomozaika to obraz podzielony na siatk(cid:218) prostok(cid:200)tów, z których ka(cid:285)dy zosta(cid:239) zast(cid:200)piony przez inny obrazek, pasuj(cid:200)cy do obrazu docelowego (obrazu, który finalnie ma si(cid:218) pojawi(cid:202) na fotomozaice). Innymi s(cid:239)owy, je(cid:258)li spojrzysz na foto- mozaik(cid:218) z daleka, zobaczysz obraz docelowy, ale je(cid:285)eli podejdziesz bli(cid:285)ej, zoba- czysz, (cid:285)e ten obraz w rzeczywisto(cid:258)ci sk(cid:239)ada si(cid:218) z wielu mniejszych obrazków. Podstaw(cid:200) dzia(cid:239)ania uk(cid:239)adanki jest sposób funkcjonowania ludzkiego oka. Cechu- j(cid:200)cy si(cid:218) nisk(cid:200) rozdzielczo(cid:258)ci(cid:200), pikselowy obraz pokazany na rysunku 7.1 jest trudny do rozpoznania z bliska, ale gdy spojrzysz na niego z daleka, b(cid:218)dziesz wiedzie(cid:202), co ukazuje, poniewa(cid:285) b(cid:218)dziesz dostrzega(cid:202) mniej szczegó(cid:239)ów, przez co kraw(cid:218)dzie stan(cid:200) si(cid:218) g(cid:239)adkie. Fotomozaika dzia(cid:239)a na tej samej zasadzie. Z daleka obraz wygl(cid:200)da normalnie, ale z bliska odkrywa swoj(cid:200) tajemnic(cid:218) — ka(cid:285)dy „blok” jest unikato- wym obrazkiem! W tym projekcie dowiesz si(cid:218), jak tworzy(cid:202) fotomozaiki przy u(cid:285)yciu Pythona. Podzielisz obraz docelowy na siatk(cid:218) mniejszych obrazków i zast(cid:200)pisz ka(cid:285)dy blok w siatce odpowiednim obrazkiem, aby utworzy(cid:202) fotomozaik(cid:218) oryginalnego obrazu. Poleć książkęKup książkę Rysunek 7.1. Zastanawiaj(cid:200)cy obrazek B(cid:218)dziesz móg(cid:239) okre(cid:258)li(cid:202) wymiary siatki i zdecydowa(cid:202), czy obrazy wej(cid:258)ciowe mog(cid:200) by(cid:202) ponownie wykorzystywane w mozaice. W tym projekcie nauczysz si(cid:218) wykonywa(cid:202) takie czynno(cid:258)ci jak: (cid:132) tworzenie obrazów za pomoc(cid:200) biblioteki PIL (ang. Python Imaging Library); (cid:132) obliczanie (cid:258)redniej warto(cid:258)ci RGB obrazu; (cid:132) przycinanie obrazów; (cid:132) zast(cid:218)powanie cz(cid:218)(cid:258)ci obrazu poprzez wklejanie innego obrazu; (cid:132) porównywanie warto(cid:258)ci RGB za pomoc(cid:200) pomiaru (cid:258)redniej odleg(cid:239)o(cid:258)ci. Jak to dzia(cid:239)a? Aby utworzy(cid:202) fotomozaik(cid:218), rozpoczniemy od pikselowej, maj(cid:200)cej nisk(cid:200) rozdziel- czo(cid:258)(cid:202) wersji obrazu docelowego (poniewa(cid:285) liczba obrazów kafelkowych by(cid:239)aby zbyt du(cid:285)a w przypadku obrazu o wysokiej rozdzielczo(cid:258)ci). Rozdzielczo(cid:258)(cid:202) tego obrazu b(cid:218)dzie okre(cid:258)la(cid:202) wymiary M × N mozaiki, gdzie M jest liczb(cid:200) wierszy, a N liczb(cid:200) kolumn. Nast(cid:218)pnie zast(cid:200)pimy ka(cid:285)dy kafelek w oryginalnym obrazie wed(cid:239)ug nast(cid:218)puj(cid:200)cej metodologii: 124 R o z d z i a (cid:239) 7 Poleć książkęKup książkę 1. Odczytanie obrazów kafelkowych, które zast(cid:200)pi(cid:200) kafelki w oryginalnym obrazie. 2. Odczytanie obrazu docelowego i podzielenie go na siatk(cid:218) M × N kafelków. 3. Znalezienie dla ka(cid:285)dego kafelka najlepszych odpowiedników z obrazów wej(cid:258)ciowych. 4. Utworzenie ostatecznej mozaiki poprzez rozmieszczenie wybranych obrazów wej(cid:258)ciowych na siatce M × N. Dzielenie obrazu docelowego Rozpoczniemy od podzielenia obrazu docelowego na siatk(cid:218) M × N kafelków zgod- nie ze schematem pokazanym na rysunku 7.2. Rysunek 7.2. Dzielenie obrazu docelowego Obraz na rysunku 7.2 pokazuje, jak mo(cid:285)na podzieli(cid:202) oryginalny obraz na siatk(cid:218) kafelków. O(cid:258) x reprezentuje kolumny siatki, a o(cid:258) y — wiersze siatki. Teraz przyjrzyjmy si(cid:218), jak obliczy(cid:202) wspó(cid:239)rz(cid:218)dne dla pojedynczego kafelka z tej siatki. Dla kafelka z indeksem (i, j) wspó(cid:239)rz(cid:218)dnymi lewego górnego rogu s(cid:200) (i*w, i*j), a wspó(cid:239)rz(cid:218)dnymi prawego dolnego rogu s(cid:200) ((i+1)*w, (j+1)*h), gdzie w oraz h oznaczaj(cid:200) odpowiednio szeroko(cid:258)(cid:202) i wysoko(cid:258)(cid:202) kafelka. Te wspó(cid:239)rz(cid:218)dne mog(cid:200) by(cid:202) u(cid:285)ywane przez bibliotek(cid:218) PIL do przycinania i tworzenia kafelków z tego obrazu. U(cid:258)rednianie warto(cid:258)ci kolorów Ka(cid:285)dy piksel w obrazie ma kolor, który mo(cid:285)e by(cid:202) reprezentowany przez warto(cid:258)ci jego barw sk(cid:239)adowych: czerwonej, zielonej i niebieskiej. W tym przypadku u(cid:285)y- wamy 8-bitowych obrazów, wi(cid:218)c ka(cid:285)da z tych sk(cid:239)adowych ma 8-bitow(cid:200) warto(cid:258)(cid:202) z przedzia(cid:239)u [0, 255]. Dla danego obrazu o ca(cid:239)kowitej liczbie N pikseli (cid:258)rednia warto(cid:258)(cid:202) RGB jest obliczana w nast(cid:218)puj(cid:200)cy sposób: F o t o m o z a i k i 125 Poleć książkęKup książkę bgr , ,( ) (cid:32) (cid:286)r r 1 (cid:14) r 2 (cid:14) N (cid:167) (cid:168)(cid:168) (cid:169) ... (cid:14) r N g 1 (cid:14) g 2 , ... (cid:14) g N b 1 (cid:14) b 2 , (cid:14) N ... (cid:14) b N (cid:14) N (cid:183) (cid:184)(cid:184) (cid:185) Nale(cid:285)y zauwa(cid:285)y(cid:202), (cid:285)e (cid:258)rednia warto(cid:258)(cid:202) RGB jest równie(cid:285) tripletem, a nie ska- larem lub pojedyncz(cid:200) liczb(cid:200), poniewa(cid:285) (cid:258)rednie s(cid:200) wyliczane osobno dla ka(cid:285)dej sk(cid:239)adowej koloru. Obliczamy (cid:258)redni(cid:200) warto(cid:258)(cid:202) RGB, aby dopasowa(cid:202) kafelki do docelowego obrazu. Dopasowywanie obrazów Dla ka(cid:285)dego kafelka w obrazie docelowym musimy dopasowa(cid:202) obraz z folderu wej(cid:258)ciowego podanego przez u(cid:285)ytkownika. Aby okre(cid:258)li(cid:202), czy jakie(cid:258) dwa obrazy do siebie pasuj(cid:200), u(cid:285)ywamy (cid:258)rednich warto(cid:258)ci RGB. Najbli(cid:285)szym dopasowaniem jest obraz z najbardziej zbli(cid:285)on(cid:200) (cid:258)redni(cid:200) warto(cid:258)ci(cid:200) RGB. Najprostszym sposobem jest obliczenie odleg(cid:239)o(cid:258)ci mi(cid:218)dzy warto(cid:258)ciami RGB w pikselu w celu znalezienia najlepszego dopasowania w(cid:258)ród obrazów wej(cid:258)ciowych. Mo(cid:285)emy zastosowa(cid:202) z geometrii nast(cid:218)puj(cid:200)c(cid:200) metod(cid:218) obliczania odleg(cid:239)o(cid:258)ci dla punktów 3D: (cid:11) r 1 (cid:32), 21 (cid:11) b 1 (cid:12)2 (cid:11) g 2 (cid:12) (cid:16) b 2 g 2 (cid:16) r 2 (cid:16) 1 D 2 (cid:12) (cid:14) (cid:14) Obliczamy tutaj odleg(cid:239)o(cid:258)(cid:202) mi(cid:218)dzy punktami (r1, g1, b1) oraz (r2, g2, b2). Maj(cid:200)c dane (cid:258)redni(cid:200) warto(cid:258)(cid:202) docelow(cid:200) RGB oraz list(cid:218) (cid:258)rednich warto(cid:258)ci RGB z obrazów wej(cid:258)ciowych, mo(cid:285)na u(cid:285)y(cid:202) przeszukiwania liniowego i obliczania odleg(cid:239)o(cid:258)ci dla punktów 3D, aby znale(cid:283)(cid:202) najbli(cid:285)szy pasuj(cid:200)cy obraz. Wymagania W tym projekcie u(cid:285)yjemy biblioteki Pillow do wczytywania obrazów, uzyskiwa- nia dost(cid:218)pu do ich danych bazowych oraz tworzenia i modyfikowania obrazów. Wykorzystamy tak(cid:285)e numpy do manipulowania danymi obrazu. Kod Rozpoczniemy od wczytania obrazów kafelkowych, których b(cid:218)dziemy u(cid:285)ywa(cid:202) do tworzenia fotomozaiki. Nast(cid:218)pnie obliczymy (cid:258)redni(cid:200) warto(cid:258)(cid:202) RGB obrazów, a potem podzielimy obraz docelowy na siatk(cid:218) kafelków i poszukamy najlepszego dopasowania dla ka(cid:285)dego z nich. Na koniec z(cid:239)o(cid:285)ymy kafelki obrazów, (cid:285)eby utwo- rzy(cid:202) ostateczn(cid:200) fotomozaik(cid:218). Aby zobaczy(cid:202) pe(cid:239)ny kod projektu, przejd(cid:283) do pod- rozdzia(cid:239)u „Kompletny kod”. 126 R o z d z i a (cid:239) 7 Poleć książkęKup książkę Wczytywanie obrazów kafelków Najpierw wczytamy obrazy wej(cid:258)ciowe z podanego folderu. Oto jak to zrobi(cid:202): def getImages(imageDir): Dla danego folderu obrazów zwraca list(cid:266) obiektów Image files = os.listdir(imageDir) images = [] for file in files: filePath = os.path.abspath(os.path.join(imageDir, file)) try: # bezpo(cid:286)rednie (cid:225)adowanie, aby(cid:286)my nie napotkali niedoboru zasobów fp = open(filePath, rb ) im = Image.open(fp) images.append(im) # wymuszenie (cid:225)adowania danych obrazu z pliku im.load() # zamkni(cid:266)cie pliku fp.close() except: # pomini(cid:266)cie print( Nieprawid(cid:239)owy obraz: s (filePath,)) return images W punkcie u(cid:285)ywamy os.listdir(), aby zebra(cid:202) w list(cid:218) pliki z katalogu imageDir. Nast(cid:218)pnie iterujemy przez ka(cid:285)dy plik na li(cid:258)cie i (cid:239)adujemy go do obiektu Image biblioteki PIL. W punkcie u(cid:285)ywamy metod os.path.abspath() i os.path.join(), aby uzyska(cid:202) kompletn(cid:200) nazw(cid:218) pliku obrazu. Ten idiom jest powszechnie stosowany w Pythonie w celu zapewnienia, (cid:285)e kod b(cid:218)dzie dzia(cid:239)a(cid:239) ze (cid:258)cie(cid:285)kami wzgl(cid:218)dnymi (na przyk(cid:239)ad \foo\bar), ze (cid:258)cie(cid:285)kami bezwzgl(cid:218)dnymi (c:\foo\bar\) oraz w ró(cid:285)nych systemach operacyjnych z odmiennymi konwencjami nazewnictwa katalogów (\ w Windowsie w porównaniu z / w Linuksie). Aby za(cid:239)adowa(cid:202) pliki do obiektów Image biblioteki PIL, mogliby(cid:258)my przekaza(cid:202) ka(cid:285)d(cid:200) nazw(cid:218) pliku do metody Image.open(), ale je(cid:258)li folder fotomozaiki zawie- ra(cid:239)by setki lub nawet tysi(cid:200)ce obrazów, takie post(cid:218)powanie by(cid:239)oby wysoce zasobo- ch(cid:239)onne. Zamiast tego mo(cid:285)emy wykorzysta(cid:202) Pythona do otwarcia ka(cid:285)dego obrazu kafelkowego i przekazania uchwytu pliku fp do biblioteki PIL przy u(cid:285)yciu Image. (cid:180)open(). Gdy obraz zostanie za(cid:239)adowany, zamykamy uchwyt pliku i zwalniamy zasoby systemowe. W punkcie otwieramy plik obrazu za pomoc(cid:200) open(). W kolejnych liniach przekazujemy uchwyt do metody Image.open() i zapisujemy obraz wynikowy (im) w tablicy. W punkcie wywo(cid:239)ujemy Image.load(), aby wymusi(cid:202) za(cid:239)adowanie danych obrazu do im, poniewa(cid:285) open() jest leniw(cid:200) operacj(cid:200). Identyfikuje ona obraz, ale w rzeczywisto(cid:258)ci nie odczytuje wszystkich danych obrazu, dopóki nie spróbujesz go u(cid:285)y(cid:202). F o t o m o z a i k i 127 Poleć książkęKup książkę W punkcie zamykamy uchwytu pliku, aby zwolni(cid:202) zasoby systemowe. Obliczanie (cid:258)redniej warto(cid:258)ci koloru obrazów wej(cid:258)ciowych Po wczytaniu obrazów wej(cid:258)ciowych trzeba obliczy(cid:202) ich (cid:258)redni(cid:200) warto(cid:258)(cid:202) koloru oraz warto(cid:258)(cid:202) dla ka(cid:285)dego kafelka w obrazie docelowym. Aby obliczy(cid:202) obie warto(cid:258)ci, utworzymy metod(cid:218) getAverageRGB(). def getAverageRGB(image): Dla ka(cid:298)dego obrazu wej(cid:286)ciowego zwraca (cid:286)redni(cid:261) warto(cid:286)(cid:252) koloru jako (r, g, b) # uzyskanie ka(cid:298)dego obrazu kafelkowego jako tablicy numpy im = np.array(image) # uzyskanie kszta(cid:225)tu ka(cid:298)dego obrazu wej(cid:286)ciowego w,h,d = im.shape # uzyskanie (cid:286)redniej warto(cid:286)ci RGB return tuple(np.average(im.reshape(w*h, d), axis=0)) W punkcie u(cid:285)ywamy numpy do przekonwertowania ka(cid:285)dego obiektu Image na tablic(cid:218) danych. Zwracana tablica numpy ma kszta(cid:239)t (w, h, d), gdzie w jest wag(cid:200) obrazu, h wysoko(cid:258)ci(cid:200), a d g(cid:239)(cid:218)boko(cid:258)ci(cid:200), co w tym przypadku daje trzy jednostki zapisujemy krotk(cid:218) shape, (po jednej dla R, G i B) dla obrazów RGB. W punkcie a nast(cid:218)pnie w punkcie obliczamy (cid:258)redni(cid:200) warto(cid:258)(cid:202) RGB poprzez przekszta(cid:239)ca- nie tej tablicy na wygodniejsz(cid:200) form(cid:218) o kszta(cid:239)cie (w*h, d), aby mo(cid:285)na by(cid:239)o obliczy(cid:202) (cid:258)redni(cid:200) za pomoc(cid:200) numpy.average(). Dzielenie obrazu docelowego na siatk(cid:218) Teraz musimy podzieli(cid:202) obraz docelowy na siatk(cid:218) M × N mniejszych obrazów. Utwórzmy w tym celu odpowiedni(cid:200) metod(cid:218). def splitImage(image, size): Dla danego obiektu Image i wymiarów (rows, cols) zwraca list(cid:266) m*n obiektów Image W, H = image.size[0], image.size[1] m, n = size w, h = int(W/n), int(H/m) # lista obrazów imgs = [] # generowanie listy wymiarów for j in range(m): for i in range(n): # za(cid:225)(cid:261)czanie przyci(cid:266)tego obrazu imgs.append(image.crop((i*w, j*h, (i+1)*w, (j+1)*h))) return imgs 128 R o z d z i a (cid:239) 7 Poleć książkęKup książkę Najpierw zbieramy wymiary obrazu docelowego w punkcie i wielko(cid:258)(cid:202) obliczamy wymiary ka(cid:285)dego kafelka w obrazie siatki w punkcie docelowym, stosuj(cid:200)c podstawowe dzielenie. . W punkcie Teraz musimy wykona(cid:202) iteracj(cid:218) przez wymiary siatki oraz wyci(cid:200)(cid:202) i zapisa(cid:202) metoda image.crop() przycina ka(cid:285)dy kafelek jako oddzielny obraz. W punkcie fragment obrazu, wykorzystuj(cid:200)c jako argumenty wspó(cid:239)rz(cid:218)dne lewego górnego rogu kafelka i wymiary przyci(cid:218)tego obrazu (tak jak omówiono to w punkcie „Dzielenie obrazu docelowego” we wcze(cid:258)niejszej cz(cid:218)(cid:258)ci tego rozdzia(cid:239)u). Wyszukiwanie najlepszego dopasowania dla kafelka Teraz poszukajmy w folderze obrazów wej(cid:258)ciowych najlepszego dopasowania dla kafelka. W tym celu utworzymy metod(cid:218) narz(cid:218)dziow(cid:200) getBestMatchIndex() w nast(cid:218)puj(cid:200)cy sposób: def getBestMatchIndex(input_avg, avgs): Zwraca indeks najlepszego dopasowania obiektu Image na podstawie odleg(cid:225)o(cid:286)ci warto(cid:286)ci RGB # (cid:286)rednia obrazu wej(cid:286)ciowego avg = input_avg # uzyskanie najbli(cid:298)szej warto(cid:286)ci RGB dla danych wej(cid:286)ciowych na podstawie odleg(cid:225)o(cid:286)ci warto(cid:286)ci RGB index = 0 min_index = 0 min_dist = float( inf ) for val in avgs: dist = ((val[0] - avg[0])*(val[0] - avg[0]) + (val[1] - avg[1])*(val[1] - avg[1]) + (val[2] - avg[2])*(val[2] - avg[2])) if dist min_dist: min_dist = dist min_index = index index += 1 return min_index Próbujemy znale(cid:283)(cid:202) najbardziej zbli(cid:285)one dopasowanie do (cid:258)redniej warto(cid:258)ci RGB (input_avg) z listy avgs. Jest to lista (cid:258)rednich warto(cid:258)ci RGB z obrazów kafelkowych. Aby znale(cid:283)(cid:202) najlepsze dopasowanie, porównujemy (cid:258)rednie warto(cid:258)ci RGB obra- inicjujemy indeks najbli(cid:285)szego dopasowania zów wej(cid:258)ciowych. W punktach na 0 i minimaln(cid:200) odleg(cid:239)o(cid:258)(cid:202) na niesko(cid:241)czono(cid:258)(cid:202). Za pierwszym razem ten test b(cid:218)dzie zawsze dawa(cid:239) wynik pozytywny, poniewa(cid:285) ka(cid:285)da odleg(cid:239)o(cid:258)(cid:202) jest mniejsza ni(cid:285) nie- tworzymy p(cid:218)tl(cid:218) przez warto(cid:258)ci znajduj(cid:200)ce si(cid:218) na li(cid:258)cie sko(cid:241)czono(cid:258)(cid:202). W punkcie rozpoczynamy obliczanie odleg(cid:239)o(cid:258)ci za pomoc(cid:200) stan- (cid:258)rednich, a w punkcie dardowego wzoru. (Porównujemy kwadraty odleg(cid:239)o(cid:258)ci, aby zmniejszy(cid:202) czas obli- cze(cid:241)). Je(cid:258)li obliczona odleg(cid:239)o(cid:258)(cid:202) jest mniejsza ni(cid:285) przechowywana odleg(cid:239)o(cid:258)(cid:202) i F o t o m o z a i k i 129 Poleć książkęKup książkę minimalna min_dist, jest w punkcie zast(cid:218)powana now(cid:200) minimaln(cid:200) odleg(cid:239)o- (cid:258)ci(cid:200). Na koniec iteracji otrzymujemy najbli(cid:285)szy dla input_avg indeks (cid:258)redniej warto(cid:258)ci RGB z listy avgs. Teraz mo(cid:285)emy u(cid:285)y(cid:202) tego indeksu, aby wybra(cid:202) pasu- j(cid:200)cy obrazek kafelkowy z listy tych obrazków. Tworzenie siatki obrazu Aby przej(cid:258)(cid:202) do tworzenia fotomozaiki, potrzebujemy jeszcze jednej metody narz(cid:218)- dziowej. Metoda createImageGrid() tworzy siatk(cid:218) obrazów, która ma rozmiar M × N. Ta siatka obrazu jest finalnym obrazem fotomozaiki, utworzonym z listy wybranych obrazów kafelkowych. def createImageGrid(images, dims): Dla danej listy obrazów i rozmiaru siatki (m, n) utworzenie siatki obrazów. m, n = dims # kontrola poprawno(cid:286)ci assert m*n == len(images) # uzyskanie maksymalnej wysoko(cid:286)ci i szeroko(cid:286)ci obrazów # nie zak(cid:225)adamy, (cid:298)e wszystkie s(cid:261) równe width = max([img.size[0] for img in images]) height = max([img.size[1] for img in images]) # tworzenie obrazu wyj(cid:286)ciowego grid_img = Image.new( RGB , (n*width, m*height)) # wklejanie obrazów kafelkowych do siatki for index in range(len(images)): row = int(index/n) col = index - n*row grid_img.paste(images[index], (col*width, row*height)) return grid_img W punkcie zbieramy wymiary siatki, a nast(cid:218)pnie u(cid:285)ywamy metody assert, aby sprawdzi(cid:202), czy liczba obrazów dostarczonych do metody createImageGrid() odpowiada rozmiarowi siatki. (Metoda assert sprawdza za(cid:239)o(cid:285)enia w kodzie, zw(cid:239)aszcza w trakcie rozwoju i testów). Teraz mamy list(cid:218) obrazów kafelkowych opart(cid:200) na najbli(cid:285)szym dopasowaniu RGB, której u(cid:285)yjemy do tworzenia siatki obrazu reprezentuj(cid:200)cej fotomozaik(cid:218). Niektóre z wybranych obrazów mog(cid:200) nie wype(cid:239)nia(cid:202) kafelka ca(cid:239)kowicie ze wzgl(cid:218)du na ró(cid:285)nice w ich rozmiarach, ale nie b(cid:218)dzie to stanowi(cid:239)o problemu, poniewa(cid:285) najpierw wype(cid:239)nimy kafelek czarnym t(cid:239)em. W punkcie i w kolejnych liniach obliczamy maksymaln(cid:200) szeroko(cid:258)(cid:202) i wyso- ko(cid:258)(cid:202) obrazów kafelkowych. (Nie przyj(cid:218)li(cid:258)my (cid:285)adnych za(cid:239)o(cid:285)e(cid:241) dotycz(cid:200)cych wiel- ko(cid:258)ci wybranych obrazów wej(cid:258)ciowych. Kod b(cid:218)dzie dzia(cid:239)a(cid:202) bez wzgl(cid:218)du na to, 130 R o z d z i a (cid:239) 7 Poleć książkęKup książkę czy s(cid:200) one takie same, czy ró(cid:285)ne). Je(cid:258)li obrazy wej(cid:258)ciowe nie b(cid:218)d(cid:200) ca(cid:239)kowicie wype(cid:239)nia(cid:202) kafelka, przestrzenie mi(cid:218)dzy kafelkami b(cid:218)d(cid:200) mia(cid:239)y kolor t(cid:239)a, którym jest domy(cid:258)lnie czarny. W punkcie tworzymy pusty obiekt Image o wymiarach odpowiednich, (cid:285)eby pomie(cid:258)ci(cid:202) wszystkie obrazy z siatki. Wkleimy do niego obrazy kafelkowe. Nast(cid:218)p- wykonujemy p(cid:218)tl(cid:218) przez wybrane nie wype(cid:239)niamy siatk(cid:218) obrazu. W punkcie obrazy i wklejamy je do odpowiedniej siatki za pomoc(cid:200) metody Image.paste(). Pierwszym argumentem przekazywanym do Image.paste() jest obiekt Image, który ma by(cid:202) wklejony, a drugim s(cid:200) wspó(cid:239)rz(cid:218)dne lewego górnego rogu. Teraz trzeba ustali(cid:202), w którym wierszu i w której kolumnie wklei(cid:202) obrazek kafelkowy do siatki obrazu. W tym celu trzeba wyrazi(cid:202) indeks obrazu w kategoriach wierszy i kolumn. Indeks kafelka w siatce obrazu jest okre(cid:258)lony poprzez N*row + col, gdzie N jest liczb(cid:200) komórek w wierszu, a (row, col) to wspó(cid:239)rz(cid:218)dne na tej siatce. W punkcie podajemy wiersz z poprzedniego wzoru, a w punkcie kolumn(cid:218). Tworzenie fotomozaiki Skoro mamy ju(cid:285) wszystkie potrzebne narz(cid:218)dzia, napiszmy g(cid:239)ówn(cid:200) funkcj(cid:218), która tworzy fotomozaik(cid:218). def createPhotomosaic(target_image, input_images, grid_size, reuse_images=True): Tworzenie fotomozaiki dla danych obrazu docelowego i obrazów wej(cid:286)ciowych. print( dzielenie obrazu docelowego... ) # dzieli obraz docelowy na kafelki target_images = splitImage(target_image, grid_size) print( wyszukiwanie dopasowa(cid:241) dla obrazu... ) # dla ka(cid:298)dego kafelka wybiera jeden pasuj(cid:261)cy obraz wej(cid:286)ciowy output_images = [] # dla informacji zwrotnej dla u(cid:298)ytkownika count = 0 batch_size = int(len(target_images)/10) # obliczanie (cid:286)rednich obrazów wej(cid:286)ciowych avgs = [] for img in input_images: avgs.append(getAverageRGB(img)) for img in target_images: # obliczanie (cid:286)redniej warto(cid:286)ci RGB obrazu docelowego avg = getAverageRGB(img) # wyszukiwanie indeksu dopasowania najbli(c
Pobierz darmowy fragment (pdf)

Gdzie kupić całą publikację:

Python. 14 twórczych projektów dla dociekliwych programistów
Autor:

Opinie na temat publikacji:


Inne popularne pozycje z tej kategorii:


Czytaj również:


Prowadzisz stronę lub blog? Wstaw link do fragmentu tej książki i współpracuj z Cyfroteką: