此次大家选取的安卓游戏对象叫“单词英豪”,咱们能够先下载这一个娱乐。

前不久在玩一款背单词的手机游戏-单词铁汉,是一个将背单词和ACT类游戏相结合的25日游,通过挑选正确的单词意思进行中用攻击,边玩游戏就把单词给背了。
  游戏的分界面是这么的:

教你用Python写安卓游戏外挂,python安卓

本次大家挑选的安卓游戏对象叫“单词壮士”,大家能够先下载这些游乐。

玩耍的界面是这么的:

金沙注册送58 1

经过甄选单词的情趣进行攻击,选对了就司空见惯攻击,选错了就象征性的攻击一下。玩了一段时间之后商量能够做成活动的,通过PIL识别图片里的单词和甄选,然后翻译英文成中文意思,依据中文模糊相称选用相应的选项。

搜寻了N多资料以往早先入手,程序用到以下这一个东西:

PIL:Python Imaging Library 威名赫赫的图片管理模块

pytesser:Python下用来驱动tesseract-ocr来进展辨认的模块

Tesseract-OCTucson:图像识别引擎,用来把图像识别成文字,可以辨别英文和普通话,以及其余语言

autopy:Python下用来效仿操作鼠标和键盘的模块。

安装步骤(win7景况):

【金沙注册送58】Python制作安卓游戏外挂,Python验证码识别管理实例。(1)安装PIL,下载地址:
Imaging Library 1.1.7 for Python 2.7。

(2)安装pytesser,下载地址:
C:\Python27\Lib\site-packages下,在文件夹下营造pytesser.pth文件,内容为C:\Python27\Lib\site-packages\pytesser_v0.0.1

(3)安装Tesseract OCR
engine,下载:
installer of tesseract-ocr 3.02.02 (including English language
data)的安装文件,举行安装。

(4)安装语言包,在
OC索罗德指标下的tessdata文件夹内,用来识别简体普通话。

(5)修改C:\Python27\Lib\site-packages\pytesser_v0.0.1下的pytesser.py的函数,将原本的image_to_string函数扩展语音选取参数language,language=’chi_sim’就足以用来辨别中文,默以为eng英文。

改好后的pytesser.py:

"""OCR in Python using the Tesseract engine from Google
http://code.google.com/p/pytesser/
by Michael J.T. O'Kelly
V 0.0.1, 3/10/07"""
import Image
import subprocess
import util
import errors
tesseract_exe_name = 'tesseract' # Name of executable to be called at command line
scratch_image_name = "temp.bmp" # This file must be .bmp or other Tesseract-compatible format
scratch_text_name_root = "temp" # Leave out the .txt extension
cleanup_scratch_flag = True # Temporary files cleaned up after OCR operation
def call_tesseract(input_filename, output_filename, language):
 """Calls external tesseract.exe on input file (restrictions on types),
 outputting output_filename+'txt'"""
 args = [tesseract_exe_name, input_filename, output_filename, "-l", language]
 proc = subprocess.Popen(args)
 retcode = proc.wait()
 if retcode!=0:
  errors.check_for_errors()
def image_to_string(im, cleanup = cleanup_scratch_flag, language = "eng"):
 """Converts im to file, applies tesseract, and fetches resulting text.
 If cleanup=True, delete scratch files after operation."""
 try:
  util.image_to_scratch(im, scratch_image_name)
  call_tesseract(scratch_image_name, scratch_text_name_root,language)
  text = util.retrieve_text(scratch_text_name_root)
 finally:
  if cleanup:
   util.perform_cleanup(scratch_image_name, scratch_text_name_root)
 return text
def image_file_to_string(filename, cleanup = cleanup_scratch_flag, graceful_errors=True, language = "eng"):
 """Applies tesseract to filename; or, if image is incompatible and graceful_errors=True,
 converts to compatible format and then applies tesseract. Fetches resulting text.
 If cleanup=True, delete scratch files after operation."""
 try:
  try:
   call_tesseract(filename, scratch_text_name_root, language)
   text = util.retrieve_text(scratch_text_name_root)
  except errors.Tesser_General_Exception:
   if graceful_errors:
    im = Image.open(filename)
    text = image_to_string(im, cleanup)
   else:
    raise
 finally:
  if cleanup:
   util.perform_cleanup(scratch_image_name, scratch_text_name_root)
 return text
if __name__=='__main__':
 im = Image.open('phototest.tif')
 text = image_to_string(im)
 print text
 try:
  text = image_file_to_string('fnord.tif', graceful_errors=False)
 except errors.Tesser_General_Exception, value:
  print "fnord.tif is incompatible filetype. Try graceful_errors=True"
  print value
 text = image_file_to_string('fnord.tif', graceful_errors=True)
 print "fnord.tif contents:", text
 text = image_file_to_string('fonts_test.png', graceful_errors=True)
 print text

(6)安装autopy,下载地址:

说下程序的思绪:

1.
第一是透过模拟器在WINDOWS下实行安卓的顺序,然后用PicPick进行截图,将出征作战画面中需求动用的区域举办衡量,记录下实际在荧屏上的地点区域,用图中1来判定战争是还是不是初步(保存下来当作比对),用2,3,4,5,6的区域抓取识别成文字。

金沙注册送58 2

算算图片指纹的主次:

def get_hash(self, img):
    #计算图片的hash值
    image = img.convert("L")
    pixels = list(image.getdata())
    avg = sum(pixels) / len(pixels)
    return "".join(map(lambda p : "1" if p > avg else "0", pixels))

图片识别成字符:

#识别出对应位置图像成字符,把字符交给chose处理
  def getWordMeaning(self):
    pic_up = ImageGrab.grab((480,350, 480+300, 350+66))
    pic_aws1 = ImageGrab.grab((463,456, 463+362, 456+45))
    pic_aws2 = ImageGrab.grab((463,530, 463+362, 530+45))
    pic_aws3 = ImageGrab.grab((463,601, 463+362, 601+45))
    pic_aws4 = ImageGrab.grab((463,673, 463+362, 673+45))
    str_up = image_to_string(pic_up).strip().lower()
    #判断当前单词和上次识别单词相同,就不继续识别
    if str_up <> self.lastWord:
      #如果题目单词是英文,选项按中文进行识别
      if str_up.isalpha():
        eng_up = self.dt[str_up].decode('gbk') if self.dt.has_key(str_up) else ''
        chs1 = image_to_string(pic_aws1, language='chi_sim').decode('utf-8').strip()
        chs2 = image_to_string(pic_aws2, language='chi_sim').decode('utf-8').strip()
        chs3 = image_to_string(pic_aws3, language='chi_sim').decode('utf-8').strip()
        chs4 = image_to_string(pic_aws4, language='chi_sim').decode('utf-8').strip()
        print str_up, ':', eng_up
        self.chose(eng_up, (chs1, chs2, chs3, chs4))
      #如果题目单词是中文,选项按英文进行识别
      else:
        chs_up = image_to_string(pic_up, language='chi_sim').decode('utf-8').strip()
        eng1 = image_to_string(pic_aws1).strip()
        eng2 = image_to_string(pic_aws2).strip()
        eng3 = image_to_string(pic_aws3).strip()
        eng4 = image_to_string(pic_aws4).strip()

        e2c1 = self.dt[eng1].decode('gbk') if self.dt.has_key(eng1) else ''
        e2c2 = self.dt[eng2].decode('gbk') if self.dt.has_key(eng2) else ''
        e2c3 = self.dt[eng3].decode('gbk') if self.dt.has_key(eng3) else ''
        e2c4 = self.dt[eng4].decode('gbk') if self.dt.has_key(eng4) else ''
        print chs_up
        self.chose(chs_up, (e2c1, e2c2, e2c3, e2c4))
      self.lastWord = str_up
    return str_up

2.
对于1地方的图样提前截贰个保存下来,然后通过总计当前画面和封存下来的图纸的偏离,判别假使低于40的就表示已经到了采纳分界面,然后识别2,3,4,5,6成字符,决断要是2岗位识别成英文字符的,就用2深入分析出来的英文在字典中赢得粤语意思,然后再通过2的汉语意思和3,4,5,6文字进行相称,相配上汉字最多的就做选取,如果匹配不上暗中认可再次来到最终贰个。此前本来思量是用Fuzzywuzzy来进行模糊相配算相似度的,然而新兴测试了下对于华语相称的效果倒霉,就改成按汉字单个进行相称总计相似度。

相称文字进行分选:

#根据传入的题目和选项进行匹配选择
  def chose(self, g, chs_list):
    j, max_score = -1, 0
    same_list = None
    #替换掉题目里的特殊字符
    re_list = [u'~', u',', u'.', u';', u' ', u'a', u'V', u'v', u'i', u'n', u'【', u')', u'_', u'W', u'd', u'j', u'-', u't']
    for i in re_list:
      g = g.replace(i, '')
    print type(g)
    #判断2个字符串中相同字符,相同字符最多的为最佳答案
    for i, chsWord in enumerate(chs_list):
      print type(chsWord)
      l = [x for x in g if x in chsWord and len(x)>0]
      score = len(l) if l else 0

      if score > max_score:
        max_score = score
        j = i
        same_list = l
    #如果没有匹配上默认选最后一个
    if j ==-1:
      print '1. %s; 2. %s; 3. %s; 4. %s; Not found choice.' % (chs_list[0], chs_list[1], chs_list[2], chs_list[3])
    else:
      print '1. %s; 2. %s; 3. %s; 4. %s; choice: %s' % (chs_list[0], chs_list[1], chs_list[2], chs_list[3], chs_list[j])
      for k, v in enumerate(same_list):
        print str(k) + '.' + v,
    order = j + 1
    self.mouseMove(order)
    return order

3.结尾通过mouseMove调用autopy操作鼠标点击对应地点实行抉择。

程序运维的录制:

次第完结后选取正规,因为图片识别准确率和字典的难点,正确率约为70%左右,效果依然比较满足。程序总体来讲比较轻松,做出来也正是纯粹娱乐一下,串联使用了图片识别、中文模糊相称、鼠标模拟操作,算是个轻巧的小外挂吧,源程序和选取的公文如下:

这次我们选拔的安卓游戏对象叫“单词英豪”,大家能够先下载这么些游乐。
游戏的分界面是这么的:…

Python验证码识别管理实例,python验证码实例

一、希图专门的工作与代码实例
(1)安装PIL:下载后是二个exe,直接双击安装,它会活动安装到C:\Python27\Lib\site-packages中去,
(2)pytesser:下载解压后一向放C:\Python27\Lib\site-packages(依据你安装的Python路线而各异),同期,新建叁个pytheeer.pth,内容就写pytesser,注意这里的剧情自然要和pytesser这些文件夹同名,意思正是pytesser文件夹,pytesser.pth,及内容都要一致!
(3)Tesseract OCR
engine下载:下载后解压,tessdata文件夹,用其替换掉pytesser解压后的tessdata文件夹就能够。

二、验证
(1)原理: 验证码图像管理

验证码图像识别才干首若是操作图片内的像素点,通过对图纸的像素点举行一多级的操作,最终输出验证码图像内的每种字符的文书矩阵。

  • 1、读取图片
  • 2、图片降噪
  • 3、图片切割
  • 4、图像文本输出

(2)验证字符识别

验证码内的字符识别重要以机械学习的分类算法来成功,这两天本身所利用的字符识其他算法为KNN(K周边算法)和SVM
(帮衬向量机算法),后边笔者 会对那四个算法的适用场景举行详细描述。

  • 1、获取字符矩阵
  • 2、矩阵进入分拣算法
  • 3、输出结果

要证实的图样如下:

金沙注册送58 3

(3)、轻便的授命:

from pytesser import * 
image = Image.open('1.jpg') # Open image object using PIL 
print image_to_string(image)  # Run tesseract.exe on image 

接下来运维:

金沙注册送58 4

依旧直接:

print image_file_to_string('fnord.tif') 

同等能出口结果!
(4)、复杂一点的 上边的只可以对一部分比较轻便的做管理,一
规律:彩色转灰度,灰度转二值,二值图像识别

# 验证码识别,此程序只能识别数据验证码 
import Image 
import ImageEnhance 
import ImageFilter 
import sys 
from pytesser import * 
# 二值化 
threshold = 140 
table = [] 
for i in range(256): 
 if i < threshold: 
  table.append(0) 
 else: 
  table.append(1) 

#由于都是数字 
#对于识别成字母的 采用该表进行修正 
rep={'O':'0', 
 'I':'1','L':'1', 
 'Z':'2', 
 'S':'8' 
 }; 

def getverify1(name):   
 #打开图片 
 im = Image.open(name) 
 #转化到灰度图 
 imgry = im.convert('L') 
 #保存图像 
 imgry.save('g'+name) 
 #二值化,采用阈值分割法,threshold为分割点 
 out = imgry.point(table,'1') 
 out.save('b'+name) 
 #识别 
 text = image_to_string(out) 
 #识别对吗 
 text = text.strip() 
 text = text.upper();  
 for r in rep: 
  text = text.replace(r,rep[r])  
 #out.save(text+'.jpg') 
 print text 
 return text 
getverify1('1.jpg') #注意这里的图片要和此文件在同一个目录,要不就传绝对路径也行 

运作后效果:

金沙注册送58 5

如上正是本文的全体内容,希望对大家的读书抱有支持。

娱乐的分界面是那样的:

金沙注册送58 6

你大概感兴趣的篇章:

  • python 图片验证码代码
  • python 图片验证码代码分享
  • Python 随机生成中文验证码的实例代码
  • python为tornado增加recaptcha验证码成效
  • python生成随机验证码(中文验证码)示例
  • Python生成验证码实例
  • python实现带验证码网址的自行登入达成代码
  • Python随机生成几个6位的验证码代码分享

一、筹划干活与代码实例
(1)安装PIL:下载后是二个exe,直接双击安装,它会自动安装到C:\Pyth…

金沙注册送58 7

Paste_Image.png

透过选取单词的趣味进行攻击,选对了就不荒谬攻击,选错了就象征性的抨击一下。玩了一段时间之后切磋能够做成活动的,通过PIL识别图片里的单词和选取,然后翻译英文成人中学文意思,根据粤语模糊相配选拔相应的选项。

  通过挑选单词的情趣举办抨击,选对了就像常攻击,选错了就象征性的口诛笔伐一下。玩了一段时间之后斟酌能够做成活动的,通过PIL识别图片里的单词和挑选,然后翻译英文成普通话意思,根据汉语模糊相称采用相应的选项。
  查找了N多资料现在早先初始,程序用到以下这几个事物:
PIL金沙注册送58 ,       Python Imaging Library 举世有名的图样管理模块
pytesser     Python下用来驱动tesseract-ocr来拓展鉴其余模块
Tesseract-OCR
 图像识别引擎,用来把图像识别成文字,能够辨认英文和汉语,以及任何语言
autopy     Python下用来效仿操作鼠标和键盘的模块。

检索了N多资料今后初始入手,程序用到以下这个事物:

安装步骤(win7情形):
  (1)安装PIL,下载地址:http://www.pythonware.com/products/pil/,安装Python
Imaging Library 1.1.7 for Python 2.7。
  (2)安装pytesser,下载地址:http://code.google.com/p/pytesser/,下载解压后直接放在
C:\Python27\Lib\site-packages下,在文件夹下创设pytesser.pth文件,内容为C:\Python27\Lib\site-packages\pytesser_v0.0.1
  (3)安装Tesseract OCR
engine,下载:https://github.com/tesseract-ocr/tesseract/wiki/Downloads,下载Windows
installer of tesseract-ocr 3.02.02 (including English language
data)的安装文件,进行安装。
  (4)安装语言包,在https://github.com/tesseract-ocr/tessdata下载chi_sim.traineddata简体中文语言包,放到安装的Tesseract
OCEscort指标下的tessdata文件夹内,用来鉴定分别简体汉语。
  (5)修改C:\Python27\Lib\site-packages\pytesser_v0.0.1下的pytesser.py的函数,将原本的image_to_string函数扩充语音接纳参数language,language=’chi_sim’就能够用来识别中文,默感到eng英文。
改好后的pytesser.py:

PIL:Python Imaging Library 无人不晓的图片管理模块

"""OCR in Python using the Tesseract engine from Google
http://code.google.com/p/pytesser/
by Michael J.T. O'Kelly
V 0.0.1, 3/10/07"""

import Image
import subprocess
import util
import errors

tesseract_exe_name = 'tesseract' # Name of executable to be called at command line
scratch_image_name = "temp.bmp" # This file must be .bmp or other Tesseract-compatible format
scratch_text_name_root = "temp" # Leave out the .txt extension
cleanup_scratch_flag = True  # Temporary files cleaned up after OCR operation

def call_tesseract(input_filename, output_filename, language):
  """Calls external tesseract.exe on input file (restrictions on types),
  outputting output_filename+'txt'"""
  args = [tesseract_exe_name, input_filename, output_filename, "-l", language]
  proc = subprocess.Popen(args)
  retcode = proc.wait()
  if retcode!=0:
    errors.check_for_errors()

def image_to_string(im, cleanup = cleanup_scratch_flag, language = "eng"):
  """Converts im to file, applies tesseract, and fetches resulting text.
  If cleanup=True, delete scratch files after operation."""
  try:
    util.image_to_scratch(im, scratch_image_name)
    call_tesseract(scratch_image_name, scratch_text_name_root,language)
    text = util.retrieve_text(scratch_text_name_root)
  finally:
    if cleanup:
      util.perform_cleanup(scratch_image_name, scratch_text_name_root)
  return text

def image_file_to_string(filename, cleanup = cleanup_scratch_flag, graceful_errors=True, language = "eng"):
  """Applies tesseract to filename; or, if image is incompatible and graceful_errors=True,
  converts to compatible format and then applies tesseract.  Fetches resulting text.
  If cleanup=True, delete scratch files after operation."""
  try:
    try:
      call_tesseract(filename, scratch_text_name_root, language)
      text = util.retrieve_text(scratch_text_name_root)
    except errors.Tesser_General_Exception:
      if graceful_errors:
        im = Image.open(filename)
        text = image_to_string(im, cleanup)
      else:
        raise
  finally:
    if cleanup:
      util.perform_cleanup(scratch_image_name, scratch_text_name_root)
  return text


if __name__=='__main__':
  im = Image.open('phototest.tif')
  text = image_to_string(im)
  print text
  try:
    text = image_file_to_string('fnord.tif', graceful_errors=False)
  except errors.Tesser_General_Exception, value:
    print "fnord.tif is incompatible filetype.  Try graceful_errors=True"
    print value
  text = image_file_to_string('fnord.tif', graceful_errors=True)
  print "fnord.tif contents:", text
  text = image_file_to_string('fonts_test.png', graceful_errors=True)
  print text

pytesser:Python下用来驱动tesseract-ocr来拓展辨其他模块

(6)安装autopy,下载地址:https://pypi.python.org/pypi/autopy,下载autopy-0.51.win32-py2.7.exe拓展设置,用来模拟鼠标操作。

苔丝eract-OC路虎极光:图像识别引擎,用来把图像识别成文字,可以辨认英文和国文,以及任何语言

说下程序的思路:
 1.
第一是透过模拟器在WINDOWS下实践安卓的主次,然后用PicPick进行截图,将应战画面中须要使用的区域开始展览度量,记录下实际在荧屏上的岗位区域,用图中1来判定战斗是或不是上马(保存下来当作比对),用2,3,4,5,6的区域抓取识别成文字。

autopy:Python下用来效仿操作鼠标和键盘的模块。

金沙注册送58 8

安装步骤(win7意况):

1485005-75900c16b01ca1f3.png

(1)安装PIL,下载地址:,安装Python
Imaging Library 1.1.7 for Python 2.7。

算算图片指纹的顺序:

(2)安装pytesser,下载地址:,下载解压后直接放在
C:\Python27\Lib\site-packages下,在文书夹下建构pytesser.pth文件,内容为C:\Python27\Lib\site-packages\pytesser_v0.0.1

    def get_hash(self, img):
        #计算图片的hash值
        image = img.convert("L")
        pixels = list(image.getdata())
        avg = sum(pixels) / len(pixels)
        return "".join(map(lambda p : "1" if p > avg else "0", pixels))

(3)安装Tesseract OCR
engine,下载:
installer of tesseract-ocr 3.02.02 (including English language
data)的安装文件,进行安装。

图片识别成字符:

(4)安装语言包,在下载chi_sim.traineddata简体中文语言包,放到安装的Tesseract
OCR指标下的tessdata文件夹内,用来识别简体汉语。

    #识别出对应位置图像成字符,把字符交给chose处理
    def getWordMeaning(self):
        pic_up = ImageGrab.grab((480,350, 480+300, 350+66))
        pic_aws1 = ImageGrab.grab((463,456, 463+362, 456+45))
        pic_aws2 = ImageGrab.grab((463,530, 463+362, 530+45))
        pic_aws3 = ImageGrab.grab((463,601, 463+362, 601+45))
        pic_aws4 = ImageGrab.grab((463,673, 463+362, 673+45))

        str_up = image_to_string(pic_up).strip().lower()

        #判断当前单词和上次识别单词相同,就不继续识别
        if str_up <> self.lastWord:
            #如果题目单词是英文,选项按中文进行识别
            if str_up.isalpha():
                eng_up = self.dt[str_up].decode('gbk') if self.dt.has_key(str_up) else ''
                chs1 = image_to_string(pic_aws1, language='chi_sim').decode('utf-8').strip()
                chs2 = image_to_string(pic_aws2, language='chi_sim').decode('utf-8').strip()
                chs3 = image_to_string(pic_aws3, language='chi_sim').decode('utf-8').strip()
                chs4 = image_to_string(pic_aws4, language='chi_sim').decode('utf-8').strip()
                print str_up, ':', eng_up
                self.chose(eng_up, (chs1, chs2, chs3, chs4))
            #如果题目单词是中文,选项按英文进行识别
            else:
                chs_up = image_to_string(pic_up, language='chi_sim').decode('utf-8').strip()
                eng1 = image_to_string(pic_aws1).strip()
                eng2 = image_to_string(pic_aws2).strip()
                eng3 = image_to_string(pic_aws3).strip()
                eng4 = image_to_string(pic_aws4).strip()

                e2c1 = self.dt[eng1].decode('gbk') if self.dt.has_key(eng1) else ''
                e2c2 = self.dt[eng2].decode('gbk') if self.dt.has_key(eng2) else ''
                e2c3 = self.dt[eng3].decode('gbk') if self.dt.has_key(eng3) else ''
                e2c4 = self.dt[eng4].decode('gbk') if self.dt.has_key(eng4) else ''
                print chs_up
                self.chose(chs_up, (e2c1, e2c2, e2c3, e2c4))
            self.lastWord = str_up
        return str_up

(5)修改C:\Python27\Lib\site-packages\pytesser_v0.0.1下的pytesser.py的函数,将原本的image_to_string函数扩展语音选拔参数language,language=’chi_sim’就能够用来辨别中文,默以为eng英文。

2.
对于1岗位的图纸提前截贰个保存下来,然后通过计算当前画面和封存下去的图样的距离,剖断如若低于40的就代表已经到了选择分界面,然后识别2,3,4,5,6成字符,决断假使2职位识别成英文字符的,就用2解析出来的英文在字典中赢得中文意思,然后再通过2的国语意思和3,4,5,6文字进行相配,相称上汉字最多的就做采纳,如若相配不上暗中认可再次回到最终三个。以前本来考虑是用Fuzzywuzzy来拓展模糊相称算相似度的,但是新兴测试了下对于华语匹配的机能糟糕,就改成按汉字单个举行相称总计相似度。
极度文字举办精选:

改好后的pytesser.py:

    #根据传入的题目和选项进行匹配选择
    def chose(self, g, chs_list):
        j, max_score = -1, 0
        same_list = None
        #替换掉题目里的特殊字符
        re_list = [u'~', u',', u'.', u';', u' ', u'a', u'V', u'v', u'i', u'n', u'【', u')', u'_', u'W', u'd', u'j', u'-', u't']
        for i in re_list:
            g = g.replace(i, '')
        print type(g)

        #判断2个字符串中相同字符,相同字符最多的为最佳答案
        for i, chsWord in enumerate(chs_list):
            print type(chsWord)
            l = [x for x in g if x in chsWord and len(x)>0]
            score = len(l) if l else 0

            if score > max_score:
                max_score = score
                j = i
                same_list = l
        #如果没有匹配上默认选最后一个
        if j ==-1:
            print '1. %s; 2. %s; 3. %s; 4. %s; Not found choice.' % (chs_list[0], chs_list[1], chs_list[2], chs_list[3])
        else:
            print '1. %s; 2. %s; 3. %s; 4. %s; choice: %s' % (chs_list[0], chs_list[1], chs_list[2], chs_list[3], chs_list[j])
            for k, v in enumerate(same_list):
                print str(k) + '.' + v,
        order = j + 1
        self.mouseMove(order)
        return order
"""OCR in Python using the Tesseract engine from Google
http://code.google.com/p/pytesser/
by Michael J.T. O'Kelly
V 0.0.1, 3/10/07"""
import Image
import subprocess
import util
import errors
tesseract_exe_name = 'tesseract' # Name of executable to be called at command line
scratch_image_name = "temp.bmp" # This file must be .bmp or other Tesseract-compatible format
scratch_text_name_root = "temp" # Leave out the .txt extension
cleanup_scratch_flag = True # Temporary files cleaned up after OCR operation
def call_tesseract(input_filename, output_filename, language):
 """Calls external tesseract.exe on input file (restrictions on types),
 outputting output_filename+'txt'"""
 args = [tesseract_exe_name, input_filename, output_filename, "-l", language]
 proc = subprocess.Popen(args)
 retcode = proc.wait()
 if retcode!=0:
  errors.check_for_errors()
def image_to_string(im, cleanup = cleanup_scratch_flag, language = "eng"):
 """Converts im to file, applies tesseract, and fetches resulting text.
 If cleanup=True, delete scratch files after operation."""
 try:
  util.image_to_scratch(im, scratch_image_name)
  call_tesseract(scratch_image_name, scratch_text_name_root,language)
  text = util.retrieve_text(scratch_text_name_root)
 finally:
  if cleanup:
   util.perform_cleanup(scratch_image_name, scratch_text_name_root)
 return text
def image_file_to_string(filename, cleanup = cleanup_scratch_flag, graceful_errors=True, language = "eng"):
 """Applies tesseract to filename; or, if image is incompatible and graceful_errors=True,
 converts to compatible format and then applies tesseract. Fetches resulting text.
 If cleanup=True, delete scratch files after operation."""
 try:
  try:
   call_tesseract(filename, scratch_text_name_root, language)
   text = util.retrieve_text(scratch_text_name_root)
  except errors.Tesser_General_Exception:
   if graceful_errors:
    im = Image.open(filename)
    text = image_to_string(im, cleanup)
   else:
    raise
 finally:
  if cleanup:
   util.perform_cleanup(scratch_image_name, scratch_text_name_root)
 return text
if __name__=='__main__':
 im = Image.open('phototest.tif')
 text = image_to_string(im)
 print text
 try:
  text = image_file_to_string('fnord.tif', graceful_errors=False)
 except errors.Tesser_General_Exception, value:
  print "fnord.tif is incompatible filetype. Try graceful_errors=True"
  print value
 text = image_file_to_string('fnord.tif', graceful_errors=True)
 print "fnord.tif contents:", text
 text = image_file_to_string('fonts_test.png', graceful_errors=True)
 print text

3.末尾通过mouseMove调用autopy操作鼠标点击对应地方张开选拔。
程序运转的水墨画:
http://v.youku.com/v\_show/id\_XMTYxNTAzMDUwNA==.html
  程序完毕后选取正规,因为图片识别正确率和字典的难点,准确率约为五分四左右,效果照旧比较满足。程序总体来讲比较轻巧,做出来也正是原原本本娱乐一下,串联使用了图片识别、普通话模糊相称、鼠标模拟操作,算是个简易的小外挂吧,源程序和动用的文本如下:
http://git.oschina.net/highroom/My-Project/tree/master/Word%20Hero

(6)安装autopy,下载地址:,下载autopy-0.51.win32-py2.7.exe进行设置,用来模拟鼠标操作。

说下程序的笔触:

1.
首先是通过模拟器在WINDOWS下施行安卓的主次,然后用PicPick进行截图,将出征作战画面中须要使用的区域展开衡量,记录下实际在显示器上的职务区域,用图中1来判别大战是不是伊始(保存下来当作比对),用2,3,4,5,6的区域抓取识别成文字。

金沙注册送58 9

测算图片指纹的程序:

def get_hash(self, img):
    #计算图片的hash值
    image = img.convert("L")
    pixels = list(image.getdata())
    avg = sum(pixels) / len(pixels)
    return "".join(map(lambda p : "1" if p > avg else "0", pixels))

图片识别成字符:

#识别出对应位置图像成字符,把字符交给chose处理
  def getWordMeaning(self):
    pic_up = ImageGrab.grab((480,350, 480+300, 350+66))
    pic_aws1 = ImageGrab.grab((463,456, 463+362, 456+45))
    pic_aws2 = ImageGrab.grab((463,530, 463+362, 530+45))
    pic_aws3 = ImageGrab.grab((463,601, 463+362, 601+45))
    pic_aws4 = ImageGrab.grab((463,673, 463+362, 673+45))
    str_up = image_to_string(pic_up).strip().lower()
    #判断当前单词和上次识别单词相同,就不继续识别
    if str_up <> self.lastWord:
      #如果题目单词是英文,选项按中文进行识别
      if str_up.isalpha():
        eng_up = self.dt[str_up].decode('gbk') if self.dt.has_key(str_up) else ''
        chs1 = image_to_string(pic_aws1, language='chi_sim').decode('utf-8').strip()
        chs2 = image_to_string(pic_aws2, language='chi_sim').decode('utf-8').strip()
        chs3 = image_to_string(pic_aws3, language='chi_sim').decode('utf-8').strip()
        chs4 = image_to_string(pic_aws4, language='chi_sim').decode('utf-8').strip()
        print str_up, ':', eng_up
        self.chose(eng_up, (chs1, chs2, chs3, chs4))
      #如果题目单词是中文,选项按英文进行识别
      else:
        chs_up = image_to_string(pic_up, language='chi_sim').decode('utf-8').strip()
        eng1 = image_to_string(pic_aws1).strip()
        eng2 = image_to_string(pic_aws2).strip()
        eng3 = image_to_string(pic_aws3).strip()
        eng4 = image_to_string(pic_aws4).strip()

        e2c1 = self.dt[eng1].decode('gbk') if self.dt.has_key(eng1) else ''
        e2c2 = self.dt[eng2].decode('gbk') if self.dt.has_key(eng2) else ''
        e2c3 = self.dt[eng3].decode('gbk') if self.dt.has_key(eng3) else ''
        e2c4 = self.dt[eng4].decode('gbk') if self.dt.has_key(eng4) else ''
        print chs_up
        self.chose(chs_up, (e2c1, e2c2, e2c3, e2c4))
      self.lastWord = str_up
    return str_up

2.
对于1职位的图形提前截三个封存下来,然后经过测算当前画面和保留下去的图片的离开,决断假使低于40的就意味着已经到了选用分界面,然后识别2,3,4,5,6成字符,判别假使2地方识别成英文字符的,就用2剖判出来的英文在字典中获得中文意思,然后再经过2的普通话意思和3,4,5,6文字实行匹配,相配上汉字最多的就做取舍,借使相配不上暗中认可再次来到最终三个。在此之前本来记挂是用Fuzzywuzzy来拓展模糊相配算相似度的,可是新兴测试了下对于华语匹配的成效不佳,就改成按汉字单个进行匹配总括相似度。

相配文字举办分选:

#根据传入的题目和选项进行匹配选择
  def chose(self, g, chs_list):
    j, max_score = -1, 0
    same_list = None
    #替换掉题目里的特殊字符
    re_list = [u'~', u',', u'.', u';', u' ', u'a', u'V', u'v', u'i', u'n', u'【', u')', u'_', u'W', u'd', u'j', u'-', u't']
    for i in re_list:
      g = g.replace(i, '')
    print type(g)
    #判断2个字符串中相同字符,相同字符最多的为最佳答案
    for i, chsWord in enumerate(chs_list):
      print type(chsWord)
      l = [x for x in g if x in chsWord and len(x)>0]
      score = len(l) if l else 0

      if score > max_score:
        max_score = score
        j = i
        same_list = l
    #如果没有匹配上默认选最后一个
    if j ==-1:
      print '1. %s; 2. %s; 3. %s; 4. %s; Not found choice.' % (chs_list[0], chs_list[1], chs_list[2], chs_list[3])
    else:
      print '1. %s; 2. %s; 3. %s; 4. %s; choice: %s' % (chs_list[0], chs_list[1], chs_list[2], chs_list[3], chs_list[j])
      for k, v in enumerate(same_list):
        print str(k) + '.' + v,
    order = j + 1
    self.mouseMove(order)
    return order

3.终极经过mouseMove调用autopy操作鼠标点击对应地方举办抉择。

程序运行的摄像:

程序达成后选用正规,因为图片识别准确率和字典的主题素材,正确率约为五分四左右,效果照旧比较满足。程序总体来讲比较轻巧,做出来也正是纯粹娱乐一下,串联使用了图片识别、中文模糊相称、鼠标模拟操作,算是个简易的小外挂吧,源程序和接纳的公文如下:

相关文章

网站地图xml地图