Python識別處理照片中的條形碼
最近一直在玩數獨,突發奇想實現圖像識別求解數獨,輸入到輸出平均需要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 識別條形碼的資料請關注好吧啦網其它相關文章!
相關文章:
