【手把手帶你入門深度學習之150行代碼的漢字識別系統】學習筆記 ·001 用OpenCV製作數據集

立即學習:https://edu.csdn.net/course/play/24719/279505?utm_source=blogtoedu

 

目錄

一、製作數據集代碼

二、思路總結

1、數據集目錄的準備

2、圖片的獲取

3、樣本的錄入與樣本類型的切換

4、數據集存放的方法

三、API使用總結


 

一、製作數據集代碼

import cv2
import os

"""數據集目錄準備"""
dataset_path = "./dataset"  # 數據集目錄

# 檢驗數據集目錄是否存在,不存在則創建目錄
if not os.path.exists(dataset_path):
    os.mkdir(dataset_path)

# 在數據集路徑下,檢測3個類的路徑是否存在,不存在則創建目錄
for i in range(3):
    class_path = dataset_path + f"/{i}"
    if not os.path.exists(class_path):
        os.mkdir(class_path)

"""圖片編號準備"""
data_counter = 0  # 每一類圖片的計數器
class_number = 0  # 圖片類型編號

"""攝像頭取材準備"""
capture = cv2.VideoCapture(0)
while True:
    ret, frame = capture.read()  # 獲取一幀
    show_img = frame.copy()  # show_img是原圖像frame的拷貝
    crop_img = frame[100:200, 100:200]  # crop_img是在原圖像frame上的部分截取
    cv2.rectangle(show_img, (100, 100), (200, 200), (0, 0, 255), 5)  # 在show_img上畫出截取部分的框框
    cv2.imshow('frame', show_img)  # 顯示圖片show_img
    k = cv2.waitKey(1)  # OpenCV延遲1毫秒、同時檢測是否有按鍵被按下(如果有鍵被按下時,將鍵值返回給q)
    # 按下Q鍵退出
    if k == ord('q'):
        break
    # 按下S鍵保存
    elif k == ord('s'):
        file_name = dataset_path + f"/{class_number}" + "/%03d.jpg" % data_counter  # 記錄保存圖片的相對路徑
        cv2.imwrite(file_name, crop_img)  # 保存圖片crop_img
        print(f"保存 圖片{data_counter}")  # 打印提示
        data_counter += 1  # 計數器 + 1
    # 按下N鍵進入下一類樣本的錄入
    elif k == ord('n'):
        class_number += 1
        data_counter = 0
        print(f"進入第{class_number}類樣本的識別")

capture.release()
cv2.destroyAllWindows()

 

二、思路總結

1、數據集目錄的準備

主要靠os來判斷文件夾是否存在,不存在將提前創建相應文件夾

2、圖片的獲取

主要靠OpenCV打開攝像頭,截取框選區域圖片進行保存

3、樣本的錄入與樣本類型的切換

主要靠OpenCV獲取按鍵,判別按鍵信息執行對應指令

4、數據集存放的方法

在一個dataset的文件夾中,有三個文件夾【0、1、2】,分別對應三類圖片數據【“我”、“好”、“帥”】,每一類圖片存放在相應類型的文件夾下,各存儲200張,編號均爲000.jpg~199.jpg

 

三、API使用總結

API

作用

使用示例

os.path.exists

os判斷某個文件/目錄是否存在

dataset_path = "./dataset"

if not os.path.exists(dataset_path):

        ......

os.mkdir

os創建某個目錄

os.mkdir(dataset_path)

cv2.VideoCapture

cv獲取攝像頭資源

capture = cv2.VideoCapture(0)

*.read

cv獲取攝像頭的一幀

ret, frame = capture.read()

*.copy

cv圖片拷貝

show_img = frame.copy()

*[???:???, ???:???]

cv圖片截取

crop_img = frame[100:200, 100:200]

cv2.rectangle

cv圖片畫框

cv2.rectangle(show_img, (100, 100), (200, 200), (0, 0, 255), 5)

cv2.imshow

cv圖片展示

cv2.imshow('frame', show_img)

cv2.imwrite

cv圖片保存

cv2.imwrite(file_name, crop_img)

cv2.waitKey

cv等待按鍵

k = cv2.waitKey(1)

*.release

cv釋放攝像頭資源

capture.release()

cv2.destroyAllWindows

關閉所有cv窗口

cv2.destroyAllWindows()

ord

返回字符對應的ASCII碼值

if k == ord('q'):

        break

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章