自制汉字字库,识别汉字(一)(数字篇)
识别0~9的数字(以宋体-常规-小五举例)
1、数字在显示屏的效果。
打开一个txt文件,选择“宋体-常规-小五”,“Print Screen”然后用画图板打开,放大到最大后可以看到下边的图片,
,可以看到每个数字都是由5x8的黑白像素点组成,只截取数字部分,得到59x8的图片:。
2、生成5x8数字子模(字典),只有10个数字,可以用眼睛数的方式来得到,但后期生成字母(26个)、汉字(常用3500个)时用眼睛看的方式以及不实际了。
所以直接用程序自动化生成的方式:
a、安装PIL模块,用于打开png图片,读取像素点信息
b、5x8就是40个点,直接用40个位来表示,黑色(0,0,0)用1,白色(255,255,255)用0,40个位直接用一个数字表示即可(也可以用16进制数会少一些),全1也就是0xFFFFFFFFFF = 1099511627775
c、直接复制代码如下:
#!/usr/bin/python
# -*- coding: gb18030 -*-from PIL import Imagedef find_color_rect(img, (x,y), width, height, color=(255,255,255)):ret_find = 1 << (width*height)ret_find = 0i = 0point_color = 0,0,0while i < width:ret_find <<= heightj = 0while j < height: point_color = img.getpixel((x+i, y+j))if point_color[0] == color[0] and point_color[1] == color[1] and point_color[2] == color[2]:ret_find |= 1 << (height-1 - j)j += 1 i += 1return ret_finddef create_dic(img,w,h,ch_color,txt_name):number = 1 << (w * h)ch_count = 0ch_dic_str = "gCH_dic = { "ch_dic_str += "\n"i, j = 0, 0while i <= img.size[0] - w: number = find_color_rect(img, (i,j),w,h,ch_color)if number != 0:#print txt_name[ch_count], numberch_dic_str += "%d" %numberch_dic_str += ":"ch_dic_str += "\"%s\""%(txt_name[ch_count])ch_dic_str += ","ch_dic_str += "\n"i += w + 1ch_count += 1else:print "end"breakch_dic_str += "}"print ch_dic_strif __name__ == "__main__":img_5x8 = Image.open("digit_5x8.png") #digit_5x8.png 就是处理过后59x8的图片create_dic(img_5x8, 5,8, (0,0,0),"0123456789")
d、得到一个5x8的数字子模(字典)
gCH_dic = {
543338627454:"0",
1107230976:"1",
427442147681:"2",
285641642350:"3",
35236675333:"4",
1041824321934:"5",
543608131854:"6",
826791682176:"7",
474888638830:"8",
483377383806:"9",
}
3、通过数字子模,可以确定图片中5x8的矩阵区域内是否是数字
通过img = ImageGrab.grab()函数可以截屏,然后直接从img中解析数字,相当实用,
当然img也可以通过Image.open("digit_5x8.png")打开文件的方式得到。
#!/usr/bin/python
# -*- coding: gb18030 -*-import time
from PIL import ImagegCH_dic= {
543338627454:"0",
1107230976:"1",
427442147681:"2",
285641642350:"3",
35236675333:"4",
1041824321934:"5",
543608131854:"6",
826791682176:"7",
474888638830:"8",
483377383806:"9",
}def find_color_rect(imgdic, (x,y), chw, chh, color=(255,255,0)):ret_find = 1 << (chw*chh)ret_find = 0i = 0point_color = 0,0,0while i < chw:ret_find <<= chhj = 0while j < chh:point_color = imgdic[(x+i, y+j)]if point_color[0] == color[0] and point_color[1] == color[1] and point_color[2] == color[2]:ret_find |= 1 << (chh-1 - j)j += 1 i += 1return ret_finddef print_img_num(imgdic, (imgw, imgh), (chw, chh), color):str_data = ""x, y = 0, 0while y <= imgh - chh:x = 0sign = 0while x <= imgw - chw: st = gCH_dic.get(find_color_rect(imgdic,(x,y),chw,chh,color), "-1")if st != "-1":str_data += stx += chwsign = 1continuex += 1if sign:y += chhstr_data += "\n"else:y += 1print str_dataif __name__ == "__main__":time1 = time.time()img = Image.open("digit_1.png")imgdic = {}for j in range(img.size[1]):for i in range(img.size[0]):imgdic[(i,j)] = img.getpixel((i, j))print_img_num(imgdic, (img.size[0], img.size[1]), (5, 8), (0,0,0))print time.time() - time1
自制汉字字库,识别汉字(一)(数字篇)相关推荐
- linux tf2 中文,ocrcn_tf2: TensorFlow2.0的中文汉字手写体识别!OCR必备,欢迎star!
TensorFlow 2.0 中文手写字识别(汉字OCR) 在开始之前,必须要说明的是,本教程完全基于TensorFlow2.0 接口编写,请误与其他古老的教程混为一谈,本教程除了手把手教大家完成这个 ...
- 【AI参赛经验】深度学习入门指南:从零开始TinyMind汉字书法识别——by:Link
各位人工智能爱好者,大家好! 由TinyMind发起的#第一届汉字书法识别挑战赛#正在火热进行中,比赛才开始3周,已有数只黑马冲进榜单.目前TOP54全部为90分以上!可谓竞争激烈,高手如林.不是比赛 ...
- Foxdisk11-小字库显示汉字2
(请保留 -> 作者:罗冰 ) 刚从大学毕业那会,对操作系统极其入迷,总想搞清楚底层是怎么运行的.其中最感兴趣的是图形的显示,BIOS对硬件的控制等.找了很多资料看,正好公司的一些项目上也需要用 ...
- 深度学习入门指南:从零开始TinyMind汉字书法识别
深度学习入门指南:从零开始TinyMind汉字书法识别 这几天在刷这个新出的比赛,受举办方邀请谢了一篇文章,也转到CSDN来和大家分享下吧.话说TinyMind不是被CSDN收购了么,我这算不算把统一 ...
- Python生成汉字字库文字,以及转换为文字图片
笔者小白在收集印刷体汉字的深度学习训练集的时候,一开始就遇到的了一个十分棘手的问题,就是如何获取神经网络的训练集数据.通过上网搜素,笔者没有找到可用的现成的可下载的汉字的训练集,于是笔者采用了代码自建 ...
- stm32汉字字库显示实验与OLED的使用(开始于2021-09-01)
stm32汉字字库显示实验与OLED的使用 1.字库的使用 GBK字库的简介: GBK库的由两部分组成,如下图: 高位从0x81开始是为了兼容ASII字符,因为未扩展的ASII字符是从0-128,即0 ...
- 华科计算机组成原理 存储系统实验 汉字字库Logsim实验
华科计算机组成原理 存储系统实验 汉字字库 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 例如:第一章 Python 机器学习入门之pandas的使用 提示:写完文章后,目录可以自 ...
- python图片转换成文字_Python输出汉字字库及将文字转换为图片的方法
用python输出汉字字库问题1:假设我们知道汉字编码范围是0x4E00到0x9FA5,怎么从十六进制的编码转成人类可读的字呢? 问题2:怎么把unicode编码的字写入文件呢,如果直接用open() ...
- emwin 使用外部字库_emWin – 汉字字库生成及显示 | 学步园
使用了emWin之后,除了画图形或bmp之外,另外一个大头就是显示字符了.字符包括ASCII码,当然最重要的就是汉字显示了. 这里就介绍如何生成自定义的汉字字库,以及如何显示在TFT屏幕上. 硬件准备 ...
最新文章
- Android 之问题集锦
- python字典一键多值_Python实现字典一个键对应多个值
- python下载网页歌词_使用Python下载歌词并嵌入歌曲文件中的实现代码
- HR怎么从面试中了解程序员的真实水平?需要面试的程序员,注意了!
- Unity(TransForm)
- Tomcat性能调优方案
- 8.Mac PHPStorm 快捷键
- Oracle闩:Cache Buffers chains
- spl_autoload_register 和 __autoload()魔术方法
- paip.提升开发效率--终极方法---组件化及其障碍
- UNIX再学习 -- RS485 串口编程
- 使用 React-Sketchapp
- C#在VS2019中各种字体颜色的意思
- linux文件管理命令ppt,linux命令以及文件管理.ppt
- [附源码]java毕业设计校园拓展活动管理系统
- 在h5页面中调起支付宝小程序中的某一个页面以及URLScheme 之 支付宝
- Android源码编译及替换成自己编译的linux内核
- Java设计模式-程序员内功修炼-目录
- 示波器测量汽车进气压力传感器信号及波形分析
- Android:BroadCast Receiver
热门文章
- 链接中的utm_source、utm_campaign、utm_campaign、utm_content、utm_term的含义【转】
- 开源游戏服务器框架NoahGameFrame(NF)服务器端环境搭建(二)
- #从零开始学C语言# 又名 #一人手打情书#
- 用ansys出黑白等值线图
- Unable to create/open lock file: /var/lib/mongodb/mongod.lock errno:13 Permission denied Is a mong..
- 第三方测试什么意思?国内知名第三方测试公司排名
- Euler配置yum源
- 抖音常见的违规封号行为;怎么避免抖音违规;丨国仁网络资讯
- 一条命令搞定黑苹果双系统时差
- 浏览器缩放时,页面布局发生变化