深度學習篇---Opencv中Haar級聯分類器的自定義


文章目錄

  • 1. 準備工作
    • 1.1安裝 OpenCV
    • 1.2準備數據集
      • 1.2.1正樣本
      • 1.2.2負樣本
  • 2. 數據準備
    • 2.1 正樣本的準備
      • 2.1.1步驟
      • 2.1.2生成正樣本描述文件
      • 2.1.3示例命令
      • 2.1.4正樣本描述文件格式
    • 2.2 負樣本的準備
      • 2.2.1步驟
      • 2.2.2負樣本描述文件格式
  • 3. 訓練分類器
    • 3.1命令格式
    • 3.2參數說明
  • 4. 訓練過程
    • 4.1訓練輸出
  • 5. 測試分類器
    • 5.1示例代碼
  • 6. 優化分類器
  • 總結


訓練自定義的 Haar 級聯分類器是一個復雜但非常有用的過程,允許你檢測特定的目標對象。以下是詳細的步驟流程,包括數據準備、工具使用和訓練過程


1. 準備工作

在開始訓練之前,確保你已經安裝了 OpenCV,并且可以使用 OpenCV 提供的工具(如 opencv_createsamplesopencv_traincascade)。

1.1安裝 OpenCV

如果你還沒有安裝 OpenCV,可以通過以下命令安裝:
pip install opencv-python opencv-python-headless
確保 OpenCV 的二進制工具(如 **opencv_createsamples** 和 **opencv_traincascade**)可用。

1.2準備數據集

訓練 Haar 級聯分類器需要兩類數據:

1.2.1正樣本

    正樣本(Positive Samples):包含**目標對象的圖像**。

1.2.2負樣本

    負樣本(Negative Samples):不包含目標對象的圖像。

2. 數據準備

2.1 正樣本的準備

正樣本是包含目標對象的圖像。為了訓練分類器,正樣本需要滿足以下要求:

1.圖像中只包含目標對象。2.目標對象在圖像中的位置和大小應盡量一致。3.圖像背景應盡量簡單。

2.1.1步驟

1.收集包含目標對象的圖像。2.使用圖像編輯工具(如 GIMP 或 Photoshop)裁剪圖像,確保目標對象位于圖像中心,并且背景干凈。3.將所有正樣本圖像調整為相同的尺寸(例如 24x24 像素)。4.將正樣本圖像保存到一個文件夾中,例如 positive_images/。

2.1.2生成正樣本描述文件

使用 opencv_createsamples 工具生成正樣本的描述文件。描述文件是一個文本文件每一行描述一個正樣本圖像及其目標對象的位置

2.1.3示例命令

opencv_createsamples -info positive_images.txt -vec samples.vec -num 1000 -w 24 -h 24
  1. -info positive_images.txt:指定正樣本描述文件的路徑。
  2. -vec samples.vec:生成的正樣本向量文件
  3. -num 1000:正樣本的數量。
  4. -w 24 -h 24:樣本圖像的寬度和高度。

2.1.4正樣本描述文件格式

positive_images.txt 文件的每一行格式如下:

image_path num_objects x y width height
positive_images/img1.jpg 1 0 0 24 24
positive_images/img2.jpg 1 0 0 24 24

2.2 負樣本的準備

負樣本是不包含目標對象的圖像。負樣本用于訓練分類器區分目標和非目標區域

2.2.1步驟

1.收集大量不包含目標對象的圖像。2.將這些圖像保存到一個文件夾中,例如 negative_images/。3.創建一個負樣本描述文件 negatives.txt,每一行包含一個負樣本圖像的路徑。

2.2.2負樣本描述文件格式

negatives.txt 文件的每一行格式如下:

image_path
negative_images/bg1.jpg
negative_images/bg2.jpg

3. 訓練分類器

使用 opencv_traincascade 工具訓練 Haar 級聯分類器。

3.1命令格式

opencv_traincascade -data output_dir -vec samples.vec -bg negatives.txt \
-numStages 20 -minHitRate 0.995 -maxFalseAlarmRate 0.5 -numPos 1000 \
-numNeg 500 -w 24 -h 24 -mode ALL -precalcValBufSize 2048 \
-precalcIdxBufSize 2048

3.2參數說明

1.-data output_dir:指定輸出目錄,訓練結果將保存在此目錄中。2.-vec samples.vec:正樣本向量文件。3.-bg negatives.txt:負樣本描述文件。4.-numStages 20:訓練的級聯階段數(通常為 10-20)。5.-minHitRate 0.995:每個階段的最小命中率(通常為 0.995)。6.-maxFalseAlarmRate 0.5:每個階段的最大誤檢率(通常為 0.5)。7.-numPos 1000:每個階段使用的正樣本數量。8.-numNeg 500:每個階段使用的負樣本數量。9.-w 24 -h 24:樣本圖像的寬度和高度。10.-mode ALL:使用所有 Haar 特征類型。11.-precalcValBufSize 2048:預計算值緩沖區大小(以 MB 為單位)。12.-precalcIdxBufSize 2048:預計算索引緩沖區大小(以 MB 為單位)。

4. 訓練過程

訓練過程可能需要數小時甚至數天,具體時間取決于數據集的大小和計算機的性能。訓練過程中會顯示每個階段的進度和性能指標

4.1訓練輸出

每個階段會生成一個 XML 文件(如 stage1.xml、stage2.xml 等)。
最終生成的分類器文件為 cascade.xml,保存在 output_dir 中。

5. 測試分類器

訓練完成后,可以使用生成的 cascade.xml 文件進行目標檢測。

5.1示例代碼

import cv2#加載自定義 Haar 級聯分類器
custom_cascade = cv2.CascadeClassifier('output_dir/cascade.xml')#讀取圖像
img = cv2.imread('test.jpg')#轉換為灰度圖像
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)#檢測目標
objects = custom_cascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=5, minSize=(30, 30))#繪制檢測結果
for (x, y, w, h) in objects:cv2.rectangle(img, (x, y), (x+w, y+h), (255, 0, 0), 2)#顯示結果
cv2.imshow('Detected Objects', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

6. 優化分類器

如果分類器的性能不理想,可以嘗試以下優化方法:

1.增加正樣本和負樣本的數量。
2.調整訓練參數(如 -numStages、-minHitRate、-maxFalseAlarmRate)。
3.使用更高質量的樣本圖像。

總結

訓練自定義 Haar 級聯分類器的流程包括數據準備、生成樣本描述文件、訓練分類器和測試分類器。雖然訓練過程可能耗時,但通過合理的參數調整和數據優化,可以獲得高性能的分類器,用于檢測特定的目標對象。


本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/73253.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/73253.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/73253.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Smart Time Plus smarttimeplus-MySQLConnection SQL注入漏洞(CVE-2024-53544)

免責聲明 本文所描述的漏洞及其復現步驟僅供網絡安全研究與教育目的使用。任何人不得將本文提供的信息用于非法目的或未經授權的系統測試。作者不對任何由于使用本文信息而導致的直接或間接損害承擔責任。如涉及侵權,請及時與我們聯系,我們將盡快處理并刪除相關內容。 0x01…

58.Harmonyos NEXT 圖片預覽組件架構設計與實現原理

溫馨提示:本篇博客的詳細代碼已發布到 git : https://gitcode.com/nutpi/HarmonyosNext 可以下載運行哦! Harmonyos NEXT 圖片預覽組件架構設計與實現原理 文章目錄 Harmonyos NEXT 圖片預覽組件架構設計與實現原理效果預覽一、組件架構概述1. 核心組件層…

虛擬機下ubuntu進不了圖形界面

6.844618] piix4_smbus 0000:07.3: SMBus Host ContrFoller not enabled! 7.859836] sd 2:0:0:0:0: [sda] Assuming drive cache: wirite through /dev/sda1: clean, 200424/1966080 files, 4053235/7864064 blocks ubuntu啟動時,卡在上面輸出位置 當前遇到的原因…

Appium高級操作--從源碼角度解析--模擬復雜手勢操作

書接上回,Android自動化--Appium基本操作-CSDN博客文章瀏覽閱讀600次,點贊10次,收藏5次。書接上回,上一篇文章已經介紹了appium在Android端的元素定位方法和識別工具Inspector,本次要介紹使用如何利用Appium對找到的元…

SpringBoot學生宿舍管理系統的設計與開發

項目概述 幽絡源分享的《SpringBoot學生宿舍管理系統的設計與開發》是一款專為校園宿舍管理設計的智能化系統,基于SpringBoot框架開發,功能全面,操作便捷。該系統涵蓋管理員、宿管員和學生三大角色,分別提供宿舍管理、學生信息管…

愛普生溫補晶振 TG5032CFN高精度穩定時鐘的典范

在科技日新月異的當下,眾多領域對時鐘信號的穩定性與精準度提出了極為嚴苛的要求。愛普生溫補晶振TG5032CFN是一款高穩定性溫度補償晶體振蕩器(TCXO)。該器件通過內置溫度補償電路,有效抑制環境溫度變化對頻率穩定性的影響&#x…

【原創】在高性能服務器上,使用受限用戶運行Nginx,充當反向代理服務器[未完待續]

起因 在公共高性能服務器上運行OllamaDeepSeek,如果按照默認配置啟動Ollama程序,則自己在遠程無法連接你啟動的Ollama服務。 如果修改配置,則會遇到你的Ollama被他人完全控制的安全風險。 不過,我們可以使用一個方向代理&#…

Bash和Zsh的主要差異是?

Bash(GNU Bourne-Again Shell) 和 Zsh(Z Shell) 都是功能強大的Unix/Linux Shell,廣泛用于交互式使用和腳本編寫。 盡管它們有很多相似之處,但在功能、語法、配置選項等方面也存在一些顯著的區別。 是Bas…

芯科科技推出的BG29超小型低功耗藍牙?無線SoC,是藍牙應用的理想之選

具有擴大的內存和超低功耗特性的超小型BG29是互聯健康設備的理想之選 低功耗無線領域內的領導性創新廠商Silicon Labs(亦稱“芯科科技”,NASDAQ:SLAB)今日宣布:推出全新的第二代無線開發平臺產品BG29系列無線片上系統…

【數據挖掘】知識蒸餾(Knowledge Distillation, KD)

1. 概念 知識蒸餾(Knowledge Distillation, KD)是一種模型壓縮和知識遷移技術,旨在將大型復雜模型(稱為教師模型)中的知識傳遞給一個較小的模型(稱為學生模型),以減少計算成本&…

選型消息隊列(MQ):ActiveMQ、RabbitMQ、RocketMQ、Kafka對比

選型消息隊列(MQ):ActiveMQ、RabbitMQ、RocketMQ、Kafka對比 選型消息隊列(MQ)1. 引言2. 消息隊列核心指標3. MQ 技術對比分析4. 詳細分析及案例4.1 ActiveMQ:傳統企業級 MQ 方案4.2 RabbitMQ:高…

AWK 入門教程:強大的文本處理工具

AWK 是一種強大的文本處理工具,廣泛用于 Linux/Unix 系統中對文本文件或數據流進行操作。它能夠基于條件篩選、統計字段、重新排列數據等。主要特點包括: 2. AWK 的基本語法 2.1 AWK 程序的結構 AWK 程序的結構: awk pattern { action } file 2.2 常…

mysql select distinct 和 group by 哪個效率高

在有索引的情況下,SELECT DISTINCT和GROUP BY的效率相同;在沒有索引的情況下,SELECT DISTINCT的效率高于GROUP BY?。這是因為SELECT DISTINCT和GROUP BY都會進行分組操作,但GROUP BY可能會進行排序,觸發filesort&…

使用conda將python環境打包,移植到另一個linux服務器項目中

問題:因為新的服務器A不能聯網,導致離線pip install包耗時耗力,舊的服務器B中的Anaconda和A中是同一個版本,有現成的python環境,并且服務器B可以聯網,現想將B中的環境,直接移植到A中使用。 解決…

晶晨S905M/晶晨S905L2芯片-原機安卓4升級安卓7.1.2-通刷線刷固件包

晶晨S905M/晶晨S905L2芯片-原機安卓4升級安卓7.1.2-通刷線刷固件包 線刷方法:(新手參考借鑒一下) 1、準備好一根雙公頭USB線刷刷機線,長度30-50CM長度最佳,同時準備一臺電腦; 2、電腦上安裝好…

KICK第四講Linux 系統下安裝 GCC 編譯器全指南

Linux 系統下安裝 GCC 編譯器全指南 GCC(GNU Compiler Collection)是 Linux 系統下最常用的編譯器之一,支持 C/C、Java 等多種編程語言。本文將介紹不同 Linux 發行版下的安裝方法,幫助開發者快速配置開發環境。 一、使用包管理…

Django系列教程(8)——函數視圖及通用類視圖

目錄 什么是視圖(View)及其工作原理 接近現實的函數視圖 更復雜的案例: 視圖處理用戶提交的數據 基于函數的視圖和基于類的視圖 Django通用類視圖 a. ListView b. DetailView c. CreateView d. UpdateView e. FormView f. DeleteView 小結 Django的視圖(view)是處理…

c# 查找相似顏色算法

下是一個基于歐幾里得距離的C#顏色相似度查找算法實現,包含詳細注釋和優化策略: using System; using System.Collections.Generic;public class ColorMatcher {// 顏色容器 - 使用字典存儲顏色ID到RGB的映射private readonly Dictionary<int, byte[]> _colorDictiona…

【A2DP】藍牙音頻編解碼器互操作性要求詳解

目錄 一、音頻編解碼器互操作性&#xff1a;核心要點總覽 二、必選與可選編解碼器互操作性要求大盤點 2.1 必選與可選的編解碼器支持 2.2 必選編解碼器要求 2.3 可選編解碼器要求 2.4 廠商自定義&#xff08;Vendor Specific&#xff09;A2DP編解碼器互操作性要求 2.5 不…

electron 設置跨域iframe

在 Electron 的主進程中禁用同源策略 在 Electron 的主進程文件中添加 app.commandLine.appendSwitch("disable-site-isolation-trials"); 來禁用站點隔離試驗。在創建 BrowserWindow 時&#xff0c;設置 webPreferences 的 webSecurity: false 來禁用同源策略。