How to write a auto gather program using python

1 安装 opencv , 在设置好的虚拟目录执行

 

再安装 pyautogui

 

2  python + opencv 截屏

 

3:   How do I find an image contained within an image?    From :

https://stackoverflow.com/questions/7853628/how-do-i-find-an-image-contained-within-an-image

 

 

这段代码会在大图上, 以矩形标出match 的部分 , if exist match

 

 

4  在 windows , python 37 ,32位环境, 执行这段代码能找出 exactly match 的部分, 并自动把鼠标移动到那里, 点击右键

 

缺点是只能精确匹配, 图像稍有差别 , 或者放大缩小,变换镜头角度都不行

已经有人提出过这个问题, 在 : https://answers.opencv.org/question/169613/how-does-macthtemplate-deal-with-scaling/

关键字:

意思是 opencv 的  matchTemplate  函数不是比例变换不相关的

那么, 如何使 matchTemplate  可以比较不同比例的图像, 参见这个文章:

https://www.pyimagesearch.com/2015/01/26/multi-scale-template-matching-using-python-opencv/

in this article , 解决方法是: 对于大图, 循环放大缩小多次, 以匹配小图 , 但是, 这样只是解决了比例问题, 还是没解决角度问题


更先进的方法应该是: 特征匹配或者关键点匹配, 参见文章:

https://www.analyticsvidhya.com/blog/2019/10/detailed-guide-powerful-sift-technique-image-matching-python/

 

或者这个文章 更好一些: https://blog.csdn.net/HuangZhang_123/article/details/80660688

 

找到特征匹配后, 如何找相应点的坐标: https://stackoverflow.com/questions/30716610/how-to-get-pixel-coordinates-from-feature-matching-in-opencv-python

 

 

关键字 : cv2.cornerHarris    函数

 

理论分析和实现 SIFT算法 : https://www.geek-share.com/detail/2777206412.html

 

 

 

 

 

5  如何模糊匹配, 即无论图像缩放, 观察角度的变化, 都能正确匹配到

参考文章 :  https://www.lagou.com/lgeduarticle/74061.html        

这个不一定对

 

 


 

 

 

 

 

tokbox 测试环境的搭建

注册账号 ,然后新建一个project , 这样就得到了 api key , 和 secret , 如图

  • 第二步,建server , 以 python 为例 :

sample 程序在  https://github.com/opentok/Opentok-Python-SDK

先建立一个 python 虚拟目录, 这样得到干净的初始环境 。

然后, 安装 flask 和 opentok 库:


安装完成后把例子程序的helloworld项目的 helloworld.py, 根据自己的情况修改为

然后在虚拟环境内执行 ,本机的虚拟环境目录在: F:\Programs\Python\py37virtualenvs\tokbox

如果能出现下图就说明服务启动成功了

有一个常见的错误就是: 当试图 create session时 , 出现

tokbox Failed to create session, invalid credentials 的错误, 这可能是因为测试机器时间和标准时间不一致 ,解决方法是:  setting–>datetime setting –>set time automatically on


成功启动服务后, http://127.0.0.1:5000

如果有摄像头, 就能看到图像。

服务启动后会在页面显示 sessionid 和 生成的  token

 


首先找出刚才建立的server 的 api_key , session_id 和 token  :

46419702

1_MX40NjQxOTcwMn5-MTU2ODI3MTIwOTMzNH5QcEY4aE0ra0owaC9DTTAzdnRoRTlxK2J-UH4

T1==cGFydG5lcl9pZD00NjQxOTcwMiZzaWc9ZDJmZmRmMGU1MmE4YjBkMmQyOTEzMjgzNDBmZjZjYzMwN2EwY2U0ZTpzZXNzaW9uX2lkPTFfTVg0ME5qUXhPVGN3TW41LU1UVTJPREkzTVRJd09UTXpOSDVRY0VZNGFFMHJhMG93YUM5RFRUQXpkblJvUlRseEsySi1VSDQmY3JlYXRlX3RpbWU9MTU2ODI3MjU4OCZleHBpcmVfdGltZT0xNTY4MzU4OTg4JnJvbGU9cHVibGlzaGVyJm5vbmNlPTIwNTQyNiZpbml0aWFsX2xheW91dF9jbGFzc19saXN0PQ==

打开例子程序的 Basic Video Chat 子项目

修改 /js/config.js , 把 api_key , session_id 和 token 等都修改为和之前服务器建立的一致 ,并且把 server_url 的那句注释掉:

 

然后打开  Basic Video Chat 的 index.html 程序, 就可以与服务器互通视频和语音。

How to write an auto-fish scripts for wow classic

  • 建立python 虚拟环境

查看当前python 版本 :  python –version

查看 32bit还是 64bit, 方法是

 

  • 依次安装       numpy  (数学库) :  pip install numpy

matplotlib  (坐标图)  :  pip install matplotlib

opencv-python  (图像识别) :  pip install opencv-python

pyscreenshot  (截屏) : pip install pyscreenshot

pillow  (这个库是替代旧的 image库) : pip install Pillow

autopy (模拟按键)

  • 尝试安装 pip install win32gui , 但不能安装 ,32和64版本都不行,因为 win32gui 只有python 3.6 版本

重新装python 3.6.7

在安装win32gui之后,还要安装 pywin32 

安装完成后, 执行这个脚本测试一下:

方法是先执行, 在新建一个notepad , 然后让 notepad 获得焦点, 会每2秒打字一个 “1”

但是, 这是对 notepad的键盘模拟, 对 wow能不能一样, 待测试。

  • 试试能不能截屏 :

  • 找 bobber (或者叫 float )的方法:

 

 

  • How to know if fish ready

 

  • How to filter loot , for example only keep black mouth

use addon :   EasyLoot

 

  • 参考文章:

https://github.com/YECHEZ/wow-fish-bot  

这个新一些


https://github.com/kioltk/wow-fishipy

这个方法比较旧, 但是opencv用的好

 

 

 

 

  • 参考文章 :  https://www.reddit.com/r/learnpython/comments/22tke1/use_python_to_send_keystrokes_to_games_in_windows/

same purpose with me


https://github.com/kioltk/wow-fishipy/blob/master/fishing.py

主要是学这个


https://github.com/FrontMage/wowAutoFishing

图像识别找 bubble , 声音确定点右键的时机

 

  • 已有的bot :

https://www.ownedcore.com/forums/wow-classic/wow-classic-bots-programs/799510-vanillabuddy-fishbot-support-thread.html

还不知道是什么功能

此外 youtube 也有很多classic fish bot的视频,不知真假

 

 

python 3.7.4 建立虚拟环境

virtual env 可以理解为一个个独立的docker , 互相之间不影响, 比如一个python项目要用到opencv , 最好的办法是把opencv安装在 virtual env 而不是全局 ,这样其他项目仍能保持干净的最初环境。


如何新建 virtual env , 参考文章:

https://docs.python.org/3/library/venv.html

https://docs.python.org/3/tutorial/venv.html

  • 第一步 :

    会创建一个新目录 , 此目录自动生成 include , lib, scripts 子目录, 还有 pyvenv.cfg配置文件
  • 创建好的虚拟目录位于 :  F:\Programs\Python\py37virtualenvs\tokbox
  • mac 系统 , 进入创建好大目录, 执行  source activate

 

 

python plot 自动更新

https://stackoverflow.com/questions/4098131/how-to-update-a-plot-in-matplotlib

 

测试脚本:

 

python 如何建立自己的 module 和 function

  • 所谓的module就是一个 .py 文件 , 出来python自带的, 也可以自己建

  • 这句如果出  no module name XXXX , 是因为当 python 尝试 load时, 找不到用户自己建的 .py文件

解决办法是 : 在

之后 , 加

目的是把程序当前路径加入到查找范围

此方法来自 : https://stackoverflow.com/questions/51820904/passing-an-argument-to-python-c-api-function-call


  • 这是因为numpy 也是第三方 lib , 默认安装没有, 所以需要

 

 

c++ 如何调用 python 脚本

环境  vs2102  V11

python 36

代码来源 :   https://www.geeksforgeeks.org/calling-python-from-c-set-1/

例子调用了 math module 的 pow 函数  ,如果想调用自编的 module ‘s function , 见 : http://www.notesoflyang.com/?p=2112   

  • 遇到的问题

a) compile 时找不到 <inttypes.h> , 原因是 : visual studio 不支持 c-99  , 解决方法是自己下载放到 vs 的 include 目录去

https://stackoverflow.com/questions/13266868/ffmpeg-inttypes-h-not-found-error

b) 编译时出现

原因是 :  32位的程序链接的64位 python的lib ,

解决方法: 再装一个32位的python , 本例中,装的是  python 37 — 32位

https://stackoverflow.com/questions/15029519/error-lnk2001-unresolved-external-symbol-imp-py-initmodule4

https://stackoverflow.com/questions/16094343/how-to-embed-python-2-4-in-c-application-using-vs-c-6-0


c)  编译时提示 cannot open file ‘python37_d.lib’

原因是 : 应用程序的配置是 : debug win32  , 所以编译器尝试找 python37_d.lib

解决方法 : 在 include puthon.h 文件时, 这样写 , 绕过编译器自动选择

 

  • 传2个double 参数给 python 某模块函数的写法是

 

  • 如果想传 double数组

 

 

  • 参考文档

https://stackoverflow.com/questions/3286448/calling-a-python-method-from-c-c-and-extracting-its-return-value

调用 python 脚本并取返回值


https://www.geeksforgeeks.org/calling-python-from-c-set-1/

这个教程比较好

 


很详细的教程  , python36 +  visual studio

http://justinwatson.name/2017/03/21/Embedding_Python_in_C++.html

用 python + flask 做一个实现基本 CRUD 的 rest api

环境  win10 64 bit , python 3.6

 

先建立一个虚拟目录

进入所建立虚拟目录的scripts 目录 , 执行

在虚拟目录跟目录执行

安装完成后执行

查看所安装的版本

在跟目录新建一个python 脚本 , 命名为  app.py

设置默认启动的脚本

启动

 

之后用浏览器访问web service ,即可看到返回结果


接下来, 如果实现 CRUD  api

新建脚本, 取名为 hello.py

 

设置为默认启动脚本

从  http://www.sqlitetutorial.net/sqlite-sample-database/

下载 sqlite example 数据库 :  chinook.db  ,copy 到 hello.py 同目录

启动flask

此时打开浏览器

即可看到 tracks 表的所有记录

到目前为止, 只是实现了查询

 

 

参考资料

https://www.codementor.io/sagaragarwal94/building-a-basic-restful-api-in-python-58k02xsiq

大部分对, 但是  这句

不对, 在我的环境应为


sqlite3 工具下载   https://www.sqlite.org/download.html

 


sqlite example 数据库 下载

http://www.sqlitetutorial.net/sqlite-sample-database/

django 框架

  • 教程

https://djangobook.com/

  • 安装

首先需要虚拟环境

随便选一个目录 :  执行 

注意最后有个点

然后进入 Scripts 激活这个虚拟目录 :  

激活后如果看到目录前出现 (selected folder name  ) 就算成功 (注意, 每次重启电脑后都要 activate )

最后安装 django

安装成功后查看版本

 

版本是 2.2.2

 

安装部分参考 :  https://stackoverflow.com/questions/35950740/virtualenv-is-not-recognized-as-an-internal-or-external-command-operable-prog

  •  Hello world

https://djangoforbeginners.com/hello-world/

 

安装完成 django之后 ,新建一个 app

进入 app 执行

此命令将会生成 sqllite 数据库

 

创建超级用户

lthxk ;  Piercing77 ;  mzcw2011@sina.cn

 

 

 

启动server

 

将默认结构导入 sqllite数据库 ,  将models.py 的结构自动在数据库生成

 

新建一个app ,  可以有多个app

 

html templete store    https://themeforest.net

  • 怎么建一个简单的app

Building and deploying an Enterprise Django Web App in 16 hours

https://medium.com/python-pandemonium/building-and-deploying-an-enterprise-django-web-app-in-16-hours-79e018f7b94c


数据库部分 

  • 能不能直接用已有的数据库连接器比如 pymysql

不能, 必须在django的虚拟目录重新

 

  • 怎么连接 数据库

for  连接 : 修改 settings.py ,

  • 把表自动生成 类

这样所有的表都会被定义在  models 里面

用新生成的 models.py 替换 pages 目录原有的即可

  • 怎么显示表或者查询结果

a)  视图直接显示

先 import  models

因为 models.py 在 pages 目录下

然后在视图写:

参考 :  https://stackoverflow.com/questions/7287027/displaying-a-table-in-django-from-database

 

如果要显示的好看一点 , 用 django-tables2 ,  带分页和排序

django-tables2 安装 :

安装成功显示

 

在 settings.py  加上  “django_tables2”,

 

  • 如果已经用这个命令 python manage.py inspectdb > models.py  生成了 py 文件

但是之后又修改了表结构 ,怎么重新更新  models.py  ?


 

  • 怎么显示 matlibplot
  • 增删改   (CRUD)

https://rayed.com/posts/2018/05/django-crud-create-retrieve-update-delete/

  • how to debug , include step by step

https://www.bedjango.com/blog/how-debug-django-useful-tips/

 

  • How to call rest api

https://stackoverflow.com/questions/30259452/proper-way-to-consume-data-from-restful-api-in-django

 

如何把 admin 和 rest api 合起来, 就是说  ,admin register 的 model 是从 rest api 得来  , 而不是内部数据库

https://stackoverflow.com/questions/9013099/django-admin-using-restful-api-v-s-database

这个问题最接近 , 但是似乎没答案

 


  • django 要求表必须有 primary key

见 : https://stackoverflow.com/questions/40862994/django-error-unknown-column-categorytree-id-in-field-list

https://stackoverflow.com/questions/605896/django-querying-read-only-view-with-no-primary-key

  • 重要的概念 :

a)  什么是 migration

Migrations are Django’s way of propagating changes you make to your models (adding a field, deleting a model, etc.) into your database schema

注意是从 models ——> database

如果database 先发生改变, 怎么更新 models ?

这篇文章说的很详细 : https://stackoverflow.com/questions/30547580/django-update-models-py-when-database-changes

b) ORM  mean object relation mapping

当设置好 settings.py 的数据库连接后, 一旦 django create a model , mysql 那边会自动 建立相应的表

支持

  • PostgreSQL
  • MySQL
  • SQLite
  • Oracle

教程 :  https://djangobook.com/mdj2-models/

 

  • Django 支持的mysql 版本  : 大于等于  5.6

当前是  5.1 版本 , migrate 会出错

https://stackoverflow.com/questions/52730817/django-migrate-error-mysql-exceptions-programmingerror-1064-you-have-an-err

  • 找一个模板

去  https://themeforest.net  找 

admin templete

github 的  https://github.com/guohongze/adminset


  • admin

How to add models to admin.py :   https://www.dev2qa.com/how-to-add-models-to-django-admin-site/