百度智能识别图片在线,百度自动识别图片

  百度智能识别图片在线,百度自动识别图片

  本文主要介绍如何使用Python编写一个百度智能图像识别项目。文章中的样例代码讲解的很详细,对我们学习Python很有帮助。有需要的可以参考一下。

  这是我们最终的结果,那我们就来看看如何实现吧!超级简单好用!

  首先需要先配置pyqt5的资源,这里就不说安装包了(pip或者pycharm可以直接添加解决的问题,就不一一赘述了)。直接说环境配置和路径吧(所有配置都在文件-设置-工具-外部工具):

  1.配置designer.exe。

  如果之前没有安装,需要点击加号添加。这里只要注意工作目录和程序的正确配置就可以了(一定要正确,不然以后用designer的时候自己手动导入就麻烦了)。点击增加后,会出现这个界面,然后可以输入以下数据。

  工作目录不确定前面是哪个磁盘,但是后面的路径都是一样的。

  program Files \ PycharmProjects \ python project \ Lib \ site-packages \ qt5 _ applications \ Qt \ bin \ designer . exe

  程序不需要改变

  $ProjectFileDir$

  2.之后,我们需要配置pyuic。这一步也很关键,保证了我们做出来的窗口界面会被翻译成python语言。没有这一步,只能手工编码(涉及到自己敲代码实现窗口)。同样,单击加号。

  然后输入以下内容:

  程序(同样的道理,存在哪个盘可能不确定,但是自己设定,但是下面的路径都是一样的)

  program Files \ PycharmProjects \ python project \ Scripts \ pyuic 5 . exe

  实参(参数也不能错):

  $ FileName $-o $ FileName without text tension $。巴拉圭

  工作目录(这一定不能出错)

  $FileDir$

  3.然后,我们现在还可以添加一个pyrcc.exe(主要是把图片转换成可用的文件,比如导入图标之类的)

  程序

  program Files \ PycharmProjects \ python project \ Scripts \ pyr cc5 . exe

  争论

  $ FileName $-o $ FileName without text tension $ _ RC . py

  工作目录

  $FileDir$

  所以现在,我们和配置都完成了,接下来就是代码的问题。

  首先,我们打开我们导入的外部工具Qt designer。

  进去之后,页面是这样的:

  我们可以直接创建一个主窗口。

  我们要实现的窗口大致如下:

  那我们现在就要开始收拾东西了:

  先选中按钮,然后可以随意改变它的大小和字体。

  然后我们编辑第一个信号和插槽功能:按下F4,点击按钮,拖出一条红线,放在喜欢的位置,选择“显示从QWidget继承的信号和插槽”。然后我们点击clicked()(意为点击),再选择close()(意为关闭)。当点击时,它将被关闭。

  然后Ctrl R就可以测试功能了,就是点击退出。

  像这个请选择图片,就需要我们在python的代码里手动添加信号和槽了。但是我们为了写手码方便,最好双击更改一下它的备注。(如下)

  

  那么之后先添加我们所需要的部件

  

  

  双击combox就可以添加了

  之后是文本和放图片的位置,我们统一使用Label(所以记得改名,防止记混了)

  

  当添加到图片和路径的显示时,我们可以更改他们的背景色,如下:

  

  

  那么它就变白了。

  

  到这里,我们已经把窗口的工作做完了,当然我们也可以添加一个窗口小图标,让它打开的时候有图标:(同时注意combox的新建项目改名)

  

  之后我们点击文件,保存即可:

  

  现在我们返回pycharm,就能看到我们的文件了:

  

  使用Py uic,把它转译成python代码,因为ui文件python是打不开的。

  这个时候就会生成一个AIrecognition.py文件

  

  在这里,我们就可以导入一些必要的包(模块了),如下:我们一会儿再讲讲这些包都是干啥的。

  

import json,sys

  from PyQt5 import QtCore, QtGui, QtWidgets

  from PyQt5.QtWidgets import QGraphicsWidget,QApplication,QFileDialog

  from PyQt5.QtGui import *

  from PyQt5.QtCore import *

  import simplejson,requests

  import test_rc

  import urllib,urllib.request

  import base64,ssl

  可以看到,我们命名之后,更容易找到对应的槽来书写信号:

  

  下一步,我们来书写一个打开图片的信号和槽函数(在py文件的最下面),这里要注意打开的窗口是主窗口,必须要存在,不然会报错:

  

 self.choosepicture.clicked.connect(self.openfile)

   def openfile(self):

   self.download_path = QFileDialog.getOpenFileName(self.centralwidget, "请选择需要识别的图片", "/",

   "Image File(*.jpg *.gif *.png *.jpeg)")

   if not self.download_path[0].strip():

   pass

   else:

   print(self.download_path[0])

   self.filedirectory.setText(self.download_path[0])

   pixmap = QPixmap(self.download_path[0])

   scarePixmap = pixmap.scaled(QSize(421, 281), aspectRatioMode=Qt.KeepAspectRatio)

   self.picturedisplay.setPixmap(scarePixmap)

   self.typeTp()

  由于我们把选择图片的那个Button改名成了choosepicture,所以这时候直接使用这个来做信号发生就好。

  那么我们还有编写槽函数,在打开图片之后,要显示图片的路径以及图片的样子。所以这些功能在槽函数实现:

  显示图片路径的label我们使用的名字是filedirectory,展示图片的label的名字是picturedisplay,所以我们在setText和setPixmap的时候,直接使用这两个名字就好。这样就实现了文本的展示和图片的展示(具体的代码以及函数,如QPixmap,就不再赘述,因为涉及的知识点会更多,所以只能委屈大大自己上网查一下啦!)

  那么现在,我们把这一个信号和槽搞定了,就差接入百度识别的系统了。

  就让我们来看一看吧:

  

  点击搜索百度ai,进入之后选择图像识别,打开技术文档:

  

  就可以看到python语言如何接入API,以及它的返回示例(我们展示图片信息就需要关注这个返回示例)

  

  当然,之后需要注册一个属于自己的百度AI的账号,找到自己的API_Key和Secret_Key

  

  注册之后点击左上角的三条横杠,然后选择图像识别。

  

  而后创建一个应用(我这里以及创建好了,简要的随便写写信息就行)

  之后点进去就可以查看自己的API_Key和Secret_Key了

  

  然后选择一些我们需要的识别项目(不用担心,免费使用的次数是足够的)

  

  之后再进入刚才的接入和返回的示例,将其复制到python代码中(导入的模块写在上面)

  注意上面书写槽函数实现打开图片代码中的typeTP,我们要靠这个接入网络,所以还要写函数,由于在设计窗口界面的时候,就已经将combox改名为choices,所以这里使用choices就可以。

  并且这里我们书写了一个接受token值的函数,我们也需要完善它的功能,一遍正常接入API和返回token值。

  

 def typeTp(self):

   # 植物识别

   if self.choices.currentIndex() == 0:

   self.get_token()

   self.get_plants(self.get_token())

   # 动物识别

   if self.choices.currentIndex() == 1:

   self.get_token()

   self.get_animals(self.get_token())

   # logo识别

   if self.choices.currentIndex() == 2:

   self.get_token()

   self.get_logo(self.get_token())

  在这里就需要我们导入一些新的包了,不过所有需要导入的包,我已经在开头给出,所以这里也不一一介绍了(比如simplejson,request)。

  

 def get_token(self):

   host = https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id= + API_Key + &client_secret= +Secret_Key

   request = urllib.request.Request(host)

   request.add_header(Content-Type, application/json; charset=UTF-8)

   response = urllib.request.urlopen(request)

   token_content = response.read()

   if token_content:

   token_info = simplejson.loads(token_content.decode("utf-8"))

   token_key = token_info[access_token]

   print(token_key)

   print(token_content)

   return token_key

  那么我们只演示其中的几个案例,植物和动物和logo,其他的接入都一样,在此之前,我们书写一个函数来处理冗余的代码问题(因为就像能在百度提供的接口代码一样,很多都是一样的,除了接受返回值):

  

# 为了解决代码的冗余问题,使用函数来接入网站,而后再在子函数里实现获取value

   def get_website(self,token_key,k):

   websitelist=["https://aip.baidubce.com/rest/2.0/image-classify/v1/plant",

   "https://aip.baidubce.com/rest/2.0/image-classify/v1/animal",

   "https://aip.baidubce.com/rest/2.0/image-classify/v2/logo"]

   request_url = websitelist[k]

   f = open(self.download_path[0], rb)

   img = base64.b64encode(f.read())

   params = {"image": img}

   access_token = token_key

   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:

   return response.json()

  可以看到,这里return的是一个response,也就是我们需要的一些内容(token_key的值),

  

 def get_plants(self, token_key):

   plants = self.get_website(token_key, 0)

   strover = 识别结果如下:\n

   strover += 辨认种类:{}\n辨认置信度:{}\n \

   .format(plants["result"][0]["name"], plants["result"][0]["score"]) + \

   \n其他可能植物:\n1.{}\n2.{}\n \

   .format(plants["result"][1]["name"], plants["result"][2]["name"])

   self.pictureinfo.setText(strover)

   def get_animals(self, token_key):

   animals = self.get_website(token_key, 1)

   strover = 识别结果如下:\n

   strover += 辨认种类:{}\n辨认置信度:{}\n \

   .format(animals["result"][0]["name"], animals["result"][0]["score"]) + \

   \n其他可能动物:\n1.{}\n2.{}\n \

   .format(animals["result"][1]["name"], animals["result"][2]["name"])

   self.pictureinfo.setText(strover)

   def get_logo(self, token_key):

   logos = self.get_website(token_key, 2)

   strover = 识别结果如下:\n

   strover += 辨认种类:{}\n辨认置信度:{}\n \

   .format(logos["result"][0]["name"], logos["result"][0]["probability"])

   self.pictureinfo.setText(strover)

  我们使用strover来接受返回的内容,这时候我们需要查看返回的示例了(以植物为例):

  

  可以看到,它返回了一个字典,那么我们就需要提取字典里的信息,也就是上面的代码所给出的:

  

 def get_plants(self, token_key):

   plants = self.get_website(token_key, 0)

   strover = 识别结果如下:\n

   strover += 辨认种类:{}\n辨认置信度:{}\n \

   .format(plants["result"][0]["name"], plants["result"][0]["score"]) + \

   \n其他可能植物:\n1.{}\n2.{}\n \

   .format(plants["result"][1]["name"], plants["result"][2]["name"])

   self.pictureinfo.setText(strover)

  字典的一些基本操作就不多解释了,所以,我们就这样成功的获取了信息。

  其他的识别也可以以此类推,所以,我们就实现了智能识别(基于百度AI)。当然,要记得写入自己的AK和SK,不然也无法识别。

  当然了,只是这样是无法运行这个代码的,我们还需要一个测试文件:

  

from AIrecognition import *

  if __name__ == __main__:

   app = QApplication(sys.argv)

   main = QtWidgets.QMainWindow()

   ui = Ui_MainWindow()

   ui.setupUi(main)

   main.show()

   sys.exit(app.exec_())

  那就让我们看看效果吧:

  

  效果非常好。当然,我们看这个表头啥也没有,很难看,我们可以手码写入:

  

  import test_rc 不能少

  

icon = QtGui.QIcon()

   icon.addPixmap(QtGui.QPixmap(":/new/Lib/schoolbus.ico"), QtGui.QIcon.Normal, QtGui.QIcon.Off)

   MainWindow.setWindowIcon(icon)

  

  同时,我们也可以设置一些标题文字,来改掉MainWindow:

  

  就把这个地方改成我们想要的就可以了:

  

  以上就是Python实战之实现百度智能图片识别的详细内容,更多关于Python图片识别的资料请关注盛行IT软件开发工作室其它相关文章!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: