两年多之前我在“ex公司”的时候,有一个明确的项目需求是集装箱识别并计数,然后通过OCR识别出之前计数的每一个集装箱号,与其余业务系统的数据进行交换,以实现特定的整体需求。当时正好Tensorflow Object Detection API 发布了,就放弃了YOLO或者SSD的选项,考虑用TF实现Demo做POC验证了。
这两个目标检测的方法都很快,识别准确率也足够,之前确实考虑选其中之一来实现,但是想明白了这件事怎么做,也准备好了几千张图片准备验证的时候 Object Detection API 发布了,DL这种对未来影响深远的事情,选择一个最有可能成为大生态环境的平台就很重要了,Google虽然之前有“说关就关”的“前科”但是在我的理解,不论软件还是硬件层面,DL的inference能力就是未来的OS之上最重要的事情了,甚至可以理解为就是OS的一部分(比如SoC),所以,这事情Google任性可能性微乎其微,从这两年发展来看,Google对TF持续投入,而且做为“大厂”的标志之一似乎就是你有没有开源的DL相关工作。
之前已经放弃了短期内用NN实现OCR的考虑了,那么只能回到传统的机器学习的思路了,这就简单了,不用选了显然是考虑Tesseract了。那时候还是3.05版本,4.0的LSTM版本还没有正式发布,不敢用,Tesseract怎么训练可以参考我的这篇文章:使用Tesseract训练并识别集装箱号。到真正开干的时候,手头有大几千张集装箱图片,手动扣出来,再做点处理,凑个万把张集装箱号图片还是可以的,训练tesseract还是够用的,但是想都不用想,准确性超8成都不容易,原因是在这里Attention-based Extraction of Structured Information from Street View Imagery有这么一段话:
Disclaimer This code is a modified version of the internal model we used for our paper. Currently it reaches 83.79% full sequence accuracy after 400k steps of training. The main difference between this version and the version used in the paper - for the paper we used a distributed training with 50 GPU (K80) workers (asynchronous updates), the provided checkpoint was created using this code after ~6 days of training on a single GPU (Titan X) (it reached 81% after 24 hours of training), the coordinate encoding is disabled by default.