mac下YOLO中文标签实现

来源:互联网 发布:凡科能在mac上使用么 编辑:程序博客网 时间:2024/06/08 15:42

原来的字符集就是ASCII,逐个取字母&符号对应的png图片拼接出标签图像再嵌入视频图像中,但是中文无对应的处理。调试找到detector.c和image.c中相关label处理和图像处理的代码后觉得中文处理还是比较麻烦,搜索看看是否有前人遇到和处理过了,幸运的是

http://blog.csdn.net/hrsstudy/article/details/61671886


上述博文讲了修改方法,但是有如下几个坑:

1,mac下未找到字体

 /usr/share/fonts/truetype/arphic/ukai.ttc
找了很多文字转图片的处理方法,最后还是自行搜索下载ukai.ttc字体放到data/labels目录下;

2,自动读取可识别物体名称列表文件并从字体中生成对应图片:

# -*- coding: utf-8 -*-    
import os   
import string
import pipes

l=[]
with open("../coco.names") as list_in: #直接将coco.names中的名称先替换为中文
    for line in list_in:
    line=line.strip('\n')
    l.append(line)

font = 'ukai.ttc' #'futura-normal'

#l=["自行车","车","摩托车","飞机","大巴","火车","卡车","船","交通灯","消防栓","停止标识","停车计时器","长凳","鸟","猫","狗","马","羊","牛","大象","熊","斑马","长颈鹿","背包","伞","手提包","领带","手提箱","飞盘","雪橇","滑雪板","体育用球","风筝","棒球棒","棒球手套","滑板","冲浪板","网球拍","瓶子","红酒杯","杯子","叉子","小刀","勺子","碗","香蕉","苹果","三明治","橘子","西兰花","萝卜","热狗","披萨","甜甜圈","蛋糕","椅子","沙发","盆栽","床","餐桌","厕所","显示器","笔记本","鼠标","遥控","键盘","手机","微波炉","烤箱","吐司机","水槽","冰箱","书","闹钟","花瓶","剪刀","泰迪熊","吹风机","牙刷"]

def make_labels(s): 
    i = 0 
    for word in l:
    #print("["+word+"]")
    os.system("convert -fill black -background white -bordercolor white -border 4  -font %s -pointsize %d label:\"%s\" \"coco80_%d_%d.png\""%(font,s,word,i,s/12-1)) 
    i=i+1
for i in [12,24,36,48,60,72,84,96]:
    make_labels(i)
    print("process size ", i)
    

坑1:用修改后的make_labels-Chn.py来处理,其中的一个坑是coco.names读出的每行名称后面多一个回车符,导致标注标签图片很高(多了一行),用strip()处理掉就ok了;

坑2:coco80_%d_%d.png要和image.c中的load_alphabet()中标签文件名称一致;


2,github中的image.c缺代码

https://github.com/PaulChongPeng/darknet/commit/798fe7cc4176d452a83d63eb261d6129e397a521

image.c文件缺大量代码,make报错缺失大量的object,后对比修改前后的image.c,发现遗漏了非常多的未修改函数,把缺失的object对应的函数拷贝到修改后的image.c中,再make;

3,80种名称还容易处理,但是yolo9000种名称,现在的全部预先读取到缓存中的玩法,image.c的load_alphabet()直接报内存分配错误;

后续可以优化为需要再读取,或者分配全局内存;




原创粉丝点击