Indra内存图片OCR：先转灰度uint8，再检查形状与像素范围

素材身份：作者原创输入/可编辑参考。目标工具未在本轮执行。
先打开 index.html；input.csv 是原始字段，reference.csv 是验收基准，negative.csv 是故意构造的坏样例。
actual-results.csv 保留未测状态，实际执行后再填写。

前置条件：
Python环境与本地CPU；Indra使用ONNX，不需要PyTorch或GPU，首次运行需下载约76MB默认模型，math模型另计。
代码Apache2.0；权重modified OpenRAIL-M，有企业规模与竞争用途限制，不能宣传无限制免费商用。
本课原生材料可离线免费检查；目标识别未执行，实际page.source/conf/坐标只能运行后填写。

操作步骤：
1. 读取作者样图
用OpenCV读三行材料标签，记录原始shape和dtype。
cv2.imread默认BGR，不当作已经是灰度输入。

2. 检查读取失败
图片不存在时拦截None，给出路径和格式错误。
不要对None继续cvtColor再只报告模型崩溃。

3. 转为灰度
按官方示例用cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)。
确认输出为二维，不保留多余RGB通道。

4. 检查uint8范围
保证数组dtype=uint8、值在0到255。
0到1浮点图要正确缩放再转换，直接astype会接近全黑。

5. 调用内存接口
用已加载conv.ocr(gray)，保留原输入摘要和实际Page。
不要为测试改用托管付费API。

6. 比较错误输入
只在本地检查器验证BGR三维与浮点错缩放的负例。
无需把错误图大量送模型，先在输入层拦截。

7. 交付数组契约
保存源图、灰度图和shape/dtype/min/max台账。
识别文本未运行就保持空白，不用参考行填充输出。

验收：
conv.ocr输入为二维uint8。
读取失败在转换前拦截。
浮点转uint8前正确缩放。

官方资料：
https://huggingface.co/datalab-to/indra-ocr

图片身份：assets/ 为内置image_gen生成的原创练习输入缩略版，原始文件保留在网站图片来源地址。可编辑SVG为作者原生排版。
