人工智慧
,一個已經被談論了幾十年的概念(最早是
圖靈
在
1950年
提出)。如今這幾年,相關技術的發展速度是越來越快。高大上如無人駕駛、智慧安防、AI輔助診斷,接地氣如刷臉支付、內容推薦、自動翻譯等,眾多領域藉助人工智慧的力量而進化。從百度搜索指數的變化,也能從一個側面反映出關注度在不斷上升。
而這其中,很多應用都涉及到“
計算機視覺
”這樣一個細分領域。簡單來說,就是將影象資訊轉化為計算機可以處理的數字資訊,從而讓計算機能“看得見”。這個資訊不僅僅是二維的圖片,也包括三維場景、影片序列等。基本上所有需要用到攝像頭、圖片、影片的應用場景,都離不開計算機視覺的支援。因此,這也是人工智慧領域中比較熱門的一個方向。
來自《2017年人工智慧行業發展研究報告白皮書》- IT耳朵&;amp;amp;IT桔子
而說到計算機視覺,就不能不提到
OpenCV
,它是一個歷史悠久、功能豐富、社群活躍的開源視覺開發庫。一方面,它提供了計算機視覺以及影象處理方面最常用最基礎的功能支援,是開發的必備工具;另一方面,它在新版本中緊跟潮流,加入對新的演算法、硬體的支援(v3。3 正式引入 DNN)。
OpenCV 基於 C++ 編寫,但提供了 Python、Ruby、MATLAB 等多種語言介面。這對於習慣使用 Python 開發的人工智慧從業者來說非常方便。之前的不少習題和開發案例中,我們都有用到過。今天我們再用幾個常見的例子,演示下 OpenCV-Python 的強大功能。
安裝:
OpenCV 的安裝,不同平臺不同版本會有一些差異。安裝前需要裝好
numpy
,強烈建議先安裝好
Anaconda
,然後直接透過命令安裝:
pip install opencv-python
如果你運氣好,程式碼裡執行
import cv2
沒報錯就是成功了。
但大多數時候可能不行。你可以考慮去這裡下載安裝檔案:
https://www。
lfd。uci。edu/~gohlke/pyt
honlibs/#opencv
然後透過命令從本地安裝:
pip install opencv_python‑3。4。3‑cp37‑cp37m‑win_amd64。whl
這裡下載的安裝檔案
版本
號務必要和你本機的
Python 版本
和
位數
相對應。
如果安裝時還有其他問題,可在網上直接搜尋報錯,通常都會有解決方案,這裡不一一贅述。
基本的影象讀寫:
我們用影象處理的經典範例
Lenna
來做測試
可自行搜尋這幅影象的來頭
import
cv2
as
cv
# 讀圖片
img
=
cv
。
imread
(
‘img/Lenna。png’
)
# 圖片資訊
(
‘圖片尺寸:’
,
img
。
shape
)
(
‘圖片資料:’
,
type
(
img
),
img
)
# 顯示圖片
cv
。
imshow
(
‘pic title’
,
img
)
cv
。
waitKey
(
0
)
# 新增文字
cv
。
putText
(
img
,
‘Learn Python with Crossin’
,
(
50
,
150
),
cv
。
FONT_HERSHEY_SIMPLEX
,
1
,
(
255
,
255
,
255
),
4
)
# 儲存圖片
cv
。
imwrite
(
‘img/Lenna_new。png’
,
img
)
OpenCV-Python 中的影象資料使用了
numpy 庫的 ndarray 型別
進行管理,便於進行各種數值計算和轉換。
常見的影象處理:
import
numpy
as
np
# 灰度圖
img_gray
=
cv
。
cvtColor
(
img
,
cv
。
COLOR_BGR2GRAY
)
cv
。
imwrite
(
‘img/Lenna_gray。png’
,
img_gray
)
# 二值化
_
,
img_bin
=
cv
。
threshold
(
img_gray
,
127
,
255
,
cv
。
THRESH_BINARY
)
cv
。
imwrite
(
‘img/Lenna_bin。png’
,
img_bin
)
# 平滑
img_blur
=
cv
。
blur
(
img
,
(
5
,
5
))
cv
。
imwrite
(
‘img/Lenna_blur。png’
,
img_blur
)
# 邊緣提取
_
,
contours
,
_
=
cv
。
findContours
(
img_bin
,
cv
。
RETR_TREE
,
cv
。
CHAIN_APPROX_SIMPLE
)
img_cont
=
np
。
zeros
(
img_bin
。
shape
,
np
。
uint8
)
cv
。
drawContours
(
img_cont
,
contours
,
-
1
,
255
,
3
)
cv
。
imwrite
(
‘img/Lenna_cont。png’
,
img_cont
)
這幾種都屬於
數字影象處理
的常用方法。OpenCV-Python 基本都封裝好的介面,只需一兩行程式碼就能完成,在實際專案開發中非常方便。
我們程式設計教室之前的“
每週一坑
”欄目裡,和影象相關的題目基本都可以用 OpenCV-Python 來解決。
對這方面知識感興趣的,可以找本數字影象處理的相關教材系統地看一遍,瞭解數字影象處理的基礎。
除了基礎功能,OpenCV 在程式碼附帶的
Samples
裡還提供了一些經典開發案例:
人臉檢測
https://
github。com/opencv/openc
v/blob/master/samples/python/facedetect。py
使用方法
python facedetect。py
核心程式碼
cascade
=
cv
。
CascadeClassifier
(
“haarcascade_frontalface_alt。xml”
)
rects
=
cascade
。
detectMultiScale
(
img
,
scaleFactor
=
1。3
,
minNeighbors
=
4
,
minSize
=
(
30
,
30
),
flags
=
cv
。
CASCADE_SCALE_IMAGE
)
此功能基於
Haar 分類器
實現,專案中附帶有訓練好的分類器檔案。此外,你還可以使用 OpenCV 訓練針對其他目標特徵的分類器。
我們之前的開發案例 《Python 送你一頂聖誕帽》 就使用了 OpenCV-Python 的人臉識別程式碼。獲取程式碼請在公眾號(Crossin的程式設計教室)裡回覆關鍵字
聖誕帽
姿態識別
https://
github。com/opencv/openc
v/blob/master/samples/dnn/openpose。py
使用方法
python openpose。py ——model pose。caffemodel ——proto pose。prototxt ——dataset MPI
核心程式碼
net
=
cv
。
dnn
。
readNetFromCaffe
(
args
。
proto
,
args
。
model
)
inp
=
cv
。
dnn
。
blobFromImage
(
frame
,
1。0
/
255
,
(
inWidth
,
inHeight
),
(
0
,
0
,
0
),
swapRB
=
False
,
crop
=
False
)
net
。
setInput
(
inp
)
out
=
net
。
forward
()
詳情參見文章: 用 Python 實現抖音尬舞機
獲取程式碼請在公眾號(Crossin的程式設計教室)裡回覆關鍵字
姿態
風格遷移
https://
github。com/opencv/openc
v/blob/master/samples/dnn/fast_neural_style。py
使用方法
python fast_neural_style。py ——model starry_night。t7
核心程式碼
net
=
cv
。
dnn
。
readNetFromTorch
(
args
。
model
)
net
。
setPreferableBackend
(
cv
。
dnn
。
DNN_BACKEND_OPENCV
);
inp
=
cv
。
dnn
。
blobFromImage
(
frame
,
1。0
,
(
inWidth
,
inHeight
),
(
103。939
,
116。779
,
123。68
),
swapRB
=
False
,
crop
=
False
)
net
。
setInput
(
inp
)
out
=
net
。
forward
()
詳情參見文章: Python+OpenCV 十幾行程式碼模仿世界名畫
獲取程式碼請在公眾號(Crossin的程式設計教室)裡回覆關鍵字
名畫
以上便是 OpenCV-Python 的一些簡單應用。OpenCV 官方 Samples 程式碼裡還有很多有趣的例子(地址:
https://
github。com/opencv/openc
v
)更強大的功能也有待你在開發中逐步體會。
希望這篇管中窺豹的文章可以讓各位對 OpenCV 和計算機視覺有一個初步的瞭解和直觀的認識,進而共同參與到人工智慧這場技術浪潮中來。
獲取更多學習資源和程式碼例項,請在公眾號(Crossin的程式設計教室)裡回覆關鍵字
專案
════
其他文章及回答:
如何自學Python|新手引導|精選Python問答|Python單詞表|人工智慧|嘻哈|爬蟲|我用Python|高考|requests|AI平臺
歡迎搜尋及關注:
Crossin的程式設計教室