2023-10-19 08:46:1494app

Python+OpenCV:機器學習+深度學習40大電腦視覺案例入門到實戰

內容簡介

★☆★ 全面掌握機器學習的影像處理,豐富實例等你來挖掘! ★☆★
 
  機器學習的影像處理,是當前最熱門的研究領域之一,而這其中OpenCV-Python整合了OpenCV C++API和Python的最佳特性,使其成為電腦視覺領域內極具影響力和實用性的工具。
 
  本書透過案例來介紹所有影像相關的技術,包含了基礎演算法、機器學習、深度學習。在基礎部分,有影像安全(影像加密、影像關鍵部位打碼、隱身術)、影像辨識(答題卡辨識、手勢辨識、車牌辨識、指紋辨識、手寫數字辨識)、物體計數、影像檢索、缺陷檢測等。
 
  在機器學習部分,則實作了KNN實現字元(手寫數字、英文字母)辨識、數獨影像求解(KNN)、SVM手寫數字辨識、行人檢測、藝術畫(K平均值聚類)等。在深度學習方面,包括了影像分類、物件辨識(YOLO演算法、SSD演算法)、語義分割、實例分割、風格遷移、姿勢辨識等。
 
  另外在最流行的人臉辨識相關方面,則提供了人臉檢測、人臉辨識、勾勒五官輪廓、人臉對齊、表情辨識、駕駛員疲勞檢測、易容術、性別和年齡辨識等。
 
  本書對電腦視覺涉及的基礎知識進行了全面且系統性的深入梳理,能夠幫助讀者快速掌握該領域的核心基礎知識,此外,透過豐富的實例介紹,也能避免將案例作為單一問題看待的窘境,並且可以從不同的角度理解及分析問題,讓讀者能夠加以組合運用,創建屬於自己獨特的影像處理法寶!
  
  ※ 本書附程式碼,可至深智官網下載:deepmind.com.tw/
 

作者介紹

作者簡介
 
李立宗
 
  南開大學碩士,天津職業技術師範大學資訊技術工程學院副教授,從事電腦視覺領域的教學和研究,對數位影像處理鑽研頗深。主編《OpenCV程式設計案例詳解》等多本圖書,在網易雲課堂主講《OpenCV圖窮匕見》等多門課程。
 

目錄

【第一部分 基礎知識導讀篇】
01 數位影像基礎

1.1 影像表示基礎
1.2 彩色影像的表示 
1.3 應用基礎 
1.4 智慧影像處理基礎
1.5 抽象

02 Python基礎
2.1 如何開始
2.2 基礎語法
2.3 資料型態
2.4 選擇結構
2.5 迴圈結構
2.6 函數
2.7 模組

03 OpenCV基礎
3.1 基礎
3.2 影像處理
3.3 感興趣區域
3.4 遮罩
3.5 色彩處理
3.6 濾波處理
3.7 形態學

【第二部分 基礎案例篇】
04 影像加密與解密

4.1 加密與解密原理
4.2 影像整體加密與解密
4.3 臉部馬賽克及解馬賽克 

05 數位浮水印
5.1 位元平面
5.2 數位浮水印原理
5.3 實現方法
5.4 具體實現
5.5 視覺化浮水印
5.6 擴充學習

06 物體計數
6.1 理論基礎
6.2 核心程式
6.3 程式設計
6.4 實現程式 

07 缺陷檢測
7.1 理論基礎
7.2 程式設計
7.3 實現程式

08 手勢辨識
8.1 理論基礎
8.2 辨識過程
8.3 擴充學習:石頭、剪刀、布的辨識

09 答題卡辨識
9.1 單道題目的辨識
9.2 整張答題卡辨識原理
9.3 整張答題卡辨識程式

10 隱身術
10.1 影像的隱身術
10.2 視訊隱身術

11 以圖搜圖
11.1 原理與實現
11.2 實現程式
11.3 擴充學習

12 手寫數字辨識
12.1 基本原理
12.2 實現細節
12.3 實現程式
12.4 擴充閱讀

13 車牌辨識
13.1 基本原理
13.2 實現程式
13.3 下一步學習

14 指紋辨識
14.1 指紋辨識基本原理
14.2 指紋辨識演算法概述
14.3 尺度不變特徵變換
14.4 基於SIFT的指紋辨識

【第三部分 機器學習篇】
15 機器學習導讀
15.1 機器學習是什麼
15.2 機器學習基礎概念
15.3 OpenCV中的機器學習模組
15.4 OpenCV機器學習模組的使用

16 KNN實現字元辨識
16.1 手寫數字辨識
16.2 英文字母辨識

17 求解數獨影像
17.1 基本過程
17.2 定位數獨影像內的儲存格
17.3 建構KNN模型
17.4 辨識數獨影像內的數字
17.5 求解數獨
17.6 繪製數獨求解結果
17.7 實現程式
17.8 擴充學習

18 SVM數字辨識
18.1 基本流程
18.2 傾斜校正
18.3 HOG特徵提取 
18.4 資料處理 
18.5 建構及使用SVM分類器 
18.6 實現程式
18.7 參考學習 

19 行人檢測
19.1 方向梯度長條圖特徵
19.2 基礎實現
19.3 函數detectMultiScale參數及最佳化
19.4 完整程式 
19.5 參考學習

20 K均值聚類實現藝術畫
20.1 理論基礎
20.2 K均值聚類別模組
20.3 藝術畫

【第四部份 深度學習篇】
21 深度學習導讀

21.1從感知機到類神經網路
21.2 類神經網路如何學習 
21.3 深度學習是什麼
21.4 啟動函數的分類 
21.5 損失函數
21.6 學習的技能與方法
21.7 深度學習遊樂場

22 卷積神經網路基礎
22.1 卷積基礎 
22.2 卷積原理
22.3 填充和步進值 
22.4 池化操作
22.5 感受野
22.6 前置處理與初始化
22.7 CNN

23 DNN模組
23.1 工作流程
23.2 模型匯入
23.3 影像前置處理 
23.4 推理相關函數

24 深度學習應用實踐
24.1 影像分類
24.2 物件辨識
24.3 影像分割
24.4 風格遷移
24.5 姿勢辨識
24.6 說明

【第五部分 人臉辨識篇】
25 人臉檢測

25.1 基本原理 
25.2 串聯分類器的使用
25.3 函數介紹
25.4 人臉檢測實現 
25.5 表情檢測

26 人臉辨識
26.1 人臉辨識基礎
26.2 LBPH人臉辨識
26.3 EigenFaces人臉辨識
26.4 FisherFaces人臉辨識
26.5 人臉資料庫

27 dlib 函數庫
27.1 定位人臉
27.2 繪製關鍵點
27.3 勾勒五官輪廓 
27.4 人臉對齊 
27.5 呼叫CNN實現人臉檢測

28 人臉辨識應用案例
28.1 表情辨識
28.2 駕駛員疲勞檢測
28.3 易容術
28.4 年齡和性別辨識

A 參考文獻

前言
 
  電腦視覺是目前最熱門的研究領域之一,OpenCV-Python整合了OpenCV C++API和Python的最佳特性,成為電腦視覺領域內極具影響力和實用性的工具。
 
  近年來,我深耕電腦視覺領域,從事課程研發工作,在該領域,尤其是OpenCV-Python方面累積了一些經驗,因此經常會收到與該領域相關的諮詢,內容涵蓋影像處理的基礎知識、OpenCV 工具的使用、深度學習的具體應用等多個方面。為了更進一步地把累積的知識以圖文的形式分享給大家,我對該領域的基礎知識進行了系統的整理,撰寫了本書。希望本書的內容能夠為大家在電腦視覺方面的學習提供幫助。
 
  ✤ 本書的主要內容
  本書對電腦視覺涉及的基礎知識進行了全面、系統、深入的梳理,旨在幫助讀者快速掌握該領域的核心基礎知識。全書包含5個部分,40餘個電腦視覺經典案例,主要內容如下。
 
  第1部分--基礎知識導讀篇
  本部分對電腦視覺領域的基礎內容進行了系統的整理,以幫助初學者快速入門。本部分主要包含以下三方面內容:
  ■ 數位影像基礎(第 1 章)
  ■ Python基礎(第 2 章)
  ■ OpenCV基礎(第 3 章)
 
  第2部分--基礎案例篇
  本部分主要為使用OpenCV-Python實現影像處理的經典案例,主要包含:
  ■ 影像加密與解密(第 4 章)
  ■ 數位浮水印(第 5 章)
  ■ 物體計數(第 6 章)
  ■ 缺陷檢測(第 7 章)
  ■ 手勢辨識(第 8 章)
  ■ 答題卡辨識(第 9 章)
  ■ 隱身術(第 10 章)
  ■ 以圖搜圖(第 11 章)
  ■ 手寫數字辨識(第 12 章)
  ■ 車牌辨識(第 13 章)
  ■ 指紋辨識(第 14 章)
 
  上述案例採用傳統的影像處理方法解決問題,以幫助讀者理解以下基礎知識:
  ■ 影像前置處理方法(設定值處理、形態學操作、影像邊緣檢測、濾波處理)
  ■ 色彩空間處理
  ■ 邏輯運算(逐位元與、逐位元互斥)
  ■ ROI(感興趣區域)
  ■ 計算影像輪廓
  ■ 特徵值提取、比對
  ■ 距離計算
 
  第3部分--機器學習篇
  本部分主要對機器學習基礎知識及K近鄰模組、SVM演算法、K平均值聚類別模組進行了具體介紹。在上述基礎上,使用OpenCV機器學習模組實現了下述案例:
  ■ KNN實現字元(手寫數字、英文字母)辨識(第 16 章)
  ■ 求解數獨影像(第 17 章 )
  ■ SVM數字辨識(第 18 章)
  ■ 行人檢測(第 19 章)
  ■ K平均值聚類實現藝術畫(第 20 章)
  
  第4部分--深度學習篇
  本部分介紹了深度學習基礎知識、卷積神經網路基礎知識、深度學習案例。
  在第24章介紹了使用DNN 模組實現電腦視覺的經典案例,主要有:
  ■ 影像分類
  ■ 物件辨識(YOLO 演算法、SSD 演算法)
  ■ 語義分割
  ■ 實例分割
  ■ 風格遷移
  ■ 姿勢辨識
  
  第5部分--人臉辨識篇
  本部分對人臉辨識的相關基礎、dlib函數庫、人臉辨識的典型應用進行了深入介紹。主要案例如下:
  ■ 人臉檢測(第 25 章)
  ■ 人臉辨識(第 26 章)
  ■ 勾勒五官輪廓(第 27 章)
  ■ 人臉對齊(第 27 章)
  ■ 表情辨識(第 28 章)
  ■ 駕駛員疲勞檢測(第 28 章)
  ■ 易容術(第 28 章)
  ■ 年齡和性別辨識(第 28 章)
 
  ✤ 本書的主要特點
  本書在內容的安排、組織、設計上遵循了以下想法。
  1. 適合入門
  第1部分對電腦視覺的基礎知識進行了全面的梳理,主要包括數位影像基礎、Python基礎、OpenCV基礎。重點對電腦視覺中用到的基礎理論、演算法、影像處理,Python程式設計基礎語法,OpenCV核心函數進行了介紹。該部分內容能夠幫助沒有電腦視覺基礎的讀者快速入門,也能夠幫助有一定電腦視覺基礎的讀者對核心基礎知識進行快速梳理。
 
  2. 以案例為載體
  按照基礎知識安排的教材的特點在於「相互獨立,完全窮盡」(Mutually Exclusive Collectively Exhaustive,MECE),能夠保證介紹的基礎知識「不重疊,不遺漏」。但是,跟著教材學習可能會存在以下問題:「了解了每一個基礎知識,但在遇到問題時感覺無從下手,不知道該運用哪些基礎知識來解決當前問題。」
 
  基礎知識是一個個小石子,解決問題的想法是能夠把許多石子字串起來的繩子。繩子可以指定石子更大的意義和價值,解決問題能夠讓基礎知識得以運用。
 
  本書透過案例來介紹相關基礎知識,儘量避免將案例作為一個孤立的問題來看待,而是更多地考慮基礎知識之間的銜接、組合、應用場景等。舉例來說,本書採用了多種不同的方式來實現手寫數字辨識,以幫助大家更進一步地從不同角度理解和分析問題。本書從案例實戰的角度展開,將案例作為一根線,把所有基礎知識串起來,以幫助讀者理解基礎知識間的關係並將它們組合運用,提高讀者對基礎知識的理解和運用能力。
 
  3. 輕量級實現
  儘量以簡單明瞭的方式實現一個問題,以更進一步地幫讀者搞清問題的核心和演算法。用最簡化的方式實現最小可用系統(Minimum Viable Product,MVP),用最低的成本和代價快速驗證和迭代一個演算法,這樣更有利於理解問題、解決問題。在成本最低的前提下,利用現有的資源,以最快的速度行動起來才是最關鍵的。所以,本書盡可能簡化每一個案例,儘量將程式控制在100 行左右。希望透過這樣的設計,讓讀者更進一步地關注演算法核心。
 
  4. 專注演算法
  抽象可以幫助讀者遮罩無關細節,讓讀者能夠專注於工具的使用,極大地提高工作效率。OpenCV及很多其他庫提供的函數都是封裝好的,只需要直接把輸入傳遞給函數,函數就能夠返回需要的結果。因此,本書沒有對函數做過多介紹,而是將重點為實現案例所使用的核心演算法上。
 
  5. 圖解
  一圖勝千言。在描述關係、流程等一些相對比較複雜的基礎知識時,單純使用語言描述,讀者一時可能會難以理解。在面對複雜的基礎知識時,有經驗的學習者會根據已有基礎知識繪製一幅與該基礎知識有關的圖,從而進一步理解該基礎知識。因為影像能夠更加清晰、直觀、細緻地將基礎知識的全域、結構、關係、流程、脈絡等訊息本體現出來。本書配有大量精心製作的圖表,希望能夠更進一步地幫助讀者理解相關基礎知識。
 
  6. 案例全面
  本書涉及的40餘個案例都是相關領域中比較一般來說,涵蓋了電腦視覺領域的核心應用和關鍵基礎知識。案例主要包括四個方面。
 
  ■ 基礎部分:影像安全(影像加密、影像關鍵部位打碼、隱身術)、影像辨識(答題卡辨識、手勢辨識、車牌辨識、指紋辨識、手寫數字辨識)、物體計數、影像檢索、缺陷檢測等。
 
  ■ 機器學習:KNN實現字元(手寫數字、英文字母)辨識、數獨影像求解(KNN)、SVM手寫數字辨識、行人檢測、藝術畫(K 平均值聚類)等。
 
  ■ 深度學習:影像分類、物件辨識(YOLO 演算法、SSD 演算法)、語義分割、實例分割、風格遷移、姿勢辨識等。
 
  ■ 人臉辨識相關:人臉檢測、人臉辨識、勾勒五官輪廓、人臉對齊、表情辨識、駕駛員疲勞檢測、易容術、性別和年齡辨識等。
 
  ✤ 感謝
  首先,感謝我的導師高鐵槓教授,感謝高教授帶我走進了電腦視覺這一領域,以及一直以來給我的幫助。感謝OpenCV 開放原始碼庫的所有貢獻者讓OpenCV 變得更好,讓電腦視覺領域更加精彩。
 
  感謝本書的責任編輯符隆美老師,她積極促成本書的出版,修正了書中的技術性錯誤,並對本書內容進行了潤色。感謝本書的封面設計老師為本書設計了精美的封面。感謝為本書出版而付出辛苦工作的每一位老師。
 
  感謝合作單位天津撥雲諮詢服務有限公司為本書提供資源支援。
  感謝家人的愛,我愛你們。
 
  ✤ 互動方式
  限於本人水準,書中存在很多不足之處,歡迎大家提出寶貴的意見和建議,也非常歡迎大家跟我交流關於OpenCV 的各種問題,我的電子郵件是lilizong@gmail.com。