OCR是通過算法識(shí)別出圖像中的文字內(nèi)容,算是圖像識(shí)別的一個(gè)分支。那為什么固定資產(chǎn)管理系統(tǒng)中會(huì)用到 OCR 呢?
為什么固定資產(chǎn)管理系統(tǒng)中會(huì)用到 OCR 呢?就得從梳理需求時(shí)遇到的問題說(shuō)起。
固定資產(chǎn)的全生命周期管理的第一步是“資產(chǎn)入庫(kù)”,而入庫(kù)是一個(gè)非常繁瑣的過程,需要將大量信息錄入系統(tǒng)。通過前期調(diào)研發(fā)現(xiàn)錄入過程費(fèi)時(shí)費(fèi)力,還經(jīng)常出現(xiàn)錄入錯(cuò)誤的問題(比如設(shè)備型號(hào)、序列碼是較長(zhǎng)的數(shù)字、字母序列,人工錄入很容易出錯(cuò))。
有沒有辦法解決這個(gè)痛點(diǎn)呢?受證件識(shí)別的啟發(fā),我們想到了 OCR 輔助人工錄入,那么接下來(lái)就是調(diào)研這種方案的可行性了。
OCR,也就是 optical character recognation(光學(xué)字符識(shí)別),是通過算法識(shí)別出圖像中的文字內(nèi)容,算是圖像識(shí)別的一個(gè)分支。OCR 對(duì)純文本的識(shí)別已經(jīng)比較成熟,識(shí)別率普遍可以達(dá)到 90%以上,百度、阿里、騰訊等各大廠都有相應(yīng)的服務(wù)可以直接調(diào)用。
OCR 技術(shù)可以按字體類別、識(shí)別語(yǔ)言、識(shí)別場(chǎng)景進(jìn)行細(xì)分,每個(gè)細(xì)分的算法有所不同,現(xiàn)在暫時(shí)還沒有非常通用的算法同時(shí)適用于多個(gè)分類。
其中:
調(diào)研到這里,我們可以發(fā)現(xiàn):OCR 輔助資產(chǎn)入庫(kù)的需求,屬于上述分類里的【自然環(huán)境】下的【中英文混合】【印刷體】識(shí)別。目前文字識(shí)別印刷體識(shí)別已經(jīng)比較成熟,但自然環(huán)境下的拍照可能會(huì)給識(shí)別帶來(lái)一些難度,初步判斷 OCR 輔助人工進(jìn)行資產(chǎn)入庫(kù)信息錄入是可行的。
既然 OCR 是圖像識(shí)別的一種,那么處理的流程就和大多數(shù)圖像識(shí)別算法是一致的,即預(yù)處理-圖像檢測(cè)-圖像識(shí)別。以自然環(huán)境下的文字識(shí)別為例,OCR 算法的工作流程大概是這樣的:
預(yù)處理:文本經(jīng)過掃描或拍照后會(huì)發(fā)生形變等問題,會(huì)對(duì)識(shí)別造成干擾,預(yù)處理就是通過灰度化、二值化,傾斜校正等方式消除這種干擾,以提高識(shí)別準(zhǔn)確率。其中傾斜矯正的常見算法有投影法、hough 法等。
文字檢測(cè):目的在于找出文字的區(qū)域,是文字識(shí)別的基礎(chǔ)。簡(jiǎn)單背景(e.g.掃描、截屏)和復(fù)雜背景(e.g.廣告牌、說(shuō)明書)下的文字檢測(cè)方法差異較大,實(shí)現(xiàn)算法可以分為傳統(tǒng) CV 算法和 DL 算法兩大類。
文字識(shí)別:文字識(shí)別又根據(jù)文字的長(zhǎng)度分為定長(zhǎng)(e.g.驗(yàn)證碼)和不定長(zhǎng)。不定長(zhǎng)文字識(shí)別現(xiàn)在主要是通過 DL 算法實(shí)現(xiàn),目前兩大主流技術(shù)是 CRNN OCR 和 attention OCR。由于文字識(shí)別的特殊性,雖然其表現(xiàn)形式是圖像,但本質(zhì)是序列化的文本。所以不論是CRNN還是attention,思路其實(shí)都是用CNN提取特征,然后用RNN處理序列化,充分運(yùn)用了文本圖像的所有信息。
通過對(duì) OCR 工作流程以及主流算法的了解,我們能對(duì)后續(xù)技術(shù)實(shí)現(xiàn)有個(gè)大概的認(rèn)識(shí),和 RD battle 時(shí)候也更加有底了。
最近公司采購(gòu)了一批新的辦公電腦,資產(chǎn)管理部門的小方來(lái)到倉(cāng)庫(kù)打算對(duì)這批電腦進(jìn)行入庫(kù)登記,他拿出手機(jī)打開 app,對(duì)著每臺(tái)電腦上的標(biāo)簽進(jìn)行拍照,標(biāo)簽上的信息就被識(shí)別出來(lái)填入相應(yīng)的輸入框,很快小方就完成了入庫(kù)登記的工作。
對(duì)用戶來(lái)說(shuō) OCR 識(shí)別的過程是無(wú)感的,操作上只是用拍照代替了手工填寫某些字段的步驟。
1)輸入和輸出
在本需求中,OCR 算法的輸入就是用戶拍攝的照片,然后需要把算法的識(shí)別結(jié)果填寫到資產(chǎn)登記表單中相應(yīng)的輸入框中,所以需要確定 :a)識(shí)別哪些字段;b)每個(gè)字段識(shí)別出的結(jié)果。
a)識(shí)別哪些字段:綜合考慮了常見的資產(chǎn)標(biāo)簽類型,結(jié)合最開始我們遇到的問題“字母數(shù)字序列輸入容易出錯(cuò)且效率低”,確定了【資產(chǎn)名稱】【型號(hào)】【SN碼】三個(gè)需要識(shí)別的字段,也就是 OCR 處理完的結(jié)果只是中間結(jié)果,后邊還需要做一個(gè)類似標(biāo)注問題的處理(標(biāo)注問題的處理方法暫不在這里展開)。
b)文字識(shí)別的結(jié)果反映到頁(yè)面上就是把識(shí)別出來(lái)的字段填到相應(yīng)的文本框中,所以需要算法部分輸出的結(jié)果是“型號(hào):Lenovo IdeaPad Y580”這樣的 k-v 形式。
2)服務(wù)端 or 客戶端
模型直接放在客戶端的好處是可以離線使用,缺點(diǎn)也十分明顯:一是識(shí)別準(zhǔn)確率會(huì)受影響;二是安裝包會(huì)變大;三是算法迭代必須等軟件整體更新。所以除非是特殊的離線要求,還是把識(shí)別放在服務(wù)端好一點(diǎn)。
3)技術(shù)選型
實(shí)現(xiàn)途徑無(wú)非兩種:自研或者調(diào)用第三方服務(wù)。
自研的話,也不太可能從輪子造起,一般是在成熟的開源項(xiàng)目(如 chinese-ocr)或者是團(tuán)隊(duì)已有的算法基礎(chǔ)上優(yōu)化,最后得到的模型在特定場(chǎng)景的準(zhǔn)確度肯定會(huì)比通用服務(wù)好。
自研算法主要包括兩方面的工作:一是數(shù)據(jù)集獲取、標(biāo)注;二是模型優(yōu)化,時(shí)間和人力成本都較高。但出于團(tuán)隊(duì)發(fā)展、算法積累以及后續(xù)可能需要私有化部署的考慮,我們最后還是選擇了自研的形式。
為了給自研提供支撐和幫助,我對(duì)第三方服務(wù)也做了一些調(diào)研,如果有小伙伴恰好有類似的需求也可以參考。百度、阿里、騰訊三個(gè)開發(fā)平臺(tái)都沒有針對(duì)我們這種需求的特定解決方案,所以只能使用通用 OCR 模型。
可見通用 OCR 模型已經(jīng)能比較好的識(shí)別出資產(chǎn)標(biāo)簽信息,所以調(diào)用第三方服務(wù)的方案也是可行的。
4)性能需求
個(gè)人認(rèn)為批量操作是 2B 業(yè)務(wù)的一個(gè)核心思想。設(shè)備特別多的情況下每個(gè)設(shè)備拍照-錄入這種流程也會(huì)比較慢,而且一批設(shè)備很大概率上是同一品牌型號(hào)的,所以批量錄入的需求是存在且可以實(shí)現(xiàn)的(比如輸入相同信息,然后批量識(shí)別 SN 碼)。
實(shí)現(xiàn)批量錄入的需求,一方面前端業(yè)務(wù)流程需要調(diào)整,另一方面 OCR 算法為適應(yīng)批量識(shí)別在速度上也需要提升。這也是這個(gè)功能點(diǎn)后續(xù)優(yōu)化的方向~