import numpy as np from paddleocr import TextRecognition import cv2 class OCRProcessor: def __init__(self): self.model = TextRecognition(model_name="PP-OCRv5_server_rec") print("OCR模型初始化完成(占位)") def predict(self, image_array): # 保持原有模型调用方式 output = self.model.predict(input=image_array) # 结构化输出结果 results = output[0]["rec_text"] placeholder_result = results.split(',') return placeholder_result # 保留原有函数接口 _processor = OCRProcessor() def LPRNinitialize_model(): return _processor def LPRNmodel_predict(image_array): """ OCR车牌号识别接口函数 参数: image_array: numpy数组格式的车牌图像,已经过矫正处理 返回: list: 包含最多8个字符的列表,代表车牌号的每个字符 例如: ['京', 'A', '1', '2', '3', '4', '5', ''] (蓝牌7位+占位符) ['京', 'A', 'D', '1', '2', '3', '4', '5'] (绿牌8位) """ # 获取原始预测结果 raw_result = _processor.predict(image_array) # 将结果合并为字符串(如果是列表的话) if isinstance(raw_result, list): result_str = ''.join(raw_result) else: result_str = str(raw_result) # 过滤掉'·'字符 filtered_str = result_str.replace('·', '') # 转换为字符列表 char_list = list(filtered_str) # 确保返回至少7个字符,最多8个字符 if len(char_list) < 7: # 如果识别结果少于7个字符,用'0'补齐到7位 char_list.extend(['0'] * (7 - len(char_list))) elif len(char_list) > 8: # 如果识别结果多于8个字符,截取前8个 char_list = char_list[:8] # 如果是7位,补齐到8位以保持接口一致性(第8位用空字符或占位符) if len(char_list) == 7: char_list.append('') # 添加空字符作为第8位占位符 return char_list