貨品目標檢測樣本制作方法
阿新 • • 發佈:2018-03-14
voc 樣本制作 目標檢測 最近公司要做無人超市項目,基本實現方式是通過攝像頭檢測貨櫃裏面有多少個什麽類別的貨品,也就是目標檢測算法。該方法所需數據樣本為標記了位置的貨品圖片,如下所示。
為了制作該圖片,設計方法如下:
1、拍攝該樣品360度的視頻
2、將視頻抓幀
3、將圖片通過opencv拼裝成樣本
rval, frame = cap.read()
else:
rval = False
c = 0
num = 0
while rval: # 循環讀取視頻幀
rval, frame = cap.read()
if (c % 10 == 0):
filesavepath = path + str(index) + "/" + str(num) + ".jpg"
cv2.imwrite(filesavepath, frame) # 存儲為圖像
num = num + 1
c = c + 1
cap.release() rootdir = pathavi
list = os.listdir(rootdir) # 列出文件夾下所有的目錄與文件
for i in range(0, len(list)):
filepath = os.path.join(rootdir, list[i])
if os.path.isfile(filepath):
print(list[i])
filepath = pathavi + "/" + str(list[i]) path = "F:/objectdect/all"
for index in range(0,10001):
filepath = path + "/" + str(index) + ".jpg"
#產生一個1到5的隨機數
numlist = [1,2,4]
rndnum = random.sample(numlist, 1)[0]
imglist = []
for numindex in range(1,rndnum+1):
#print(numindex)
#隨機取出一個文件夾中的一個圖片
classnum = random.randint(1, 20)
jpgpath = "F:/objectdect/avi/" + str(classnum) + "/" + str(random.randint(0, 200))+".jpg"
imgtemp = cv2.imread(jpgpath)
imgtemp = cv2.resize(imgtemp, (500, 500), interpolation=cv2.INTER_CUBIC)
imglist.append(imgtemp)
try:
print(rndnum)
if rndnum == 1:
imgall = cv2.hconcat(imglist)
res = cv2.resize(imgall, (500, 500), interpolation=cv2.INTER_CUBIC)
cv2.imwrite(filepath, res) # 存儲為圖像
if rndnum == 2:
imgall = cv2.hconcat([imglist[0],imglist[1]])
res = cv2.resize(imgall, (500, 500), interpolation=cv2.INTER_CUBIC)
cv2.imwrite(filepath, res) # 存儲為圖像
if rndnum == 4:
imgall1 = cv2.hconcat([imglist[0],imglist[1]])
imgall2 = cv2.hconcat([imglist[2], imglist[3]])
imgall = cv2.vconcat([imgall1, imgall2])
res = cv2.resize(imgall, (500, 500), interpolation=cv2.INTER_CUBIC)
cv2.imwrite(filepath, res) # 存儲為圖像
except:
print("錯誤")
該程序保存了樣本圖片之後可以通過 voc數據集標記工具 生成對應的xml文件 即可開始目標檢測算法的訓練。
http://blog.csdn.net/hx921123/article/details/56484876
為了制作該圖片,設計方法如下:
1、拍攝該樣品360度的視頻
2、將視頻抓幀
3、將圖片通過opencv拼裝成樣本
拍攝視頻如下並抓幀的程序如下:
import os
import cv2
path = "F:/objectdect/avi/"
def openavifiletopic(filepath,index):
cap = cv2.VideoCapture(filepath)
if cap.isOpened(): # 判斷是否正常打開
else:
rval = False
c = 0
num = 0
while rval: # 循環讀取視頻幀
rval, frame = cap.read()
if (c % 10 == 0):
filesavepath = path + str(index) + "/" + str(num) + ".jpg"
cv2.imwrite(filesavepath, frame) # 存儲為圖像
num = num + 1
c = c + 1
cap.release()
for index in range (1,21):
pathavi = path + str(index)
list = os.listdir(rootdir) # 列出文件夾下所有的目錄與文件
for i in range(0, len(list)):
filepath = os.path.join(rootdir, list[i])
if os.path.isfile(filepath):
print(list[i])
filepath = pathavi + "/" + str(list[i])
你想對文件的操作
openavifiletopic(filepath,index)
生成樣本的程序如下:
import random
import cv2
for index in range(0,10001):
filepath = path + "/" + str(index) + ".jpg"
#產生一個1到5的隨機數
numlist = [1,2,4]
rndnum = random.sample(numlist, 1)[0]
imglist = []
for numindex in range(1,rndnum+1):
#print(numindex)
#隨機取出一個文件夾中的一個圖片
classnum = random.randint(1, 20)
jpgpath = "F:/objectdect/avi/" + str(classnum) + "/" + str(random.randint(0, 200))+".jpg"
imgtemp = cv2.imread(jpgpath)
imgtemp = cv2.resize(imgtemp, (500, 500), interpolation=cv2.INTER_CUBIC)
imglist.append(imgtemp)
try:
print(rndnum)
if rndnum == 1:
imgall = cv2.hconcat(imglist)
res = cv2.resize(imgall, (500, 500), interpolation=cv2.INTER_CUBIC)
cv2.imwrite(filepath, res) # 存儲為圖像
if rndnum == 2:
imgall = cv2.hconcat([imglist[0],imglist[1]])
res = cv2.resize(imgall, (500, 500), interpolation=cv2.INTER_CUBIC)
cv2.imwrite(filepath, res) # 存儲為圖像
if rndnum == 4:
imgall1 = cv2.hconcat([imglist[0],imglist[1]])
imgall2 = cv2.hconcat([imglist[2], imglist[3]])
imgall = cv2.vconcat([imgall1, imgall2])
res = cv2.resize(imgall, (500, 500), interpolation=cv2.INTER_CUBIC)
cv2.imwrite(filepath, res) # 存儲為圖像
except:
print("錯誤")
該程序保存了樣本圖片之後可以通過 voc數據集標記工具 生成對應的xml文件 即可開始目標檢測算法的訓練。
http://blog.csdn.net/hx921123/article/details/56484876
貨品目標檢測樣本制作方法