• selenium 实现模拟登陆
  • PIL 进行页面截图
  • Opencv实现图像识别,SIFT算子提取局部特征

影响 OpenCV 匹配率的因素

  1. 背景
    背景被人物遮挡的多少直接影响到匹配率,裁剪背景后明显提升了匹配率。解决办法,去背景。
  2. 像素
    每个人手机不同,提供的搭配截图像素不一样,有的还发原图,有的不发。像素越多,匹配率越低。
  3. 人物的轻微运动,摆摆手、裙子之类的,影响最大,动作完全相同的时候,匹配率可大100%,不一样的时候,约50%。

获取模板

  1. 用 webdriver 打开网页
driver=webdriver.Chrome()driver.get('http://gamexd.fire2333.com/home/ac?action=/home/game/a/5100013/g/200125/pt/5100074')
  1. 在登录账号之前, F12启用开发者模式,先关闭缓存
  2. 保持开发者模式开启,登录账号,进入时装周,在 Network-Img里 找到两个图片 bg_3002.jpgclothmatch0.png,右键点击禁用。
  3. 刷新后在进入时装周,这个时候应该所有背景,包括那几个赞的文字也没有了,然后可以把缓存打开,避免切号的时候太慢。刷片的时候F12开发者模式要一直打开,搭配模板可以用盟友发的,如果为了匹配率过得去,建议亲自去截图,截少不截多,宁愿少截点,千万别把别人带进去。
  4. 给自己人和不想让其进前20的截图拿到手,在当前目录建2个文件夹,分别放入其中。
import os
import cv2
import PIL
import time
import random
from selenium import webdriver
from pymouse import PyMouse
m=PyMouse()##为了使用 SIFT 算子,opencv 需要安装以下版本
#pip install opencv-python =3.4.2.16
#pip install opencv-contrib-python=3.4.2.16
class Vote(object):"""start voting of the game"""def __init__(self):self.username = current_accountself.password = "thisispassword"def login(self):js = 'document.getElementById("menu-login").click()'driver.execute_script(js)time.sleep(1)js = 'document.getElementsByClassName("changeAccount")[0].click();'driver.execute_script(js)time.sleep(1)driver.find_element_by_class_name("phone").send_keys(self.username)driver.find_element_by_class_name("password").send_keys(self.passsword)time.sleep(1)js = 'document.getElementsByClassName("enter")[0].click();'driver.execute_script(js)time.sleep(5)m.click(673, 252)  # 关闭公告time.sleep(3)m.click(489, 649)  # 进入游戏 (775,618) (883,702)time.sleep(8)m.click(670,382) # 进入时装周time.sleep(3)m.click(627,834) # 我当评委time .sleep(3)#由于开发者模式的影响,这里的登录坐标和请安膜拜的不一样,要改。def vote(self):for i in range(1,21):img_current=ImageGrab.grab((350,310,870,980))img_current=cv2.cvtColor(np.asarray(img_current),cv2.COLOR_RGB2BGR)len_match_friend,location_match_friend=computeMatchMatrix(img_current,friend_list)match_rate_friend = [a / b for a, b in zip(len_match_friend, len_features_friend)]len_match_block_list,location_match_block_list=computeMatchMatrix(img_current,block_list)match_rate_block_list= [a / b for a, b in zip(len_match_block_list, len_features_block_list)]# match_rate 大于50认为图中有自己人或者很讨厌的人(BlockList里面的)#先判别有自己的人就获取她坐标,计算匹配的点的x坐标平均值,小于260就认为她在左边#260的来源:截图的x范围250-870,总共520像素,一半就是260。#如果判断没有自己人,再判断有没有BlockList里面的人,有的话不投他。如果两种都没有,用random随机投一个。#阈值设定为0.4-0.5之间都可以if max(match_rate_friend) > 0.5:id=match_rate_friend.index(max(match_rate_friend,key=abs))if location_match_friend[id] < 260:m.click(397,477)else:m.click(606,474)else:if max(match_rate_block_list) >0.5:id=match_rate_block_list.index(max(match_rate_block_list,key=abs))if location_match_block_list[id] > 260:m.click(397, 477)else:m.click(606, 474)else:if random.choice([0,1])m.click(397, 477)else:m.click(606, 474)time.sleep(5)
# readTemp 是要来读取模板的,包括自己人的,和 BlockList的
def readTemp(path):file_list=os.listdir(path)len_features=[]for i in file_list:prefix = i.replace('.png', '')globals()['img_' + prefix] = cv2.imread('NO18/' + i)temp_var = globals()['img_' + prefix]globals()['kp_' + prefix], globals()['des_' + prefix] = sift.detectAndCompute(temp_var, None)len_features.append(len(globals()['kp_' + prefix]))del globals()['img_'+prefix]return file_list,len_featuresdef computeMatchMatrix(img_test,temp_list):kp_test,des_test=sift.detectAndCompute(img_test,None)len_match=[]location_match=[]for i in temp_list:prefix = i.replace('.png', '')temp_kp=globals()['kp_' + prefix]temp_des=globals()['des_' + prefix]matches=bf.knnMatch(temp_des,des_test,k=2)good_features=[]good_match_pt=[]for i, (m1, m2) in enumerate(matches):if m1.distance < 0.75 * m2.distance:good_features.append([m1])pt = kp_test[m2.trainIdx].ptgood_match_pt.append(pt[0])x_averg = np.mean(good_match_pt)len_match.append(len(good_features))location_match.append(x_averg)return  len_match,location_match
sift=cv2.xfeatures2d.SIFT_create()
bf=cv2.BFMatcher()
friend_list,len_features_friend=readTemp('path_to_template/')
block_list,len_features_block_list=readTemp('BlockList/')
for i in range(1,100):print(time.strftime('%Y-%m-%d %H:%M:%S')+' usr00%d'%i+' start vote')current_account='usr00%d'%icurrent_round=Vote()current_round.login()current_round.vote()print(time.strftime('%Y-%m-%d %H:%M:%S')+' usr00%d'%i+' done!')

OpenCV实现爱江山更爱美人时装周刷票相关推荐

  1. 微信小程序爱江山更爱美人忘记服务器,爱江山更爱美人微信小程序

    爱江山更爱美人微信小程序是一款结合了中国古代宫廷元素在内的趣味装扮养成游戏,如果你在游戏中扮演一位深得皇帝宠爱的妃子,你是决定一心陪在皇上身边还是谋权篡位,自己坐拥天下呢?不一样的选择将会开启一段不一 ...

  2. 爱江山更爱美人 歌词

    歌名-爱江山更爱美人 歌手-沈丹 专辑-爱江山更爱美人 ------------------------------------------ 道不尽红尘奢恋 诉不完人间恩怨 世世代代都是缘 留着相同的 ...

  3. 爱江山更爱美人服务器维修怎么,爱江山更爱美人落星院详细玩法攻略

    在爱江山更爱美人中关于落星院的新互动弄还是有一些非常详细的玩法的,那么具体该如何去玩呢,下面小编给大家详细的分析一下吧! 学识计算方法 1. 我方学识计算方式 如上图,我方学识为28273154 你只 ...

  4. 爱江山更爱美人服务器维修,微信爱江山更爱美人修改版-微信爱江山更爱美人VIP满级修改版预约 v1.0.0-友情手机站...

    微信爱江山更爱美人修改版带给玩家非常好玩的换装游戏,提供给玩家原创剧情的换装的玩法,许多服饰提供给玩家去选择,带给玩家充满个性化的游戏玩法,在游戏当中玩家可以去感受跌宕起伏的剧情,在游戏当中去穿越时空 ...

  5. 爱江山更爱美人服务器维护,爱江山更爱美人,不花钱的升级攻略

    原标题:爱江山更爱美人,不花钱的升级攻略 最近玩了一款换装游戏,剧情可圈可点,既像看小说,又像看电视剧,而且完全不用担心演技累人,如果不想看剧情可以快进跳过,作为一款休闲游戏也是很上心了.下面给大家讲 ...

  6. 爱江山更爱美人自动刷小号请安膜拜

    Tedious is evil. 前段时间迷上了这个游戏,一时疯狂练了太多小号,以至于现在被每天的请安膜拜压垮了.想到日后肯定不会再有那么多时间刷小号,就干脆写个自动化的脚本. 首先要知道这游戏除了小 ...

  7. 爱江山更爱美人 Win 10 下利用计划任务自动种地喂猫

    科学游戏,拒绝爆肝 目录 Python 脚本 1.导入模块 2.坐标转换 3.定义一些重要函数 4.主体部分 转化为 .exe 文件 计划任务设置 用法总结 附:如何查看自己的屏幕大小 Python ...

  8. 装饰器模式——爱江山更爱美人

    现在我们来继续讲一下装饰器模式. 装饰器模式 装饰模式是通过组合加委托的方式帮助我们改变具体组件的功能的一种模式. 为了刺激一下广大男同胞的荷尔蒙,今天我们通过美女来学习装饰器模式,手把手教学美女养成 ...

  9. 从未在一起更让人遗憾_我们从未在一起和我们最终没在一起,哪一个更让人难过?...

    文:五月 知乎上刷到一个问题:我们从未在一起过和我们最终没在一起,哪一个更让人难过? 刷到这个问题的时候,我心头一颤,这两种情况哪一个都足够让人悲伤好久好久了. 一个是要命的爱而不得,一个则是让人绝望 ...

最新文章

  1. 均匀分布取某一点概率_概率和概率分布
  2. Nature子刊:整合宏基因组、代谢组和表型分析的的计算框架
  3. 机器传奇:全球13位科学家和他们的机器人“孩子”
  4. 条件、循环、函数定义、字符串操作练习
  5. 10.30T2 二分+前缀和(后缀和)
  6. JS-数据属性与访问器属性
  7. androidsdk里的android.bat和uiautomatorview.bat启动就闪退问题
  8. 收藏网站制作常用经典css.div.布局.设计实例打包下载(下方有其他链接)
  9. oracle 查询N秒之前的数据
  10. 图解后缀表达式的计算过程
  11. 获取上周_北美木材价格上周趋于稳定
  12. java 中张孝祥老师_谁有传智博客张孝祥老师的Java视频——必须是完整的
  13. windows命令行大汇总
  14. 研究预测2022年全球VoLTE市场规模达348亿美元
  15. poi生成word转pdf
  16. div+css视频教程大全免费下载更有html5教程
  17. 解决Server2008 R2 AD服务器 域组策略 XP桌面图标蓝底
  18. 【matlab】雷达成像系列 之 BP(BackProjection,后向投影) 成像算法
  19. Day11(重写,多态,final,抽象类)
  20. windows 建立窗口的程序代码

热门文章

  1. 1000个瓶子里面999瓶是水,多少次试验确定哪瓶是毒药
  2. 计算机一级B考试总结500字,期中考试反思作文500字
  3. Excel批量替换特殊符号为符号×的操作
  4. User-Agent(用户代理)是什么
  5. Stream流(3)
  6. 微信24小时客服热线电话/如何转到人工服务办理
  7. Pandas DataFrame四种写入方法效率对比
  8. 解决tar (child): gzip: Cannot exec: Too many levels of symbolic links
  9. Fatal error:Cannot ‘break‘ 2 levels in数据库导出错误解决
  10. 信息论 | Shannon编码MATLAB实现