首页 » 科学 » [按键精灵]字库文件你打开看过吗?为啥你做的字库不好用?_字库_文字

[按键精灵]字库文件你打开看过吗?为啥你做的字库不好用?_字库_文字

雨夜梧桐 2025-01-03 23:24:29 0

扫一扫用手机浏览

文章目录 [+]

序言

过几天要在弟子班的群里讲一下笔墨识别,涉及到字库制作的知识点,以是这期先做个文章讲解方便学员学习。

[按键精灵]字库文件你打开看过吗?为啥你做的字库不好用?_字库_文字 [按键精灵]字库文件你打开看过吗?为啥你做的字库不好用?_字库_文字 科学

一、字库文件的制作

[按键精灵]字库文件你打开看过吗?为啥你做的字库不好用?_字库_文字 [按键精灵]字库文件你打开看过吗?为啥你做的字库不好用?_字库_文字 科学
(图片来自网络侵删)

字库文件的制作分为两种:自动天生和手动编写。

自动天生是常用的方法,手动编写比较麻烦基本不用,稍后我们讲事理的时候会讲到,如果你已经会制作字库,可以直接跳过第一部分,直接看最下面的字库事理。

自动天生字库的过程:

①利用抓抓工具,抓取含有要做字库的笔墨所在的屏幕画面

②、在抓抓截图上右键,点击选取范围

③、激活“选取范围”功能后,框选要做字库的笔墨,并确认范围

④、右键通过拾色功能选取笔墨笔画上的一个像素颜色。

这一步会得到一个二值化的笔墨图片,下图中间预览图

⑤、微调偏色的数值,使预览图中笔墨的笔画变得完全。

⑥、点击“制作字库”按钮,开始制作字库

⑦、提取点阵,根据笔墨字数选择“单个”或者“多个”,在提取点阵(多个)时,会哀求填写行间距和列间距。

这个行、列间距是指的两个字(笔画)之间的间隔最小值,比如两个字之间的空隙是2个像素,如果设置间距是1或者2,小于笔墨空隙,制作字库就会认为这是两个字,如果设置间距为3,那么制作字库时就会认为这是一个字。

⑧、提取点阵之后,会得到多个字库数据,点击它们,分别查看它们对应哪个字,并在笔墨定义位置填上这个字。

这一步是把二值化的图像和笔墨对应上,让脚本知道看到这个图像就代表这个笔墨。

每定义一个笔墨就点击右侧的添加到字库按钮,就可以保存到字库文件里面,字库文件是一个txt文本。

⑨利用字库文件

不才方有自动天生代码的按钮,须要笔墨识别便是点ocr脚本,须要找笔墨位置就点findstr脚本。

SetRowsNumber(0)//把稳:每次制作完字库后,须要自行把制作的字库文件添加到脚本“附件”中TracePrint SetDictEx(0, "Attachment:mq_soft.txt")TracePrint UseDict(0)//以上两句脚本只须要调用一次Dim ocrcharocrchar=Ocr(688,9,704,40,"FFFFFF-333333",0.9)Traceprint ocrchar

二、字库的事理

字库的浸染是把图像“笔墨化”,如下图所示,对付脚本来说它是一个黑白像素点组成的图片,对付我们人来说这个图是一个数字“2”,我们做字库便是见告脚本这个图代表数字“2”,往后碰着一样的图都要识别成数字“2”。

做字库之前先要有黑白图,这就要二值化处理,处理依据是比色,在自动天生字库的过程中有一个拾取颜色的操作,便是选中笔墨上一个像素点的颜色,这个实在便是用来比色的基准色,如果颜色和这个基准色相同(相似)便是用白色表示,反之用玄色表示,终极形成黑白二值化图片。

怎么用字库把这个黑白二值化图记录下来,打开一个字库文件看一下:

这个字库文件里面有3条字库数据,每一行是一条数据。

300FC07C03E03981871C17E040010000 $ 2 $ 0.0.40 $ 14

一条数据由4个部分组成,每一部分都有不同浸染,它们之间用 $ 分别隔,下面我们依次说一下:

①、第一部分300FC07C03E03981871C17E040010000

二值化转成十六进制的数据,末位补了一个0

先把图像二值化写出来:

玄色像素用0表示,白色像素用1表示,垂直方向从上往下依次开始

第一列:00110000000011

第二列:11110000000111

……

末了一列:0000000000000

然后把所有的连接在一起:

001100000000111111000000011111000000001111100000001110011000000110000111000111000001011111100000010000000000000100000000000000

每四位转成一个十六进制的数字,为啥是四位?由于2的四次方是16。

比如:

0011 => 30000 => 00000 => 01111 => F……

全部二进制都写完便是字库里面的十六进制数据。

这里有两个问题:

一是为啥要把所有列的二值化连接起来,由于每一列的数据不一定是4的倍数,如例子中一列是14个点,不能被4整除,就须要从下一列中补齐,利用连接的办法把所有列合并在一起,就可以方便得到4位二进制数据。

二是全部连接后的数据,如果不是4的倍数,那么就末位补0

比如我们这个便是每列16个像素,有9列,一共是126个

②、第二部分数字2

这一部分便是笔墨定义,也便是我们这条字库数据代表什么笔墨,这里便是代表数字2。

③、第三部分 0.0.40

0.0 是固定值,40是二值化中1的数量

④、第四部分 14

14是每一列的像素数

上面便是字库数据的4个组成部分,利用这4个数据就可以精准定义一个二值化的图像。

三、自己做的字库为啥常常不好用

举个例子,这是同一个屏幕上截图的两个2

看起来是不是一样的,但是如果我放大一下,就看到差别了。

第一个图有113个 “1”

第二个图有111个 “1”

无论从二值化的排列上,还是1的数量两者都不一样,以是两者的不能通用的,要想都能识别,就须要在字库文件中做两条字库数据。

很多人做字库都是一个字一条字库数据,这就导致“字库失落效”,要想做个“优质”的字库,就要每个笔墨做多条字库数据。

当然字库数据也不是随便做的,每次识别不到了,就给字库加上一条,当你把所有可能的二值化样子都做成字库数据,便是一个可用的字库了。

正文完=

标签:

相关文章

R语言在数据分析中的右对齐方法与方法

随着大数据时代的到来,数据分析已成为各行各业不可或缺的技能。R语言作为一种功能强大的统计编程语言,在数据分析领域发挥着越来越重要的...

科学 2025-01-05 阅读0 评论0