侯体宗的博客
  • 首页
  • Hyperf版
  • beego仿版
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 中国象棋ai
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

python实现连连看辅助之图像识别延伸

Python  /  管理员 发布于 7年前   228

python实现连连看辅助C图像识别延伸(百度AI),供大家参考,具体内容如下

百度AI平台提供图片相似检索API接口,并有详细的API文档说明,可以更好的实现图片识别。

from aip import AipImageSearch""" 你的 APPID AK SK """APP_ID = '***'API_KEY = '***'SECRET_KEY = '***'client = AipImageSearch(APP_ID, API_KEY, SECRET_KEY)with open("{}-{}.jpg".format(1, 1), "rb") as f: im = f.read()# im = self.image_list[row][col]# 将图片与百度云自建相似图库中的图片对比相似度res = client.similarSearch(im)for r in res["result"]: if r["score"] > 0.9:  print(r["brief"])

百度AI平台提供非常多的API接口,值得研究。

代码

import win32guiimport timefrom PIL import ImageGrab , Imageimport numpy as npfrom pymouse import PyMousefrom aip import AipImageSearchclass GameAuxiliaries(object): def __init__(self):  self.wdname = r'宠物连连看经典版2,宠物连连看经典版2小游戏,4399小游戏 www.4399.com - Google Chrome'  # self.wdname = r'main.swf - PotPlayer'  self.image_list = {}  self.m = PyMouse()  self.APP_ID = '15633871'  self.API_KEY = 'LNMuXHmULcZM0PRKX8ZT4OnB'  self.SECRET_KEY = 'IwvyYxeDLIR5XvEmnX3ENWoVzMITkdBL'  self.client = AipImageSearch(self.APP_ID, self.API_KEY, self.SECRET_KEY) def find_game_wd(self,wdname):  # 取得窗口句柄  hdwd = win32gui.FindWindow(0,wdname)  # 设置为最前显示  win32gui.SetForegroundWindow(hdwd)  time.sleep(1) def get_img(self):  image = ImageGrab.grab((417, 289, 884, 600))  # image = ImageGrab.grab((417, 257, 885, 569))  image.save('1.jpg','JPEG')  for x in range(1,9):   self.image_list[x] = {}   for y in range(1,13):    top = (x - 1) * 38 + (x-2)    left =(y - 1) * 38 +(y-2)    right = y * 38 + (y-1)    bottom = x * 38 +(x -1)    if top < 0:     top = 0    if left < 0 :     left = 0    im_temp = image.crop((left,top,right,bottom))    im = im_temp.crop((1,1,37,37))    im.save('{}-{}.jpg'.format(x,y))    self.image_list[x][y]=im def compare_img_baiduapi(self,im):  '''将图片与百度云自建相似图库中的图片对比相似度'''  pass # 判断两个图片是否相同。汉明距离,平均哈希 def compare_img(self,im1,im2):  img1 = im1.resize((20, 20), Image.ANTIALIAS).convert('L')  img2 = im2.resize((20, 20), Image.ANTIALIAS).convert('L')  pi1 = list(img1.getdata())  pi2 = list(img2.getdata())  avg1 = sum(pi1) / len(pi1)  avg2 = sum(pi2) / len(pi2)  hash1 = "".join(map(lambda p: "1" if p > avg1 else "0", pi1))  hash2 = "".join(map(lambda p: "1" if p > avg2 else "0", pi2))  match = 0  for i in range(len(hash1)):   if hash1[i] != hash2[i]:    match += 1  # match = sum(map(operator.ne, hash1, hash2))  # match 值越小,相似度越高  return match # 将图片矩阵转换成数字矩阵 def create_array(self):  array = np.zeros((10,14),dtype=np.int32)  img_type_list = []  for row in range(1,len(self.image_list)+1):   for col in range(1,len(self.image_list[1])+1):    # im = Image.open('{}-{}.jpg'.format(row,col))    with open("{}-{}.jpg".format(row,col), "rb") as f:     im = f.read()    # im = self.image_list[row][col]    # 将图片与百度云自建相似图库中的图片对比相似度    res = self.client.similarSearch(im)    while len(res) == 2:     res = self.client.similarSearch(im)     print(res)     print(row, col)     time.sleep(0.2)    print(row,col)    for r in res["result"]:     if r["score"] > 0.9:      array[row][col]=r["brief"]  return array def row_zero(self,x1,y1,x2,y2,array):  '''相同的图片中间图标全为空'''  if x1 == x2:   min_y = min(y1,y2)   max_y = max(y1,y2)   if max_y - min_y == 1:    return True   for y in range(min_y+1,max_y):    if array[x1][y] != 0 :     return False   return True  else:   return False def col_zero(self,x1,y1,x2,y2,array):  '''相同的图片同列'''  if y1 == y2:   min_x = min(x1,x2)   max_x = max(x1,x2)   if max_x - min_x == 1:    return True   for x in range(min_x+1,max_x):    if array[x][y1] != 0 :     return False   return True  else:   return False def two_line(self,x1,y1,x2,y2,array):  '''两条线相连,转弯一次'''  for row in range(1,9):   for col in range(1,13):    if row == x1 and col == y2 and array[row][col]==0 and self.row_zero(x1,y1,row,col,array) and self.col_zero(x2,y2,row,col,array):     return True    if row == x2 and col == y1 and array[row][col]==0 and self.row_zero(x2,y2,row,col,array) and self.col_zero(x1,y1,row,col,array):     return True  return False def three_line(self,x1,y1,x2,y2,array):  '''三条线相连,转弯两次'''  for row1 in range(10):   for col1 in range(14):    for row2 in range(10):     for col2 in range(14):      if array[row1][col1] == array[row2][col2] == 0 and self.row_zero(x1,y1,row1,col1,array) and self.row_zero(x2,y2,row2,col2,array) and self.col_zero(row1,col1,row2,col2,array):       return True      if array[row1][col1] == array[row2][col2] == 0 and self.col_zero(x1,y1,row1,col1,array) and self.col_zero(x2,y2,row2,col2,array) and self.row_zero(row1,col1,row2,col2,array):       return True      if array[row1][col1] == array[row2][col2] == 0 and self.row_zero(x2,y2,row1,col1,array) and self.row_zero(x1,y1,row2,col2,array) and self.col_zero(row1,col1,row2,col2,array):       return True      if array[row1][col1] == array[row2][col2] == 0 and self.col_zero(x2,y2,row1,col1,array) and self.col_zero(x1,y1,row2,col2,array) and self.row_zero(row1,col1,row2,col2,array):       return True  return False def mouse_click(self,x,y):  top = (x - 1) * 38 + (x - 2)  left = (y - 1) * 38 + (y - 2)  right = y * 38 + (y - 1)  bottom = x * 38 + (x - 1)  if top < 0:   top = 0  if left < 0:   left = 0  self.m.press(int(417+(left+right)/2) ,int(289+(top+bottom)/2) ) def find_same_img(self,array):  for x1 in range(1,9):   for y1 in range(1,13):    if array[x1][y1] == 0:     continue    for x2 in range(1,9):     for y2 in range(1,13):      if x1==x2 and y1 == y2:       continue      if array[x2][y2] == 0 :       continue      if array[x1][y1] != array[x2][y2] :       continue      if array[x1][y1] ==array[x2][y2] and (self.row_zero(x1,y1,x2,y2,array) or self.col_zero(x1,y1,x2,y2,array) or self.two_line(x1,y1,x2,y2,array) or self.three_line(x1,y1,x2,y2,array)):       print("可消除!x{}y{} 和 x{}y{}".format(x1,y1,x2,y2))       self.mouse_click(x1,y1)       time.sleep(0.1)       self.mouse_click(x2,y2)       time.sleep(0.1)       array[x1][y1]=array[x2][y2]=0 def run(self):  #找到游戏运行窗口  self.find_game_wd(self.wdname)  # 截图,切割成小图标  self.get_img()  print("切割完成")  # 将图片矩阵转换成数字矩阵  array = self.create_array()  print(array)  # 遍历矩阵,找到可消除项,点击消除  for i in range(10):   self.find_same_img(array)  print(array)if __name__ == '__main__': ga = GameAuxiliaries() ga.run()

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


  • 上一条:
    python递归法实现简易连连看小游戏
    下一条:
    详解python实现数据归一化处理的方式:(0,1)标准化
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • 在python语言中Flask框架的学习及简单功能示例(0个评论)
    • 在Python语言中实现GUI全屏倒计时代码示例(0个评论)
    • Python + zipfile库实现zip文件解压自动化脚本示例(0个评论)
    • python爬虫BeautifulSoup快速抓取网站图片(1个评论)
    • vscode 配置 python3开发环境的方法(0个评论)
    • 近期文章
    • 智能合约Solidity学习CryptoZombie第四课:僵尸作战系统(0个评论)
    • 智能合约Solidity学习CryptoZombie第三课:组建僵尸军队(高级Solidity理论)(0个评论)
    • 智能合约Solidity学习CryptoZombie第二课:让你的僵尸猎食(0个评论)
    • 智能合约Solidity学习CryptoZombie第一课:生成一只你的僵尸(0个评论)
    • 在go中实现一个常用的先进先出的缓存淘汰算法示例代码(0个评论)
    • 在go+gin中使用"github.com/skip2/go-qrcode"实现url转二维码功能(0个评论)
    • 在go语言中使用api.geonames.org接口实现根据国际邮政编码获取地址信息功能(1个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf分页文件功能(0个评论)
    • gmail发邮件报错:534 5.7.9 Application-specific password required...解决方案(0个评论)
    • 欧盟关于强迫劳动的规定的官方举报渠道及官方举报网站(0个评论)
    • 近期评论
    • 122 在

      学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..
    • 123 在

      Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..
    • 原梓番博客 在

      在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..
    • 博主 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..
    • 1111 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
    • 2016-10
    • 2016-11
    • 2018-04
    • 2020-03
    • 2020-04
    • 2020-05
    • 2020-06
    • 2022-01
    • 2023-07
    • 2023-10
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客