TensorFlow CTPN Demo Windows 无痛搭建
一原材料
- PyCharm
下载地址: http://www.jetbrains.com/pycharm/ - TensorFlow
安装教程移步至: https://blog.youkuaiyun.com/yx123919804/article/details/84111774 - CTPN源码
下载地址: https://github.com/eragonruan/text-detection-ctpn/releases
把下图中框的两个文件下载到本地, 解压源代码
解压后如图, 强迫症的你还是把名字改一下吧, 如改成 text-detection-ctpn-untagged
打开 text-detection-ctpn-untagged 里面的 requirements.txt 看看里面需要哪些库, 在 Anaconda Prompt 里或者 Anaconda 中安装上, 可以都安装最新版本, 如果不先安装, 可以像下面填坑那样安装
二. 运行步骤
- 用 PyCharm 打开工程
- 设置工程的解释器, File->Settings 打开设置窗口, 将解释器设置成安装有 Tensorflow的Environment 中的 python.exe
- 打开 demo_pb.py, 定位点 main 函数位置
- 好, 现在可以点 main 前面的三角形, 选择 Debug ‘demo_pb’ 运行一下试试看
坑1: 第 1 个坑来了
意思是没有 easydict 这个库, 那我们就把它安装上, 在 Anaconda Prompt 中激活 Environment, 输入 pip install easydict 后回车, 很快就可以安装好
- 安装完成后, 点下图所示的地方停止 Debug
停止后就可以点下图框中的 “小虫子”(就是所谓的 bug) 开始调试了, 试一下
坑2: 坑 Again
说没有 ctpn/text.yml 这个东东, 那我们就再填一下, 在 def cfg_from_file(filename): 函数后面看到了传进来的参数是 ‘ctpn/text.yml’, 但是这个路径不存在, 我们看工程目录中明明有这个文件的
出现这个问题是因为 demo_pb 和 text 在同一个文件夹下. 意思是当前目录在 cptn 这个文件夹, main 函数中的 cfg_from_file 调用传入的参数是 ‘ctpn/text.yml’. 但是当前目录 cptn 下没有 cptn 文件夹了, 所以会出错
将参数改成 text.yml 停止后再重新点 “小虫子” 试试看
坑3: 坑又来, 说没有 data/ctpn.pb 这个路径
再填, 是否已经注意到工程目录下多了个 data\results 的路径
把上面下载的 ctpn.pb 放到 ctpn\data 文件夹中
坑4: 停止后再 Debug 一下看看, 果然坑不断, ‘str’ object has no attribute ‘decode’
这个坑是因为编码的问题,将 lib\rpn_msr\propsol_layer_tf.py 的 45 行 cfg_key=cfg_key.decode(‘ascii’) 改成 cfg_key=cfg_key.encode(‘ascii’).decode(‘ascii’)
坑5: 再停止点 “小虫子”, 还会出现下图的小坑
上图的红框中的路径有一个明显的错误, 所以问题是出现在 open 函数的参数, 路径的拼接不正确, 看 29 行, base_name = image_name.split(‘/’)[-1], 是这句话出了问题, 在 Windows下, 路径是以 ‘\’ 分割的, 所以在分割字符串的时候, 分割符要用 ‘\’, 将 split(‘/’) 改成 split(‘\\’) 就好了, 注意是两个杠, 因为 ‘\’ 是转意字符, 如下图
现在, 所有的坑已经填好, 再停止, Debug, 可以看到正常运行了
在 cptn\data\result 中可以看到运行结果
有一点不好的是, 倾斜的字符标记框也是正的, 所以要想检测倾斜的字, 将 text.yml 中第 36 行中DETECT_MODE: H 改成 DETECT_MODE: O(字母 O, 不是数字 0)
改完后运行结果如下
三. 检测自己的图片
将图片放到…\data\demo中就可以了, 注意不要有中文, 不要有中文, 不要有中文
四. 使用 GPU
如果你电脑安装了 GPU 版的 Tensorflow, 会自动用 GPU 运行, 但是, 如果你的显存比较小, 会出现显存不足的情况, 如果出现了, 就要限制 GPU 的使用率, 打开 demo_pb.py, 按下图修改
以上, 所有坑填完