夏昌新 莫浩泓 王成鑫 王瑤 閆仕宇
摘 要:針對(duì)傳統(tǒng)圖像文字識(shí)別技術(shù)采用模板匹配法和幾何特征抽取法存在識(shí)別速度慢、準(zhǔn)確率低的缺點(diǎn),提出一種基于深度學(xué)習(xí)的圖像文字識(shí)別技術(shù),使用開源、靈活的Tensor Flow框架以及LeNet-5網(wǎng)絡(luò)訓(xùn)練數(shù)據(jù)模型,并將訓(xùn)練好的模型應(yīng)用于特定場(chǎng)景印刷體文字識(shí)別。實(shí)驗(yàn)結(jié)果表明,識(shí)別模型的top 1與top 5準(zhǔn)確率分別達(dá)到了99.8%和99.9%。該技術(shù)不僅可快速有效地處理大量圖片文件,而且能綜合提高圖像文字識(shí)別性能,節(jié)省大量時(shí)間。
關(guān)鍵詞:文字識(shí)別;TensorFlow;深度學(xué)習(xí);LeNet-5;數(shù)據(jù)模型
DOI:10. 11907/rjdk. 191546 開放科學(xué)(資源服務(wù))標(biāo)識(shí)碼(OSID):
中圖分類號(hào):TP301文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1672-7800(2020)002-0127-05
英標(biāo):Research and Application of Image Character Recognition Technology Based on Deep Learning
英作:XIA Chang-xin,MO Hao-hong,WANG Cheng-xin,WANG Yao,YAN Shi-yu
英單:(School of Computer Science,University of South China, Hengyang 421001,China)
Abstract: In view of the shortcomings of slow recognition speed and low accuracy in the traditional image and character recognition technology based on template matching method and geometric feature extraction method,an image character recognition technology based on deep learning is proposed. Open source, flexible TensorFlow framework and LeNet-5 network are used to train data model, and the trained model is applied to the recognition of printed characters in specific scenes. The experimental results show that the accuracy of top 1 and top 5 of the recognition model reaches 99.8% and 99.9% respectively. This technology can not only process a large number of image files quickly and effectively, but also improve the performance of optical character recognition and save a lot of time.
Key Words: character recognition;Tensorflow;deep learning;LeNet-5;data model
0 引言
隨著信息化水平的不斷提升,以圖像為主的多媒體信息迅速成為重要的信息傳遞媒介,圖像中的文字?jǐn)?shù)據(jù)包含豐富的高層語義信息與分析價(jià)值。光學(xué)字符識(shí)別(Optical Character Recognition,OCR)指利用電子設(shè)備(例如掃描儀或數(shù)碼相機(jī))檢查紙上打印的字符,通過檢測(cè)暗、亮模式確定其形狀,然后用字符識(shí)別方法將形狀翻譯成計(jì)算機(jī)文字的過程。它是一種針對(duì)印刷體字符,采用光學(xué)方式將紙質(zhì)文檔中的文字轉(zhuǎn)換為黑白點(diǎn)陣的圖像文件,并通過識(shí)別軟件將圖像中的文字轉(zhuǎn)換成文本格式,供文字處理軟件進(jìn)一步編輯加工的技術(shù),通過該技術(shù)可將使用攝像機(jī)、掃描儀等光學(xué)輸入儀器得到的報(bào)刊、書籍、文稿、表格等印刷品圖像信息轉(zhuǎn)化為可供計(jì)算機(jī)識(shí)別和處理的文本信息[1]。目前,OCR技術(shù)廣泛應(yīng)用于多個(gè)領(lǐng)域,比如文檔識(shí)別、車牌識(shí)別、名片識(shí)別、票據(jù)識(shí)別、身份證識(shí)別和駕駛證識(shí)別等。如何除錯(cuò)或利用輔助信息提高識(shí)別準(zhǔn)確率和效率,已成為OCR技術(shù)研究熱門課題。
傳統(tǒng)OCR技術(shù)基于圖像處理(二值化、連通域分析、投影分析等)和統(tǒng)計(jì)機(jī)器學(xué)習(xí)(Adaboost、SVM),采用模板匹配和幾何特征抽取的方法進(jìn)行識(shí)別,過去20年間我國在印刷體和掃描文檔識(shí)別上取得了進(jìn)展,如李俊[2]提出采用基于連通域的方法,通過對(duì)不同連通域的特征分析,區(qū)分識(shí)別有效區(qū)域和無效區(qū)域,解決了投影法對(duì)于圖文混排、兼有表格的復(fù)雜版面不能正確切分的問題,但是該方法只限于一些簡(jiǎn)單場(chǎng)景,對(duì)于稍微復(fù)雜的應(yīng)用場(chǎng)景,通過版面分析(連通域分析)和行切分(投影分析)生成文本行時(shí),無法處理前背景復(fù)雜的隨意文字(例如場(chǎng)景文字、菜單、廣告文字等),且過度依賴字符切分結(jié)果,在字符扭曲、粘連、噪聲干擾的情況下,切分的錯(cuò)誤傳播尤其突出;鄭澤鴻等[3]提出將AP聚類算法應(yīng)用于字符分割,根據(jù)類中心對(duì)特征點(diǎn)進(jìn)行歸類得到分割結(jié)果,該方法具有較高識(shí)別準(zhǔn)確率,但在識(shí)別效率上有待提高,另外,二值化操作本身對(duì)圖像成像條件和背景要求比較苛刻;田潔等[4]指出,二值化過程容易引入噪聲、造成文字筆劃信息丟失,傳統(tǒng)OCR引擎用于識(shí)別疊加文字二值化后的結(jié)果可能不夠魯棒。
本文基于深度學(xué)習(xí)方法,將神經(jīng)網(wǎng)絡(luò)LeNet-5應(yīng)用于字符識(shí)別模型訓(xùn)練,以期彌補(bǔ)傳統(tǒng)方法對(duì)于字符粘連、模糊和形變情況下識(shí)別準(zhǔn)確度較差的不足。
1 基本原理
1.1 OCR文字識(shí)別技術(shù)
通常OCR文字識(shí)別過程可分為圖像輸入、圖像預(yù)處理、對(duì)比識(shí)別、后期糾正和結(jié)果輸出等步驟。據(jù)此可將整個(gè)OCR識(shí)別流程劃分為5個(gè)部分,圖1為OCR文字識(shí)別系統(tǒng)工作流程。
文字識(shí)別常用方法有模板匹配法和幾何特征抽取法。
(1)模板匹配法。將輸入的文字與給定的各類別標(biāo)準(zhǔn)文字(模板)進(jìn)行相關(guān)匹配,計(jì)算輸入文字與各模板的相似程度,取相似度最大的類別作為識(shí)別結(jié)果。該方法適用于識(shí)別固定字型的印刷體文字,優(yōu)點(diǎn)是用整個(gè)文字進(jìn)行相似度計(jì)算,對(duì)文字缺損、邊緣噪聲等具有較強(qiáng)的適應(yīng)能力;缺點(diǎn)是當(dāng)被識(shí)別類別數(shù)增加時(shí),標(biāo)準(zhǔn)文字模板的數(shù)量也隨之增加,增加機(jī)器存儲(chǔ)容量會(huì)降低識(shí)別正確率。
(2)幾何特征抽取法。抽取文字的一些幾何特征,如文字端點(diǎn)、分叉點(diǎn)、凹凸部分及水平、垂直、傾斜等各方向的線段、閉合環(huán)路等,根據(jù)這些特征的位置和相互關(guān)系進(jìn)行邏輯組合判斷,獲得識(shí)別結(jié)果。該識(shí)別方式由于利用結(jié)構(gòu)信息,也適用于變形較大的手寫體文字。不足之處在于當(dāng)出現(xiàn)文字粘連扭曲、有噪聲干擾時(shí),識(shí)別效果不佳。
1.2 基于深度學(xué)習(xí)的LeNet-5網(wǎng)絡(luò)
深度學(xué)習(xí)(Deep Learning)是多層神經(jīng)網(wǎng)絡(luò)運(yùn)用各種機(jī)器學(xué)習(xí)算法解決圖像、文本等各種問題的算法集合。深度學(xué)習(xí)的核心是特征學(xué)習(xí),它通過組合低層特征形成更加抽象的高層表示屬性類別或特征,從分層網(wǎng)絡(luò)中獲取分層次的特征信息,以發(fā)現(xiàn)數(shù)據(jù)分布式特征表示,從而解決以往需要人工設(shè)計(jì)特征的難題。
利用深度學(xué)習(xí)進(jìn)行文字識(shí)別,采用的神經(jīng)網(wǎng)絡(luò)是卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Networks,CNN),具體選擇使用哪一個(gè)經(jīng)典網(wǎng)絡(luò)需綜合考慮,越深的網(wǎng)絡(luò)訓(xùn)練得到的模型越好,但是相應(yīng)訓(xùn)練難度會(huì)增加,此后線上部署時(shí)預(yù)測(cè)的識(shí)別速度也會(huì)很慢,所以本文使用經(jīng)簡(jiǎn)化改進(jìn)后的LeNet-5(-5表示具有5個(gè)層)網(wǎng)絡(luò),如圖2所示。它與原始LeNet稍有不同,比如把激活函數(shù)改為目前常用的ReLu函數(shù);與現(xiàn)有conv->pool->ReLu不同的是其使用的方式是conv1->pool->conv2->pool2,再接全連接層,但是不變的是卷積層后仍然緊接池化層。
2 基于深度學(xué)習(xí)的圖像文字識(shí)別技術(shù)
2.1 方法步驟
本文在開源的TensorFlow框架開發(fā)環(huán)境下,搭建深度學(xué)習(xí)神經(jīng)網(wǎng)絡(luò)LeNet-5和計(jì)算圖,將樣本文件添加到訓(xùn)練隊(duì)列中喂給網(wǎng)絡(luò)訓(xùn)練,完成充足的訓(xùn)練量后,對(duì)模型進(jìn)行識(shí)別準(zhǔn)確率評(píng)估,并最終將訓(xùn)練得到的識(shí)別模型應(yīng)用于實(shí)際場(chǎng)景中的圖像文字識(shí)別實(shí)驗(yàn)檢測(cè),流程如圖3所示。
2.1.1 網(wǎng)絡(luò)搭建
深度學(xué)習(xí)訓(xùn)練的第一步是搭建網(wǎng)絡(luò)和計(jì)算圖。文字識(shí)別實(shí)質(zhì)上是一個(gè)多分類任務(wù),識(shí)別1 000個(gè)不同的文字,相當(dāng)于1 000個(gè)類別的分類任務(wù)。在搭建的網(wǎng)絡(luò)中加入batch normalization。另外損失函數(shù)選擇sparse_softmax_cross_entropy_with_logits,優(yōu)化器選擇Adam,學(xué)習(xí)率設(shè)為0.1,實(shí)現(xiàn)代碼如下:
#network: conv2d->max_pool2d->conv2d->max_pool2d->conv2d->max_pool2d->conv2d->conv2d->max_pool2d->fully_connected->fully_connected
#給slim.conv2d和slim.fully_connected準(zhǔn)備了默認(rèn)參數(shù):batch_norm
with slim.arg_scope([slim.conv2d, slim.fully_connected],
normalizer_fn=slim.batch_norm,
normalizer_params={'is_training': is_training}):
conv3_1 = slim.conv2d(images, 64, [3, 3], 1, padding='SAME', scope='conv3_1')
max_pool_1 = slim.max_pool2d(conv3_1, [2, 2], [2, 2], padding='SAME', scope='pool1')
conv3_2 = slim.conv2d(max_pool_1, 128, [3, 3], padding='SAME', scope='conv3_2')
max_pool_2 = slim.max_pool2d(conv3_2, [2, 2], [2, 2], padding='SAME', scope='pool2')
conv3_3 = slim.conv2d(max_pool_2, 256, [3, 3], padding='SAME', scope='conv3_3')
max_pool_3 = slim.max_pool2d(conv3_3, [2, 2], [2, 2], padding='SAME', scope='pool3')
conv3_4 = slim.conv2d(max_pool_3, 512, [3, 3], padding='SAME', scope='conv3_4')
conv3_5 = slim.conv2d(conv3_4, 512, [3, 3], padding='SAME', scope=‘conv3_5)
max_pool_4 = slim.max_pool2d(conv3_5, [2, 2], [2, 2], padding='SAME', scope='pool4')
flatten = slim.flatten(max_pool_4)
fc1 = slim.fully_connected(slim.dropout(flatten, keep_prob), 1024,
activation_fn=tf.nn.relu, scope='fc1')
logits = slim.fully_connected(slim.dropout(fc1, keep_prob), FLAGS.charset_size, activation_fn=None,scope='fc2')
# 因?yàn)闆]有做熱編碼,所以使用sparse_softmax_cross_entropy_with_logits
loss = tf.reduce_mean(tf.nn.sparse_softmax_cross_entropy_with_logits(logits=logits, labels=labels))
accuracy = tf.reduce_mean(tf.cast(tf.equal(tf.argmax(logits, 1), labels), tf.float32))
update_ops = tf.get_collection(tf.GraphKeys.UPDATE_OPS)
if update_ops:
updates = tf.group(*update_ops)
loss = control_flow_ops.with_dependencies([updates], loss)
global_step = tf.get_variable("step", [], initializer=tf.constant_initializer(0.0), trainable=False)
optimizer = tf.train.AdamOptimizer(learning_rate=0.1)
train_op = slim.learning.create_train_op(loss, optimizer, global_step=global_step)
probabilities = tf.nn.softmax(logits)
2.1.2 模型訓(xùn)練
訓(xùn)練之前需先設(shè)計(jì)好數(shù)據(jù),為高效地進(jìn)行網(wǎng)絡(luò)訓(xùn)練作好鋪墊。主要步驟如下:
(1)創(chuàng)建數(shù)據(jù)流圖。該圖由一些流水線階段組成,階段間用隊(duì)列連接在一起。第一階段將生成并讀取文件名,并將其排到文件名隊(duì)列中;第二階段從文件中讀取數(shù)據(jù)(使用Reader),產(chǎn)生樣本且把樣本放在一個(gè)樣本隊(duì)列中。
根據(jù)不同的設(shè)置,或者拷貝第二階段的樣本,使其相互獨(dú)立,因此可以從多個(gè)文件中并行讀取。在第二階段排隊(duì)操作,即入隊(duì)到隊(duì)列中去,在下一階段出隊(duì)。因?yàn)閷㈤_始運(yùn)行這些入隊(duì)操作的線程,所以訓(xùn)練循環(huán)會(huì)使樣本隊(duì)列中的樣本不斷出隊(duì),如圖4所示。
圖4 樣本隊(duì)列數(shù)據(jù)讀入流程
樣本隊(duì)列的入隊(duì)操作在主線程中進(jìn)行,Session中可以多個(gè)線程一起運(yùn)行。在數(shù)據(jù)輸入的應(yīng)用場(chǎng)景中,入隊(duì)操作從硬盤中讀取輸入進(jìn)行,再放到內(nèi)存中,速度較慢。使用QueueRunner可以創(chuàng)建一系列新的線程進(jìn)行入隊(duì)操作,讓主線程繼續(xù)使用數(shù)據(jù)。如果在訓(xùn)練神經(jīng)網(wǎng)絡(luò)的場(chǎng)景中,則訓(xùn)練網(wǎng)絡(luò)和讀取數(shù)據(jù)異步,主線程在訓(xùn)練網(wǎng)絡(luò)時(shí),另一個(gè)線程再將數(shù)據(jù)從硬盤讀入內(nèi)存。
訓(xùn)練時(shí)數(shù)據(jù)讀取模式如上所述,則訓(xùn)練代碼設(shè)計(jì)為:
with tf.Session(config=tf.ConfigProto(gpu_options=gpu_options, allow_soft_placement=True)) as sess:
# batch data 獲取
train_images, train_labels = train_feeder.input_pipeline(batch_size=FLAGS.batch_size, aug=True)
test_images, test_labels = test_feeder.input_pipeline(batch_size=FLAGS.batch_size)
graph = build_graph(top_k=1)? # 訓(xùn)練時(shí)top k = 1
saver = tf.train.Saver()
sess.run(tf.global_variables_initializer())
# 設(shè)置多線程協(xié)調(diào)器
coord = tf.train.Coordinator()
threads = tf.train.start_queue_runners(sess=sess, coord=coord)
train_writer = tf.summary.FileWriter(FLAGS.log_dir + '/train', sess.graph)
test_writer = tf.summary.FileWriter(FLAGS.log_dir + '/val')
start_step = 0
(2)指令執(zhí)行。設(shè)置最大迭代步數(shù)為16 002,每100步進(jìn)行一次驗(yàn)證,每500步存儲(chǔ)一次模型。
訓(xùn)練過程的損失函數(shù)loss和精度函數(shù)accuracy變換曲線如圖5、圖6所示。
損失(loss)和精度(accuracy)是用于衡量模型預(yù)測(cè)偏離其訓(xùn)練對(duì)象期望值的衡量指標(biāo),從圖5、圖6可以看出loss和accuracy最大值分別穩(wěn)定在0.05、0.9左右,說明模型訓(xùn)練順利完成,已具備替代訓(xùn)練對(duì)象進(jìn)行文字識(shí)別工作的能力。
(3)模型性能評(píng)估。在對(duì)模型進(jìn)行訓(xùn)練調(diào)試之后,再對(duì)模型性能進(jìn)行評(píng)估,計(jì)算模型top 1(識(shí)別結(jié)果的第一個(gè)是正確的概率)和top 5(識(shí)別結(jié)果的前5個(gè)中有正確結(jié)果的概率)的準(zhǔn)確率,使模型應(yīng)用效果達(dá)到最佳。計(jì)算模型top 1和top 5準(zhǔn)確率的代碼為:
i = 0
acc_top_1, acc_top_k = 0.0, 0.0
while not coord.should_stop():
i += 1
start_time = time.time()
test_images_batch, test_labels_batch = sess.run([test_images, test_labels])
feed_dict = {graph[‘images]: test_images_batch,
graph[‘labels]: test_labels_batch,
graph[‘keep_prob]: 1.0,
graph[‘is_training]: False}
batch_labels, probs, indices, acc_1, acc_k = sess.run([graph[‘labels],
graph[‘predicted_val_top_k],
graph[‘predicted_index_top_k],
graph[‘a(chǎn)ccuracy],
graph[‘a(chǎn)ccuracy_top_k]],
feed_dict=feed_dict)
final_predict_val += probs.tolist()
final_predict_index += indices.tolist()
groundtruth += batch_labels.tolist()
acc_top_1 += acc_1
acc_top_k += acc_k
end_time = time.time()
logger.info(“the batch {0} takes {1} seconds, accuracy = {2}(top_1) {3}(top_k)”
.format(i, end_time - start_time, acc_1, acc_k))
預(yù)測(cè)的top 1和top 5準(zhǔn)確率如圖7所示。
從圖中可以看出,識(shí)別模型top 1和top 5分別達(dá)到了99.8%、99.9%,識(shí)別準(zhǔn)確率很高。
2.2 實(shí)驗(yàn)結(jié)果
從某文檔中截取出一段文字以圖片格式保存,再使用文字切割算法把文字段落切割為單字,如圖8、圖9所示。
對(duì)文字段落進(jìn)行識(shí)別,由于使用的是GPU,識(shí)別速度非??欤ハ到y(tǒng)初始化時(shí)間,全部圖像識(shí)別時(shí)耗不超過1s。其中輸出的信息分別是:當(dāng)前識(shí)別的圖片路徑、模型預(yù)測(cè)出的top 3漢字(置信度由高到低排列)、對(duì)應(yīng)的漢字ID、對(duì)應(yīng)概率。在識(shí)別完成之后,將所有識(shí)別文字按順序組合成原始段落排列,如圖10、圖11所示。
從圖中可以看出單字的識(shí)別非常準(zhǔn)確,在最后顯示的文字段落識(shí)別結(jié)果中可以看到僅個(gè)別文字識(shí)別出現(xiàn)偏差,整體識(shí)別效果佳,說明該模型的識(shí)別能力可滿足一般實(shí)際場(chǎng)景印刷體文字識(shí)別要求。
3 結(jié)語
經(jīng)過測(cè)試,基于深度學(xué)習(xí)的圖像文字識(shí)別模型在模型評(píng)估上top 1的正確率達(dá)到了99.8%。與傳統(tǒng)OCR相比,基于深度學(xué)習(xí)的OCR技術(shù)在識(shí)別準(zhǔn)確率方面有大幅上升。在一些比較理想的環(huán)境下,文字識(shí)別效果較好,但是處理復(fù)雜場(chǎng)景或一些干擾比較大的文字圖像時(shí),識(shí)別效果有待提高,后續(xù)將對(duì)模型作進(jìn)一步優(yōu)化。
隨著OCR技術(shù)的迅猛發(fā)展,文本檢測(cè)和識(shí)別技術(shù)將拓展更多語言支持。從圖像中提取文字對(duì)于圖像高層次語義理解、索引和檢索意義重大。結(jié)合深度學(xué)習(xí)的神經(jīng)網(wǎng)絡(luò)和NPL語義分析提升OCR識(shí)別糾錯(cuò)能力,幫助個(gè)體提升效率、創(chuàng)造價(jià)值,是未來重要發(fā)展趨勢(shì)。
參考文獻(xiàn):
[1] 王文華. 淺談OCR技術(shù)的發(fā)展和應(yīng)用[J]. 福建電腦,2012,28(6):56,92.
[2] 李俊. 印刷體文字識(shí)別系統(tǒng)的研究與實(shí)現(xiàn)[D]. 成都:電子科技大學(xué),2011.
[3] 鄭澤鴻,黃成泉,梁毅,等. 基于AP聚類的中文字符分割[J]. 智能計(jì)算機(jī)與應(yīng)用,2018,8(1):65-67,71.
[4] 田潔,王偉強(qiáng),孫翼. 一種免除二值化的視頻疊加中文字符識(shí)別方法[J]. 中國科學(xué)院大學(xué)學(xué)報(bào),2018,35(3):402-408.
[5] 張桂剛,李超,邢春曉. 大數(shù)據(jù)背后的核心技術(shù)[M]. 北京:電子工業(yè)出版社,2017.
[6] 李月潔. 自然場(chǎng)景中特定文字圖像優(yōu)化識(shí)別研究與仿真[J]. 計(jì)算機(jī)仿真,2016, 33(11):357-360.
[7] 王若辰. 基于深度學(xué)習(xí)的目標(biāo)檢測(cè)與分割算法研究[D]. 北京:北京工業(yè)大學(xué),2016.
[8] 葉韻. 深度學(xué)習(xí)與計(jì)算機(jī)視覺[M]. 北京:機(jī)械工業(yè)出版社,2017.
[9] 張三友,姜代紅. 基于OPENCV的智能車牌識(shí)別系統(tǒng)[J]. 軟件導(dǎo)刊, 2016,15(5):87-89.
[10] 黃攀. 基于深度學(xué)習(xí)的自然場(chǎng)景文字識(shí)別[D]. 杭州:浙江大學(xué), 2016.
[11] 喻儼,莫瑜. 深度學(xué)習(xí)原理與TensorFlow實(shí)踐[M]. 北京:電子工業(yè)出版社, 2017.
[12] 丁明宇,牛玉磊,盧志武,等.? 基于深度學(xué)習(xí)的圖片中商品參數(shù)識(shí)別方法[J]. 軟件學(xué)報(bào), 2018,29(4):1039-1048.
[13] 何樹有. 自然場(chǎng)景中文字識(shí)別關(guān)鍵技術(shù)研究[D]. 大連:大連理工大學(xué), 2017.
[14] 舒躍育,劉紅梅.? 深度學(xué)習(xí)推進(jìn)人工智能變革[N]. 中國社會(huì)科學(xué)報(bào),2018-02-06(005).
[15] 姚東林. 基于安卓的文字識(shí)別系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[D]. 西安:西安電子科技大學(xué),2014.
[16] 張紀(jì)緒. 面向移動(dòng)平臺(tái)的離線手寫文檔識(shí)別系統(tǒng)[D]. 哈爾濱:哈爾濱工業(yè)大學(xué),2017.
[17] MADCOLA. CNN網(wǎng)絡(luò)架構(gòu)演進(jìn):從LeNet到DenseNet[EB/OL]. https://www.cnblogs.com/skyfsm/p/8451834.html.
[18] BARAT C,DUCOTTET C. String representations and distances in deep convolutional neural networks for image classification[J]. Pattern Recognition,2016(54):104-115.
[19] HLáDEK D,STA? J,ONDá? S, et al. Learning string distance with smoothing for OCR spelling correction[J]. Multimedia Tools and Applications,2017(76):24549-24567.
[20] BALOOCHIAN H,GHAFFARY H R,BALOCHIAN S. Enhancing fingerprint image recognition algorithm using fractional derivative filters[J]. Open Computer Science,2017(2):9-16.
[21] RYAN M,HANAFIAH N. An examination of character recognition on ID card using template matching approach[J]. Procedia Computer Science,2015(59):520-529.
(責(zé)任編輯:江 艷)