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


Posted in Python onNovember 16, 2020

最近一直在玩数独,突发奇想实现图像识别求解数独,输入到输出平均需要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 识别条形码的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
Python 检查数组元素是否存在类似PHP isset()方法
Oct 14 Python
用virtualenv建立多个Python独立虚拟开发环境
Jul 06 Python
python 移除字符串尾部的数字方法
Jul 17 Python
selenium3+python3环境搭建教程图解
Dec 07 Python
Python计算库numpy进行方差/标准方差/样本标准方差/协方差的计算
Dec 28 Python
使用Python求解带约束的最优化问题详解
Feb 11 Python
Python基于进程池实现多进程过程解析
Apr 30 Python
Python实现寻找回文数字过程解析
Jun 09 Python
Python3爬虫mitmproxy的安装步骤
Jul 29 Python
python eventlet绿化和patch原理
Nov 21 Python
完美解决torch.cuda.is_available()一直返回False的玄学方法
Feb 06 Python
python基础之//、/与%的区别详解
Jun 10 Python
Python将list元素转存为CSV文件的实现
Nov 16 #Python
python list等分并从等分的子集中随机选取一个数
Nov 16 #Python
Python大批量搜索引擎图像爬虫工具详解
Nov 16 #Python
详解Python中list[::-1]的几种用法
Nov 16 #Python
使用Pytorch搭建模型的步骤
Nov 16 #Python
Python图像读写方法对比
Nov 16 #Python
python3中编码获取网页的实例方法
Nov 16 #Python
You might like
全国FM电台频率大全 - 25 云南省
2020/03/11 无线电
PHP中的函数嵌套层数限制分析
2011/06/13 PHP
php页面缓存ob系列函数介绍
2012/10/18 PHP
PHP中substr()与explode()函数用法分析
2014/11/24 PHP
Yii2语言国际化的配置教程
2018/08/19 PHP
Javascript实现的分页函数
2007/02/07 Javascript
使用PHP+JQuery+Ajax分页的实现
2013/04/23 Javascript
jQuery插件slick实现响应式移动端幻灯片图片切换特效
2015/04/12 Javascript
jQuery插件jcrop+Fileapi完美实现图片上传+裁剪+预览的代码分享
2015/04/22 Javascript
实现非常简单的js双向数据绑定
2015/11/06 Javascript
jQuery动态添加可拖动元素完整实例(附demo源码下载)
2016/06/21 Javascript
[原创]jQuery常用的4种加载方式分析
2016/07/25 Javascript
详解angularjs结合pagination插件实现分页功能
2017/02/10 Javascript
微信小程序实现图片上传功能
2018/05/28 Javascript
实例分析编写vue组件方法
2019/02/12 Javascript
微信小程序自定义底部弹出框动画
2020/11/18 Javascript
[01:45]2014DOTA2 TI预选赛预选赛 战前探营!
2014/05/21 DOTA
python3.0 字典key排序
2008/12/24 Python
python实现多线程暴力破解登陆路由器功能代码分享
2015/01/04 Python
深入浅析python 中的匿名函数
2018/05/21 Python
python基础梳理(一)(推荐)
2019/04/06 Python
python 求定积分和不定积分示例
2019/11/20 Python
Jupyter notebook设置背景主题,字体大小及自动补全代码的操作
2020/04/13 Python
Python发送邮件实现基础解析
2020/08/14 Python
利用 Canvas实现绘画一个未闭合的带进度条的圆环
2019/07/26 HTML / CSS
英国婴儿及儿童产品商店:TigerParrot
2019/03/04 全球购物
本科毕业生求职自荐信
2014/02/03 职场文书
计算机网络专业自荐书
2014/06/09 职场文书
毕业生求职信
2014/06/10 职场文书
立志成才演讲稿
2014/09/04 职场文书
学校运动会报道稿
2014/09/23 职场文书
世界地球日活动总结
2015/02/09 职场文书
高三化学教学反思
2016/02/22 职场文书
Mysql MVCC机制原理详解
2021/04/20 MySQL
SpringBoot生成License的实现示例
2021/06/16 Java/Android
关于React Native使用axios进行网络请求的方法
2021/08/02 Javascript