python识别文字坐标_【Python 教程】使用 Python 和大漠插件进行文字识别
家里有一臺win7系統(tǒng)的電腦,平時可以用來玩玩游戲消磨時間。但是有時候有一些重復(fù)的操作實(shí)在是無趣,所以打算寫個腳本,讓其自動化執(zhí)行。
最終的目標(biāo)就是把游戲里一些常用的操作都集合到腳本中去,且無序隨機(jī)執(zhí)行,模擬真人操作。點(diǎn)擊此處查看原文。
大漠插件介紹
因?yàn)槭褂玫氖荳indows系統(tǒng),所以好多工作之前已經(jīng)有大佬完成了。幾年前使用過按鍵精靈的同學(xué)一定對大漠插件不陌生,其功能之強(qiáng)大,可以用來完成很多操作。
從文檔可以看出,功能實(shí)在太多了,覆蓋了方方面面。我基本使用到的就是圖片識別,文字識別,鍵鼠操作等,最強(qiáng)大的功能莫過于后臺操作,也就是窗口最小化時不影響鼠標(biāo)鍵盤的操作。想象一下,游戲在后臺自動執(zhí)行,前臺繼續(xù)做工作,互不干擾。
我現(xiàn)在需要做的就是將大漠插件使用python而不是按鍵精靈讓其工作,因?yàn)榘存I精靈這類軟件很容易被查出來。
文字識別
圖像轉(zhuǎn)文字需要三個步驟。
拿到圖片
二值化
使用字庫進(jìn)行識別
當(dāng)這三步完成的時候,文字順理成章就被識別出來了。
使用大漠插件的好處是每次識別不需要將識別的圖片保存到本地,而是給定屏幕上的范圍就可以識別了。
現(xiàn)在我們按步驟操作一波。
拿到圖片,獲取偏色列表
我們需要識別這張圖片中的“3”,“0”,“/”,“2”,“7”。
使用大漠偏色計(jì)算器計(jì)算偏色。
具體步驟是:
先抓圖,獲取圖片
識別數(shù)字。將鼠標(biāo)移到需要識別的數(shù)字的顏色部分(例如這個圖片背景是棕色,文字是黑色,將鼠標(biāo)移到黑色部分,稍后的二值化就是將黑色部分突出顯示)。
點(diǎn)擊“根據(jù)顏色列表的第一個和RGB顏色偏差添加顏色到顏色列表”,會自動生成多個顏色。
點(diǎn)擊計(jì)算偏色。
二值化預(yù)覽區(qū)應(yīng)該可以清晰的看到我們需要識別的數(shù)字了。
具體順序可以配合著這張圖:
如果你覺得識別后的文字還不夠清晰,可以自己修改顏色列表。
這一步操作我們需要拿到偏色列表:514C45-2B2926。這個偏色列表之后用處非常大。
使用大漠綜合工具新建或編輯字庫
二值化顯示的結(jié)果,程序還是不認(rèn)識“3”或“0”,需要我們告訴程序,“3”這個字符對應(yīng)的是數(shù)字3,這樣當(dāng)我們之后識別字符,程序再遇到“3”樣子的字符就會返回3這個數(shù)字。
提取點(diǎn)陣并定義文字,將識別后的結(jié)果與我們想要的結(jié)果做對應(yīng),然后添加到字庫。
簡單描述我們的操作是:
使用浮動抓圖功能,在桌面上找到需要識別的范圍
在第一行RGB,偏色輸入剛才的偏色列表
點(diǎn)擊提取點(diǎn)陣(多個)
打開或新建字庫(txt文件)
定義文字(然后回車)
配合圖片解釋一波:
需要注意的是在提取點(diǎn)陣的時候彈出一個對話框,直接按確認(rèn)就可以。
如果遇到一個預(yù)覽結(jié)果顯示多個字符,兩個字符被認(rèn)為是一個字符的情況,可能是偏色列表不夠嚴(yán)謹(jǐn),重新在判斷偏色吧。
預(yù)覽結(jié)果是“0”,那么就在定義文字一欄輸入0,回車,這樣就做了對應(yīng),并保存到字庫中了。
重復(fù)以上操作,把需要識別的字符都做對應(yīng)。當(dāng)然我介紹的是對于游戲中一些特殊字符,系統(tǒng)無法識別需要自己做對應(yīng)。大漠插件有提供系統(tǒng)字體的字庫,也比較豐富,不一定必須自己造字庫。
配合python返回識別結(jié)果
前面做了這么多工作,說到底還是為了python做準(zhǔn)備。
使用32的python
如果你的電腦里已經(jīng)有了python,不好意思,可能需要重裝。因?yàn)檎{(diào)用大漠插件只能使用python 32位的,不限制python2或3。我使用的是python3.7版本的32位。64位會報錯。
安裝pywin32庫
安裝好32位的python后,安裝pywin32庫來操作大漠插件。
命令行輸入pip install pywin32,等待安裝完成。
注冊大漠插件
下載好大漠插件壓縮包后,需要注冊大漠插件。
在dm.dll文件的同目錄中,使用管理員權(quán)限在cmd里執(zhí)行:
regsvr32 dm.dll
完成注冊。
demo
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import win32com.client
class DmBase(object):
def __init__(self):
# 調(diào)用大漠插件
self.dm = win32com.client.Dispatch("dm.dmsoft")
# 設(shè)定字庫文件,建議在初始化中調(diào)用,比較耗時
self.dm.setDict(0, "C:\\Users\\Li\\Desktop\\help\\data\\num.txt")
# 使用字庫
self.dm.useDict(0)
def ocr(self, x1, y1, x2, y2, color_format, sim=0.9):
"""
文字識別
- Args:
x1 (int): 左上x
y1 (int): 左上y
x2 (int): 右下x
y2 (int): 右下y
color_format (str): 偏色列表
sim (float): 相似度,范圍 0.1-1.0
- Return:
識別的字符串
"""
return self.dm.Ocr(x1, y1, x2, y2, color_format, sim)
這樣就完成了python調(diào)用大漠插件識別文字的操作。
總結(jié)
以上是生活随笔為你收集整理的python识别文字坐标_【Python 教程】使用 Python 和大漠插件进行文字识别的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python识别图像上的文字
- 下一篇: linux内核不能识别u盘分区,一种在L