完整代码在最下方

实验目的

利用动物识别系统来验证基于符号的推理,通过实验理解简单的专家系统所包含的模块:人机结构,知识获取机构,知识库及管理系系统,推理机,解释机构,数据库及管理系统”。

实验步骤/过程

(1)、逻辑实现

1、规则库建立:

对于每条产生式规则,都具有以下格式:

前提1 前提2 前提… 前提n

结论

每一条前提由空格分隔,规则保存到txt文件中,已经预置了部分初始规则。

2、推理机推理过程:

推理流程如下:

图2、推理流程

对于每条规则,建立Rules字典,key值为前提的所有集合,value值为前提可以推理出的结论。

推理过程如下:

每次对给定前提进行合法性检查,然后再进行推理。若存在非法条件(给定前提格式非法,给定前提不存在于前提库中),则提示非法条件并要求重新输入。

①推理成功:对于给定的前提,遍历Rules字典,如果存在一条规则所需要的前提是给定前提的子集且该结论未被推出,则将该条规则的结论放入前提中,重新开始遍历;若该结论已经被推出过,则跳过该条规则并继续遍历,直至遍历完字典。

②推理失败:若给定的前提无法推理出任何一条结论,则输出空值。

3、对规则进行增/删/改/查:

①增加规则:对增加的规则进行合法性检查(规则格式是否非法,前提和结论是否为空)并通过后,进行判断:若给定的规则的前提对应已有规则库中的前提,则提示添加失败,否则即添加成功。添加后的规则以相同格式保存在txt文件中。

②删除规则:对删除的规则进行合法性检查(规则格式是否非法,前提和结论是否为空)并通过后,进行判断:若给定的规则的前提对应已有规则库中的前提,则删除成功,否则提示删除失败。删除后的规则从txt文件中删除。

③修改规则:目前只实现修改规则的结论,对修改的规则进行合法性检查(规则格式是否非法,前提和结论是否为空)并通过后,进行判断:若给定的规则的前提对应已有规则库中的前提,则修改规则的结论为给定的结论,否则提示修改失败。修改后的规则在txt文件中修改。

④查询规则:遍历生成的字典并输出规则,格式同规则格式。

4、UI界面设计

(1)通过QT Designer完成UI界面的布局设计

(2)利用PyUIC将该可视化的UI界面转为python代码

(3)设值各接口的功能

【1】运行UI时,首先在规则库文本框中显示所有前提

代码:

.

【2】输入规则接口

读取文本框中的内容,设立输入规则,第一行为前提,第二行为结论,以回车为分隔符。点击添加规则后,调用添加规则函数

添加规则函数中,完善了健壮性,判断输入的内容,如果输入为空,或者为空格、回车,则弹窗报错。如果输入多行,默认认为第一行为前提,第二行为规则。

【3】进行推理

在输入事实 输入框中输入前提对应的数字。

点击进行推理调用推理机的函数

健壮性为:如果输入的不是数字,则报错。

实验结果

界面如下:

其他不在一一展示了。

推理规则:

该动物有毛发
该动物是哺乳动物
该动物有奶
该动物是哺乳动物
该动物有羽毛
该动物是鸟
该动物吃肉
该动物是食肉动物
该动物有犬齿 该动物有爪 该动物眼盯前方
该动物是食肉动物
该动物是哺乳动物 该动物有蹄
该动物是有蹄类动物
该动物是哺乳动物 该动物是反刍动物
该动物是有蹄类动物
该动物是哺乳动物 该动物是食肉动物 该动物是黄褐色 该动物有暗斑点
该动物是金钱豹
该动物是哺乳动物 该动物是食肉动物 该动物是黄褐色 该动物有黑色条纹
该动物是虎
该动物是有蹄类动物 该动物有长脖子 该动物有长腿 该动物有暗斑点
该动物是长颈鹿
该动物是有蹄类动物 该动物有黑色条纹
该动物是斑马
该动物是鸟 该动物不会飞 该动物有长脖子 该动物有长腿 该动物有黑白二色
该动物是鸵鸟
该动物是鸟 该动物不会飞 该动物会游泳 该动物有黑白二色
该动物是企鹅
该动物是鸟 该动物善飞
该动物是信天翁
该动物有羽毛
该动物是鸟

上代码:

这里只展示主要推理过程了。UI部分其余代码不再放了,比较杂。如果需要可以联系我。

import sys
from PyQt5 import QtWidgets
import UI.MainDis, UI.False_Lable, UI.EmptyUI
import Animal.RuleBase as RB
import Animal.Inference_Engine as IE
import Animal.Inference_Engine as InferenceSave_rules_after = set()
Save_concludes = set()
def ListInSet(li, se):for i in li:if i not in se:return Falsereturn Truedef judge_rule_in(lst):for rule_pre in lst:if rule_pre in Save_rules_after:continueelse:return Falsereturn Trueclass Lable_ui(QtWidgets.QMainWindow,UI.False_Lable.Ui_Dialog):def __init__(self):QtWidgets.QMainWindow.__init__(self)  # 创建主界面对象UI.False_Lable.Ui_Dialog.__init__(self)  # 主界面对象初始化self.setupUi(self)  # 配置主界面对象class Empty_ui(QtWidgets.QMainWindow,UI.EmptyUI.Ui_Dialog):def __init__(self):QtWidgets.QMainWindow.__init__(self)  # 创建主界面对象UI.False_Lable.Ui_Dialog.__init__(self)  # 主界面对象初始化self.setupUi(self)  # 配置主界面对象class MAIN_ui(QtWidgets.QMainWindow,UI.MainDis.Ui_dialog,UI.False_Lable.Ui_Dialog):def __init__(self):QtWidgets.QMainWindow.__init__(self)  # 创建主界面对象UI.MainDis.Ui_dialog.__init__(self)  # 主界面对象初始化self.setupUi(self)  # 配置主界面对象self.rulePushButton.clicked.connect(self.add_rule)#添加规则self.inferencePushButton.clicked.connect(self.inference)self.Lable = Lable_ui()self.Empty = Empty_ui()self.display_pre()def display_pre(self):RB.ini_rules()self.ruleTextBrowser.clear()i = 0RB.rules_pre = list(RB.Rules_pre).sort()for line in RB.Rules_pre:#将规则库放入显示框if i < 10 :str_temp = str(i) + '. '+ lineelse:str_temp = str(i) + '.'+ lineself.ruleTextBrowser.append(str_temp)i += 1def add_rule(self):#添加新规则new_rule = self.inputLineEdit.toPlainText()self.inputLineEdit.clear()if new_rule == '' or new_rule == '\n':self.Empty.show()self.Empty.pushButton.clicked.connect(self.Empty.close)returnnew_rule = new_rule.split('\n')if new_rule[0] == '' or new_rule[1] == '' or new_rule[0].isspace()  or new_rule[1].isspace() :self.Empty.show()self.Empty.pushButton.clicked.connect(self.Empty.close)returnnew_pre = new_rule[0]new_pre = new_pre.split(' ')new_conclusion = new_rule[1]new_pre = [i for i in new_pre if (len(str(i)) != 0)]new_pre = ' '.join(new_pre)print(type(new_pre))print(new_pre)print(new_conclusion)judge_bool = Falsefor i in RB.Rules.keys():if judge_is(i, new_pre):judge_bool = Truebreak# print(judge_bool)if judge_bool:self.Lable.show()self.Lable.pushButton.clicked.connect(self.Lable.close)else:file = open('../UI/Rules.txt', 'a', encoding='UTF-8')RB.Rules[new_pre] = new_conclusionfile.write('\n')file.write(new_pre)file.write('\n')file.write(new_conclusion)file.close()self.display_pre()def inference(self):#推理# self.outputTextBrowser.append("1")ini()self.outputTextBrowser.clear()self.answerTextBrowser.clear()rule_pre_num = self.inputFactTextEdit.toPlainText() #获取输入的事实rule_pre_num = rule_pre_num.split('\n')#删除空格元素rule_pre_num = list(set(rule_pre_num))for space in rule_pre_num:if space == '':rule_pre_num.remove('')rules = list(RB.Rules_pre)for i in rule_pre_num:if i.isdigit():if 0 <= int(i) < len(rules):Save_rules_after.add(rules[int(i)])# self.outputTextBrowser.append(rules[int(i)])else:self.outputTextBrowser.clear()self.outputTextBrowser.append('该前提不存在,请重新输入')returnelse:self.outputTextBrowser.clear()self.outputTextBrowser.append('输入中存在非法字符,请重新输入')returni = 1for rule in RB.Rules:rule_list = rule.split(' ')if i == 1:rule_ini = ruleif judge_rule_in(rule_list):Save_rules_after.add(RB.Rules[rule])temp = rule + '->'  +RB.Rules[rule]self.outputTextBrowser.append(temp)Save_concludes.add(RB.Rules[rule])rule = rule_inii = i + 1if Save_concludes:for conclude in Save_concludes:self.answerTextBrowser.append(conclude)else:self.answerTextBrowser.append('根据已知事实无法得出结论')def ini():Save_rules_after.clear()Save_concludes.clear()def judge_is(rule1, rule2):rule1 = rule1.split(' ')rule2 = rule2.split(' ')rule1.sort()rule2.sort()if rule2 == rule1:return Trueelse:return Falseapp = QtWidgets.QApplication(sys.argv)  # 新建窗体
MAIN_window = MAIN_ui()  # 创建主菜单的窗口对象
MAIN_window.show()  # 显示主菜单
sys.exit(app.exec_())  # 保持显示

链接:https://pan.baidu.com/s/1DbXamfIXQPfDhr6vpBfNWQ?pwd=ujnc 
提取码:ujnc

动物识别系统 python实现+UI相关推荐

  1. 【毕业设计】深度学习动物识别系统 - python 卷积神经网络 机器视觉

    文章目录 0 前言 1 背景 2 算法原理 2.1 动物识别方法概况 2.2 常用的网络模型 2.2.1 B-CNN 2.2.2 SSD 3 SSD动物目标检测流程 4 实现效果 5 部分相关代码 5 ...

  2. 基于深度学习的动物识别系统(YOLOv5清新界面版,Python代码)

    摘要:动物识别系统用于识别和统计常见动物数量,通过深度学习技术检测日常几种动物图像识别,支持图片.视频和摄像头画面等形式.在介绍算法原理的同时,给出Python的实现代码.训练数据集以及PyQt的UI ...

  3. 动物识别系统代码python_动物识别 python 人工智能实验

    构建动物识别系统 系统分为两部分,第一部分是初始化综合数据库,分为两类,一类是间接数据库,即不指向最终动物的信息.另一类是直接数据库,即指向最终动物的信息.使用的是二维列表加上一个一维列表存储key与 ...

  4. 动物识别专家系统PYTHON

    能搜到这个文章的,估计你就是为了想找篇现成的系统抄抄了,我也废话不多说好叭. 下面这些是我们当时的要求和加分项: 1.建立一个动物识别系统的规则库,用以识别虎.豹.斑马.长颈鹿.企鹅.鸵鸟.信天翁等7 ...

  5. 基于产生式表示的动物识别系统

      实验目的 理解和掌握产生式知识表示方法及产生式系统的基本过程,能够利用编程技术建立一个基于产生式知识表示的简单的智能系统. 例    建立一个动物识别系统的规则库,用以识别虎.豹.斑马.长颈鹿.企 ...

  6. 人工智能实验-动物识别系统

    ** 实验一:产生式系统实验 ** 一.实验目的: 熟悉一阶谓词逻辑和产生式表示法,掌握产生式系统的运行机制,以及基于规则推理的基本方法. 二.实验内容: 设计并编程实现一个小型产生式系统(如分类.诊 ...

  7. 动物识别系统的规则库

    一.题目 这是一个用以识别虎.金钱豹.斑马.长颈鹿.企鹅.鸵鸟.信天翁七种动物的产生式系统.为了实现对这些动物的识别,该系统建立了如下规则库: R1: IF 该动物有毛     THEN 该动物是哺乳 ...

  8. c语言产生式系统动物识别系统,简单动物识别系统的知识表示实验报告

    简单动物识别系统的知识表示实验报告 一. 实验目的: 1. 2. 理解和掌握产生式知识表示方法. 能够用选定的编程语言实现产生式系统的规则库. 二. 实验内容和要求: 1.以动物识别系统的产生式规则为 ...

  9. 动物识别系统c语言编程,人工智能期末论文-简单动物识别系统的知识表示.doc

    简单动物识别系统的知识表示 摘要:动物识别系统是人工智能领域中基础也是非常具有代表性的一个智能系统智能系统最基本的组成部分即知识系统成为了研究热点.本文首先介绍知识系统的基本及作用,以动物识别系统的式 ...

最新文章

  1. Android tabLayout+recyclerView实现锚点定位
  2. Python:自动化上传OSS
  3. 从Excel到Python:最常用的36个Pandas函数
  4. 直播 | WWW 2021论文解读:强化学习与互信息驱动的子图神经网络
  5. python中的pandas怎么安装_如何优雅的安装Python的pandas?
  6. ISO语言代码和国家代码+Locale常量+ISO货币符号
  7. android unzip file,Unzip File in Android Assets
  8. mysql爆内存_线上MySQL数据库机器内存爆掉原因分析与解决
  9. android touch事件坐标原点,图解Android:Touch事件传递机制
  10. Python新手学习基础之运算符——位运算
  11. 测试一下你对IP地址的掌握水平
  12. 关于setInterval和setTImeout中的this指向问题
  13. 微型计算机的三类接口,2020年武汉理工期末微机接口复习.doc
  14. 数据库(左、中、右)连接
  15. notepad linux版本,Notepad++ Linux版
  16. KDE环境中文语言包安装问题
  17. Hutool工具集之DateUtil(日期时间工具)详解使用
  18. r语言跟python哪个适合数据分析_R语言 vs Python对比:数据分析哪家强?
  19. 支持向量回归(SVR)数据预测
  20. 面向对象核心(继承)

热门文章

  1. AVX-512指令_mm512_shuffle_epi8分析
  2. Android中通过USB接口与和PC进行通讯的demo程序
  3. 利用R语言画简单时间序列图
  4. 参考文献格式字号字体_关于论文格式要求及字体大小
  5. 设计一个抽象类图形类,在该类中包含有至少两个抽象方法求周长和求面积,分别定义圆形类、长方形类、正方形类、三角形类来继承图形类,并实现上述两个方法
  6. Ansible#Typora-Ansible笔记
  7. 【转】SLAM 论文阅读和分类整理
  8. 哪款骨传导耳机好用,好用的骨传导耳机汇总
  9. 红米9a手动root方法
  10. 深夜谈【辱母杀人案】