我是精神抖擞王大鹏,不卑不亢,和蔼可亲~
计算机硕士,目前小米大数据开发。日常会分享总结一些技术及笔面试题目,欢迎一起讨论。公众号:diting_dapeng

需求

对探探这类软件,每天左滑右滑的,很是浪费时间精力。遂开发工具实现识别匹配类型自动右滑。

解决思路

第一种实现思路:比较简单,通过定位像素的xy位置,直接确定右滑的按键,并对其进行点击操作。缺点是无脑匹配,没有选择性;

第二种实现思路:首先需要搜集自己喜欢的类型库,然后有两种方法,一种是直接归一后用距离对比;另一种是抽取出特征,再根据特征来做相似度计算; 

第三种实现思路:在对接接口的基础上,对其评分进行选择,如果大于90分,则右滑,否则左滑,目前使用的是腾讯API。缺点是使用速率会不确定。

实现

因为是1.0版本实现,暂时不考虑这么复杂,简易为主。直接上第三种实现思路。

API接口测试

以腾讯API作为接口,先进行下测试:

# -*- coding: utf-8 -*-'''
编码 : dapeng
日期 : xxxxxxxxx
功能 : 验证腾讯openai的api
环境 :win10+python3.6+opencv3.4+pycharm
'''import hashlib
import time
import random
import string
import requests
import base64
import requests
import cv2
import numpy as np
from urllib.parse import urlencode
import json #用于post后得到的字符串到字典的转换app_id = 'xxxxxxx'
app_key = 'xxxxxxxxxx''''腾讯openai鉴权签名计算步骤:(摘抄自官网)用于计算签名的参数在不同接口之间会有差异,但算法过程固定如下4个步骤。1 将<key, value>请求参数对按key进行字典升序排序,得到有序的参数对列表N2 将列表N中的参数对按URL键值对的格式拼接成字符串,得到字符串T(如:key1=value1&key2=value2),URL键值拼接过程value部分需要URL编码,URL编码算法用大写字母,例如%E8,而不是小写%e83 将应用密钥以app_key为键名,组成URL键值拼接到字符串T末尾,得到字符串S(如:key1=value1&key2=value2&app_key=密钥)4 对字符串S进行MD5运算,将得到的MD5值所有字符转换成大写,得到接口请求签名
'''
def get_params(img):                         #鉴权计算并返回请求参数#请求时间戳(秒级),用于防止请求重放(保证签名5分钟有效time_stamp=str(int(time.time()))#请求随机字符串,用于保证签名不可预测,16代表16位nonce_str = ''.join(random.sample(string.ascii_letters + string.digits, 16))params = {'app_id':app_id,                #请求包,需要根据不同的任务修改,基本相同'image':img,                    #文字类的任务可能是‘text’,由主函数传递进来'mode':'0' ,                    #身份证件类可能是'card_type''time_stamp':time_stamp,        #时间戳,都一样'nonce_str':nonce_str,          #随机字符串,都一样#'sign':''                      #签名不参与鉴权计算,只是列出来示意}sort_dict= sorted(params.items(), key=lambda item:item[0], reverse = False)  #字典排序sort_dict.append(('app_key',app_key))   #尾部添加appkeyrawtext= urlencode(sort_dict).encode()  #urlencod编码sha = hashlib.md5()sha.update(rawtext)md5text= sha.hexdigest().upper()        #MD5加密计算params['sign']=md5text                  #将签名赋值到signreturn  params                          #返回请求包def main_Test():'''#用python系统读取方法f = open('c:/girl.jpg','rb')img = base64.b64encode(f.read())   #得到API可以识别的字符串'''#用opencv读入图片frame=cv2.imread('screen_test_scr.png')# frame = cv2.imread('1401020019.jpg')nparry_encode = cv2.imencode('.jpg', frame)[1]data_encode = np.array(nparry_encode)img = base64.b64encode(data_encode)    #得到API可以识别的字符串params = get_params(img)    #获取鉴权签名并获取请求参数url = "https://api.ai.qq.com/fcgi-bin/face/face_detectface"  # 人脸分析#检测给定图片(Image)中的所有人脸(Face)的位置和相应的面部属性。位置包括(x, y, w, h),面部属性包括性别(gender), 年龄(age), 表情(expression), 魅力(beauty), 眼镜(glass)和姿态(pitch,roll,yaw)res = requests.post(url,params).json()for obj in res['data']['face_list']:#print(obj)x=obj['x']y=obj['y']w=obj['width']h=obj['height']cv2.rectangle(frame,(x,y),(x+w,y+h),(255,255,255),2)delt=h//5cv2.putText(frame,'beauty :'+str(obj['gender']), (x+w+10, y+10), cv2.FONT_HERSHEY_SIMPLEX, 0.6, (0, 0, 255), 2,cv2.LINE_8, 0)cv2.putText(frame,'age    :'+str(obj['age']), (x+w+10, y+10+delt*1), cv2.FONT_HERSHEY_SIMPLEX, 0.6, (0, 0, 255), 2,cv2.LINE_8, 0)cv2.putText(frame,'smile  :'+str(obj['expression']), (x+w+10, y+10+delt*2), cv2.FONT_HERSHEY_SIMPLEX, 0.6, (0, 0, 255), 2,cv2.LINE_8, 0)cv2.putText(frame,'beauty :'+str(obj['beauty']), (x+w+10, y+10+delt*3), cv2.FONT_HERSHEY_SIMPLEX, 0.6, (0, 0, 255), 2,cv2.LINE_8, 0)cv2.putText(frame,'glass   :'+str(obj['glass']), (x+w+10, y+10+delt*4), cv2.FONT_HERSHEY_SIMPLEX, 0.6, (0, 0, 255), 2,cv2.LINE_8, 0)# print(obj['beauty'])return obj['beauty']# cv2.imshow('img',frame)#cv2.imwrite('./000.jpg',frame)# cv2.waitKey(0)if __name__ == '__main__':main()

滑动实现

首先需要先来了解下探探滑动的过程(这里是用点击来代替滑动的方式):

  1. 先由图片点击到主页首图(首图更完整清晰);
  2. 对首图进行指定区域的截屏;
  3. 再对截屏的图片进行判断滑动;
  4. 同时收集右滑的图片作为图片库,作为以后改版本的参考;

程序从主函数入口开始,可以设定指定的人数,如果输入0则表示不限定人数滑动。

# -*- coding: utf-8 -*-
import os
import math
import matplotlib.pyplot as plt
import pytesseract
from PIL import Image
import time
import matplotlib.image as mpimgimport Api_Test
class Tantan_test:def __init__(self):self._coefficient = 1.35self._click_count = 0self._coords = []#输出函数def print_all(self,text):print(text)print('\n')# 图片识别def img_rec(self,img):text = pytesseract.image_to_string(Image.open(img), lang='chi_sim')# print(type(text))self.print_all(text)return text#点击功能def acquire_info(self,x1,y1):x1 = str(x1)y1 = str(y1)os.system('adb shell input tap ' + x1 + ' ' + y1)#滑动功能def acquire_swipe(self,x1,y1,x2,y2):x1 = str(x1)y1 = str(y1)x2 = str(x2)y2 = str(y2)os.system('adb shell input swipe ' + x1 + ' ' + y1+' '+x2+' '+y2)# 截图功能def cut_info(self,path):path = str(path)# screenshot.png.os.system('adb shell screencap -p /sdcard/'+path)os.system('adb pull /sdcard/'+path)# 切分+识别功能def seg_info(self,x1,y1,x2,y2,path,out_path):path = str(path)out_path = str(out_path)# 此处有不足的情况,截图会覆盖img = Image.open(path)region=(x1,y1,x2,y2)# print(region)cropImg = img.crop(region)cropImg.save(out_path)# text = self.img_rec(out_path)# return text# 显示图片功能def img_show(self,src):img = Image.open(src)plt.imshow(img)plt.show()def run(self):self.acquire_info(148.9,734.7)time.sleep(1)i = 0print("请输入人数:输入0表示无限喜欢~~")max = input("输入多少人:")max = int(max)if max==0:while 1:self.acquire_info(642,1099)time.sleep(0.05)tantan_test.cut_info('screen_test.png')tantan_test.seg_info(10,82,1056,1125,'screen_test.png','screen_test_scr.png')# time.sleep(0.05)# tantan_test.img_show('screen_test.png')test_beauty = Api_Test.main_Test()print(test_beauty)try:if(test_beauty > 88):self.acquire_info(941.4,1918)else:self.acquire_info(130, 1895)except:self.acquire_info(130,1895)# time.sleep(1)# self.acquire_info(941.4, 1918)else:while i<max:i = i+1self.acquire_info(673.488,1823.79)time.sleep(0.05)
if __name__ == "__main__":tantan_test = Tantan_test()tantan_test.run()# tantan_test.cut_info('screen_test.png')#tantan_test.img_show('screen_test.png')#text=pytesseract.image_to_string(Image.open('screen_test.png'),lang='chi_sim')#print(text)

效果&代码&adb工具

链接:百度网盘 请输入提取码
提取码:1235

最终

tt这种产品当然最终还是靠颜值决定,纯属娱乐使用。

探探人脸识别自动右滑1.0版本(附代码)相关推荐

  1. 教你用OpenCV人脸检测自动给头像戴圣诞帽(附代码)

    来源:老王和他的IT界朋友们 作者:流川疯 本文长度为3400字,建议阅读7分钟 跟着代码走,教你自动给头像带上圣诞帽. 原图: 效果: 原理其实很简单: 采用一张圣诞帽的png图像作为素材 利用pn ...

  2. 探探自动右滑_探探自动右滑:Python学习日志番外01

    给很多人种草了Python 像博主是直接用在工作中做ASO分析.自动化打包 但大多数朋友都说不知道用在什么地方 学会了爬虫也不知道干嘛? 博主想了许久 秉承"Python自有黄金屋,Pyth ...

  3. 联想小新pro无法人脸识别自动开机的解决方法

    联想小新pro无法人脸识别自动开机的解决方法 联想小新pro无法人脸识别自动开机,只能输入PIN解锁. 文章目录 联想小新pro无法人脸识别自动开机的解决方法 一.问题 二.解决方法 一.问题 打开电 ...

  4. python人脸识别神器_教你用Python人脸识别自动开机,值得收藏

    这里将告诉您教你用Python人脸识别自动开机,值得收藏,具体操作方法:是不是厌烦了每次回家都要点击按钮打开电脑的操作? 你如果有看过我以前的推送,是不是厌烦了每次回家都要喊 "echo,t ...

  5. android右滑返回动画,Android仿微信右滑返回功能的实例代码

    先上效果图,如下: 先分析一下功能的主要技术点,右滑即手势判断,当滑到一直距离时才执行返回,并且手指按下的位置是在屏幕的最左边(这个也是有一定范围的),  这些可以实现onTouchEvent来实现. ...

  6. java用虹软人脸识别SDK实现人脸识别,运行ArcSoft的Java版本Demo出错,未检出人脸(已解决)

    java用虹软人脸识别SDK实现人脸识别,运行ArcSoft的Java版本Demo出错,未检出人脸问题已解决!!! 原因: 虹软人脸识别SDK版本问题! 下载的java版本的demo的SDK是arcs ...

  7. 探探自动右滑_利用AccessibilityService实现探探自动右划

    核心类: AccessibiliiiiiiiityService 简单的说,AccessibilityService 为了方便残障人士实现操作,可以监控app的运行,在界面上实现一些自动操作. 而 A ...

  8. opencv调用ip摄像头实现人脸识别自动拍照

    二话不说,直接上代码 /** @Author 张泰清* @Description //人脸识别* @Date 2019/12/19 13:14* @Param* @return**/import or ...

  9. python实现电脑自动开机_教你用Python人脸识别自动开机,值得收藏

    你如果有看过我以前的推送,是不是厌烦了每次回家都要喊 "echo,turn on my pc",让智能音箱打开电脑的操作? 现在,我们有一个全新的操作,坐到椅子上就能让电脑开机! ...

最新文章

  1. python处理excel表格实例-通过实例学习Python Excel操作
  2. 解决Java Web对Linux服务器不能上传文件的难题
  3. 用pkg给手机装linux,pkg-config的使用方法
  4. Html img 标签
  5. pentaho DI--- Tutorial (spoon)
  6. linux -rpm,linux 的rpm命令
  7. Redis 学习---(12)Redis HyperLogLog
  8. 数据库设计优化经验谈(转载)
  9. 把用户输入的文本转义(主要针对特殊符号和emoji表情)
  10. 数据结构之简单排序算法
  11. 在线教育平台HTML代码,在线教育学习管理平台html前端源码模板
  12. 1024程序员节最新福利之2018最全大数据资料集合
  13. 分组求和并排序python_python 实现分组求和与分组累加求和代码
  14. android tv 国内使用,不花钱解决 Android TV 原生系统国内APP不显示图标
  15. 转贴不说话:陕西芹菜价格创新低 农民开拖拉机自毁芹菜
  16. ImageJ对荧光信号离散的细胞计数方法
  17. 小强升职记思维导图_《小强升职记》思维导图与总结
  18. Vue项目实战之人力资源平台系统(一)框架介绍及项目环境搭建
  19. mysql留存数据表_用mysql统计留存率
  20. 干货|当无线充电遇上AGV小车

热门文章

  1. java构造方法和普通方法区别
  2. 如何关闭Windows10的自动更新?
  3. 聊一聊 JS 中的循环引用及问题
  4. Buff系统框架设计
  5. 周末了放松一下 | 程序员才看得懂的笑话
  6. 真正的成熟是怎样的?
  7. pytorh实现全局平均(最大)池化的两种方式
  8. 一篇深入读懂蓝牙音频!
  9. 【ppt入门教程】如何破解PPT加密文档保护 WINRAR破解PPT文档保护方法
  10. 慢速,混合和快速衰减模式。为什么我们要把事情复杂化?