Merge branch 'dygraph' into android_demo
This commit is contained in:
commit
2f2d152c7a
|
@ -147,6 +147,7 @@ class MainWindow(QMainWindow, WindowMixin):
|
|||
self.itemsToShapesbox = {}
|
||||
self.shapesToItemsbox = {}
|
||||
self.prevLabelText = getStr('tempLabel')
|
||||
self.noLabelText = getStr('nullLabel')
|
||||
self.model = 'paddle'
|
||||
self.PPreader = None
|
||||
self.autoSaveNum = 5
|
||||
|
@ -1020,7 +1021,7 @@ class MainWindow(QMainWindow, WindowMixin):
|
|||
item.setText(str([(int(p.x()), int(p.y())) for p in shape.points]))
|
||||
self.updateComboBox()
|
||||
|
||||
def updateComboBox(self): # TODO:貌似没用
|
||||
def updateComboBox(self):
|
||||
# Get the unique labels and add them to the Combobox.
|
||||
itemsTextList = [str(self.labelList.item(i).text()) for i in range(self.labelList.count())]
|
||||
|
||||
|
@ -1040,7 +1041,7 @@ class MainWindow(QMainWindow, WindowMixin):
|
|||
return dict(label=s.label, # str
|
||||
line_color=s.line_color.getRgb(),
|
||||
fill_color=s.fill_color.getRgb(),
|
||||
points=[(p.x(), p.y()) for p in s.points], # QPonitF
|
||||
points=[(int(p.x()), int(p.y())) for p in s.points], # QPonitF
|
||||
# add chris
|
||||
difficult=s.difficult) # bool
|
||||
|
||||
|
@ -1069,7 +1070,7 @@ class MainWindow(QMainWindow, WindowMixin):
|
|||
# print('Image:{0} -> Annotation:{1}'.format(self.filePath, annotationFilePath))
|
||||
return True
|
||||
except:
|
||||
self.errorMessage(u'Error saving label data')
|
||||
self.errorMessage(u'Error saving label data', u'Error saving label data')
|
||||
return False
|
||||
|
||||
def copySelectedShape(self):
|
||||
|
@ -1802,7 +1803,11 @@ class MainWindow(QMainWindow, WindowMixin):
|
|||
result.insert(0, box)
|
||||
print('result in reRec is ', result)
|
||||
self.result_dic.append(result)
|
||||
if result[1][0] == shape.label:
|
||||
else:
|
||||
print('Can not recognise the box')
|
||||
self.result_dic.append([box,(self.noLabelText,0)])
|
||||
|
||||
if self.noLabelText == shape.label or result[1][0] == shape.label:
|
||||
print('label no change')
|
||||
else:
|
||||
rec_flag += 1
|
||||
|
@ -1836,9 +1841,14 @@ class MainWindow(QMainWindow, WindowMixin):
|
|||
print('label no change')
|
||||
else:
|
||||
shape.label = result[1][0]
|
||||
else:
|
||||
print('Can not recognise the box')
|
||||
if self.noLabelText == shape.label:
|
||||
print('label no change')
|
||||
else:
|
||||
shape.label = self.noLabelText
|
||||
self.singleLabel(shape)
|
||||
self.setDirty()
|
||||
print(box)
|
||||
|
||||
def autolcm(self):
|
||||
vbox = QVBoxLayout()
|
||||
|
|
|
@ -45,7 +45,7 @@ class Canvas(QWidget):
|
|||
CREATE, EDIT = list(range(2))
|
||||
_fill_drawing = False # draw shadows
|
||||
|
||||
epsilon = 11.0
|
||||
epsilon = 5.0
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
super(Canvas, self).__init__(*args, **kwargs)
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -87,6 +87,7 @@ creatPolygon=四点标注
|
|||
drawSquares=正方形标注
|
||||
saveRec=保存识别结果
|
||||
tempLabel=待识别
|
||||
nullLabel=无法识别
|
||||
steps=操作步骤
|
||||
choseModelLg=选择模型语言
|
||||
cancel=取消
|
||||
|
|
|
@ -77,7 +77,7 @@ IR=Image Resize
|
|||
autoRecognition=Auto Recognition
|
||||
reRecognition=Re-recognition
|
||||
mfile=File
|
||||
medit=Eidt
|
||||
medit=Edit
|
||||
mview=View
|
||||
mhelp=Help
|
||||
iconList=Icon List
|
||||
|
@ -87,6 +87,7 @@ creatPolygon=Create Quadrilateral
|
|||
drawSquares=Draw Squares
|
||||
saveRec=Save Recognition Result
|
||||
tempLabel=TEMPORARY
|
||||
nullLabel=NULL
|
||||
steps=Steps
|
||||
choseModelLg=Choose Model Language
|
||||
cancel=Cancel
|
||||
|
|
|
@ -32,7 +32,8 @@ PaddleOCR supports both dynamic graph and static graph programming paradigm
|
|||
|
||||
<div align="center">
|
||||
<img src="doc/imgs_results/ch_ppocr_mobile_v2.0/test_add_91.jpg" width="800">
|
||||
<img src="doc/imgs_results/ch_ppocr_mobile_v2.0/00018069.jpg" width="800">
|
||||
<img src="doc/imgs_results/multi_lang/img_01.jpg" width="800">
|
||||
<img src="doc/imgs_results/multi_lang/img_02.jpg" width="800">
|
||||
</div>
|
||||
|
||||
The above pictures are the visualizations of the general ppocr_server model. For more effect pictures, please see [More visualizations](./doc/doc_en/visualization_en.md).
|
||||
|
|
|
@ -118,7 +118,6 @@ class ArgsParser(ArgumentParser):
|
|||
return config
|
||||
|
||||
def _set_language(self, type):
|
||||
print("type:", type)
|
||||
lang = type[0]
|
||||
assert (type), "please use -l or --language to choose language type"
|
||||
assert(
|
||||
|
|
|
@ -40,6 +40,7 @@ endif()
|
|||
if (WIN32)
|
||||
include_directories("${PADDLE_LIB}/paddle/fluid/inference")
|
||||
include_directories("${PADDLE_LIB}/paddle/include")
|
||||
link_directories("${PADDLE_LIB}/paddle/lib")
|
||||
link_directories("${PADDLE_LIB}/paddle/fluid/inference")
|
||||
find_package(OpenCV REQUIRED PATHS ${OPENCV_DIR}/build/ NO_DEFAULT_PATH)
|
||||
|
||||
|
@ -140,22 +141,22 @@ else()
|
|||
endif ()
|
||||
endif()
|
||||
|
||||
# Note: libpaddle_inference_api.so/a must put before libpaddle_fluid.so/a
|
||||
# Note: libpaddle_inference_api.so/a must put before libpaddle_inference.so/a
|
||||
if(WITH_STATIC_LIB)
|
||||
if(WIN32)
|
||||
set(DEPS
|
||||
${PADDLE_LIB}/paddle/lib/paddle_fluid${CMAKE_STATIC_LIBRARY_SUFFIX})
|
||||
${PADDLE_LIB}/paddle/lib/paddle_inference${CMAKE_STATIC_LIBRARY_SUFFIX})
|
||||
else()
|
||||
set(DEPS
|
||||
${PADDLE_LIB}/paddle/lib/libpaddle_fluid${CMAKE_STATIC_LIBRARY_SUFFIX})
|
||||
${PADDLE_LIB}/paddle/lib/libpaddle_inference${CMAKE_STATIC_LIBRARY_SUFFIX})
|
||||
endif()
|
||||
else()
|
||||
if(WIN32)
|
||||
set(DEPS
|
||||
${PADDLE_LIB}/paddle/lib/paddle_fluid${CMAKE_SHARED_LIBRARY_SUFFIX})
|
||||
${PADDLE_LIB}/paddle/lib/paddle_inference${CMAKE_SHARED_LIBRARY_SUFFIX})
|
||||
else()
|
||||
set(DEPS
|
||||
${PADDLE_LIB}/paddle/lib/libpaddle_fluid${CMAKE_SHARED_LIBRARY_SUFFIX})
|
||||
${PADDLE_LIB}/paddle/lib/libpaddle_inference${CMAKE_SHARED_LIBRARY_SUFFIX})
|
||||
endif()
|
||||
endif(WITH_STATIC_LIB)
|
||||
|
||||
|
|
Binary file not shown.
After Width: | Height: | Size: 26 KiB |
|
@ -74,9 +74,10 @@ opencv3/
|
|||
|
||||
* 有2种方式获取Paddle预测库,下面进行详细介绍。
|
||||
|
||||
|
||||
#### 1.2.1 直接下载安装
|
||||
|
||||
* [Paddle预测库官网](https://www.paddlepaddle.org.cn/documentation/docs/zh/develop/guides/05_inference_deployment/inference/build_and_install_lib_cn.html)上提供了不同cuda版本的Linux预测库,可以在官网查看并选择合适的预测库版本。
|
||||
* [Paddle预测库官网](https://www.paddlepaddle.org.cn/documentation/docs/zh/advanced_guide/inference_deployment/inference/build_and_install_lib_cn.html)上提供了不同cuda版本的Linux预测库,可以在官网查看并选择合适的预测库版本(*建议选择paddle版本>=2.0.1版本的预测库* )。
|
||||
|
||||
* 下载之后使用下面的方法解压。
|
||||
|
||||
|
@ -130,8 +131,6 @@ build/paddle_inference_install_dir/
|
|||
其中`paddle`就是C++预测所需的Paddle库,`version.txt`中包含当前预测库的版本信息。
|
||||
|
||||
|
||||
|
||||
|
||||
## 2 开始运行
|
||||
|
||||
### 2.1 将模型导出为inference model
|
||||
|
@ -232,7 +231,7 @@ visualize 1 # 是否对结果进行可视化,为1时,会在当前文件夹
|
|||
最终屏幕上会输出检测结果如下。
|
||||
|
||||
<div align="center">
|
||||
<img src="../imgs/cpp_infer_pred_12.png" width="600">
|
||||
<img src="./imgs/cpp_infer_pred_12.png" width="600">
|
||||
</div>
|
||||
|
||||
|
||||
|
|
|
@ -91,8 +91,8 @@ tar -xf paddle_inference.tgz
|
|||
Finally you can see the following files in the folder of `paddle_inference/`.
|
||||
|
||||
#### 1.2.2 Compile from the source code
|
||||
* If you want to get the latest Paddle inference library features, you can download the latest code from Paddle github repository and compile the inference library from the source code.
|
||||
* You can refer to [Paddle inference library] (https://www.paddlepaddle.org.cn/documentation/docs/en/develop/guides/05_inference_deployment/inference/build_and_install_lib_en.html) to get the Paddle source code from github, and then compile To generate the latest inference library. The method of using git to access the code is as follows.
|
||||
* If you want to get the latest Paddle inference library features, you can download the latest code from Paddle github repository and compile the inference library from the source code. It is recommended to download the inference library with paddle version greater than or equal to 2.0.1.
|
||||
* You can refer to [Paddle inference library] (https://www.paddlepaddle.org.cn/documentation/docs/en/advanced_guide/inference_deployment/inference/build_and_install_lib_en.html) to get the Paddle source code from github, and then compile To generate the latest inference library. The method of using git to access the code is as follows.
|
||||
|
||||
|
||||
```shell
|
||||
|
@ -238,7 +238,7 @@ visualize 1 # Whether to visualize the results,when it is set as 1, The predic
|
|||
The detection results will be shown on the screen, which is as follows.
|
||||
|
||||
<div align="center">
|
||||
<img src="../imgs/cpp_infer_pred_12.png" width="600">
|
||||
<img src="./imgs/cpp_infer_pred_12.png" width="600">
|
||||
</div>
|
||||
|
||||
|
||||
|
|
|
@ -113,7 +113,7 @@ python3 generate_multi_language_configs.py -l it \
|
|||
| cyrillic_mobile_v2.0_rec | 斯拉夫字母 | [rec_cyrillic_lite_train.yml](../../configs/rec/multi_language/rec_cyrillic_lite_train.yml) |2.6M|[推理模型](https://paddleocr.bj.bcebos.com/dygraph_v2.0/multilingual/cyrillic_ppocr_mobile_v2.0_rec_infer.tar) / [训练模型](https://paddleocr.bj.bcebos.com/dygraph_v2.0/multilingual/cyrillic_ppocr_mobile_v2.0_rec_train.tar) |
|
||||
| devanagari_mobile_v2.0_rec | 梵文字母 | [rec_devanagari_lite_train.yml](../../configs/rec/multi_language/rec_devanagari_lite_train.yml) |2.6M|[推理模型](https://paddleocr.bj.bcebos.com/dygraph_v2.0/multilingual/devanagari_ppocr_mobile_v2.0_rec_infer.tar) / [训练模型](https://paddleocr.bj.bcebos.com/dygraph_v2.0/multilingual/devanagari_ppocr_mobile_v2.0_rec_train.tar) |
|
||||
|
||||
更多支持语种请参考: [多语言模型](https://github.com/PaddlePaddle/PaddleOCR/blob/release/2.1/doc/doc_ch/multi_languages.md#%E8%AF%AD%E7%A7%8D%E7%BC%A9%E5%86%99)
|
||||
更多支持语种请参考: [多语言模型](./multi_languages.md)
|
||||
|
||||
|
||||
<a name="文本方向分类模型"></a>
|
||||
|
|
|
@ -155,7 +155,7 @@ image = Image.open(img_path).convert('RGB')
|
|||
boxes = [line[0] for line in result]
|
||||
txts = [line[1][0] for line in result]
|
||||
scores = [line[1][1] for line in result]
|
||||
im_show = draw_ocr(image, boxes, txts, scores, font_path='/path/to/PaddleOCR/doc/korean.ttf')
|
||||
im_show = draw_ocr(image, boxes, txts, scores, font_path='/path/to/PaddleOCR/doc/fonts/korean.ttf')
|
||||
im_show = Image.fromarray(im_show)
|
||||
im_show.save('result.jpg')
|
||||
```
|
||||
|
@ -240,7 +240,7 @@ ppocr 支持使用自己的数据进行自定义训练或finetune, 其中识别
|
|||
|德文|german|german|
|
||||
|日文|japan|japan|
|
||||
|韩文|korean|korean|
|
||||
|中文繁体|chinese traditional |ch_tra|
|
||||
|中文繁体|chinese traditional |chinese_cht|
|
||||
|意大利文| Italian |it|
|
||||
|西班牙文|Spanish |es|
|
||||
|葡萄牙文| Portuguese|pt|
|
||||
|
@ -259,7 +259,6 @@ ppocr 支持使用自己的数据进行自定义训练或finetune, 其中识别
|
|||
|乌克兰文|Ukranian|uk|
|
||||
|白俄罗斯文|Belarusian|be|
|
||||
|泰卢固文|Telugu |te|
|
||||
|卡纳达文|Kannada |kn|
|
||||
|泰米尔文|Tamil |ta|
|
||||
|南非荷兰文 |Afrikaans |af|
|
||||
|阿塞拜疆文 |Azerbaijani |az|
|
||||
|
|
|
@ -111,7 +111,7 @@ python3 generate_multi_language_configs.py -l it \
|
|||
| cyrillic_mobile_v2.0_rec | Lightweight model for cyrillic recognition | [rec_cyrillic_lite_train.yml](../../configs/rec/multi_language/rec_cyrillic_lite_train.yml) |2.6M|[推理模型](https://paddleocr.bj.bcebos.com/dygraph_v2.0/multilingual/cyrillic_ppocr_mobile_v2.0_rec_infer.tar) / [训练模型](https://paddleocr.bj.bcebos.com/dygraph_v2.0/multilingual/cyrillic_ppocr_mobile_v2.0_rec_train.tar) |
|
||||
| devanagari_mobile_v2.0_rec | Lightweight model for devanagari recognition | [rec_devanagari_lite_train.yml](../../configs/rec/multi_language/rec_devanagari_lite_train.yml) |2.6M|[推理模型](https://paddleocr.bj.bcebos.com/dygraph_v2.0/multilingual/devanagari_ppocr_mobile_v2.0_rec_infer.tar) / [训练模型](https://paddleocr.bj.bcebos.com/dygraph_v2.0/multilingual/devanagari_ppocr_mobile_v2.0_rec_train.tar) |
|
||||
|
||||
For more supported languages, please refer to : [Multi-language model](https://github.com/PaddlePaddle/PaddleOCR/blob/release/2.1/doc/doc_en/multi_languages_en.md#4-support-languages-and-abbreviations)
|
||||
For more supported languages, please refer to : [Multi-language model](./multi_languages_en.md)
|
||||
|
||||
|
||||
<a name="Angle"></a>
|
||||
|
|
|
@ -153,7 +153,7 @@ image = Image.open(img_path).convert('RGB')
|
|||
boxes = [line[0] for line in result]
|
||||
txts = [line[1][0] for line in result]
|
||||
scores = [line[1][1] for line in result]
|
||||
im_show = draw_ocr(image, boxes, txts, scores, font_path='/path/to/PaddleOCR/doc/korean.ttf')
|
||||
im_show = draw_ocr(image, boxes, txts, scores, font_path='/path/to/PaddleOCR/doc/fonts/korean.ttf')
|
||||
im_show = Image.fromarray(im_show)
|
||||
im_show.save('result.jpg')
|
||||
```
|
||||
|
@ -232,7 +232,7 @@ For functions such as data annotation, you can read the complete [Document Tutor
|
|||
|german|german|
|
||||
|japan|japan|
|
||||
|korean|korean|
|
||||
|chinese traditional |ch_tra|
|
||||
|chinese traditional |chinese_cht|
|
||||
| Italian |it|
|
||||
|Spanish |es|
|
||||
| Portuguese|pt|
|
||||
|
@ -251,7 +251,6 @@ For functions such as data annotation, you can read the complete [Document Tutor
|
|||
|Ukranian|uk|
|
||||
|Belarusian|be|
|
||||
|Telugu |te|
|
||||
|Kannada |kn|
|
||||
|Tamil |ta|
|
||||
|Afrikaans |af|
|
||||
|Azerbaijani |az|
|
||||
|
|
Binary file not shown.
After Width: | Height: | Size: 107 KiB |
Binary file not shown.
After Width: | Height: | Size: 231 KiB |
14
paddleocr.py
14
paddleocr.py
|
@ -30,6 +30,7 @@ from ppocr.utils.logging import get_logger
|
|||
|
||||
logger = get_logger()
|
||||
from ppocr.utils.utility import check_and_read_gif, get_image_file_list
|
||||
from tools.infer.utility import draw_ocr
|
||||
|
||||
__all__ = ['PaddleOCR']
|
||||
|
||||
|
@ -117,7 +118,7 @@ model_urls = {
|
|||
}
|
||||
|
||||
SUPPORT_DET_MODEL = ['DB']
|
||||
VERSION = 2.1
|
||||
VERSION = '2.1'
|
||||
SUPPORT_REC_MODEL = ['CRNN']
|
||||
BASE_DIR = os.path.expanduser("~/.paddleocr/")
|
||||
|
||||
|
@ -315,14 +316,13 @@ class PaddleOCR(predict_system.TextSystem):
|
|||
|
||||
# init model dir
|
||||
if postprocess_params.det_model_dir is None:
|
||||
postprocess_params.det_model_dir = os.path.join(
|
||||
BASE_DIR, '{}/det/{}'.format(VERSION, det_lang))
|
||||
postprocess_params.det_model_dir = os.path.join(BASE_DIR, VERSION,
|
||||
'det', det_lang)
|
||||
if postprocess_params.rec_model_dir is None:
|
||||
postprocess_params.rec_model_dir = os.path.join(
|
||||
BASE_DIR, '{}/rec/{}'.format(VERSION, lang))
|
||||
postprocess_params.rec_model_dir = os.path.join(BASE_DIR, VERSION,
|
||||
'rec', lang)
|
||||
if postprocess_params.cls_model_dir is None:
|
||||
postprocess_params.cls_model_dir = os.path.join(
|
||||
BASE_DIR, '{}/cls'.format(VERSION))
|
||||
postprocess_params.cls_model_dir = os.path.join(BASE_DIR, 'cls')
|
||||
print(postprocess_params)
|
||||
# download model
|
||||
maybe_download(postprocess_params.det_model_dir,
|
||||
|
|
|
@ -96,7 +96,7 @@ class BaseRecLabelEncode(object):
|
|||
'ch', 'en', 'EN_symbol', 'french', 'german', 'japan', 'korean',
|
||||
'EN', 'it', 'xi', 'pu', 'ru', 'ar', 'ta', 'ug', 'fa', 'ur', 'rs',
|
||||
'oc', 'rsc', 'bg', 'uk', 'be', 'te', 'ka', 'chinese_cht', 'hi',
|
||||
'mr', 'ne'
|
||||
'mr', 'ne', 'latin', 'arabic', 'cyrillic', 'devanagari'
|
||||
]
|
||||
assert character_type in support_character_type, "Only {} are supported now but get {}".format(
|
||||
support_character_type, character_type)
|
||||
|
|
|
@ -28,7 +28,7 @@ class BaseRecLabelDecode(object):
|
|||
'ch', 'en', 'EN_symbol', 'french', 'german', 'japan', 'korean',
|
||||
'it', 'xi', 'pu', 'ru', 'ar', 'ta', 'ug', 'fa', 'ur', 'rs', 'oc',
|
||||
'rsc', 'bg', 'uk', 'be', 'te', 'ka', 'chinese_cht', 'hi', 'mr',
|
||||
'ne', 'EN'
|
||||
'ne', 'EN', 'latin', 'arabic', 'cyrillic', 'devanagari'
|
||||
]
|
||||
assert character_type in support_character_type, "Only {} are supported now but get {}".format(
|
||||
support_character_type, character_type)
|
||||
|
|
Loading…
Reference in New Issue