前提:本文的YOLOv3为AlexeyAB的版本。
step1:生成标签
生成标签的代码借鉴了https://www.pianshen.com/article/8064424145/
先在data/labels下创建python程序,写入以下代码,其中label.names为自定义分类的汇总,如
京
沪
晋
赣
…
G
H
Q
R
…
3
9
保存为txt,之后运行以下python程序
import os
import string
import pipes
font = 'futura-normal'
fileName=open("label.names",'r')
l=[label.lstrip().rstrip() for label in fileName.readlines()]
def make_labels(s):
i = 0
for word in l:
os.system(
"convert -fill black -background white -bordercolor white -border 4 -font /usr/share/fonts/truetype/arphic/ukai.ttc -pointsize %d label:\"%s\" \"%d_%d.png\"" % (
s, word, i, s / 12 - 1))
i = i + 1
for i in [12, 24, 36, 48, 60, 72, 84, 96]:
make_labels(i)
step2:修改代码
生成了标签,之后修改代码
参见 https://blog.csdn.net/phinoo/article/details/89501569此处的修改
注意:他的标签生成程序可能有问题,我没有成功,所以我结合了两个人的博客实现了输出中文标签
step3:关键一步
最后关键一步,至少在我这里为关键一步
修改 **load_alphabet函数,修改为自己的识别类别,如何知道自己的识别类别呢,查看生成的标签,x_y.png,x为类别,y为字体大小
image **load_alphabet()
{
int i, j;
const int nsize = 8;
image** alphabets = (image**)xcalloc(nsize, sizeof(image*));
for(j = 0; j < nsize; ++j){
alphabets[j] = (image*)xcalloc(128, sizeof(image));
//将此处改为自己的标签类别,如67个类别,所以改为0-68
for(i = 0; i < 67; ++i){
char buff[256];
sprintf(buff, "data/labels/%d_%d.png", i, j);
alphabets[j][i] = load_image_color(buff, 0, 0);
}
}
return alphabets;
}
结果如下,标签的大小修改还没有找到在哪里修改,如果有小伙伴实现了修改大小和线的粗细,可以留言告知一下,谢谢。