【缺書】NT售價: 545 元
本書的目的是讓你能夠使用最新版本的OpenCV 4.0框架和Python 3.8語言,親身接觸各種中級或高級項目,而不僅僅是像理論課那樣介紹計算機視覺的核心概念。本書已經是第二版,增加了使用OpenCV解決問題的概念的深度。它將指導你完成獨立的實踐項目,這些項目側重于基本的計算機視覺概念,例如圖像處理、3D場景重建、對象檢測和對象跟蹤。它還通過實際示例討論了統計學習和深度神經網絡。本書首先闡述了圖像濾鏡和特征匹配之類的概念,并介紹了如何使用諸如Kinect深度傳感器之類的自定義傳感器、如何在3D模式下重建和可視化場景、如何對齊圖像以及如何將多幅圖像組合為一幅圖像等。在本書的高級項目部分,你將學習到如何通過神經網絡識別交通標志和面部情緒,以及如何使用神經網絡檢測和跟蹤視頻流中的對象。學習完本書之后,你將獲得實際編程經驗,并能熟練地根據特定的業務需求開發自己的高級計算機視覺應用程序。本書還探索了多種機器學習和計算機視覺模型,例如支持向量機(SVM)和卷積神經網絡等,這些都有助于你開發自己的實際問題解決方案。本書讀者本書主要針對使用OpenCV和其他機器學習庫開發高級實際應用程序的計算機視覺領域愛好者,以幫助他們掌握相應技能。本書讀者應該具備基礎編程技能和Python編程知識。內容介紹本書共分為10章,另外還包括兩個附錄。具體介紹如下。第1章“濾鏡”,探討了若干比較有趣的圖像濾鏡(如黑白鉛筆素描、暖調/冷調濾鏡和卡通化效果等),并可將這些濾鏡應用于網絡攝像頭的實時視頻流。第2章“深度傳感器和手勢識別”,可幫助你開發應用程序,以使用深度傳感器(如Microsoft Kinect 3D Sensor或華碩Xtion)的輸出實時檢測和跟蹤簡單的手勢。第3章“通過特征匹配和透視變換查找對象”,可幫助你開發一個應用程序,以檢測攝像頭視頻流中的任意感興趣的對象,即使從不同角度或距離,甚至是部分遮擋觀察對象的情況下也可以正常工作。第4章“使用運動恢復結構重建3D場景”,展示了如何通過從攝像頭運動中推斷場景的幾何特征來重建和可視化3D場景。第5章“在OpenCV中使用計算攝影”,可以幫助你開發命令行腳本,將圖像作為輸入并生成全景或高動態范圍(HDR)圖像。本章腳本將對齊圖像以使其具有像素之間的對應關系,或者將其拼接在一起以創建全景圖像,這是圖像對齊的有趣應用。第6章“跟蹤視覺上的顯著對象”,可以幫助你開發一個應用程序,以跟蹤一個視頻序列中的多個視覺顯著對象(例如足球比賽中場上的所有球員)。第7章“識別交通標志”,向你展示了如何訓練支持向量機,以識別來自德國交通標志識別基準(GTSRB)數據集中的交通標志。第8章“識別面部表情”,可以幫助你開發一個應用程序,以實時檢測人臉并在網絡攝像頭的視頻流中識別其面部表情。第9章“對象分類和定位”,將引導你開發使用深度卷積神經網絡進行實時對象分類的應用程序。你將修改分類器網絡,以使用自定義類別在自定義數據集上進行訓練。你還將學習如何在數據集上訓練Keras模型,以及如何序列化Keras模型并將其保存到磁盤。你將看到如何使用加載的Keras模型對新輸入圖像進行分類,如何使用圖像數據訓練卷積神經網絡,以獲得良好的分類器和非常高的準確率。第10章“檢測和跟蹤對象”,將指導你開發使用深度神經網絡進行實時對象檢測的應用程序,并可將其連接到跟蹤器。你將學習對象檢測器的工作原理及其訓練方法,實現一個基于卡爾曼濾波器的跟蹤器,使用對象的位置和速度來預測可能的位置。完成本章的示例后,你將能夠構建自己的實時對象檢測和跟蹤應用程序。附錄A“應用程序性能分析和加速”,介紹了如何使用Numba在應用程序中發現性能瓶頸并實現現有代碼的基于CPU和GPU的加速。附錄B“設置Docker容器”,將引導你復制用于運行本書代碼的環境。充分利用本書本書所有的代碼都使用Python 3.8,可在各種操作系統(如Windows、GNU Linux和macOS等)上使用。我們已盡量僅使用這3個操作系統上可用的庫,并且詳細介紹了所使用的每個依賴項的確切版本,可以使用pip(Python的依賴項管理系統)進行安裝。如果你仍然無法使這些依賴項正常工作,則可以使用本書提供的Dockerfile,我們已對本書中的所有代碼進行了測試,這些內容在附錄B“設置Docker容器”中有詳細介紹。表P-1提供了本書使用的依賴項列表,以及相應的章節。為運行代碼,你需要一臺普通的筆記本電腦或個人計算機。有些章節要求使用網絡攝像頭,這可以是筆記本電腦的嵌入式攝像頭,也可以是外部攝像頭。第2章“深度傳感器和手勢識別”還需要深度傳感器,這可以是Microsoft 3D Kinect傳感器,也可以是 libfreenect庫或OpenCV支持的任何其他傳感器(如華碩Xtion)。本書代碼已經在Ubuntu 18.04上使用Python 3.8和Python 3.7進行了測試。如果你的計算機上已經裝有Python,則可以在終端上運行以下命令:$ pip install -r requirements.txt上述requirement.txt在本書項目的GitHub存儲庫中有提供,并且包含以下內容(這其實就是表P-1中的依賴項列表):wxPython==4.0.5numpy==1.18.1scipy==1.4.1matplotlib==3.1.2requests==2.22.0opencv-contrib-python==4.2.0.32opencv-python==4.2.0.32rawpy==0.14.0ExifRead==2.1.2tensorflow==2.0.1或者,你也可以按照附錄B“設置Docker容器”中的說明進行操作,以使所有代碼都可以在Docker容器中運行。圖P-1 搜索圖書名(3)在本書詳情頁面中,找到并單擊Download code from GitHub(從GitHub下載代碼文件)按鈕,如圖P-2所示。提示:如果你看不到該下載按鈕,可能是沒有登錄packtpub賬號。該站點可免費注冊賬號。圖P-2 單擊下載代碼的按鈕(4)在本書GitHub源代碼下載頁面中,單擊右側的Code(代碼)按鈕,在彈出的下拉菜單中選擇Download ZIP(下載壓縮包),如圖P-3所示。下載文件后,請確保使用最新版本解壓縮或解壓縮文件夾:? WinRAR/7-Zip(Windows系統)。? Zipeg/iZip/UnRarX(Mac系統)。? 7-Zip/PeaZip(Linux系統)。關于作者Menua Gevorgyan博士是一位經驗豐富的研究人員,具有信息技術和服務行業的長期工作經歷。他精通計算機視覺、深度學習、機器學習和數據科學,并且在OpenCV和Python編程方面擁有豐富的經驗。他對機器感知和機器理解問題感興趣,并有意探索讓機器像人類一樣感知世界。“感謝Rosal Colaco為提高本書質量所做的辛苦努力,也感謝Sandeep Mishra對于本書的良好建議。”Arsen Mamikonyan是一位經驗豐富的機器學習專家,曾在硅谷和倫敦工作,還曾在亞美尼亞美國大學(奧克蘭)任教。他精通應用機器學習和數據科學,并使用Python和 OpenCV等構建了現實應用程序。他擁有麻省理工學院的工程學碩士學位,專攻人工智能。“感謝我的妻子Lusine,以及我的父母Gayane和Andranik,他們在我寫作這本書的過程中不斷鼓勵我。還要感謝我的合著者Menua,他在忙碌的工作日程中始終與我保持緊密聯系,并在我們從事這個項目的過程中保持了很高的積極性。”Michael Beyeler是華盛頓大學神經工程和數據科學的博士后研究員,他正在研究仿生視覺的計算模型,以改善植入視網膜假體(仿生眼)的盲人的知覺體驗。他的工作處于神經科學、計算機工程、計算機視覺和機器學習的交叉領域。他還是多個開源軟件項目的積極貢獻者,并且在Python、C/C++、CUDA、MATLAB和Android等方面擁有專業的編程經驗。Michael擁有加州大學爾灣分校的計算機科學博士學位,以及瑞士蘇黎世聯邦理工學院的生物醫學工程理學碩士學位和電氣工程理學學士學位。關于審稿人Sri Manikanta Palakollu是一名在JNTUH SICET攻讀計算機科學與工程學士學位的本科生。他是他所在大學的OpenStack開發人員社區的創始人。他已經開始了自己的職業程序員生涯。他喜歡解決與數據科學領域有關的問題。他的興趣包括數據科學、應用程序開發、Web開發、網絡安全和技術寫作。他在Hacker Noon、freeCodeCamp、Towards Data Science和DDI等出版物上發表了許多有關數據科學、機器學習、編程和網絡安全的文章。
《OpenCV 4.0+Python機器學習與計算機視覺實戰》詳細闡述了機器學習與計算機視覺相關的基本解決方案,主要包括濾鏡、深度傳感器和手勢識別、通過特征匹配和透視變換查找對象、使用運動恢復結構重建3D場景、在OpenCV中使用計算攝影、跟蹤視覺上的顯著對象、識別交通標志、識別面部表情、對象分類和定位、檢測和跟蹤對象等內容。此外,本書還提供了相應的示例、代碼,以幫助讀者進一步理解相關方案的實現過程。本書適合作為高等院校計算機及相關專業的教材和教學參考書,也可作為相關開發人員的自學用書和參考手冊。
第1章濾鏡 11.1準備工作 21.2規劃應用程序 21.3創建黑白鉛筆素描 31.3.1了解使用減淡和加深技術的方法 41.3.2使用二維卷積實現高斯模糊 61.3.3應用鉛筆素描變換效果 71.3.4使用高斯模糊的優化版本 91.4生成暖調和冷調濾鏡 101.4.1通過曲線平移使用顏色操作 111.4.2使用查找表實現曲線濾鏡 111.4.3設計暖調和冷調效果 121.5創建圖像卡通化效果 151.5.1使用雙邊濾鏡 161.5.2檢測并強調突出的邊緣 171.5.3組合顏色和輪廓以創建卡通效果 191.6綜合演練 201.6.1運行應用程序 201.6.2映射GUI基類 211.6.3了解GUI構造函數 221.6.4了解基本的GUI布局 231.6.5處理視頻流 241.6.6創建自定義濾鏡布局 251.7小結 271.8許可 28第2章深度傳感器和手勢識別 292.1準備工作 302.2規劃應用程序 302.3設置應用程序 312.3.1訪問Kinect3D傳感器 312.3.2使用與OpenNI兼容的傳感器 322.3.3運行應用程序和主函數例程 342.4實時跟蹤手勢 352.5了解手部區域分割 362.5.1找到圖像中心區域最突出的深度 362.5.2應用形態學閉合操作平滑蒙版 382.5.3在分割蒙版中查找連接的組件 392.6執行手形分析 412.6.1確定分割之后手部區域的輪廓 412.6.2查找輪廓區域的凸包 412.6.3尋找凸包的凸缺陷 422.7執行手勢識別 432.7.1區分凸缺陷的不同原因 442.7.2根據伸出的手指數對手勢進行分類 452.8小結 47第3章通過特征匹配和透視變換查找對象 493.1準備工作 503.2列出應用程序執行的任務 503.3規劃應用程序 523.4設置應用程序 523.4.1運行應用程序 523.4.2顯示結果 533.5了解處理流程 543.6學習特征提取 563.6.1特征檢測 563.6.2使用SURF檢測圖像中的特征 573.6.3使用SURF獲取特征描述子 583.7了解特征匹配 593.7.1使用FLANN算法匹配圖像特征 603.7.2執行比率檢驗以消除異常值 603.7.3可視化特征匹配 613.7.4映射單應性估計 643.7.5扭曲圖像 673.8了解特征跟蹤 693.9理解早期異常值檢測和剔除 693.10研究算法原理 723.11小結 743.12許可 75第4章使用運動恢復結構重建3D場景 774.1準備工作 774.2規劃應用程序 784.3了解相機校準知識 814.3.1了解針孔相機模型 814.3.2估算相機內參 834.3.3定義相機校準圖形用戶界面 844.3.4初始化相機校準算法 844.3.5收集圖像和對象點 864.3.6尋找相機矩陣 874.4設置應用程序 884.4.1理解main例程函數 894.4.2實現SceneReconstruction3D類 904.5從一對圖像估計相機的運動 924.5.1使用豐富特征描述子應用點匹配 934.5.2使用光流進行點匹配 944.5.3查找相機矩陣 974.5.4應用圖像校正 994.6重建場景 1014.7了解3D點云可視化 1024.8了解運動恢復結構 1054.9小結 105第5章在OpenCV中使用計算攝影 1075.1準備工作 1075.2規劃應用程序 1075.3了解8位問題 1085.3.1了解RAW圖像 1105.3.2使用伽瑪校正 1115.4了解高動態范圍成像 1155.4.1探索改變曝光度的方法 1185.4.2快門速度 1195.4.3光圈 1195.4.4ISO感光度 1205.4.5使用多重曝光圖像生成HDR圖像 1205.4.6從圖像中提取曝光強度值 1225.4.7估計相機響應函數 1235.4.8使用OpenCV編寫HDR腳本 1245.4.9顯示HDR圖像 1255.5了解全景拼接 1265.5.1編寫腳本參數并過濾圖像 1265.5.2計算相對位置和最終圖片尺寸 1285.5.3查找相機參數 1285.5.4為全景圖創建畫布 1295.5.5將圖像合并在一起 1295.5.6改善全景拼接 1315.6小結 1315.7延伸閱讀 1315.8許可 132第6章跟蹤視覺上的顯著對象 1336.1準備工作 1336.2了解視覺顯著性 1346.3規劃應用程序 1356.4設置應用程序 1366.4.1實現main函數 1366.4.2了解MultiObjectTracker類 1376.5映射視覺顯著性 1386.5.1了解傅里葉分析 1406.5.2了解自然場景統計 1426.5.3使用頻譜殘差法生成顯著圖 1456.5.4檢測場景中的原型對象 1486.6了解均值漂移跟蹤 1496.7自動跟蹤足球場上的所有球員 1516.8了解OpenCV跟蹤API 1546.9綜合演練 1576.10小結 1586.11數據集許可 158第7章識別交通標志 1597.1準備工作 1607.2規劃應用程序 1607.3監督學習概念簡介 1617.3.1訓練過程 1617.3.2測試過程 1637.4探索GTSRB數據集 1647.5解析數據集 1667.6了解數據集特征提取 1697.6.1理解常見的預處理 1707.6.2了解灰度特征 1717.6.3理解色彩空間 1727.6.4使用SURF描述子 1727.6.5映射HOG描述子 1737.7關于SVM 1757.7.1使用SVM進行多類分類 1767.7.2訓練SVM 1777.7.3測試SVM 1787.7.4準確率 1797.7.5混淆矩陣 1807.7.6精確率 1817.7.7召回率 1837.8綜合演練 1857.9使用神經網絡改善結果 1877.10小結 1887.11數據集許可 189第8章識別面部表情 1918.1準備工作 1918.2規劃應用程序 1928.3了解人臉檢測 1948.3.1了解基于Haar的級聯分類器 1948.3.2理解預訓練的級聯分類器 1958.3.3使用預先訓練的級聯分類器 1968.3.4理解FaceDetector類 1988.3.5在灰度圖像中檢測臉部 1998.3.6預處理檢測到的臉部 2008.3.7檢測眼睛部位 2018.3.8變換臉部 2028.4收集數據 2038.4.1收集訓練數據集 2038.4.2運行應用程序 2048.4.3實現數據收集器的圖形用戶界面 2058.4.4擴充基本布局 2068.4.5處理當前幀 2088.4.6存儲數據 2088.5理解面部表情識別 2108.5.1處理數據集 2108.5.2了解PCA 2118.5.3理解MLP 2138.5.4理解感知器 2138.5.5了解深度架構 2158.5.6制作用于面部表情識別的MLP 2178.5.7訓練MLP 2198.5.8測試MLP 2208.5.9運行腳本 2208.6綜合演練 2218.7小結 2248.8參考資料 2248.9許可 225第9章對象分類和定位 2279.1準備工作 2289.2規劃應用程序 2289.3準備推理腳本 2289.4準備數據集 2309.4.1下載并解析數據集 2309.4.2創建一個TensorFlow數據集 2339.5使用卷積神經網絡分類 2369.5.1理解卷積神經網絡 2369.5.2了解遷移學習 2379.5.3準備寵物類型和品種的分類器 2399.5.4訓練和評估分類器網絡 2409.6使用卷積神經網絡進行定位 2429.6.1準備定位器模型 2439.6.2理解反向傳播算法 2459.6.3訓練模型 2479.7推理的實際應用 2489.8小結 2499.9數據集許可 249第10章檢測和跟蹤對象 25110.1準備工作 25210.2規劃應用程序 25210.3準備主腳本 25210.4使用SSD模型檢測對象 25410.5使用其他檢測器 25710.6了解對象檢測器 26010.6.1單對象檢測器 26010.6.2滑動窗口方法 26010.6.3單遍檢測器 26110.6.4了解交并比 26310.6.5訓練SSD和YOLO式網絡 26410.7跟蹤檢測到的對象 26510.7.1實現SORT跟蹤器 26710.7.2理解卡爾曼濾波器 26710.7.3結合使用邊界框跟蹤器和卡爾曼濾波器 27110.7.4將邊界框轉換為觀察值 27210.7.5實現卡爾曼濾波器 27310.7.6將檢測結果與跟蹤器關聯在一起 27610.7.7定義跟蹤器的類 27710.8查看程序的實際應用效果 27910.9小結 280附錄A應用程序性能分析和加速 281A.1用Numba加速 282A.2通過CPU加速 284A.3理解Numba、CUDA和GPU加速 286附錄B設置Docker容器 289B.1定義Dockerfile 289B.2使用GPU 293