武学与Python(一)

  • 前言
  • 起手式---仙人指路
  • 第一式---浑水摸鱼
  • 第二式---水中捞月
  • 第三式---乾坤大挪移
  • 第四式---吸星大法

前言

最近沉迷武侠小说和武侠网络游戏,被里边的武学招式深深的吸引住了。武侠小说还好,整个江湖世界由作者搭建而起,主角也在起稿之后定了下来。且不说独一无二,但是武侠小说里但主角大多拥有被人无法获得的独特心法和极为给力的招式。但武侠网络游戏不同。虽然每个在线玩家在剧情当中能够体会到主角的感觉,但是每个玩家并不是独一无二的。他们有着同样的技能图标,有着同样的武学名称。有人会说,就算这些都一样,但是不同的手法和反应速度,每个玩家也会不同。我就在想,可不可以使用某些方法,让程序自动生成武侠网易的技能图标和武学名称呢?


起手式—仙人指路

既然是武学名称,那自然是由汉字组成。我去搜索了以下,找到了一个十分完备的汉字库,没错,那就是新华字典。这个仓库包含了14032 条歇后语,16142个汉字,264434个词语,31648个成语。没错,我们总共才有16142个汉字,可以用一张图像随意进行范围覆盖。用多大的图像呢?我们来算算:128*128=16384。好巧啊,常用的128*128图像正好能够对所有汉字进行全覆盖。那就这么决定了,使用128*128的图像作为汉字的载体。到这里有人要问了,为啥要用图像来承载所有汉字?目前我的想法是:

  • 可以将武学图标和武学名称统一到这张图像上。
  • 目前来看深度学习在可以很好的处理图像中的某些问题。

第一式—浑水摸鱼

直接下载下来的新华字典较为的冗余,但我们只需要其中但汉字,故我们需要对这个数据库做一个数据的提取。我们先来看看汉字库的json文件

    {"word": "吖","oldword": "吖","strokes": "6","pinyin": "ā","radicals": "口","explanation": "喊叫天~地。\n 形容喊叫的声音高声叫~~。\n\n 吖ā[吖啶黄](-dìnghuáng)〈名〉一种注射剂。\n ────────────────—\n \n 吖yā 1.呼;喊。","more": "吖 a 部首 口 部首笔画 03 总笔画 06  吖2\nyā\n喊,呼喊 [cry]\n不索你没来由这般叫天吖地。--高文秀《黑旋风》\n吖\nyā\n喊声\n则听得巡院家高声的叫吖吖。--张国宾《合汗衫》\n另见ā\n吖1\nā\n--外国语的音译,主要用于有机化学。如吖嗪\n吖啶\nādìng\n[acridine] 一种无色晶状微碱性三环化合物c13h9n,存在于煤焦油的粗蒽馏分中,是制造染料和药物(如吖啶黄素和奎吖因)的重要母体化合物\n吖1\nyā ㄧㄚˉ\n(1)\n喊叫天~地。\n(2)\n形容喊叫的声音高声叫~~。\n郑码jui,u5416,gbkdfb9\n笔画数6,部首口,笔顺编号251432\n吖2\nā ㄚˉ\n叹词,相当于呵”。\n郑码jui,u5416,gbkdfb9\n笔画数6,部首口,笔顺编号251432"},

可以看出,汉字的json拥有着非常丰富的信息,但是呢,我们只需要其中的word字段。为了方便,我们可以使用python来提取这个字段,并构成一个新的json文件。

import json
# 读取json文件
f = open("word.json", encoding='utf-8')
# 加载
setting = json.load(f)
# 初始化字典
img2word = {}
word2img = {}
# 遍历json
for idx in range(len(setting)):# 取得word字段对应的内容word = setting[idx]['word']# 将内容保存到该字典,键为idximg2word[idx] = word# 将idx保存到该字典,键为内容word2img[word] = idx# 把两个字典写入文件
with open("img2word1.json","w") as f:json.dump(img2word,f)with open("word2img2.json","w") as f:json.dump(word2img,f)

可以看出,有了json模块,读取json文件和构建新的json文件简直是小菜一碟。
完成这一步后,我们就得到了待会需要用到的汉字数据。


第二式—水中捞月

通过第一式我们得到了两个字典文件,一个用标号可以索引到内容,另一个使用内容可以索引到标号。故在第二式开始前,需要将这两个字典文件读取到内存中。

f_img = open("img2word.json", encoding='utf-8')
f_word = open("word2img.json", encoding='utf-8')
# 由标号索引到内容
self.img2word = json.load(f_img)
# 由内容索引到标号
self.word2img = json.load(f_word)

有了这两个数据后,我们就可以展现乾坤大挪移和吸星大法


第三式—乾坤大挪移

该功法主要使用图像和上述提到的字典来构建一个方法,那个方法的作用在于将文字储存到图像当中

# 短语转图像
# str为武学名称
def word2img_func(str):# 构建一副空图像word_img = np.zeros((128,128,3),dtype=np.float)for idx, item in enumerate(str):# 通过汉字来索引到idximg_idx = self.word2img[item]# 将idx分解为行列值row, col = img_idx//128, img_idx%128# 设置该位置为有值word_img[row, col, 0] = 1if word_img[row, col, 1] == 0:# 在该位置添加上武学的名称顺序word_img[row, col, 1] = idx+1else:# 当出现重复汉字时word_img[row, col, 1] = word_img[row, col, 1]*10+(idx+1)return word_img

在上述代码中,主要就是将文字的标号按行列进行分解,然后用图像的第一纬度记录是否存在文字,用图像的第二位度记录该文字处在武学名称的第几位。下面我们来使用这段代码看看生成的图像是什么样的

skill = '降龙十八掌'
word_img = word2img_func(skill)
cv2.imwrite('test.png', word_img)


没错,就是一篇漆黑!我们仅仅只是把十分稀少的数据放入图片中,并没有做其他操作,因此,这张还是这么黑。


第四式—吸星大法

接下来,就是从图像中解析出武学名称。其实这就是很简单的,从一个矩阵中,取出数值为一的坐标,再用坐标来构建原始的idx,最后使用idx来索引到内容。

# 图像转短语
def img2word_func(img):# 取得数据大于0到行列坐标rows, cols = np.where(img[:,:,0]>0)word_dic = {}for row, col in zip(rows, cols):# 构建idxword_idx = row*128+colord_idx = img[row, col, 1]while ord_idx>10:# 依次通过idx取出数据word_dic[ord_idx%10] = self.img2word[str(word_idx)]ord_idx //= 10word_dic[ord_idx] = self.img2word[str(word_idx)]# 使用idx进行排序,保证武学名称不出错word_dic = sorted(word_dic.items(), key=lambda d:d[0])return word_dic

然后我们进行调用来查看效果

cv2.imread('test.png')
word = app.img2word_func(word_img)
print(word)


到这里,基础功能就完成了,接下来就是如何生成一个较为好看的武学图标,并从武学图标中提取出全新的武学。

武学与Python(一)相关推荐

  1. 汇集天下武学——Python笔试题

    1.数据表student有id,name,score,city字段,其中name中的名字可有重复,需要消除重复行,请写sql语句 select  distinct  name  from  stude ...

  2. 汇集天下武学——Python面试宝典

    导语:本人最近刚离职,抱着一腔热情踏上了漫漫求职路,现将本人面试时遇到的问题汇总一下,供大家交流学习,望不吝惜,最后打一波广告,学习Python可进群647094497,我会分享一点资料给大家,金麟岂 ...

  3. 136个Python 机器学习知识点让你受益终生!

    如果村里通了网,那你一定知道[AI]人工智能. 如果你会网上冲浪,那你一定看到过[ML]机器学习. 小编在网上看到一个段子:ML派坐落美利坚合众山中,百年来武学奇才辈出,隐然成江湖第一大名门正派,门内 ...

  4. 82 个代码案例实践,带你学好 Python 机器学习

    全世界有3.14 % 的人已经关注了 数据与算法之美 如果村里通了网,那你一定知道[AI]人工智能. 如果你会网上冲浪,那你一定看到过[ML]机器学习. 小编在网上看到一个段子:ML派坐落美利坚合众山 ...

  5. 武学大陆-为啥要学IT绝世武功

    当今世界,武学大陆,是门派众多,贫富差距极大.普通人出身比不过豪门子弟,又想逆天改命,怎么办呢 所以为啥要学习IT,因为一个字:穷.都说IT能获得大量的碎银,确实如此.身边不乏很多IT武林高手,前端派 ...

  6. 写在《Python高手修炼之道》发行之前:选择一本好书,即是少走弯路

    一门编程语言,总有一些独一无二的特质,不会随着语言的演变而改变,我们姑且称其为语言的DNA.一本介绍编程语言的书,如果能够捕捉到这门语言的DNA,并准确传达给读者,那就称得上是一本好书.选择一本好书, ...

  7. 如何学好Python——你到底在学什么!

    首先自我介绍一下,本人是一个web后端开发工程师,主用语言是Python.同时在一家培训机构的网校做兼职的导师(一对一辅导学员.判作业.考核学员),为了避嫌就不说学校名字了,至今为止接客也接了几十位了 ...

  8. python让你再也不为文章配图与素材发愁,让高清图片占满你的硬盘!

    怪毛病 最近写公众号写的染上了个怪毛病,不到12点根本不知道写啥.一过凌晨那简直是吃了大回复一般的文思泉涌.结果就是越熬夜越晚了.公众号是每天定时发的,简书上的发帖时间才是真正的睡前倒计时...然后, ...

  9. Github配置(git+vscode+python+jupyter)

    ①下载git 打开 git bash 工具的用户名和密码存储 $ git config --global user.name "Your Name" $ git config -- ...

最新文章

  1. [译]WCF RIA Services中的集合(2)
  2. 对比less聊scss(1):scss特性
  3. 转载文章,感觉真的很心酸
  4. SSM(Spring4.x.x+SpringMVC4.x.x+Mybatis3.4.x)框架整合
  5. mysql 提高事物效率_怎么提高向mysql中插入数据的效率-问答-阿里云开发者社区-阿里云...
  6. AE CreateFeatureClass 创建shp. 删除shp. 向shp中添加要素
  7. 中台唯一的胜利果实:大数据中台架构详解
  8. 解决vim中文乱码问题
  9. 最长回文子串--动态规划
  10. 前端如何提示自己的技术水平
  11. acegis连接使用方法_铝型材配件间隔连接块的分类与使用方法
  12. easyui 的 toolbar配合图标使用
  13. dosbox汇编环境turboC环境配置
  14. 2022年华为笔试面试机考真题100道(C/C++语言)
  15. 接近中心性(Closeness Centrality)、中介中心性(Betweenness Centrality)
  16. 京东淘宝等电脑网页打不开的解决办法
  17. FBreader多端同步心得补充
  18. 相关系数与相关指数区别
  19. SMSAlarm短信猫语音猫快速连接
  20. android checkbox样式

热门文章

  1. Linux下中文显示乱码 -- linux编码转换
  2. h5手机端适配字体设置
  3. 华为系统鸿蒙系统更新时间,哪些机型可以第一时间升级鸿蒙系统?麒麟9000最有可能...
  4. css的基本选择器和高级选择器
  5. 通用安防摄像机通过RTSP/Onvif转RTMP/m3u8推流进行H5(RTMP/HLS)直播的方案
  6. 数据结构基础——链表
  7. Java设计模式六大设计原则
  8. Excel如何快速将指定内容复制到多个工作表中
  9. win 2003 ping不通 远程连接 防火墙打不开
  10. Java求素组的最大值、最小值以及排序思路