游戏翻译工具截屏翻译工具源代码
# -*- coding: utf-8 -*-
"""
Created on Mon Jan 14 23:24:05 2019
截取屏幕英文单词并翻译
QQ群:476842922(欢迎加群讨论学习)
1.pip各种包
2.字典文件dictNewN.txt
3.有中午将出现错误(bug)
4.按F2键 开始截屏识别单词
@author: Administrator
"""
from PIL import ImageGrab
import re
import threading
import time
import sys, os
from PIL import Image
import pytesseract
from pynput.keyboard import Controller,Key,Listener
import wx
# 监听按压
def on_press(key):
try:
print("pressing:",format(key.char))
except AttributeError:
print("pressing:",format(key))
# 监听释放
def on_release(key):
print("release:",format(key))
if key==Key.esc:
# 停止监听
return False
if key==Key.f2:
frame.contrl.Clear()#clear screen
frame.contrl.AppendText("F2 key:Capture shot recognition...\n")
im = ImageGrab.grab()
# 参数 保存截图文件的路径
im.save('aaa.jpeg')
print("F2...F2")
#im = ImageGrab.grab()
#im.save('aaa.jpeg')
text=pytesseract.image_to_string(Image.open("aaa.jpeg"),lang='eng')
print(re.sub("[^A-Za-z0-9 ]","",text))
print("**!!!!!!!*****print(text)*********")
#print(text.replace('\n',' '))
print("=====================")
strSub=text.replace('\n',' ')
strWord=re.sub("[^A-Za-z0-9 ]","",strSub)
print("dic find word ..........^_^")
listOne=[]
s=strWord
print(s)
m=re.sub("[^A-Za-z0-9 .]","",s)
print(m)
m=m.replace("."," ")
print("******************")
m=m.lower()#转换为小写
listOne=m.split(" ")
print(listOne)
print(len(listOne))#list have word number.len()
file00 = open("C:\\Users\\Administrator\\dictNewN.txt", "r")
WordLog = open('Log.txt','a+')#record words.....
content = file00.read()
content.strip()
list00 = content.splitlines()# 按照行('\r', '\r\n', \n')分隔,返回一个包含各行作为元素的列表
dict00 = {}
for i in list00:
list01 = i.split(" ")#将单词key与解释(值)加入字典
for j in range(len(list01) - 1):
if list01[j]:
dict00[list01[j]] = list01[-1]#添加元素
for i in range(len(listOne)):
if listOne[i] in dict00:
print(listOne[i]+"->"+dict00[listOne[i]])
#frame.textctrl.SetDefaultStyle(wx.TextAttr("RED"))
if dict00[listOne[i]].find("n.")!=-1:
frame.contrl.SetDefaultStyle(wx.TextAttr(wx.RED))
elif dict00[listOne[i]].find("v.")!=-1:
frame.contrl.SetDefaultStyle(wx.TextAttr(wx.YELLOW))
elif dict00[listOne[i]].find("adv.")!=-1:
frame.contrl.SetDefaultStyle(wx.TextAttr(wx.GREEN))
elif dict00[listOne[i]].find("adj.")!=-1:
frame.contrl.SetDefaultStyle(wx.TextAttr(wx.BLUE))
else:
frame.contrl.SetDefaultStyle(wx.TextAttr(wx.BLACK))
frame.contrl.AppendText(listOne[i]+"->"+dict00[listOne[i]]+"\n")
WordLog.write(listOne[i]+"->"+dict00[listOne[i]]+"\n")
else:
print(listOne[i]+"->"+"no find it.")
#frame.contrl.AppendText(listOne[i]+"->"+"no find it."+"\n") #建议不打印了
#frame.contrl.AppendText(strWord)
# 开始监听
def start_listen():
with Listener(on_press=on_press,on_release=on_release) as listener:
listener.join()
def ListenKey():
kb=Controller()# 实例化键盘
start_listen() # 开始监听,按esc退出监听
class MainWindow(wx.Frame):
"""We simply derive a new class of Frame."""
def __init__(self,parent,title):
wx.Frame.__init__(self,parent,title=title,size=(250,600))
self.contrl= wx.TextCtrl(self,style=wx.TE_MULTILINE|wx.TE_WORDWRAP|wx.TE_READONLY|wx.TE_RICH2|wx.STAY_ON_TOP)
#self.contrl.AppendText("appended text")
self.SetTransparent(200)#set Transparent.....
#self.SetWindowStyle(wx.STAY_ON_TOP)#
self.Show(show=True)
app = wx.App(False)
frame = MainWindow(None,"Kingdoms and Castles Game plug")
#frame.Show(show=True)
t=threading.Thread(target=ListenKey)
t.start()
app.MainLoop()