【已解决】​基于yolo3 与crnn 实现中文自然场景文字检测及识别chineseocr​的测试与跑通

前情提要

        今天来复现一下chineseocr,这个项目的话遇到的问题还很多,所以就慢慢说。

        项目地址:https://github.com/chineseocr/chineseocr

        项目简介:本项目基于yolo3 与crnn 实现中文自然场景文字检测及识别

        darknet 优化版本:https://github.com/chineseocr/darknet-ocr.git

        环境配置:python3.6,cuda11.8(此处需11.6即可),GPU:TITANXP,torch1.10,其他未尽事宜请在项目地址中自查。

        再复现上述项目的时候出现了以下错误,包括且不限于:

1、OSError: Unable to open file (unable to open file: name = '/media/visionx/monica/newproject/chineseocr/models/text.h5', errno = 2, error message = 'No such file or directory', flags = 0, o_flags = 0)

 2、AttributeError: 'str' object has no attribute 'decode'

3、fatal: 不是 git 仓库(或者任何父目录):.git  

        在后面也会单独把每个问题拆出来进行分析和解读,今天就在项目中做一个统一的解读。 

问题描述

        首先需要注意的是要依据项目的环境配置部分新建一个虚拟环境

conda create -n chineseocr python=3.6 pip scipy numpy jupyter ipython ##运用conda 创建python环境
source activate chineseocr
git submodule init && git submodule update
pip install easydict opencv-contrib-python==4.0.0.21 Cython h5py lmdb mahotas pandas requests bs4 matplotlib lxml -i https://pypi.tuna.tsinghua.edu.cn/simple/
pip install -U pillow -i https://pypi.tuna.tsinghua.edu.cn/simple/
pip install keras==2.1.5 tensorflow==1.8 tensorflow-gpu==1.8
pip install web.py==0.40.dev0 redis conda install pytorch torchvision -c pytorch

        其中 git submodule init && git submodule update这行代码也是会报错的:

fatal: 不是 git 仓库(或者任何父目录):.git 

        最后一行也是有问题的,应该从只执行conda install ***前面的部分就可以了。

        然后我的建议是conda install pytorch torchvision -c pytorch就不要执行了,而是执行:

pip install torch torchvision

        其实conda install 和pip install 都可以达到类似的效果,但是二者还是有些不同的,为了避免安装包的混乱,建议用pip来进行安装,具体内容参考我之前的一篇博客conda install 和pip install有什么区别?_conda -m pip install-CSDN博客

       错误一、OSError: Unable to open file (unable to open file: name = '/media/visionx/monica/newproject/chineseocr/models/text.h5', errno = 2, error message = 'No such file or directory', flags = 0, o_flags = 0)

        ok,我们继续往下看,当我们创建了虚拟环境之后,有趣的就来了,按理说直接执行就应该ok了,但是事实却不是这样:

        具体报错内容如下:

Traceback (most recent call last):
  File "/media/visionx/monica/newproject/chineseocr/app.py", line 46, in <module>
    from text.keras_detect import  text_detect
  File "/media/visionx/monica/newproject/chineseocr/text/keras_detect.py", line 20, in <module>
    textModel.load_weights(kerasTextModel)
  File "/home/visionx/anaconda3/envs/chineseocr/lib/python3.6/site-packages/tensorflow/python/keras/_impl/keras/engine/network.py", line 1184, in load_weights
    with h5py.File(filepath, 'r') as f:
  File "/home/visionx/anaconda3/envs/chineseocr/lib/python3.6/site-packages/h5py/_hl/files.py", line 427, in __init__
    swmr=swmr)
  File "/home/visionx/anaconda3/envs/chineseocr/lib/python3.6/site-packages/h5py/_hl/files.py", line 190, in make_fid
    fid = h5f.open(name, flags, fapl=fapl)
  File "h5py/_objects.pyx", line 54, in h5py._objects.with_phil.wrapper
  File "h5py/_objects.pyx", line 55, in h5py._objects.with_phil.wrapper
  File "h5py/h5f.pyx", line 96, in h5py.h5f.open
OSError: Unable to open file (unable to open file: name = '/media/visionx/monica/newproject/chineseocr/models/text.h5', errno = 2, error message = 'No such file or directory', flags = 0, o_flags = 0) 

        查看报错内容,是OSError,也就是说我们在进行OS的时候出现问题了!

        1、设备出现问题,无法正常OS

        2、文件出错 

        在结合报错信息之后我们发现,有一个name= '/media/visionx/monica/newproject/chineseocr/models/text.h5'文件导致了错误,而当我们进行查找的时候却没发现这样的文件:

        那怎么办,就去找name= '/media/visionx/monica/newproject/chineseocr/models/text.h5'这个文件呀 !

        1、找作者

        2、看看其他项目有没有

        3、找我

        实际上,这个在项目中的权重文件是可以找到的,如果找不到可以扣我。

        错误二、AttributeError: 'str' object has no attribute 'decode' 

        再继续往下面执行,发现又报错了

        具体报错内容如下:

Traceback (most recent call last):
  File "/media/visionx/monica/newproject/chineseocr/app.py", line 46, in <module>
    from text.keras_detect import  text_detect
  File "/media/visionx/monica/newproject/chineseocr/text/keras_detect.py", line 20, in <module>
    textModel.load_weights(kerasTextModel)
  File "/home/visionx/anaconda3/envs/chineseocr/lib/python3.6/site-packages/tensorflow/python/keras/_impl/keras/engine/network.py", line 1190, in load_weights
    saving.load_weights_from_hdf5_group(f, self.layers)
  File "/home/visionx/anaconda3/envs/chineseocr/lib/python3.6/site-packages/tensorflow/python/keras/_impl/keras/engine/saving.py", line 671, in load_weights_from_hdf5_group
    original_keras_version = f.attrs['keras_version'].decode('utf8')
AttributeError: 'str' object has no attribute 'decode' 

        可以看出来,是没有这个decode属性,我们找到出错的地方

        报错显示没这个属性,但是为什么会出现这个问题呢?代码又不是我写的,环境也是按照他的配置的,还是会报错 :

出现这个问题可能是两个原因造成的:
1、Python2和Python3在字符串编码上的区别
2、Python 3.4: str : AttributeError: ‘str’ object has no attribute 'decode
原因一的解决方法:
print (‘张俊’.encode(‘utf-8’). decode(‘utf-8’) ) #必须将字节字符串解码后才能打印出来
参考链接:https://www.cnblogs.com/geekard/archive/2012/10/04/python-string-endec.html
原因二的解决方法:各种编码方式尝试解决:utf-8,gbk,ISO-8859-1,gb2312
原因一才是主要原因,主要解决方法。

        这个时候还是不太确定是什么原因的,但有一点,在我们之前学习python的时候有一节编码和解码 【python学习过程--day9】python中的字符集、编码和解码、运算符-CSDN博客

        这个时候我们就明白了,在前面应该有一个编码的操作,但我们就需要全部看代码了,这样会比较麻烦,因为有的时候当我们不给其编码,也可以按照需要解码成一定的格式。原因很简单啊,ide有默认的编码格式! 

        在此,给出我的解决办法:将上面的代码改为下面的

  if 'keras_version' in f.attrs:
    original_keras_version = f.attrs['keras_version'].decode('utf8')
  else:
    original_keras_version = '1'
  if 'backend' in f.attrs:
    original_backend = f.attrs['backend'].decode('utf8')
  else:
    original_backend = None
将上面的代码改为下面的:  
  if 'keras_version' in f.attrs:
    original_keras_version = f.attrs['keras_version']
  else:
    original_keras_version = '1'
  if 'backend' in f.attrs:
    original_backend = f.attrs['backend']
  else:
    original_backend = None

        这个时候再运行就可以了!看个效果图:

        错误三、 fatal: 不是 git 仓库(或者任何父目录):.git  

        其实解决这个错误非常的简单,只需要执行一条命令即可!如下:

git init

相关链接 

conda install 和pip install有什么区别?_conda -m pip install-CSDN博客文章浏览阅读826次,点赞2次,收藏11次。本篇为分享贴,截图部分选自,部分选自,文字内容是结合自己实践进行总结。_conda -m pip installhttps://blog.csdn.net/BetrayFree/article/details/132115996?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522171284377716800213015438%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=171284377716800213015438&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_ecpm_v1~rank_v31_ecpm-1-132115996-null-null.nonecase&utm_term=pip%20install%20&spm=1018.2226.3001.4450【python学习过程--day9】python中的字符集、编码和解码、运算符-CSDN博客文章浏览阅读991次,点赞18次,收藏16次。当我们编译运行一个py文件(test.py)的时候,Python 编译器首先会对文件 test.py 进行读取,然后默认对数据进行 UTF-8 的解码,然后编译运行,程序跑了起来。我们知道,数据的解码和编码都是成对的,且需要采取相同的编码方式,否则解码的数据就会和原数据不一样…在计算机中,文本数据存储和传输时,需要将字符编码为字节序列,通常使用的编码方式有 UTF-8、UTF-16、ASCII 等。文件操作是 Python 编程中常用的功能之一,可以用于处理各种类型的文件,例如文本文件、二进制文件等。https://blog.csdn.net/BetrayFree/article/details/137386118?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522171284560416800225542777%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=171284560416800225542777&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_ecpm_v1~rank_v31_ecpm-1-137386118-null-null.nonecase&utm_term=%E7%BC%96%E7%A0%81&spm=1018.2226.3001.4450

完结撒花

        hi,新的一天,你好啊!


       

  • 25
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值