首页 文章 精选 留言 我的

精选列表

搜索[万物智联],共10000篇文章
优秀的个人博客,低调大师

万物皆可 Serverless 之云函数 SCF+Kaggle 端到端验证码识别从训练到部署

随着验证码技术的更新换代,传统的验证码识别算法已经越来越无用武之地了。近些年来人工智能迅速发展,尤其是在深度学习神经网络这一块生态尤为繁荣,各种算法和模型层出不穷。 本文来自 Serverless 社区用户「乂乂又又」供稿 今天本文就尝试带大家借助 Kaggle+SCF 快速训练部署一个端到端的通用验证码识别模型,真正的验证码识别从入门到应用的一条龙服务,哈哈哈~ 效果展示 操作步骤 第一步:了解 kaggle 没做过数据科学竞赛的同学,可能不太了解 kaggle 哈。 Kaggle is the world’s largest data science community with powerful tools and resources to help you achieve your data science goals. 这是 kaggle 官网)的自我介绍,简单来说 kaggle 是全球最大的数据科学交流社区,上面有许多关于数据科学的竞赛和数据集,并且提供了一些数据科学在线分析的环境和工具,一直以来吸引了全球大批数据科学爱好者,社区极其繁荣。 这里我们主要是用 kaggle 的 Notebooks 服务里的 kernel 环境来快速在云端训练自己的验证码识别模型。 你可能会问在本地训练不可以吗,为啥非得折腾着上云?哈哈,这还真不是折腾,普通人的电脑算力其实是有限的,而训练模型是需要强大 GPU 算力的支持,不然要训练到猴年马月~ 我们再来看一下 kaggle 上的 kernel 环境的配置: CPU 4核心,16 GB 运行内存 GPU 2核心 13 GB 运行内存 每个 kernel 有 9 小时的运行时长,GPU 资源每周 30 小时使用时长。除了硬件资源之外,kernel 环境里已经配置好了一些机器学习的常用库,包括 Pytorch, Tensorflow 2 等,它的机器学习环境是开箱即用的,零配置,零维护。 Kaggle Notebooks run in a remote computational environment. We provide the hardware—you need only worry about the code. 正如 kaggle notebooks 官方文档所言,kaggle 免费为你提供硬件和机器学习环境,你唯一需要关心的是你的代码。这么好的东西关键还是免费提供的啊,果断选它来训练模型就对了。 第二步:注册 kaggle 账号,新建一个 kernel 环境 账号注册、新建 kernel 等相关问题,网上有很多相关文章,这里不再细说了。 第三步:clone git 仓库,修改成自己的验证码数据集 这里我在 github.com/nickliqian/cnn_captcha项目的基础上,把原项目升级更新到了 Tensorflow 2.0,然后做了个 kaggle 训练 + SCF 部署的通用验证码识别方案。 现在你只需要将我修改好的仓库 https://gitee.com/LoveWJG/tflite_train克隆到本地, 然后按照项目里的 readme 配置一下训练参数,替换一下自己的验证码数据集即可。 第四步:上传项目到 kaggle 开始训练 然后把配置好的项目压缩上传到 kaggle 直接解压按照说明文件进行训练即可。 这里用了 20000 张验证码,训练了 10000 轮左右,大概耗时 30 分钟,还是相当给力的。训练结束后你可以根据仓库里的 readme 文件,把模型、日志文件打包下载到本地,然后再在本地将模型转成 tflite 格式(方便在移动端使用,本地识别验证码),如果模型文件过大你也可以在本地运行 tflite.py 程序把 tflite 模型量化,大概可以把模型文件缩小到原来的 1/4,最终你应该得到一个 .tflite 格式的模型文件。 第五步:使用云函数快速部署验证码识别模型 云函数的创建、配置和发布可参考我之前的系列文章,这里就不再细讲了。 新建一个 python 空白云函数,然后把 scf.py 文件里的代码填到 index.py 里保存。 # -*- coding:utf-8 -*- import io import json import os import time import numpy as np import tensorflow as tf from PIL import Image model_path = "model_quantized.tflite" #模型文件地址 chars = '23456789abcdefghjkmpqrstuvwxy' #验证码字符,顺序要与config.json里的一致 # Load TFLite model and allocate tensors. interpreter = tf.lite.Interpreter(model_path=model_path) interpreter.allocate_tensors() # Get input and output tensors. input_details = interpreter.get_input_details() output_details = interpreter.get_output_details() #将验证码数据转换成模型输入格式 def img2input(img, width, height): tmpe_array = [serverless] for i in range(height): for j in range(width): pixel = img.getpixel((j, i)) tmpe_array.append((0.3*pixel[0]+0.6*pixel[1]+0.1*pixel[2])/255) tmpe_array = np.array(tmpe_array).astype('float32') input_array = np.expand_dims(tmpe_array, axis=0) return input_array #识别验证码 def predict(image): captcha_image = Image.open(io.BytesIO(image)) image_np_expanded = img2input(captcha_image, 100, 50) interpreter.set_tensor(input_details[0]['index'], image_np_expanded) interpreter.invoke() output_data = interpreter.get_tensor(output_details[0]['index']) codes = '' for i in output_data[0]: codes += chars[i] return codes # api网关响应集成 def apiReply(reply, txt=False, content_type='application/json', code=200): return { "isBase64Encoded": False, "statusCode": code, "headers": {'Content-Type': content_type}, "body": json.dumps(reply, ensure_ascii=False) if not txt else str(reply) } #云函数入口 def main_handler(event, context): return apiReply( { "ok": False if not 'image' in event.keys() else True, "message": "请求参数无效" if not 'image' in event.keys() else predict(event['queryString']['image']) } ) 把模型文件上传到云函数根目录,然后配置一下自己的验证码识别模型参数 model_path = "model_quantized.tflite" #模型文件地址 chars = '23456789abcdefghjkmpqrstuvwxy' #验证码字符,顺序要与config.json里的一致 之后给我们的云函数添加一个 API 网关触发器,并启用响应集成,然后发布上线即可 没有问题的话,你只需 GET 一下,就可以返回验证码识别结果了。 api网关+?base64Image=base64编码后的验证码数据 写在最后 本文带大家从头训练并部署了一个通用验证码识别模型。我们再一次看到基于 Serverless 的云函数在开发线上应用的过程中是多么方便和迅速! 如果你对验证码识别比较感兴趣,想要了解更多的识别方案,这里我推荐几个 github 仓库,都是可以直接上手应用的程度。 use cnn recognize captcha by tensorflow 本项目针对字符型图片验证码,使用 tensorflow 实现卷积神经网络,进行验证码识别。 验证码识别-训练 This project is based on CNN/ResNet/DenseNet+GRU/LSTM+CTC/CrossEntropy to realize verification code identification. This project is only for training the model. 验证码识别-部署 This project is based on CNN+BLSTM+CTC to realize verificationtion. This projeccode identificat is only for deployment models. Serverless Framework 30 天试用计划 我们诚邀您来体验最便捷的 Serverless 开发和部署方式。在试用期内,相关联的产品及服务均提供免费资源和专业的技术支持,帮助您的业务快速、便捷地实现 Serverless! 详情可查阅:Serverless Framework 试用计划 One More Thing 3 秒你能做什么?喝一口水,看一封邮件,还是 —— 部署一个完整的 Serverless 应用? 复制链接至 PC 浏览器访问:https://serverless.cloud.tencent.com/deploy/express 3 秒极速部署,立即体验史上最快的 Serverless HTTP 实战开发! 传送门: GitHub: github.com/serverless 官网:serverless.com 欢迎访问:Serverless 中文网,您可以在 最佳实践 里体验更多关于 Serverless 应用的开发! 推荐阅读:《Serverless 架构:从原理、设计到项目实战》

优秀的个人博客,低调大师

【数智化案例展】方太——AI Agent赋能专利查新降本增效

方太集团是中国高端厨电行业的领军企业,长期坚持以技术创新驱动产品升级,是典型的技术密集型制造企业。多年持续高强度的研发投入,为方太积累了雄厚的知识产权资产:截至目前,方太累计拥有的有效授权专利已超过16000件,且每年从研发一线源源不断产生数千件专利提案,并转化为规模可观的新增专利申请。这样的专利体量,一方面构筑起方太在厨电领域坚实的技术壁垒和竞争护城河,另一方面也让公司的知识产权管理工作承受着与日俱增的压力。

资源下载

更多资源
Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册