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

这是我们最终的效果,那么我们一起来看一看如何实现吧!超简单易上手哦!

首先我们需要先配置pyqt5的资源,这里就不说关于安装包的问题了(pip或者pycharm可以直接添加解决的问题,不一一赘述),我们直接说环境配置和路径的问题(所有的配置都在FILE -> setting -> Tools -> External Tools里):

1、配置designer.exe

之前没安装过的需要点击加号添加,这里只要注意Working directory和Program的配置正确即可(务必正确,不然后期使用designer需要自己手动导入,比较麻烦),点击加之后,会出现这个界面,再把下面的数据输入就可以了。

Working directory除了前面的存在哪一个盘里不确定,后面的路径都一样

Program Files\PycharmProjects\pythonProject\Lib\site-packages\qt5_applications\Qt\bin\designer.exe

Program不需要更改

$ProjectFileDir$

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

再把下面的内容输入就可以:

Program(也是一样,存在哪个盘可能不确定,是自己设置,但是后面的路径都一样)

Program Files\PycharmProjects\pythonProject\Scripts\pyuic5.exe

Arguments(参数也不能有问题):

$FileName$ -o $FileNameWithoutExtension$.py

Working directory(这个务必不能出错)

$FileDir$

3、那么,我们现在也可以添加一个pyrcc.exe(主要是把图像转化为可使用的文件,比如导入图标之类)

Program

Program Files\PycharmProjects\pythonProject\Scripts\pyrcc5.exe

Arguments

$FileName$ -o $FileNameWithoutExtension$_rc.py

Working directory

$FileDir$

那么到现在,我们以及配置完成了,之后就是代码的问题了。

首先我们打开我们导入的外界工具Qt designer

进去之后,页面如此:

我们直接创建一个main window就可以了

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

那么我们现在需要开始放东西了:

首先选中PushButton,之后可以任意更改它的大小和字体。

而后我们编辑第一个信号与槽函数:按下F4按键,点击pushbutton,拖拽出一个红色的线,放在喜欢的位置后,选择“显示从 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图片识别的资料请关注我们其它相关文章!

(0)

相关推荐

  • Python 图片文字识别的实现之PaddleOCR

    目录 项目使用 项目结构 环境部署 1.安装Anaconda,构造虚拟环境 2.依赖包下载 测试代码 参数补充 总结 前言 什么是OCR? 光学字符识别(Optical Character Recognition, OCR),是指对文本资料的图像文件进行分析识别处理,获取文字及版面信息的过程.简而言之,检测图像中的文本资料,并且识别出文本的内容. 那么有哪些应用场景呢? 其实我们日常生活中处处都有ocr的影子,比如在疫情期间身份证识别录入信息.车辆车牌号识别.自动驾驶等.我们的生活中,机器学习已

  • Python基于百度API识别并提取图片中文字

    利用百度 AI 开发平台的 OCR 文字识别 API 识别并提取图片中的文字.首先需注册获取 API 调用的 ID 和 key,步骤如下: 打开百度AI开放平台,进入控制台中的文字识别应用(需要有百度账号). 创建一个应用,并进入管理应用,记下 AppID, API Key, Secrect Key,调用 API需用到. 最后安装 python 的百度ai接口的的库 pip install baidu-aip 以下是代码实现,需将所有识别的图片放进名为 picture 的文件夹. #!/usr/

  • python实现百度OCR图片识别过程解析

    这篇文章主要介绍了python实现百度OCR图片识别过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 代码如下 import base64 import requests class CodeDemo: def __init__(self,AK,SK,code_url,img_path): self.AK=AK self.SK=SK self.code_url=code_url self.img_path=img_path self.ac

  • python 实现批量图片识别并翻译

    近小编遇到一个生存问题,女朋友让我给她翻译英文化妆品标签.美其名曰:"程序猿每天英语开发,英文一定很好吧,来帮我翻译翻译化妆品成分","来,帮我看看这个面膜建议敷几分钟"....看来斥巨资买化妆品不算完,还需要会各种英文介绍. 默默收起大学考的一摞429分的四级证书,我打开了IDE...我打算开发一个能批量翻译的图片的demo,把家里的各种化妆品都翻译好.机智如我,是不会自己从训练模型做起的,打开有道智云的友好的AI接口页面 ,果然有图片翻译服务,体验了一下可是真不

  • python 利用百度API识别图片文字(多线程版)

    #!/usr/bin/env python3 # -*- coding: utf-8 -*- """ Created on Tue Jun 12 09:37:38 2018 利用百度api实现图片文本识别 @author: XnCSD """ import glob from os import path import os from aip import AipOcr from PIL import Image from queue impor

  • Python调用百度OCR实现图片文字识别的示例代码

    百度AI提供了一天50000次的免费文字识别额度,可以愉快的免费使用!下面直接上方法: 首先在百度AI创建一个应用,按照下图创建即可,创建后会获得如下: 创建后会获得如下信息: APP_ID = '******' API_KEY = '************' SECRET_KEY = '**************' 下面就是百度API包的安装,在终端cmd输入如下语句直接pip方式安装,注意是 baidu-api 哦! pip install --user baidu-aip 接下来上py

  • Python face_recognition实现AI识别图片中的人物

    目录 前言 环境安装 代码使用 总结 前言 最近碰到了照片识别的场景,正好使用了face_recognition项目,给大家分享分享.face_recognition项目能做的很多,人脸检测功能也是有的,是一个比较成熟的项目.该项目的github地址:github仓库 本文主要是对该项目的安装使用,后面会更新一篇我自己写的实现人脸检测的代码,可以直接使用. 环境安装 首先我们看看官方给出的人脸识别效果图 我们看一下README关于安装环境的信息 官方给出的可安装操作系统是Mac和Linux,但是

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

    这是我们最终的效果,那么我们一起来看一看如何实现吧!超简单易上手哦! 首先我们需要先配置pyqt5的资源,这里就不说关于安装包的问题了(pip或者pycharm可以直接添加解决的问题,不一一赘述),我们直接说环境配置和路径的问题(所有的配置都在FILE -> setting -> Tools -> External Tools里): 1.配置designer.exe 之前没安装过的需要点击加号添加,这里只要注意Working directory和Program的配置正确即可(务必正确,不

  • Python实战之MNIST手写数字识别详解

    目录 数据集介绍 1.数据预处理 2.网络搭建 3.网络配置 关于优化器 关于损失函数 关于指标 4.网络训练与测试 5.绘制loss和accuracy随着epochs的变化图 6.完整代码 数据集介绍 MNIST数据集是机器学习领域中非常经典的一个数据集,由60000个训练样本和10000个测试样本组成,每个样本都是一张28 * 28像素的灰度手写数字图片,且内置于keras.本文采用Tensorflow下Keras(Keras中文文档)神经网络API进行网络搭建. 开始之前,先回忆下机器学习

  • python实战之百度智能云使人像动漫化

    一.目标 之前无意中看到有某位博主写过人像动漫化这样的文章,看着还挺好玩,所以我也想尝试一下. 利用百度智能云中的人工智能,对图片进行处理达到人像动漫化的效果. 二.准备工作 1.百度云智能账号创建 2.图像特效应用 3.开发环境python3.7+pycharm 首先要注册一个百度智能云账号,并创建这个图像特效应用 三.操作流程 3.1 阅读官方文档 当我们要使用一个我们不太了解的东西时,阅读官方文档无疑是最重要的,官方文档一般都写的特别详细,对每一个功能描述的很细节,我们先来看一下 而且这里

  • Python实战之实现截图识别文字

    目录 前言 一.获取百度智能云token 二.百度借口调用 三.搭建窗口化的程序以便于使用 四.实现截图的自动保存 五.将识别到的文字输出显示在窗口文本框中并将文字发送到剪切板 六.提取识别后文字中的中(英)文 前言 系统:win10 Python版本:python3.8.6 pycharm版本:pycharm 2021.1.2(Professional Edition) 完整代码下载:Baidu_Ocr.py-Python 一.获取百度智能云token 百度智能云登录后找到人工智能界面下的文字

  • 易语言通过百度ocr接口识别图片记录微信转账金额的代码

    封包编码 .版本 2 .程序集 程序集1 .子程序 取内容, 文本型 .参数 封包, 文本型 .局部变量 a, 整数型 .局部变量 b, 整数型 .局部变量 ls, 文本型 .如果真 (寻找文本 (封包, "[]", , 假) ≠ -1 或 寻找文本 (封包, "head", , 假) ≠ -1 或 封包 = "") 输出调试文本 (封包) 返回 ("") .如果真结束 a = 寻找文本 (封包, "[",

  • python实现图片识别汽车功能

    本文实例为大家分享了python实现图片识别汽车的具体代码,供大家参考,具体内容如下 准备工作 1.登陆开发者控制台 2.安装 pip install baidu-aip 模块 原理读取图片的二进制信息,调用百度云第三方接口,将图片二进制信息传递给接口,获取接口返回的信息,进行处理输出 百度云准备第三方接口,实例应用简介 创建实例应用 创建完成后可以看到需要的三个参数 AppID, API Key, Secret Key 代码实现 from aip import AipImageClassify

  • Python实现图片识别加翻译功能

    Python使用百度AI接口实现图片识别加翻译 python诞生30周年 # encoding:utf-8 import requests import base64 from PIL import Image import pytesseract # 这里需要安装一下 Tesseract-OCR # 链接:https://pan.baidu.com/s/1D2eODet7x9xshBVi6ZUZ_Q # 提取码:qfef # 安装好之后别忘了把Tesseract-OCR路径添加到环境变量中 i

  • Python编程实现的图片识别功能示例

    本文实例讲述了Python编程实现的图片识别功能.分享给大家供大家参考,具体如下: 1. 安装PIL,官方没有WIN64位,Pillow替代 pip install Pillow-2.7.0-cp27-none-win_amd64.whl 2. 安装Pytesser 下载pytesser_v0.0.1.zip,解压后复制进Python27\Lib\site-packges\pytesser路径下,无pytesser则新建 在Python27\Lib\site-packges\pytesser中新

  • python好玩的项目—色情图片识别代码分享

    一.实验简介 本实验将使用 Python3 去识别图片是否为色情图片,我们会使用到 PIL 这个图像处理库,会编写算法来划分图像的皮肤区域 1.1. 知识点 Python 3 的模块的安装 Python 3 基础知识 肤色像素检测与皮肤区域划分算法 Pillow模块的使用 argparse 模块的使用 1.2. 效果展示 二.实验步骤 2.1. 安装包 PIL 2009年之后就没有更新了,也不支持 Python3 ,于是有了 Alex Clark 领导的公益项目 Pillow,Pillow 是一

随机推荐