chineseocr / darknet-ocr

darknet text detect and darknet cnn ocr
MIT License
1.14k stars 287 forks source link

win10下关于ocr问题 #31

Open w-Bro opened 4 years ago

w-Bro commented 4 years ago

win10下CPU模式,python3.6.5,已编译cpu版makefile

请问CPU模式下,config.py设置GPU为False,是否需要修改ocr.py第19行 if 1: 为 if gpu: ???

若不修改,调用predict_darknet 和 predict_cpu均无任何输出,无报错信息,程序就直接结束 image

若修改,输出结果均为乱码,如下图。 image

jnkr36 commented 4 years ago

我也遇到同样的问题 如果是用最大的chinese的模型,不用chinese-5k的话,在ocrNet = cv2.dnn.readNetFromDarknet(ocrPath.replace('.weights', '.cfg'), ocrPath)这里还会报错

deeroad commented 4 years ago

win10下CPU模式,python3.6.5,已编译cpu版makefile

请问CPU模式下,config.py设置GPU为False,是否需要修改ocr.py第19行 if 1: 为 if gpu: ???

若不修改,调用predict_darknet 和 predict_cpu均无任何输出,无报错信息,程序就直接结束 image

若修改,输出结果均为乱码,如下图。 image

请问你那边Win10编译用的Cygwin还是Vc编译AlexeyAB/darknet?

jnkr36 commented 4 years ago

@deeroad 用cygwin 参考#28 https://blog.csdn.net/qq_31290747/article/details/80800415

wenlihaoyu commented 4 years ago

修改 ocr.py line 11 ,改为utf-8,windows默认应该不是utf-8,造成字符乱码

w-Bro commented 4 years ago

@wenlihaoyu 肯定改过了。不改会报错的。是改的utf-8。

def read_characters():
    p= ocrPath.replace('.weights','.json')
    if os.path.exists(p):
        with open(p, encoding='utf-8')  as f:
            characters = json.loads(f.read())
        return characters
    else:
        return ''
w-Bro commented 4 years ago

@deeroad 我用的cygwin编译的。乱码不知道是不是这个编译的原因。如果你试了其它的编译成功且运行正常的话麻烦告诉我一下喔。

w-Bro commented 4 years ago

还是windows下的问题。我用centos是正常的

deeroad commented 4 years ago

我用CPU模式(OpenCV)在Win10和Ubuntu 18.4都是乱码。 Ubuntu使用darknet cpu(gcc编译)的话提交图片后程序会崩溃,并且没有提示。

deeroad commented 4 years ago

经测试,目前版本的opencv是无效的,各种系统都是乱码,用darknet可以正常运行。 而且一定要编译darknet GPU版,CPU版慢的没法用。

wenlihaoyu commented 4 years ago

@deeroad 确定你Ubuntu 18.4是否支持中文且是否是utf-8导入程序,什么叫opencv不可用。不要用windows的记事本打开.json,一打开,文件编码就改变了。

wenlihaoyu commented 4 years ago

image image 哪里是乱码,CPU模式哪里速度很慢?确定问题,首先检查是不是自己的问题。

wenlihaoyu commented 4 years ago

运行此项目,请确保有一定的python基础,确保能够在各种python版本上进行灵活更改。

deeroad commented 4 years ago

image image 哪里是乱码,CPU模式哪里速度很慢?确定问题,首先检查是不是自己的问题。

CPU=False 运行后识别出来的文字是乱码; CPU=True 识别文字正常。 所以肯定不是读取编码的问题。

wenlihaoyu commented 4 years ago

@deeroad “还有就是别说其他有的没的,搞得自己很牛逼一样” ???请不要带这样批判的语气,没有人义务给你解决任何问题,您如果觉得不好,可以选择不用。

wenlihaoyu commented 4 years ago

首先确保下载的模型权重文件与模型配置文件是否一致,模型文件是否下载完整,如出现问题,可以将下载的文件MD5发出,可以协助解决问题。每个OCR模型下都有一个对应的cfg文件,模型加载权重不会检查权重是否与出错,如果错误的加载其他模型权重(比如用日语模型的权重加载到中文模型),那么识别出来肯定就是乱码。库里面已经存在cfg文件,只需要下载权重文件即可。另外,该项目是在python3.6环境下开发,系统:OSX、ubuntu14、ubuntu18,其他python版本或者系统可能需要修改部分代码。

w-Bro commented 4 years ago

@wenlihaoyu 谢谢回答。模型应该是没问题的,我原样拷贝到centos运行是正常的。

  1. 修改ocr.py的内容如下: 一个编码,一个if GPU ` def read_characters(): p= ocrPath.replace('.weights','.json') if os.path.exists(p): with open(p, encoding='utf-8') as f: characters = json.loads(f.read()) return characters else: return ''

charactersPred = ' '+read_characters()+'| ' if GPU: from dnn.darknet import load_net,predict_image,array_to_image ocrNet = load_net(ocrPath.replace('.weights','.cfg').encode(),ocrPath.encode(), 0) else: print(ocrPath.replace('.weights','.cfg')) ocrNet = cv2.dnn.readNetFromDarknet(ocrPath.replace('.weights','.cfg'),ocrPath)

`

以及ocr.py的main方法修改内容为:

if __name__=='__main__': t =time.time() img=Image.open('../test/test.png') res = predict_cpu(img) print(time.time()-t,res)

  1. 2.1 因为是在子文件夹下运行ocr.py,故修改config.py的模型路径和libdarknet.so的路径为绝对路径,模型选择的是chinese 2.2 GPU改为False

运行ocr.py,报错如下: image 看报错信息是opencv不支持relu激活函数。 我也看了opencv源码 if(activation != "linear" && activation != "leaky") CV_Error(cv::Error::StsParseError, "Unsupported activation: " + activation); 确实是只支持linear和leaky,chinese模型下的ocr.cfg我看了下配置的激活函数是relu。 改用chinese-5k会出现和我最开始提issue的截图一样乱码。 所以还是想请问下是否是我做的修改有误,整个项目只做了以上两处更改。 运行环境:win10、python3.6.5。谢谢

wenlihaoyu commented 4 years ago

ocr dnn版本需要修改opencv源码编译(修改setMaxpool),这部分代码目前未上传。因为darknet不支持stride=2,1这种形式,默认窗口是正方形而不是矩形。所以模型推测环节就会出现乱码。你们应该是修改ocr.py文件,将“if 1:” 改为了:"if GPU",没有修改opencv源码编译,不要修改此处。要支持relu也要修改opencv源码。后面整理好会上传,不过也只会支持linux系统,不会支持windows。

xialei2821212670 commented 4 years ago

win10下CPU模式,python3.6.5,已编译cpu版makefile

请问CPU模式下,config.py设置GPU为False,是否需要修改ocr.py第19行if 1:为if gpu:???

若不修改,调用predict_darknet和predict_cpu均无任何输出,无报错信息,程序就直接结束 图片

若修改,输出结果预设乱码,如下图。 图片 你好,您是否调通了windows gpu的ocr ,可以发我一份?

w-Bro commented 4 years ago

win10下CPU模式,python3.6.5,已编译cpu版makefile 请问CPU模式下,config.py设置GPU为False,是否需要修改ocr.py第19行if 1:为if gpu:??? 若不修改,调用predict_darknet和predict_cpu均无任何输出,无报错信息,程序就直接结束 图片 若修改,输出结果预设乱码,如下图。 图片 你好,您是否调通了windows gpu的ocr ,可以发我一份?

没有gpu,cpu也没有调通,最后还是换了centos。实在想在windows下跑可以用作者的chineseocr。

xialei2821212670 commented 4 years ago

win10下CPU模式,python3.6.5,已编译cpu版makefile请问 CPU模式下,config.py设置GPU为False,是否需要修改ocr.py第19行if 1:为if gpu:???? 不修改,调用predict_darknet和predict_cpu均无任何输出,无报错信息,程序就直接结束 若修改,输出结果顺序乱码,如下图。 你好,您是否调通了windows gpu的ocr,可以发我一份? 图片 图片

没有gpu,cpu也没有调通,最后还是换了centos。实在想在windows下跑可以用作者的chineseocr。

GPU版本centos跑通了?

w-Bro commented 4 years ago

win10下CPU模式,python3.6.5,已编译cpu版makefile请问 CPU模式下,config.py设置GPU为False,是否需要修改ocr.py第19行if 1:为if gpu:???? 不修改,调用predict_darknet和predict_cpu均无任何输出,无报错信息,程序就直接结束 若修改,输出结果顺序乱码,如下图。 你好,您是否调通了windows gpu的ocr,可以发我一份? 图片 图片

没有gpu,cpu也没有调通,最后还是换了centos。实在想在windows下跑可以用作者的chineseocr。

GPU版本centos跑通了?

都说了没有GPU了呀,没有GPU可以试。LINUX环境下应该都是没有问题的。

xialei2821212670 commented 4 years ago

win10下CPU模式,python3.6.5,已编译cpu版makefile请问 CPU模式下,config.py设置GPU为False,是否需要修改ocr.py第19行if 1:为if gpu:???? 不修改,调用predict_darknet和predict_cpu均无任何输出,无报错信息,程序就直接结束 若修改,输出结果顺序乱码,如下图。 你好,您是否调通了windows gpu的ocr,可以发我一份? 图片 图片

没有gpu,cpu也没有调通,最后还是换了centos。实在想在windows下跑可以用作者的chineseocr。

GPU版本centos跑通了?

都说了没有GPU了呀,没有GPU可以试。LINUX环境下应该都是没有问题的。

可以发我一份?unbutu下我cpu都有问题

w-Bro commented 4 years ago

win10下CPU模式,python3.6.5,已编译cpu版makefile请问 CPU模式下,config.py设置GPU为False,是否需要修改ocr.py第19行if 1:为if gpu:???? 不修改,调用predict_darknet和predict_cpu均无任何输出,无报错信息,程序就直接结束 若修改,输出结果顺序乱码,如下图。 你好,您是否调通了windows gpu的ocr,可以发我一份? 图片 图片

没有gpu,cpu也没有调通,最后还是换了centos。实在想在windows下跑可以用作者的chineseocr。

GPU版本centos跑通了?

都说了没有GPU了呀,没有GPU可以试。LINUX环境下应该都是没有问题的。

可以发我一份?unbutu下我cpu都有问题

代码一样的,cpu下要单独编译opencv,我发给你也没用。参考作者的另外一个仓库opencv-for-darknet,照着做就好啦。