<kbd id="5sdj3"></kbd>
<th id="5sdj3"></th>

  • <dd id="5sdj3"><form id="5sdj3"></form></dd>
    <td id="5sdj3"><form id="5sdj3"><big id="5sdj3"></big></form></td><del id="5sdj3"></del>

  • <dd id="5sdj3"></dd>
    <dfn id="5sdj3"></dfn>
  • <th id="5sdj3"></th>
    <tfoot id="5sdj3"><menuitem id="5sdj3"></menuitem></tfoot>

  • <td id="5sdj3"><form id="5sdj3"><menu id="5sdj3"></menu></form></td>
  • <kbd id="5sdj3"><form id="5sdj3"></form></kbd>

    Python改變生活 | OCR識(shí)別的花樣使用

    共 3275字,需瀏覽 7分鐘

     ·

    2021-05-25 16:06

    人生苦短,快學(xué)Python!

    這是Python改變生活系列的第四篇,在上文中講了一個(gè)需求的解決辦法,即用python識(shí)別條形碼來(lái)獲取快遞單號(hào)。

    該問(wèn)題我一共想了兩個(gè)方案,所以今天接著聊第二種解法。

    前情提要

    簡(jiǎn)單的說(shuō),我們就是想把截圖文件中的快遞單號(hào)識(shí)別出來(lái)。

    上一種方法將快遞單號(hào)提取了出來(lái),這次我們希望能用OCR的方法將收件人與單號(hào)對(duì)應(yīng)提取。

    OCR識(shí)別

    利用Python進(jìn)行精準(zhǔn)文字的識(shí)別,我優(yōu)先推薦百度接口,具體配置步驟可以查看之前的文章。

    配置成功后,可以得到AppID、API Key、Secret Key等關(guān)鍵信息。

    百度OCR后返回的結(jié)果是一個(gè)列表。

    一開(kāi)始我嘗試對(duì)整張截圖進(jìn)行識(shí)別,再選取結(jié)果列表中的元素。結(jié)果發(fā)現(xiàn)不同截圖返回的列表元素?cái)?shù)量不一樣,也就是說(shuō)我沒(méi)辦法固定獲得想要的值。

    最后我又想到了一個(gè)折中的辦法:即先將截圖里的收件人和快遞單號(hào)部分截取成兩個(gè)圖片,再用百度接口分別識(shí)別這兩張圖片就好了。

    所以我們只需要先構(gòu)建一個(gè)OCR識(shí)別單個(gè)文字塊的函數(shù)即可。

    #你的 APPID AK SK
    APP_ID = '22704919'
    API_KEY = '1f2wAABTYBmXkbx1qXbPXDm0'
    SECRET_KEY = '**************'

    client = AipOcr(APP_ID, API_KEY, SECRET_KEY)

    #百度接口識(shí)別
    def get_words_result(filePath):
        image = open(filePath, 'rb')
        image1 = image.read()
        text_list = client.general(image1)
        text_list = text_list['words_result'][0]['words']
        image.close()
        return text_list

    后續(xù)等我們?cè)俨眉袅岁P(guān)鍵圖片,直接調(diào)用get_words_result()函數(shù)就可以識(shí)別對(duì)應(yīng)內(nèi)容。

    裁剪圖片

    裁剪圖片這里我使用的是PIL模塊,它是python中的第三方圖像處理庫(kù),可以做很多和圖像處理相關(guān)的操作。

    實(shí)現(xiàn)裁剪圖片,需要在使用時(shí)引用Image,使用Image中的open(file)方法可返回打開(kāi)的圖片,再配合crop()函數(shù)即可進(jìn)行裁剪。

    crop([x1,y1,x2,y2])

    crop里對(duì)應(yīng)的數(shù)值為該位置圖像在整體圖片中左上和右下兩個(gè)點(diǎn)的像素坐標(biāo)

    具體裁剪+識(shí)別語(yǔ)句如下所示:

    def get_data(filePath):
        img = Image.open(filePath)
        ocr_results = []
        basic_path = r"D:\python_code\條形碼\臨時(shí)"

        crop_1 = img.crop((242,739,678,813)) #crop裁剪
        crop_1.save(basic_path+"1.png")
        
        crop_2 = img.crop((88,1052,229,1108)) #crop裁剪
        crop_2.save(basic_path+"2.png")
        
        for i in range(13):
            imgpath = basic_path + str(i) + '.png'
            msg_info = get_words_result(imgpath) #調(diào)用函數(shù)識(shí)別文字
            ocr_results.append(msg_info)
            os.remove(imgpath) #刪除臨時(shí)裁剪的圖片
        time.sleep(3)
        return ocr_results

    我在原文件夾中又新建了一個(gè)臨時(shí)文件夾"D:\python_code\條形碼\臨時(shí)",用來(lái)存放臨時(shí)裁剪的圖片12。然后調(diào)用ocr函數(shù)依次識(shí)別兩張圖片,并將結(jié)果存到列表ocr_results中。

    最后,使用os模塊的remove()函數(shù)刪除本次臨時(shí)裁剪生成的兩張圖片。

    批量識(shí)別

    經(jīng)過(guò)前面的努力,批量識(shí)別簡(jiǎn)直唾手可得。

    還是先os遍歷圖片!這次不再涉及中文路徑問(wèn)題,所以不需要改名操作。

    #遍歷圖片
    jpgs = []
    path = os.getcwd()
    for i in os.listdir(path):  #獲取文件列表
        jpgs.append(i)

    #用于儲(chǔ)存識(shí)別結(jié)果
    data_m = pd.DataFrame(columns=['expres','sname'])

    #批量識(shí)別
    for i in jpgs:
        a = get_data(i)
        data_m.loc[len(data_m)] = a
    data_m

    執(zhí)行!

    當(dāng)當(dāng)當(dāng)!

    如上圖所示,我們不僅將快遞單號(hào)識(shí)別了出來(lái),與之對(duì)應(yīng)的收件人信息也被一應(yīng)取出??

    對(duì)我來(lái)說(shuō),大大提升了工作效率。

    小結(jié)

    整個(gè)案例,我們共使用了兩種方法來(lái)解決問(wèn)題,各自都有其優(yōu)缺點(diǎn)。

    • 第一種,識(shí)別條形碼100%準(zhǔn)確,但其只獲得了快遞單號(hào)。

    • 第二種,識(shí)別文字有幾率出現(xiàn)問(wèn)題,優(yōu)點(diǎn)是可以同時(shí)獲取對(duì)應(yīng)的收件人信息。

    不過(guò)小五采用了裁剪關(guān)鍵圖片的方法,大大提升了OCR的精準(zhǔn)度。最后我自己也是選擇了第二種方法,來(lái)方便給大家寄書(shū)后及時(shí)反饋快遞單號(hào)。

    老鐵們,如果想看更多Python改變生活的真實(shí)問(wèn)題案例,來(lái)給本文右下角點(diǎn)個(gè)贊吧??

    瀏覽 79
    點(diǎn)贊
    評(píng)論
    收藏
    分享

    手機(jī)掃一掃分享

    分享
    舉報(bào)
    評(píng)論
    圖片
    表情
    推薦
    點(diǎn)贊
    評(píng)論
    收藏
    分享

    手機(jī)掃一掃分享

    分享
    舉報(bào)

    <kbd id="5sdj3"></kbd>
    <th id="5sdj3"></th>

  • <dd id="5sdj3"><form id="5sdj3"></form></dd>
    <td id="5sdj3"><form id="5sdj3"><big id="5sdj3"></big></form></td><del id="5sdj3"></del>

  • <dd id="5sdj3"></dd>
    <dfn id="5sdj3"></dfn>
  • <th id="5sdj3"></th>
    <tfoot id="5sdj3"><menuitem id="5sdj3"></menuitem></tfoot>

  • <td id="5sdj3"><form id="5sdj3"><menu id="5sdj3"></menu></form></td>
  • <kbd id="5sdj3"><form id="5sdj3"></form></kbd>
    久久久久久久97 | 日韩欧美一区二区三区 | 午夜久久福利 | 国产av理论片 | 成人性爱免费网站 |