动物识别 python 人工智能实验

Ann ·
更新时间:2024-05-16
· 723 次阅读

构建动物识别系统

系统分为两部分,第一部分是初始化综合数据库,分为两类,一类是间接数据库,即不指向最终动物的信息。另一类是直接数据库,即指向最终动物的信息。使用的是二维列表加上一个一维列表存储key与value。第二部分为添加数据库和识别动物,查询的时候添加,可以有效的扩增数据库,使功能更灵活与完善。在识别动物的时候,先在间接数据库中完善信息,在直接数据库中查找对应的动物,记录信息时,使用字典记录某个特征是否出现,这样查询的复杂度就为O(1)。(这一段为老师所给提示)

思路:

1、我选择构建直接、间接数据库的方式为将条件存入列表中,列表中的元素都有对应的下标,将下标作为字典的值、结果作为字典的键构成数据库,这样条件和结果就能构成呢个一一对应的关系。因此程序中的数据库是包括列表、字典两部分的。

eg: 间接库列表:奶                             哺乳动物+蹄                    羽毛

        间接库字典:哺乳动物->0             蹄类动物->1                    鸟->2

2、识别动物的时候,先在间接库中进行推理,再在直接库中推理。

Indirdict=dict()#间接库字典,用于从数字寻找对应结果 Dirdict=dict()#直接库字典,用于从数字寻找对应结果 Indirlist=[]#间接库列表,用于存放动物特征的集合和定义、存放这个集合对应数字 Dirlist=[]#直接库列表,用于存放动物特征的集合和定义、存放这个集合对应数字 Indirnum=0#作为间接库字典的值 Dirnum=0#作为直接库字典的值 def change(str):#以字符串的形式输入全部特征值,这个函数可以将字符串中的特征值识 #别出来,并且将所有特征值存放到一个集合中 set1=set()#定义一个集合,存放特征值 str1="" for i in range(0,len(str)): if(str[i]!=" "): str1+=str[i] else: set1.add(str1) str1="" i+=1 return set1 list1=[]#定义一个临时列表,表示间接库或直接库 dict1=dict()#定义一个临时字典,表示间接库字典或直接库字典 num1=0 def Builddata(list1,dict1,num1):#num1存放在字典中,与结果相对应 str2=input("请输入条件,以空格隔开:")#定义一个字符串,存放用户输入特征值 str2+=" " while(str2!="0 "): str3=input("请输入结果:")#字符串,存放结果 dict1[num1]=str3#将值与结果在字典中相对应 set2=change(str2)#集合,将用户输入特征值放入此集合内 list1.append(set2)#将特征值集合存入列表 str2=input("请输入条件,以空格隔开:") str2+=" " num1+=1 return num1 def Infer(animalset,list1,dict1):#推理函数,将动物条件的集合放在间接库或直接库中进行匹配 for i in range(0,len(animalset)):#保证循环足够多的次数 for j in range(0,(len(list1))): if(list1[j].issubset(animalset) or list1[j]==animalset): animalset.add(dict1[j]) #print(list1[j]) animalset=animalset-list1[j] return animalset def Rec():#识别动物 feature=input("请输入动物的特征(不同特征之间用空格隔开):") feature+=" " animalset=change(feature) #将动物的特征化为关键词的集合 animalset=Infer(animalset,Indirlist,Indirdict) set3=Infer(animalset,Dirlist,Dirdict)#返回经过直接规则库过滤后的集合 list2=list(set3)#将动物特征集合化为列表,便于确定最后剩下多少特征值 if(len(list2)==1): print("这个动物是:"+list2[0]) else: print("查无此动物") print("请输入接下来操作(1.添加间接数据库 2.添加直接数据库 3.查询动物 0.结束操作):") chose = input() while (chose!='0'): if (chose=='1'): print("构造间接数据库:(输入条件时输入0结束构建)") Indirnum=Builddata(Indirlist,Indirdict,Indirnum) print("间接数据库构造完成!") print("") chose = input("请输入接下来操作(1.添加间接数据库 2.添加直接数据库 3.查询动物 0.结束操作):") elif (chose=='2'): print("构造直接数据库:(输入条件时输入0结束构建)") Dirnum=Builddata(Dirlist,Dirdict,Dirnum) print("直接数据库构造完成!") print("") chose = input("请输入接下来操作(1.添加间接数据库 2.添加直接数据库 3.查询动物 0.结束操作):") elif (chose=='3'): Rec() print("") chose = input("请输入接下来操作(1.添加间接数据库 2.添加直接数据库 3.查询动物 0.结束操作):") else: print("输入不合法,请重新输入") chose = input("请输入接下来操作(1.添加间接数据库 2.添加直接数据库 3.查询动物 0.结束操作):")

注:输入条件、结果时,构建间接规则库、构建直接规则库、查询动物时输入形式、相同的内容必须保持一致。

此文是借鉴大佬博客https://blog.csdn.net/weixin_46178977/article/details/105842471,是对大佬代码的拙劣优化。。

能够搞懂并改写这样的一个不很简单的程序,也算是对大一身为python小小白的我一个交代了吧。。

pioneer 1 原创文章 99获赞 15访问量 7290 关注 私信 展开阅读全文
作者:pioneer 1



人工智能 动物 Python

需要 登录 后方可回复, 如果你还没有账号请 注册新账号