之所以会出现乱码,这是因为DOS系统本身,并不支持汉字显示的缘故。
解决这个问题的途径有很多。
比如打造一个CCDOS、UCDOS之类的汉字操作系统……
这样可以一劳永逸,但工程量十分浩大。
所以江寒琢磨了一下,决定采用一种临时性的解决方案。
他先退出了虚拟空间,上网找到了一份IMG格式的UCDOS系统软盘映像。
下载、解压之后,将HZK16和HZK16F提取了出来,并传到了虚拟空间里的286电脑中。
这两个文件是UCDOS的字库文件,前者是简体中文字库,后者则支持繁体中文。
随后,江寒再次进入虚拟空间,在自己制作的字典程序里添加了一小段代码,使其拥有了汉字显示功能。
基本原理是根据汉字的内码,在字库文件中找到对应的点阵信息,然后一个像素、一个像素地画到屏幕上。
然而,在286这么落后的电脑上,如果不使用一点技巧,直接画点的话,每秒钟大概只能显示5~6个汉字。
这样的速度自然远不能让人满意。
为了提高显示速度,远古的编程高手们,开发出了一种叫做“直接写屏”的技术,将像素信息直接写到“显示缓冲区”中去。
“显示缓冲区”是一块特别的内存区域,写入其中的数据,会马上显示在屏幕上。
使用了“直接写屏”技术的软件,理论上来说,显示速度可以接近机能的上限。
这种技术也有缺点,那就是各种显示卡、显示模式,所使用的“显示缓冲区”,位置并不一样。
例如CGA显卡的“显示缓冲区”,起始地址就是B800h……
这样一来,就对程序的兼容性提出了挑战。
好在江寒只需要支持自己的这台286就行,其他机型完全不需要考虑。
江寒写完这个程序,调试、编译成功了以后,他的个人专用英汉电子词典,终于可以正常使用了。
看看时间已经不早,他就退出了虚拟空间。
今晚先到这里,好好睡上一觉,剩下的事情,明晚再说……
第二天一早。
江寒起床后,刚洗完脸,手机忽然响了起来,拿过来一看,竟然是小蚊子打来的。
江寒接了起来:“这么早?”
靳雪雯嘻嘻一笑:“江寒哥哥早!”
顿了顿,又说:“嗯……对了,我这么早就给你打电话,有没有打扰到你和雨菲姐姐的好梦啊?”
江寒:“……”
最多打扰到自己,怎么可能打扰到小媳妇?
不过这个就不需要跟她解释了……
“有事说事,没事我吃饭了。”江寒边说边下楼。
靳雪雯嘟了嘟嘴,抱怨了一声:“江寒哥哥一点也不温柔……”
江寒笑而不语。
对你这个小丫头,还用得着那么小心翼翼吗?
咱的温柔只留给小媳妇就行了……
也没用江寒哄,靳雪雯很快就自己调整好了心态,欢快地说:“对了,江寒哥哥,CARC正赛还有不到一个月了,你要不要参加啊?“
上次在魔都,俩人参加的那个机器人比赛,只是华夏青少年机器人竞赛的预选赛,简称CARCP。
而1月下旬,还有一场规模更大的正赛,在帝都举行。
只有预赛的前三名,或者在其他赛事中名列前茅的选手,才会得到组办方的邀请。
江寒笑了笑:“当然。”
别的不说,单单冲着提高学力等级的机会,他也不可能错过这场盛会。
“那咱们再组一次队,好不好?”靳雪雯的语气里充满了希冀。
江寒微微一笑:“没问题,你愿意的话,还可以再带一个人进队,我这边已经找到两个了。”
正赛采用的是类似LOL的MOBA赛制,每组最少需要五台机器人,选手数量则限制在3~5人之间。
江寒已经决定了,到时候会带上方源和小鱼儿,让他们两个也长长见识。
这样一来,算上靳雪雯的话,队伍就接近满员了,最多只能再塞进来一个人……
靳雪雯很开心:“一言为定!”
两人说完这件事,约好了到时候再联络,然后就挂断了电话。
江寒和夏雨菲母女一起吃完早餐,照常去上学。
整个上午,他都在用心研读《数学物理方程》,等到中午放学时,就差不多把这本书读透了。
中午吃完饭,江寒将夏雨菲哄睡,然后就拿出笔记本电脑,开始编写程序。
他昨天就打算好了,做一个实用一点的OCR软件出来。
界面部分可以放在以后再弄,今天先把最难搞的核心算法写出来。
毕竟人工神经网络,需要大量的时间训练……
OCR的技术要点,关键在于识别算法。
打印字体的识别,比手写识别简单多了,毕竟计算机常用的字体,也就那么几种。
江寒先从网络上,将各种字体文件全都下载了一遍。
然后设计了一个程序,调用这些字体,生成了许多小图片。
每张图片都是一个汉字、数字、字母,或者特殊符号。
江寒使用数据扩充算法,将每张图片略微变形、变色、位移、旋转……
从而得到了数以十倍的样本图片。
并且在生成图片的同时,他还顺便生成了一一对应的标签。
这样就拥有了海量的训练数据。
接下来,他又综合运用已经掌握的技术,设计了一个庞大的集成式机器学习算法。
在这个算法里,不可避免地用到了CNN,也就是最新开发出来的“卷积神经网络”。
为了最大限度地提高识别正确率,整个网络包括了许多层级不同的子网络。
每个图块输入到网络中后,先由第一级网络进行粗分类。
将输入的图片,划分成汉字、数字、英文字母、特殊符号这四个大类,然后分门别类地送入四个子网络中。
如果第一级识别的结果是数字,那么就会送进一个类似于手写数字识别的小型网络中进一步分类,看看属于0~9中哪一个数字。
英文和特殊符号的处理,也和数字差不多,只是输出结果的类别稍微多了那么一点点。
但如果经过第一级网络的识别,判断归属于汉字大类,那么处理起来就稍微复杂一些了。
江寒将5000个左右的常用汉字,划分成了4000多个子集。
然后使用自组织聚类神经网络(SOM),设计了一个拥有4000多个输出的分类器。
少部分子集只含有一个元素,意味着分类到这些子集中的汉字,可以直接输出识别结果。
大部分子集里含有2~30个元素,这意味着还需要送入第三级网络,进一步进行分类。
如果该子集中的元素,只有2~3个,那么就送进一个单字分类器中,识别出最终结果。
多于3的话,就送入细分类网络模块(RNM)中进一步分类。
循环进行前两步,直到每个子集的元素个数都小于等于3,然后逐一送入单字分类器中,输出最后的结果。
这就是这个集成网络的整个工作流程,其中使用了数百个中型神经网络。
这些神经网络在设计上大同小异,所以编程难度并不高。
麻烦的是,每个神经网络都得单独训练,而这需要大量的算力。
好在他早就在高新区地下的机房里,准备好了十几台高性能服务器。
将程序设计出来后,就连同训练数据一起上传到了那些服务器中。
这样一来,十几台服务器全力运转,差不多一两天就能完成训练。