最近复现了一个手写中文识别的项目:jjcheer/ocrcn_tf2,用的是 TensorFlow 2
本来想着“作者都写好文档了,应该能直接跑”,结果这一跑就是一星期,各种离谱报错,尤其在数据处理那一块。最后把环境换成 Python 3.8 才搞定。
下面就按时间线碎碎念一下我都经历了什么……
🧩 第一坑:数据集解码
项目用的是 CASIA 的 .gnt 格式数据。作者提供了解码函数,看起来逻辑没问题,但我一跑就爆 UnicodeDecodeError。我一开始还以为是我下载的数据坏了,反复试了几遍都不行。
最后我找了另一个开源项目的解码方式,一换就跑起来了……真的很神奇,看起来一样,跑起来就不一样。
我觉得更多的是环境的问题。
🧩 第二坑:tfrecord 和 character.txt 对不上
项目要先把图片转成 tfrecord 格式,还要生成 character.txt 做字符到数字的映射。我按作者的流程走完之后,在读取tfrecord文件作为图片的时候字符和图片对应不上
👉 教训:tfrecord 和 label 映射这种东西最好一开始就统一,不然你永远不知道下一个爆炸的是哪个字符。
🧨 第三坑:环境,永远的痛
上面折腾半天还是不稳定,后来我怒了,新建了一个虚拟环境,Python 降到 3.8
直接全过了!!🤯
之前那些莫名其妙的错误、兼容性问题,全没了。
我一瞬间明白了,以后复现代码:
别瞎用系统环境,直接上虚拟环境或者 Docker;
Python 版本按项目来的,老项目就老老实实用 3.8;
以后写代码的时候要写requirements.txt;
多看看 issues,别人已经踩过的坑别再踩一遍了。
📦 最后,给未来的我一点建议
自己以后写项目,一定一定写清楚版本依赖!!!
requirement.txt 是最起码的尊重;
能 Docker 的项目就用 Docker;
别图省事,环境问题迟早会找上你;
复现老项目就别用太新的 Python 和 TensorFlow,省得掉坑里。