前言
電腦視覺是目前最熱門的研究領域之一,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。
編者