登录
首页 >  Golang >  Go问答

我可以使用什么策略来 OCR Magic the Gathering 角文本?

来源:stackoverflow

时间:2024-04-04 12:39:34 189浏览 收藏

来到golang学习网的大家,相信都是编程学习爱好者,希望在这里学习Golang相关编程知识。下面本篇文章就来带大家聊聊《我可以使用什么策略来 OCR Magic the Gathering 角文本?》,介绍一下,希望对大家的知识积累有所帮助,助力实战开发!

问题内容

我需要识别万智牌纸卡(最后的设计)左下角的文本。这是一个例子:

如果文字是这样的 我想检索以下文本:

198/280 U
M20 EN

(本例中我不需要卡片作者姓名 - lake hurwitz)

我可以使用什么 ocr 库?我尝试过在没有任何调整的情况下使用 tesseract,但结果不正确。有什么建议或链接到已经做这些事情的项目吗?


解决方案


您可以通过稍微清理图像来使用 tesseract (3.04.01) 来实现它 就像下面的代码

import numpy as np
import cv2

def prepro(zone, prefix):
    filename = 'stackmagic.png'
    oriimg = cv2.imread(filename)

    #keep the interesting part
    (a,b,c,d) = zone
    text_zone = oriimg[a:b, c:d]
    height, width, depth = text_zone.shape

    #resize it to be bigger (so less pixelized)
    h = 50
    imgscale = h/height
    newx,newy = text_zone.shape[1]*imgscale, text_zone.shape[0]*imgscale
    newimg = cv2.resize(text_zone,(int(newx),int(newy)))

    #binarize it
    gray = cv2.cvtcolor(newimg, cv2.color_bgr2gray)
    th, img = cv2.threshold(gray, 130, 255, cv2.thresh_binary);

    #erode it
    kernel = np.ones((1,1),np.uint8)
    erosion = cv2.erode(img,kernel,iterations = 1)
    cv2.imwrite(prefix+'_ero.png', erosion)

    cv2.imshow("show by cv2",erosion)
    cv2.waitkey(0)


prepro((16,27, 6,130), 'upzone')
prepro((27,36, 6,130), 'downzone')

来自您的cropped image 你得到

上半部分:

和下半部分:

并且 tesseract 似乎确实能够提取

xx$ tesseract upzone_ero.png stdout
198/ 280 U

xx$ tesseract downzone_ero.png stdout
M20 ~ EN Duluu Hun-nu

请注意,我们未能提取卢克,但希望您对他/它不感兴趣:)

还有其他工具,但那是广告内容并且是主观的..

以上就是本文的全部内容了,是否有顺利帮助你解决问题?若是能给你带来学习上的帮助,请大家多多支持golang学习网!更多关于Golang的相关知识,也可关注golang学习网公众号。

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>