php微信推送

PushScript

源码:https://github.com/iwonmo/pushscript

下载:PushScript.jar.zip

使 用

将文件下载并解压会的到一个PushScript.jar的文件,上传到服务器。在文件同目录下新建一个http文件。

data/PushScript.jar

data/http '是TXT文件,不过没有后缀。

http文件里面填写你的回调地址。

运行

nohup java -jar PushScript.jar &

PHP

socket_connect($socket,'127.0.0.1', 1992);
socket_write($socket, "用户OPEN或者其他文本数据|过期时间");

当达到过期时间后,会自动回调你填写的接口

如下图

WechatIMG3.jpeg

Linux安装java

JDK:https://pan.baidu.com/s/148iyCSr2VYO4divsIHKVUw 提取码: ue5c 

工具:WinSCP

使用WinSCP在usr/local新建一个java文件夹例如:/usr/local/java/,然后将JDK包上传解压。

打开/etc/profile文件最底部输入如下内容

JAVA_HOME=/usr/local/java/jdk1.8.0_211
JRE_HOME=/usr/local/java/jdk1.8.0_211/jre
PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
export JAVA_HOME JRE_HOME PATH CLASSPATH

执行一下命令 source /etc/profile 免重启使配置生效。

软链接添加方法

ln -s /usr/local/java/jdk1.8.0_211 /bin/java /usr/bin/java


OpenCv 训练自己的分类器

工具(64位)

opencv_createsamples

opencv_traincascade

使用64位你可以使用更多的内存,因为32位可以使用的地址很少,很容易造成训练过程中的内存不足。上述两个工具在编译源代码的时候会自动生成,如果你没有编译源代码,那么你可以直接下载:https://opencv.org/releases 在bin目录下就可以找到这两个工具。

训练样本:正负样本

正样本:仅包含被检测物体的样本,并且距离边界尽量要小,图片尺寸大小一致。

负样本:不包含被检测物体的样本,图片尺寸大小无要求。

建议:正样本图片尺寸尽量小一些,并且进行归一化然后灰度处理,检测物体距离边界近一些,背景尽量是纯色,少夹杂一些颜色,突出被检测物体。

数量:正样本 : 负样本=1 : 3 这个比例在OpenCv官网有一个更精准的说法,最大是1 : 3,负样本大于正样本,这样可以保证训练过程中负样本不会因为太少而终止训练。

实验

这里我已识别二维码为例,首先编写代码生成随机的正样本二维码,这里我生成的二维码是50x50像素,根据你要识别的物体,尽量尺寸小一些。

111.png

这里并没有进行归一化灰度化,进行了更好,那样时间上会大大缩短。

负样本数据是直接爬取的网上的图片,内容随机。
微信截图_20190710150000.png

负样本这里我进行了转换,主要是抓取的图片太大,所以进行了一下转换。

结构目录

33.png

neg和pos是存放训练图片的,按说明把正负样本放进去就可以了,编号最好从0开始顺序编号,因为后续的描述文件有用到,有一点图片的格式最好是jpg和png其他的格式需要自己编译支持才行。网络抓取的图片可能保存的后缀是jpg但是真实的文件格式可能是其他的,这点需要注意。

neg.txt 描述文件内容如下

neg/1.jpg

neg/2.jpg

...

...

...

neg/599.jpg

neg/600.jpg

这里我准备了600张负样本

pos.txt描述文件内容如下

pos/1.jpg 1 0 0 50 50

pos/2.jpg 1 0 0 50 50

...

...

...

pos/199.jpg 1 0 0 50 50

pos/200.jpg 1 0 0 50 50

这里我准备了200张正样本比例正好是1 : 3(正 : 负),

格式【图片路径】【图片内包含的被检测物体的数量】【被检测物体的左上角坐标】【被检测物体的右下角坐标】

这里没有去量二维码在图片内的坐标,所以认为是整张图都是,那就是x:0-y:0-x:50-y:50。

生成vec文件

命令:opencv_createsamples.exe -vec pos.vec -info pos.txt -num 200 -w 50 -h 50

格式:opencv_createsamples.exe -vec 【vec文件存储名字】 -info 【正样本描述文件】 -num 【正样本数量】 -w 【正样本图片宽度】 -h 【正样本图片高度】

开始训练

命令:opencv_traincascade.exe -data xml -vec pos.vec -bg neg.txt -numPos 200 -numNeg 600 -numStages 15 -w 50 -h 50 -minHitRate 0.999 -maxFalseAlarmRate 0.2 -weightTrimRate 0.95 -featureType LBP

格式:opencv_traincascade.exe -data xml -vec 【vec文件存储名字】 -bg 【负样本描述文件】 -numPos 【正样本数量】 -numNeg 【负样本数量】 -numStages 【训练层级数】 -w 【正样本图片宽度】 -h 【正样本图片高度】 -minHitRate 【接近1的数】 -maxFalseAlarmRate 【接近0的数】 -weightTrimRate 0.95 -featureType 【算法类型】

具体的参数可以参考OpenCv的说明,注意你的正样本数填写的时候如果你觉得样本不是很规范,那么本来你训练的是200张,这里你就可以填写150,尽量填写的小于真实的数字,不容易出错,由于这里是用工具生成的正样本,比较规范,所以还是填写的200。

训练过程

微信截图_20190710152027.png

N:层数  %

HR:当前层数 对正样本识别正确的概率

FA:当前层数 对负样本识别错误的概率

训练完成后会在XML文件夹下生成一个cascade.xml文件,这个文件就是分类器。XML文件夹下还会有每层的结果,训练的过程中完全可以Ctrl+C进行打断,下次继续训练。

识别结果

微信截图_20190710143918.jpg

代码

/** 定义一个级联分类器 */
cv::CascadeClassifier Detector;
/** 加载分类器 */
Detector.load("C:\\Users\\iwonmo\\Desktop\\cascade.xml")
/** 加载进来图片 */
cv::Mat image = cv::imread("C:\\Users\\iwonmo\\Desktop\\55.jpg");
/** 定义检测结果变量 */
std::vector<cv::Rect> qrcode;
/** 进行识别并会把结果存储到qrcode里 */
Detector.detectMultiScale(image , qrcode, 1.3, 1, 0, cv::Size(50, 50));
/** 标记位置 */
for (size_t t = 0; t < qrcode.size(); t++) {
    cv::rectangle(image, qrcode[t], cv::Scalar(0, 108, 255), 3);
}
/** 显示图片 */
cv::imshow("qrcode", image);

注意训练什么分类器,就定义对应的分类器变量。如果你是HOG分类器,则需要定义HOGDescriptor类型的Detector。

opencv 实现人脸对比

基础

VS2013

CMake 3.7.2

OpenCV:(版本:3.3.0):https://github.com/opencv/opencv

opencv_contrib:(版本:3.3.0) :https://github.com/opencv/opencv_contrib

下载

OpenCV和opencv_contrib下载的时候一定要选择对应版本

微信截图_20190703171018.png

生成工程文件

用CMake编译的时候,第一次点击Configure会出现很多红色,这个红色的出现,是让你进行编译确认。正确的编译顺序。

阅读全文»

MysqlEd 外网连接数据库

版本要求:≥ 1.0.8 

1、运行语句

update user set host='%' where user ='root'

1562033169(1).png

这里可能会出现错误:Duplicate entry '%-root' for key 'PRIMARY' 可不必理会。

2、退出程序

3、重新打开

4、运行语句

select host,user from user

5、显示如下(存在 即代表成功)

1562033153(1).png

6、测试连接

1562033198(1).png


主机名或IP地址:请查看手机信息里的IP地址

端口:3306

用户名:root

密码:空


注:如果您的网络是局域网则仅可在局域网内访问外网无法连接。