来源:https://blog.csdn.net/qq_42145185/article/details/105816128
自己的数据集下载链接:https://download.csdn.net/download/qq_42145185/12373126
结果:
脚本如下:
-
# -*- coding: cp936 -*-
-
"""
-
Author:xxxxxx
-
Date:2019-09-23
-
Discription:Read Camaro picture and save
-
"""
-
-
import cv2,os,time
-
import numpy
as np
-
from multiprocessing
import Process
-
import _thread
-
-
class CamaroCap(object):
-
-
#打开摄像头
-
def __init__(self):
-
self.cap = cv2.VideoCapture(
0)
-
"""
-
self.cap.set(cv2.CAP_PROP_FOURCC, cv2.VideoWriter_fourcc('M', 'J', 'P', 'G'))
-
self.cap.set(cv2.CAP_PROP_FRAME_WIDTH, 640)
-
self.cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 480);
-
"""
-
-
#图片信息打印
-
def get_image_info(self,image):
-
print(type(image))
-
print(image.shape)
-
print(image.size)
-
print(image.dtype)
-
pixel_data = np.array(image)
-
print(pixel_data)
-
-
#逐帧读取数据并保存图片到本地制定位置
-
def Camaro_image(self):
-
i =
0
-
while(
1):
-
"""
-
ret:True或者False,代表有没有读取到图片
-
frame:表示截取到一帧的图片
-
"""
-
#ret,frame = self.cap.read()
-
ret,frame = self.cap.read()
-
#print("打印图片信息")
-
#self.get_image_info(frame)
-
-
# 展示图片
-
cv2.imshow(
'capture',frame)
-
#保存图片
-
cv2.imwrite(
r"D:\python_project\\"+ str(i) +
".jpg",frame)
-
i = i +
1
-
if cv2.waitKey(
1) &
0xFF == ord(
'q'):
-
break
-
-
if __name__ ==
'__main__':
-
outmasages = CamaroCap()
-
#调用摄像头
-
outmasages.Camaro_image()
-
#释放对象和销毁窗口
-
outmasages.cap.release()
-
cv2.destroyAllWindows()
-
-
2.标注图片
具体步骤已经在推荐链接中展示了,下面主要记录几个自己在做的时候遇到的坑的记录。
1.cfg文件记录
2模型文件和标签文件
mydata文件下的目录:
dobot@dobot:~/YOLO_V3/darknet/mydata$ tree . ├── Annotations │ ├── 000000.xml │ ├── 000001.xml │ ├── 000002.xml │ ├── 000003.xml │ ├── 000004.xml │ ├── 000005.xml │ ├── 000006.xml │ ├── 000007.xml │ ├── 000008.xml │ ├── 000009.xml │ ├── 000010.xml │ ├── 000011.xml │ ├── 000012.xml │ ├── 000013.xml │ ├── 000014.xml │ ├── 000015.xml │ ├── 000016.xml │ ├── 000017.xml │ ├── 000018.xml │ └── 000019.xml ├── ImageSets │ └── Main │ ├── test.txt │ ├── train.txt │ ├── trainval.txt │ └── val.txt ├── JPEGImages │ ├── 000000.jpg │ ├── 000001.jpg │ ├── 000002.jpg │ ├── 000003.jpg │ ├── 000004.jpg │ ├── 000005.jpg │ ├── 000006.jpg │ ├── 000007.jpg │ ├── 000008.jpg │ ├── 000009.jpg │ ├── 000010.jpg │ ├── 000011.jpg │ ├── 000012.jpg │ ├── 000013.jpg │ ├── 000014.jpg │ ├── 000015.jpg │ ├── 000016.jpg │ ├── 000017.jpg │ ├── 000018.jpg │ └── 000019.jpg ├── labels │ ├── 000000.txt │ ├── 000002.txt │ ├── 000003.txt │ ├── 000004.txt │ ├── 000005.txt │ ├── 000006.txt │ ├── 000007.txt │ ├── 000008.txt │ ├── 000009.txt │ ├── 000010.txt │ ├── 000011.txt │ ├── 000012.txt │ ├── 000014.txt │ ├── 000015.txt │ ├── 000016.txt │ ├── 000017.txt │ ├── 000018.txt │ └── 000019.txt ├── mydata_test.txt ├── mydata_train.txt ├── test.py ├── voc.names └── weights ├── yolov3-voc_100.weights ├── yolov3-voc_200.weights ├── yolov3-voc_300.weights ├── yolov3-voc_400.weights ├── yolov3-voc_500.weights └── yolov3-voc.backup 6 directories, 72 files dobot@dobot:~/YOLO_V3/darknet/mydata$
另外的两个cfg文件在 如下:(my_data.data , yolov3-voc.cfg)
yolov3-voc.cfg文件修改如下:
-
[net]
-
# Testing
-
#batch=1
-
#subdivisions=1
-
# Training
-
batch=1
#修改这地方
-
subdivisions=1
#修改这地方
-
width=416
-
height=416
-
channels=3
-
momentum=0.9
-
decay=0.0005
-
angle=0
-
saturation = 1.5
-
exposure = 1.5
-
hue=.1
-
-
..................
-
..................
-
..................
-
-
[yolo]
-
mask = 0,1,2
-
anchors = 10,13, 16,30, 33,23, 30,61, 62,45, 59,119, 116,90, 156,198, 373,326
-
classes=1
-
num=9
-
jitter=.3
-
ignore_thresh = .5
-
truth_thresh = 1
-
random=0
#修改这地方
完成准备之后训练数据:
$ ./darknet detector train cfg/my_data.data cfg/yolov3-voc.cfg darknet53.conv.74
训练生成的数据集如下:
完成训练之后,测试结果:
命令:$ ./darknet detector demo cfg/my_data.data cfg/yolov3-voc.cfg mydata/weights/yolov3-voc_500.weights
测试结果,本人只是用了18图片迭代训练了500次,测试识别结果并不是很好,框容易框的很大!!!
测试图片的命令行:
$ ./darknet detector test cfg/my_data.data cfg/yolov3-voc.cfg mydata/weights/yolov3-voc_500.weights mydata/JPEGImages/000013.jpg