首先明确一下我们的目标。我们要做的是检测一个字符,通过图像为中介表示的话就是识别一张图,从而判断它是“什么字符”;那么首先要做的就是提取图像的特征,然后根据特征来判断这张图像到底是什么。
OK,言归正传,我的想法是直接用CNN的方法粗暴地对单子图像的特征进行了提取,然后再进行简单的欧式距离的比较来判断待测图像是哪个字符。
第一步,我们要获取足够的字符样本。感觉有一个超级好用的东西,python里的pygame,这是一个不主流的写游戏的东西,但是可以快速而方便地实现标准单字样本的获取。(也是网上某处老哥的文章,不过后来我找不到了)下面上代码,超级简单。
#encoding: utf-8
import os
import pygame
chinese_dir = 'chinses'
if not os.path.exists(chinese_dir):
os.mkdir(chinese_dir)
pygame.init()
start,end = (0x4E00, 0x9FA5) # 汉字编码范围
for codepoint in range(int(start), int(end)):
word = chr(codepoint)
font = pygame.font.Font("msjhbd.ttc", 64)
# 当前目录下要有微软的字体文件.ttc,或者去c:\Windows\Fonts目录下找
# 64是生成汉字的字体大小
rtext = font.render(word, True, (0, 0, 0), (255, 255, 255))
pygame.image.save(rtext, os.path.join(chinese_dir, word + ".png"))
简单来说就是直接拿微软的字库,然后把它用pyganme这个东西单字熏染成一张张小图片,从而实现我拙劣思考了(emmm。。)
后面就是卷积提取特征和对比的过程了,代码还是有点乱,过两天整理好了再发。