本章介绍以下主题:
OCR 系统用于将文本图像转换为字母、单词和句子。它被广泛应用于各个领域,用于转换/提取图像中的信息。它还用于签名识别、自动数据评估和安全系统。它在商业上用于验证数据记录、护照文档、发票、银行对账单、计算机化收据、名片、静态数据打印输出等。OCR 是模式识别、人工智能和计算机视觉的一个研究领域。
光学字符可视化是一种常用的打印文本数字化方法,因此这些文本可以通过电子方式编辑、搜索、存储和在线显示。目前,它们被广泛应用于认知计算、机器翻译、文语转换、文本挖掘等领域。
import os
import sys
import cv2
import numpy as np
in_file = 'words.data'
scale_factor = 10
s_index = 6
e_index = -1
h, w = 16, 8
with open(in_file, 'r') as f:
for line in f.readlines():
information = np.array([255*float(x) for x in line.split('t')[s_index:e_index]])
image = np.reshape(information, (h,w))
image_scaled = cv2.resize(image, None, fx=scale_factor, fy=scale_factor)
cv2.imshow('Image', image_scaled)
a = cv2.waitKey()
if a == 10:
break
python visualize_character.py
执行代码:visualize_character.py
时得到的结果如下所示:本节介绍了基于神经网络的光学字符识别方案。
import numpy as np
import neurolab as nl
in_file = 'words.data'
# Number of datapoints to load from the input file
num_of_datapoints = 20
original_labels = 'omandig'
# Number of distinct characters
num_of_charect = len(original_labels)
train_param = int(0.9 * num_of_datapoints)
test_param = num_of_datapoints - train_param
s_index = 6
e_index = -1
information = []
labels = []
with open(in_file, 'r') as f:
for line in f.readlines():
# Split the line tabwise
list_of_values = line.split('t')
if list_of_values[1] not in original_labels:
continue
label = np.zeros((num_of_charect , 1))
label[original_labels.index(list_of_values[1])] = 1
labels.append(label)
extract_char = np.array([float(x) for x in list_of_values[s_index:e_index]])
information.append(extract_char)
if len(information) >= num_of_datapoints:
break
information = np.array(information)
labels = np.array(labels).reshape(num_of_datapoints, num_of_charect)
num_dimension = len(information[0])
neural_net = nl.net.newff([[0, 1] for _ in range(len(information[0]))], [128, 16, num_of_charect])
neural_net.trainf = nl.train.train_gd
error = neural_net.train(information[:train_param,:], labels[:train_param,:], epochs=10000, show=100, goal=0.01)
p_output = neural_net.sim(information[train_param:, :])
print "nTesting on unknown data:"
for i in range(test_param):
print "nOriginal:", original_labels[np.argmax(labels[i])]
print "Predicted:", original_labels[np.argmax(p_output[i])]
optical_character_recognition.py
时得到的结果如下图所示:构建了一个支持神经网络的光学字符识别系统,用于从图像中提取文本。这个过程包括训练神经网络系统,使用字符数据集进行测试和验证。
读者可以参考文章基于神经网络的光学字符识别系统,了解 OCR 背后的基本原理:http://ieeexplore.ieee.org/document/6419976/ 。
请参阅以下资料:
OCR 系统广泛用于从图像中转换/提取文本(字母和数字)。OCR 系统广泛用于验证业务文档、自动车牌识别以及从文档中提取关键字符。它还用于使打印文档的电子图像可搜索,并为盲人和视力受损用户建立辅助技术。