python製作單類別檢測資料集

2021-10-10 17:00:35 字數 3452 閱讀 3780

為了訓練自己的yolov3,但是訓練乙個公開資料集需要的時間太長了,所以就隨手做了乙個製作資料集的小demo,**不長比較簡單,但是只能標註矩形框,而且只可以製作單類別資料集。

製作前的準備:將需要的放在乙個資料夾下,最好都是乙個格式的

生成的資料集格式:每行代表乙個影象標籤,格式為:影象名 x1,y1,x2,y2 …

標註過程如下:將標註的框指示在影象上,按下滑鼠左鍵開始畫框,鬆開滑鼠左鍵開始畫框,當標註完此時,按q結束此張開始下一張的標註。

**如下:

import cv2

import numpy as np

import os

class

dataset_creator

(object):

def__init__

(self,image_path,txt_path)

: self.image_path = image_path #存放影象的路徑

self.txt_path = txt_path #標籤的路徑

self.

file

=open

(self.txt_path,

'w')

self.image_names = os.listdir(image_path)

#遍歷資料夾下的檔案

self.image_name =

none

#當前操作的影象名

self.recs =

#已經選擇的bbox

self.drawing =

false

#滑鼠按下,開始畫框

self.ix =-1

#滑鼠按下時的x座標

self.iy =-1

#滑鼠按下時的y座標

self.image =

none

#當前操作的原影象

self.drawn_image =

none

#在原影象上畫框後的影象

defget_dataset

(self)

:for image_name in self.image_names:

#遍歷標籤的影象名

self.image_name = image_name

self.image = cv2.imread(self.image_path+

'/'+image_name)

#讀取影象

cv2.namedwindow(image_name)

#這個時必須要的

cv2.setmousecallback(image_name, self.draw_rec)

#設定滑鼠事件

while

true

: cv2.imshow(image_name,self.image)

key = cv2.waitkey(0)

#等待鍵盤事件

if key ==

113:

print

(self.recs)

self.write_txt(image_name,self.recs)

break

cv2.destroywindow(image_name)

#銷毀當前影象顯示視窗

self.recs =

#清空當前影象已選擇的bbox

self.

file

.close(

)#關閉檔案物件才能儲存

defdraw_rec

(self,event, x, y, flags, param)

:for rec in self.recs:

#把已經確定的框畫上去

cv2.rectangle(self.image,

(rec[0]

,rec[1]

),(rec[2]

,rec[3]

),(0

,255,0

),2)

if event == cv2.event_lbuttondown:

#按下滑鼠左鍵

self.drawing =

true

self.ix, self.iy = x, y

elif event == cv2.event_mousemove and flags == cv2.event_flag_lbutton:

#移動滑鼠,實時顯示框

if self.drawing is

true

: self.drawn_image = cv2.rectangle(np.copy(self.image)

,(self.ix, self.iy)

,(x, y),(

0,255,0)

,2) cv2.imshow(self.image_name, self.drawn_image)

elif event == cv2.event_lbuttonup:

#抬起滑鼠左鍵

self.drawing =

false

[self.ix,self.iy,x,y]

)#cv2.rectangle(self.image, (self.ix, self.iy), (x, y), (0, 255, 0), 2)

defwrite_txt

(self,image_name,recs)

:#將當前影象名和屬於該影象的bbox存入txt檔案

self.

file

.writelines(image_name+

' ')

for rec in recs:

for xy in rec:

self.

file

.writelines(

str(xy)

+','

) self.

file

.writelines(

'0 '

) self.

file

.writelines(

'\n'

)if __name__ ==

'__main__'

: creator = dataset_creator(

"./images"

,"data.txt"

) creator.get_dataset(

)

Python學習資料 Python製作天氣查詢軟體

這次的python學習資料跟大家分享如何用python做乙個天氣查詢軟體,隨時隨地查天氣!開發環境 準備工作 import pandas as pd file pd.read csv city code.csv 選取需要的兩列資訊 file file.loc city id city cn 讀取前五...

python資料預處理之將類別資料轉換為數值的方法

在進行python資料分析的時候,首先要進行資料預處理。有時候不得不處理一些非數值類別的資料,嗯,今天要說的就是面對這些資料該如何處理。目前了解到的大概有三種方法 1,通過labelencoder來進行快速的轉換 3,通過get dummies方法來轉換。import pandas as pd fr...

python檢視資料集的類別 數量分布等

檢視是否存在樣本不均衡問題,同時方便選擇合適的資料預處理方式。from glob import glob import pandas as pd import numpy as np import os import cv2 from pil import image from matplotlib...