Open jiaoxiaosong opened 4 years ago
我想用c++部署,怎么弄了?
------------------ 原始邮件 ------------------ 发件人: "ouyanghuiyu"<notifications@github.com>; 发送时间: 2020年4月29日(星期三) 下午3:52 收件人: "ouyanghuiyu/chineseocr_lite"<chineseocr_lite@noreply.github.com>; 抄送: "伱ê承諾的愛"<872909437@qq.com>;"Author"<author@noreply.github.com>; 主题: Re: [ouyanghuiyu/chineseocr_lite] 可以用opencv加载模型吗 (#132)
我自己没试过,转onnx是没问题的
— You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub, or unsubscribe.
opencv4.3.0加载dbnet onnx模型报错。 cv2.error: OpenCV(4.3.0) C:\projects\opencv-python\opencv\modules\dnn\src\dnn.cpp:3290: error: (-215:Assertion failed) total(os[i]) > 0 in function 'cv::dnn::dnn4_v20200310::Net::Impl::getLayerShapesRecursively'
不知道有人opencv加载尝试成功了没有
我想用c++部署,怎么弄了? … ------------------ 原始邮件 ------------------ 发件人: "ouyanghuiyu"<notifications@github.com>; 发送时间: 2020年4月29日(星期三) 下午3:52 收件人: "ouyanghuiyu/chineseocr_lite"<chineseocr_lite@noreply.github.com>; 抄送: "伱ê承諾的愛"<872909437@qq.com>;"Author"<author@noreply.github.com>; 主题: Re: [ouyanghuiyu/chineseocr_lite] 可以用opencv加载模型吗 (#132) 我自己没试过,转onnx是没问题的 — You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub, or unsubscribe.
C++配置onnx吧
我自己没试过,转onnx是没问题的
有试过C++配置onnx后之后加载吗?我能加载且能出结果,但是结果不对
我自己没试过,转onnx是没问题的
有试过C++配置onnx后之后加载吗?我能加载且能出结果,但是结果不对
问题解决了 感谢大佬的参考资料
@amandazw 我遇到 类似问题,你是怎么解决的啊? 我操作如下
通过如下代码导出onnx模型 ` output_onnx = 'crnn_lite_vertical_lstm_v2.onnx'
input_names = ["input"]
output_names = ["out"]
inputs = torch.randn(1, 1, 32, 277).to(self.device)
torch.onnx._export(net, inputs, output_onnx, export_params=True, verbose=False, input_names=input_names,
output_names=output_names, keep_initializers_as_inputs=True, opset_version=11)`
接着使用 onnxsim转化下
python -m onnxsim crnn_lite_vertical_lstm_v2.onnx crnn_lite_vertical_lstm_v2_sim.onnx
使用如下代码推理
`cv_text_net = cv2.dnn.readNetFromONNX("./model/crnn_lite_vertical_lstm_v2_sim.onnx")
//simPred = crnn_handle.predict(partImg_) ##识别的文本
image = resizeNormalize1(partImg_, 32)
image = image.astype(np.float32)
image = np.array([[image]])
cv_text_net.setInput(image)
preds = cv_text_net.forward()`
cv::dnn::dnn4_v20200310::Net::Impl::getLayerShapesRecursively OPENCV/DNN: [Reshape]:(71): getMemoryShapes() throws exception. inputs=1 outputs=1/1 blobs=0
cv::dnn::dnn4_v20200310::Net::Impl::getLayerShapesRecursively input[0] = [ 1 512 1 108 ]
cv::dnn::dnn4_v20200310::Net::Impl::getLayerShapesRecursively output[0] = [ ]
cv::dnn::dnn4_v20200310::Net::Impl::getLayerShapesRecursively Exception message: OpenCV(4.3.0) C:\projects\opencv-python\opencv\modules\dnn\src\layers\reshape_layer.cpp:113: error: (-215:Assertion failed) total(srcShape, srcRange.start, srcRange.end) == maskTotal in function
用opencv不行,用ncnn, 作者已经给出代码了
------------------ 原始邮件 ------------------ 发件人: "ouyanghuiyu/chineseocr_lite" <notifications@github.com>; 发送时间: 2020年7月28日(星期二) 上午10:53 收件人: "ouyanghuiyu/chineseocr_lite"<chineseocr_lite@noreply.github.com>; 抄送: "伱ê承諾的愛"<872909437@qq.com>;"Author"<author@noreply.github.com>; 主题: Re: [ouyanghuiyu/chineseocr_lite] 可以用opencv加载模型吗 (#132)
@amandazw 我遇到 类似问题,你是怎么解决的啊? 我操作如下
通过如下代码导出onnx模型 output_onnx = 'crnn_lite_vertical_lstm_v2.onnx' input_names = ["input"] output_names = ["out"] inputs = torch.randn(1, 1, 32, 277).to(self.device) torch.onnx._export(net, inputs, output_onnx, export_params=True, verbose=False, input_names=input_names, output_names=output_names, keep_initializers_as_inputs=True, opset_version=11)
接着使用 onnxsim转化下
python -m onnxsim crnn_lite_vertical_lstm_v2.onnx crnn_lite_vertical_lstm_v2_sim.onnx
使用如下代码推理
cv_text_net = cv2.dnn.readNetFromONNX("./model/crnn_lite_vertical_lstm_v2_sim.onnx") //simPred = crnnhandle.predict(partImg) ##识别的文本 image = resizeNormalize1(partImg_, 32) image = image.astype(np.float32) image = np.array([[image]]) cv_text_net.setInput(image) preds = cv_text_net.forward()
最后错误如下
cv::dnn::dnn4_v20200310::Net::Impl::getLayerShapesRecursively OPENCV/DNN: [Reshape]:(71): getMemoryShapes() throws exception. inputs=1 outputs=1/1 blobs=0 cv::dnn::dnn4_v20200310::Net::Impl::getLayerShapesRecursively input[0] = [ 1 512 1 108 ] cv::dnn::dnn4_v20200310::Net::Impl::getLayerShapesRecursively output[0] = [ ] cv::dnn::dnn4_v20200310::Net::Impl::getLayerShapesRecursively Exception message: OpenCV(4.3.0) C:\projects\opencv-python\opencv\modules\dnn\src\layers\reshape_layer.cpp:113: error: (-215:Assertion failed) total(srcShape, srcRange.start, srcRange.end) == maskTotal in function 'cv::dnn::computeShapeByReshapeMask'
— You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub, or unsubscribe.
能分享一下吗?
------------------ 原始邮件 ------------------ 发件人: "ouyanghuiyu/chineseocr_lite" <notifications@github.com>; 发送时间: 2020年7月28日(星期二) 上午10:57 收件人: "ouyanghuiyu/chineseocr_lite"<chineseocr_lite@noreply.github.com>; 抄送: "伱ê承諾的愛"<872909437@qq.com>;"Author"<author@noreply.github.com>; 主题: Re: [ouyanghuiyu/chineseocr_lite] 可以用opencv加载模型吗 (#132)
opencv可以 已经跑通了
— You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub, or unsubscribe.
opencv可以 已经跑通了
opencv跑通,要怎么处理啊?
抱歉记错了。是用的C++和onnxruntime部署的。检测用的是author的dbnet.onnx,识别用的是ocr-lstm.pth转onnx。
抱歉记错了。是用的C++和onnxruntime部署的。检测用的是author的dbnet.onnx,识别用的是ocr-lstm.pth转onnx。
谢了
我想用c++部署,怎么弄了? … ------------------ 原始邮件 ------------------ 发件人: "ouyanghuiyu"<notifications@github.com>; 发送时间: 2020年4月29日(星期三) 下午3:52 收件人: "ouyanghuiyu/chineseocr_lite"<chineseocr_lite@noreply.github.com>; 抄送: "伱ê承諾的愛"<872909437@qq.com>;"Author"<author@noreply.github.com>; 主题: Re: [ouyanghuiyu/chineseocr_lite] 可以用opencv加载模型吗 (#132) 我自己没试过,转onnx是没问题的 — You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub, or unsubscribe. 请教 c++部署能分享一下吗?
我自己没试过,转onnx是没问题的
有试过C++配置onnx后之后加载吗?我能加载且能出结果,但是结果不对
问题解决了 感谢大佬的参考资料
抱歉记错了。是用的C++和onnxruntime部署的。检测用的是author的dbnet.onnx,识别用的是ocr-lstm.pth转onnx。
请教具体的过程,3Q
我自己没试过,转onnx是没问题的
有试过C++配置onnx后之后加载吗?我能加载且能出结果,但是结果不对
问题解决了 感谢大佬的参考资料
抱歉记错了。是用的C++和onnxruntime部署的。检测用的是author的dbnet.onnx,识别用的是ocr-lstm.pth转onnx。
请教具体的过程,3Q
先把C++里的onnxruntime配置好,这个就跟配置opencv是一样的。博主的文字检测模型有dbnet,可以直接加载。文字识别模型需要将ocr-lstm.pth这个模型转为onnx,这个网上有很多教程。转完用onnxruntime加载就好了,整个过程需要改动代码的地方不多,还是很容易实现的。
opencv可以 已经跑通了
opencv跑通,要怎么处理啊?
兄弟windows下opencv+C++跑通了。用opencv4加载onnx模型,我用的是opencv4.4.0。文字检测之前已经转成onnx了,直接用opencv加载没有问题。文字识别的crnn模型用的是ocr-lstm.pth这个,直接从pytorch模型转成onnx,转换方法参考下面这个链接里的方法: https://github.com/opencv/opencv/pull/16941 转换过程中可能会有模型节点名称不对或者shape不对的问题,百度和参考https://github.com/chineseocr/chineseocr/blob/app/crnn/network_torch.py 这个链接里的CRNN结构,就可以转换成opencv可加载的onnx模型。
用opencv不行,用ncnn, 作者已经给出代码了 … ------------------ 原始邮件 ------------------ 发件人: "ouyanghuiyu/chineseocr_lite" <notifications@github.com>; 发送时间: 2020年7月28日(星期二) 上午10:53 收件人: "ouyanghuiyu/chineseocr_lite"<chineseocr_lite@noreply.github.com>; 抄送: "伱ê承諾的愛"<872909437@qq.com>;"Author"<author@noreply.github.com>; 主题: Re: [ouyanghuiyu/chineseocr_lite] 可以用opencv加载模型吗 (#132) @amandazw 我遇到 类似问题,你是怎么解决的啊? 我操作如下 通过如下代码导出onnx模型 output_onnx = 'crnn_lite_vertical_lstm_v2.onnx' input_names = ["input"] output_names = ["out"] inputs = torch.randn(1, 1, 32, 277).to(self.device) torch.onnx._export(net, inputs, output_onnx, export_params=True, verbose=False, input_names=input_names, output_names=output_names, keep_initializers_as_inputs=True, opset_version=11) 接着使用 onnxsim转化下 python -m onnxsim crnn_lite_vertical_lstm_v2.onnx crnn_lite_vertical_lstm_v2_sim.onnx 使用如下代码推理 cv_text_net = cv2.dnn.readNetFromONNX("./model/crnn_lite_vertical_lstm_v2_sim.onnx") //simPred = crnnhandle.predict(partImg) ##识别的文本 image = resizeNormalize1(partImg_, 32) image = image.astype(np.float32) image = np.array([[image]]) cv_text_net.setInput(image) preds = cv_text_net.forward() 最后错误如下 cv::dnn::dnn4_v20200310::Net::Impl::getLayerShapesRecursively OPENCV/DNN: [Reshape]:(71): getMemoryShapes() throws exception. inputs=1 outputs=1/1 blobs=0 cv::dnn::dnn4_v20200310::Net::Impl::getLayerShapesRecursively input[0] = [ 1 512 1 108 ] cv::dnn::dnn4_v20200310::Net::Impl::getLayerShapesRecursively output[0] = [ ] cv::dnn::dnn4_v20200310::Net::Impl::getLayerShapesRecursively Exception message: OpenCV(4.3.0) C:\projects\opencv-python\opencv\modules\dnn\src\layers\reshape_layer.cpp:113: error: (-215:Assertion failed) total(srcShape, srcRange.start, srcRange.end) == maskTotal in function 'cv::dnn::computeShapeByReshapeMask' — You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub, or unsubscribe.
可以的用这个方法转onnx https://github.com/opencv/opencv/pull/16941
文本检测可以用c++吗?
---原始邮件--- 发件人: "amandazw"<notifications@github.com> 发送时间: 2020年9月10日(周四) 晚上6:41 收件人: "ouyanghuiyu/chineseocr_lite"<chineseocr_lite@noreply.github.com>; 抄送: "Author"<author@noreply.github.com>;"jiaoxiaosong"<872909437@qq.com>; 主题: Re: [ouyanghuiyu/chineseocr_lite] 可以用opencv加载模型吗 (#132)
我自己没试过,转onnx是没问题的
有试过C++配置onnx后之后加载吗?我能加载且能出结果,但是结果不对
问题解决了 感谢大佬的参考资料
抱歉记错了。是用的C++和onnxruntime部署的。检测用的是author的dbnet.onnx,识别用的是ocr-lstm.pth转onnx。
请教具体的过程,3Q
先把C++里的onnxruntime配置好,这个就跟配置opencv是一样的。博主的文字检测模型有dbnet,可以直接加载。文字识别模型需要将ocr-lstm.pth这个模型转为onnx,这个网上有很多教程。转完用onnxruntime加载就好了,整个过程需要改动代码的地方不多,还是很容易实现的。
— You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub, or unsubscribe.
文本检测可以用c++吗? … ---原始邮件--- 发件人: "amandazw"<notifications@github.com> 发送时间: 2020年9月10日(周四) 晚上6:41 收件人: "ouyanghuiyu/chineseocr_lite"<chineseocr_lite@noreply.github.com>; 抄送: "Author"<author@noreply.github.com>;"jiaoxiaosong"<872909437@qq.com>; 主题: Re: [ouyanghuiyu/chineseocr_lite] 可以用opencv加载模型吗 (#132) 我自己没试过,转onnx是没问题的 有试过C++配置onnx后之后加载吗?我能加载且能出结果,但是结果不对 问题解决了 感谢大佬的参考资料 抱歉记错了。是用的C++和onnxruntime部署的。检测用的是author的dbnet.onnx,识别用的是ocr-lstm.pth转onnx。 请教具体的过程,3Q 先把C++里的onnxruntime配置好,这个就跟配置opencv是一样的。博主的文字检测模型有dbnet,可以直接加载。文字识别模型需要将ocr-lstm.pth这个模型转为onnx,这个网上有很多教程。转完用onnxruntime加载就好了,整个过程需要改动代码的地方不多,还是很容易实现的。 — You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub, or unsubscribe.
可以
我自己没试过,转onnx是没问题的