Linux调用pb模型并编译为so文件


写在前面

本文主要使用g++进行编译,介绍相关指令。

编译so文件

需要预先编译安装OpenCV。
pch.h

#ifndef PCH_H
#define PCH_H

#include <iostream>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/imgproc/types_c.h>
#include <opencv2/dnn.hpp>

using namespace std;
u

Read more

cv2调用tensorflow模型


问题概述

之前从tensorflow的C/C++接口中成功调用了saved_model,回味过程的时候看到opencv中的dnn,可以直接调用训练好的模型,但是这个不是saved_model,而是h5模型转换得到的另一种pb模型。

转换代码

另外会打印输入输出层的名字,使用tensorflow调用转换好的pb模型时会用到,但cv2的dnn就用不到了。

import tensorflow as tf
from tensorflow.python.framework.convert_to_constants import convert_variables_to_constants_v2

def

Read more

TensorFlow的C/C++API


写在前面

上篇文章写了用python训练验证码识别模型,精度还是蛮不错的,但是有个问题不知道各位看官有没有注意到,识别100张验证码用了10s,差不多0.1s/张,这个速度,看起来还是挺快的对吧,实话说一开始我也觉得他蛮快的,直到完成了C++的调用,识别100张验证码用了大概0.43s,吼吼,这是什么速度哇。

难点分析

为了实现这个api调用,至少花了我一整个星期的时间,目前网络上多数资料仍停留在tensorflow1.0版本的C++调用,还要下载源码编译出tensorflow.lib和tensorflow.dll,期间会遇到环境、网络等各种各样的问题,对于不经常接触这些的我实在不怎么友好,上

Read more

基于深度学习的图片验证码识别


写在前面

做自动化流程的时候会遇到各种各样的验证码,图片验证码无疑是最常见的了,本文记录一下破解验证码的过程。

主要环境

Windows 10Pro 64位
PyCharm 2021.2 Community
python3.8.5 64位
tensorflow 2.5.0
keras 2.4.3
opencv-python 4.5.3.56
scikit-learn 0.24.2

目标验证码

这里训练集(手工标注1000张)和验证集(手工标注100张)使用的都是处理过的验证码,原图因为部分原因无法提供 训练集

分割字符

主要代码如下:

# -*- coding: utf-8 -*-
"&q

Read more

selenium中的几个骚操作


写在前面

随着业务需求的增多,遇到的难题也越来越多了,所以想写篇文章记录一下
目前我手上没有代码,我一时半会儿也想不起来,等上班了再copy过来吧
先写一下解决了哪些问题

problems

1、控制chrome自动清空缓存

from selenium import webdriver
import time

browser = webdriver.Chrome()
browser.implicitly_wait(10)

# 访问这个地址会弹出清空缓存确认框
browser.get('chrome://settings/clearBrowserData')

time.sle

Read more

C++控制USB根集线器的启停


写在前面

在此之前先想想做这件事的原因,哦,我想起来了,上周自动化测试好像有关于网银盾的,业务方不接受手工辅助插拔
虽然他们的要求有点难搞,不过正所谓不查一下资料就不知道真的能搞,搜了两天的资料,终于拼凑出了这篇文章
主要功能是实现USB根集线器的自动启停,在这个过程中,USB设备会重新挂载(ps:鼠标也会短暂失灵)

主要思路

在查资料的时候,发现Windows提供了一系列SetUPDi函数,可以操作设备管理器

相关函数

FormatGUID
这个没什么好说的,主要是格式化输出设备类GUID(注意那个“类”字)

void FormatGUID(GUID guid)
{
    cout.fil

Read more

使用系统代理时python和go无法获取依赖


写在前面

python的依赖管理工具是pip,需要什么包时在命令行敲pip install xxx即可。go获取依赖可以使用go get xxx,都是比较方便的,但是如果把敲代码的环境换到公司,使用http代理的情况下,会遇到ssl错误,记录下如何方便的获取依赖,不至于次次开热点..

python

因为会报ssl错误,所以折衷的方法是使用http镜像,国内可以使用的是阿里云镜像
http://mirrors.aliyun.com/pypi/simple/
当然,它也有https版本
主要解决方案 在用户文件夹下新建pip目录,在其中新建pip.ini,贴入以下内容:

[global]
inde

Read more

解决vs2019无法下载安装


写在前面

好久没有更新文章,自己的网站都有点不认识了,实在是有点点忙
最近安装python依赖的时候遇到需要visual C++ 14.0工具集,因此需要visual studio installer来安装
可是因为dns问题一直无法下载,翻遍全网,今天终于找到了解决方案

问题原因

无法正确解析到aka.ms
在命令行ping了一下,发现访问的是127.0.0.1。。
在ipaddress找对应的dns,结果也都不对

解决方案

修改IPV4协议,手动获取dns,首选dns设置为4.2.2.1,备用dns设置为4.2.2.2
然后在命令行刷新dns:ipconfig /flushdns
再pin

Read more

编译Linux内核并添加系统调用


写在前面

今天无聊。。好像我一直都很无聊,想着用VS2019为Linux开发应用程序,过程比较顺利,安装完相应的组件直接建立解决方案就OK了。
然而我觉得用图形化的Linux来作为调试客户端有点占内存(这里用的是本地的虚拟机),所以我就去Ubuntu官网下载了server版,只有命令行窗口,内存分配了2G,暂时解决了我的问题
可是新的疑问产生了,Linux是最伟大的开源软件,可以很方便的得到它的源代码,那么要经过什么样的过程,这些源代码才会变成供我们使用的操作系统呢?
带着这个疑问,我打开了百度搜索,结果耗费了6个小时,不过好在编译成功了

运行环境

Oracle VM VirtualBox
U

Read more

使用superisor管理进程


写在前面

今天想使用supevisor管理Linux中的进程,主要是uwsgi,因为我现在的服务器上有三个web应用同时在运行,其中一个是wordpress,由nginx独立运行,另外两个采用nginx+uwsgi的方式,这样如果对其中一个作出修改,难免会连带着停掉另外一个的服务,及其不方便,所以想到用supervisor来管理,意外的解决了困扰我很久的缓存问题。

配置环境

安装与启动:

#安装服务
sudo apt install supervisor -y

查看状态:

sudo service supervisor status

修改配置文件:

sudo vim /etc/superv

Read more