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

Jenna ·
更新时间:2024-09-21
· 570 次阅读

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

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

输入输出demo

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

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

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

程序具体流程

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

读入图像后,根据求解轮廓信息找到数字所在位置,以及不包含数字的空白位置,提取数字信息通过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 识别条形码的资料请关注软件开发网其它相关文章!

您可能感兴趣的文章:python批量生成条形码的示例通过python扫描二维码/条形码并打印数据使用python写的opencv实时监测和解析二维码和条形码Python识别快递条形码及Tesseract-OCR使用详解python3转换code128条形码的方法Python之ReportLab绘制条形码和二维码的实例python利用elaphe制作二维条形码实现代码如何使用 Python 读取文件和照片的创建日期Python 利用OpenCV给照片换底色的示例代码3行Python代码实现图像照片抠图和换底色的方法



条形码 Python

需要 登录 后方可回复, 如果你还没有账号请 注册新账号