韩语手写识别AI
建国大学高级,多媒体编程 - 学期项目(个人项目)
一、简介
“可以通过人工神经网络学习个人的韩语笔迹吗?”
即使写同样的字母,每个人的笔迹风格看起来也有微妙的不同。被迫写字或打嗝写字的人的笔迹会留下与平常不同的痕迹,作为证据的可靠性很高。这种独特性使得签名独一无二。在重要文件和考试中,检查笔迹的真实性非常重要。
由于是用来证明身份的,所以笔迹是唯一的,但如果有两种不同的笔迹,只有细微的差别,人类很难用肉眼来区分。因此,我想实现一个用于韩语手写识别的人工智能模型。
(1-1) 输入数据
- 上图都是不同人写的。 (您可以看到它们是相同的字母,但略有不同。)
(1-2)目标
- 10人(3名家人,7名亲密朋友)
- BSN(Sona Bang)、CHW(Howon Choi)、KBJ(Beomjun Kim)、KJH(Joonhyung Kwon)、LJH(Jongho Lee)、LSE(Seungeon Lee)、PJH(Jonghyuk Park)、PSM(Sangmoon Park)、SHB(石玄彬)、SWS(申佑燮)
(1-3) 预期应用领域
- 国家考试及重要文件的笔迹验证。
- OCR(光学字符识别)
2. 创建数据库
2-1.单字母数据
(1) 未读
- 使用字体设计公司“Ongle-leap”提供的模板
- 包含韩文字母的所有组合
(2) 未锐化蒙版
(3)灰度变换
(4) 直方图检查并应用第一个阈值
- 通过直方图设置阈值,根据阈值对图像进行二值化。
- (本例中阈值设置为0到255中的150)
(5) 应用低通滤波器
- 为了提取笔迹的位置,需要通过LPF对笔迹进行平滑处理,使轮廓暴露出来。
- 适当设置内核大小,并通过 cv2.filter2D 将 LPF 应用于二值化图像。
- Kernel 尺寸越小,越容易检测元音和辅音等更小的单元,Kernel 尺寸越大,越容易检测字母本身的轮廓。
- (示例适用21x21内核)
(6) 直方图检查并应用第二阈值
- 通过LPF平滑后的图像直方图设置阈值,然后根据阈值再次进行二值化。
- (阈值示例:230)
(7) 提取轮廓&坐标,图像裁剪
- 未提取非字母的小轮廓。
- 从提取的轮廓中提取x,y坐标和w,h值,并用正方形再次计算坐标,以便尽可能不丢失手写特征,因为稍后必须将它们调整为64x64尺寸。
- 通过计算出的坐标,将图像裁剪成正方形。
(8) 写入
- 每人 81 个单字母数据
- 总计:收集了 810 个单字母数据,
2-2.两个字母的数据
- 两个字母的数据是通过组合不同的单字母数据创建的,每个数据都进行了适当的缩放。
- 为了减少调整大小时特征信息的丢失,创建了img_concat(img1, img2)函数,用于连接图像,并将它们形成正方形。
- 每个目标获得 6,480 个两字母数据 (81P2)
2-3.三字母数据
- 三字母数据是通过将一字母数据和两字母数据组合而成的,每个数据都进行了适当的缩放。
2-4.笔记中的实际手写数据
3. 第一个结果
- 结果
- 损失=0.7819,准确度=0.72
- 测试数据结果=0.6503
4. 第二个结果
- 结果
- 损失=0.0397,准确度=0.9908
- 测试数据结果=0.9360
5、结果分析
与第一个结果相比,第二个结果都有显着改善。我认为成绩提高的原因如下。
(5-1)增加用于学习的数据
- 第一次尝试中,每个目标使用了 1,111 个数据,第二次尝试中,使用了 2,411 个数据,增加了一倍多。
- 由于学习和评估是通过更多的数据进行的,因此可以捕捉到目标笔迹更微妙的特征。
(5-2)人工神经网络层的变化
- 在第二次尝试中,修改了卷积掩码的大小和池化的大小。
- 卷积掩模的尺寸被减小到比以前更小的尺寸,以捕获非常精细的笔迹特征
- 通过减小池化大小,减少学习过程中手写特征的损失。
- 此外,为了包含更多关于手写的信息作为参数,全连接的节点数量从 128 个增加到 256 个
(5-3)批量大小和学习率的增加