,,Python实战之实现百度智能图片识别

,,Python实战之实现百度智能图片识别

本文主要介绍如何使用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代码,因为python打不开ui文件。

此时,将生成一个AIrecognition.py文件。

在这里,我们可以导入一些必要的包(模块),如下:这些包做什么我们后面再说。

导入json,sys

从PyQt5导入QtCore、QtGui、QtWidgets

来自PyQt5。QtWidgets导入QGraphicsWidget,QApplication,QFileDialog

来自PyQt5。QtGui导入*

来自PyQt5。QtCore导入*

导入simplejson,请求

导入测试_rc

导入urllib,urllib.request

导入base64,ssl

正如你所看到的,在我们命名它之后,更容易找到相应的插槽来写信号:

接下来,让我们编写一个打开图像的信号和插槽函数(在py文件的底部)。这里需要注意的是,打开的窗口是主窗口,它必须存在,否则会报错:

self . choose picture . clicked . connect(self . openfile)

def openfile(自身):

self . download _ path=qfiledialog . getopen filename(self . central widget,'请选择要识别的图片','/',

图像文件(*。jpg *。gif *。png *。jpeg)')

如果不是self.download_path[0]。strip():

及格

否则:

print(self.download_path[0])

self . filedirectory . settext(self . download _ path[0])

pix map=qpix map(self . download _ path[0])

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

self . picturedisplay . setpixmap(scare pixmap)

self.typeTp()

由于我们将选择图片的按钮的名称更改为choosepicture,所以此时直接使用它来生成信号是很好的。

然后我们也写一个slot函数来显示图片的路径和打开图片后的样子。所以这些函数都是在槽函数中实现的:

显示图片路径的标签名是filedirectory,显示图片的标签名是picturedisplay,所以我们在使用setText和setPixmap的时候,只需要直接使用这两个名字就可以了。这样就实现了文字显示和图片显示(具体的代码和功能,比如QPixmap就不详细描述了,因为涉及的知识点会比较多,只能自己上网查了!)

现在,我们已经完成了这个信号和槽,只需要接入百度识别的系统。

让我们来看看:

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

可以看到python语言如何访问API及其返回示例(我们展示图片信息时需要注意这个返回示例)。

当然之后还需要注册自己的百度AI账号,找到自己的API_Key和Secret_Key。

注册后,点击左上角的三个栏,然后选择图像识别。

然后创建一个应用程序(我在这里,我已经创建了它,只需简单地写和写信息)

点进去之后,可以查看你的API_Key和Secret_Key。

然后选择一些我们需要的鉴定物品(不用担心,免费使用的数量足够)

然后输入刚才access和return的例子并复制到python代码中(导入的模块写在上面)。

注意,上面的写槽函数实现了图片代码中typeTP的打开。我们必须依赖这个接入网络,所以我们必须编写函数。由于combox在设计窗口界面时已经被重命名为choices,所以我们可以在这里使用choices。

这里我们写了一个接受令牌值的函数。我们还需要改进它的功能,访问API并正常返回令牌值。

定义类型Tp(自身):

#工厂标识

if self . choices . current index()==0:

self.get_token()

self.get_plants(self.get_token())

#动物识别

if self . choices . current index()==1:

self.get_token()

self . get _ animals(self . get _ token())

#徽标识别

if self . choices . current index()==2:

self.get_token()

self.get_logo(self.get_token())

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

def get_token(自身):

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(主机)

request . add _ header(' Content-Type ',' application/JSON;charset=UTF-8 ')

响应=urllib。请求。urlopen(请求)

token_content=response.read()

如果令牌_内容:

token _ info=简单JSON。loads(token _ content。解码(' utf-8 '))

令牌密钥=令牌信息['访问令牌]

打印(令牌密钥)

打印(令牌内容)

返回令牌_密钥

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

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

def get_website(self,token_key,k):

网站列表=[' https://AIP。白杜布斯。' com/rest/2.0/image-classify/v1/plant ',

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

https://AIP。白杜布斯。' com/rest/2.0/image-classify/v2/logo ']

请求_url=网站列表[k]

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

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

params={'image': img}

访问令牌=令牌密钥

'请求url=请求网址?访问令牌='访问令牌

headers={ ' content-type ':' application/x-www-form-urlencoded ' }

响应=请求。post(请求URL,数据=参数,标题=标题)

如果响应:

return response.json()

可以看到,这里返回的是一个回应,也就是我们需要的一些内容(令牌_密钥的值),

def get_plants(self,token_key):

植物=自我。get _ website(token _ key,0)

strover='识别结果如下:\n '

strover='辨认种类:{}\n辨认置信度:{}\n' \。格式(植物['结果'][0]['名称'],植物['结果'][0]['分数']) \

\n其他可能植物:\n1 .{}\n2 .{}\n' \。格式(植物['结果'][1]['名称'],植物['结果'][2]['名称'])

自我。pictureinfo。settext

def get_animals(self,token_key):

动物=自我。get _ website(令牌_密钥,1)

strover='识别结果如下:\n '

strover='辨认种类:{}\n辨认置信度:{}\n' \。格式(动物['结果'][0]['名称'],动物['结果'][0]['分数']) \

\n其他可能动物:\n1 .{}\n2 .{}\n' \。格式(动物['结果'][1]['名称'],动物['结果'][2]['名称'])

自我。pictureinfo。settext

def get_logo(self,token_key):

logos=自我。get _ website(token _ key,2)

strover='识别结果如下:\n '

strover='辨认种类:{}\n辨认置信度:{}\n' \。格式(徽标['结果'][0]['名称'],徽标['结果'][0]['概率'])

自我。pictureinfo。settext

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

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

def get_plants(self,token_key):

植物=自我。get _ website(token _ key,0)

strover='识别结果如下:\n '

strover='辨认种类:{}\n辨认置信度:{}\n' \。格式(植物['结果'][0]['名称'],植物['结果'][0]['分数']) \

\n其他可能植物:\n1 .{}\n2 .{}\n' \。格式(植物['结果'][1]['名称'],植物['结果'][2]['名称'])

自我。pictureinfo。settext

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

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

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

从空气认知导入*

if __name__=='__main__ ':

app=QA application(sys . argv)

main=QtWidgets。QMainWindow()

ui=Ui_MainWindow()

ui.setupUi(main)

main.show()

sys.exit(app.exec_())

那我们来看看效果:

效果很好。当然我们看到这个表头什么都没有,很丑。我们可以手写:

Test _ RC不能更小。

icon=QtGui。QIcon()

icon.addPixmap(QtGui。QPixmap(':/new/Lib/school bus . ico '),QtGui。QIcon .正常,QtGui。QIcon.Off)

MainWindow.setWindowIcon(图标)

同时,我们也可以设置一些标题词来改变主窗口:

只要把这个地方变成我们想要的样子:

以上是百度智能图像识别在Python实战中实现的详细内容。更多关于Python图像识别的信息,请关注我们的其他相关文章!

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

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