PaddlePaddle / PaddleOCR

Awesome multilingual OCR toolkits based on PaddlePaddle (practical ultra lightweight OCR system, support 80+ languages recognition, provide data annotation and synthesis tools, support training and deployment among server, mobile, embedded and IoT devices)
https://paddlepaddle.github.io/PaddleOCR/
Apache License 2.0
44.37k stars 7.83k forks source link

新增需求征集(Collect Feature Request) #10334

Closed shiyutang closed 5 months ago

shiyutang commented 1 year ago

我们将这个Issue 保持开放状态,以收集用户的功能请求并听取您的声音。我们的发布计划将在不同的问题上进行更新。

在这个Issue中,您可以:

  1. 通过发表评论来建议新功能。
  2. 使用 👍 投票支持功能请求,或者使用 👎 反对。 (请记住,我们也许无法响应所有功能请求,因此请投票给您最喜欢的功能请求!)
  3. 如果你也愿意参加代码贡献,欢迎参与我们的活动 #10223。
  4. 我们会在上述活动的技术研讨会中对需求进行讨论,如果想要参与讨论你觉得重要的需求,欢迎加入上述活动微信群。

We keep this issue open to collect feature requests from users and hear your voice. Our release plan will be updated on different issues.

In this issue, you can either:

  1. Suggest a new feature by leaving a comment.
  2. Vote for a feature request with 👍 or be against it with 👎. (Remember that developers are busy and cannot respond to all feature requests, so vote for your most favorable one!)
  3. Tell us that you would like to help implement one of the features in the list or review the PRs. Welcome to participate in our activity #10223(This is the greatest thing to hear about! )
  4. Join the above WeChat group in the activity link if you want to discuss the new features with us
shiyutang commented 1 year ago

需求描述:提供参数接口,传入仅需识别的部分字符(比如仅数字、仅个别英文字母等),避免识别为其他相似字符(比如数字1和i,数字0和字母O……) 需求场景: 在特定范围识别时,准确性低(比如生产手写数字数据识别不准) 潜在解决方案:个人通过修改后处理过程已经实现了相关功能,但使用不方便: 修改rec_postprocess.py文件中的class CTCLabelDecode(BaseRecLabelDecode): 思路:在所有字符概率中,挑选出我们关心的字符概率,在挑选之后看哪个概率最大……

def __call__(self, preds, label=None, *args, **kwargs):
        if isinstance(preds, tuple) or isinstance(preds, list):
            preds = preds[-1]
        if isinstance(preds, paddle.Tensor):
            preds = preds.numpy()
        '''
        limit_char_list = list("0123456789")  # 这里仅识别阿拉伯数字,根据情况增加小数点或其他字符
        limit_char_list.append("blank")  # 必须增加空值【此项是self.character中的第一项,必须加上!!】
        # limit_char_list.append(" ")  # 这行应该没有太大影响
        # 获取要识别的字符(比如0-9)在整个字符集self.character中的位置Index
        char_ind = [self.character.index(char) for char in limit_char_list]
        # [26, 93, 25, 94, 632, 631, 933, 29, 27, 1109, 0] 不连续的,和chinese_dict.txt中的次序不一样!
        # 从preds结果中筛选出我们需要识别字符的概率数据
        my_preds=preds[:,:,char_ind]
        # 获取my_preds中的最大概率和对应索引及概率值
        my_preds_idx = my_preds.argmax(axis=2)  # 注意返回的最大概率序号是mypreds中的序号,也是limit_char_list中的序号,不是preds中的序号
        preds_prob = my_preds.max(axis=2)
        # 将序号列表中自定义字符中的次序修改为self.character中的次序
        preds_idx = np.empty(shape=preds_prob.shape)
        for i,row in enumerate(my_preds_idx):
            preds_idx[i,:] = [ char_ind[j] for j in row ]
        preds_idx = preds_idx.astype(int)

        '''
        preds_idx = preds.argmax(axis=2)   #若仅识别特定字符,将上面的块注释去掉,并注释掉这行
        preds_prob = preds.max(axis=2)     #若仅识别特定字符,将上面的块注释去掉,并注释掉这行

看上去你已经实现了相关功能,请问为什么使用不方便呢? 欢迎给我们贡献相关代码。

HansBug commented 1 year ago

请求新增针对给定图片的语言进行判定的模型。例如对于包含日文的图判定为japanese、对包含俄语的图判定为russian,对于只包含中英的图判定为cn_en

这个特性的实际意义是,在进行ocr任务的时候,可以对检测到的区域的语言进行判定,以便自动选用合适的文本识别模型,这样即可比较优雅地完成针对任意多语言的ocr任务。

当然,更进一步,可以针对给定的图片进行进一步的拆分,将各个子区域的语言均给出预测,这样甚至可以做到对复杂的多语言混合内容(比如日语、俄语、中文、英文混合的情况)进行准确地识别。

BTW:实际上直接训练一个支持现有主要语言的检测和识别模型也同样可以解决此问题。

gitcnbubble commented 1 year ago

需求描述:提供参数接口,传入仅需识别的部分字符(比如仅数字、仅个别英文字母等),避免识别为其他相似字符(比如数字1和i,数字0和字母O……) 需求场景: 在特定范围识别时,准确性低(比如生产手写数字数据识别不准) 潜在解决方案:个人通过修改后处理过程已经实现了相关功能,但使用不方便: 修改rec_postprocess.py文件中的class CTCLabelDecode(BaseRecLabelDecode): 思路:在所有字符概率中,挑选出我们关心的字符概率,在挑选之后看哪个概率最大……

def __call__(self, preds, label=None, *args, **kwargs):
        if isinstance(preds, tuple) or isinstance(preds, list):
            preds = preds[-1]
        if isinstance(preds, paddle.Tensor):
            preds = preds.numpy()
        '''
        limit_char_list = list("0123456789")  # 这里仅识别阿拉伯数字,根据情况增加小数点或其他字符
        limit_char_list.append("blank")  # 必须增加空值【此项是self.character中的第一项,必须加上!!】
        # limit_char_list.append(" ")  # 这行应该没有太大影响
        # 获取要识别的字符(比如0-9)在整个字符集self.character中的位置Index
        char_ind = [self.character.index(char) for char in limit_char_list]
        # [26, 93, 25, 94, 632, 631, 933, 29, 27, 1109, 0] 不连续的,和chinese_dict.txt中的次序不一样!
        # 从preds结果中筛选出我们需要识别字符的概率数据
        my_preds=preds[:,:,char_ind]
        # 获取my_preds中的最大概率和对应索引及概率值
        my_preds_idx = my_preds.argmax(axis=2)  # 注意返回的最大概率序号是mypreds中的序号,也是limit_char_list中的序号,不是preds中的序号
        preds_prob = my_preds.max(axis=2)
        # 将序号列表中自定义字符中的次序修改为self.character中的次序
        preds_idx = np.empty(shape=preds_prob.shape)
        for i,row in enumerate(my_preds_idx):
            preds_idx[i,:] = [ char_ind[j] for j in row ]
        preds_idx = preds_idx.astype(int)

        '''
        preds_idx = preds.argmax(axis=2)   #若仅识别特定字符,将上面的块注释去掉,并注释掉这行
        preds_prob = preds.max(axis=2)     #若仅识别特定字符,将上面的块注释去掉,并注释掉这行

看上去你已经实现了相关功能,请问为什么使用不方便呢? 欢迎给我们贡献相关代码。

需要来回注释代码,个人再去改命令行的代码改动的位置可能有点多,能力有限,代码效率不一定好;建议官方增加一个命令行参数,传入仅需要识别的字符(字符串或者类似dict.txt字典文件的样子)这样来用更方便。 此外,个人根据调试信息,仅修改的CTCLabelDecode类里面的代码,该文件中还有其他相似的类应该也可以进行类似调整,但那些类在什么时候调用不清楚,还没有吃透整体的程序处理流程

tzhang2014 commented 1 year ago

基于昆仑芯R200适配PaddleOCR

anbo724 commented 1 year ago

建议增加新增字符的功能,因为有很多场景会有一些特殊字符或者语言,这样可以提高ppocr的可用性

你好,新增字符的方式需要重新加入新的字典和数据,并对模型进行finetune。

你好,使用新增数据进行增量训练之后,模型本身的识别能力会严重下降吗?

ZhouBay-TF commented 1 year ago

识别后的文字根据原文恢复排版,去除拍照造成的同一行字Y轴不同的现象。

shiyutang commented 1 year ago

建议增加新增字符的功能,因为有很多场景会有一些特殊字符或者语言,这样可以提高ppocr的可用性

你好,新增字符的方式需要重新加入新的字典和数据,并对模型进行finetune。

你好,使用新增数据进行增量训练之后,模型本身的识别能力会严重下降吗?

可以微调,减少轮数/学习率, 不会过于严重

shiyutang commented 1 year ago

识别后的文字根据原文恢复排版,去除拍照造成的同一行字Y轴不同的现象。

我们已经支持返回单字识别的坐标了,可以基于这个https://github.com/PaddlePaddle/PaddleOCR/pull/10515 ,使用自己的字体恢复了。

ZhouBay-TF commented 1 year ago

识别后的文字根据原文恢复排版,去除拍照造成的同一行字Y轴不同的现象。

我们已经支持返回单字识别的坐标了,可以基于这个#10515 ,使用自己的字体恢复 非常感谢,我去试试

Arlen-yuzu commented 1 year ago

需求描述:PPOCRLabel工具在表格结构识别标注的功能中,增加对单元格标注框类别class label的标注功能 需求场景:给表格标注增加单元格类别标注 潜在解决方案(问题分解):改进PPOCRLabel工具

CassieFeng commented 1 year ago

https://github.com/PaddlePaddle/PaddleOCR/issues/10404 ,这个issue看回复说登记到需求池里面了,点击进来没看到,再update一下~

需求描述:KIE (SER和RE两个任务)支持长度大于512的文档infer 需求场景:很多图片的文字内容长度都超过512这个范围限制了,希望能支持该功能,或者是否现在有其他替换方案

wangxu372848892 commented 1 year ago

需求描述:c++版本tensorRT的demo每次运行都要大量时间构建trt-engine,期望提供一个临时cache文件夹,固化保存 需求场景: trt方案中,进程重启的场景 潜在解决方案(问题分解):fastDeploy中提供了trt_engine的cache路径。

chang50961471 commented 1 year ago

带文字的图像矫正模型,可以矫正任意角度的图片

wzz981 commented 1 year ago

需求描述:针对文本检测在行列方向遇到离得近的文本可能更会检测成同一区域文本,大多数文档的表格中的单元格文字可能在行方向的文本之间的距离比在列方向的文本离得还远,那么就会出现把列方向的文本检测为同一区域文本。希望文本检测模型能分开行检测和列检测模型。 image

需求场景(这个需求可以解决哪些应用场景的问题): 大多数存在表格的文档图像,比如户口本、发票、驾驶证等 潜在解决方案(问题分解):文本检测模型分别微调出行检测和列检测模型。

AugensternDu commented 11 months ago

需求描述: 返回单字符坐标。 需求场景: 文档比对。

请问现在有技术去实现吗

zjp99 commented 10 months ago

范例: 需求描述:支持工业场景文本识别,主要是背景复杂,字体边界容易有背景干扰,也就是说字体分割无法和背景清晰分出 需求场景(这个需求可以解决哪些应用场景的问题):工业零件上字体识别,新生产的字体清晰,但维修或者旧的不清晰 潜在解决方案(问题分解):负责背景识别

linjson commented 10 months ago

需求描述:希望能在apple m2上可以完全运行

chch9907 commented 9 months ago

需求描述:自然场景下的繁体字识别(chinese_cht_PP-OCRv3对于一些自然场景中的文字识别的不够准确) 需求场景:繁体字地区自然场景下的繁体字识别,如路牌、店铺名称等。

icdcg commented 8 months ago

需求描述:基于C#预测引擎推理部署 需求场景:各类基于.Net平台的项目中,能够方便的调用模型进行识别工作 潜在解决方案(问题分解):使用C#语言编写一个推理部署的样例项目。

He110te4m commented 8 months ago

需求描述:国际化切换后文本布局对比。 需求场景(这个需求可以解决哪些应用场景的问题): 网站进行语言切换后,识别排版是否混乱,如文本溢出、高度溢出等异常场景,与无头浏览器结合为国际化测试解决方案。 潜在解决方案(问题分解):对页面截图进行文本区域检测,对比文本区域数量、文本区域的大小。

AnitaSherry commented 6 months ago

不知道是什么语种的时候希望加一个自动识别语言的多语言模型