拥有的数据集是这样的
-标注方式
标记蓝色框的位置和里面的字符
-标签全部在文件夹C:\Users\bxzyz\Desktop\doc\ocr\data\OCR-caiji里面
标签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>
把这些图片的字符裁剪出来放入,不同的字符放入不同的文件夹里面,就像下面这样
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)
网友评论