爬蟲(chóng)小項(xiàng)目之四 發(fā)票批量錄入

今天,心情不好匕荸,晚上什么都不想干爹谭,那就寫(xiě)個(gè)技術(shù)貼娛樂(lè)一下吧。爬蟲(chóng)NLP做知識(shí)圖譜等下期更新榛搔,今天搞文字識(shí)別诺凡。前一段時(shí)間接了一個(gè)小任務(wù)东揣,一個(gè)師妹拿著一堆發(fā)票在那邊吐槽,不想干活了腹泌。錄發(fā)票的確是一件讓人抓狂的事嘶卧。不過(guò)如果有ocr來(lái)輔助就不一樣了。今天就用python的request模塊向百度AI發(fā)送post請(qǐng)求凉袱,批量完成發(fā)票錄入芥吟。

在開(kāi)始這個(gè)項(xiàng)目之前,請(qǐng)準(zhǔn)備一個(gè)手機(jī)专甩,把像素調(diào)低钟鸵,然后給每一張發(fā)票拍一張照片,放到一個(gè)文件夾涤躲。每張照片的大小不要超過(guò)2M棺耍。

image

接下來(lái),讀取所有文件

# encoding:utf-8

import requests
import base64
import os
#遞歸讀取文件夾中所有文件
def get_all(cwd,result):
    get_dir=os.listdir(cwd)
    for i in get_dir:
        sub_dir=os.path.join(cwd,i)
        if os.path.isdir(sub_dir):
            get_all(sub_dir)
        else:
            result.append(i)
#

定義讀取函數(shù)篓叶。這里同樣要在百度AI申請(qǐng)賬號(hào)密碼烈掠,這里自行百度,不解釋缸托。

# 二進(jìn)制方式打開(kāi)圖片文件
#對(duì)文件進(jìn)行讀寫(xiě)并存入
def ReadInvoice(Inputpath,file):
    request_url = "https://aip.baidubce.com/rest/2.0/ocr/v1/vat_invoice"
    f = open(Inputpath, 'rb')
    img = base64.b64encode(f.read())

    params = {"image":img}
    access_token = '[24.bafecd7823e46b4888a1aadd65882468.2592000.1602842119.282335-18705450]'
    request_url = request_url + "?access_token=" + access_token
    headers = {'content-type': 'application/x-www-form-urlencoded'}
    response = requests.post(request_url, data=params, headers=headers)
    if response:
        print (response.json())

    data=response.json()['words_result']
    #發(fā)票號(hào)
    InvoiceNum=data['InvoiceNum']
    #發(fā)票總額
    InvoicePrice=data['AmountInFiguers']
    #容量
    #左敌??
    #商品名稱(chēng)
    CommodityName=data['CommodityName']
    #容量單位
    CommodityUnit=data['CommodityUnit']
    #商品數(shù)量
    CommodityNum=data['CommodityNum']
    #規(guī)格
    CommodityType=data['CommodityType']
    #金額
    CommodityAmount=data['CommodityAmount']
    #稅額
    CommodityTax=data['CommodityTax']
    #生產(chǎn)廠家
    #俐镐?矫限?
    #供貨商全稱(chēng)
    SellerName=data['SellerName']
    #供貨商電話(huà)
    SellerAddress=data['SellerAddress']
    #整理商品名稱(chēng)
    lst=[eval(i['row']) for i in CommodityAmount]
    #寫(xiě)入數(shù)據(jù)
    try:
        if len(lst)>1:
            lst_=[]
            for _ in range(len(lst)-1):
                lst_.append([lst[_],lst[_+1]])
            lst_.append([lst[-1],eval(CommodityName[-1]['row'])])
            print(lst_)
            Name_list=[]
            for i,j in lst_:
                Name_list.append(''.join([x['word'] for x in CommodityName[(i-1):(j-1)]] ))
            CommodityName_merged=Name_list
            for index in range(len(CommodityName_merged)):
                file.write(
                    InvoiceNum+'\t'+
                    InvoicePrice+'\t'+
                    CommodityName_merged[index]+"\t"+
                    CommodityUnit[index]['word']+'\t'+
                    CommodityNum[index]['word']+'\t'+
                    CommodityType[index]['word']+'\t'+
                    CommodityAmount[index]['word']+'\t'+
                    CommodityTax[index]['word']+'\t'+
                    SellerName+'\t'+
                    SellerAddress+"\n"
                )
            file.flush()
        else:
            file.write(
                    InvoiceNum+'\t'+
                    InvoicePrice+'\t'+
                    CommodityName[0]['word']+"\t"+
                    CommodityUnit[0]['word']+'\t'+
                    CommodityNum[0]['word']+'\t'+
                    CommodityType[0]['word']+'\t'+
                    CommodityAmount[0]['word']+'\t'+
                    CommodityTax[0]['word']+'\t'+
                    SellerName+'\t'+
                    SellerAddress+"\n"
            )
            file.flush()
    except:
        pass

最后循環(huán)讀取、解析文件佩抹。

file=open("invoice.txt",'w')
file.write("發(fā)票號(hào)"+"\t"+"發(fā)票總額"+"\t"+"商品名稱(chēng)"+"\t"+"容量單位"+"\t"+"商品數(shù)量"+"t"+"規(guī)格"+"\t"+"金額"+"\t"+"稅額"+"\t"+"供貨商全稱(chēng)"+"\t"+"供貨商電話(huà)"+"\n")
result=[]
pth=r"C:\Users\Administrator\Desktop\發(fā)票錄入\JPEG\JPEG"
get_all(pth,result)
for re in result:
    try:
        ReadInvoice(os.path.join(pth,re),file)
    except:
        pass
file.close()

最終將圖片中的文字讀取到txt文檔中

image

總結(jié):道理很簡(jiǎn)單叼风,批量讀取圖片地址信息;使用python發(fā)送post請(qǐng)求到百度AI服務(wù)器棍苹,調(diào)用服務(wù)器中的增值稅發(fā)票識(shí)別服務(wù)无宿;最后寫(xiě)入數(shù)據(jù)到txt文檔。當(dāng)然枢里,有些發(fā)票不清晰或者商品名稱(chēng)比較奇葩的會(huì)有識(shí)別錯(cuò)誤孽鸡。識(shí)別的數(shù)據(jù)還是需要再核實(shí)的。如果手上有幾千張發(fā)票栏豺,幾個(gè)人干一天的活可以一個(gè)人幾個(gè)小時(shí)干完彬碱,Ok,又有人要失業(yè)了~

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末奥洼,一起剝皮案震驚了整個(gè)濱河市巷疼,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌灵奖,老刑警劉巖嚼沿,帶你破解...
    沈念sama閱讀 206,126評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件估盘,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡骡尽,警方通過(guò)查閱死者的電腦和手機(jī)忿檩,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)爆阶,“玉大人,你說(shuō)我怎么就攤上這事沙咏”嫱迹” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,445評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵肢藐,是天一觀的道長(zhǎng)故河。 經(jīng)常有香客問(wèn)我,道長(zhǎng)吆豹,這世上最難降的妖魔是什么鱼的? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,185評(píng)論 1 278
  • 正文 為了忘掉前任,我火速辦了婚禮痘煤,結(jié)果婚禮上凑阶,老公的妹妹穿的比我還像新娘。我一直安慰自己衷快,他們只是感情好宙橱,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,178評(píng)論 5 371
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著蘸拔,像睡著了一般师郑。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上调窍,一...
    開(kāi)封第一講書(shū)人閱讀 48,970評(píng)論 1 284
  • 那天宝冕,我揣著相機(jī)與錄音,去河邊找鬼邓萨。 笑死地梨,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的先誉。 我是一名探鬼主播湿刽,決...
    沈念sama閱讀 38,276評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼褐耳!你這毒婦竟也來(lái)了诈闺?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 36,927評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤铃芦,失蹤者是張志新(化名)和其女友劉穎雅镊,沒(méi)想到半個(gè)月后襟雷,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,400評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡仁烹,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,883評(píng)論 2 323
  • 正文 我和宋清朗相戀三年耸弄,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片卓缰。...
    茶點(diǎn)故事閱讀 37,997評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡计呈,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出征唬,到底是詐尸還是另有隱情捌显,我是刑警寧澤,帶...
    沈念sama閱讀 33,646評(píng)論 4 322
  • 正文 年R本政府宣布总寒,位于F島的核電站扶歪,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏摄闸。R本人自食惡果不足惜善镰,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,213評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望年枕。 院中可真熱鬧炫欺,春花似錦、人聲如沸画切。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,204評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)霍弹。三九已至毫别,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間典格,已是汗流浹背岛宦。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,423評(píng)論 1 260
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留耍缴,地道東北人砾肺。 一個(gè)月前我還...
    沈念sama閱讀 45,423評(píng)論 2 352
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像防嗡,于是被迫代替她去往敵國(guó)和親变汪。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,722評(píng)論 2 345