经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » 编程经验 » 查看文章
人工智能-动物识别专家系统算法Python + Pyqt 实现
来源:cnblogs  作者:hugeQAQ  时间:2019/6/27 9:17:39  对本文有异议

一、基础知识库

  1. 有毛发 哺乳动物 -
  2. 有奶 哺乳动物 -
  3. 有羽毛 -
  4. 会飞 会下蛋 -
  5. 吃肉 食肉动物 -
  6. 有犬齿 有爪 眼盯前方 食肉动物 -
  7. 哺乳动物 有蹄 有蹄类动物 -
  8. 哺乳动物 反刍动物 有蹄类动物 -
  9. 哺乳动物 食肉动物 黄褐色 身上有暗斑点 金钱豹 *
  10. 哺乳动物 食肉动物 黄褐色 身上有黑色条纹 *
  11. 有蹄类动物 长脖子 有长腿 身上有暗斑点 长颈鹿 *
  12. 有蹄类动物 身上有黑色条纹 斑马 *
  13. 长脖子 有长腿 不会飞 有黑白二色 鸵鸟 *
  14. 会游泳 不会飞 有黑白二色 企鹅 *
  15. 善飞 信天翁 *

最后一个字符为 - 表示结论为中间结果  为 * 表示为一种动物

二、QT界面 源码

  1. # -*- coding: utf-8 -*-
  2.  
  3. # Form implementation generated from reading ui file '动物识别专家系统.ui'
  4. #
  5. # Created by: PyQt5 UI code generator 5.9.2
  6. #
  7. # WARNING! All changes made in this file will be lost!
  8.  
  9. from PyQt5 import QtCore, QtGui, QtWidgets
  10. from PyQt5.QtGui import QFont
  11. class Ui_Animals(object):
  12. def setupUi(self, Animals):
  13. Animals.setObjectName("Animals")
  14. Animals.resize(1127, 710)
  15. Animals.setAutoFillBackground(True)
  16. self.TL = QtWidgets.QTextEdit(Animals)
  17. self.TL.setGeometry(QtCore.QRect(670, 200, 251, 211))
  18. self.TL.setObjectName("TL")
  19. self.input = QtWidgets.QTextEdit(Animals)
  20. self.input.setGeometry(QtCore.QRect(240, 100, 151, 321))
  21. self.input.setAutoFillBackground(False)
  22. self.input.setObjectName("input")
  23. self.result = QtWidgets.QTextEdit(Animals)
  24. self.result.setGeometry(QtCore.QRect(670, 100, 251, 51))
  25. self.result.setObjectName("result")
  26. self.result.setReadOnly(True)
  27. self.input_lable = QtWidgets.QLabel(Animals)
  28. self.input_lable.setGeometry(QtCore.QRect(100, 80, 141, 41))
  29. self.input_lable.setObjectName("input_lable")
  30. self.input_lable.setFont(QFont("Roman times", 10, QFont.Bold))
  31. self.TL_label = QtWidgets.QLabel(Animals)
  32. self.TL_label.setGeometry(QtCore.QRect(750, 150, 101, 61))
  33. self.TL_label.setObjectName("TL_label")
  34. self.TL_label.setFont(QFont("Roman times", 10, QFont.Bold))
  35. self.result_label = QtWidgets.QLabel(Animals)
  36. self.result_label.setGeometry(QtCore.QRect(750, 70, 111, 31))
  37. self.result_label.setObjectName("result_label")
  38. self.result_label.setFont(QFont("Roman times", 10, QFont.Bold))
  39. self.scrollArea = QtWidgets.QScrollArea(Animals)
  40. self.scrollArea.setGeometry(QtCore.QRect(90, 120, 141, 20))
  41. self.scrollArea.setWidgetResizable(True)
  42. self.scrollArea.setObjectName("scrollArea")
  43. self.scrollAreaWidgetContents = QtWidgets.QWidget()
  44. self.scrollAreaWidgetContents.setGeometry(QtCore.QRect(0, 0, 139, 18))
  45. self.scrollAreaWidgetContents.setObjectName("scrollAreaWidgetContents")
  46. self.comboBox = QtWidgets.QComboBox(self.scrollAreaWidgetContents)
  47. self.comboBox.setGeometry(QtCore.QRect(0, 0, 141, 21))
  48. self.comboBox.setObjectName("comboBox")
  49. self.scrollArea.setWidget(self.scrollAreaWidgetContents)
  50. self.pushButton = QtWidgets.QPushButton(Animals)
  51. self.pushButton.setGeometry(QtCore.QRect(500, 240, 93, 28))
  52. self.pushButton.setObjectName("pushButton")
  53. self.pushButton.setFont(QFont("Roman times", 10, QFont.Bold))
  54. self.checkBox = QtWidgets.QCheckBox(Animals)
  55. self.checkBox.setGeometry(QtCore.QRect(500, 190, 91, 19))
  56. self.checkBox.setObjectName("checkBox")
  57. self.checkBox.setFont(QFont("Roman times", 10, QFont.Bold))
  58. self.pushButton_2 = QtWidgets.QPushButton(Animals)
  59. self.pushButton_2.setGeometry(QtCore.QRect(10, 120, 61, 21))
  60. self.pushButton_2.setObjectName("pushButton_2")
  61. self.pushButton_2.setFont(QFont("Roman times", 10, QFont.Bold))
  62. self.pushButton_3 = QtWidgets.QPushButton(Animals)
  63. self.pushButton_3.setGeometry(QtCore.QRect(500, 300, 91, 31))
  64. self.pushButton_3.setObjectName("pushButton_3")
  65. self.pushButton_3.setFont(QFont("Roman times", 10, QFont.Bold))
  66. self.retranslateUi(Animals)
  67. self.pushButton.clicked.connect(Animals.test)
  68. self.comboBox.activated['int'].connect(Animals.selectChange)
  69. self.checkBox.stateChanged['int'].connect(Animals.checkChange)
  70. self.pushButton_2.clicked.connect(Animals.selectInit)
  71. self.pushButton_3.clicked.connect(Animals.rules)
  72. QtCore.QMetaObject.connectSlotsByName(Animals)
  73. def retranslateUi(self, Animals):
  74. _translate = QtCore.QCoreApplication.translate
  75. Animals.setWindowTitle(_translate("Animals", "Form"))
  76. self.input_lable.setText(_translate("Animals", "请输入已知事实"))
  77. self.TL_label.setText(_translate("Animals", "推理过程"))
  78. self.result_label.setText(_translate("Animals", "专家分析结果"))
  79. self.pushButton.setText(_translate("Animals", "推理"))
  80. self.checkBox.setText(_translate("Animals", "反向推理"))
  81. self.pushButton_2.setText(_translate("Animals", "初始化"))
  82. self.pushButton_3.setText(_translate("Animals", "修改规则库"))
View Code

三、后端处理 Python源码

  1. # -*- coding: utf-8 -*-
  2.  
  3. # Form implementation generated from reading ui file 'animal.py'
  4. #
  5. # Created by: PyQt5 UI code generator 5.9.2
  6. #
  7. # WARNING! All changes made in this file will be lost!
  8. from 动物识别专家系统 import Ui_Animals
  9. from PyQt5 import QtWidgets
  10. from PyQt5 import QtGui
  11. import sys
  12. import os
  13. import tkinter
  14. from tkinter import messagebox
  15. def IsEvidence(x):
  16. for i in mywindow.fact:
  17. if x == i[-2]:
  18. return False
  19. return True
  20. def getData(x):
  21. data = []
  22. for i in mywindow.fact:
  23. tr = []
  24. if x == i[-2]:
  25. for j in range(0, len(i) - 1):
  26. tr.append(i[j])
  27. data.append(tr)
  28. return data
  29. def backs(data):
  30. c = 0
  31. flag = False
  32. for i in data:
  33. d = "if "
  34. for s in range(0, len(i)):
  35. if s == len(i)-2:
  36. d = d + str(i[s]) + " then "
  37. else:
  38. d = d + str(i[s]) + " "
  39. window.TL.append(d)
  40. for j in range(0, len(i) - 1):
  41. if (IsEvidence(i[j])):
  42. root = tkinter.Tk()
  43. root.withdraw()
  44. a= messagebox.askquestion("提示", i[j]+"")
  45. #print(i[j] + "吗?")
  46. #r = input()
  47. print(a)
  48. if a == "yes":
  49. c = c + 1
  50. else:
  51. temp = getData(i[j])
  52. if (backs(temp)):
  53. c = c + 1
  54. if c >= i.__len__() - 1:
  55. flag = True
  56. print(i[-1])
  57. print("验证成功")
  58. break
  59. else:
  60. flag = False
  61. print(i[-1])
  62. print("验证失败")
  63. if (flag):
  64. return True
  65. else:
  66. return False
  67. class mywindow(QtWidgets.QWidget,Ui_Animals):
  68. fact = []
  69. conditions = set("")
  70. res = set("")
  71. def __init__(self):
  72. super(mywindow, self).__init__()
  73. f = open("rules.txt", "r")
  74. for line in f:
  75. ls = line.strip('\n').split(" ")
  76. mywindow.fact.append(ls)
  77. f.close()
  78. for i in mywindow.fact:
  79. for j in range(0,len(i)-2):
  80. mywindow.conditions.add(i[j])
  81. mywindow.res.add(i[-2])
  82. self.setupUi(self)
  83. def resizeEvent(self, event):
  84. palette = QtGui.QPalette()
  85. pix = QtGui.QPixmap('images/3.jpg')
  86. pix = pix.scaled(self.width(), self.height())
  87. palette.setBrush(QtGui.QPalette.Background, QtGui.QBrush(pix))
  88. self.setPalette(palette)
  89. def test(self):
  90. if self.checkBox.isChecked():#逆向推理
  91. i = self.comboBox.currentIndex()
  92. s = self.comboBox.itemText(i)
  93. print(s)
  94. data=getData(s)
  95. print(data)
  96. if (backs(data)):
  97. root = tkinter.Tk()
  98. root.withdraw()
  99. a = messagebox.showinfo("提示", "该动物是" + data[0][-1])
  100. self.result.setText("专家分析该动物是"+data[0][-1])
  101. else:
  102. root = tkinter.Tk()
  103. root.withdraw()
  104. self.result.setText("专家分析该动物不是" + data[0][-1])
  105. a = messagebox.showinfo("提示", "该动物不是" + data[0][-1])
  106. else: #正向推理
  107. s= self.input.toPlainText()
  108. tl =""
  109. description = s.split("\n")
  110. print("des")
  111. print(description)
  112. line = 0
  113. for i in mywindow.fact:
  114. same = 0
  115. for j in range(0, len(i)):
  116. if j >= len(i) - 2:
  117. break
  118. for k in range(0, len(description)):
  119. if i[j] == description[k]:
  120. same = same + 1
  121. break
  122. if k == len(description):
  123. break
  124.  
  125. if same == i.__len__() - 2:
  126. print("same=i")
  127. line = 1
  128. if i[-1] == "*": # 是结论
  129. d = "if "
  130. for s in range(0,len(i)-1) :
  131. if s == len(i)-3:
  132. d=d+str(i[s])+" then "
  133. else:
  134. d=d+str(i[s])+" "
  135. tl = tl + d + "\n"
  136. self.TL.setText(tl)
  137. self.result.setText("专家分析该动物是"+i[-2])
  138. print(i[-2])
  139. else:
  140. line = 1
  141. d = "if "
  142. for s in range(0, len(i) - 1):
  143. if s == len(i) - 3:
  144. d = d + str(i[s]) + " then "
  145. else:
  146. d = d + str(i[s]) + " "
  147. tl = tl + d +"\n"
  148. self.TL.setText(tl)
  149. self.result.setText("专家也不知道具体是什么动物,大概率推测是"+i[-2])
  150. # print(i[-1])
  151. description.append(i[-2])
  152. if line ==0:
  153. self.result.setText("专家也不知道具体是什么动物")
  154. def selectInit(self):
  155. mywindow.fact.clear()
  156. mywindow.conditions.clear()
  157. mywindow.res.clear()
  158. f = open("rules.txt", "r")
  159. for line in f:
  160. ls = line.strip('\n').split(" ")
  161. mywindow.fact.append(ls)
  162. f.close()
  163. for i in mywindow.fact:
  164. for j in range(0, len(i) - 2):
  165. mywindow.conditions.add(i[j])
  166. mywindow.res.add(i[-2])
  167. self.comboBox.clear()
  168. self.input.clear()
  169. self.result.clear()
  170. self.TL.clear()
  171. if(self.checkBox.isChecked()):
  172. for x in mywindow.res:
  173. self.comboBox.addItem(str(x))
  174. else:
  175. for x in mywindow.conditions:
  176. self.comboBox.addItem(str(x))
  177. def selectChange(self):
  178. if self.checkBox.isChecked():
  179. self.input.clear()
  180. i = self.comboBox.currentIndex()
  181. s = self.comboBox.itemText(i)
  182. self.input.append(s)
  183. else:
  184. i = self.comboBox.currentIndex()
  185. s = self.comboBox.itemText(i)
  186. self.input.append(s)
  187. def checkChange(self):
  188. self.comboBox.clear()
  189. if self.checkBox.isChecked():
  190. for x in mywindow.res:
  191. self.comboBox.addItem(str(x))
  192. else:
  193. for x in mywindow.conditions:
  194. self.comboBox.addItem(str(x))
  195. def rules(self):
  196. os.startfile('rules.txt')
  197. app = QtWidgets.QApplication(sys.argv)
  198. window = mywindow()
  199. window.show()
  200. sys.exit(app.exec_())
View Code

 

原文链接:http://www.cnblogs.com/bucthuge/p/11091169.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号