用百度OCR做證件識別

一般用ocr的場景是將證件或者材料的內(nèi)容轉(zhuǎn)成結(jié)構(gòu)化的文本,比分身份證需要識別,
姓名:xxx,年齡:30,身份證號:1212424,
職業(yè)證書需要識別:持證人:timmy,證書號:12235523,發(fā)證日期:2025-11-11,證書名稱:xx職業(yè)證書。

專用證件或票據(jù)百度有固定的接口,比如:
身份證,護(hù)照,營業(yè)執(zhí)照,銀行收據(jù)等

針對通用的文本解析,百度提供以下兩個(gè)接口:
1.結(jié)構(gòu)化識別:返回key value對,比如抓取證書里的,證書名稱:xxx,證書編號:1111。
2.文本識別:返回全部的多行文本,比如:
證書名稱:xxx
證書編號:1111

針對理想情況,我們只需要用到結(jié)構(gòu)化識別接口,然后根據(jù)key的值提取我們想要的信息。
然而實(shí)際場景不是所有材料的內(nèi)容都是key:value形式。
比如一般xxx證書的證書標(biāo)題是不會在前面加 證書名稱 這個(gè)幾個(gè)字,直接寫上 xx職業(yè)資格證書。
這個(gè)時(shí)候我們只能去遍歷多行文本返回的List<String>對象,然后根據(jù)對應(yīng)的邏輯的解析名稱
比如判斷證書可以寫成 包含證書結(jié)尾的文本 這種。

下面代碼先用包含特殊文本判斷,匹配不到再用特定位置文本繼續(xù)判斷。
···

public String parse(List<Pair<String, String>> maps, List<String> textList) {
    String res = this.getStringEndWithFromMap(maps,  OCrDictConfigUtils.getCertificateNamePattern());
    if (!StringUtils.isBlank(res) && res.length()>3) {
        return res;
    }
    res = this.getTextListContainsAnyPatterns(textList,  OCrDictConfigUtils.getCertificateName());
    if (!StringUtils.isBlank(res)) {
        return res;
    }

    if ( this.getTextListContainsAnyPatterns(textList, Arrays.asList("專職律師"))!=null) {
        return "律師證";
    }
    return getFromTop(textList);
}

private String getFromTop(List<String> textList) {
    return textList.stream().filter(c -> c.endsWith("證書")).findFirst().orElse(null);
}

···

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容