<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          批量識(shí)別圖片文字并存為Excel,幾行Python輕松實(shí)現(xiàn)!

          共 4757字,需瀏覽 10分鐘

           ·

          2022-07-08 18:39

          今天給大家分享批量識(shí)別圖片的方法。

          一、背景

          也許你還記得,前不久復(fù)旦大學(xué)一博士生寫了130行Python代碼,批量識(shí)別核酸截圖內(nèi)容的故事。當(dāng)時(shí)還被人民日?qǐng)?bào)公眾號(hào)報(bào)道出來,夸贊用所學(xué)貢獻(xiàn)青春力量!

          其實(shí),批量文字識(shí)別(OCR)是Python辦公自動(dòng)化的基本操作,應(yīng)用在我們工作生活中的方方面面,比如車牌識(shí)別、證件識(shí)別、銀行卡識(shí)別、票據(jù)識(shí)別等等。

          PythonOCR第三方庫非常多,比如easyocrPaddleOCRcnocr等等。當(dāng)然,直接調(diào)用百度API也是可以的,不過超過一定限額后要收費(fèi),因此本文主要以開源免費(fèi)的easyocr來進(jìn)行介紹。


          二、需求

          本文以證件識(shí)別為例,我網(wǎng)上找了3張?zhí)摂M身份證來實(shí)驗(yàn):

          運(yùn)用easyocr進(jìn)行識(shí)別并保存為Excel,效果如下:



          三、實(shí)戰(zhàn)  

          1.安裝模塊

          Python中使用 easyocr非常簡(jiǎn)單,只要使用pip命令安裝easyocr 即可(建議使用清華源,否則安裝會(huì)比較慢)。

          pip install easyocr

          不過 easyocr 的深度學(xué)習(xí)算法依賴于另一個(gè)著名的第三方模塊 pytorch,圖形處理部分則會(huì)用到 opencvPillow 等,所以還需要確保自己電腦上已經(jīng)安裝這些基礎(chǔ)模塊。

          2.識(shí)別一張圖片

          1.easyocr識(shí)別圖片代碼非常簡(jiǎn)潔,只需要?jiǎng)?chuàng)建一個(gè)easyocr.Reader類對(duì)象,指定以下兩個(gè)常用參數(shù):

          • 需要識(shí)別的文字屬于哪幾種語言

          • 是否啟用GPU顯卡加速

          2.調(diào)用Reader對(duì)象的readtext方法,將圖片中所有文字讀入一個(gè)列表并返回。

          '''
          公眾號(hào):菜J學(xué)Python
          作者:J哥
          '
          ''
          # 導(dǎo)入模塊
          import easyocr
          # 圖片路徑
          image = './id_card/1.jpg'
          # 創(chuàng)建ocr的reader對(duì)象,識(shí)別中英文
          ocr = easyocr.Reader(['ch_sim''en'],gpu=False)
          # 識(shí)別圖片文字
          content = ocr.readtext(image)
          print(content)

          識(shí)別結(jié)果如下:

          [([[3931], [20731], [20767], [3967]], '姓  名  韋小寶'0.8973890994570185), ([[4082], [15982], [159119], [40119]], '性  別  男'0.9799311480828728), ([[17886], [27286], [272116], [178116]], '民 族漢'0.5456928014755249), ([[40131], [100131], [100161], [40161]], '出  生'0.5362269878387451), ([[114134], [240134], [240162], [114162]], '1654 年12'0.6952526392609933), ([[266134], [322134], [322162], [266162]], '20日'0.31329770168285426), ([[42181], [395181], [395213], [42213]], '住  址  北京市東城區(qū)景山前街4號(hào)'0.48138251996753667), ([[112222], [256222], [256254], [112254]], '紫禁城敬事房'0.9732440311960702), ([[44307], [195307], [195337], [44337]], '公民身份證號(hào)碼'0.612808391503521), ([[212308], [526308], [526334], [212334]], '112044165412202438'0.7003081027071493)]

          readtext 返回的列表中,每個(gè)元素都是一個(gè)元組,內(nèi)含三個(gè)信息:位置、文字、置信度。我們可以在調(diào)用readtext時(shí)指定一個(gè)參數(shù) detail=0,從而只返回文字內(nèi)容。于是修改后代碼和效果如下:

          import easyocr
          image = './id_card/1.jpg'
          ocr = easyocr.Reader(['ch_sim''en'],gpu=False)
          content = ocr.readtext(image,detail=0)
          print(content)
          ['姓  名  韋小寶''性  別  男''民 族漢''出  生''1654 年12''20日''住  址  北京市東城區(qū)景山前街4號(hào)''紫禁城敬事房''公民身份證號(hào)碼''112044165412202438']

          3.批量識(shí)別圖片

          批量識(shí)別圖片無非就是遍歷圖片文件夾,這里用到了os.listdir()方法以返回文件列表。然后用ocr.readtext()去識(shí)別每一張圖片文字內(nèi)容,接著通過字符串切片來獲取姓名、性別、民族、出生、住址和身份證號(hào)等關(guān)鍵信息,最后統(tǒng)一將這些信息存入列表data中。

          '''
          公眾號(hào):菜J學(xué)Python
          作者:J哥
          '
          ''

          import easyocr
          import os

          # 指明所有圖片所在的文件夾
          images = './id_card'
          # 創(chuàng)建ocr的reader對(duì)象,識(shí)別中英文
          ocr = easyocr.Reader(['ch_sim''en'])
          # 識(shí)別圖片文字
          content = ocr.readtext(images,detail=0)
          # 遍歷所有圖片并識(shí)別文字,切片提取有效信息
          data = []
          for image in os.listdir(images):
              content = ocr.readtext(f'{images}/{image}', detail=0)
              print(f"正在識(shí)別:{image}")
              name = content[0][4:]
              gender = content[1][-1]
              nation = content[2][-1]
              birth = content[-5]
              if "月" not in birth:
                  birth = content[-6] + "月" + content[-5]
              if "日" not in birth:
                  birth = birth[:-1] + "日"
              address = content[-4][4:] + content[-3]
              number = content[-1]
              print(f"完成識(shí)別:{image}")
              print("-" * 50)
              data.append([name, gender, nation, birth, address, number])

          4.保存數(shù)據(jù)

          圖片文字識(shí)別之后,建議通過pandas輸出為Excel,方便簡(jiǎn)潔。

          '''
          公眾號(hào):菜J學(xué)Python
          作者:J哥
          '''


          import pandas as pd

          # 保存識(shí)別結(jié)果至Excel
          df = pd.DataFrame(data, columns=["姓名""性別""民族""出生""住址""身份證號(hào)"])
          print(f"識(shí)別結(jié)果如下:")
          print(df)
          df.to_excel("識(shí)別結(jié)果.xlsx", index=False)

          以上。

          END -
          對(duì)比Excel系列圖書累積銷量達(dá)15w冊(cè),讓你輕松掌握數(shù)據(jù)分析技能,可以點(diǎn)擊下方鏈接進(jìn)行了解選購

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

          手機(jī)掃一掃分享

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

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  亚洲无码精品一区 | 黄色视频在线观看完整版 | 五月天成人在线免费视频 | 操B在线播放AV | 在线播放亚洲天堂 |