持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第22天,点击查看活动详情
目前许多手机的浏览器自带识图功能,但是识别的精度忽高忽低,百度AI大脑开放平台已经集成了许多种类的图片识别、和语音识别。 注册地址如下 ai.baidu.com/?track=cp:a…
里面有一些帮助文档 ai.baidu.com/ai-doc/REFE…
可以看一下,在里面选择图像识别,然后“创建应用”,申请自己的ID和KEY。
界面代码如下:
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_Form(object):
def setupUi(self, Form):
Form.setObjectName("Form")
Form.resize(899, 720)
self.horizontalLayoutWidget = QtWidgets.QWidget(Form)
self.horizontalLayoutWidget.setGeometry(QtCore.QRect(10, 0, 741, 711))
self.horizontalLayoutWidget.setObjectName("horizontalLayoutWidget")
self.horizontalLayout = QtWidgets.QHBoxLayout(self.horizontalLayoutWidget)
self.horizontalLayout.setContentsMargins(0, 0, 0, 0)
self.horizontalLayout.setObjectName("horizontalLayout")
self.label_2 = QtWidgets.QLabel(self.horizontalLayoutWidget)
self.label_2.setObjectName("label_2")
self.horizontalLayout.addWidget(self.label_2)
self.verticalLayoutWidget = QtWidgets.QWidget(Form)
self.verticalLayoutWidget.setGeometry(QtCore.QRect(750, 0, 141, 171))
self.verticalLayoutWidget.setObjectName("verticalLayoutWidget")
self.verticalLayout = QtWidgets.QVBoxLayout(self.verticalLayoutWidget)
self.verticalLayout.setContentsMargins(0, 0, 0, 0)
self.verticalLayout.setObjectName("verticalLayout")
self.pushButton = QtWidgets.QPushButton(self.verticalLayoutWidget)
self.pushButton.setObjectName("pushButton")
self.verticalLayout.addWidget(self.pushButton)
self.pushButton_2 = QtWidgets.QPushButton(self.verticalLayoutWidget)
self.pushButton_2.setObjectName("pushButton_2")
self.verticalLayout.addWidget(self.pushButton_2)
self.verticalLayoutWidget_2 = QtWidgets.QWidget(Form)
self.verticalLayoutWidget_2.setGeometry(QtCore.QRect(750, 170, 141, 81))
self.verticalLayoutWidget_2.setObjectName("verticalLayoutWidget_2")
self.verticalLayout_2 = QtWidgets.QVBoxLayout(self.verticalLayoutWidget_2)
self.verticalLayout_2.setContentsMargins(0, 0, 0, 0)
self.verticalLayout_2.setObjectName("verticalLayout_2")
self.label = QtWidgets.QLabel(self.verticalLayoutWidget_2)
self.label.setAlignment(QtCore.Qt.AlignCenter)
self.label.setObjectName("label")
self.verticalLayout_2.addWidget(self.label)
self.verticalLayoutWidget_3 = QtWidgets.QWidget(Form)
self.verticalLayoutWidget_3.setGeometry(QtCore.QRect(750, 250, 141, 461))
self.verticalLayoutWidget_3.setObjectName("verticalLayoutWidget_3")
self.verticalLayout_3 = QtWidgets.QVBoxLayout(self.verticalLayoutWidget_3)
self.verticalLayout_3.setContentsMargins(0, 0, 0, 0)
self.verticalLayout_3.setObjectName("verticalLayout_3")
self.textEdit = QtWidgets.QTextEdit(self.verticalLayoutWidget_3)
self.textEdit.setReadOnly(True)
self.textEdit.setObjectName("textEdit")
self.verticalLayout_3.addWidget(self.textEdit)
self.retranslateUi(Form)
self.pushButton.clicked.connect(Form.OpenFile)
self.pushButton_2.clicked.connect(Form.StartDetect)
QtCore.QMetaObject.connectSlotsByName(Form)
def retranslateUi(self, Form):
_translate = QtCore.QCoreApplication.translate
Form.setWindowTitle(_translate("Form", "Form"))
self.label_2.setText(_translate("Form", "TextLabel"))
self.pushButton.setText(_translate("Form", "打开图片"))
self.pushButton_2.setText(_translate("Form", "动物识别"))
self.label.setText(_translate("Form", "识别结果"))
界面运行时这个样子的
主函数如下
import requests
from DetectUI import Ui_Form
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
import cv2
import sys
import base64
class MainWindow(QMainWindow, Ui_Form):
def __init__(self, parent=None):
super(MainWindow, self).__init__(parent=parent)
self.setupUi(self)
self.file_path = None
self.msg = QMessageBox()
# 只运行一次即可,主要用于获取access_token,下面检测时需要这个access_token
def get_access_tocken(self):
# encoding:utf-8
# client_id 为官网获取的SK, client_secret 为官网获取的SK
host = "https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=Va5yQRHlA4Fq5eR3LT0vuXV4&client_secret=0rDSjzQ20XUj5itV6WRtznPQSzr5pVw2&"
response = requests.get(host)
if response:
print(response.json()['access_token'])
# 获取文件地址函数
def getFileDir(self):
try:
self.file_path = QFileDialog.getOpenFileName(self, "select file", "./", "Image File(*.png *.jpg *.jpeg *.bmp)")
except Exception as e:
print(e)
return self.file_path
def OpenFile(self):
filePath = self.getFileDir()
print(filePath)
if filePath[0] != '' and filePath[1] != '':
img = cv2.imread(filePath[0])
self.label_2.setScaledContents(True)
img_dis = QImage(img, img.shape[1], img.shape[0],img.shape[1] * 3, QImage.Format_BGR888)
# 加载图片,并设定图片大小
img_dis = QPixmap(img_dis)# .scaled(int(img.shape[1]), int(img.shape[0]))
self.label_2.setPixmap(img_dis)
else:
QMessageBox.information(QWidget(), '警告!', '请先打开一幅图像', QMessageBox.Yes)
def StartDetect(self):
if self.file_path is not None and self.file_path[0] != '' and self.file_path[1] != '':
request_url = "https://aip.baidubce.com/rest/2.0/image-classify/v1/animal"
# 二进制方式打开图片文件
f = open(self.file_path[0], 'rb')
img = base64.b64encode(f.read())
f.close()
params = {"image": img, "top_num": 3} # 返回前3个概率比较大的
access_token = 'your access_token'
request_url = request_url + "?access_token=" + access_token
headers = {'content-type': 'application/x-www-form-urlencoded'}
response = requests.post(request_url, data=params, headers=headers)
if response:
self.textEdit.append("物种:"+str(response.json()['result'][0]['name'])+"\n")
self.textEdit.append("准确率:"+str(response.json()['result'][0]['score']))
else:
QMessageBox.information(QWidget(), '警告!', '无法检测到图像!请确认是否打开图像!', QMessageBox.Yes)
if __name__ == "__main__":
app = QApplication(sys.argv)
w = MainWindow()
w.show()
sys.exit(app.exec_())
执行结果如下
项目非常简单,权当学习之余的玩乐,如果有需要补充和规范的可以在评论区告诉我,我会在以后的博客中注意这些问题,并对这些存在问题的博客进行修改。