制作OCR数据集

参考自链接:https://blog.csdn.net/meyh0x5vDTk48P2/article/details/79848753

手写数据集:http://www.nlpr.ia.ac.cn/databases/handwriting/Offline_database.html

  1. 确定你要生成多少字体,生成一个记录着汉字与label的对应表。

  2. 确定和收集需要用到的字体文件。

  3. 生成字体图像,存储在规定的目录下。

  4. 适当的数据增强

      第三步的生成字体图像最为重要,如果仅仅是生成很正规的文字,那么用这个正规文字集去训练模型,第一图像数目有点少,第二模型泛化能力比较差,所以我们需要对字体图像做大量的图像处理工作,以增大我们的印刷体文字数据集。

       总结了一下,我们可以做的一些图像增强工作有这些:

  1. 文字扭曲

  2. 背景噪声(椒盐)

  3. 文字位置(设置文字的中心点)

  4. 笔画粘连(膨胀来模拟)

  5. 笔画断裂(腐蚀来模拟)

  6. 文字倾斜(文字旋转)

  7. 多种字体

噪点:

def add.noise(cls,img):
    for i in range(20):
        temp_x = np.random.randint(0,img.shape[0])
        temp_y = np.random.randint(0,img.shape[1])
        img[temp_x][temp_y] = 255
    retrun img

腐蚀

def add_erode(cls,img):
    kernel =cv2.getStructuringElement(cv2.MORPH_RECT,(3,3))
    img = cv2.erode(img,kernel)
    return img

膨胀

def add_dilate(cls,img):
    kernel = cv2.getStructuringElement(cv2.MORPH_RECT,(3,3))
    img = cv2.dilate(img,kernel)
    return img

随机扰动

def do(self,img_list=[]):
    aug_list = copy.deepcopy(img_list)
    for i in range(len(img_list):
        im = img_list[i]
        if self.noise and random.random()<0.5:
            im = self.add_noise(im)
        if self.dilate and random.random()<0.25:
            im = self.add_dilate(im)
        if self.erode and random.random()<0.25:
            im = self.add_erode(im)
        aug_list.append(im)
    return aug_list

 

你可能感兴趣的:(制作OCR数据集)