最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python實(shí)戰(zhàn)之實(shí)現(xiàn)百度智能圖片識(shí)別

 更新時(shí)間:2022年01月24日 10:59:25   作者:芝士工具猿  
這篇文章主要介紹了如何利用Python編寫(xiě)一個(gè)百度智能圖片識(shí)別項(xiàng)目,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Python有一定幫助,需要的可以參考一下

這是我們最終的效果,那么我們一起來(lái)看一看如何實(shí)現(xiàn)吧!超簡(jiǎn)單易上手哦!

首先我們需要先配置pyqt5的資源,這里就不說(shuō)關(guān)于安裝包的問(wèn)題了(pip或者pycharm可以直接添加解決的問(wèn)題,不一一贅述),我們直接說(shuō)環(huán)境配置和路徑的問(wèn)題(所有的配置都在FILE -> setting -> Tools -> External Tools里):

1、配置designer.exe

之前沒(méi)安裝過(guò)的需要點(diǎn)擊加號(hào)添加,這里只要注意Working directory和Program的配置正確即可(務(wù)必正確,不然后期使用designer需要自己手動(dòng)導(dǎo)入,比較麻煩),點(diǎn)擊加之后,會(huì)出現(xiàn)這個(gè)界面,再把下面的數(shù)據(jù)輸入就可以了。

Working directory除了前面的存在哪一個(gè)盤(pán)里不確定,后面的路徑都一樣

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

Program不需要更改

$ProjectFileDir$

2、之后我們需要配置pyuic,這一步也很關(guān)鍵,它保證了把我們做出來(lái)的窗口界面翻譯成python語(yǔ)言。沒(méi)有這一步,就只能手碼(自己敲代碼實(shí)現(xiàn)窗口涉及)。同樣的,點(diǎn)擊加號(hào)

再把下面的內(nèi)容輸入就可以:

Program(也是一樣,存在哪個(gè)盤(pán)可能不確定,是自己設(shè)置,但是后面的路徑都一樣)

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

Arguments(參數(shù)也不能有問(wèn)題):

$FileName$ -o $FileNameWithoutExtension$.py

Working directory(這個(gè)務(wù)必不能出錯(cuò))

$FileDir$

3、那么,我們現(xiàn)在也可以添加一個(gè)pyrcc.exe(主要是把圖像轉(zhuǎn)化為可使用的文件,比如導(dǎo)入圖標(biāo)之類)

Program

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

Arguments

$FileName$ -o $FileNameWithoutExtension$_rc.py

Working directory

$FileDir$

那么到現(xiàn)在,我們以及配置完成了,之后就是代碼的問(wèn)題了。

首先我們打開(kāi)我們導(dǎo)入的外界工具Qt designer

進(jìn)去之后,頁(yè)面如此:

我們直接創(chuàng)建一個(gè)main window就可以了

我們要實(shí)現(xiàn)的窗口大致如下:

 那么我們現(xiàn)在需要開(kāi)始放東西了:

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

而后我們編輯第一個(gè)信號(hào)與槽函數(shù):按下F4按鍵,點(diǎn)擊pushbutton,拖拽出一個(gè)紅色的線,放在喜歡的位置后,選擇“顯示從 QWidget 繼承的信號(hào)和槽”,我們?cè)冱c(diǎn)擊clicked()(意思就是被點(diǎn)擊),然后選擇close()(意思就是關(guān)閉)。即被點(diǎn)擊就關(guān)閉。

那么Ctrl+R可以測(cè)試一下功能,就是點(diǎn)擊一下就退出了。

像這個(gè)請(qǐng)選擇圖片,就需要我們?cè)趐ython的代碼里手動(dòng)添加信號(hào)和槽了。但是我們?yōu)榱藢?xiě)手碼方便,最好雙擊更改一下它的備注。(如下)

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

雙擊combox就可以添加了

之后是文本和放圖片的位置,我們統(tǒng)一使用Label(所以記得改名,防止記混了)

當(dāng)添加到圖片和路徑的顯示時(shí),我們可以更改他們的背景色,如下:

那么它就變白了。

到這里,我們已經(jīng)把窗口的工作做完了,當(dāng)然我們也可以添加一個(gè)窗口小圖標(biāo),讓它打開(kāi)的時(shí)候有圖標(biāo):(同時(shí)注意combox的新建項(xiàng)目改名)

之后我們點(diǎn)擊文件,保存即可:

現(xiàn)在我們返回pycharm,就能看到我們的文件了:

使用Py uic,把它轉(zhuǎn)譯成python代碼,因?yàn)閡i文件python是打不開(kāi)的。

這個(gè)時(shí)候就會(huì)生成一個(gè)AIrecognition.py文件 

在這里,我們就可以導(dǎo)入一些必要的包(模塊了),如下:我們一會(huì)兒再講講這些包都是干啥的。

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

可以看到,我們命名之后,更容易找到對(duì)應(yīng)的槽來(lái)書(shū)寫(xiě)信號(hào):

下一步,我們來(lái)書(shū)寫(xiě)一個(gè)打開(kāi)圖片的信號(hào)和槽函數(shù)(在py文件的最下面),這里要注意打開(kāi)的窗口是主窗口,必須要存在,不然會(huì)報(bào)錯(cuò):

  self.choosepicture.clicked.connect(self.openfile)
 
    def openfile(self):
        self.download_path = QFileDialog.getOpenFileName(self.centralwidget, "請(qǐng)選擇需要識(shí)別的圖片", "/",
                                                         "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()

由于我們把選擇圖片的那個(gè)Button改名成了choosepicture,所以這時(shí)候直接使用這個(gè)來(lái)做信號(hào)發(fā)生就好。

那么我們還有編寫(xiě)槽函數(shù),在打開(kāi)圖片之后,要顯示圖片的路徑以及圖片的樣子。所以這些功能在槽函數(shù)實(shí)現(xiàn):

顯示圖片路徑的label我們使用的名字是filedirectory,展示圖片的label的名字是picturedisplay,所以我們?cè)趕etText和setPixmap的時(shí)候,直接使用這兩個(gè)名字就好。這樣就實(shí)現(xiàn)了文本的展示和圖片的展示(具體的代碼以及函數(shù),如QPixmap,就不再贅述,因?yàn)樯婕暗闹R(shí)點(diǎn)會(huì)更多,所以只能委屈大大自己上網(wǎng)查一下啦!)

那么現(xiàn)在,我們把這一個(gè)信號(hào)和槽搞定了,就差接入百度識(shí)別的系統(tǒng)了。

就讓我們來(lái)看一看吧:

點(diǎn)擊搜索百度ai,進(jìn)入之后選擇圖像識(shí)別,打開(kāi)技術(shù)文檔:

就可以看到python語(yǔ)言如何接入API,以及它的返回示例(我們展示圖片信息就需要關(guān)注這個(gè)返回示例)

當(dāng)然,之后需要注冊(cè)一個(gè)屬于自己的百度AI的賬號(hào),找到自己的API_Key和Secret_Key

注冊(cè)之后點(diǎn)擊左上角的三條橫杠,然后選擇圖像識(shí)別。 

而后創(chuàng)建一個(gè)應(yīng)用(我這里以及創(chuàng)建好了,簡(jiǎn)要的隨便寫(xiě)寫(xiě)信息就行)

之后點(diǎn)進(jìn)去就可以查看自己的API_Key和Secret_Key了

然后選擇一些我們需要的識(shí)別項(xiàng)目(不用擔(dān)心,免費(fèi)使用的次數(shù)是足夠的)

之后再進(jìn)入剛才的接入和返回的示例,將其復(fù)制到python代碼中(導(dǎo)入的模塊寫(xiě)在上面)

注意上面書(shū)寫(xiě)槽函數(shù)實(shí)現(xiàn)打開(kāi)圖片代碼中的typeTP,我們要靠這個(gè)接入網(wǎng)絡(luò),所以還要寫(xiě)函數(shù),由于在設(shè)計(jì)窗口界面的時(shí)候,就已經(jīng)將combox改名為choices,所以這里使用choices就可以。

并且這里我們書(shū)寫(xiě)了一個(gè)接受token值的函數(shù),我們也需要完善它的功能,一遍正常接入API和返回token值。

    def typeTp(self):
        # 植物識(shí)別
        if self.choices.currentIndex() == 0:
            self.get_token()
            self.get_plants(self.get_token())
        # 動(dòng)物識(shí)別
        if self.choices.currentIndex() == 1:
            self.get_token()
            self.get_animals(self.get_token())
        # logo識(shí)別
        if self.choices.currentIndex() == 2:
            self.get_token()
            self.get_logo(self.get_token())

在這里就需要我們導(dǎo)入一些新的包了,不過(guò)所有需要導(dǎo)入的包,我已經(jīng)在開(kāi)頭給出,所以這里也不一一介紹了(比如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

那么我們只演示其中的幾個(gè)案例,植物和動(dòng)物和logo,其他的接入都一樣,在此之前,我們書(shū)寫(xiě)一個(gè)函數(shù)來(lái)處理冗余的代碼問(wèn)題(因?yàn)榫拖衲茉诎俣忍峁┑慕涌诖a一樣,很多都是一樣的,除了接受返回值):

# 為了解決代碼的冗余問(wèn)題,使用函數(shù)來(lái)接入網(wǎng)站,而后再在子函數(shù)里實(shí)現(xiàn)獲取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的是一個(gè)response,也就是我們需要的一些內(nèi)容(token_key的值),

    def get_plants(self, token_key):
        plants = self.get_website(token_key, 0)
        strover = '識(shí)別結(jié)果如下:\n'
        strover += '辨認(rèn)種類:{}\n辨認(rè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 = '識(shí)別結(jié)果如下:\n'
        strover += '辨認(rèn)種類:{}\n辨認(rèn)置信度:{}\n' \
                       .format(animals["result"][0]["name"], animals["result"][0]["score"]) + \
                   '\n其他可能動(dòng)物:\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 = '識(shí)別結(jié)果如下:\n'
        strover += '辨認(rèn)種類:{}\n辨認(rèn)置信度:{}\n' \
            .format(logos["result"][0]["name"], logos["result"][0]["probability"])
        self.pictureinfo.setText(strover)

我們使用strover來(lái)接受返回的內(nèi)容,這時(shí)候我們需要查看返回的示例了(以植物為例):

可以看到,它返回了一個(gè)字典,那么我們就需要提取字典里的信息,也就是上面的代碼所給出的:

  def get_plants(self, token_key):
        plants = self.get_website(token_key, 0)
        strover = '識(shí)別結(jié)果如下:\n'
        strover += '辨認(rèn)種類:{}\n辨認(rè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)

字典的一些基本操作就不多解釋了,所以,我們就這樣成功的獲取了信息。

其他的識(shí)別也可以以此類推,所以,我們就實(shí)現(xiàn)了智能識(shí)別(基于百度AI)。當(dāng)然,要記得寫(xiě)入自己的AK和SK,不然也無(wú)法識(shí)別。

當(dāng)然了,只是這樣是無(wú)法運(yùn)行這個(gè)代碼的,我們還需要一個(gè)測(cè)試文件:

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_())

那就讓我們看看效果吧:

效果非常好。當(dāng)然,我們看這個(gè)表頭啥也沒(méi)有,很難看,我們可以手碼寫(xiě)入:

import test_rc 不能少

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

同時(shí),我們也可以設(shè)置一些標(biāo)題文字,來(lái)改掉MainWindow:

就把這個(gè)地方改成我們想要的就可以了:

以上就是Python實(shí)戰(zhàn)之實(shí)現(xiàn)百度智能圖片識(shí)別的詳細(xì)內(nèi)容,更多關(guān)于Python圖片識(shí)別的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • tensorflow實(shí)現(xiàn)圖像的裁剪和填充方法

    tensorflow實(shí)現(xiàn)圖像的裁剪和填充方法

    今天小編就為大家分享一篇tensorflow實(shí)現(xiàn)圖像的裁剪和填充方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-07-07
  • python networkx 根據(jù)圖的權(quán)重畫(huà)圖實(shí)現(xiàn)

    python networkx 根據(jù)圖的權(quán)重畫(huà)圖實(shí)現(xiàn)

    這篇文章主要介紹了python networkx 根據(jù)圖的權(quán)重畫(huà)圖實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • Python使用asyncio標(biāo)準(zhǔn)庫(kù)對(duì)異步IO的支持

    Python使用asyncio標(biāo)準(zhǔn)庫(kù)對(duì)異步IO的支持

    Python中,所有程序的執(zhí)行都是單線程的,但可同時(shí)執(zhí)行多個(gè)任務(wù),不同的任務(wù)被時(shí)間循環(huán)(Event Loop)控制及調(diào)度,Asyncio是Python并發(fā)編程的一種實(shí)現(xiàn)方式;是Python 3.4版本引入的標(biāo)準(zhǔn)庫(kù),直接內(nèi)置了對(duì)異步IO的支持
    2023-11-11
  • 使用Python的音樂(lè)播放器GUI的實(shí)現(xiàn)

    使用Python的音樂(lè)播放器GUI的實(shí)現(xiàn)

    本文主要介紹了使用Python的音樂(lè)播放器GUI的實(shí)現(xiàn),可以讓您快速輕松地管理和收聽(tīng)所有音樂(lè)文件,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-12-12
  • Django中models.model如何使用舉例詳解

    Django中models.model如何使用舉例詳解

    在現(xiàn)代Web開(kāi)發(fā)中Django是一個(gè)非常流行的Web框架,它允許開(kāi)發(fā)者快速構(gòu)建強(qiáng)大而優(yōu)雅的Web應(yīng)用程序,這篇文章主要介紹了Django中models.model如何使用的相關(guān)資料,需要的朋友可以參考下
    2025-04-04
  • Python PyInstaller安裝和使用教程詳解

    Python PyInstaller安裝和使用教程詳解

    這篇文章主要介紹了Python PyInstaller安裝和使用教程,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-01-01
  • 使用Python進(jìn)行穩(wěn)定可靠的文件操作詳解

    使用Python進(jìn)行穩(wěn)定可靠的文件操作詳解

    在本文中,主要分享一些如何在Python代碼中改善I/O可靠性的見(jiàn)解,大家參考使用吧
    2013-12-12
  • Python使用matplotlib時(shí)顯示中文亂碼解決方法(或更改字體)

    Python使用matplotlib時(shí)顯示中文亂碼解決方法(或更改字體)

    這篇文章主要給大家介紹了關(guān)于Python使用matplotlib時(shí)顯示中文亂碼的解決方法(或更改字體),在Matplotlib中,中文亂碼問(wèn)題通常出現(xiàn)在圖表的標(biāo)題、標(biāo)簽和刻度上,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-12-12
  • Python?如何引用不確定的函數(shù)

    Python?如何引用不確定的函數(shù)

    在Python中,引用不確定的函數(shù)通常意味著我們可能在運(yùn)行時(shí)才知道要調(diào)用哪個(gè)函數(shù),或者我們可能想根據(jù)某些條件動(dòng)態(tài)地選擇不同的函數(shù)來(lái)執(zhí)行,下面給大家分享Python?如何引用不確定的函數(shù),感興趣的朋友跟隨小編一起看看吧
    2024-07-07
  • Python3.6連接MySQL的詳細(xì)步驟

    Python3.6連接MySQL的詳細(xì)步驟

    在現(xiàn)代Web開(kāi)發(fā)和數(shù)據(jù)處理中,Python與數(shù)據(jù)庫(kù)的交互是必不可少的一部分,MySQL作為最流行的開(kāi)源關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng)之一,與Python的結(jié)合可以實(shí)現(xiàn)高效的數(shù)據(jù)存取操作,本文將介紹如何在Python 3.6環(huán)境中通過(guò)??pymysql??庫(kù)連接到MySQL數(shù)據(jù)庫(kù),需要的朋友可以參考下
    2025-04-04

最新評(píng)論

德化县| 吉木乃县| 双牌县| 花莲市| 科尔| 临江市| 溧阳市| 望奎县| 缙云县| 乾安县| 奎屯市| 拜泉县| 宜兰市| 临高县| 滨州市| 禹州市| 荥阳市| 义马市| 交城县| 隆化县| 临高县| 宁武县| 桂东县| 阿巴嘎旗| 乐山市| 友谊县| 陆良县| 蚌埠市| 梁河县| 龙山县| 涿鹿县| 菏泽市| 广汉市| 保定市| 湖口县| 孙吴县| 曲阜市| 缙云县| 渑池县| 威信县| 五河县|