yolov5/v7修改標簽和檢測框顯示【最全】

《記錄自己在使用yolov5遇到的一些問題》同時也供大家參考,如果對你們有幫助,希望大家可以給個點贊、收藏鼓勵下,非常感謝!

以自帶的一張圖片作為示例,yolov5(6.1版本)的初始檢測框應該是如下圖所示

修改線條粗細、隱藏標簽、隱藏置信度

?首先有一些參數作者已經放在detect.py的parse_opt()里,如下代碼所示:

parser.add_argument('--line-thickness', default=3, type=int, help='bounding box thickness (pixels)')
parser.add_argument('--hide-labels', default=False, action='store_true', help='hide labels')
parser.add_argument('--hide-conf', default=False, action='store_true', help='hide confidences')

顧名思義,“--line-thickness” 是修改矩形框和文本標簽線條的粗細的,如果你覺得標簽小了可以直接調整這里的數值(本人之前在這里踩了大坑,還去plot.py里修改一些參數,后面會說到,雖然大了但是會出現失真,標簽會變得模糊。)

?"--hide-labels"(隱藏標簽)和"--hide-conf"(隱藏置信度)就比較直觀了,直接上圖:

?想要修改其他信息就要打開utils文件夾里的plots.py文件了。打開文件后搜索(ctrl+f)box_label()這個函數,大概在82行左右。

def box_label(self, box, label='', color=(128, 128, 128), txt_color=(255, 255, 255)):# Add one xyxy box to image with labelif self.pil or not is_ascii(label):self.draw.rectangle(box, width=self.lw, outline=color)  # boxif label:w, h = self.font.getsize(label)  # text width, heightoutside = box[1] - h >= 0  # label fits outside boxself.draw.rectangle((box[0],box[1] - h if outside else box[1],box[0] + w + 1,box[1] + 1 if outside else box[1] + h + 1), fill=color)# self.draw.text((box[0], box[1]), label, fill=txt_color, font=self.font, anchor='ls')  # for PIL>8.0self.draw.text((box[0], box[1] - h if outside else box[1]), label, fill=txt_color, font=self.font)else:  # cv2p1, p2 = (int(box[0]), int(box[1])), (int(box[2]), int(box[3]))cv2.rectangle(self.im, p1, p2, color, thickness=self.lw, lineType=cv2.LINE_AA)if label:tf = max(self.lw - 1, 1)  # font thicknessw, h = cv2.getTextSize(label, 0, fontScale=self.lw / 3, thickness=tf)[0]  # text width, heightoutside = p1[1] - h - 3 >= 0  # label fits outside boxp2 = p1[0] + w, p1[1] - h - 3 if outside else p1[1] + h + 3cv2.rectangle(self.im, p1, p2, color, -1, cv2.LINE_AA)  # filledcv2.putText(self.im, label, (p1[0], p1[1] - 2 if outside else p1[1] + h + 2), 0, self.lw / 3, txt_color,thickness=tf, lineType=cv2.LINE_AA)

如果想隱藏檢測框只需要注釋下面這行代碼即可,如果要修改檢測框的大小等參數,對應修改就行,效果如下圖:

cv2.rectangle(self.im, p1, p2, color, thickness=self.lw, lineType=cv2.LINE_AA)
#self.img 圖片
#p1  所畫檢測框的左上角坐標
#p2  所畫檢測框的右下角坐標
#thick 線的粗細
#linetype 線型 

如果想隱藏標簽框只需要注釋掉下面這行代碼即可,同樣如果要修改標簽框的大小等參數,對應修改就行效果如下圖:

cv2.rectangle(self.im, p1, p2, color, -1, cv2.LINE_AA)  # filled
#self.img 圖片
#p1  所畫框的左上角坐標
#p2  所畫框的右下角坐標
#color 框的顏色,可以以自己修改(b,g,r)
#-1  框的粗細  如果為負值則代表填充整個框
#cv2.LINE_AA 線型 

修改標簽文本信息,可以配合上面兩行代碼一起修改,單獨注釋效果如下圖:?

cv2.putText(self.im, label, (p1[0], p1[1] - 2 if outside else p1[1] + h + 2), 0,self.lw / 3, txt_color,thickness=tf, lineType=cv2.LINE_AA)
#self.im 輸出在哪一張圖片,這里就是檢測的圖片
#label   輸出內容(str格式),這里就是標簽
#(p1[0], p1[1] - 2 if outside else p1[1] + h + 2) 左上角坐標位置
#0 官方解釋是Font scale factor that is multiplied by the font-specific base size.感覺這里也是改變字體的粗細
#tetcolor 文字顏色
#thickness  用于繪制文本的線條的粗細
#LineTypes 線型

2022/10/25日新增:有同學私信跟我交流如何添加坐標信息,本人的思路是直接用putText(),將打印內容改成你想打印的坐標(我這里打印的是左上角的坐標),稍微調整一下打印在圖上的位置坐標。

cv2.putText(self.im, "("+str(p1[0])+","+str(p1[1])+")", (p1[0]+5, p1[1] -50 if outside else p1[1] + h + 2), 2, self.lw / 3, txt_color,thickness=tf, lineType=cv2.LINE_AA)

2022/11/22日新增:有同學私信我跟我交流如何只顯示部分標簽和置信度,本人的思路是在detect.py中找到標簽顯示語句:

label = None if hide_labels  else (names[c] if hide_conf else f'{names[c]} {conf:.2f}')

原標簽顯示邏輯為:“標簽 = 無 如果“隱藏標簽”否則顯示標簽”,我們只需要再加入我們所需要的判斷條件即可,比如不想顯示“person”只需修改代碼為:

label = None if hide_labels or names[c]=="person" else (names[c] if hide_conf else f'{names[c]} {conf:.2f}')

2023/4/3日新增:有同學私信問:如何給不同物體自定義方框顏色,比如想定義框選person的框為紫色(128,0,128),框選tie的為灰色(169,169,169)。我的思路:在畫框的前加一個if判斷,代碼(101行左右)如下:

else:  # cv2p1, p2 = (int(box[0]), int(box[1])), (int(box[2]), int(box[3]))if 'person' in label:cv2.rectangle(self.im, p1, p2, (128,0,128), thickness=self.lw, lineType=cv2.LINE_AA)if 'tie' in label:cv2.rectangle(self.im, p1, p2, (169, 169, 169), thickness=self.lw, lineType=cv2.LINE_AA)if label:

如果想顯示部分目標框也是同理,比如你只想顯示person,你就在畫框的代碼前加一個if判斷是否為”person",就不要加后面“tie”的判斷了。

2023/5/16新增:v5之前的版本可能跟上面的差別比較大,其實道理是一樣的,你在detect.py里找到打印標簽的的那一行,如下圖所示,ctrl+鼠標左鍵plot_one_box,就可以進入這個函數,之后根據自己的需求修改就行。

2023/5/18新增:評論區提問:“檢測出來的都是顯示到小數點后一位,怎么可以讓他顯示到后兩位呀?”思路:其實就是修改打印的置信度精度(conf),在detect.py里搜索conf,找到下面這行代碼:最后的{conf:.2f}代表保留小數點后兩位,根據需求修改即可,結果如下圖:

 label = None if hide_labels else (names[c] if hide_conf else f'{names[c]} {conf:.2f}')

?

注:以上只是本人對自己學習過程的總結,僅供大家參考,如果出現錯誤,希望大家可以理解并指正。博主現在也比較忙(笑發財了,被放養,根本不知道忙啥),佛系更新,大家如果問題解決了,可以把方法評論下來,或者私信給博主,我會跟新博文并添加上你的名字。

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

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

相關文章

EI論文故障識別程序:DBN深度置信/信念網絡的故障識別Matlab程序,數據由Excel導入,直接運行!

?適用平臺:Matlab2021b版及以上 本程序參考中文EI期刊《基于變分模態分解和改進灰狼算法優化深度置信網絡的自動轉換開關故障識別》中的深度置信網絡(Deep Belief Network,DBN)部分進行故障識別,程序注釋清晰&#x…

Python之學生信息管理系統

目錄 一、基礎界面實現 1、主函數 2、保持循環,獲取用戶需求 二、函數實現模塊功能 1、添加學生信息 2、刪除學生信息 3、修改學生信息 4、查找全部學生信息 5、退出系統 三、整合代碼 1、 完整代碼 2、完整實現過程 實現 打印功能菜單、添加學生信息、刪…

想自學軟件測試?一般人我還是勸你算了吧。。。

📢專注于分享軟件測試干貨內容,歡迎點贊 👍 收藏 ?留言 📝 如有錯誤敬請指正!📢交流討論:歡迎加入我們一起學習!📢資源分享:耗時200小時精選的「軟件測試」資…

<keep-alive>作用及用法

<keep-alive>是Vue.js的內置組件。它用于緩存具有相同組件樹的組件。當組件使用<keep-alive>包裹時&#xff0c;組件不會被銷毀&#xff0c;而是會緩存到內存中&#xff0c;等到下次再次渲染時&#xff0c;直接使用緩存中的組件實例。 <keep-alive>有以下幾…

【Linux】共享內存

文章目錄 一、共享內存的原理詳談共享內存的實現過程二、共享內存的接口函數1.shmget2. shmatshmdtshmctl 進程間使用共享內存通信三、共享內存的特性 關于代碼 一、共享內存的原理 共享內存是由操作系統維護和管理的一塊內存。 共享內存的本質是內核級的緩沖區。 一個進程向…

C語言精華題目錦集1

第一題 test.c文件中包括如下語句&#xff0c;文件中定義的四個變量中&#xff0c;是指針類型的是&#xff08;&#xff09;【多選】 #define INT_PTR int* typedef int* intptr; INT_PRT a,b; int_ptr c,d;A:a ?B:b ?C:c ?D:d #define是宏定義&#xff0c;此時在程序中IN…

SQLite3 數據庫學習(六):Qt 嵌入式 Web 服務器詳解

參考引用 SQLite 權威指南&#xff08;第二版&#xff09;SQLite3 入門 1. Apache 搭建 cgi 環境 1.1 什么是 Apache Apache 是世界使用排名第一的 Web 服務器軟件 它可以運行在幾乎所有廣泛使用的計算機平臺上&#xff0c;由于其跨平臺和安全性被廣泛使用 1.2 具體搭建流程…

一、用戶管理

一、后端數據庫初始化 1.1 因為版本問題&#xff0c;始終報錯&#xff0c;按照報錯信息去查詢解決方案&#xff0c;無法解決 靈機一動&#xff1a; 網址&#xff1a; Spring Boot 3.0 升級 實戰踩坑記錄 - 掘金 (juejin.cn) &#xff11;.&#xff12; 個人配置【運行成功…

c++的三目運算符

C三目運算符增強 C中的三目運算符表達式返回的可以是一個變量&#xff0c;但是C語言中返回的是一個常量。 C語言中&#xff1a; void test05() { int a 10; int b 20; printf("%d\n", a < b ? a : b); //在C語言中三目運算符返回的是表達式的值&am…

Javascript每天一道算法題(十三)——最大子數組和_中等

文章目錄 動態規劃題三個重要步驟&#xff08;了解思路&#xff09;1、問題2、示例3、解決方法&#xff08;1&#xff09;方法1——動態規劃 總結 動態規劃題三個重要步驟&#xff08;了解思路&#xff09; &#xff08;1&#xff09;定義數組元素的含義 用一個數組來保存歷史數…

2020年06月 Scratch(三級)真題解析#中國電子學會#全國青少年軟件編程等級考試

Scratch等級考試(1~4級)全部真題?點這里 一、單選題(共25題,每題2分,共50分) 第1題 執行以下腳本后舞臺上的角色將 ? A:先克隆自身,克隆體出現后被刪除。 B:先克隆自身,克隆體出現后刪除本體。 C:克隆出自身后本體與克隆體同時被刪除。 D:克隆出自身后本體與克…

docker常用命令, 鏡像版本的導入、導出并加載,打包鏡像的命令

文章目錄 docker常用命令&#xff1a;打鏡像包&#xff1a;鏡像版本的導入、導出并加載 docker常用命令&#xff1a; 打鏡像包&#xff1a; ? docker build -t calc:20230630 /home/apps/calc/docker/ 刪除某個鏡像的版本&#xff0c;allen_mysql的5.7版本 docker rmi all…

Redis深入理解-內核請求處理流程、數據傳輸協議

Redis 內核級請求處理流程 Redis Server 其實就是 Linux 服務器中的一個進程 主要還是下圖的流程 應用先和 server 端建立 TCP 連接建立連接之后&#xff0c;server 端就會有一個與該客戶端通信的 socket&#xff0c;客戶端的讀寫請求發送到服務端的 socket那么通過 IO 多路…

分組背包問題學習筆記 AcWing 9. 分組背包問題

原題 有 N&#xfffd; 組物品和一個容量是 V&#xfffd; 的背包。 每組物品有若干個&#xff0c;同一組內的物品最多只能選一個。 每件物品的體積是 vij&#xfffd;&#xfffd;&#xfffd;&#xff0c;價值是 wij&#xfffd;&#xfffd;&#xfffd;&#xff0c;其中 …

PC8233(CC/CV控制)高耐壓輸入5V/3.4A同步降壓電路內建補償帶恒流恒壓輸出

概述 PC8233&#xff08;替代CX8853&#xff09;是一款同步降壓調節器,輸出電流高達3.4A,操作范圍從8V到32V的寬電源電壓。內部補償要求最低數量現成的標準外部組件。PC8233在CC&#xff08;恒定輸出電流&#xff09;模式或CV&#xff08;恒定輸出電壓&#xff09;模式&#x…

【前端】前端監控?埋點

文章目錄 前端監控分為三個方面前端監控流程異常監控常見的錯誤捕獲方法主要是 try / catch 、window.onerror 和window.addEventListener 等。Promise 錯誤Vue 錯誤React 錯誤 性能監控用戶行為監控常見的埋點方案來源 前端監控分為三個方面 異常監控&#xff08;監控前端頁面…

基于element-ui后臺模板,日常嘮嗑

后面會補充github地址 文章目錄 目錄 文章目錄 案例說明 1.引入庫 2.創建布局組件 3.創建布局組件 4.菜單效果展示 5.創建頂部組件 5.創建頂部面包屑組件 6.創建內容區域組件 7.效果總覽 7.布丁&#xff08;實現一些小細節&#xff09; 前言一、pandas是什么&#xff1f;二、使…

CentOS7中升級OpenSSL詳細教程

文章目錄 一. 引言二. 升級前的準備1.備份現有配置2. 檢查系統版本3. 安裝依賴 三. OpenSSL安裝四. 驗證 一. 引言 OpenSSL: 是用于保護數據安全的重要工具。它能提供加密&#xff0c;解密等多項功能。 然而&#xff0c;隨著技術的發展和新的安全漏洞的出現&#xff0c;使用最…

管理類聯考——英語二——備考 100 句涵蓋所有詞匯

全中 在海里的這個地區&#xff0c;熊貓們喜歡就著蘇打碗豆喝茶。而大洋州的民兵則喜歡經過半島&#xff0c;帶著編劇本的公式上餐廳去。附件的電影院里有額外的歌劇和香蕉&#xff0c;這一時代的斑馬們被外面的天線所吸引。實驗室里的蟹想用它的肋骨去戳四肢象燈炮的小羊。但…

千夢網創:創業,一場游戲一場夢

創業這件事就好比一場養成類游戲&#xff0c;而我們自己就是游戲主角。 這個游戲有一個特殊之處在于&#xff1a;SSS級裝備有穿戴等級設定&#xff0c;就算你氪重金買到了一把神器&#xff0c;自身閱歷不夠也根本無法發揮它的強大威力而只能當個裝飾。 這就要求我們真正沉浸在…