利用百度AI文字识别实现网页游戏火影忍者OL自动定向劫镖功能(python)

在实验室有师兄写了一个自动答题的程序的启发下,决定写一个自动打劫系统。

介绍:所谓定向劫镖,即劫特定玩家的镖。游戏里要求每个区的每个角色的名字是唯一的,因此可以通过玩家游戏名称实现定向劫镖。

经过观察可以发现游戏的劫镖功能有以下特点:

①进入劫镖界面后,所有押镖的玩家将出现在特定的位置,是一个列表形式。

②可以获取界面坐标,并获取每个列表的截图,调用库aip即可将图中文字识别出来。

③游戏名在一个很小的范围内,可以轻易识别出游戏名,很大提高劫镖准确率。

思路:

①获取劫镖界面的坐标,并由此获得所有押镖玩家列表截图;

②分别识别出游戏名字,判断其与输入的名字是否匹配;

③每次判断后立即刷新,再次判断;

④当匹配成功后,单击劫镖按钮,实现定向劫镖。

游戏截图1-打劫界面:

   利用百度AI文字识别实现网页游戏火影忍者OL自动定向劫镖功能(python)_第1张图片

由图可知,名字位置相对固定,排列很整齐。获取每个名字的坐标,并截图:

 名字截图:

   

利用百度AI的文字识别功能 识别出“ HerryChen”(前有个空格),效果还是不错的。

识别出后控制鼠标单击“传送攻击”即可实现。

如果没有匹配的 就刷新列表即可。

用到了鼠标单击、屏幕截图、百度AI文字识别

代码如下:

from aip import AipOcr
import re

from PIL import ImageGrab
from pymouse import PyMouse 

APP_ID = '11502394'
API_KEY = 'zaY4qOgzI2FdSAEmH7VIPmOn'
SECRET_KEY = '50ZBCCxKOAVAV2GqLos47G9VgD9VaZR0'

client = AipOcr(APP_ID, API_KEY, SECRET_KEY)

string = input("请输入要打劫玩家姓名:")
#string = "HC"

m = PyMouse()
flag = 0
while flag == 0:
	x1=370
	y1=282
	x2=460
	y2=300
	while y1<450:
		if flag == 1:
			break
		bbox = (x1,y1,x2,y2)
		
		im = ImageGrab.grab(bbox)
		 
		im.save('d:/Test_image/test1.png')
		def get_file_content(filePath):
			with open(filePath, 'rb') as fp:
				return fp.read()

		image = get_file_content(r'D:\Test_image\test1.png')

		msg = client.basicAccurate(image)
		print(msg.get('words_result_num'))
		if msg.get('words_result_num') is None:
			x1=370
			y1=282
			x2=460
			y2=300
			m.click(570,586)
			continue
		s=''
		for i in msg.get('words_result'):
			s = s + i.get('words')
		if string==s:
			print("匹配成功,开始打劫")
			flag = 1
			#执行打劫操作
			m.click(x1+600,y1-20)
		else:
			print("匹配失败")
		y1 = y1 + 123
		y2 = y2 + 123
	if flag == 0:
	    #刷新操作
		m.click(570,586)

结果截图:


利用百度AI文字识别实现网页游戏火影忍者OL自动定向劫镖功能(python)_第2张图片利用百度AI文字识别实现网页游戏火影忍者OL自动定向劫镖功能(python)_第3张图片利用百度AI文字识别实现网页游戏火影忍者OL自动定向劫镖功能(python)_第4张图片

匹配成功,实现定向打劫

你可能感兴趣的:(Python)