<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>

          Python自動化辦公-編寫一個OCR識別程序

          共 2634字,需瀏覽 6分鐘

           ·

          2021-11-06 14:17

          OCR 的全稱是 Optical Character Recognition,即光學字符識別,通俗點講就是文字識別。在辦公領域,最常用的就是識別圖片上的文字,比如識別圖片中的發(fā)票信息、合同信息、Excel 或者 Word 截圖,比如說你對著喜歡的幾頁書拍了照,想把里面的文字摳出來怎么辦?

          現(xiàn)在的手機可能都有這個功能,但還不夠智能,無法進行訓練,再說要是有一堆圖片需要處理呢?還是自己動手,豐衣足食,今天來分享一下如何 Python 寫一個 OCR 識別程序。授人以漁,本文的思路適用于編寫任意一個日常小工具。

          第一步,看看已有的輪子

          軟件開發(fā)忌重復造輪子,對普通程序員來講,也很難造一個好用的輪子,拿來主義真香,萬千牛逼的庫,雖不是我所有,卻為我所用。

          瀏覽器打開?https://github.com,搜索OCR,選擇編程語言 Python,可以看到如下結果:

          通常情況下,我會選擇 star 數(shù)量最多的,因為我相信程序員都是在真誠的點贊。

          看完輪子的基本介紹,你選擇適合自己的就好。

          第二步,簡單學習下要用的輪子

          一般情況下,倉庫的 README 上都有安裝方法和使用教程,不過大部分都是英文,所以平時多記些英文單詞,對于學習技術是很有幫助的。

          比如說這個https://github.com/PaddlePaddle/PaddleOCR,很幸運,它是有中文的:

          按照這個教程,自己實踐一下:

          安裝

          pip?install?"paddleocr>=2.0.1"

          等待 pip 安裝完成。

          我在 Python 3.8.5 版本上使用 pip 安裝順利通過,而使用 pyenv 的 Python 就一直報編譯失敗的錯誤,因此不推薦 pyenv 來管理你的 Python 版本。我的做法是在本機上安裝多個 Python 版本,要用哪個版本時啟用對應的版本使用如下的命令創(chuàng)建一個虛擬環(huán)境:

          python3.8?-m?venv?py38env
          python3.9?-m?venv?py39env

          假如要用 Python3.9 那就?source ~/py39env/bin/activate

          如果安裝過程報錯了:

          遇到報錯,不要慌,只要思想不滑坡,辦法總比困難多。

          報錯信息提示 pip 遇到了編譯錯誤,這也是 Python 為人詬病的地方,第三方庫源代碼安裝時經(jīng)常遇到編譯錯誤,你看人家 Java,一個 jar 包處處都能用。

          畢竟沒有完美的語言,理解一下,理解一下。

          觀察報錯前的打印信息,pip 正在安裝的是 scikit-image 0.17.2,只要我們找到 scikit-image 的二進制包(別人已經(jīng)按照對應的平臺編譯好了),也就是 whl 文件,直接安裝一下完事,這個 whl 文件,要去 pypi 上找。瀏覽器打開 pypi.org,搜索 scikit-image,找到 0.17.2 版本,點開看看,結果如下:

          發(fā)現(xiàn) 0.17.2 版本最高支持 Python3.8,如果你的 Python 版本是 3.9,勸你降低版本后安裝。

          選擇對應 Python 版本、操作系統(tǒng)進行下載(要是下載慢,請用迅雷下載),然后,pip install 即可。


          使用

          找個圖片試用一下:

          1.jpg

          paddleocr?--image_dir?1.jpg?--use_angle_cls?true?--use_gpu?false

          結果報了錯,提示"ModuleNotFoundError: No module named 'paddle'",在 Issues 里面搜索一下找到了解決方案:

          pip?install?paddlepaddle

          然后再次執(zhí)行識別出結果:

          第三步,設計自己的程序。

          工具雖然可以直接命令行使用,但結果不是很直觀,我們可以一個腳本,調用下它的接口,將圖片路徑作為參數(shù)輸入,將識別出的文本內(nèi)容作為輸出,保存在相同路徑下的文本文件中,文件名就是圖片名+.txt。

          參考官方的示例,可以很輕松寫出如下代碼:

          import?sys
          from?paddleocr?import?PaddleOCR,draw_ocr

          def?get_text_to_txt(img_path:?str)?->None:

          ????ocr?=?PaddleOCR(use_angle_cls=True,?use_gpu?=?False,?show_log?=?False,?lang='ch')?#?need?to?run?only?once?to?download?and?load?model?into?memory
          ????result?=?ocr.ocr(img_path,?cls=True)

          ????with?open(img_path+".txt",?"w")?as?writer:
          ????????for?line?in?result:
          ????????????print(line)
          ????????????writer.write(line[-1][0])
          ????????????writer.write("\n")

          if?__name__?==?'__main__':
          ????get_text_to_txt(sys.argv[1])

          保存為 ocr_demo.py 然后就可以在命令行調用:

          ??python?ocr_demo.py?/Users/aaron/Downloads/ppocr_img/imgs/1.jpg?>>?/dev/null
          ??cat?/Users/aaron/Downloads/ppocr_img/imgs/1.jpg.txt
          土地整治與土壤修復研究中心
          華南農(nóng)業(yè)大學|東圖

          至此腳本搞定。

          最后

          本文通過使用開源工具 paddleocr,分享了 Python OCR 程序的制作過程,paddleocr 支持 80 多種語言,支持用戶自定義訓練,還提供豐富的預測推理部署方案,更多技術細節(jié)還請參考官方倉庫:https://github.com/PaddlePaddle/PaddleOCR

          程序報錯不可怕,可怕的是你看到錯誤就放棄了。

          如果有幫助,請點贊、在看、關注支持,感謝路上有你。



          瀏覽 81
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <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>
                  日韩成人AV一区二区 | 激情乱伦亚洲 | 亚洲视频三| 99久热只有精品视频 | 99丝袜视频在线观看 |