背景介绍

  在文章Keras入门(四)之利用CNN模型轻松破解网站验证码中,其中的验证码图片标记是采用tornado实现的网页实现的。本文将会讲述如何利用tornado来实现图片标记。

  我们的示例图片如下:

我们实现用tornado来实现一个网站,能够很好地帮助我们完成图片标记,也就是我们只需要输入图片中的数字,那么保存后的图片名称就是输入的数字。

  下面,让我们来一起看一下怎么这个功能?

项目结构

  项目的名称为captcha_tagging,项目的完整结构如下:

其中,images文件夹中的图片是我们需要标记的图片,标记完后的图片存放在new_images文件夹,网页模板文件为index.html,控制程序的脚本为server.py。

程序实现

  网页模板文件index.html的完整代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>图片浏览</title>
</head>
<body> <div align="center">
<br><br>
<img src="{{static_url('images/%s' % img_src)}}" style="width:100;height:44"/>
<form action='/index' method='post'>
value: <input type="text" name="rename" /><br>
imgName: <input type="text" name="imgname" value="{{imgname}}"/><br>
<button type="submit">提交</button>
</form>
</div> </body>
</html>

  控制程序的脚本server.py的完整代码如下:

# -*- coding: utf-8 -*-

import cv2
import random
import os.path
import tornado.web
import tornado.ioloop
import tornado.options
import tornado.httpserver
from tornado.options import define, options # 保存图片
def tag_picture(imagepath, name):
image = cv2.imread(imagepath, 1)
cv2.imwrite('%s/new_images/%s.png' % (os.path.dirname(os.path.abspath(__file__)), name), image) #定义端口为9100
define("port", default=9100, type=int) # 随机获取目录下的一张图片
def get_image(dir):
files = os.listdir(dir)
return random.choice(files) class ImageHandler(tornado.web.RequestHandler): # get函数
def get(self):
dir = './static/images'
img_src = get_image(dir)
self.render('index.html', img_src=img_src, imgname=img_src) # post函数
def post(self):
filename = self.get_argument('rename')
imgname = self.get_argument('imgname')
imagepath = os.path.dirname(__file__)+'/static/images/%s' % imgname
tag_picture(imagepath, filename) # 保存新图片
os.system('rm -rf %s' % imagepath) # 删除原图片
print(len(os.listdir('./static/images'))) # 剩余图片数量 dir = './static/images'
img_src = get_image(dir)
self.render('index.html', img_src=img_src, imgname=img_src) # 主函数
def main(): # 开启tornado服务
tornado.options.parse_command_line()
# 定义app
app = tornado.web.Application(
handlers=[(r'/index', ImageHandler)
], # 网页路径控制
template_path=os.path.join(os.path.dirname(__file__), "templates"), # 模板路径
static_path=os.path.join(os.path.dirname(__file__), "static"), # 静态文件路径
)
http_server = tornado.httpserver.HTTPServer(app)
http_server.listen(options.port)
tornado.ioloop.IOLoop.instance().start() main()

程序运行

  运行server.py,在浏览器中输入localhost:9100/index,界面如下:

在value文本框中输入验证码中的数字8513,然后点提交即可,我们就会发现在new_images文件夹下已保存好了我们刚才标记的图片,而且页面会自动跳转至下一张需要标记的图片。

  利用这个程序,我们只需要标记看到的图片,后台会帮你保存标记的结果,并删除原来的图片,提示你还剩多少张图片需要标记,如果显示剩余数量为0,则标记完毕。笔者在将近一小时的时间里标记了1000张验证码。

总结

  想要用神经网络模型去训练数据,那么首先就需要标记好的数据。如果需要自己标记数据的话,这将是非常麻烦且耗时的过程,笔者提供了一种图片标记的思路,希望能给读者一些启发~

本项目已放至Github,地址为:https://github.com/percent4/CAPTCHA-Recognizition 。

注意:本人现已开通微信公众号: Python爬虫与算法(微信号为:easy_web_scrape), 欢迎大家关注哦~~

用tornado实现图片标记的更多相关文章

  1. 【2017-03-20】HTML基础知识、文字标记、图片标记、空格换行、表格、表格嵌套及布局、超链接

    一.HTML基础知识 HTML: 网站(站点) - 网页 网站是由一个或者多个网页组合起来的 HTML作为文件后缀名,可以把文件变为网页 HTML是一门编程语言的名字:超文本标记语言 超越了文字的范畴 ...

  2. ArcGIS-PictureMarkerSymbol-向地图添加图片标记

    1.基于4.13 版本 <link rel="stylesheet" href="https://js.arcgis.com/4.13/esri/themes/li ...

  3. Java 获取Word批注所标记的文本和图片

    [环境配置] 本文将通过Java程序代码来展示如何来获取Word批注所标注的文本和图片.这里使用的Word Jar包工具是Free Spire.Doc for Java,在pom.xml中按如下步骤配 ...

  4. js自动切换图片

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  5. 【读书笔记《Bootstrap 实战》】3.优化站点资源、完成响应式图片、让传送带支持手势

    A.优化站点资源 速度很重要.用户很关心.我们的站点必须加载够快,否则用户就会走人.SEO 也很重要.我们的站点必须加载够快,否者搜索排名就会下降. 明白了这样,我们就来清点一下 [Bootstrap ...

  6. HTML标记语言篇--学习笔记01

    HTML标记语言篇 第1章  HTML基础 1.1 基本概念 WWW 是"World Wide Web"(全球广域网)的缩写,简称为Web,中文又称为"万维网" ...

  7. jquery图片轮播

    <html> <head> <title>position</title> <style type="text/css"> ...

  8. jQueryNotes仿QQ空间添加标记

    jquery-notes有以下特点: 支持添加备注图像 丰富的API 支持标记伸缩 支持更改主题 支持图片标记添加链接 不需要数据库 HTML 首先在页面上放置一张添加标志的图片 <div cl ...

  9. 【Bootstrap】3.优化站点资源、完成响应式图片、让传送带支持手势

    A.优化站点资源 速度很重要.用户很关心.我们的站点必须加载够快,否则用户就会走人.SEO 也很重要.我们的站点必须加载够快,否者搜索排名就会下降. 明白了这样,我们就来清点一下 [Bootstrap ...

随机推荐

  1. 基于 Maven 的多模块 Java ( Spring ) 项目构建

    索引: 开源Spring解决方案--lm.solution 参看代码 GitHub: solution/pom.xml pojo/pom.xml mapper/pom.xml common/pom.x ...

  2. Postman----支持markdown可自动生成接口文档

    1.postman支持markdown作为集合中的请求,对集合和文件夹进行文字描述的方式,您可以嵌入屏幕截图和其他图像已获得更多描述性的介绍. 2.已markdown语法为准,填写自己想要展示的内容 ...

  3. C/C++反三角函数使用注意

    最近写的东西用到了数学库中的acos函数,但是代码在运行的时候有时候会出莫名其妙的错误,比如返回值是个特别大的数. 最后在debug 的时候发现acos返回的数据很奇怪,但是传入的参数明明没有问题,可 ...

  4. 【EXCEL-折线图】百折不挠 | 用EXCEL画出与众不同的折线图(曲线图)

    很多熟悉EXLCE的朋友都知道EXCEL在生成统计图表方面的强大功能,我们在写各类总结.报告.方案等文档时常涉及到各类统计数字,将统计数字用图表的形式展示出来,既直观又美观.下面我分享一种不一样的折线 ...

  5. TensorFlow从1到2(七)线性回归模型预测汽车油耗以及训练过程优化

    线性回归模型 "回归"这个词,既是Regression算法的名称,也代表了不同的计算结果.当然结果也是由算法决定的. 不同于前面讲过的多个分类算法或者逻辑回归,线性回归模型的结果是 ...

  6. HBase的下载、安装与配置

    声明:作者原创,转载注明出处. 作者:帅气陈吃苹果 (一)安装 下载.解压: wget http://mirror.bit.edu.cn/apache/hbase/1.3.1/hbase-1.3.1- ...

  7. Python调用ansible API系列(三)带有callback的执行adhoc和playbook

    在第二篇文章中虽然可以执行adhoc和playbook但是执行结果的输出并不是特别直观,虽然没有报错但是到底什么结果其实你是不知道的尤其是在执行adhoc的时候,这时候我们要利用callback来设置 ...

  8. Bootstarp的安装以及简单的使用方法(pycharm中)

    一.安装 首先打开Bootstarp的官网:https://v3.bootcss.com 下载完成后,解压压缩包,把解压后的文件导入pycham中 在HTML页面中的style中导入bootstrap ...

  9. 企业自主可控免费开源ERP:Odoo采购管理解决方案

    供应商基础资料 1. 所有的供应商基础资料,Odoo开账启用时,期初的客户数据如果大于200条,可以批量导入: 2. 点“采购/采购/供应商”菜单可以查看.编辑修改.搜索所有的供应商基础资料: 3. ...

  10. ArcGIS对SLD样式的支持

    文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/ 1.ArcGISWMS服务对SLD的支持 在完成用geoserver的w ...