Python

使用darknet识别点选验证码详细过程(附带源码)

项目源码:https://github.com/nickliqian/darknet_captcha darknet_captcha 项目基于darknet开发了一系列的快速启动脚本,旨在让图像识别新手或者开发人员能够快速的启动一个目标检测(定位)的项目。 如果有没有讲清楚的地方,欢迎提issue和PR,希望能和大家共同完善! 本项目分为两个部分: 提供两个目标检测(单分类和多分类点选验证码)的例子,你可以通过例子熟悉定位yolo3定位网络的使用方式 基于darknet提供一系列API,用于使用自己的数据进行目标检测模型的训练,并提供web server的代码 目录 项目结构 开始一个例子:单类型目标检测 第二个例子:多类型目标检测 训练自己的数据 Web服务 API文档 其他问题 使用阿里云OSS加速下载 GPU云推荐 CPU和GPU识别速度对比 报错解决办法 TODO 项目结构 项目分为darknet、extent、app三部分 darknet: 这部分是darknet项目源码,没有作任何改动。 extent: 扩展部分,包含生成配置、生成样本、训练、识别demo、api程序。 app: 每一个新的识别需求都以app区分,其中包含配置文件、样本和标签文件等。 开始一个例子:单类型目标检测 以点选验证码为例 darknet实际上给我们提供了一系列的深度学习算法,我们要做的就是使用比较简单的步骤来调用darknet训练我们的识别模型。 推荐使用的操作系统是ubuntu,遇到的坑会少很多。 如果使用windowns系统,需要先安装cygwin,便于编译darknet。(参考我的博客:安装cygwin) 下面的步骤都已经通过ubuntu16.04测试。 1.下载项目 git clone https://github.com/nickliqian/darknet_captcha.git 2.编译darknet 进入darknet_captcha目录,下载darknet项目,覆盖darknet目录: cd darknet_captcha git clone https://github.com/pjreddie/darknet.git 进入darknet目录,修改darknet/Makefile配置文件 cd darknet vim Makefile 如果使用GPU训练则下面的GPU=1 使用CPU训练则下面的GPU=0 GPU=1 CUDNN=0 OPENCV=0 OPENMP=0 DEBUG=0 然后使用make编译darknet: make 不建议使用CPU进行训练,因为使用CPU不管是训练还是预测,耗时都非常久。 如果你需要租用临时且价格低的GPU主机进行测试,后面介绍了一些推荐的GPU云服务。 如果在编译过程中会出错,可以在darknet的issue找一下解决办法,也可以发邮件找我要旧版本的darknet。 3.安装python3环境 使用pip执行下面的语句,并确保你的系统上已经安装了tk: pip install -r requirement.txt sudo apt-get install python3-tk 4.

Jetson TX2的各种坑.md

最近在使用Jetson TX2 在跑实验,然后遇到下面问题,做笔记,记录一下。 内存出错无法,中断 # 出现下面那种错误 2019-01-11 19:41:46.959970: E tensorflow/stream_executor/cuda/cuda_driver.cc:1068] failed to synchronize the stop event: CUDA_ERROR_LAUNCH_FAILED 2019-01-11 19:41:46.960033: E tensorflow/stream_executor/cuda/cuda_timer.cc:54] Internal: error destroying CUDA event in context 0x367c800: CUDA_ERROR_LAUNCH_FAILED 2019-01-11 19:41:46.960059: E tensorflow/stream_executor/cuda/cuda_timer.cc:59] Internal: error destroying CUDA event in context 0x367c800: CUDA_ERROR_LAUNCH_FAILED 2019-01-11 19:41:46.960185: F tensorflow/stream_executor/cuda/cuda_dnn.cc:2045] failed to enqueue convolution on stream: CUDNN_STATUS_EXECUTION_FAILED [1] 10332 abort (core dumped) python monodepth_simple.py --image_path ./data/training/image_2/000000_10.jpg 解决办法: config = tf.ConfigProto(allow_soft_placement=True) config.gpu_options.allow_growth = True #加多这一行 sess = tf.

图像色彩增强之python实现——MSR,MSRCR,MSRCP,autoMSRCR

转载请注明出处:https://blog.csdn.net/weixin_38285131/article/details/88097771 最近在做街景图象色彩校正方面的工作,对于过暗,过曝光,以及背光等现象,用过一些gamma校正以及其他的方法,最终选择基于Retinex原理的方法对这几种现象都有一定的增强效果。 Retinex理论基于一下假设: 1.真实世界是无颜色的,我们所感知的颜色是光与物质的相互作用的结果。我们见到的水是无色的,但是水膜—肥皂膜却是显现五彩缤纷,那是薄膜表面光干涉的结果。 2.每一颜色区域由给定波长的红、绿、蓝三原色构成的; 3.三原色决定了每个单位区域的颜色。 Retinex理论的基础理论是物体的颜色是由物体对长波(红色)、中波(绿色)、短波(蓝色)光线的反射能力来决定的,而不是由反射光强度的绝对值来决定的,物体的色彩不受光照非均匀性的影响,具有一致性,即retinex是以色感一致性(颜色恒常性)为基础的。不同于传统的线性、非线性的只能增强图像某一类特征的方法,Retinex可以在动态范围压缩、边缘增强和颜色恒常三个方面达到平衡,因此可以对各种不同类型的图像进行自适应的增强。 40多年来,研究人员模仿人类视觉系统发展了Retinex算法,从单尺度Retinex算法,MSR改进成多尺度加权平均的MSR算法,再发展成彩色恢复多尺度MSRCR算法和色彩增益加权的AutoMSRCR算法。 主要算法公式介绍可以参考如下博客: https://blog.csdn.net/ajianyingxiaoqinghan/article/details/71435098 我再对这几种方法稍稍总结一下: 一丶单尺度的Retinex——SSR 可以理解为图像分解,一幅图像S(x,y)可以分为他的光照图象 I(x,y)和反射图像R(x,y),反射图象是根据物体本身的反射特性,所以基本不会发生变化,光照图像是根据环境明暗来决定的。 只看公式的话感觉一下就看懵逼了,我感觉就三个步骤: 1)将图像进行log变换 2)然后将log图像进行高斯模糊 3)利用原图和模糊之后的log图像做差分 二丶多尺度的Retinex——MSR 通俗解释:就是再多个单尺度Retinex做平均,区别是在第二步高斯模糊是选择的sigma是不同的 原始图像进行三次SSR 高斯模糊选择15,80,200作为高斯模糊sigma参数 对三次的SSR结果做平均即为MSR图像 三丶彩色恢复多尺度Retinex——MSRCR,MSRCP等 对多尺度MSR结果做了色彩平衡,归一化,增益和偏差线性加权 四丶参数说明 { “sigma_list”: [15, 80, 200],多尺度高斯模糊sigma值 “G” : 5.0,增益 “b” : 25.0,偏差 “alpha” : 125.0, “beta” : 46.0, “low_clip” : 0.01, “high_clip” : 0.99 } 五丶图像增强结果: 六丶代码 retinex.py import numpy as np import cv2 def singleScaleRetinex(img, sigma): retinex = np.log10(img) - np.log10(cv2.GaussianBlur(img, (0, 0), sigma)) return retinex def multiScaleRetinex(img, sigma_list): retinex = np.

pyqt5练习——海康摄像头登录信息界面

环境 PyQt 5.11.2 Python 3.6 分析 海康摄像头开发,其中一部分需要用户手动输入IP、端口号、用户名、密码等信息,这些信息可以单独写成一个设置窗口,从窗口获取信息,并传入主窗口,方便后续开发。 窗口UI 实现功能 对于IP地址、端口号、用户名、密码,能够根据正则表达式控制用户的输入类型,设置输入长度; 对于密码,可以设置明文、暗文显示 当用户输入完成后,判断IP地址、端口号、用户名、密码信息是否按要求类型载入到系统变量,为后续传参做准备。 对于某一项输入类型不合要求,弹窗提示,不会载入系统变量 代码 from PyQt5.QtWidgets import * from PyQt5.QtCore import * from PyQt5.QtGui import * import sys import threading window_width = 1920 window_height = 1080 button_width = 48 class Setting(QWidget): valid_signal = pyqtSignal() def __init__(self): super(Setting, self).__init__() self.ip = '' self.port = '' self.user = '' self.passwd = '' self.widgets = [] self.ip_label = QLabel(self) self.ip_label.setFixedHeight(32) self.ip_label.setText("ip地址:") self.widgets.append(self.ip_label) self.

暗文密码输入

import getpass _usrname = "Alex" _password = "123" username = input("username:") password = getpass.getpass("password:") if _usrname == username and _password == password: print("Welcome user {name} login...".format(name=username)) else: print("Invalid username or password!") #在pycharm中getpass不好使,会卡机

4.python-爬虫的基础认知,爬虫的几大分类?

分类 来自:百度百科 网络爬虫按照系统结构和实现技术,大致可以分为以下几种类型:通用网络爬虫(General Purpose Web Crawler)、聚焦网络爬虫(Focused Web Crawler)、增量式网络爬虫(Incremental Web Crawler)、深层网络爬虫(Deep Web Crawler)。 实际的网络爬虫系统通常是几种爬虫技术相结合实现的 。 通用网络爬虫 通用网络爬虫又称全网爬虫(Scalable Web Crawler),爬行对象从一些种子 URL 扩充到整个 Web,主要为门户站点搜索引擎和大型 Web 服务提供商采集数据。 由于商业原因,它们的技术细节很少公布出来。 这类网络爬虫的爬行范围和数量巨大,对于爬行速度和存储空间要求较高,对于爬行页面的顺序要求相对较低,同时由于待刷新的页面太多,通常采用并行工作方式,但需要较长时间才能刷新一次页面。 虽然存在一定缺陷,通用网络爬虫适用于为搜索引擎搜索广泛的主题,有较强的应用价值。 通用网络爬虫的结构大致可以分为页面爬行模块 、页面分析模块、链接过滤模块、页面数据库、URL 队列、初始 URL 集合几个部分。为提高工作效率,通用网络爬虫会采取一定的爬行策略。 常用的爬行策略有:深度优先策略、广度优先策略 。 1) 深度优先策略:其基本方法是按照深度由低到高的顺序,依次访问下一级网页链接,直到不能再深入为止。 爬虫在完成一个爬行分支后返回到上一链接节点进一步搜索其它链接。 当所有链接遍历完后,爬行任务结束。 这种策略比较适合垂直搜索或站内搜索, 但爬行页面内容层次较深的站点时会造成资源的巨大浪费 。 2) 广度优先策略:此策略按照网页内容目录层次深浅来爬行页面,处于较浅目录层次的页面首先被爬行。 当同一层次中的页面爬行完毕后,爬虫再深入下一层继续爬行。 这种策略能够有效控制页面的爬行深度,避免遇到一个无穷深层分支时无法结束爬行的问题,实现方便,无需存储大量中间节点,不足之处在于需较长时间才能爬行到目录层次较深的页面 。 聚焦网络爬虫 聚焦网络爬虫(Focused Crawler),又称主题网络爬虫(Topical Crawler),是指选择性地爬行那些与预先定义好的主题相关页面的网络爬虫[8]。 和通用网络爬虫相比,聚焦爬虫只需要爬行与主题相关的页面,极大地节省了硬件和网络资源,保存的页面也由于数量少而更新快,还可以很好地满足一些特定人群对特定领域信息的需求 。 聚焦网络爬虫和通用网络爬虫相比,增加了链接评价模块以及内容评价模块。聚焦爬虫爬行策略实现的关键是评价页面内容和链接的重要性,不同的方法计算出的重要性不同,由此导致链接的访问顺序也不同 。 1) 基于内容评价的爬行策略:DeBra将文本相似度的计算方法引入到网络爬虫中,提出了 Fish Search 算法,它将用户输入的查询词作为主题,包含查询词的页面被视为与主题相关,其局限性在于无法评价页面与主题相关 度 的 高 低 。 Herseovic对 Fish Search 算 法 进 行 了 改 进 ,提 出 了 Sharksearch 算法,利用空间向量模型计算页面与主题的相关度大小 。

cv2伪彩色applyColorMap()函数

本文主要介绍cv2模块中的伪彩色applyColorMap()函数。 引用自:https://blog.csdn.net/u013381011/article/details/78341861 colormap(色度图) 假设我们想在地图上显示美国不同地区的温度。我们可以把美国地图上的温度数据叠加为灰度图像——较暗的区域代表较冷的温度,更明亮的区域代表较热的区域。这样的表现不仅令人难以置信,而且代表了两个重要的原因。首先,人类视觉系统没有被优化来测量灰度强度的微小变化。我们能更好地感知颜色的变化。第二,我们用不同的颜色代表不同的意思。用蓝色和较温暖的温度用红色表示较冷的温度更有意义。 温度数据只是一个例子,但还有其他几个数据是单值(灰度)的情况,但将其转换为彩色数据以实现可视化是有意义的。用伪彩色更好地显示数据的其他例子是高度、压力、密度、湿度等等。 在OpenCV中使用applycolormap(伪彩色函数) OpenCV的定义12种colormap(色度图),可以应用于灰度图像,使用函数applycolormap产生伪彩色图像。让我们很快看到如何将色度图的一种模式colormap_jet应用到一幅图像中。 下面是示例代码: import cv2 import numpy as np def colormap_name(id): switcher = { 0 : "COLORMAP_AUTUMN", 1 : "COLORMAP_BONE", 2 : "COLORMAP_JET", 3 : "COLORMAP_WINTER", 4 : "COLORMAP_RAINBOW", 5 : "COLORMAP_OCEAN", 6 : "COLORMAP_SUMMER", 7 : "COLORMAP_SPRING", 8 : "COLORMAP_COOL", 9 : "COLORMAP_HSV", 10: "COLORMAP_PINK", 11: "COLORMAP_HOT" } return switcher.get(id, 'NONE') img = cv2.imread('./pluto.jpg', cv2.IMREAD_GRAYSCALE) im_out = np.zeros((600, 800, 3), np.uint8) for i in range(0, 4): for j in range(0, 3): k = i + j * 4 im_color = cv2.

pygame游戏编程03,走!到森林里去

前言 小乖在得到我们发送的手机定位后,终于找到了正确的方向,呼呼地赶了过来。但当她来到“金暗之森”跟前的时候,一扫一路上的疲态,立马就变得跃跃欲试,恨不得马上进入其中探险。 “小乖!小乖!”你可等等啊,这里面麻烦不断,得先做些准备工作呀。好吧,哪里还能等我们把话说完,附近早已经不见了小乖的影子啦。。。 出现在森林之中 1.Ship类 在本章,由于小乖的到来,我们需要建立一个新类来对小乖的行为作出管理约束。这便是我们的Ship类啦。Ship类目前的主要功能为在游戏窗口中绘制人物、通过键盘来控制人物的行动。来看以下代码: import pygame class Ship: def __init__(self, screen, img_path="rc/pic/ic_actor.png", speed_factor=1): """ 构造方法,目前负责在指定位置绘制游戏人物,使人物对键盘作出响应 :param screen: 当前游戏窗口的Surface对象 :param img_path: 人物图片的路径 :param speed_factor: 控制人物移动的快慢 """ self.screen = screen self.img = pygame.image.load(img_path) # 获得当前人物图片的Surface对象 self.rect = self.img.get_rect() # 获得人物图片外接矩形的Rect对象 self.screen_rect = self.screen.get_rect() self.rect.centerx = self.screen_rect.centerx # 确定人物在游戏窗口中的X位置 self.rect.centery = self.screen_rect.bottom - 30 # 确定人物在游戏窗口中的Y位置 def blit_actor(self): """ 负责在游戏中绘制人物 :return: 无 """ self.screen.blit(self.img, self.rect) 以上代码没有什么出现什么新的知识点,都是对之前所讲的再熟悉利用,所以,这里就不再赘述了。相应的,game_frame.py中的代码也需要做一定的调整。 def run_game(self): # 当游戏开始时候调用此方法 if self.

python离线安装库和添加多个安装源

修改安装源(主要是国内源更方便): 在C:\Users\用户名\建立文件夹pip,然后在里面建立文件pip.ini,文件内容如下(豆瓣源,其它源自己选): [global] index-url = http://pypi.douban.com/simple/ extra-index-url = https://mirrors.aliyun.com/pypi/simple/ [install] trusted-host=pypi.douban.com ps:http就需要添加trusted-host,https就不需要;extra-index-url只能存在一个,存在多个会报错;trusted-host存在多个好像是只有第一个会生效 国内源: 阿里云 https://mirrors.aliyun.com/pypi/simple/ 中国科技大学 https://pypi.mirrors.ustc.edu.cn/simple/ 豆瓣(douban) https://pypi.douban.com/simple/ 清华大学 https://pypi.tuna.tsinghua.edu.cn/simple/ 中国科学技术大学 https://pypi.mirrors.ustc.edu.cn/simple/ 离线下载安装包,用于公司内网安装: pip download 模块名 -d 绝对路径 例如: pip download scapy -d D:\Users\songqiu\Desktop 如果提示不信任源,就加上--trusted-host 源域名 例如: pip download scapy -d D:\Users\songqiu\Desktop --trusted-host pypi.douban.com 下载到本地后,安装方法为: 解压,执行python setup.py install

scrapy中间件 部署 日志

IP代理: 抓取网上免费代理,测试 代理供应商提供的代理(收费) ADSL拨号,每次重新拨号会更换本地IP,但是会有1~3秒延迟 VPN/VPS 虚拟主机(翻墙爬取国外网站) Tor网络(暗网) 洋葱浏览器 自动生成user-agent pip install fake_useragent 导入: from fake_useragent import UserAgent ua_obj = UserAgent() ua_obj.ie ua_obj.chrome ua_obj.random 如果有重复图片、文件,保存到本地只有一份,后续改名只能成功一次,后面再改名。 用商品名称做为图片名保存,如果图片名里有”/”,则保存时会当作路径结点使用。 file_name = “Huawei Mate20 Pro 8GB/128GB 月光灰” if “/” in file_name: file_name.replace(“/”, “-”) 模拟登陆: 直接发送账户密码的POST请求,记录cookie,再发送其他页面的请求 先发送登录页面的get请求,获取登录参数,再发送登录的post请求,提交账户密码和登录参数,并记录cookie,再发送其他页面的请求 直接将cookies保存在请求报头里,直接发送附带登录状态的请求,获取页面。 Scrapyd远程部署和执行爬虫、停止爬虫、监控爬虫运行状态 服务端: 安装客户端和服务器端的工具: 端口: 6800 客户端:pip install scrapyd-client 服务器端:pip install scrapyd 服务器端开启scrapyd服务(提供一个监听6800端口的web) 修改 default_scrapyd.conf 配置文件里的 bind_address 为 0.0.0.0 再开启服务 ubuntu: $ scrapyd 以下全部是客户端的操作: 修改scrapy项目的scrapy.cfg文件,添加 配置名称和url [deploy:scrapyd_Tencent3] url = http://192.