Python是一種解釋型、面向?qū)ο蟆討B(tài)數(shù)據(jù)類型的高級程序設(shè)計(jì)語言,通過Python編程能夠解決現(xiàn)實(shí)生活中的很多問題。本書并不介紹Python語言的基礎(chǔ)知識,而是通過一系列有趣的項(xiàng)目,展示如何用Python解決各種實(shí)際問題,以及如何使用一些流行的Python庫。
本書共15章,每章講解一個(gè)有趣的Python項(xiàng)目,這些項(xiàng)目可以分成5個(gè)部分:第一部分是熱身,包括科赫雪花、繁花曲線;第二部分是模擬生命,包括康威生命游戲、使用Karplus-Strong算法生成泛音、群體行為模擬;第三部分是好玩的圖形,包括文本圖形、照片馬賽克、裸眼立體畫;第四部分是走進(jìn)三維,包括理解OpenGL、圓環(huán)面上的康威生命游戲、體渲染;第五部分是玩轉(zhuǎn)硬件,包括在樹莓派Pico上實(shí)現(xiàn)Karplus-Strong算法、樹莓派激光音樂秀、物聯(lián)網(wǎng)花園、樹莓派音頻機(jī)器學(xué)習(xí)。此外,本書還通過附錄介紹如何安裝Python和設(shè)置樹莓派。
本書適合已經(jīng)了解了基本的Python語法和編程知識、想要嘗試和探索通過Python編程解決實(shí)際問題的讀者閱讀,也可作為Python初學(xué)者練習(xí)項(xiàng)目開發(fā)的參考用書。
Python以其簡潔的語法、強(qiáng)大的功能、較低的學(xué)習(xí)門檻而受到廣大編程愛好者的喜愛。但是,學(xué)習(xí)完P(guān)ython的基礎(chǔ)語法和編程知識后,如何提升Python編程技能呢?
本書通過15個(gè)有趣且富有創(chuàng)造性的編程項(xiàng)目,教你用Python生成圖像和音樂、模擬現(xiàn)實(shí)世界中的現(xiàn)象,并與樹莓派等硬件進(jìn)行交互。
本書項(xiàng)目涵蓋繪畫、圖像處理、3D渲染、樹莓派、物聯(lián)網(wǎng)、AI機(jī)器學(xué)習(xí)等,講解眾多實(shí)用的Python庫:NumPy、Matplotlib、scipy、PyAudio、Pillow、sqlite3、turtle、math、argparse、OpenGL、tensorflow……
● 使用海龜繪圖法繪制復(fù)雜的分形圖案和繁花曲線;
● 模擬彈撥樂器的聲音生成音樂;
● 設(shè)計(jì)引人入勝的元胞自動機(jī)并實(shí)現(xiàn)群體行為模擬;
● 實(shí)現(xiàn)二維和三維空間中的康威生命游戲;
● 將普通圖像轉(zhuǎn)換為文本圖形、照片馬賽克和令人驚嘆的裸眼立體畫;
● 探索3D圖形,從基本的形狀渲染到MRI和CT掃描數(shù)據(jù)的可視化;
● 使用樹莓派創(chuàng)建隨音樂起舞的激光表演和物聯(lián)網(wǎng)花園監(jiān)測器;
● 構(gòu)建使用機(jī)器學(xué)習(xí)驅(qū)動的語音識別系統(tǒng)。
每個(gè)項(xiàng)目都按照【講解原理-分析需求-代碼精講-知識小結(jié)-擴(kuò)展練習(xí)-完整代碼】的方式進(jìn)行講解,并提供可下載運(yùn)行的源代碼,贈送Python排障手冊+程序員面試手冊
本書相比上一版進(jìn)行了如下修訂:
(1)新增/替換5個(gè)全新項(xiàng)目,緊跟前沿?zé)狳c(diǎn)
(2)基于Python 3.9全面更新所有項(xiàng)目
(3)采用更新、更實(shí)用的Python方法和算法
(4)使用Anaconda簡化Python安裝
(5)簡化硬件項(xiàng)目的組裝過程,專注于Python編程
馬赫什·文基塔查拉姆(Mahesh Venkitachalam)是一名計(jì)算機(jī)圖形學(xué)和嵌入式系統(tǒng)顧問,擁有二十余年從業(yè)經(jīng)驗(yàn)。他是Electronut Labs的創(chuàng)始人,該公司以開發(fā)充滿創(chuàng)意的開源硬件著稱。他經(jīng)常撰寫有關(guān)編程和電子技術(shù)的博客。
第 一部分 熱身
第 1 章 科赫雪花 2
1.1 工作原理 2
1.1.1 使用遞歸 2
1.1.2 構(gòu)建科赫雪花 3
1.1.3 使用海龜繪圖法繪圖 6
1.2 需求 8
1.3 代碼 8
1.3.1 計(jì)算點(diǎn)的坐標(biāo) 8
1.3.2 遞歸 8
1.3.3 繪制片段 9
1.3.4 編寫函數(shù) main() 9
1.4 運(yùn)行程序 10
1.5 小結(jié) 10
1.6 實(shí)驗(yàn) 11
1.7 完整代碼 11
第 2 章 繁花曲線 13
2.1 工作原理 13
2.1.1 理解參數(shù)方程 13
2.1.2 使用海龜繪圖法繪制曲線 15
2.2 需求 16
2.3 代碼 17
2.3.1 繪制繁花曲線 17
2.3.2 協(xié)調(diào)動畫 20
2.3.3 保存曲線 22
2.3.4 分析命令行參數(shù)及初始化 23
2.4 運(yùn)行程序 24
2.5 小結(jié) 25
2.6 實(shí)驗(yàn) 26
2.7 完整代碼 26
第二部分 模擬生命
第 3 章 康威生命游戲 32
3.1 工作原理 32
3.2 需求 34
3.3 代碼 34
3.3.1 顯示網(wǎng)格 34
3.3.2 設(shè)置初始狀態(tài) 35
3.3.3 實(shí)現(xiàn)邊界條件 36
3.3.4 實(shí)現(xiàn)規(guī)則 37
3.3.5 向程序傳遞命令行參數(shù) 37
3.3.6 初始化 38
3.4 運(yùn)行程序 38
3.5 小結(jié) 40
3.6 實(shí)驗(yàn) 40
3.7 完整代碼 40
第 4 章 使用 Karplus-Strong 算法生成泛音 43
4.1 工作原理 442
4.1.1 模擬 45
4.1.2 WAV 文件格式 46
4.1.3 小調(diào)五聲音階 47
4.2 需求 48
4.3 代碼 48
4.3.1 使用 deque 實(shí)現(xiàn)環(huán)形緩沖區(qū) 48
4.3.2 實(shí)現(xiàn) Karplus-Strong算法 48
4.3.3 寫入 WAV 文件 50
4.3.4 使用 PyAudio 播放 WAV文件 50
4.3.5 創(chuàng)建音符及分析參數(shù) 52
4.4 運(yùn)行彈撥樂器模擬程序 53
4.5 小結(jié) 54
4.6 實(shí)驗(yàn) 54
4.7 完整代碼 54
第 5 章 群體行為模擬 58
5.1 工作原理 58
5.2 需求 59
5.3 代碼 59
5.3.1 初始化模擬 59
5.3.2 設(shè)置邊界條件 60
5.3.3 繪制個(gè)體 62
5.3.4 應(yīng)用群體行為規(guī)則 63
5.3.5 影響模擬 67
5.3.6 分步模擬 68
5.3.7 分析參數(shù)及實(shí)例化Boids 類 69
5.4 運(yùn)行群體行為模擬程序 69
5.5 小結(jié) 69
5.6 實(shí)驗(yàn) 70
5.7 完整代碼 70
第三部分 好玩的圖形
第 6 章 文本圖形 74
6.1 工作原理 75
6.2 需求 76
6.3 代碼 76
6.3.1 定義灰度標(biāo)尺和網(wǎng)格 76
6.3.2 計(jì)算平均亮度 77
6.3.3 根據(jù)圖像生成 ASCII 內(nèi)容 77
6.3.4 定義命令行參數(shù) 78
6.3.5 將表示文本圖形的字符串寫入文本文件 79
6.4 運(yùn)行文本圖形生成程序 79
6.5 小結(jié) 80
6.6 實(shí)驗(yàn) 80
6.7 完整代碼 80
第 7 章 照片馬賽克 83
7.1 工作原理 83
7.1.1 分割目標(biāo)圖像 84
7.1.2 計(jì)算平均 RGB 值 84
7.1.3 匹配圖像 85
7.2 需求 87
7.3 代碼 87
7.3.1 讀入輸入圖像 87
7.3.2 計(jì)算圖像的平均 RGB 值 88
7.3.3 將目標(biāo)圖像分割為網(wǎng)格 88
7.3.4 查找與分片最匹配的圖像 89
7.3.5 創(chuàng)建圖像網(wǎng)格 90
7.3.6 創(chuàng)建照片馬賽克 91
7.3.7 編寫函數(shù) main() 93
7.4 運(yùn)行照片馬賽克生成程序 94
7.5 小結(jié) 95
7.6 實(shí)驗(yàn) 95
7.7 完整代碼 95
第 8 章 裸眼立體畫 101
8.1 工作原理 102
8.1.1 感知裸眼立體畫中的深度 102
8.1.2 使用深度圖 103
8.1.3 平移像素 105
8.2 需求 106
8.3 代碼 106
8.3.1 創(chuàng)建由隨機(jī)圓組成的分片 106
8.3.2 重復(fù)分片 107
8.3.3 創(chuàng)建裸眼立體畫 108
8.3.4 提供命令行參數(shù) 109
8.4 運(yùn)行裸眼立體畫生成程序 109
8.5 小結(jié) 110
8.6 實(shí)驗(yàn) 111
8.7 完整代碼 111
第四部分 走進(jìn)三維
第 9 章 理解 OpenGL 116
9.1 OpenGL 的工作原理 117
9.1.1 圖元 117
9.1.2 三維變換 118
9.1.3 著色器 120
9.1.4 頂點(diǎn)緩存 121
9.1.5 紋理映射 121
9.1.6 OpenGL 上下文 122
9.2 需求 122
9.3 代碼 122
9.3.1 RenderWindow 類 123
9.3.2 Scene 類 125
9.3.3 輔助函數(shù) 129
9.4 運(yùn)行 OpenGL 應(yīng)用程序 130
9.5 小結(jié) 130
9.6 實(shí)驗(yàn) 130
9.7 完整代碼 131
第 10 章 圓環(huán)面上的康威生命游戲 136
10.1 工作原理 136
10.1.1 計(jì)算頂點(diǎn) 136
10.1.2 計(jì)算光照法線 138
10.1.3 渲染 139
10.1.4 給三角形帶著色 140
10.1.5 控制相機(jī) 140
10.1.6 將網(wǎng)格映射到圓環(huán)面 141
10.2 需求 142
10.3 代碼 142
10.3.1 渲染圓環(huán)面 142
10.3.2 實(shí)現(xiàn)康威生命游戲模擬 148
10.3.3 創(chuàng)建相機(jī) 149
10.3.4 整合代碼 151
10.4 運(yùn)行三維版康威生命游戲模擬 153
10.5 小結(jié) 154
10.6 實(shí)驗(yàn) 155
10.7 完整的圓環(huán)面渲染代碼 155
10.8 完整的康威生命游戲模擬代碼 160
10.9 完整的相機(jī)創(chuàng)建代碼 161
10.10 RenderWindow 類的完整代碼 162
第 11 章 體渲染 166
11.1 工作原理 166
11.1.1 數(shù)據(jù)格式 167
11.1.2 生成光線 167
11.1.3 OpenGL 窗口 169
11.2 需求 169
11.3 代碼 169
11.3.1 生成三維紋理 170
11.3.2 生成光線 171
11.3.3 實(shí)現(xiàn)體光線投射算法 176
11.3.4 顯示二維切片 180
11.3.5 整合代碼 183
11.4 運(yùn)行程序 185
11.5 小結(jié) 185
11.6 實(shí)驗(yàn) 185
11.7 完整的三維紋理生成代碼 186
11.8 完整的光線生成代碼 187
11.9 完整的體光線投射算法代碼 192
11.10 顯示二維切片的完整代碼 195
11.11 完整的主文件代碼 198
第五部分 玩轉(zhuǎn)硬件
第 12 章 在樹莓派 Pico 上實(shí)現(xiàn)Karplus-Strong 算法 202
12.1 工作原理 203
12.1.1 輸入和輸出 203
12.1.2 I2S 協(xié)議 204
12.2 需求 205
12.2.1 組裝硬件 205
12.2.2 安裝 MicroPython 207
12.3 代碼 207
12.3.1 設(shè)置 207
12.3.2 生成音符 208
12.3.3 播放音頻 210
12.3.4 編寫函數(shù) main() 211
12.4 運(yùn)行程序 212
12.5 小結(jié) 213
12.6 實(shí)驗(yàn) 213
12.7 完整代碼 214
第 13 章 樹莓派激光音樂秀 218
13.1 工作原理 218
13.1.1 使用激光生成圖案 219
13.1.2 使用快速傅里葉變換分析音頻 222
13.2 需求 224
13.2.1 在樹莓派上安裝系統(tǒng)和軟件 224
13.2.2 搭建激光秀裝置 225
13.2.3 連接硬件 226
13.3 代碼 228
13.3.1 設(shè)置 228
13.3.2 控制硬件 229
13.3.3 處理音頻 230
13.3.4 測試電機(jī) 233
13.3.5 整合代碼 234
13.4 運(yùn)行激光音樂秀程序 235
13.5 小結(jié) 236
13.6 實(shí)驗(yàn) 236
13.7 完整代碼 237
第 14 章 物聯(lián)網(wǎng)花園 242
14.1 工作原理 242
14.1.1 低功耗藍(lán)牙 243
14.1.2 Web 框架 Bottle 245
14.1.3 SQLite 數(shù)據(jù)庫 246
14.2 需求 247
14.2.1 在樹莓派上安裝系統(tǒng)和軟件 247
14.2.2 安裝 CircuitPython 247
14.2.3 設(shè)置 IFTTT 服務(wù) 248
14.3 代碼 249
14.3.1 CircuitPython 代碼 249
14.3.2 BLE 掃描器代碼 252
14.3.3 Web 服務(wù)器代碼 258
14.3.4 主程序文件 264
14.4 運(yùn)行物聯(lián)網(wǎng)花園程序 266
14.5 小結(jié) 267
14.6 實(shí)驗(yàn) 267
14.7 完整的 CircuitPython 代碼 268
14.8 完整的 BLE 掃描器代碼 270
14.9 完整的 Python Web 服務(wù)器代碼 273
14.10 完整的主程序代碼 275
第 15 章 樹莓派音頻機(jī)器學(xué)習(xí) 277
15.1 機(jī)器學(xué)習(xí)概述 277
15.2 工作原理 278
15.2.1 聲譜圖 280
15.2.2 在樹莓派上推斷 281
15.3 需求 283
15.4 代碼 284
15.4.1 在 Colab 中訓(xùn)練模型 284
15.4.2 在樹莓派上使用模型 293
15.5 運(yùn)行語音識別系統(tǒng) 301
15.6 小結(jié) 302
15.7 實(shí)驗(yàn) 303
15.8 完整代碼 303
附錄 A 安裝 Python 309
A.1 獲取本書項(xiàng)目的源代碼 309
A.2 安裝 Python 和 Python 模塊 309
A.2.1 Windows 309
A.2.2 macOS 310
A.2.3 Linux 311
附錄 B 設(shè)置樹莓派 312
B.1 安裝操作系統(tǒng) 312
B.2 測試連接 314
B.3 使用 SSH 登錄樹莓派 315
B.4 安裝 Python 模塊 316
B.5 遠(yuǎn)程使用 Visual Studio Code 316