美文网首页
生成自己的OCR数据集

生成自己的OCR数据集

作者: 1037号森林里一段干木头 | 来源:发表于2020-08-06 14:52 被阅读0次
拥有的数据集是这样的
图三.PNG

-标注方式


图2.PNG

标记蓝色框的位置和里面的字符

-标签全部在文件夹C:\Users\bxzyz\Desktop\doc\ocr\data\OCR-caiji里面

图1.PNG

标签xml文件内容

<?xml version="1.0" ?><annotation>
    <folder>OCV - 3</folder>
    <filename>201703290301290443-8587108894330715741-1.bmp</filename>
    <path>D:\ocv收集\OCV - 3\201703290301290443-8587108894330715741-1.bmp</path>
    <source>
        <database>Unknown</database>
    </source>
    <size>
        <width>0</width>
        <height>0</height>
        <depth>3</depth>
    </size>
    <segmented>0</segmented>
    <object>
        <name>SA</name>
        <pose>Unspecified</pose>
        <truncated>0</truncated>
        <difficult>0</difficult>
        <bndbox>
            <xmin>38</xmin>
            <ymin>30</ymin>
            <xmax>95</xmax>
            <ymax>67</ymax>
        </bndbox>
    </object>
</annotation>

把这些图片的字符裁剪出来放入,不同的字符放入不同的文件夹里面,就像下面这样


tu4.PNG 图5.PNG
import os
import cv2
from xml.dom.minidom import parse
filepath=r"C:\Users\bxzyz\Desktop\doc\ocr\data\OCR-caiji"
imgpath=r"C:\Users\bxzyz\Desktop\doc\ocr\data\orc-data\images"
savepath=r"C:\Users\bxzyz\Desktop\doc\ocr\data\orc-data\annotations"
num=[ x for x in range(48,58)]
Chara=[x for x in range(65,91)]
chara=[x for x in range(97,123)]
num.extend(Chara)
num.extend(chara)
dic={}
for i in range(1,63):
    #dic.append(chr(num[i]))
    dic[chr(num[i-1])]="charactor-"+str(i).zfill(3)
numb=0
brk=0
for file in os.listdir(filepath):
    xmlname=os.path.join(filepath,file)
    root=parse(xmlname)
    imgname=root.getElementsByTagName("filename")[0]
    #print(len(imgname))
    print(imgname.nodeName,":",imgname.childNodes[0].nodeValue)
    imgname=os.path.join(imgpath,imgname.childNodes[0].nodeValue)
    img=cv2.imread(imgname)
    

    objs=root.getElementsByTagName("object")
    for obj in objs:
        name=obj.getElementsByTagName("name")[0].childNodes[0].nodeValue
        print("label:",name)
        xmin=int(obj.getElementsByTagName("xmin")[0].childNodes[0].nodeValue)
        xmax=int(obj.getElementsByTagName("xmax")[0].childNodes[0].nodeValue)
        ymin=int(obj.getElementsByTagName("ymin")[0].childNodes[0].nodeValue)
        ymax=int(obj.getElementsByTagName("ymax")[0].childNodes[0].nodeValue)
        
        #recimg=cv2.rectangle(img, (xmin, ymin), (xmax, ymax), (255, 0, 0), 2)
        #cv2.imshow("src",recimg)
        
        subimg_xmin=0
        subimg_xmax=0
        subimg_ymax=0
        subimg_ymin=0

        if (ymax-ymin)>(xmax-xmin)*1.5:
            #xml坐标水平x增大
            for i in range(len(name)):
                #print(name[i],":",dic[name[i]])
                if name[i] not in dic:
                    continue
                subimg_xmin=xmin
                subimg_xmax=xmax
                subimg_ymin=int(ymin+i*(ymax-ymin)/len(name))
                subimg_ymax=int(subimg_ymin+(ymax-ymin)/len(name))
                subimg=img[subimg_ymin:subimg_ymax,subimg_xmin:subimg_xmax]
                #recimg=cv2.rectangle(img, (subimg_xmin, subimg_ymin), (subimg_xmax, subimg_ymax), (0,0, 255), 1)
                #cv2.imshow("src",img)
                #cv2.imshow("subimg",subimg)
                numb=numb+1
                the_name_of_img=str(numb).zfill(5)
                savename=os.path.join(savepath,'\\',dic[name[i]],dic[name[i]]+"_"+the_name_of_img+".bmp")
                print("savename:",savename)
                cv2.imwrite(savename,subimg)
                #cv2.waitKey(500)

        elif (ymax-ymin)*1.5<(xmax-xmin):
            for i in range(len(name)):
                #print(name[i],":",dic[name[i]])
                if name[i] not in dic:
                    continue
                subimg_ymin=ymin
                subimg_ymax=ymax
                subimg_xmin=int(xmin+i*(xmax-xmin)/len(name))
                subimg_xmax=int(subimg_xmin+(xmax-xmin)/len(name))
                subimg=img[subimg_ymin:subimg_ymax,subimg_xmin:subimg_xmax]
                #recimg=cv2.rectangle(img, (subimg_xmin, subimg_ymin), (subimg_xmax, subimg_ymax), (0,0, 255), 1)
                #cv2.imshow("src",img)
                #cv2.imshow("subimg",subimg)
                numb=numb+1
                the_name_of_img=str(numb).zfill(5)
                savename=os.path.join(savepath,dic[name[i]],dic[name[i]]+"_"+the_name_of_img+".bmp")
                print("savename:",savename)
                cv2.imwrite(savename,subimg)
                #cv2.waitKey(500)

相关文章

网友评论

      本文标题:生成自己的OCR数据集

      本文链接:https://www.haomeiwen.com/subject/ouwzrktx.html