isledee 2021-05-20 22:04 采纳率: 0%
浏览 18

求教:手写字母智能评分的技术路线

场景:针对一行手写英文语句中的以下多个维度,进行handwriting智能评分:

  • 字母书写正确率
  • 字母大小偏离度(小写字母有的大有的小)
  • 字母基线位置漂移量(字母相对横线上下漂移)
  • 字母间及单词间空格是否合适
  • 句首、人名、特定单词是否首字母大写
  • 笔画顺序
  • ...

本人非技术口,读过用tensorflow/BP/minst做数字和字母识别的论文,但是写法的评分过程(尤其是笔顺)相当于在识别过程中针对识别内容与标准值之间的各个偏差指标做进一步的分析和学习,还请大神赐教解决思路,谢谢!

  • 写回答

1条回答 默认 最新

  • 码农阿豪@新空间代码工作室 Java领域优质创作者 2024-06-13 22:04
    关注
    让阿豪来帮你解答,本回答参考chatgpt3.5编写提供,如果还有疑问可以评论或留言
    针对手写英文语句的智能评分,建议采取以下步骤: 1.数据处理:采用OCR技术将手写英文语句转换为数字化的文本。可以使用Python中的Tesseract库或OpenCV库实现。 2.特征提取:根据评分需要,从转换后的文本中提取字母书写正确率、字母大小偏离度、字母基线位置漂移量、字母间及单词间空格是否合适、句首、人名、特定单词是否首字母大写、笔画顺序等多个维度的特征。 例如,实现字母书写正确率的特征提取,可以采用以下代码:
    import re
    def letter_accuracy(text):
        # 将文本中的字母和标准字母进行比较,计算正确率
        standard_letters = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
        correct_letters = 0
        total_letters = 0
        text_letters = re.findall('[a-zA-Z]', text)
        for letter in text_letters:
            total_letters += 1
            if letter in standard_letters:
                correct_letters += 1
        return correct_letters / total_letters
    

    3.评分模型:根据提取的特征,建立评分模型。可以使用机器学习算法,如BP神经网络、支持向量机或随机森林,通过训练样本进行模型训练。 例如,采用BP神经网络的评分模型,可以使用以下代码:

    import numpy as np
    class BP_Network:
        def __init__(self, input_size, hidden_size, output_size):
            self.input_size = input_size
            self.hidden_size = hidden_size
            self.output_size = output_size
            self.hidden_weights = np.random.randn(self.input_size, self.hidden_size)
            self.output_weights = np.random.randn(self.hidden_size, self.output_size)
        def sigmoid(self, x):
            return 1 / (1 + np.exp(-x))
        def predict(self, input_data):
            hidden_output = self.sigmoid(np.dot(input_data, self.hidden_weights))
            output = self.sigmoid(np.dot(hidden_output, self.output_weights))
            return output
        def train(self, input_data, target_data, learning_rate=0.1, epochs=1000):
            for epoch in range(epochs):
                hidden_output = self.sigmoid(np.dot(input_data, self.hidden_weights))
                output = self.sigmoid(np.dot(hidden_output, self.output_weights))
                output_error = target_data - output
                output_delta = output_error * output * (1 - output)
                hidden_error = np.dot(output_delta, self.output_weights.T)
                hidden_delta = hidden_error * hidden_output * (1 - hidden_output)
                self.output_weights += learning_rate * np.dot(hidden_output.T, output_delta)
                self.hidden_weights += learning_rate * np.dot(input_data.T, hidden_delta)
    model = BP_Network(input_size=7, hidden_size=10, output_size=1)
    X_train = np.array([[0.8, 0.7, 0.5, 0.9, 0.9, 1.0, 0.6],
                        [0.7, 0.6, 0.4, 0.8, 0.8, 0.9, 0.5],
                        [0.9, 0.8, 0.6, 1.0, 1.0, 0.9, 0.7],
                        [0.6, 0.5, 0.3, 0.7, 0.7, 0.8, 0.4]])
    y_train = np.array([[0.9], [0.6], [0.8], [0.4]])
    model.train(X_train, y_train)
    # 对新的输入数据进行预测
    X_test = np.array([[0.7, 0.6, 0.4, 0.8, 0.8, 0.9, 0.5]])
    y_pred = model.predict(X_test)
    print('预测得分:', y_pred[0, 0])
    

    4.评估效果:对评分模型进行评估,计算准确度、精确度、召回率等指标,以判断模型的性能。 例如,使用混淆矩阵计算评分模型的准确度和精确度等指标,可以使用以下代码:

    def confusion_matrix(y_true, y_pred, threshold):
        y_pred_binary = (y_pred > threshold).astype(int)
        tp = ((y_true == 1) & (y_pred_binary == 1)).sum()
        tn = ((y_true == 0) & (y_pred_binary == 0)).sum()
        fp = ((y_true == 0) & (y_pred_binary == 1)).sum()
        fn = ((y_true == 1) & (y_pred_binary == 0)).sum()
        return tp, tn, fp, fn
    def accuracy(tp, tn, fp, fn):
        return (tp + tn) / (tp + tn + fp + fn)
    def precision(tp, fp):
        return tp / (tp + fp)
    def recall(tp, fn):
        return tp / (tp + fn)
    y_true = np.array([[1]])
    threshold = 0.5
    tp, tn, fp, fn = confusion_matrix(y_true, y_pred, threshold)
    print('准确度:', accuracy(tp, tn, fp, fn))
    print('精确度:', precision(tp, fp))
    print('召回率:', recall(tp, fn))
    

    以上是针对手写英文语句的智能评分的基本思路和示例代码,可以根据需要对特征提取和评分模型进行优化。

    评论

报告相同问题?

悬赏问题

  • ¥15 metadata提取的PDF元数据,如何转换为一个Excel
  • ¥15 关于arduino编程toCharArray()函数的使用
  • ¥100 vc++混合CEF采用CLR方式编译报错
  • ¥15 coze 的插件输入飞书多维表格 app_token 后一直显示错误,如何解决?
  • ¥15 vite+vue3+plyr播放本地public文件夹下视频无法加载
  • ¥15 c#逐行读取txt文本,但是每一行里面数据之间空格数量不同
  • ¥50 如何openEuler 22.03上安装配置drbd
  • ¥20 ING91680C BLE5.3 芯片怎么实现串口收发数据
  • ¥15 无线连接树莓派,无法执行update,如何解决?(相关搜索:软件下载)
  • ¥15 Windows11, backspace, enter, space键失灵