智能硬件與機器視覺:基於樹莓派、Python 和 OpenCV
內容描述
這是一部講解如何利用樹莓派、Python、OpenCV等軟硬件搭建智能硬件並在其上實現圖像分析、
文字識別、人臉識別與追蹤、視頻監控等機器視覺功能的實用性著作。
全書一共11章。
第1~4章首先講解了機器視覺在智能硬件領域的應用場景以及智能硬件上4種常見的機器視覺技術方案;
然後講解了樹莓派和OpenCV的安裝、配置以及其他準備工作;
最後通過一些簡單的案例和代碼手把手教讀者如何使用OpenCV。
第5~11章是本書的核心內容,通過幾個具體的綜合案例講解瞭如何使用樹莓派低成本玩轉如下機器視覺場景:
拍攝照片和視頻、處理相機的原始數據、道路和商場的人流統計、
道路信息的文字識別、人臉識別與追蹤、中央AI視頻監控等。
以上案例循序漸進,環環相扣,所有代碼均可在樹莓派上運行,
可輕松移植到任何ARM開發板上。
隨著國家大力發展5G技術,越來越多的智能硬件設備即將出現在我們的工作和生活中。
自動駕駛、智慧城市、工業互聯網等基礎設施的發展離不開機器視覺的輔助,
二者的結合將為5G的關鍵應用——遠程醫療、超高清直播、
安防攝像頭、自動駕駛——提供關鍵技術支撐。
作為實施5G概念的主體,智能硬件可與機器視覺搭配組合,
廣泛用於智能門鎖,機場、火車站、地鐵,智能網聯汽車大屏交互系統,
門店掃臉支付,5G安防攝像頭等線下場景中。
通過本書,你將學會使用樹莓派、Python和OpenCV搭建一個低成本的智能硬件平臺,
並在這個平臺上實現如下功能:
拍攝照片和視頻;
道路和商場的人流量統計;
道路信息的文字識別;
單人臉追蹤;
人臉追蹤安防攝像頭;
多路攝像頭中央AI監控。
目錄大綱
前言
第1章 智能硬件與機器視覺1
1.1 機器視覺在智能硬件領域的應用1
1.1.1 機器視覺在智慧城市的應用2
1.1.2 機器視覺與5G的協同效應4
1.2 智能硬件上的機器視覺技術方案選型5
1.2.1 方案A:樹莓派5
1.2.2 方案B:BeagleBoard7
1.2.3 方案C:NVIDIA Jetson8
1.2.4 方案D:Google Coral Dev Board + Edge TPU9
1.3 本章小結10
第2章 樹莓派軟硬件準備11
2.1 刷寫系統11
2.2 硬件連接14
2.3 Linux系統的基本操作17
2.3.1 Linux常用命令17
2.3.2 Vim編輯器的使用19
2.4 遠程連接樹莓派20
2.4.1 使用SSH連接樹莓派21
2.4.2 使用VNC連接樹莓派24
2.5 使用相機模塊拍攝一張照片28
2.6 本章小結31
第3章 安裝OpenCV32
3.1 使用pip安裝OpenCV32
3.1.1 在Ubuntu上使用pip安裝OpenCV33
3.1.2 在macOS上使用pip安裝OpenCV35
3.1.3 在樹莓派上使用pip安裝OpenCV36
3.1.4 註意事項38
3.2 樹莓派源碼編譯安裝OpenCV 439
3.2.1 擴展TF卡並安裝依賴39
3.2.2 下載OpenCV 442
3.2.3 為OpenCV 4搭建基於Python 3的虛擬環境42
3.2.4 構建和編譯OpenCV 444
3.2.5 測試OpenCV 447
3.2.6 可能遇到的問題47
3.3 本章小結49
第4章 通過案例手把手入門OpenCV50
4.1 開始前的準備50
4.1.1 環境準備50
4.1.2 項目代碼準備51
4.2 OpenCV圖像簡單處理51
4.2.1 加載和顯示圖像51
4.2.2 訪問單個像素53
4.2.3 數組切片和裁剪54
4.2.4 調整圖像大小55
4.2.5 旋轉圖像57
4.2.6 平滑圖像60
4.2.7 在圖像上繪圖60
4.2.8 運行第一個OpenCV教程的Python腳本64
4.3 OpenCV圖像對象計數64
4.3.1 目標對象計數64
4.3.2 將圖像轉換為灰階65
4.3.3 邊緣檢測67
4.3.4 閾值處理68
4.3.5 檢測和繪制輪廓68
4.3.6 腐蝕和膨脹70
4.3.7 蒙版和按位操作71
4.3.8 運行第二個OpenCV教程的Python腳本72
4.4 本章小結72
第5章 使用Python拍攝照片、視頻73
5.1 安裝picamera環境73
5.1.1 安裝Raspbian系統73
5.1.2 安裝其他系統74
5.1.3 升級相機固件74
5.1.4 安裝樹莓派攝像頭模組75
5.1.5 控制V1版的LED燈78
5.2 使用攝像頭拍攝照片78
5.2.1 捕獲照片並存為文件79
5.2.2 捕獲照片並存為流79
5.2.3 捕獲照片並存為PIL圖像80
5.2.4 捕獲調整了大小的圖像80
5.2.5 快拍和連拍的技巧81
5.2.6 捕獲延時攝影序列82
5.2.7 弱光下拍照82
5.2.8 網絡直播83
5.3 使用攝像頭拍攝視頻85
5.3.1 錄制視頻文件85
5.3.2 錄制視頻流86
5.3.3 錄制拆分為多個文件86
5.3.4 錄制循環視頻流87
5.3.5 錄制網絡視頻流88
5.3.6 視頻預覽疊加圖像加水印90
5.3.7 視頻輸出疊加文本、時間戳92
5.4 本章小結93
第6章 使用Python處理相機原始數據94
6.1 捕獲並直接編碼94
6.1.1 捕獲並編碼為numpy數組94
6.1.2 捕獲並編碼為opencv對象95
6.1.3 捕獲未編碼圖像(YUV)96
6.1.4 捕獲編碼圖像(RGB)99
6.1.5 自定義編碼器100
6.2 多種捕獲方法102
6.2.1 錄像時截屏102
6.2.2 多種分辨率下錄制103
6.2.3 特殊文件輸出103
6.2.4 Bayer-Raw數據獲取104
6.3 樹莓派相機的實際應用109
6.3.1 自定義輸出:運動檢測相機的代碼實現109
6.3.2 循環視頻流切割:行車記錄儀碰撞預警功能111
6.3.3 快速捕獲和處理:連拍算法實現112
6.3.4 錄制未經編碼的視頻:顏色檢測116
6.3.5 快速捕獲和流傳輸:網絡流直播117
6.3.6 網絡流媒體:結合網頁技術直播119
6.3.7 錄制運動矢量數據:檢測視頻中的手勢121
6.4 常見錯誤集錦125
6.5 本章小結128
第7章 道路、商場人流統計129
7.1 原理解析130
7.1.1 目標檢測與目標追蹤130
7.1.2 形心追蹤算法原理131
7.1.3 人群計數器原理133
7.2 軟件環境準備134
7.3 使用Python實現人群計數器135
7.3.1 目錄結構135
7.3.2 形心追蹤器類CentroidTracker的實現135
7.3.3 追蹤目標類TrackableObject的實現141
7.3.4 人群計數器的實現141
7.3.5 樹莓派人群計數器測試149
7.4 本章小結149
第8章 道路信息文字識別150
8.1 EAST深度學習模型151
8.1.1 EAST模型簡介151
8.1.2 相關軟件包的安裝152
8.1.3 項目工程結構153
8.2 檢測圖片中的文字153
8.2.1 代碼編寫和解讀153
8.2.2 效果測試157
8.3 檢測視頻中的文字159
8.3.1 代碼編寫和解讀159
8.3.2 效果測試163
8.4 對文字內容進行識別164
8.4.1 Tesseract介紹和安裝164
8.4.2 使用Tesseract實現文字識別的原理166
8.4.3 代碼編寫和解讀168
8.4.4 效果測試173
8.5 本章小結175
第9章 簡單人臉追蹤176
9.1 核心原理和效果簡介176
9.2 環境準備和代碼編寫177
9.2.1 使用Python實現形心追蹤算法177
9.2.2 人臉追蹤的實現182
9.3 測試人臉跟蹤效果186
9.3.1 測試效果186
9.3.2 缺陷與不足187
9.4 本章小結187
第10章 人臉追蹤安防攝像頭188
10.1 總體設計思路188
10.1.1 硬件組裝清單188
10.1.2 PID控制反饋算法189
10.1.3 人臉識別算法:基於Haar特徵的級聯分類器190
10.2 軟件環境準備193
10.2.1 將smbus安裝在py3cv3環境中193
10.2.2 打開樹莓派的Camera接口並安裝驅動193
10.2.3 安裝gpiozero195
10.2.4 安裝imutils195
10.3 編寫代碼195
10.3.1 項目結構196
10.3.2 實時調節反饋機制:PIDController196
10.3.3 在視頻中檢測到人臉198
10.3.4 使用GPIOZERO進行舵機控制200
10.4 使用PID調節二自由度雲台206
10.4.1 PID參數調試206
10.4.2 運行二自由度人臉追蹤攝像頭208
10.5 本章小結208
第11章 多路攝像頭中央AI監控209
11.1 網絡傳輸OpenCV幀209
11.1.1 實現目標和方法209
11.1.2 消息傳遞的概念210
11.1.3 項目實現流程211
11.2 ImageZMQ消息傳遞系統211
11.2.1 什麽是ZMQ212
11.2.2 基於ZMQ的圖片消息傳遞庫:ImageZMQ212
11.2.3 ImageZMQ依賴的軟件包212
11.2.4 項目整體介紹213
11.3 多路樹莓派攝像頭配置214
11.3.1 配置樹莓派客戶端的主機名214
11.3.2 樹莓派發送OpenCV視頻流216
11.3.3 將代碼放到樹莓派目錄中218
11.4 配置中央監控室服務器端和Caffe框架218
11.4.1 安裝Caffe框架218
11.4.2 實現OpenCV視頻監控接收器218
11.4.3 使用MobileNet SSD對幀進行推理220
11.5 使用OpenCV實現視頻流網絡傳輸225
11.6 本章小結226
作者介紹
陳佳林
技術極客,“骨灰級”樹莓派愛好者,在機器人、
智能硬件、軟硬件協同開發等方面有較深入的研究。
資深安全技術專家,看雪科技高級研究員,在移動安全領域經驗豐富,
多次主持召開銀行、電信、政府等行業的培訓並參與安全項目的研究。
作為團隊成員參與GeekPwn 2018挑戰賽並獲得亞軍,多次在“看雪安全開發者峰會”
“補天白帽大會”等會議上發表主題演講。
另著有《樹莓派創客:手把手教你搭建機器人》
《樹莓派創客:手把手教你玩轉人工智能》。