识别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

自制汉字字库,识别汉字(一)(数字篇)相关推荐

  1. linux tf2 中文,ocrcn_tf2: TensorFlow2.0的中文汉字手写体识别!OCR必备,欢迎star!

    TensorFlow 2.0 中文手写字识别(汉字OCR) 在开始之前,必须要说明的是,本教程完全基于TensorFlow2.0 接口编写,请误与其他古老的教程混为一谈,本教程除了手把手教大家完成这个 ...

  2. 【AI参赛经验】深度学习入门指南:从零开始TinyMind汉字书法识别——by:Link

    各位人工智能爱好者,大家好! 由TinyMind发起的#第一届汉字书法识别挑战赛#正在火热进行中,比赛才开始3周,已有数只黑马冲进榜单.目前TOP54全部为90分以上!可谓竞争激烈,高手如林.不是比赛 ...

  3. Foxdisk11-小字库显示汉字2

    (请保留 -> 作者:罗冰 ) 刚从大学毕业那会,对操作系统极其入迷,总想搞清楚底层是怎么运行的.其中最感兴趣的是图形的显示,BIOS对硬件的控制等.找了很多资料看,正好公司的一些项目上也需要用 ...

  4. 深度学习入门指南:从零开始TinyMind汉字书法识别

    深度学习入门指南:从零开始TinyMind汉字书法识别 这几天在刷这个新出的比赛,受举办方邀请谢了一篇文章,也转到CSDN来和大家分享下吧.话说TinyMind不是被CSDN收购了么,我这算不算把统一 ...

  5. Python生成汉字字库文字,以及转换为文字图片

    笔者小白在收集印刷体汉字的深度学习训练集的时候,一开始就遇到的了一个十分棘手的问题,就是如何获取神经网络的训练集数据.通过上网搜素,笔者没有找到可用的现成的可下载的汉字的训练集,于是笔者采用了代码自建 ...

  6. stm32汉字字库显示实验与OLED的使用(开始于2021-09-01)

    stm32汉字字库显示实验与OLED的使用 1.字库的使用 GBK字库的简介: GBK库的由两部分组成,如下图: 高位从0x81开始是为了兼容ASII字符,因为未扩展的ASII字符是从0-128,即0 ...

  7. 华科计算机组成原理 存储系统实验 汉字字库Logsim实验

    华科计算机组成原理 存储系统实验 汉字字库 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 例如:第一章 Python 机器学习入门之pandas的使用 提示:写完文章后,目录可以自 ...

  8. python图片转换成文字_Python输出汉字字库及将文字转换为图片的方法

    用python输出汉字字库问题1:假设我们知道汉字编码范围是0x4E00到0x9FA5,怎么从十六进制的编码转成人类可读的字呢? 问题2:怎么把unicode编码的字写入文件呢,如果直接用open() ...

  9. emwin 使用外部字库_emWin – 汉字字库生成及显示 | 学步园

    使用了emWin之后,除了画图形或bmp之外,另外一个大头就是显示字符了.字符包括ASCII码,当然最重要的就是汉字显示了. 这里就介绍如何生成自定义的汉字字库,以及如何显示在TFT屏幕上. 硬件准备 ...

最新文章

  1. Android 之问题集锦
  2. python字典一键多值_Python实现字典一个键对应多个值
  3. python下载网页歌词_使用Python下载歌词并嵌入歌曲文件中的实现代码
  4. HR怎么从面试中了解程序员的真实水平?需要面试的程序员,注意了!
  5. Unity(TransForm)
  6. Tomcat性能调优方案
  7. 8.Mac PHPStorm 快捷键
  8. Oracle闩:Cache Buffers chains
  9. spl_autoload_register 和 __autoload()魔术方法
  10. paip.提升开发效率--终极方法---组件化及其障碍
  11. UNIX再学习 -- RS485 串口编程
  12. 使用 React-Sketchapp
  13. C#在VS2019中各种字体颜色的意思
  14. linux文件管理命令ppt,linux命令以及文件管理.ppt
  15. [附源码]java毕业设计校园拓展活动管理系统
  16. 在h5页面中调起支付宝小程序中的某一个页面以及URLScheme 之 支付宝
  17. Android源码编译及替换成自己编译的linux内核
  18. Java设计模式-程序员内功修炼-目录
  19. 示波器测量汽车进气压力传感器信号及波形分析
  20. Android:BroadCast Receiver

热门文章

  1. 链接中的utm_source、utm_campaign、utm_campaign、utm_content、utm_term的含义【转】
  2. 开源游戏服务器框架NoahGameFrame(NF)服务器端环境搭建(二)
  3. #从零开始学C语言# 又名 #一人手打情书#
  4. 用ansys出黑白等值线图
  5. Unable to create/open lock file: /var/lib/mongodb/mongod.lock errno:13 Permission denied Is a mong..
  6. 第三方测试什么意思?国内知名第三方测试公司排名
  7. Euler配置yum源
  8. 抖音常见的违规封号行为;怎么避免抖音违规;丨国仁网络资讯
  9. 一条命令搞定黑苹果双系统时差
  10. 浏览器缩放时,页面布局发生变化