import tensorflow as tf
from tensorflow.keras import layers, models
import cv2
# 构建卷积神经网络模型
def build_model():
model = models.Sequential()
model.add(layers.Conv2D(32, (3, 3), activation='relu', input_shape=(32, 128, 3)))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(64, (3, 3), activation='relu'))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Flatten())
model.add(layers.Dense(128, activation='relu'))
model.add(layers.Dense(num_classes, activation='softmax'))
return model
# 读取并预处理数据
def preprocess_data(image_path):
image = cv2.imread(image_path)
image = cv2.resize(image, (128, 32))
image = image / 255.0 # 归一化
return image
# 加载模型和权重
model = build_model()
model.load_weights('id_number_model_weights.h5')
# 定义字符集
characters = '0123456789X'
num_classes = len(characters)
# 识别身份证号码
def recognize_id_number(image_path):
image = preprocess_data(image_path)
image = tf.expand_dims(image, axis=0) # 扩展维度以匹配模型输入要求
pred = model.predict(image)
pred_label = characters[tf.argmax(pred, axis=1).numpy()[0]]
return pred_label
# 测试
image_path = 'test_id_number.jpg'
predicted_id_number = recognize_id_number(image_path)
print('Predicted ID Number:', predicted_id_number)