用Python編寫百度ocr圖像識別程序

涉及的知識點:Python、調用百度API、PyQt5

運行環境:Mac+Python3.7+PyQt5

程序截圖:


實現步驟:

第一步:獲得自己的百度OCR的AK和SK

1、利用百度 AI 開發平臺的 OCR 文字識別 API 識別並提取圖片中的文字,首先需註冊獲取 API 調用的 ID 和 key,打開百度AI開放平臺,進入控制檯中的文字識別應用(需要有百度賬號)。 

2、創建一個應用,並進入管理應用,記下 AppID, API Key, Secrect Key,調用 API需用到。 

 

第二步:PyQt5安裝和pycharm配置

1.直接使用pip安裝,但是需要SIP的支持,所以先安裝SIP,再安裝pyqt5

pip install sip 
pip install PyQt5

2.安裝qt designer,同樣使用pip安裝

pip install PyQt5-tools

3.配置PyCharm,配置PyCharm是爲了在Pycharm裏面實現打開qt designer,生成qt文件,方便轉換成python文件。

具體步驟可移步查看這篇文章:pyqt5安裝與pycharm配置

 

第三步:用qt designer編寫界面

新建一個項目,然後在左邊窗口部件盒找到需要的控件,拖動到界面編輯區,保存baidu_ocr.ui

 

第四步:對剛纔保存的baidu_ocr.ui文件右鍵選擇 External Tools-pyUIC 功能,將QT文件轉化爲py文件

第五步:編輯相關代碼,運行之前請將AK和SK替換爲自己的

# -*- coding: utf-8 -*-

'''
author: 神奇的老黃
gtihub: https://github.com/MH-Blog
site: https://magichuang.cn
date: 2019.02.14 23:08
'''

import base64
import json

from PyQt5 import QtCore, QtGui, QtWidgets

import sys
import urllib, urllib.request
import ssl

from PyQt5.QtCore import QSize, Qt

ssl._create_default_https_context = ssl._create_unverified_context

""" 你的 APPID AK SK """
# http://ai.baidu.com/docs#/OCR-Pricing/top 申請地址

# API_KEY 爲官網獲取的AK, SECRET_KEY 爲官網獲取的SK
API_KEY = 'API_KEY'
SECRET_KEY = 'SECRET_KEY'


# QT自動生成的UI類
class Ui_Form(object):
    def setupUi(self, Form):
        # 設置窗體的名稱
        Form.setObjectName("Form")
        # 設置窗體大小
        Form.resize(834, 789)
        # 新建橫向佈局
        self.horizontalLayoutWidget = QtWidgets.QWidget(Form)
        self.horizontalLayoutWidget.setGeometry(QtCore.QRect(40, 30, 251, 61))
        self.horizontalLayoutWidget.setObjectName("horizontalLayoutWidget")
        self.horizontalLayout = QtWidgets.QHBoxLayout(self.horizontalLayoutWidget)
        self.horizontalLayout.setContentsMargins(0, 0, 0, 0)
        self.horizontalLayout.setObjectName("horizontalLayout")
        self.label = QtWidgets.QLabel(self.horizontalLayoutWidget)
        self.label.setObjectName("label")
        self.horizontalLayout.addWidget(self.label)
        self.comboBox = QtWidgets.QComboBox(self.horizontalLayoutWidget)
        # 設置名稱
        self.comboBox.setObjectName("comboBox")
        # 添加子標題有多少分類添加幾個
        self.comboBox.addItem("")
        self.comboBox.addItem("")
        self.comboBox.addItem("")
        self.comboBox.addItem("")
        self.comboBox.addItem("")
        self.comboBox.addItem("")
        self.comboBox.addItem("")
        self.comboBox.addItem("")
        self.comboBox.addItem("")
        self.comboBox.addItem("")
        self.comboBox.addItem("")
        # 把下拉選擇控件添加到佈局容器中
        self.horizontalLayout.addWidget(self.comboBox)
        # 新建橫向佈局
        self.horizontalLayoutWidget_2 = QtWidgets.QWidget(Form)
        self.horizontalLayoutWidget_2.setGeometry(QtCore.QRect(350, 30, 441, 61))
        self.horizontalLayoutWidget_2.setObjectName("horizontalLayoutWidget_2")
        self.horizontalLayout_2 = QtWidgets.QHBoxLayout(self.horizontalLayoutWidget_2)
        self.horizontalLayout_2.setContentsMargins(0, 0, 0, 0)
        self.horizontalLayout_2.setObjectName("horizontalLayout_2")
        self.label_2 = QtWidgets.QLabel(self.horizontalLayoutWidget_2)
        self.label_2.setObjectName("label_2")
        self.horizontalLayout_2.addWidget(self.label_2)
        self.lineEdit = QtWidgets.QLineEdit(self.horizontalLayoutWidget_2)
        self.lineEdit.setObjectName("lineEdit")
        self.horizontalLayout_2.addWidget(self.lineEdit)
        # 新建按鈕
        self.pushButton = QtWidgets.QPushButton(self.horizontalLayoutWidget_2)
        self.pushButton.setObjectName("pushButton")
        self.horizontalLayout_2.addWidget(self.pushButton)
        self.label_3 = QtWidgets.QLabel(Form)
        self.label_3.setGeometry(QtCore.QRect(40, 110, 751, 301))
        self.label_3.setAutoFillBackground(False)
        # 設置黑色邊框
        self.label_3.setStyleSheet('border-width:1px;border-style:solid;border-color:rgb(0,0,0);')
        self.label_3.setObjectName("label_3")
        self.horizontalLayoutWidget_3 = QtWidgets.QWidget(Form)
        self.horizontalLayoutWidget_3.setGeometry(QtCore.QRect(40, 440, 751, 321))
        self.horizontalLayoutWidget_3.setObjectName("horizontalLayoutWidget_3")
        self.horizontalLayout_3 = QtWidgets.QHBoxLayout(self.horizontalLayoutWidget_3)
        self.horizontalLayout_3.setContentsMargins(0, 0, 0, 0)
        self.horizontalLayout_3.setObjectName("horizontalLayout_3")
        self.verticalLayout_2 = QtWidgets.QVBoxLayout()
        self.verticalLayout_2.setObjectName("verticalLayout_2")
        self.label_4 = QtWidgets.QLabel(self.horizontalLayoutWidget_3)
        self.label_4.setAutoFillBackground(False)
        # self.label_4.setStyleSheet("background-color: rgb(253, 188, 49);")
        self.label_4.setObjectName("label_4")
        self.label_4.setStyleSheet('border-width:1px;border-style:solid;border-color:rgb(0,0,0);')
        self.verticalLayout_2.addWidget(self.label_4)
        # 新建按鈕
        self.pushButton_2 = QtWidgets.QPushButton(self.horizontalLayoutWidget_3)
        self.pushButton_2.setObjectName("pushButton_2")
        self.verticalLayout_2.addWidget(self.pushButton_2, 0, QtCore.Qt.AlignHCenter)
        self.horizontalLayout_3.addLayout(self.verticalLayout_2)
        # 自動生成的ui控件 處理方法
        self.retranslateUi(Form)
        # 自動生成的  關聯信號槽
        QtCore.QMetaObject.connectSlotsByName(Form)

    def retranslateUi(self, Form):
        _translate = QtCore.QCoreApplication.translate
        # 設置窗體內容
        Form.setWindowTitle(_translate("Form", "百度圖片識別程序"))
        # 設置文字控件顯示內容
        self.label.setText(_translate("Form", "識別類型:"))
        # 設置下拉控件選項內容
        self.comboBox.setItemText(0, _translate("Form", "銀行卡"))
        self.comboBox.setItemText(1, _translate("Form", "植物"))
        self.comboBox.setItemText(2, _translate("Form", "動物"))
        self.comboBox.setItemText(3, _translate("Form", "通用票據"))
        self.comboBox.setItemText(4, _translate("Form", "營業執照"))
        self.comboBox.setItemText(5, _translate("Form", "身份證"))
        self.comboBox.setItemText(6, _translate("Form", "車牌號"))
        self.comboBox.setItemText(7, _translate("Form", "駕駛證"))
        self.comboBox.setItemText(8, _translate("Form", "行駛證"))
        self.comboBox.setItemText(9, _translate("Form", "車型"))
        self.comboBox.setItemText(10, _translate("Form", "Logo"))

        self.label_2.setText(_translate("Form", "圖片路徑:"))
        self.pushButton.setText(_translate("Form", "選擇"))
        self.label_3.setText(_translate("Form", "<html><head/><body><p align=\"center\">此處顯示照片</p></body></html>"))
        self.label_4.setText(_translate("Form", "<html><head/><body><p align=\"center\">此處顯示結果</p></body></html>"))
        self.pushButton_2.setText(_translate("Form", "複製到剪貼板"))

        # 爲 選擇圖片 按鈕添加點擊事件
        self.pushButton.clicked.connect(self.openFile)
        # 爲 複製到剪貼板 按鈕添加點擊時間
        self.pushButton_2.clicked.connect(self.copyText)

    #  複製到剪貼板
    def copyText(self):
        clipboard = QtWidgets.QApplication.clipboard()
        clipboard.setText(self.label_4.text())
        # QMessageBox.about(self,'關於','這是一個關於消息對話框!')
        msgBox = QtWidgets.QMessageBox(QtWidgets.QMessageBox.NoIcon, '提醒', '識別內容已成功複製到剪貼板 !')
        msgBox.exec()

    # 打開文件選擇對話框方法
    def openFile(self):
        # 啓動選擇文件對話框,查找jpg以及png圖片
        self.download_path = QtWidgets.QFileDialog.getOpenFileName(self.horizontalLayoutWidget, '選擇要識別的圖片', '',
                                                                   'Image File (*.jpg *.jpeg *.png)')
        # 判斷是否選擇圖片
        if not self.download_path[0].strip():
            pass
        else:
            # 將路徑顯示到地址欄中
            self.lineEdit.setText(self.download_path[0])
            # 將圖片顯示到圖片展示區
            pixmap = QtGui.QPixmap(self.download_path[0])
            # self.label_3.setPixmap(pixmap)
            # 等比例縮放圖片
            scaredPixmap = pixmap.scaled(QSize(311, 301), aspectRatioMode=Qt.KeepAspectRatio)
            # 設置圖片
            self.label_3.setPixmap(scaredPixmap)
            # 判斷選擇的類型 根據類型做相應的圖片處理
            self.label_3.show()
            # 判斷選擇的類型
            self.typeTp()


    # 判斷選擇的類型 進行相應處理
    def typeTp(self):
        # 銀行卡識別
        if self.comboBox.currentIndex() == 0:
            self.get_bankcard(self.get_token())
            pass
        # 植物識別
        elif self.comboBox.currentIndex() == 1:
            self.get_plant(self.get_token())
            pass
        # 動物識別
        elif self.comboBox.currentIndex() == 2:
            self.get_animal(self.get_token())
            pass
        # 通用票據識別識別
        elif self.comboBox.currentIndex() == 3:
            self.get_vat_invoice(self.get_token())
            pass
        # 營業執照識別
        elif self.comboBox.currentIndex() == 4:
            self.get_business_licensev(self.get_token())
            pass
        # 身份證識別
        elif self.comboBox.currentIndex() == 5:
            self.get_idcard(self.get_token())
            pass
        # 車牌號識別
        elif self.comboBox.currentIndex() == 6:
            self.get_license_plate(self.get_token())
            pass
        # 駕駛證識別
        elif self.comboBox.currentIndex() == 7:
            self.get_driving_license(self.get_token())
            pass
        # 行駛證識別
        elif self.comboBox.currentIndex() == 8:
            self.get_vehicle_license(self.get_token())
            pass
        # 車型識別
        elif self.comboBox.currentIndex() == 9:
            self.get_car(self.get_token())
            pass
        # Logo識別
        elif self.comboBox.currentIndex() == 10:
            self.get_logo(self.get_token())
            pass
        pass

    # 獲取token
    def get_token(self):
        # client_id 爲官網獲取的AK, client_secret 爲官網獲取的SK
        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)
        # 讀取返回內容
        content = response.read()
        # 判斷內容是否爲空
        if (content):
            # 打印內容
            print(content)
            # 打印token
            print(json.loads(content)['access_token'])
            # 使用json解析出token 設置token
            self.access_token = json.loads(content)['access_token']
            # 返回token
            return self.access_token

    # 0 銀行卡識別
    def get_bankcard(self, access_token):
        request_url = "https://aip.baidubce.com/rest/2.0/ocr/v1/bankcard"
        # 二進制方式打開圖片文件
        f = self.get_file_content(self.download_path[0])
        img = base64.b64encode(f)
        params = {"image": img}
        params = urllib.parse.urlencode(params).encode('utf-8')
        request_url = request_url + "?access_token=" + access_token
        request = urllib.request.Request(url=request_url, data=params)
        request.add_header('Content-Type', 'application/x-www-form-urlencoded')
        response = urllib.request.urlopen(request)
        content = response.read()
        if content:
            # 解析返回數據
            bankcards = json.loads(content)
            # 輸出返回結果
            strover = '識別結果:\n'
            # 捕捉異常判斷是否正確返回信息
            try:
                # 判斷銀行卡類型
                if bankcards['result']['bank_card_type'] == 0:
                    bank_card_type = '不能識別'
                elif bankcards['result']['bank_card_type'] == 1:
                    bank_card_type = '借記卡'
                elif bankcards['result']['bank_card_type'] == 2:
                    bank_card_type = '信用卡'
                strover += '  卡號:{} \n  銀行:{} \n  類型:{} \n'.format(bankcards['result']['bank_card_number'],
                                                                   bankcards['result']['bank_name'], bank_card_type)
            # 錯誤的時候提示錯誤原因
            except BaseException:
                error_msg = bankcards['error_msg']
                strover += '  錯誤:\n {} \n '.format(error_msg)
            # 設置識別顯示結果
            self.label_4.setText(strover)

    # 1 植物識別
    def get_plant(self, access_token):
        request_url = "https://aip.baidubce.com/rest/2.0/image-classify/v1/plant"
        # 二進制方式打開圖片文件
        f = self.get_file_content(self.download_path[0])
        # 轉換圖片
        img = base64.b64encode(f)
        # 拼接圖片參數
        params = {"image": img}
        params = urllib.parse.urlencode(params).encode('utf-8')
        # 請求地址
        request_url = request_url + "?access_token=" + access_token
        # 發送請求傳遞圖片參數
        request = urllib.request.Request(url=request_url, data=params)
        # 添加訪問頭部
        request.add_header('Content-Type', 'application/x-www-form-urlencoded')
        # 接收返回內容
        response = urllib.request.urlopen(request)
        # 讀取返回內容
        content = response.read()
        # 內容判斷
        if content:
            plants = json.loads(content)
            strover = '識別結果:\n'
            try:
                i = 1
                for plant in plants['result']:
                    strover += '{} 植物名稱:{} \n'.format(i, plant['name'])
                    i += 1
            except BaseException:
                error_msg = plants['error_msg']
                strover += '  錯誤:\n {} \n '.format(error_msg)
            self.label_4.setText(strover)

    # 2 動物識別
    def get_animal(self, access_token):
        request_url = "https://aip.baidubce.com/rest/2.0/image-classify/v1/animal"
        # 二進制方式打開圖片文件
        f = self.get_file_content(self.download_path[0])
        img = base64.b64encode(f)
        params = {"image": img, "top_num": 6}
        params = urllib.parse.urlencode(params).encode('utf-8')
        request_url = request_url + "?access_token=" + access_token
        request = urllib.request.Request(url=request_url, data=params)
        request.add_header('Content-Type', 'application/x-www-form-urlencoded')
        response = urllib.request.urlopen(request)
        content = response.read()
        if content:
            animals = json.loads(content)
            strover = '識別結果:\n'
            try:
                i = 1
                for animal in animals['result']:
                    strover += '{} 動物名稱:{} \n'.format(i, animal['name'])
                    i += 1
            except BaseException:
                error_msg = animals['error_msg']
                strover += '  錯誤:\n {} \n '.format(error_msg)
            self.label_4.setText(strover)

    # 3 通用票據識別
    def get_vat_invoice(self, access_token):
        request_url = "https://aip.baidubce.com/rest/2.0/ocr/v1/receipt"
        # 二進制方式打開圖片文件
        f = self.get_file_content(self.download_path[0])
        img = base64.b64encode(f)
        params = {"image": img}
        params = urllib.parse.urlencode(params).encode('utf-8')
        request_url = request_url + "?access_token=" + access_token
        request = urllib.request.Request(url=request_url, data=params)
        request.add_header('Content-Type', 'application/x-www-form-urlencoded')
        response = urllib.request.urlopen(request)
        content = response.read()
        if content:
            receipts = json.loads(content)
            strover = '識別結果:\n'
            try:
                words_result = receipts['words_result']
                for word_result in words_result:
                    # 票據內容
                    InvoiceType = word_result['words']
                    strover += ' {} '.format(InvoiceType)
            except BaseException:
                error_msg = receipts['error_msg']
                strover += '  錯誤:\n {} \n '.format(error_msg)
            self.label_4.setText(strover)

    # 4 營業執照識別
    def get_business_licensev(self, access_token):
        request_url = "https://aip.baidubce.com/rest/2.0/ocr/v1/business_license"
        # 二進制方式打開圖片文件
        f = self.get_file_content(self.download_path[0])
        img = base64.b64encode(f)
        params = {"image": img}
        params = urllib.parse.urlencode(params).encode('utf-8')
        request_url = request_url + "?access_token=" + access_token
        request = urllib.request.Request(url=request_url, data=params)
        request.add_header('Content-Type', 'application/x-www-form-urlencoded')
        response = urllib.request.urlopen(request)
        content = response.read()
        if content:
            business_licenses = json.loads(content)
            strover = '識別結果:\n'
            try:
                words_result = business_licenses['words_result']
                # 單位名稱
                Unit_name = words_result['單位名稱']['words']
                strover += '  單位名稱:\n  {} \n '.format(Unit_name)
                # 法人
                legal_person = words_result['法人']['words']
                strover += '  法人:{} \n '.format(legal_person)
                # 有效期
                Term_of_validity = words_result['有效期']['words']
                strover += '  有效期:{} \n '.format(Term_of_validity)
                # 證件編號
                ID_number = words_result['證件編號']['words']
                strover += '  證件編號:{} \n '.format(ID_number)
                # 社會信用代碼
                Social_Credit_Code = words_result['社會信用代碼']['words']
                strover += '  社會信用代碼:{} \n '.format(Social_Credit_Code)
                # 地址
                address = words_result['地址']['words']
                strover += '  地址:\n{}\n '.format(address)
            except BaseException:
                error_msg = business_licenses['error_msg']
                strover += '  錯誤:\n  {} \n '.format(error_msg)
            self.label_4.setText(strover)

    # 5 身份證識別
    def get_idcard(self, access_token):
        request_url = "https://aip.baidubce.com/rest/2.0/ocr/v1/idcard"
        # 二進制方式打開圖片文件
        f = self.get_file_content(self.download_path[0])
        img = base64.b64encode(f)
        params = {"image": img, "id_card_side": "front"}
        params = urllib.parse.urlencode(params).encode('utf-8')
        request_url = request_url + "?access_token=" + access_token
        request = urllib.request.Request(url=request_url, data=params)
        request.add_header('Content-Type', 'application/x-www-form-urlencoded')
        response = urllib.request.urlopen(request)
        content = response.read()
        if content:
            idcards = json.loads(content)
            strover = '識別結果:\n'
            try:
                words_result = idcards['words_result']
                # 公民身份號碼
                Citizenship_number = words_result['公民身份號碼']['words']
                strover += '  公民身份號碼:\n{} \n '.format(Citizenship_number)
                # 民族
                Nation = words_result['民族']['words']
                strover += '  民族:{} \n '.format(Nation)
                # 姓名
                Full_name = words_result['姓名']['words']
                strover += '  姓名:{} \n '.format(Full_name)
                # 住址
                address = words_result['住址']['words']
                strover += '  住址:\n{} \n '.format(address)
            except BaseException:
                error_msg = idcards['error_msg']
                strover += '  錯誤:\n  {} \n '.format(error_msg)
            # 顯示識別結果
            self.label_4.setText(strover)

    # 6 車牌號識別
    def get_license_plate(self, access_token):
        request_url = "https://aip.baidubce.com/rest/2.0/ocr/v1/license_plate"
        # 二進制方式打開圖片文件
        f = self.get_file_content(self.download_path[0])
        img = base64.b64encode(f)
        params = {"image": img}
        params = urllib.parse.urlencode(params).encode('utf-8')
        request_url = request_url + "?access_token=" + access_token
        request = urllib.request.Request(url=request_url, data=params)
        request.add_header('Content-Type', 'application/x-www-form-urlencoded')
        response = urllib.request.urlopen(request)
        content = response.read()
        if content:
            license_plates = json.loads(content)
            strover = '識別結果:\n'
            try:
                words_result = license_plates['words_result']
                # 車牌號
                number = words_result['number']
                strover += '  車牌號:{} \n '.format(number)
            except BaseException:
                error_msg = license_plates['error_msg']
                strover += '  錯誤:\n  {} \n '.format(error_msg)
            self.label_4.setText(strover)

    # 7 駕駛證識別
    def get_driving_license(self, access_token):
        request_url = "https://aip.baidubce.com/rest/2.0/ocr/v1/driving_license"
        # 二進制方式打開圖片文件
        f = self.get_file_content(self.download_path[0])
        img = base64.b64encode(f)
        params = {"image": img}
        params = urllib.parse.urlencode(params).encode('utf-8')
        request_url = request_url + "?access_token=" + access_token
        request = urllib.request.Request(url=request_url, data=params)
        request.add_header('Content-Type', 'application/x-www-form-urlencoded')
        response = urllib.request.urlopen(request)
        content = response.read()
        if content:
            driving_licenses = json.loads(content)
            strover = '識別結果:\n'
            try:
                words_result = driving_licenses['words_result']
                # 證號
                Citizenship_number = words_result['證號']['words']
                strover += '  證號: {} \n '.format(Citizenship_number)
                # 準駕車型
                Full_name = words_result['準駕車型']['words']
                strover += ' 準駕車型:{} \n '.format(Full_name)
                # 姓名
                name = words_result['姓名']['words']
                strover += ' 姓名: {} \n '.format(name)
                # 國籍
                nationality = words_result['國籍']['words']
                strover += ' 國籍: {} \n '.format(nationality)
                # 出生日期
                date_of_birth = words_result['出生日期']['words']
                strover += ' 出生日期: {} \n '.format(date_of_birth)
                # 性別
                sex = words_result['性別']['words']
                strover += ' 性別: {} \n '.format(sex)
                # 初次領證日期
                first_certificate_date = words_result['初次領證日期']['words']
                strover += ' 初次領證日期: {} \n '.format(first_certificate_date)
                # 有效期限
                Nation = words_result['有效期限']['words']
                # 到期日期
                to = words_result['至']['words']
                strover += ' 有效期限:{}至{}\n '.format(Nation, to)
                # 住址
                address = words_result['住址']['words']
                strover += ' 住址:\n{} \n '.format(address)
            except BaseException:
                error_msg = driving_licenses['error_msg']
                strover += '  錯誤:\n  {} \n '.format(error_msg)
            self.label_4.setText(strover)

    # 8 行駛證識別
    def get_vehicle_license(self, access_token):
        request_url = "https://aip.baidubce.com/rest/2.0/ocr/v1/vehicle_license"
        # 二進制方式打開圖片文件
        f = self.get_file_content(self.download_path[0])
        img = base64.b64encode(f)
        params = {"image": img}
        params = urllib.parse.urlencode(params).encode('utf-8')
        request_url = request_url + "?access_token=" + access_token
        request = urllib.request.Request(url=request_url, data=params)
        request.add_header('Content-Type', 'application/x-www-form-urlencoded')
        response = urllib.request.urlopen(request)
        content = response.read()
        if content:
            vehicle_licenses = json.loads(content)
            strover = '識別結果:\n'
            try:
                words_result = vehicle_licenses['words_result']
                # 品牌型號
                brand_model = words_result['品牌型號']['words']
                strover += '  品牌型號: {} \n '.format(brand_model)
                # 發證日期
                date_of_certification = words_result['發證日期']['words']
                strover += ' 發證日期:{} \n '.format(date_of_certification)
                # 使用性質
                use_nature = words_result['使用性質']['words']
                strover += ' 使用性質: {} \n '.format(use_nature)
                # 發動機號碼
                engine_number = words_result['發動機號碼']['words']
                strover += ' 發動機號碼: {} \n '.format(engine_number)
                # 註冊日期
                date_of_registration = words_result['註冊日期']['words']
                strover += ' 註冊日期: {} \n '.format(date_of_registration)
                # 號牌號碼
                number_number = words_result['號牌號碼']['words']
                strover += ' 號牌號碼: {} \n '.format(number_number)
                # 車輛識別代號
                vehicle_identification = words_result['車輛識別代號']['words']
                strover += ' 車輛識別代號: {} \n '.format(vehicle_identification)
                # 車輛類型
                vehicle_type = words_result['車輛類型']['words']
                strover += ' 車輛類型: {} \n '.format(vehicle_type)
                # 所有人
                owner = words_result['所有人']['words']
                strover += ' 所有人:\n{} \n '.format(owner)
                # 住址
                address = words_result['住址']['words']
                strover += ' 住址:\n{} \n '.format(address)
            except BaseException:
                error_msg = vehicle_licenses['error_msg']
                strover += '  錯誤:\n  {} \n '.format(error_msg)
            self.label_4.setText(strover)

    # 9 獲取車型信息
    def get_car(self, access_token):
        request_url = "https://aip.baidubce.com/rest/2.0/image-classify/v1/car"
        # 二進制方式打開圖片文件
        f = self.get_file_content(self.download_path[0])
        img = base64.b64encode(f)
        params = {"image": img, "top_num": 5}
        params = urllib.parse.urlencode(params).encode('utf-8')
        request_url = request_url + "?access_token=" + access_token
        request = urllib.request.Request(url=request_url, data=params)
        request.add_header('Content-Type', 'application/x-www-form-urlencoded')
        response = urllib.request.urlopen(request)
        content = response.read()
        if content:
            cars = json.loads(content)
            strover = '識別結果:\n'
            try:
                i = 1
                for car in cars['result']:
                    strover += '{} 車型:{} \n  年份:{} \n'.format(i, car['name'], car['year'])
                    i += 1
            except BaseException:
                error_msg = cars['error_msg']
                strover += '  錯誤:\n  {} \n '.format(error_msg)
            self.label_4.setText(strover)

    # 10 獲取logo信息
    def get_logo(self, access_token):
        request_url = "https://aip.baidubce.com/rest/2.0/image-classify/v2/logo"
        # 二進制方式打開圖片文件
        f = self.get_file_content(self.download_path[0])
        img = base64.b64encode(f)
        params = {"custom_lib": False, "image": img}
        params = urllib.parse.urlencode(params).encode('utf-8')
        request_url = request_url + "?access_token=" + access_token
        request = urllib.request.Request(url=request_url, data=params)
        request.add_header('Content-Type', 'application/x-www-form-urlencoded')
        response = urllib.request.urlopen(request)
        content = response.read()
        if content:
            logos = json.loads(content)
            strover = '識別結果:\n'
            try:
                i = 1
                for logo in logos['result']:
                    strover += '{} Logo名稱:{} \n'.format(i, logo['name'])
                    i += 1
            except BaseException:
                error_msg = logos['error_msg']
                strover += '  錯誤:\n  {} \n '.format(error_msg)
            self.label_4.setText(strover)

    # 讀取圖片
    def get_file_content(self, filePath):
        with open(filePath, 'rb') as fp:
            return fp.read()


if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)
    MainWindow = QtWidgets.QMainWindow()
    ui = Ui_Form()
    ui.setupUi(MainWindow)
    MainWindow.show()
    sys.exit(app.exec_())

爲了方便測試,已經將所有項目文件和所需的測試圖片打包上傳了

下載地址:百度圖像自動識別

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章