1. 程式人生 > >通過Python呼叫QQAI做手寫OCR識別並匯出結果欄位到excel裡

通過Python呼叫QQAI做手寫OCR識別並匯出結果欄位到excel裡

有個需求:現場需要根據列印的表格手工填寫好內容,然後再在電腦上一個個錄入進去,費時費力,所以想是否可以通過程式把照片內需要的資料讀取出來並匯出到excel表格裡。

網上找了一下教程,目前百度AI和QQAI都有OCR識別的能力開放平臺,看評論騰訊稍微好一點,所以選擇了QQAI(其實半斤八兩,最後結果都不大好)

程式碼如下:

import qqai
from os import path
from win32com.client import Dispatch
import os
from datetime import datetime

def file_path():
global path_this_file path_this_file = path.abspath('.') + "\\" global path_excel path_excel = path_this_file + '資訊匯出.xlsx' global path_pic_file path_pic_file = path_this_file + '照片' def get_pic_name(): pic_list = [] for pic in os.listdir(path_pic_file): pic_path =
path_pic_file + '\\' + pic pic_list.append(pic_path) return pic_list def HandwritingOCRImage(filename): robot = qqai.vision.ocr.HandwritingOCR(app_id, app_key) useless_list = ['登記表'] value_list = [] with open(filename, 'rb') as image_file: result = robot.run(image_file)
item_list = result['data']['item_list'] for value in item_list: words= value['itemstring'] if words in useless_list: continue else: value_list.append(words) return value_list def get_useful_list(value_list): key_list = ['姓名', '性別', '出生日期', '國家/地區', '民族', '職業', '手機號碼', '固定電話', '證件型別', '證件有效期限', '證件號碼', '通訊地址', '郵編'] useful_list = [] for words in value_list: if words in key_list: key_index = value_list.index(words) next_index = key_index + 1 if value_list[next_index] in key_list: useful_list.append('') else: if words == '證件號碼': ID_NUM = "'" + str(value_list[next_index]) #這邊是為了避免科學計數法的問題 useful_list.append(ID_NUM) else: useful_list.append(value_list[next_index]) else: continue return useful_list def put_into_excel(useful_list): xl = Dispatch("Excel.Application") xl.Visible = False # True是顯示, False是隱藏 xl.DisplayAlerts = 0 excel_input = xl.Workbooks.Open(path_excel) sheet = excel_input.Sheets('Sheet1') max_row = sheet.UsedRange.Rows.Count values = len(useful_list) for i in range(values): sheet.Cells(max_row + 1, i + 1).Value = str(useful_list[i]) excel_input.Save() excel_input.Close() xl.quit() starttime = datetime.now() """騰訊AI開放平臺 圖片識別""" app_id = '2110179251' app_key = '******' """app_id , app_key 可以自己去騰訊AI開放平臺註冊,是免費的""" file_path() pic_list = get_pic_name() for filename in pic_list: value_list =HandwritingOCRImage(filename) useful_list = get_useful_list(value_list) put_into_excel(useful_list) endtime = datetime.now() total_time = (endtime - starttime).seconds print(">>>成功錄入資訊{}條,總共耗時{}秒!".format(len(pic_list),total_time))

我模擬的表格是這樣的:

在這裡插入圖片描述

模擬填寫是這樣:
在這裡插入圖片描述

但最後結果卻是:
在這裡插入圖片描述

結論和經驗:
1、目前OCR識別因為手工填寫的不規範,所以實際使用效果並不好;
2、如果要改善這個情況,就勢必要對填寫模板進行進一步優化,同時程式中需要考慮模板中每一個格子的大小等;
3、儘可能減少“_”、“\”之類的情況;
4、1和\的誤差概率會比較大;
5、更好的解決辦法:語音識別並錄入,當然這又是另一個專案了。