开源 Python 多选考试阅读器 API
免费 Python 多选考试阅读器 API,使软件开发者能够通过 Python API 生成试卷、扫描仪和处理软件。
什么是 Open-MCR 库?
一个强大的 Python 包,名为 Open-MCR,旨在简化多通道卷积递归神经网络(MCRNN) 的部署。该开源项目由才华横溢的程序员 Ian San 创建,为学术界和开发者提供了一个多功能且高效的框架,可用于语音识别、视频分析以及各种时间序列应用。在项目中使用它可以获得更可靠、更准确的模型预测,从而最终推动机器学习在多个领域的进步。Open-MCR 库的设计注重易用性。凭借其详尽的文档和示例,该库对新手和有经验的从业者都友好可用。
在机器学习中,多类分类(MCC)是一项流行的任务,其目标是将输入归类到一系列预定的类别中。通过添加拒绝选项,Open-MCR 更进一步,使模型在不确定的情况下可以不生成预测。这提升了整体性能,尤其在模型置信度较低的情形下非常有帮助。根本上,Open-MCR 通过利用卷积神经网络和循环神经网络的优势来处理和理解序列输入。得益于多通道设计,该模型成为适用于各种应用的灵活工具,提升了识别复杂模式和关联的能力。由于实现简便,用户可以快速将该库集成到自己的应用中。随着进一步发展,该库有望显著推动序列数据处理和深度学习领域的进步。
开始使用 Open-MCR
推荐的安装 Open-MCR 库的方式是使用 pip。请使用以下命令以顺利安装。
在 Python 应用中使用拒绝机制
Open-MCR 的突出特性是其拒绝机制,使模型在面对模糊或具有挑战性的实例时能够拒绝进行预测。这一能力在实际应用中至关重要,因为避免错误预测是首要任务。下面是一个示例,展示如何仅用几行代码使用拒绝机制。为了顺畅使用,首先从库中导入 OpenMCR 类,并使用您偏好的机器学习模型进行初始化。将 rejection_threshold 参数设置为控制拒绝的置信水平。
如何在 Python 应用中使用拒绝机制?
from openmcr import OpenMCR
from sklearn.ensemble import RandomForestClassifier
# Initialize Open-MCR with a RandomForestClassifier
model = RandomForestClassifier()
mcr_model = OpenMCR(model, rejection_threshold=0.3)
# Train the model
mcr_model.fit(X_train, y_train)
# Make predictions with rejection
predictions = mcr_model.predict(X_test)
通过 Python API 读取并提取图像数据
开源 Python 库 Open-MCR 已提供完整的支持,用于在 Python 应用程序中加载和读取图像数据。对于处理考试和读取答卷,用户首先需要使用标准扫描仪扫描所有答卷。将它们转换为单独的图像并放入同一个文件夹中,包括答案键。除了读取扫描的图像外,它还可以自动对考试结果进行评分。它通过将提供的答案键与输出进行比较来实现此功能。程序完成处理后,结果将以 CSV 文件形式保存在您选择的输出文件夹中。 该库还提供了在读取略有失真的图像时提取数据的支持。随着最新版本的发布,库增强了网格查找算法,并在您的图像上获得更好的结果。它基于四个角标建立网格,然后从网格中的位置读取气泡。以下示例展示了如何通过 Python 代码计算结果。
如何使用 Python API 计算考试答题卡的结果?
import csv
import pathlib
import typing as tp
import data_exporting
import grid_info
import list_utils
import math_utils
def score_results(results: data_exporting.OutputSheet,
answer_keys: data_exporting.OutputSheet,
num_questions: int) -> data_exporting.OutputSheet:
answers = results.data
keys = establish_key_dict(answer_keys)
form_code_column_name = data_exporting.COLUMN_NAMES[
grid_info.Field.TEST_FORM_CODE]
form_code_index = list_utils.find_index(answers[0], form_code_column_name)
answers_start_index = list_utils.find_index(
answers[0][form_code_index + 1:], "Q1") + form_code_index + 1
virtual_fields: tp.List[grid_info.RealOrVirtualField] = [
grid_info.VirtualField.SCORE, grid_info.VirtualField.POINTS
]
columns = results.field_columns + virtual_fields
scored_results = data_exporting.OutputSheet(columns, num_questions)
for exam in answers[1:]: # Skip header row
fields = {
k: v
for k, v in zip(results.field_columns, exam[:answers_start_index])
}
form_code = exam[form_code_index]
try:
if "*" in keys:
key = keys["*"]
else:
key = keys[form_code]
except KeyError:
fields[grid_info.VirtualField.
SCORE] = data_exporting.KEY_NOT_FOUND_MESSAGE
fields[grid_info.VirtualField.
POINTS] = data_exporting.KEY_NOT_FOUND_MESSAGE
scored_answers = []
else:
scored_answers = [
int(actual == correct)
for actual, correct in zip(exam[answers_start_index:], key)
]
fields[grid_info.VirtualField.SCORE] = str(
round(math_utils.mean(scored_answers) * 100, 2))
fields[grid_info.VirtualField.POINTS] = str(sum(scored_answers))
string_scored_answers = [str(s) for s in scored_answers]
scored_results.add(fields, string_scored_answers)
return scored_results
改进的准确性和鲁棒性
开源的 Open-MCR 库是机器学习从业者工具箱中的宝贵补充,帮助他们提升多类分类模型的性能。拒绝机制提升了多类分类模型的整体准确率,尤其在传统模型可能表现不佳的情形下。该机制还通过防止模型做出不可靠的预测,增强模型的鲁棒性,从而在各种真实场景中确保更可靠的结果。