:從環(huán)境搭建到實時檢測)
樹莓派4B上的OpenCV人臉識別這話題看著老但真正從零跑通一遍的人其實沒那么多。很多人卡在環(huán)境上更多人卡在照著教程寫了代碼但跑不起來這步。我前前后后在樹莓派4B上折騰了好幾輪從系統(tǒng)安裝到攝像頭調(diào)用再到實時檢測踩了不少坑這篇把完整流程和背后的原理一起寫清楚盡量讓你少走彎路。文章適合手里有樹莓派4B、想入門OpenCV或者想做個人臉檢測demo的朋友不需要深度學習基礎照著一步步來就行。1. 項目全貌與設計思路1.1 為什么選樹莓派4B做視覺項目樹莓派4B算得上是做嵌入式視覺項目的理想起點。它用的是Broadcom BCM2711四核Cortex-A72處理器主頻1.5GHz部分版本能到1.8GHz內(nèi)存有2GB、4GB、8GB可選跑OpenCV的人臉檢測任務4GB版本基本夠用。加上它完整的GPIO接口和豐富的周邊生態(tài)從純軟件的人臉檢測到接入舵機、繼電器做門禁控制都能在一個板子上完成。用樹莓派而不是直接在電腦上跑核心區(qū)別在于性能邊界。電腦上跑OpenCV毫無壓力但樹莓派會逼著你去思考代碼效率和資源占用這對理解計算機視覺項目的落地邏輯很有幫助。另外樹莓派功耗低、體積小很多時候是作為物聯(lián)網(wǎng)終端或者智能設備的核心存在比如小型門禁、訪客統(tǒng)計、安防監(jiān)控這些場景都需要邊緣端實時處理不能依賴云端。選型提示手頭板子是樹莓派3B也能跑只是幀率低一些。如果是Zero系列還是先放一放性能差距比較大體驗會受影響。內(nèi)存方面4GB版本性價比較高跑OpenCV加上其他服務不容易吃緊。1.2 Haar Cascade和深度學習方案怎么選選Haar Cascade不是因為它是最好的算法而是因為它是最合適的起點。現(xiàn)在的人臉檢測基本被深度學習方案如MTCNN、RetinaFace、YOLO系列占據(jù)精度確實更高對光照、姿態(tài)、遮擋的魯棒性也更強。但深度學習模型在樹莓派4B上的部署要么依賴Coral USB加速棒一類的硬件要么得用TensorFlow Lite做量化和推理優(yōu)化環(huán)境配置復雜度高不少對剛接觸OpenCV的新手不太友好。Haar Cascade的優(yōu)勢在于輕量級。它是OpenCV內(nèi)置的經(jīng)典檢測器基于Haar特征和AdaBoost訓練完成模型文件只有幾百KBCPU運行不需要GPU樹莓派4B在320x240分辨率下能達到每秒15幀以上的檢測速度。它能火這么多年核心原因就是夠用——正面人臉檢測、簡單的人臉區(qū)域提取它都勝任而且不挑環(huán)境。我的建議是兩步走先學Haar Cascade把整個流程跑通理解圖像處理、特征檢測、目標識別的基本邏輯再決定要不要往深度學習方向深入。基礎打牢了后面遷移到MediaPipe或者YOLO的時候很多概念是相通的你會發(fā)現(xiàn)自己上手快得多。1.3 整體技術路線拆解這個項目我拆成了四個遞進階段環(huán)境搭建樹莓派系統(tǒng)安裝、Python環(huán)境配置、OpenCV庫安裝靜態(tài)檢測讀入一張圖片用Haar Cascade檢測人臉并畫框驗證算法和參數(shù)實時檢測調(diào)用攝像頭獲取視頻流逐幀做人臉檢測實現(xiàn)實時標注優(yōu)化擴展降低分辨率、灰度處理、跳幀檢測提升幀率可選做簡單的人臉保存和計數(shù)四個階段每個都是獨立的可以單獨驗證。先靜后動的好處是靜態(tài)檢測的輸入確定、問題好排查等你把參數(shù)和原理搞明白了再上實時視頻邏輯才知道怎么去調(diào)優(yōu)。一上來就跑攝像頭出了問題很難定位是攝像頭的問題、光照的問題還是參數(shù)的問題。2. 硬件準備與系統(tǒng)環(huán)境搭建2.1 硬件清單與選購建議樹莓派做視覺項目硬件清單比想象中簡單但有幾個細節(jié)值得注意樹莓派4B建議4GB內(nèi)存版本MicroSD卡建議32GB以上Class 10或A1標準讀寫速度直接影響系統(tǒng)流暢度5V/3A Type-C電源這一步最容易被忽略。供電不足會出現(xiàn)攝像頭打不開、系統(tǒng)隨機重啟、USB設備異常等問題散熱片或小風扇CPU負載高的時候樹莓派會觸發(fā)降頻影響檢測速度攝像頭模塊官方Camera Module V2或兼容的OV5647模塊也可以用USB攝像頭屏幕可選動手能力強的也可以無頭模式SSH操作選型經(jīng)驗官方攝像頭模塊走的是CSI接口CPU占用低但配置上多一步USB攝像頭比如羅技C270即插即用兼容性好樹莓派系統(tǒng)基本都自帶驅(qū)動。新手建議用USB攝像頭把精力集中在OpenCV本身上但要接受畫質(zhì)方面可能不如官方模塊。2.2 系統(tǒng)燒錄與基礎配置樹莓派系統(tǒng)燒錄現(xiàn)在用官方Raspberry Pi Imager就行比之前命令行dd鏡像方便太多了。選系統(tǒng)的時候注意推薦Raspberry Pi OS32位或64位均可建議64位OpenCV安裝時預編譯包更全。燒錄完先別急著插卡開機在Imager里可以預配置幾個關鍵項開啟SSH設置WiFi賬號密碼或者直接插網(wǎng)線設置用戶名和密碼開機后用ssh pi樹莓派IP連上去先做兩件事sudo apt update sudo apt upgrade -y然后擴展文件系統(tǒng)新系統(tǒng)一般自動擴展老版本系統(tǒng)需要手動sudo raspi-config在Interface Options里把Camera接口啟用。如果用官方攝像頭這一步必做否則設備樹里不會加載攝像頭驅(qū)動。常見坑Raspberry Pi OS Bullseye版本及以后默認使用libcamera框架傳統(tǒng)raspistill工具已廢棄。OpenCV調(diào)用攝像頭如果是CSI接口有時候需要加一行gpu_mem128到/boot/config.txt確保GPU有足夠內(nèi)存處理圖像數(shù)據(jù)。USB攝像頭則不受這個影響。2.3 OpenCV安裝的兩種方式與選型樹莓派上裝OpenCV主流有兩種方式各有利弊。方式一pip安裝預編譯包pip install opencv-python這是最簡單的方式安裝快、不用編譯適合大多數(shù)場景。但注意opencv-python默認不包含contrib擴展模塊比如SIFT、SURF這些專利算法如果需要這些功能要裝opencv-contrib-python。方式二源碼編譯git clone https://github.com/opencv/opencv.git git clone https://github.com/opencv/opencv_contrib.git mkdir build cd build cmake -D CMAKE_BUILD_TYPERELEASE \ -D CMAKE_INSTALL_PREFIX/usr/local \ -D WITH_CUDAOFF \ -D BUILD_opencv_python3ON .. make -j4 sudo make install編譯的好處是可以定制功能模塊、優(yōu)化指令集但對樹莓派來說編譯耗時很長2-4小時不等而且容易因為內(nèi)存不足編譯到一半被系統(tǒng)吞掉進程。4GB版本會好一些2GB版本建議加swap空間。我的建議新手直接pip裝把時間花在項目本身。源碼編譯等你真正需要特定模塊、追求極致性能時再考慮。驗證安裝成功python3 -c import cv2; print(cv2.__version__)看到版本號比如4.5.5或4.6.x就是裝好了。3. 靜態(tài)圖片人臉檢測原理與代碼實戰(zhàn)3.1 Haar Cascade算法核心原理Haar Cascade說白了就是一堆圖像特征模板的串聯(lián)篩選過程。它基于Haar特征——一種類似卷積核的小矩形模板用來計算圖像局部區(qū)域的灰度差異。人臉區(qū)域有相對穩(wěn)定的灰度分布規(guī)律比如眼睛區(qū)域比臉頰暗、鼻梁比兩側(cè)亮這些規(guī)律可以通過Haar特征來量化。訓練階段算法從正樣本人臉圖片和負樣本非人臉圖片中提取大量Haar特征用AdaBoost算法篩選出判別能力最強的特征組合成弱分類器再級聯(lián)成強分類器。檢測階段OpenCV用滑動窗口在圖像不同位置、不同尺寸上掃描每一層只做簡單判斷快速排除明顯不是人臉的窗口剩下的才會進入下一層做更精細的判斷。這種級聯(lián)設計的好處是計算量大大減少因為絕大多數(shù)滑動窗口在前幾層就被淘汰了。用人話解釋就像機場安檢排隊第一道關卡只看你有沒有帶大件行李快速淘汰第二道查證件稍復雜第三道才做全身掃描最精細。早一步淘汰節(jié)省的是整個系統(tǒng)的資源。3.2 靜態(tài)檢測代碼實現(xiàn)先新建一個Python腳本比如face_detect_static.py然后寫入以下代碼import cv2 # 加載Haar Cascade分類器 face_cascade cv2.CascadeClassifier( cv2.data.haarcascades haarcascade_frontalface_default.xml ) # 檢查分類器加載是否成功 if face_cascade.empty(): print(分類器加載失敗請檢查文件路徑) exit() # 讀取圖像 img cv2.imread(test_face.jpg) if img is None: print(圖像讀取失敗請確認文件路徑) exit() # 轉(zhuǎn)為灰度圖Haar特征在灰度圖上計算 gray cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 執(zhí)行人臉檢測 faces face_cascade.detectMultiScale( gray, scaleFactor1.1, minNeighbors5, minSize(30, 30) ) print(f檢測到 {len(faces)} 張人臉) # 在原始圖上繪制矩形框 for (x, y, w, h) in faces: cv2.rectangle(img, (x, y), (x w, y h), (0, 255, 0), 2) # 顯示結(jié)果 cv2.imshow(Face Detection, img) cv2.waitKey(0) cv2.destroyAllWindows()核心就一個函數(shù)detectMultiScale。不要被名字嚇到MultiScale表示它會自動對圖像進行多尺度縮放檢測這就是為什么圖片中的人臉大小不同也能被找出來。找到的每個目標返回一個四元組(x, y, w, h)分別代表人臉區(qū)域左上角坐標和寬高。3.3 三個核心參數(shù)解析參數(shù)調(diào)優(yōu)是Haar Cascade最重要的實踐環(huán)節(jié)搞清楚它們的含義就等于掌握了人臉檢測的調(diào)試能力參數(shù)作用設置建議scaleFactor圖像縮放比例每輪檢測將圖像縮小多少倍1.05~1.1較少漏檢但速度慢1.2以上速度快但小臉容易漏掉minNeighbors一個候選區(qū)域至少需要被多少個鄰近檢測確認才保留3~5適合多數(shù)場景真值越高誤檢越少但真臉也容易被濾掉minSize檢測目標最小尺寸像素30x30或40x40起步小于此尺寸的目標直接忽略scaleFactor和minNeighbors是一對需要平衡的參數(shù)。scaleFactor越小檢測越細致但窗口掃描次數(shù)呈倍數(shù)增加minNeighbors越高對檢測結(jié)果的置信度要求越高誤檢少但可能漏掉側(cè)臉或小臉。我實戰(zhàn)中的經(jīng)驗是scaleFactor1.1, minNeighbors5是一個比較穩(wěn)妥的起點在此基礎上根據(jù)實際效果微調(diào)。試錯場景如果你發(fā)現(xiàn)一張合照里遠處幾張臉沒被檢測出來先不要調(diào)minSize優(yōu)先把scaleFactor降到1.05如果你發(fā)現(xiàn)墻上的人像海報也被畫框了把minNeighbors升到6~8誤檢大概率消除。3.4 靜態(tài)檢測中的坐標與繪圖細節(jié)OpenCV的圖像坐標系原點在左上角x軸向右、y軸向下。detectMultiScale返回的(x, y)就是檢測框左上角的坐標繪制矩形時直接使用即可。這里有一個新手常踩的坑檢測框畫在灰度圖上還是彩色圖上。代碼里detectMultiScale傳的是gray灰度圖但cv2.rectangle畫在img彩色圖上兩者沒問題。如果你不小心把檢測和繪制都作用在灰度圖上輸出圖片就是黑白的人臉框的綠色也不會顯示。另外繪制時要確認輸入圖像是BGR格式OpenCV默認以BGR讀圖轉(zhuǎn)灰度再用即可。4. 實時視頻人臉檢測實戰(zhàn)4.1 攝像頭調(diào)用原理與OpenCV的VideoCapture機制實時檢測的基礎是弄清楚OpenCV怎么從攝像頭拿畫面。核心類是cv2.VideoCapture它支持兩種數(shù)據(jù)源攝像頭設備參數(shù)為設備索引比如0和視頻文件參數(shù)為文件路徑。USB攝像頭的原理比較直觀插上后Linux內(nèi)核識別設備生成/dev/video0節(jié)點OpenCV通過Video4Linux2V4L2接口讀取視頻幀。CSI攝像頭的流程不一樣圖像信號先經(jīng)GPU的ISP處理再通過libcamera框架輸出OpenCV實際上是吃libcamera提供的虛擬設備。cap cv2.VideoCapture(0)這里的0就是/dev/video0。如果你的系統(tǒng)里插了多個攝像頭可能需要試1、2等索引或者用攝像頭具體路徑/dev/video1來指定。讀取幀的標準套路ret, frame cap.read()ret是布爾值表示讀取是否成功frame是當前幀的BGR圖像。注意讀取失敗往往不是攝像頭壞了而是權限問題或者索引不對排查時先確認ret的值。4.2 實時檢測完整代碼import cv2 # 加載分類器 face_cascade cv2.CascadeClassifier( cv2.data.haarcascades haarcascade_frontalface_default.xml ) # 打開攝像頭0表示第一個攝像頭 cap cv2.VideoCapture(0) if not cap.isOpened(): print(攝像頭打開失敗) exit() # 設置分辨率320x240在樹莓派4B上有更好的實時性 cap.set(cv2.CAP_PROP_FRAME_WIDTH, 320) cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 240) while True: # 讀取一幀 ret, frame cap.read() if not ret: print(幀讀取失敗) break # 灰度化 gray cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) # 人臉檢測 faces face_cascade.detectMultiScale( gray, scaleFactor1.1, minNeighbors5, minSize(30, 30) ) # 繪制矩形框 for (x, y, w, h) in faces: cv2.rectangle(frame, (x, y), (x w, y h), (0, 255, 0), 2) # 顯示畫面 cv2.imshow(Real-time Face Detection, frame) # 按q鍵退出 if cv2.waitKey(1) 0xFF ord(q): break # 釋放資源 cap.release() cv2.destroyAllWindows()這段代碼邏輯和靜態(tài)檢測幾乎一樣區(qū)別只在于套了個while True循環(huán)不斷讀取幀。cv2.waitKey(1)主要有兩個作用一是給GUI事件循環(huán)處理時間讓畫面能顯示出來二是檢測鍵盤按鍵這里的1表示等待1毫秒不影響循環(huán)速度。如果不加waitKey窗口會無響應甚至不顯示畫面。4.3 性能瓶頸分析與優(yōu)化策略同樣的檢測代碼在電腦上跑60幀毫無壓力在樹莓派4B上可能會掉到10幀以內(nèi)。核心瓶頸在于CPU對每一幀都要做多尺度窗口掃描。分辨率越高、圖像越大掃描次數(shù)越多計算量成倍增長。我的實測數(shù)據(jù)樹莓派4B4GB版本分辨率Haar Cascade幀率觀感640x4805~8 FPS卡頓明顯320x24015~20 FPS基本流暢160x12025 FPS流暢但畫面細節(jié)差想提升實時性優(yōu)先做這三件事降低分辨率320x240是實時性和精度比較平衡的點灰度化檢測在灰度圖上做少一層顏色計算跳幀處理不是每幀都做檢測比如每2幀檢測一次中間幀直接復用上一幀的結(jié)果代碼層面跳幀處理大概是這個思路frame_count 0 detect_every_n 2 # 每2幀檢測一次 while True: ret, frame cap.read() gray cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) if frame_count % detect_every_n 0: faces face_cascade.detectMultiScale(gray, 1.1, 5, minSize(30, 30)) last_faces faces else: faces last_faces frame_count 1這樣做的原理是人臉在連續(xù)幾幀內(nèi)的位置變化不大跳幀檢測犧牲掉的精度極低但換來的是幀率提升接近一倍。4.4 Raspberry Pi OS新老系統(tǒng)下的攝像頭適配這是最容易讓別人幫你忙也最難快速排查的地方。Raspberry Pi OS從Bullseye版本開始默認系統(tǒng)帶的是libcamera傳統(tǒng)raspistill命令已被移除。如果你的OpenCV代碼cap cv2.VideoCapture(0)在CSI攝像頭下出現(xiàn)打不開、黑屏、報錯“Cannot Identify Device”等情況大概率是攝像頭協(xié)議棧不兼容。最簡單的處理方案在/boot/config.txt中啟用legacy camera stacksudo raspi-config # 依次進入 Interface Options - Camera - 選擇 Enable legacy camera support重啟后V4L2設備節(jié)點就會出現(xiàn)OpenCV可以直接讀取。USB攝像頭通常沒這個問題。5. 性能優(yōu)化與功能擴展5.1 換個檢測器LBP Cascade的取舍OpenCV自帶兩種級聯(lián)分類器除了Haar Cascade還有LBP Cascade。LBPLocal Binary Pattern局部二值模式和Haar的核心區(qū)別在于特征提取方式LBP對每個像素和它周圍的像素做大小比較得到一個二進制編碼計算速度快很多模型文件也更小但檢測精度略低。我自己實測做比較LBP的檢測速度可以做到Haar的1.5到2倍誤檢率和漏檢率會高一些在光照均勻的室內(nèi)場景中差異不明顯。代碼切換非常簡單face_cascade cv2.CascadeClassifier( cv2.data.haarcascades lbpcascade_frontalface.xml )路徑換成lbpcascade_frontalface.xml即可其余代碼完全一致。如果你的場景光照穩(wěn)定、對幀率要求高可以試LBP如果光照復雜、寧慢勿錯堅持Haar。5.2 從人臉檢測到人臉識別檢測和目標識別是兩件不同的事。上面我們做的是檢測也就是找出一張圖里哪里有臉如果要識別這張臉是誰需要訓練一個人臉分類器。OpenCV自帶三種傳統(tǒng)人臉識別算法EigenFace、FisherFace、LBPH。LBPH在樹莓派上最實用它對光照變化有一定魯棒性訓練資源消耗小適合小規(guī)模人臉庫。簡單流程是用檢測代碼把人臉區(qū)域裁出來收集一個人的多張樣本圖給LBPH模型打標簽訓練再用新的人臉去匹配。這部分代碼量也不大適合做一個簡易門禁或者家人識別的小項目。5.3 擴展到門禁和監(jiān)控的架構思路做個人臉檢測項目很容易聯(lián)想到門禁系統(tǒng)、訪客計數(shù)這些應用。樹莓派做這些完全可行但要注意架構設計數(shù)據(jù)流攝像頭 - OpenCV檢測 - 人臉區(qū)域 - 識別/保存 - 對應動作動作執(zhí)行GPIO控制舵機開門、繼電器控制電鎖、LED提示云端同步通過HTTP請求把檢測記錄推送到云端數(shù)據(jù)庫本地存儲用SQLite保存檢測日志和人臉圖片樹莓派4B的GPIO引腳特別適合做這件事。簡短提示舵機信號線接GPIO引腳比如BCM編碼的18號引腳注意舵機電源別從樹莓派3.3V引腳接帶不動需要外部供電。真正做門禁系統(tǒng)時要把誤檢和延遲都考慮進去。一次檢測結(jié)果不觸發(fā)動作連續(xù)3幀以上檢測到人臉才觸發(fā)這種投票機制能過濾掉絕大多數(shù)誤檢。延時也是攝像頭采集、檢測、GPIO動作、舵機轉(zhuǎn)動串行下來可能超過500毫秒體驗上就會覺得卡需要動作之間用多線程并行處理。5.4 從傳統(tǒng)CV到深度學習方案的升級路徑如果你做完本項目想往更深的視覺方向走升級路徑很清晰先用MediaPipe的Face Detection模塊Google已經(jīng)出了ARM優(yōu)化版本在樹莓派4B上能實時跑檢測精度甩Haar好幾條街而且配置比OpenCV源碼編譯簡單很多。再往下就是YOLO系列和TensorFlow Lite。YOLOv5n版本在樹莓派4B上經(jīng)過NCNN或者ONNX優(yōu)化后也能跑到10幀以上適合追求更高精度的場景。只是環(huán)境配置復雜度上了一個臺階不推薦作為入門選擇。6. 常見問題與排查技巧實錄6.1 安裝與導入問題ModuleNotFoundError: No module named cv2這個錯誤90%的情況是Python環(huán)境不對。樹莓派系統(tǒng)自帶多個Python版本python3和pip3可能指向不同的解釋器。先執(zhí)行which python3和which pip3確保它們指向同一個環(huán)境。如果是管理權限問題用pip3 install --user opencv-python安裝到當前用戶目錄。import cv2時報錯ImportError: libcblas.so.3OpenCV依賴系統(tǒng)的BLAS數(shù)學庫缺了就會報這個錯。執(zhí)行sudo apt install libatlas-base-dev一般能解決。還有一個庫也建議一起裝sudo apt install libjasper-dev6.2 檢測效果不理想檢測不到人臉的幾個原因按優(yōu)先級排查現(xiàn)象原因解決辦法完全檢測不到minSize設置的比實際人臉大把minSize調(diào)到(20, 20)完全檢測不到光照太暗或逆光增加照明保證面部受光均勻側(cè)臉、低頭檢測不到Haar Cascade本身正面檢測為主換用LBP級聯(lián)器或多角度模型遠處人臉漏檢scaleFactor太大窗口縮放步長大調(diào)小到1.05~1.08誤檢增多minNeighbors太低升到8~10人臉框抖動繪制框在視頻流中經(jīng)常一抖一抖的尤其是低幀率情況下。一個簡單方案是狀態(tài)平滑把上一幀的檢測框坐標保存下來當前幀檢測框跟上一幀做加權平均。這屬于后處理優(yōu)化對幀率沒有負面影響。6.3 性能與硬件問題CPU溫度過高導致降頻樹莓派4B的SoC溫度超過80度會觸發(fā)降頻直接表現(xiàn)是檢測變慢。用vcgencmd measure_temp看一下溫度如果長時間跑視覺任務不帶散熱70度很正常。解決方案就一個加散熱片和風扇。散熱效果立竿見影幀率能穩(wěn)定不少。供電不穩(wěn)導致的隨機崩潰這是樹莓派項目里最難排查的硬件問題之一。癥狀是負載一高就重啟、USB攝像頭無故斷連。用vcgencmd get_throttled檢查如果返回的不是0就說明發(fā)生過欠壓。換一個帶開關的5V/3A電源或者換一根質(zhì)量好的USB線問題基本能解決。幀率時高時低不穩(wěn)定除了CPU溫度問題還有可能是系統(tǒng)后臺服務在搶資源。用htop看一下CPU占用最常見的兇手是系統(tǒng)自帶觸發(fā)更新的unattended-upgrades可以關掉它或者用systemctl stop unattended-upgrades臨時停掉。6.4 攝像頭相關問題攝像頭畫面黑屏或全綠先確認設備節(jié)點存在ls /dev/video*。如果有多個video節(jié)點挨個換索引試。CSI攝像頭在黑屏情況下檢查是否啟用了Camera接口、是否啟用了legacy camera stack。檢測畫面卡住不動最大的可能是攝像頭還在緩沖但cap.read()讀取失敗后沒有正確退出循環(huán)ret為False時不break就會一直用舊的frame。把代碼里if not ret: break加上并加一行打印日志方便排查。USB攝像頭延遲比CSI高實測中USB攝像頭延遲普遍在100~200msCSI攝像頭更小。如果做實時交互項目對延遲敏感可以考慮換官方CSI攝像頭。畫質(zhì)方面兩者其實差不多日常檢測用途沒有明顯區(qū)別。結(jié)尾一點實操后的真心話這整套流程我斷斷續(xù)續(xù)跑了兩周前后重刷了兩次系統(tǒng)最后總結(jié)下來最值得記住的經(jīng)驗是樹莓派上的OpenCV項目問題多半不是出在代碼邏輯上而是環(huán)境配置和性能瓶頸。代碼本身很短幾十行而已但環(huán)境出問題能讓你折騰一整天。所以我的建議是嚴格按照環(huán)境搭建的順序來每個步驟裝完都驗證一下別圖快。后續(xù)你想做門禁、做訪客統(tǒng)計、做家庭成員識別這個框架都能直接往里塞新功能。我從Haar Cascade入門到現(xiàn)在能跑深度學習檢測器回頭想想最值錢的反而是當時把Haar原理搞透的那段時間——理解了特征提取和目標檢測的本質(zhì)后面換什么模型都是換湯不換藥。