1. 程式人生 > 實用技巧 >week 2020.12.27-2020.12.31

week 2020.12.27-2020.12.31

自由學習,大佬給了一個指令碼,用在yolov5中,實現預測完影象生成影象對應的xml檔案,方便在labelimage中進行檢視:

View Code

直接呼叫模型生成的.pt,檢測完結果生成跟檢測影象對應得xml檔案。

學習到了glob函式的使用:是python自己帶的一個檔案操作相關模組,用它可以查詢符合自己目的的檔案,就類似於Windows下的檔案搜尋,支援萬用字元操作,*,?,[]這三個萬用字元,*代表0個或多個字元,?代表一個字元,[]匹配指定範圍內的字元,如[0-9]匹配數字。

比如:

glob.glob(r'c:\*.txt')

我這裡就是獲得C盤下的所有txt檔案

glob.glob(r'E:\pic\*\*.jpg')

獲得指定目錄下的所有jpg檔案

使用相對路徑:

glob.glob(r'../*.py')

接著就是遍歷資料夾下所有路徑,可以插入使用tqdm(進度條功能):

image_path = glob.glob('data/input/CardDetection/images/*.jpg')
for i in tqdm(image_path):
    image_path = i.replace('\\', '/')
    # print(image_path)
    print(predict(image_path), '/n')
.replace負責將路徑中'\'改為‘/’
一個視屏按照幀來分成圖片的指令碼:
#coding: utf-8
import os
import cv2
from tqdm import tqdm
from glob import glob

if __name__ == "__main__":
    filelists = glob('./little/*.mp4')
    save = './pic/'
    os.makedirs(save, exist_ok=True)
    FPS = 25
    for item in filelists:
        cap = cv2.VideoCapture(item)
        frames = cap.get(cv2.CAP_PROP_FRAME_COUNT)  # 獲得視訊檔案的幀數

        fps = 50
        # 儲存圖片的幀率間隔
        count = 50
        num = 0
        while(cap.isOpened()):
            ret, img = cap.read()
            if img is None:
                break

            if num % 100*FPS == 0:
                cv2.imwrite(save + str(len(os.listdir(save)) + 1).zfill(5) + '.jpg', img)
            num += 1
            if num == 1:
                print(filelists)
            # print(num)

        cap.release()

寫了一個標籤檔案為.csv格式的轉化為yolo格式的指令碼,標籤檔案為下圖樣式:

View Code