轉發自https://www.toutiao.com/a6802032805313249806/?tt_from=weixin&utm_campaign=client_share&wxshare_count=1×tamp=1584238304&app=news_article&utm_source=weixin&
utm_medium=toutiao_android&req_id=202003151011440101300361421C7DB985&group_id=6802032805313249806
實測超輕量中文OCR開源項目,總模型僅17M
想要試試中文 OCR?這個項目可以考慮,輕量模型,不需要 GPU 也能跑得動。

光學字符識別(OCR)現在已經有很廣泛的應用了,很多開源項目都會嵌入已有的 OCR 項目來擴展能力,例如 12306 開源搶票軟件,它就會調用其它開源 OCR 服務來識別驗證碼。很多流行的開源項目,其背后或多或少都會出現 OCR 的身影。
如果要說到中文 OCR,像身份證識別、火車票識別都是常規操作,它也可以實現更炫酷的功能,例如翻譯筆在書本上滑動一行,自動獲取完整的圖像,並識別與翻譯中文。
目前比較常用的中文 OCR 開源項目是 chineseocr,它基於 YOLO V3 與 CRNN 實現中文自然場景文字檢測及識別,目前該項目已經有 2.5K 的 Star 量。而本文介紹的是另一個新 開源的中文 OCR 項目,它基於 chineseocr 做出改進,是一個超輕量級的中文字符識別項目。
項目地址:https://github.com/ouyanghuiyu/chineseocr_lite
該 chineseocr_lite 項目表示,相比 chineseocr,它采用了輕量級的主干網絡 PSENet,輕量級的 CRNN 模型和行文本方向分類網絡 AngleNet。盡管要實現多種能力,但 chineseocr_lite 總體模型只有 17M。
目前 chineseocr_lite 支持任意方向文字檢測,在識別時會自動判斷行文本方向。我們可以先看看項目作者給出的效果示例:


可以看到,chineseocr_lite 在橫排文字和豎排文字的識別上都有不錯的效果,而且它提供的交互式網頁端能直接在頁面插入圖像與調用識別模型。為了進一步挖掘該輕量級模型的效果,機器之心也上手測試了一番。
項目實測
由於Docker能夠提供一個不依賴主機操作系統的隔離空間,並且兼具良好的安全性與可移植性,我們決定在Docker下對該輕量級模型進行測試。至於測試過程中的環境配置與采坑過程,后文會一一道來。
先看看使用作者項目里自帶圖片的測試效果。識別結果與項目里提供的類似,這里耗時較長主要是由於我們測試時沒有使用 GPU 的緣故。

下面我們找一些其它圖片來測試一下它的效果。

可以看到該模型對於常規印刷字體的識別效果還是很好的。接下來我們決定找一個書法圖片為難一下它,竟然一個也沒有識別對?不過對於這樣一個主打超輕量,總模型大小不超過 20M 的 OCR 項目來說,還要啥自行車。

Docker 環境搭建
我們的運行環境
- Ubuntu 18.04
- Python 3.6.9
- Pytorch 1.5.0.dev20200227+cpu(作者推薦 1.2.0)
首先下載 Docker 鏡像。這里推薦使用咱們中國人自己做的鏡像 deepo,一行代碼傻瓜式安裝 tensorflow、pytorch、darknet 等目前最新的深度學習框架。
deepo 鏈接:https://hub.docker.com/r/ufoym/deepo
當安裝好 Docker 后,用以下代碼獲取包含所有深度學習框架的鏡像:
docker pull ufoym/deepo
在這里我們使用豬廠提供的國內源來加速下載:
docker pull hub-mirror.c.163.com/ufoym/deepo
在高校的小伙伴推薦使用如下中科大的源,盡享絲般順滑,10M/s 不是夢!
docker pull docker.mirrors.ustc.edu.cn/ufoym/deepo
拉取完鏡像后我們新建一個容器開始配置環境,使用如下命令新建容器並進入交互模式:
docker run -it -p 6666:8080 -v ~/Desktop/data/:/data --name ocr 18824ddf5d2d
這里 docker run 表示創建容器,-it 表示創建容器后立刻進入交互模式,-p 表示進行端口映射,這里我們將主機 6666 的端口映射到容器的 8080 端口。
-v 表示共享數據,我們將主機桌面上名為 data 的文件夾與容器共享,並將其在容器上掛載為/data,--name 表示將新建的容器命名為 ocr,18824ddf5d2d 為剛才下載鏡像的 ID,可使用 docker images 命令進行查看。
現在我們就進入到容器里了,輸入 ls 就可看到我們與容器共享的文件夾/data 了。

cd 到/data 文件夾下拉取 chineseocr_lite 項目:
git clone https://github.com/ouyanghuiyu/chineseocr_lite
作者很 nice 得提供了運行程序的依賴環境,cd 到 chineseocr_lite 下進行安裝:
pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txt
這里我們使用了清華的源進行加速。依賴環境裝好了,python3 app.py 8080 走起!出現以下輸出表示網頁服務已成功啟動。

需要注意的是,我們在創建容器時將主機的 6666 端口映射到了容器的 8080 端口,所以在瀏覽器里我們應該輸入 http://127.0.0.1:6666/ocr (http://127.0.0.1:8080/ocr),出現如下界面:

踩坑指南
機器之心也將測試這個項目過程中踩過的坑記錄了下來,避免各位對這個項目感興趣的小伙伴中同樣的招。當在容器里安裝好 requirement 就萬事大吉了嗎?不存在的,電腦表示不出錯是不可能的,這輩子都不可能不報錯。直接運行后出現如下錯誤:

原因是缺少共享文件庫,使用如下方法解決:
apt-get update apt-get install apt-file apt-file update apt-file search libSM.so.6 apt-get install libsm6
再運行出現這樣的錯誤:

遂使用 apt-get install libxrender1 與 apt install python-qt4 安裝之。進行這樣一番操作之后,就可以順利運行了。完結撒花~
Docker 配置參考教程:https://zhuanlan.zhihu.com/p/64493662