Python识别处理照片中的条形码

2020-11-17 0 134

最近一直在玩数独,突发奇想实现图像识别求解数独,输入到输出平均需要0.5s。

整体思路大概就是识别出图中数字生成list,然后求解。

输入输出demo

数独采用的是微软自带的Microsoft sudoku软件随便截取的图像,如下图所示:

Python识别处理照片中的条形码

经过程序求解后,得到的结果如下图所示:

Python识别处理照片中的条形码

def getFollow(varset, terminalset, first_dic, production_list):
    follow_dic = {}
    done = {}
    for var in varset:
        follow_dic[var] = set()
        done[var] = 0
    follow_dic[\"A1\"].add(\"#\")
    # for var in terminalset:
    #     follow_dic[var]=set()
    #     done[var] = 0
    for var in follow_dic:
        getFollowForVar(var, varset, terminalset, first_dic, production_list, follow_dic, done)
    return follow_dic
  
  
def getFollowForVar(var, varset, terminalset, first_dic, production_list, follow_dic, done):
    if done[var] == 1:
        return
    for production in production_list:
        if var in production.right:
            ##index这里在某些极端情况下有bug,比如多次出现var,index只会返回最左侧的
            if production.right.index(var) != len(production.right) - 1:
                follow_dic[var] = first_dic[production.right[production.right.index(var) + 1]] | follow_dic[var]
            # 没有考虑右边有非终结符但是为null的情况
            if production.right[len(production.right) - 1] == var:
                if var != production.left[0]:
                    # print(var, \"吸纳\", production.left[0])
                    getFollowForVar(production.left[0], varset, terminalset, first_dic, production_list, follow_dic,
                                    done)
                    follow_dic[var] = follow_dic[var] | follow_dic[production.left[0]]
  
    done[var] = 1

程序具体流程

程序整体流程如下图所示:

Python识别处理照片中的条形码

读入图像后,根据求解轮廓信息找到数字所在位置,以及不包含数字的空白位置,提取数字信息通过KNN识别,识别出数字;无数字信息的在list中置0;生成未求解数独list,之后求解数独,将信息在原图中显示出来。

def initProduction():
    production_list = []
    production = Production([\"A1\"], [\"A\"], 0)
    production_list.append(production)
    production = Production([\"A\"], [\"E\", \"I\", \"(\", \")\", \"{\", \"D\", \"}\"], 1)
    production_list.append(production)
    production = Production([\"E\"], [\"int\"], 2)
    production_list.append(production)
    production = Production([\"E\"], [\"float\"], 3)
    production_list.append(production)
    production = Production([\"D\"], [\"D\", \";\", \"B\"], 4)
    production_list.append(production)
    production = Production([\"B\"], [\"F\"], 5)
    production_list.append(production)
    production = Production([\"B\"], [\"G\"], 6)
    production_list.append(production)
    production = Production([\"B\"], [\"M\"], 7)
    production_list.append(production)
    production = Production([\"F\"], [\"E\", \"I\"], 8)
    production_list.append(production)
    production = Production([\"G\"], [\"I\", \"=\", \"P\"], 9)
    production_list.append(production)
    production = Production([\"P\"], [\"K\"], 10)
    production_list.append(production)
    production = Production([\"P\"], [\"K\", \"+\", \"P\"], 11)
    production_list.append(production)
    production = Production([\"P\"], [\"K\", \"-\", \"P\"], 12)
    production_list.append(production)
    production = Production([\"I\"], [\"id\"], 13)
    production_list.append(production)
    production = Production([\"K\"], [\"I\"], 14)
    production_list.append(production)
    production = Production([\"K\"], [\"number\"], 15)
    production_list.append(production)
    production = Production([\"K\"], [\"floating\"], 16)
    production_list.append(production)
    production = Production([\"M\"], [\"while\", \"(\", \"T\", \")\", \"{\", \"D\", \";\", \"}\"], 18)
    production_list.append(production)
    production = Production([\"N\"], [\"if\", \"(\", \"T\", \")\", \"{\", \"D\",\";\", \"}\", \"else\", \"{\", \"D\", \";\",\"}\"], 19)
    production_list.append(production)
    production = Production([\"T\"], [\"K\", \"L\", \"K\"], 20)
    production_list.append(production)
    production = Production([\"L\"], [\">\"], 21)
    production_list.append(production)
    production = Production([\"L\"], [\"<\"], 22)
    production_list.append(production)
    production = Production([\"L\"], [\">=\"], 23)
    production_list.append(production)
    production = Production([\"L\"], [\"<=\"], 24)
    production_list.append(production)
    production = Production([\"L\"], [\"==\"], 25)
    production_list.append(production)
    production = Production([\"D\"], [\"B\"], 26)
    production_list.append(production)
    production = Production([\"B\"], [\"N\"], 27)
    production_list.append(production)
    return production_list
 
 
source = [[5, \"int\", \" 关键字\"], [1, \"lexicalanalysis\", \" 标识符\"], [13, \"(\", \" 左括号\"], [14, \")\", \" 右括号\"], [20, \"{\", \" 左大括号\"],
          [4, \"float\", \" 关键字\"], [1, \"a\", \" 标识符\"], [15, \";\", \" 分号\"], [5, \"int\", \" 关键字\"], [1, \"b\", \" 标识符\"],
          [15, \";\", \" 分号\"], [1, \"a\", \" 标识符\"], [12, \"=\", \" 赋值号\"], [3, \"1.1\", \" 浮点数\"], [15, \";\", \" 分号\"], [1, \"b\", \" 标识符\"],
          [12, \"=\", \" 赋值号\"], [2, \"2\", \" 整数\"], [15, \";\", \" 分号\"], [8, \"while\", \"  关键字\"], [13, \"(\", \" 左括号\"],
          [1, \"b\", \" 标识符\"], [17, \"<\", \" 小于号\"], [2, \"100\", \" 整数\"], [14, \")\", \" 右括号\"], [20, \"{\", \" 左大括号\"],
          [1, \"b\", \" 标识符\"], [12, \"=\", \" 赋值号\"], [1, \"b\", \" 标识符\"], [9, \"+\", \" 加 号\"], [2, \"1\", \" 整数\"], [15, \";\", \" 分号\"],
          [1, \"a\", \" 标识符\"], [12, \"=\", \" 赋值号\"], [1, \"a\", \" 标识符\"], [9, \"+\", \" 加号\"], [2, \"3\", \" 整数\"], [15, \";\", \" 分号\"],
          [21, \"}\", \" 右大括号\"], [15, \";\", \" 分号\"], [6, \"if\", \" 关键字\"], [13, \"(\", \" 左括号\"], [1, \"a\", \" 标识符\"],
          [16, \">\", \" 大于号\"], [2, \"5\", \" 整数\"], [14, \")\", \" 右括号\"], [20, \"{\", \" 左大括号\"], [1, \"b\", \" 标识符\"],
          [12, \"=\", \" 赋值号\"], [1, \"b\", \" 标识符\"], [10, \"-\", \" 减号\"], [2, \"1\", \" 整数\"], [15, \";\", \" 分号\"], [21, \"}\", \" 右大括号\"],
          [7, \"else\", \" 关键字\"], [20, \"{\", \" 左大括号\"], [1, \"b\", \" 标识符\"], [12, \"=\", \" 赋值号\"], [1, \"b\", \" 标识符\"],
          [9, \"+\", \" 加号\"], [2, \"1\", \" 整数\"], [15, \";\", \" 分号\"], [21, \"}\", \" 右大括号\"], [21, \"}\", \" 右大括号\"]]

以上就是Python识别处理照片中的条形码的详细内容,更多关于python 识别条形码的资料请关注自学编程网其它相关文章!

遇见资源网 Linux Python识别处理照片中的条形码 http://www.ox520.com/29841.html

常见问题

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务